aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2025-01-26 12:04:11 +0800
committerkaiwu <kaiwu2004@gmail.com>2025-01-26 12:04:11 +0800
commitce2f648035acb8128b87e4f3c69850a9f4e14a0b (patch)
tree9fb69cac33689f6a642eb5146d8d63c853ff4575
parentf55b20e379a0243659daef61f313ee7229551b38 (diff)
downloadngs-ce2f648035acb8128b87e4f3c69850a9f4e14a0b.tar.gz
ngs-ce2f648035acb8128b87e4f3c69850a9f4e14a0b.zip
update to use quickjs enginev1.0.1
-rw-r--r--README.md1
-rw-r--r--package-lock.json275
-rw-r--r--package.json4
-rw-r--r--src/app/nginx.conf1
-rw-r--r--src/ngs_ffi.mjs30
5 files changed, 12 insertions, 299 deletions
diff --git a/README.md b/README.md
index 1d7ef13..5e4a4c8 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
# ngs
Write functional type-safe nginx script (njs) with [gleam](https://gleam.run)
+The app built conforms `es2020` standard, therefore it requires NJS QuickJS engine.
[![Package Version](https://img.shields.io/hexpm/v/ngs)](https://hex.pm/packages/ngs)
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/ngs/)
diff --git a/package-lock.json b/package-lock.json
index ba2e380..d7ed0b1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,10 +11,6 @@
"dependencies": {
"esbuild": "^0.23.0",
"weakmap-polyfill": "^2.0.4"
- },
- "devDependencies": {
- "@swc/helpers": "^0.5.12",
- "esbuild-plugin-es5": "^2.1.1"
}
},
"node_modules/@esbuild/aix-ppc64": {
@@ -401,252 +397,6 @@
"node": ">=18"
}
},
- "node_modules/@swc/core": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.6.tgz",
- "integrity": "sha512-FZxyao9eQks1MRmUshgsZTmlg/HB2oXK5fghkoWJm/1CU2q2kaJlVDll2as5j+rmWiwkp0Gidlq8wlXcEEAO+g==",
- "dev": true,
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3",
- "@swc/types": "^0.1.12"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/swc"
- },
- "optionalDependencies": {
- "@swc/core-darwin-arm64": "1.7.6",
- "@swc/core-darwin-x64": "1.7.6",
- "@swc/core-linux-arm-gnueabihf": "1.7.6",
- "@swc/core-linux-arm64-gnu": "1.7.6",
- "@swc/core-linux-arm64-musl": "1.7.6",
- "@swc/core-linux-x64-gnu": "1.7.6",
- "@swc/core-linux-x64-musl": "1.7.6",
- "@swc/core-win32-arm64-msvc": "1.7.6",
- "@swc/core-win32-ia32-msvc": "1.7.6",
- "@swc/core-win32-x64-msvc": "1.7.6"
- },
- "peerDependencies": {
- "@swc/helpers": "*"
- },
- "peerDependenciesMeta": {
- "@swc/helpers": {
- "optional": true
- }
- }
- },
- "node_modules/@swc/core-darwin-arm64": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.6.tgz",
- "integrity": "sha512-6lYHey84ZzsdtC7UuPheM4Rm0Inzxm6Sb8U6dmKc4eCx8JL0LfWG4LC5RsdsrTxnjTsbriWlnhZBffh8ijUHIQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-darwin-x64": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.6.tgz",
- "integrity": "sha512-Fyl+8aH9O5rpx4O7r2KnsPpoi32iWoKOYKiipeTbGjQ/E95tNPxbmsz4yqE8Ovldcga60IPJ5OKQA3HWRiuzdw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.6.tgz",
- "integrity": "sha512-2WxYTqFaOx48GKC2cbO1/IntA+w+kfCFy436Ij7qRqqtV/WAvTM9TC1OmiFbqq436rSot52qYmX8fkwdB5UcLQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.6.tgz",
- "integrity": "sha512-TBEGMSe0LhvPe4S7E68c7VzgT3OMu4VTmBLS7B2aHv4v8uZO92Khpp7L0WqgYU1y5eMjk+XLDLi4kokiNHv/Hg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.6.tgz",
- "integrity": "sha512-QI8QGL0HGT42tj7F1A+YAzhGkJjUcvvTfI1e2m704W0Enl2/UIK9v5D1zvQzYwusRyKuaQfbeBRYDh0NcLOGLg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.6.tgz",
- "integrity": "sha512-61AYVzhjuNQAVIKKWOJu3H0/pFD28RYJGxnGg3YMhvRLRyuWNyY5Nyyj2WkKcz/ON+g38Arlz00NT1LDIViRLg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-musl": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.6.tgz",
- "integrity": "sha512-hQFznpfLK8XajfAAN9Cjs0w/aVmO7iu9VZvInyrTCRcPqxV5O+rvrhRxKvC1LRMZXr5M6JRSRtepp5w+TK4kAw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.6.tgz",
- "integrity": "sha512-Aqsd9afykVMuekzjm4X4TDqwxmG4CrzoOSFe0hZrn9SMio72l5eAPnMtYoe5LsIqtjV8MNprLfXaNbjHjTegmA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.6.tgz",
- "integrity": "sha512-9h0hYnOeRVNeQgHQTvD1Im67faNSSzBZ7Adtxyu9urNLfBTJilMllFd2QuGHlKW5+uaT6ZH7ZWDb+c/enx7Lcg==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.6.tgz",
- "integrity": "sha512-izeoB8glCSe6IIDQmrVm6bvR9muk9TeKgmtY7b6l1BwL4BFnTUk4dMmpbntT90bEVQn3JPCaPtUG4HfL8VuyuA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/@swc/helpers": {
- "version": "0.5.12",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz",
- "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@swc/types": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz",
- "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3"
- }
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/esbuild": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz",
@@ -686,31 +436,6 @@
"@esbuild/win32-x64": "0.23.0"
}
},
- "node_modules/esbuild-plugin-es5": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/esbuild-plugin-es5/-/esbuild-plugin-es5-2.1.1.tgz",
- "integrity": "sha512-GRcHLUwjmrjxz9bN24ooTedrBrAVx7+F8M1aD7FFB+7RTHkt7FY8tHAQ9znyzsV16+95ojbTyJLY+HPO0OI7zA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@swc/core": "^1.5.25",
- "@swc/helpers": "^0.5.11",
- "deepmerge": "^4.3.1"
- },
- "engines": {
- "node": ">=12.0"
- },
- "peerDependencies": {
- "esbuild": "*"
- }
- },
- "node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true,
- "license": "0BSD"
- },
"node_modules/weakmap-polyfill": {
"version": "2.0.4",
"resolved": "https://repo.huaweicloud.com/repository/npm/weakmap-polyfill/-/weakmap-polyfill-2.0.4.tgz",
diff --git a/package.json b/package.json
index bb0f8a6..89c7171 100644
--- a/package.json
+++ b/package.json
@@ -13,9 +13,5 @@
"dependencies": {
"esbuild": "^0.23.0",
"weakmap-polyfill": "^2.0.4"
- },
- "devDependencies": {
- "@swc/helpers": "^0.5.12",
- "esbuild-plugin-es5": "^2.1.1"
}
}
diff --git a/src/app/nginx.conf b/src/app/nginx.conf
index 1553688..06f4ad7 100644
--- a/src/app/nginx.conf
+++ b/src/app/nginx.conf
@@ -3,6 +3,7 @@ load_module modules/ngx_http_js_module.so;
events { }
http {
+ js_engine qjs;
js_path "/etc/nginx/njs/";
js_import main from app.js;
diff --git a/src/ngs_ffi.mjs b/src/ngs_ffi.mjs
index 95a5eaa..c4f9016 100644
--- a/src/ngs_ffi.mjs
+++ b/src/ngs_ffi.mjs
@@ -1,9 +1,9 @@
-import { es5Plugin } from 'esbuild-plugin-es5';
import path from 'path';
import { build, context } from 'esbuild'
import { Ok, Error } from "./gleam.mjs"
-const banner = `(function(e){"use strict";if(e.WeakMap){return}var r=Object.prototype.hasOwnProperty;var n=Object.defineProperty&&function(){try{return Object.defineProperty({},"x",{value:1}).x===1}catch(e){}}();var i=function(e,t,r){if(n){Object.defineProperty(e,t,{configurable:true,writable:true,value:r})}else{e[t]=r}};e.WeakMap=function(){function WeakMap(){if(this===void 0){throw new TypeError("Constructor WeakMap requires 'new'")}i(this,"_id",genId("_WeakMap"));if(arguments.length>0){throw new TypeError("WeakMap iterable is not supported")}}i(WeakMap.prototype,"delete",function(e){checkInstance(this,"delete");if(!isObject(e)){return false}var t=e[this._id];if(t&&t[0]===e){delete e[this._id];return true}return false});i(WeakMap.prototype,"get",function(e){checkInstance(this,"get");if(!isObject(e)){return void 0}var t=e[this._id];if(t&&t[0]===e){return t[1]}return void 0});i(WeakMap.prototype,"has",function(e){checkInstance(this,"has");if(!isObject(e)){return false}var t=e[this._id];if(t&&t[0]===e){return true}return false});i(WeakMap.prototype,"set",function(e,t){checkInstance(this,"set");if(!isObject(e)){throw new TypeError("Invalid value used as weak map key")}var r=e[this._id];if(r&&r[0]===e){r[1]=t;return this}i(e,this._id,[e,t]);return this});function checkInstance(e,t){if(!isObject(e)||!r.call(e,"_id")){throw new TypeError(t+" method called on incompatible receiver "+typeof e)}}function genId(e){return e+"_"+rand()+"."+rand()}function rand(){return Math.random().toString().substring(2)}i(WeakMap,"_polyfill",true);return WeakMap}();function isObject(e){return Object(e)===e}})(typeof globalThis!=="undefined"?globalThis:typeof self!=="undefined"?self:typeof window!=="undefined"?window:typeof global!=="undefined"?global:this);`
+const banner = ``
+const footer = `export default exports()`
export function bundle_build(entry, out) {
return new Promise(resolve => {
@@ -12,18 +12,13 @@ export function bundle_build(entry, out) {
bundle: true,
minify: false,
banner: {js : banner},
- footer: {js : "export default app.exports()"},
+ footer: {js : footer},
// keepNames: true,
- format: 'iife',
- globalName: 'app',
+ format: 'esm',
outfile: out,
external: ['querystring', 'crypto'],
- plugins: [es5Plugin()], // # 1. Use esbuild-plugin-es5
- target: ['es5'], // # 2. Set the target to es5
- alias: {
- // # 3. Set the alias to @swc/helpers
- '@swc/helpers': path.dirname('@swc/helpers/package.json'),
- }
+ plugins: [],
+ target: ['es2020'],
}).then(function(r){
resolve(new Ok(undefined))
}).catch(function(e){
@@ -53,18 +48,13 @@ export function bundle_watch(entry, out) {
bundle: true,
minify: true,
banner: {js : banner},
- footer: {js : "export default app.exports()"},
+ footer: {js : footer},
// keepNames: true,
- format: 'iife',
- globalName: 'app',
+ format: 'esm',
outfile: out,
external: ['querystring', 'crypto'],
- plugins: [es5Plugin()], // # 1. Use esbuild-plugin-es5
- target: ['es5'], // # 2. Set the target to es5
- alias: {
- // # 3. Set the alias to @swc/helpers
- '@swc/helpers': path.dirname('@swc/helpers/package.json'),
- }
+ plugins: [],
+ target: ['es2020'],
}).then(function(ctx){
ctx.watch()
console.log(`watching bundle ${entry}...`)