From e34cfe5af14ff18a68d4a747fd57724d8f5b2530 Mon Sep 17 00:00:00 2001 From: Eneko Nieto Date: Thu, 22 Jan 2026 20:18:06 +0100 Subject: [PATCH] feat: using Bun instead of Node.js\! --- appwrite.config.json | 22 +++--- functions/aemet/.gitignore | 17 ++++- functions/aemet/.prettierrc.json | 6 -- functions/aemet/README.md | 11 +-- functions/aemet/bun.lock | 35 ++++++++++ functions/aemet/env.d.ts | 8 +++ functions/aemet/package-lock.json | 111 ------------------------------ functions/aemet/package.json | 7 +- functions/aemet/src/main.ts | 2 +- functions/aemet/tsconfig.json | 15 ---- 10 files changed, 80 insertions(+), 154 deletions(-) delete mode 100644 functions/aemet/.prettierrc.json create mode 100644 functions/aemet/bun.lock create mode 100644 functions/aemet/env.d.ts delete mode 100644 functions/aemet/package-lock.json delete mode 100644 functions/aemet/tsconfig.json diff --git a/appwrite.config.json b/appwrite.config.json index ad12df0..08516d5 100644 --- a/appwrite.config.json +++ b/appwrite.config.json @@ -40,24 +40,22 @@ }, "functions": [ { - "$id": "696bbbc3002c837e20d9", + "$id": "697270190009ebe7e1a1", "name": "aemet", - "runtime": "node-22", - "specification": "s-1vcpu-512mb", + "runtime": "bun-1.1", + "path": "functions/aemet", + "entrypoint": "src/main.ts", "execute": [ "any" ], - "events": [], - "scopes": [ - "users.read" - ], - "schedule": "", - "timeout": 15, "enabled": true, "logging": true, - "entrypoint": "dist/main.js", - "commands": "npm install && npm run build", - "path": "functions/aemet" + "events": [], + "schedule": "", + "timeout": 15, + "commands": "bun install", + "scopes": [], + "specification": "s-0.5vcpu-512mb" } ] } diff --git a/functions/aemet/.gitignore b/functions/aemet/.gitignore index 46afb6b..42cbc54 100644 --- a/functions/aemet/.gitignore +++ b/functions/aemet/.gitignore @@ -1,3 +1,4 @@ +### Node ### # Logs logs *.log @@ -102,7 +103,6 @@ dist # vuepress v2.x temp and cache directory .temp -.cache # Docusaurus cache and generated files .docusaurus @@ -129,5 +129,20 @@ dist .yarn/install-state.gz .pnp.* +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +# End of https://www.toptal.com/developers/gitignore/api/node + +# OS +## Mac +.DS_Store + # Directory used by Appwrite CLI for local development .appwrite \ No newline at end of file diff --git a/functions/aemet/.prettierrc.json b/functions/aemet/.prettierrc.json deleted file mode 100644 index 0a72520..0000000 --- a/functions/aemet/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "trailingComma": "es5", - "tabWidth": 2, - "semi": true, - "singleQuote": true -} diff --git a/functions/aemet/README.md b/functions/aemet/README.md index 47cc077..c7f43bf 100644 --- a/functions/aemet/README.md +++ b/functions/aemet/README.md @@ -1,4 +1,6 @@ -# aemet +# ⚡ Bun Starter Function + +A simple starter function. Edit `src/main.ts` to get started and create something awesome! 🚀 ## 🧰 Usage @@ -35,11 +37,12 @@ Sample `200` Response: | Setting | Value | | ----------------- | ------------- | -| Runtime | Node (18.0) | -| Entrypoint | `src/main.js` | -| Build Commands | `npm install` | +| Runtime | Bun (1.0) | +| Entrypoint | `src/main.ts` | +| Build Commands | `bun install` | | Permissions | `any` | | Timeout (Seconds) | 15 | +| Scopes | `users.read` | ## 🔒 Environment Variables diff --git a/functions/aemet/bun.lock b/functions/aemet/bun.lock new file mode 100644 index 0000000..8d9a6ec --- /dev/null +++ b/functions/aemet/bun.lock @@ -0,0 +1,35 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "aemet", + "dependencies": { + "fast-xml-parser": "^5.3.3", + "node-appwrite": "^20.2.1", + "typescript": "^5.4.5", + }, + "devDependencies": { + "@types/node": "^22.19.0", + "prettier": "^3.2.5", + }, + }, + }, + "packages": { + "@types/node": ["@types/node@22.19.7", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw=="], + + "fast-xml-parser": ["fast-xml-parser@5.3.3", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA=="], + + "node-appwrite": ["node-appwrite@20.3.0", "", { "dependencies": { "node-fetch-native-with-agent": "1.7.2" } }, "sha512-vaxlpkNTtjkccyngwc9HRSwQQasZ/CJri6KMZ62mlDAM1YdvOgqIM8EYJwvhx/fiHdyjfxithFcmnvzUR9TGTQ=="], + + "node-fetch-native-with-agent": ["node-fetch-native-with-agent@1.7.2", "", {}, "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g=="], + + "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], + + "strnum": ["strnum@2.1.2", "", {}, "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + } +} diff --git a/functions/aemet/env.d.ts b/functions/aemet/env.d.ts new file mode 100644 index 0000000..c84c36a --- /dev/null +++ b/functions/aemet/env.d.ts @@ -0,0 +1,8 @@ +declare module "bun" { + interface Env { + APPWRITE_FUNCTION_API_ENDPOINT: string; + APPWRITE_FUNCTION_PROJECT_ID: string; + } +} + +export {}; diff --git a/functions/aemet/package-lock.json b/functions/aemet/package-lock.json deleted file mode 100644 index 89faeef..0000000 --- a/functions/aemet/package-lock.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "name": "starter-template", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "starter-template", - "version": "1.0.0", - "dependencies": { - "fast-xml-parser": "^5.3.3", - "node-appwrite": "^20.2.1", - "typescript": "^5.4.5" - }, - "devDependencies": { - "@types/node": "^22.19.0", - "prettier": "^3.2.5" - } - }, - "node_modules/@types/node": { - "version": "22.19.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.7.tgz", - "integrity": "sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/fast-xml-parser": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.3.tgz", - "integrity": "sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^2.1.0" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/node-appwrite": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-20.2.1.tgz", - "integrity": "sha512-RweIh+3RHjprsxhWaJzcQr/UDMBMsZCma50TIJ9t3onVgs5jAT9aqFnsMlaaC9QZn1sXpPUQV90W6uvtm64DnQ==", - "license": "BSD-3-Clause", - "dependencies": { - "node-fetch-native-with-agent": "1.7.2" - } - }, - "node_modules/node-fetch-native-with-agent": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz", - "integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==", - "license": "MIT" - }, - "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/strnum": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", - "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - } - } -} diff --git a/functions/aemet/package.json b/functions/aemet/package.json index ebe1879..4d390c4 100644 --- a/functions/aemet/package.json +++ b/functions/aemet/package.json @@ -1,12 +1,11 @@ { - "name": "starter-template", + "name": "aemet", "version": "1.0.0", "description": "", - "main": "src/main.js", + "main": "src/main.ts", "type": "module", "scripts": { - "format": "prettier --write .", - "build": "tsc" + "format": "prettier --write ." }, "dependencies": { "fast-xml-parser": "^5.3.3", diff --git a/functions/aemet/src/main.ts b/functions/aemet/src/main.ts index 9991fc7..960aa51 100644 --- a/functions/aemet/src/main.ts +++ b/functions/aemet/src/main.ts @@ -18,7 +18,7 @@ export default async ({ req, res, log, error }: any) => { throw new Error(`Error! status: ${response.status}`); } - const decoder = new TextDecoder('iso-8859-15'); + const decoder = new TextDecoder('iso-8859-1'); // It should be iso-8859-15 but Bun 1.1 does not support it let xml = decoder.decode(await response.arrayBuffer()) const parser = new XMLParser(); diff --git a/functions/aemet/tsconfig.json b/functions/aemet/tsconfig.json deleted file mode 100644 index ad43694..0000000 --- a/functions/aemet/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "module": "NodeNext", - "rootDir": "src", - "resolveJsonModule": true, - "allowJs": true, - "outDir": "dist", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitAny": true, - "skipLibCheck": true - } -}