diff --git a/.vscode/settings.json b/.vscode/settings.json index b4f5a93..e217e9f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,9 +2,6 @@ "files.exclude": { "**/node_modules": true, // "**/dist": true, - "**/plugins": true, - "**/sample": true, - "**/scripts": true, - "**/template": true, + // "**/plugins": true, } } diff --git a/package.json b/package.json index d718bdd..d23e27c 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "plugins/static", "plugins/websocket", "plugins/session", - "plugins/rate-limit" + "plugins/rate-limit", + "plugins/edge" ], "author": "angga7togk", "license": "MIT", @@ -40,6 +41,7 @@ "@types/ws": "^8.18.1", "chokidar": "^3.6.0", "cookie": "^1.0.2", + "edge.js": "^6.3.0", "esbuild": "^0.25.8", "esbuild-plugin-file-path-extensions": "^2.1.4", "install": "^0.13.0", diff --git a/plugins/edge/CHANGELOG.md b/plugins/edge/CHANGELOG.md new file mode 100644 index 0000000..9ed7ddb --- /dev/null +++ b/plugins/edge/CHANGELOG.md @@ -0,0 +1,7 @@ +# @gaman/ejs + +## 1.0.3 + +### Patch Changes + +- 8f847a3: update diff --git a/plugins/edge/compose.ts b/plugins/edge/compose.ts new file mode 100644 index 0000000..dd2c787 --- /dev/null +++ b/plugins/edge/compose.ts @@ -0,0 +1,9 @@ +import { Edge } from 'edge.js'; + +export type EdgeHandlerFactory = (edge: Edge) => void | Promise; + +export function composeEdgeHandler( + factory: EdgeHandlerFactory, +): EdgeHandlerFactory { + return factory; +} \ No newline at end of file diff --git a/plugins/edge/index.ts b/plugins/edge/index.ts new file mode 100644 index 0000000..df3671f --- /dev/null +++ b/plugins/edge/index.ts @@ -0,0 +1,94 @@ +/** + * @module + * GamanJS integration for the Edge view engine. + * + * @ID Integrasi GamanJS dengan Edge view engine. + */ + +import { DefaultMiddlewareOptions } from '@gaman/common'; +import { composeMiddleware } from '@gaman/core/index.js'; +export * from './compose.js'; + +import { Edge } from 'edge.js'; +import { EdgeHandlerFactory } from './compose.js'; +import { EdgeOptions } from 'edge.js/types'; +import { join } from 'path'; + +/** + * Edge Engine options. + * These options are passed directly to the Edge Engine. + * You can find the full list of supported options at: + * @url https://edgejs.dev/docs/getting_started + * + * @ID Opsi konfigurasi untuk Edge Engine. + * Opsi ini diteruskan langsung ke Edge Engine. + * Daftar lengkap opsi bisa dilihat di: + * @url https://edgejs.dev/docs/getting_started + */ +export interface GamanEdgeOptions + extends EdgeOptions, + DefaultMiddlewareOptions { + /** + * Directory path for views. + * Specifies the root directory where Edge templates are located. + * Default: `src/views`. + * + * @ID Path direktori untuk view. + * Menentukan direktori utama tempat file template Edge disimpan. + * Default: `src/views`. + */ + viewPath?: string; + + /** + * Custom handler for the Edge instance. + * Example: `(edge) => { edge.mount()... }` + * + * @ID Handler kustom untuk instance Edge. + * Contoh: `(edge) => { edge.mount()... }` + */ + handler?: EdgeHandlerFactory; +} + +/** + * Creates an Edge view engine middleware for GamanJS. + * + * @ID Membuat middleware view engine Edge untuk GamanJS. + */ +export function edge(ops: GamanEdgeOptions = {}) { + const { viewPath = 'src/views', handler } = ops; + let edge: Edge; + + const middleware = composeMiddleware(async (_, next) => { + if (!edge) { + edge = Edge.create({ + cache: ops.cache, + loader: ops.loader, + }); + edge.mount(join(process.cwd(), viewPath)); + + await handler?.(edge); + } + + // ? Continue request chain + const res = await next(); + + const renderData = res.view; + if (renderData == null) return res; + + const rendered = await edge.render( + renderData.getName(), + renderData.getData(), + ); + + res.headers.set('Content-Type', 'text/html'); + res.body = rendered; + + return res; + }); + + return middleware({ + priority: ops.priority, + includes: ops.includes, + excludes: ops.excludes, + }); +} diff --git a/plugins/edge/package.json b/plugins/edge/package.json new file mode 100644 index 0000000..2d05e29 --- /dev/null +++ b/plugins/edge/package.json @@ -0,0 +1,24 @@ +{ + "name": "@gaman/edge", + "version": "0.0.1", + "type": "module", + "main": "index.js", + "author": "angga7togk", + "license": "MIT", + "repository": { + "url": "git+https://github.com/7TogkID/gaman.git", + "directory": "plugins/edge" + }, + "bugs": { + "url": "https://github.com/7TogkID/gaman/issues" + }, + "homepage": "https://gaman.7togk.id", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "peerDependencies": { + "edge.js": "*" + }, + "gitHead": "8d1bf3bbac4b72847e9157e2c95d75b5e90c89cf" +} diff --git a/plugins/edge/tsconfig.json b/plugins/edge/tsconfig.json new file mode 100644 index 0000000..1574e96 --- /dev/null +++ b/plugins/edge/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "nodenext", + "composite": true, + "declaration": true, + "declarationMap": false + } +} diff --git a/scripts/yalc-push.sh b/scripts/yalc-push.sh index b7c0bf9..c9c6b3d 100755 --- a/scripts/yalc-push.sh +++ b/scripts/yalc-push.sh @@ -39,6 +39,9 @@ yalc push cd ../rate-limit yalc push +cd ../edge +yalc push + # Return to the root directory cd ../.. diff --git a/test/package-lock.json b/test/package-lock.json index 7e6abe4..8f2186e 100644 --- a/test/package-lock.json +++ b/test/package-lock.json @@ -14,6 +14,7 @@ "@gaman/common": "file:.yalc/@gaman/common", "@gaman/core": "file:.yalc/@gaman/core", "@gaman/cors": "file:.yalc/@gaman/cors", + "@gaman/edge": "file:.yalc/@gaman/edge", "@gaman/ejs": "file:.yalc/@gaman/ejs", "@gaman/nunjucks": "file:.yalc/@gaman/nunjucks", "@gaman/rate-limit": "file:.yalc/@gaman/rate-limit", @@ -71,6 +72,13 @@ "version": "1.0.7", "license": "MIT" }, + ".yalc/@gaman/edge": { + "version": "0.0.1", + "license": "MIT", + "peerDependencies": { + "edge.js": "*" + } + }, ".yalc/@gaman/ejs": { "version": "1.0.3", "license": "MIT", @@ -571,6 +579,10 @@ "resolved": ".yalc/@gaman/cors", "link": true }, + "node_modules/@gaman/edge": { + "resolved": ".yalc/@gaman/edge", + "link": true + }, "node_modules/@gaman/ejs": { "resolved": ".yalc/@gaman/ejs", "link": true @@ -595,6 +607,16 @@ "resolved": ".yalc/@gaman/websocket", "link": true }, + "node_modules/@lukeed/ms": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", + "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -633,6 +655,82 @@ "node": ">= 8" } }, + "node_modules/@poppinss/exception": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.2.tgz", + "integrity": "sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==", + "license": "MIT", + "peer": true + }, + "node_modules/@poppinss/inspect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@poppinss/inspect/-/inspect-1.0.1.tgz", + "integrity": "sha512-kLeEaBSGhlleyYvKc7c9s3uE6xv7cwyulE0EgHf4jU/CL96h0yC4mkdw1wvC1l1PYYQozCGy46FwMBAAMOobCA==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@poppinss/macroable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@poppinss/macroable/-/macroable-1.1.0.tgz", + "integrity": "sha512-y/YKzZDuG8XrpXpM7Z1RdQpiIc0MAKyva24Ux1PB4aI7RiSI/79K8JVDcdyubriTm7vJ1LhFs8CrZpmPnx/8Pw==", + "license": "MIT", + "peer": true + }, + "node_modules/@poppinss/object-builder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@poppinss/object-builder/-/object-builder-1.1.0.tgz", + "integrity": "sha512-FOrOq52l7u8goR5yncX14+k+Ewi5djnrt1JwXeS/FvnwAPOiveFhiczCDuvXdssAwamtrV2hp5Rw9v+n2T7hQg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.6.0" + } + }, + "node_modules/@poppinss/string": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@poppinss/string/-/string-1.7.0.tgz", + "integrity": "sha512-IuCtWaUwmJeAdby0n1a5cTYsBLe7fPymdc4oNTTl1b6l+Ok+14XpSX0ILOEU6UtZ9D2XI3f4TVUh4Titkk1xgw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@lukeed/ms": "^2.0.2", + "@types/bytes": "^3.1.5", + "@types/pluralize": "^0.0.33", + "bytes": "^3.1.2", + "case-anything": "^3.1.2", + "pluralize": "^8.0.0", + "slugify": "^1.6.6", + "truncatise": "^0.0.8" + } + }, + "node_modules/@poppinss/utils": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-6.10.1.tgz", + "integrity": "sha512-da+MMyeXhBaKtxQiWPfy7+056wk3lVIhioJnXHXkJ2/OHDaZfFcyKHNl1R06sdYO8lIRXcXdoZ6LO2ARmkAREA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@poppinss/exception": "^1.2.1", + "@poppinss/object-builder": "^1.1.0", + "@poppinss/string": "^1.3.0", + "flattie": "^1.1.1", + "safe-stable-stringify": "^2.5.0", + "secure-json-parse": "^4.0.0" + }, + "engines": { + "node": ">=18.16.0" + } + }, + "node_modules/@types/bytes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/bytes/-/bytes-3.1.5.tgz", + "integrity": "sha512-VgZkrJckypj85YxEsEavcMmmSOIzkUHqWmM4CCyia5dc54YwsXzJ5uT4fYxBQNEXx+oF1krlhgCbvfubXqZYsQ==", + "license": "MIT", + "peer": true + }, "node_modules/@types/ejs": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", @@ -662,6 +760,13 @@ "license": "MIT", "peer": true }, + "node_modules/@types/pluralize": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.33.tgz", + "integrity": "sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==", + "license": "MIT", + "peer": true + }, "node_modules/a-sync-waterfall": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", @@ -669,6 +774,19 @@ "license": "MIT", "peer": true }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -690,6 +808,16 @@ "license": "MIT", "peer": true }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "peer": true, + "bin": { + "astring": "bin/astring" + } + }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -747,6 +875,29 @@ "license": "MIT", "peer": true }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/case-anything": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-3.1.2.tgz", + "integrity": "sha512-wljhAjDDIv/hM2FzgJnYQg90AWmZMNtESCjTeLH680qTzdo0nErlCxOmgzgX4ZsZAtIvqHyD87ES8QyriXB+BQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -772,6 +923,13 @@ "fsevents": "~2.3.2" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT", + "peer": true + }, "node_modules/commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", @@ -792,6 +950,70 @@ "node": ">=18" } }, + "node_modules/edge-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/edge-error/-/edge-error-4.0.2.tgz", + "integrity": "sha512-jB76VYn8wapDHKHSOmP3vbKLoa77RJYsTLNmfl8+cuCD69uxZtP3h+kqV+Prw/YkYmN7yHyp4IApE15pDByk0A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18.16.0" + } + }, + "node_modules/edge-lexer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/edge-lexer/-/edge-lexer-6.0.3.tgz", + "integrity": "sha512-/s15CNnfhZv97bsW+ZgV5rtONULYjhCDYu+usbVLqZ8UQ6b/hQUNvQSIQBXA6Gql9dm72TMBB9sb/eWM2esufg==", + "license": "MIT", + "peer": true, + "dependencies": { + "edge-error": "^4.0.2" + }, + "engines": { + "node": ">=18.16.0" + } + }, + "node_modules/edge-parser": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/edge-parser/-/edge-parser-9.0.4.tgz", + "integrity": "sha512-vnjzfpqpjM4Mjt9typc1zLoFpC1F6kAObfcdyA6rSy+izIPji2RaQz5jWx5s5iG9hNcuyjtNyGRCLFVfoYhWcA==", + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^8.14.0", + "astring": "^1.9.0", + "edge-error": "^4.0.2", + "edge-lexer": "^6.0.3", + "js-stringify": "^1.0.2" + }, + "engines": { + "node": ">=18.16.0" + } + }, + "node_modules/edge.js": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/edge.js/-/edge.js-6.3.0.tgz", + "integrity": "sha512-Xm7XW6J2+6cvfRK6AJEKV5hBF230iCvwQRg5wattg+RAzQ6tRwWSe4gqCsvvCaHt4xp10xkm8+ZdhApF1FVCzA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@poppinss/inspect": "^1.0.1", + "@poppinss/macroable": "^1.0.4", + "@poppinss/utils": "^6.9.2", + "classnames": "^2.5.1", + "edge-error": "^4.0.2", + "edge-lexer": "^6.0.3", + "edge-parser": "^9.0.4", + "fs-readdir-recursive": "^1.1.0", + "he": "^1.2.0", + "js-stringify": "^1.0.2", + "property-information": "^6.5.0", + "stringify-attributes": "^4.0.0" + }, + "engines": { + "node": ">=18.16.0" + } + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -850,6 +1072,19 @@ "@esbuild/win32-x64": "0.25.8" } }, + "node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -900,6 +1135,23 @@ "node": ">=8" } }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "license": "MIT", + "peer": true + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -941,6 +1193,16 @@ "node": ">= 6" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "peer": true, + "bin": { + "he": "bin/he" + } + }, "node_modules/ip-address": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", @@ -1015,6 +1277,13 @@ "node": ">=10" } }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "license": "MIT", + "peer": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1119,6 +1388,27 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -1198,6 +1488,43 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/secure-json-parse": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz", + "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1219,6 +1546,22 @@ "source-map": "^0.6.0" } }, + "node_modules/stringify-attributes": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/stringify-attributes/-/stringify-attributes-4.0.0.tgz", + "integrity": "sha512-6Hq3K153wTTfhEHb4V/viuqmb0DRn08JCrRnmqc4Q/tmoNuvd4DEyqkiiJXtvVz8ZSUhlCQr7zCpCVTgrelesg==", + "license": "MIT", + "peer": true, + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1232,6 +1575,13 @@ "node": ">=8.0" } }, + "node_modules/truncatise": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/truncatise/-/truncatise-0.0.8.tgz", + "integrity": "sha512-cXzueh9pzBCsLzhToB4X4gZCb3KYkrsAcBAX97JnazE74HOl3cpBJYEV7nabHeG/6/WXCU5Yujlde/WPBUwnsg==", + "license": "MIT", + "peer": true + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", diff --git a/test/package.json b/test/package.json index dd51eb8..18fb526 100644 --- a/test/package.json +++ b/test/package.json @@ -17,6 +17,7 @@ "@gaman/common": "file:.yalc/@gaman/common", "@gaman/core": "file:.yalc/@gaman/core", "@gaman/cors": "file:.yalc/@gaman/cors", + "@gaman/edge": "file:.yalc/@gaman/edge", "@gaman/ejs": "file:.yalc/@gaman/ejs", "@gaman/nunjucks": "file:.yalc/@gaman/nunjucks", "@gaman/rate-limit": "file:.yalc/@gaman/rate-limit", diff --git a/test/src/EdgeHandler.ts b/test/src/EdgeHandler.ts new file mode 100644 index 0000000..e95cf06 --- /dev/null +++ b/test/src/EdgeHandler.ts @@ -0,0 +1,5 @@ +import { composeEdgeHandler } from '@gaman/edge'; + +export default composeEdgeHandler((edge) => { + console.log('ahhahahahahahah'); +}); diff --git a/test/src/controllers/AppController.ts b/test/src/controllers/AppController.ts index fbeac67..0780acb 100644 --- a/test/src/controllers/AppController.ts +++ b/test/src/controllers/AppController.ts @@ -5,8 +5,6 @@ type Params = [AppServiceType]; export default composeController((ser = AppService('asda')) => ({ async Home(ctx) { - return Res.json({ - message: ser.Welcome(), - }); + return Res.render('index', { username: 'Angga' }); }, })); diff --git a/test/src/index.ts b/test/src/index.ts index d7a632c..e42309a 100644 --- a/test/src/index.ts +++ b/test/src/index.ts @@ -8,26 +8,21 @@ import { WebsocketGateway } from '@gaman/websocket'; import { session } from '@gaman/session'; import { nunjucks } from '@gaman/nunjucks'; import { rateLimit } from '@gaman/rate-limit'; +import { edge } from '@gaman/edge'; +import EdgeHandler from './EdgeHandler'; defineBootstrap(async (app) => { app.mount( AppRoutes, - nunjucks(), + edge({ + handler: EdgeHandler, + }), cors({ origin: ['http://127.0.0.1:5500'], credentials: true, }), staticServe(), AppMiddleware(), - rateLimit({ - standardHeaders: true, - draft: 'draft-6', - limit: 5, - ttl: 30_000, - onReceive(info, ctx) { - console.log(info); - }, - }), ); const sessionData: Record = {}; diff --git a/test/src/views/index.edge b/test/src/views/index.edge new file mode 100644 index 0000000..20995de --- /dev/null +++ b/test/src/views/index.edge @@ -0,0 +1,11 @@ + + + + + + +

+ Hello {{ username }} +

+ + diff --git a/test/yalc.lock b/test/yalc.lock index 411828e..f2989a9 100644 --- a/test/yalc.lock +++ b/test/yalc.lock @@ -2,11 +2,11 @@ "version": "v1", "packages": { "@gaman/core": { - "signature": "9998217f2b24e37980a83a313c562903", + "signature": "f13b58a2bc95835fed24f0176cba7c7f", "file": true }, "@gaman/common": { - "signature": "ba0d66e4ddd7ec6229e6db3b2f0817d8", + "signature": "93dbe54dd3c65191ee37545db22daaae", "file": true }, "@gaman/cli": { @@ -45,6 +45,10 @@ "@gaman/rate-limit": { "signature": "b25f5aa4e991b31c38ea60853cb456d4", "file": true + }, + "@gaman/edge": { + "signature": "6f628498569ae92529100d1197ea8145", + "file": true } } } \ No newline at end of file diff --git a/tsconfig.base.json b/tsconfig.base.json index 3f8f787..99de3c4 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -38,7 +38,8 @@ "plugins/static", "plugins/websocket", "plugins/session", - "plugins/rate-limit" + "plugins/rate-limit", + "plugins/edge", ], "exclude": ["node_modules", "dist", "**/*.test.*"] }