From 658c42246c93b967b8cf8c9ef3c9af4673511021 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Fri, 4 Aug 2023 16:37:23 +0100 Subject: [PATCH 1/2] feat: TypeScript starter --- .../markdown-table-workflow/index.js | 3 +- node-typscript/starter/.gitignore | 130 +++++++++++++++ node-typscript/starter/.prettierrc.json | 6 + node-typscript/starter/README.md | 49 ++++++ node-typscript/starter/package-lock.json | 152 ++++++++++++++++++ node-typscript/starter/package.json | 19 +++ node-typscript/starter/src/main.ts | 40 +++++ node-typscript/starter/tsconfig.json | 15 ++ 8 files changed, 413 insertions(+), 1 deletion(-) create mode 100644 node-typscript/starter/.gitignore create mode 100644 node-typscript/starter/.prettierrc.json create mode 100644 node-typscript/starter/README.md create mode 100644 node-typscript/starter/package-lock.json create mode 100644 node-typscript/starter/package.json create mode 100644 node-typscript/starter/src/main.ts create mode 100644 node-typscript/starter/tsconfig.json diff --git a/.github/workflows/markdown-table-workflow/index.js b/.github/workflows/markdown-table-workflow/index.js index 965e4b51..6eeb209e 100644 --- a/.github/workflows/markdown-table-workflow/index.js +++ b/.github/workflows/markdown-table-workflow/index.js @@ -9,7 +9,8 @@ const verboseRuntimes = { dotnet: ".NET", java: "Java", kotlin: "Kotlin", - node: "Node.js", + node: "Node", + "node-typescript": "Node (TypeScript)", php: "PHP", python: "Python", ruby: "Ruby", diff --git a/node-typscript/starter/.gitignore b/node-typscript/starter/.gitignore new file mode 100644 index 00000000..6a7d6d8e --- /dev/null +++ b/node-typscript/starter/.gitignore @@ -0,0 +1,130 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* \ No newline at end of file diff --git a/node-typscript/starter/.prettierrc.json b/node-typscript/starter/.prettierrc.json new file mode 100644 index 00000000..0a725205 --- /dev/null +++ b/node-typscript/starter/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true +} diff --git a/node-typscript/starter/README.md b/node-typscript/starter/README.md new file mode 100644 index 00000000..daaa2866 --- /dev/null +++ b/node-typscript/starter/README.md @@ -0,0 +1,49 @@ +# ⚡ Node (TypeScript) Starter Function + +A simple starter function. Edit `src/main.ts` to get started and create something awesome! 🚀 + +## 🧰 Usage + +### `GET` + +- Returns a "Hello, World!" message. + +**Response** + +Sample `200` Response: + +```text +Hello, World! +``` + +### `POST`, `PUT`, `PATCH`, `DELETE` + +- Returns a "Learn More" JSON response. + +**Response** + +Sample `200` Response: + +```json +{ + "motto": "Build Fast. Scale Big. All in One Place.", + "learn": "https://appwrite.io/docs", + "connect": "https://appwrite.io/discord", + "getInspired": "https://builtwith.appwrite.io" +} +``` + +## ⚙️ Configuration + +| Setting | Value | +| ----------------- | --------------- | +| Runtime | Node (18.0) | +| Entrypoint | `dist/main.js` | +| Build Commands | `npm install` | +| | `npm run build` | +| Permissions | `any` | +| Timeout (Seconds) | 15 | + +## 🔒 Environment Variables + +No environment variables required. diff --git a/node-typscript/starter/package-lock.json b/node-typscript/starter/package-lock.json new file mode 100644 index 00000000..9c6f1f70 --- /dev/null +++ b/node-typscript/starter/package-lock.json @@ -0,0 +1,152 @@ +{ + "name": "starter-template", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "starter-template", + "version": "1.0.0", + "dependencies": { + "node-appwrite": "^9.0.0", + "typescript": "^5.1.6" + }, + "devDependencies": { + "@types/node": "^20.4.7", + "prettier": "^3.0.0" + } + }, + "node_modules/@types/node": { + "version": "20.4.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz", + "integrity": "sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-appwrite": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-9.0.0.tgz", + "integrity": "sha512-iTcHbuaJfr6bP/HFkRVV+FcaumKkbINqZyypQdl+tYxv6Dx0bkB/YKUXGYfTkgP18TLPWQQB++OGQhi98dlo2w==", + "dependencies": { + "axios": "^1.3.6", + "form-data": "^4.0.0" + } + }, + "node_modules/prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", + "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + } + } +} diff --git a/node-typscript/starter/package.json b/node-typscript/starter/package.json new file mode 100644 index 00000000..3cb32d75 --- /dev/null +++ b/node-typscript/starter/package.json @@ -0,0 +1,19 @@ +{ + "name": "starter-template", + "version": "1.0.0", + "description": "", + "main": "src/main.ts", + "type": "module", + "scripts": { + "format": "prettier --write .", + "build": "tsc" + }, + "dependencies": { + "node-appwrite": "^9.0.0", + "typescript": "^5.1.6" + }, + "devDependencies": { + "@types/node": "^20.4.7", + "prettier": "^3.0.0" + } +} diff --git a/node-typscript/starter/src/main.ts b/node-typscript/starter/src/main.ts new file mode 100644 index 00000000..205a116f --- /dev/null +++ b/node-typscript/starter/src/main.ts @@ -0,0 +1,40 @@ +import { Client } from 'node-appwrite'; + +type Context = { + req: any; + res: any; + log: (m: string) => void; + error: (m: string) => void; +}; + +// This is your Appwrite function +// It's executed each time we get a request +export default async ({ req, res, log, error }: Context) => { + // Why not try the Appwrite SDK? + // + // const client = new Client() + // .setEndpoint('https://cloud.appwrite.io/v1') + // .setProject(process.env.APPWRITE_FUNCTION_PROJECT_ID) + // .setKey(process.env.APPWRITE_API_KEY); + + // You can log messages to the console + log('Hello, Logs!'); + + // If something goes wrong, log an error + error('Hello, Errors!'); + + // The `req` object contains the request data + if (req.method === 'GET') { + // Send a response with the res object helpers + // `res.send()` dispatches a string back to the client + return res.send('Hello, World!'); + } + + // `res.json()` is a handy helper for sending JSON + return res.json({ + motto: 'Build Fast. Scale Big. All in One Place.', + learn: 'https://appwrite.io/docs', + connect: 'https://appwrite.io/discord', + getInspired: 'https://builtwith.appwrite.io', + }); +}; diff --git a/node-typscript/starter/tsconfig.json b/node-typscript/starter/tsconfig.json new file mode 100644 index 00000000..ad436948 --- /dev/null +++ b/node-typscript/starter/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "rootDir": "src", + "resolveJsonModule": true, + "allowJs": true, + "outDir": "dist", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitAny": true, + "skipLibCheck": true + } +} From c97e7c58e64c2eb85f0f4a8e23b34366522c6a6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sat, 5 Aug 2023 15:05:16 +0000 Subject: [PATCH 2/2] PR review changes --- .../workflows/markdown-table-workflow/index.js | 4 ++-- node-typscript/starter/README.md | 17 ++++++++--------- node-typscript/starter/package.json | 2 +- node-typscript/starter/src/main.ts | 4 ++-- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/.github/workflows/markdown-table-workflow/index.js b/.github/workflows/markdown-table-workflow/index.js index 6eeb209e..4f43eb3a 100644 --- a/.github/workflows/markdown-table-workflow/index.js +++ b/.github/workflows/markdown-table-workflow/index.js @@ -9,8 +9,8 @@ const verboseRuntimes = { dotnet: ".NET", java: "Java", kotlin: "Kotlin", - node: "Node", - "node-typescript": "Node (TypeScript)", + node: "Node.js", + "node-typescript": "Node.js (TypeScript)", php: "PHP", python: "Python", ruby: "Ruby", diff --git a/node-typscript/starter/README.md b/node-typscript/starter/README.md index daaa2866..145617d2 100644 --- a/node-typscript/starter/README.md +++ b/node-typscript/starter/README.md @@ -1,4 +1,4 @@ -# ⚡ Node (TypeScript) Starter Function +# ⚡ Node.js (TypeScript) Starter Function A simple starter function. Edit `src/main.ts` to get started and create something awesome! 🚀 @@ -35,14 +35,13 @@ Sample `200` Response: ## ⚙️ Configuration -| Setting | Value | -| ----------------- | --------------- | -| Runtime | Node (18.0) | -| Entrypoint | `dist/main.js` | -| Build Commands | `npm install` | -| | `npm run build` | -| Permissions | `any` | -| Timeout (Seconds) | 15 | +| Setting | Value | +| ----------------- | ------------------------------ | +| Runtime | Node (18.0) | +| Entrypoint | `dist/main.js` | +| Build Commands | `npm install && npm run build` | +| Permissions | `any` | +| Timeout (Seconds) | 15 | ## 🔒 Environment Variables diff --git a/node-typscript/starter/package.json b/node-typscript/starter/package.json index 3cb32d75..426d6c77 100644 --- a/node-typscript/starter/package.json +++ b/node-typscript/starter/package.json @@ -2,7 +2,7 @@ "name": "starter-template", "version": "1.0.0", "description": "", - "main": "src/main.ts", + "main": "dist/main.js", "type": "module", "scripts": { "format": "prettier --write .", diff --git a/node-typscript/starter/src/main.ts b/node-typscript/starter/src/main.ts index 205a116f..25266fed 100644 --- a/node-typscript/starter/src/main.ts +++ b/node-typscript/starter/src/main.ts @@ -3,8 +3,8 @@ import { Client } from 'node-appwrite'; type Context = { req: any; res: any; - log: (m: string) => void; - error: (m: string) => void; + log: (msg: any) => void; + error: (msg: any) => void; }; // This is your Appwrite function