gina 0.5.3-alpha.1 → 0.5.4-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +9 -4
- package/ROADMAP.md +1 -0
- package/bin/cli +20 -5
- package/bin/cmd +34 -1
- package/bin/gina-container +33 -11
- package/framework/v0.5.4-alpha.1/VERSION +1 -0
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.js +5 -2
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +1 -1
- package/framework/v0.5.4-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/config.js +9 -0
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.js +32 -1
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.render-nunjucks-async.js +14 -0
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.render-nunjucks.js +14 -0
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.render-swig-async.js +14 -0
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.render-swig.js +15 -0
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/gna.js +8 -1
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/storage/src/main.js +5 -2
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/server.isaac.js +4 -1
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/server.js +4 -1
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/port/help.txt +11 -0
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/port/set.js +45 -2
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/generator/index.js +18 -3
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/proc.js +4 -1
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/state.js +26 -4
- package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +14 -2
- package/package.json +3 -3
- package/script/check_roadmap_consistency.js +56 -7
- package/utils/helper.js +22 -0
- package/framework/v0.5.3-alpha.1/VERSION +0 -1
- package/framework/v0.5.3-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/AUTHORS +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/LICENSE +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/content.encoding +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/dev/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/locales/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/locales/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/mime.types +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/model/entity.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/model/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/router.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/server.express.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/status.codes +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/console.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/context.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/path.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/task.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/helpers/text.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/async/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/config.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/job/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/job/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/math/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/model.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/session-store.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/shell.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/url/README.md +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/url/index.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/validator.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,22 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|
|
6
6
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## 0.5.3 - 2026-06-14
|
|
10
|
+
|
|
11
|
+
_Patch release — no breaking changes. Finishes the released-response crash-family hardening (a late two-/three-argument `throwError()` and the swig / nunjucks render delegates, including their async variants, no longer crash or emit unhandled rejections when invoked on an already-released response) and adds bundle-boot / startup robustness — atomic `~/.gina` state-file writes, framework command-socket hardening, protection of the framework socket port from a bundle's `--port`, and synchronous boot-failure diagnostics under piped output — plus storage `_id` collision hardening, clearer unresolved-`${secret:KEY}` diagnostics, and the new `gina port:set --force`._
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
* `gina port:set --force` reassigns a port already held by another bundle (the prior holder is evicted from both port maps); without `--force`, an in-use port is still rejected as before. Enables deterministic per-bundle port pinning for one-bundle-per-container deployments.
|
|
15
|
+
### Fixed
|
|
16
|
+
* Hardened the storage plugin's record `_id` generation against same-millisecond collisions by widening the random suffix to 16 base-62 characters, matching the collection ID convention.
|
|
17
|
+
* Containerised and daemonless bundle boot failures no longer exit without a message: the gina-container launcher and the framework boot path now flush the failure reason synchronously before calling process.exit, so a crash on a piped stdout/stderr (the norm under container log collectors) surfaces its cause instead of being truncated.
|
|
18
|
+
* Fixed sub-topic CLI commands (e.g. `gina port:set`, `gina bundle:start`) that were passed `--port` overwriting the framework socket port in `~/.gina/<short>/settings.json` with the bundle port. The corrupted framework port made later online commands fail with "[ gina ] not started" and prevented the bundle from binding its port. The framework-connection flags (`--port`, `--mq-port`, `--host-v4`, `--hostname`, `--debug-port`) are now applied as framework settings only for framework-scoped commands (`gina start`/`stop`/`restart`, `framework:*`); for any other command they are left for that command to interpret.
|
|
19
|
+
* Hardened the framework command socket against a malformed or fragmented payload. The socket handler parsed each incoming TCP chunk as JSON directly, so a partial, empty, or non-JSON payload threw an uncaught exception that dropped the command (and could trigger a framework shutdown). Incoming command data is now accumulated per connection and parsed only once the payload is complete; a payload that is valid JSON but not the expected argument array is ignored instead of crashing.
|
|
20
|
+
* When a ${secret:KEY} placeholder cannot be resolved during config load, the framework now logs the failing key name and the bundle/environment config path at debug level, so operators can pinpoint which secret is unset. Previously the load failed with a generic "Secret resolution failed" message that named neither the key nor the bundle. The propagated error message still intentionally omits the key.
|
|
21
|
+
* Hardened the HTML render delegates (swig and nunjucks, including their async variants) against being invoked after the response was already released. A controller that renders again after a terminal exit — for example an action that fires several parallel self.query() calls and renders a degraded response from the first failure callback, then renders again from a later callback — no longer emits a framework-level unhandled promise rejection; the render delegates now no-op on a released response, matching renderJSON and the streaming delegate.
|
|
22
|
+
* The five ~/.gina state files (main.json, projects.json, settings.json, env.json, locals.json) are now written atomically via a temp file plus rename, so a concurrent boot of many bundles or containers against the same home directory can no longer read a partially-written file and crash on startup.
|
|
23
|
+
* A late `self.throwError(statusCode, error)` call — fired after the response was already sent or released (for example from an async callback that resumes after a redirect) — no longer crashes the bundle. Only the single-argument `throwError(err)` form was previously guarded; the two- and three-argument forms resolved the response reference earlier and could dereference it (on HTTP/2 bundles, or while building the error payload on any bundle) before reaching that guard. These late calls are now logged and ignored, like the single-argument form.
|
|
24
|
+
|
|
9
25
|
## 0.5.2 - 2026-06-13
|
|
10
26
|
### Fixed
|
|
11
27
|
* Fixed an inter-bundle self.query() over HTTP/2 reporting an upstream 502 as success once its retries were exhausted: the 502 response body was handed to the query callback as if it were valid data (and a JSON-shaped body was even relabelled with status 200), so a caller could silently consume a Bad Gateway error page as a real response. Exhausted 502s now surface a typed error to the caller (status 502, code BAD_GATEWAY), matching how timeout, stream-error, and premature-close exhaustion are already reported; non-critical queries still swallow it. (#B34)
|
package/README.md
CHANGED
|
@@ -39,10 +39,15 @@ gina bundle:start api @myproject
|
|
|
39
39
|
open https://localhost:3100
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
## What's in 0.5.
|
|
43
|
-
|
|
44
|
-
- **Released-response crash family
|
|
45
|
-
- **
|
|
42
|
+
## What's in 0.5.3
|
|
43
|
+
|
|
44
|
+
- **Released-response crash family finished (bundle-killing).** The two remaining members are now guarded: a late `self.throwError(statusCode, error)` in its two- and three-argument forms (only the single-argument form was guarded before), and the HTML render delegates (swig and nunjucks, including their async variants) invoked after the response was already released. Both now log-and-ignore or no-op instead of dereferencing the released response — no `uncaughtException`, no SIGTERM, no unhandled promise rejection — matching `renderJSON()` and the streaming delegate.
|
|
45
|
+
- **Atomic `~/.gina` state-file writes.** The five state files (`main.json`, `projects.json`, `settings.json`, `env.json`, `locals.json`) are now written via a temp file plus rename, so a concurrent boot of many bundles or containers against the same home directory can no longer read a partially-written file and crash on startup.
|
|
46
|
+
- **Framework command-socket hardening.** The command socket now accumulates each connection's payload and parses it only once complete; a malformed, partial, or non-JSON payload is ignored instead of throwing an uncaught exception that could drop the command or shut the framework down.
|
|
47
|
+
- **Framework socket port no longer corrupted by bundle flags.** A sub-topic command passed `--port` (e.g. `gina port:set`, `gina bundle:start`) no longer overwrites the framework socket port in `~/.gina/<short>/settings.json` — which previously made later online commands fail with `[ gina ] not started`. The framework-connection flags (`--port`, `--mq-port`, `--host-v4`, `--hostname`, `--debug-port`) now apply as framework settings only for framework-scoped commands.
|
|
48
|
+
- **Boot failures surface their cause.** The `gina-container` launcher and the framework boot path now flush the failure reason synchronously before `process.exit`, so a crash on a piped stdout/stderr (the norm under container log collectors) reports its cause instead of exiting with no message.
|
|
49
|
+
- **`gina port:set --force`.** Reassigns a port already held by another bundle (evicting the prior holder from both port maps); without `--force`, an in-use port is still rejected as before. Enables deterministic per-bundle port pinning for one-bundle-per-container deployments.
|
|
50
|
+
- **Storage `_id` collision hardening** (16 base-62 random suffix, matching the collection ID convention) and **clearer unresolved-`${secret:KEY}` diagnostics** (the failing key name and config path are logged at debug level; the propagated error still omits the key).
|
|
46
51
|
|
|
47
52
|
See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
|
|
48
53
|
|
package/ROADMAP.md
CHANGED
|
@@ -27,6 +27,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
27
27
|
| **Q2 2026** | `0.5.0` ✅ | ESM entry points (dual CJS/ESM `exports` map) · Mixed template engines per bundle (extension-keyed `.njk` / `.swig` dispatch) · Nunjucks Inspector parity — the other items originally targeted here shipped earlier: structured logging (`0.4.5`), Alt-Svc (`0.4.2`), WebSocket over HTTP/2 (`0.4.7`), Inspector production auth (`0.4.0`) |
|
|
28
28
|
| **Q2 2026** | `0.5.1` ✅ | Patch: released-response crash family — late `throwError()` and the HTTP/2 inter-bundle query retry / late-response / redirect-intercept paths no longer kill the bundle · dev-mode hot-reload `module.children` heap leak fixed (OOM under sustained load) · inter-bundle proxy JSON bodies keep their `application/json` label · ROADMAP consistency release gate |
|
|
29
29
|
| **Q2 2026** | `0.5.2` ✅ | Patch: released-response crash family completed across the remaining synchronous controller surface — `renderJSON()` / `redirect()` / `store()` / `push()` / `renderStream()` / request-method + form-rule helpers no longer kill the bundle when called on an already-released response · exhausted HTTP/2 502 retries surface a typed `BAD_GATEWAY` error instead of being consumed as success |
|
|
30
|
+
| **Q2 2026** | `0.5.3` ✅ | Patch: released-response crash family finished — late `throwError(status, error)` (2- and 3-argument forms) and the HTML render delegates (swig / nunjucks + async variants) no longer crash or emit unhandled rejections when invoked on an already-released response · atomic `~/.gina` state-file writes (concurrent multi-bundle / multi-container boot can't read a torn file) · framework command-socket hardened against malformed / fragmented payloads · framework socket port no longer corrupted by a bundle's `--port` · synchronous boot-failure diagnostics under piped stdout/stderr · storage `_id` collision hardening · `gina port:set --force` |
|
|
30
31
|
| **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · CLI Tier 3 (project:move, framework:update, backup/restore, man pages) · Beemaster admin + visual translation editor |
|
|
31
32
|
| **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
|
|
32
33
|
|
package/bin/cli
CHANGED
|
@@ -83,38 +83,53 @@ async function onExec() {
|
|
|
83
83
|
// catching debug|inspect arg
|
|
84
84
|
//process.stdout.write('params '+ params.join(', ') + '\n');
|
|
85
85
|
|
|
86
|
+
// #B40 — Framework-connection params (--port, --mq-port, --host-v4,
|
|
87
|
+
// --hostname, --debug-port) are FRAMEWORK settings. Only hoist them into
|
|
88
|
+
// GINA_* (and persist them to ~/.gina/<short>/settings.json via
|
|
89
|
+
// isUpdateRequired) for framework-scoped commands: bare commands
|
|
90
|
+
// (`start`/`stop`/`restart`/`status`/... — prefixed to `framework:*` below)
|
|
91
|
+
// and explicit `framework:*` commands. For a sub-topic command
|
|
92
|
+
// (`port:set <bundle> --port=N`, `bundle:start <bundle> --port=N`, ...)
|
|
93
|
+
// `--port` is the BUNDLE's port, NOT the framework socket port; hoisting it
|
|
94
|
+
// overwrote settings.json `port` (8124 -> bundle port), so every later
|
|
95
|
+
// online command connected to the wrong framework port and reported
|
|
96
|
+
// "[ gina ] not started". The `--inspect`/`--debug` splice below stays
|
|
97
|
+
// unconditional — `bundle:start ... --inspect=<port>` relies on it.
|
|
98
|
+
var _topic = process.argv[2] || '';
|
|
99
|
+
var isFrameworkScopedCmd = ( _topic.indexOf(':') < 0 || /^framework:/.test(_topic) );
|
|
100
|
+
|
|
86
101
|
if ( params.length > 0 ) {
|
|
87
102
|
for (let p = 0, len = params.length; p < len; ++p) {
|
|
88
103
|
|
|
89
|
-
if ( /^\-\-port/.test(params[p]) ) {
|
|
104
|
+
if ( isFrameworkScopedCmd && /^\-\-port/.test(params[p]) ) {
|
|
90
105
|
let port = params[p].split(/\=/)[1];
|
|
91
106
|
setEnvVar('GINA_PORT', ~~port);// jshint ignore:line
|
|
92
107
|
isUpdateRequired = true;
|
|
93
108
|
continue;
|
|
94
109
|
}
|
|
95
110
|
|
|
96
|
-
if ( /^\-\-mq\-port/.test(params[p]) ) {
|
|
111
|
+
if ( isFrameworkScopedCmd && /^\-\-mq\-port/.test(params[p]) ) {
|
|
97
112
|
let mqPort = params[p].split(/\=/)[1];
|
|
98
113
|
setEnvVar('GINA_MQ_PORT', ~~mqPort);// jshint ignore:line
|
|
99
114
|
isUpdateRequired = true;
|
|
100
115
|
continue;
|
|
101
116
|
}
|
|
102
117
|
|
|
103
|
-
if ( /^\-\-host\-v4/.test(params[p]) ) {
|
|
118
|
+
if ( isFrameworkScopedCmd && /^\-\-host\-v4/.test(params[p]) ) {
|
|
104
119
|
let host = params[p].split(/\=/)[1];
|
|
105
120
|
setEnvVar('GINA_HOST_V4', host);// jshint ignore:line
|
|
106
121
|
isUpdateRequired = true;
|
|
107
122
|
continue;
|
|
108
123
|
}
|
|
109
124
|
|
|
110
|
-
if ( /^\-\-hostname/.test(params[p]) ) {
|
|
125
|
+
if ( isFrameworkScopedCmd && /^\-\-hostname/.test(params[p]) ) {
|
|
111
126
|
hostname = params[p].split(/\=/)[1];
|
|
112
127
|
setEnvVar('GINA_HOSTNAME', hostname);// jshint ignore:line
|
|
113
128
|
isUpdateRequired = true;
|
|
114
129
|
continue;
|
|
115
130
|
}
|
|
116
131
|
|
|
117
|
-
if ( /^\-\-debug(\_|\-)port/.test(params[p]) ) {
|
|
132
|
+
if ( isFrameworkScopedCmd && /^\-\-debug(\_|\-)port/.test(params[p]) ) {
|
|
118
133
|
let port = params[p].split(/\=/)[1];
|
|
119
134
|
setEnvVar('GINA_DEBUG_PORT', ~~port);// jshint ignore:line
|
|
120
135
|
isUpdateRequired = true;
|
package/bin/cmd
CHANGED
|
@@ -41,6 +41,18 @@ function Cmd(opt, runOffine) {
|
|
|
41
41
|
var launchFramework = function(){
|
|
42
42
|
|
|
43
43
|
var framework = net.createServer( function(conn) {//'connection' listener
|
|
44
|
+
|
|
45
|
+
// #B41 — per-connection accumulation buffer for the command JSON
|
|
46
|
+
// payload. The client sends `JSON.stringify(process.argv)` in a
|
|
47
|
+
// single write (bin/cli), but TCP may split or coalesce it across
|
|
48
|
+
// 'data' chunks, so we accumulate and only parse once the payload
|
|
49
|
+
// is complete. A partial chunk fails to parse and we keep waiting;
|
|
50
|
+
// a malformed / empty payload never completes and is ignored here
|
|
51
|
+
// — an unguarded JSON.parse would otherwise throw, surfacing as a
|
|
52
|
+
// [ FRAMEWORK ][ uncaughtException ] that drops the command (and
|
|
53
|
+
// risks a SIGTERM via proc.js).
|
|
54
|
+
var _payload = '';
|
|
55
|
+
|
|
44
56
|
//feedback.
|
|
45
57
|
conn.once('end', function() {
|
|
46
58
|
console.debug('[ CLI ] task completed');
|
|
@@ -57,7 +69,28 @@ function Cmd(opt, runOffine) {
|
|
|
57
69
|
//Receiving.
|
|
58
70
|
conn.on('data', function(data) {
|
|
59
71
|
|
|
60
|
-
|
|
72
|
+
_payload += data.toString();
|
|
73
|
+
|
|
74
|
+
var argv;
|
|
75
|
+
try {
|
|
76
|
+
argv = JSON.parse( _payload );
|
|
77
|
+
} catch (parseErr) {
|
|
78
|
+
// Payload not yet complete (TCP split) — keep accumulating.
|
|
79
|
+
// A non-JSON / empty payload never parses and is ignored,
|
|
80
|
+
// so the framework does not crash on a malformed command.
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Complete payload consumed — reset for any further command on
|
|
84
|
+
// this connection.
|
|
85
|
+
_payload = '';
|
|
86
|
+
|
|
87
|
+
if ( !Array.isArray(argv) ) {
|
|
88
|
+
// Valid JSON but not the expected argv array — drop without
|
|
89
|
+
// crashing (argv.join below would otherwise throw). The
|
|
90
|
+
// real client always sends process.argv (an array).
|
|
91
|
+
console.warn( '[ FRAMEWORK ] ignoring non-argv command payload' );
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
61
94
|
|
|
62
95
|
console.debug( '[ FRAMEWORK ] CMD received "'+ argv.join(' ') +'"' );
|
|
63
96
|
|
package/bin/gina-container
CHANGED
|
@@ -34,6 +34,28 @@ var spawn = require('child_process').spawn;
|
|
|
34
34
|
var binPath = __dirname;
|
|
35
35
|
var ginaPath = binPath.replace(/\/bin$/, '');
|
|
36
36
|
|
|
37
|
+
// ── 0. Synchronous stdout writer ──────────────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* Writes a message synchronously to stdout (fd 1).
|
|
40
|
+
*
|
|
41
|
+
* `process.stdout.write` is ASYNCHRONOUS when stdout is a pipe — the norm under
|
|
42
|
+
* a container log collector (kubectl/Fluentd/Datadog) or a test harness that
|
|
43
|
+
* pipes the launcher's stdio. A `process.stdout.write` immediately followed by
|
|
44
|
+
* `process.exit(1)` therefore loses its message: the process tears down before
|
|
45
|
+
* libuv drains the pipe. Every diagnostic this launcher prints precedes either
|
|
46
|
+
* the bundle spawn or a `process.exit`, so on the failure paths the message
|
|
47
|
+
* vanishes — exactly the empty-log signature seen in the container-boot CI
|
|
48
|
+
* flake. `fs.writeSync(1, …)` blocks until the bytes are handed to the pipe, so
|
|
49
|
+
* the diagnostic always survives. (It does not reproduce on a local TTY, where
|
|
50
|
+
* stdout is synchronous.)
|
|
51
|
+
*
|
|
52
|
+
* @param {string} msg - Message to write to stdout.
|
|
53
|
+
* @returns {void}
|
|
54
|
+
*/
|
|
55
|
+
function out(msg) {
|
|
56
|
+
try { fs.writeSync(1, msg); } catch (e) { /* stdout gone — nothing better to do */ }
|
|
57
|
+
}
|
|
58
|
+
|
|
37
59
|
// ── 1. Bootstrap utils/helper ─────────────────────────────────────────────────
|
|
38
60
|
// Injects globals: _, setEnvVar, getEnvVar, getUserHome, getTmpDir, etc.
|
|
39
61
|
require(ginaPath + '/utils/helper'); // jshint ignore:line
|
|
@@ -117,7 +139,7 @@ if (fs.existsSync(_mainJsonPath)) {
|
|
|
117
139
|
try {
|
|
118
140
|
var _mainData = JSON.parse(fs.readFileSync(_mainJsonPath, 'utf8'));
|
|
119
141
|
if (_mainData.def_framework !== version) {
|
|
120
|
-
|
|
142
|
+
out('[gina-container] def_framework: ' + (_mainData.def_framework || 'unset') + ' → ' + version + '\n');
|
|
121
143
|
_mainData.def_framework = version;
|
|
122
144
|
if (!_mainData.frameworks) { _mainData.frameworks = {}; }
|
|
123
145
|
if (!_mainData.frameworks[shortVersion]) { _mainData.frameworks[shortVersion] = []; }
|
|
@@ -127,7 +149,7 @@ if (fs.existsSync(_mainJsonPath)) {
|
|
|
127
149
|
fs.writeFileSync(_mainJsonPath, JSON.stringify(_mainData, null, 4));
|
|
128
150
|
}
|
|
129
151
|
} catch(e) {
|
|
130
|
-
|
|
152
|
+
out('[gina-container] warn: could not sync def_framework — ' + (e.message || e) + '\n');
|
|
131
153
|
}
|
|
132
154
|
}
|
|
133
155
|
|
|
@@ -146,7 +168,7 @@ for (var a = 0; a < rawArgs.length; a++) {
|
|
|
146
168
|
}
|
|
147
169
|
|
|
148
170
|
if (!bundleName || !projectName) {
|
|
149
|
-
|
|
171
|
+
out('Usage: gina-container <bundle> @<project>\n');
|
|
150
172
|
process.exit(1);
|
|
151
173
|
}
|
|
152
174
|
|
|
@@ -155,7 +177,7 @@ var projectsPath = home + '/projects.json';
|
|
|
155
177
|
var portsReversePath = home + '/ports.reverse.json';
|
|
156
178
|
|
|
157
179
|
if (!fs.existsSync(projectsPath)) {
|
|
158
|
-
|
|
180
|
+
out(
|
|
159
181
|
'[ gina-container ] ' + projectsPath + ' not found.\n' +
|
|
160
182
|
' Run: gina project:import @' + projectName + '\n'
|
|
161
183
|
);
|
|
@@ -169,7 +191,7 @@ var portsReverse = fs.existsSync(portsReversePath)
|
|
|
169
191
|
|
|
170
192
|
var projectEntry = projects[projectName];
|
|
171
193
|
if (!projectEntry) {
|
|
172
|
-
|
|
194
|
+
out(
|
|
173
195
|
'[ gina-container ] project @' + projectName + ' not registered in projects.json\n' +
|
|
174
196
|
' Run: gina project:import @' + projectName + '\n'
|
|
175
197
|
);
|
|
@@ -199,12 +221,12 @@ try {
|
|
|
199
221
|
}
|
|
200
222
|
} catch (err) {
|
|
201
223
|
// fallback: bundles/<bundle>/index.js (mirrors start.js catch block)
|
|
202
|
-
|
|
224
|
+
out('[ gina-container ] manifest.json warning: ' + (err.message || err) + '\n');
|
|
203
225
|
appPath = projectRoot + '/bundles/' + bundleName + '/index.js';
|
|
204
226
|
}
|
|
205
227
|
|
|
206
228
|
if (!fs.existsSync(appPath)) {
|
|
207
|
-
|
|
229
|
+
out('[ gina-container ] bundle entry point not found: ' + appPath + '\n');
|
|
208
230
|
process.exit(1);
|
|
209
231
|
}
|
|
210
232
|
|
|
@@ -239,9 +261,9 @@ var ctxJSON = JSON.stringify({
|
|
|
239
261
|
// stdio: 'inherit' — bundle stdout/stderr go directly to the container's
|
|
240
262
|
// stdout/stderr, which is what K8s log collectors (kubectl logs, Fluentd,
|
|
241
263
|
// Datadog, etc.) expect. No MQ logger intermediary is needed here.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
264
|
+
out('[ gina-container ] Starting ' + bundleName + '@' + projectName + '\n');
|
|
265
|
+
out('[ gina-container ] App: ' + appPath + '\n');
|
|
266
|
+
out('[ gina-container ] Env: ' + env + ' Scope: ' + scope + '\n');
|
|
245
267
|
|
|
246
268
|
var child = spawn(process.argv[0], [appPath, ctxJSON, projectName, bundleName], {
|
|
247
269
|
detached: false,
|
|
@@ -264,7 +286,7 @@ process.on('SIGINT', function() { forwardSignal('SIGINT'); });
|
|
|
264
286
|
|
|
265
287
|
// ── 10. Exit when child exits ─────────────────────────────────────────────────
|
|
266
288
|
child.on('error', function(err) {
|
|
267
|
-
|
|
289
|
+
out('[ gina-container ] failed to spawn bundle: ' + (err.message || err) + '\n');
|
|
268
290
|
process.exit(1);
|
|
269
291
|
});
|
|
270
292
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.4-alpha.1
|
package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.js
RENAMED
|
@@ -20261,8 +20261,11 @@ function StoragePlugin(options) {
|
|
|
20261
20261
|
* */
|
|
20262
20262
|
function collectionInsert(content) {
|
|
20263
20263
|
|
|
20264
|
-
//
|
|
20265
|
-
|
|
20264
|
+
// uuid(16): a 16-char base-62 suffix (62^16) avoids the birthday-paradox
|
|
20265
|
+
// _id collision the 4-char default risks when several records are inserted
|
|
20266
|
+
// within the same millisecond (the Date.now() prefix is shared at ms
|
|
20267
|
+
// granularity). Mirrors the lib/collection #COLL1 size=16 opt-in.
|
|
20268
|
+
content['_id'] = Date.now().toString(36) + '-' + uuid(16);
|
|
20266
20269
|
content['_createdAt'] = new Date().format("isoDateTime");
|
|
20267
20270
|
content['_updatedAt'] = new Date().format("isoDateTime");
|
|
20268
20271
|
|
|
@@ -514,7 +514,7 @@ ra(x.name,a,R)}),na=U.childNodes,fa=0,lLen=na.length,lLen>0)))for(;fa<lLen;++fa)
|
|
|
514
514
|
va.target,'init.'+va.id,function(G){G=null;typeof va.$popins['gina-popin-'+va.id+'-'+x.name]=='undefined'&&(G=B({},xa),ya(G,x));va.isReady=!0;gina.hasPopinHandler=!0;gina.popin=B(gina.popin,va);triggerEvent(gina,va.target,'ready.'+va.id,G)});va.initialized=!0;return va}(e)}});
|
|
515
515
|
function StoragePlugin(n){function D(v){k=JSON.parse(Z.getItem(this.bucket));typeof k[v]=='undefined'&&(k[v]=[],Z.setItem(this.bucket,JSON.stringify(k)),k=JSON.parse(Z.getItem(this.bucket)));p[v]={_collection:v,_bucket:this.bucket};p[v]=O(p[v],ka);return p[v]}function H(v){if(typeof v!=='object')throw Error('filter must be an object');var u=k[this._collection],Y=v.count(),l=0,g=null;if(Y==0)return null;for(var r in u)for(var I in v){var N=typeof v[I]!='boolean'?v[I].toLocaleLowerCase():v[I];v[I]&&
|
|
516
516
|
e.indexOf(N)>-1&&N=='not null'&&typeof u[r][I]!='undefined'&&typeof u[r][I]!=='object'&&u[r][I]===v[I]&&u[r][I]!='null'&&u[r][I]!='undefined'?g.indexOf(u[r][I])<0&&(++l,l===Y&&(g=u[r],g._index=r,g._collection=this._collection,g._bucket=this._bucket)):typeof u[r][I]!='undefined'&&typeof u[r][I]!=='object'&&u[r][I]===v[I]&&(++l,l===Y&&(g=u[r],g._index=r,g._collection=this._collection,g._bucket=this._bucket,g._filter=v))}g&&(g.save=ca);return g}var O=O||require('lib/merge');D=D||require('lib/collection');
|
|
517
|
-
var E=E||require('lib/uuid'),B=B||require('helpers/dateFormat'),X={bucket:'default'},C={},Z=null,p={},k={},e=['not null'],V={bucket:void 0,drop:function(){Z.removeItem(X.bucket);C=null;for(var v in this)delete this[v];return C},Collection:D},ka={insert:function(v){v._id=Date.now().toString(36)+'-'+E();v._createdAt=(new Date).format('isoDateTime');v._updatedAt=(new Date).format('isoDateTime');k[this._collection][k[this._collection].length]=v;Z.setItem(this._bucket,JSON.stringify(k))},find:function(v,
|
|
517
|
+
var E=E||require('lib/uuid'),B=B||require('helpers/dateFormat'),X={bucket:'default'},C={},Z=null,p={},k={},e=['not null'],V={bucket:void 0,drop:function(){Z.removeItem(X.bucket);C=null;for(var v in this)delete this[v];return C},Collection:D},ka={insert:function(v){v._id=Date.now().toString(36)+'-'+E(16);v._createdAt=(new Date).format('isoDateTime');v._updatedAt=(new Date).format('isoDateTime');k[this._collection][k[this._collection].length]=v;Z.setItem(this._bucket,JSON.stringify(k))},find:function(v,
|
|
518
518
|
u){if(!v)return k[this._collection];if(typeof v!=='object')throw Error('filter must be an object');u=k[this._collection];v.count();var Y=0,l=[],g;for(g in u)for(var r in v){var I=typeof v[r]!='boolean'?v[r].toLocaleLowerCase():v[r];v[r]&&e.indexOf(I)>-1&&I=='not null'&&typeof u[g][r]!='undefined'&&typeof u[g][r]!=='object'&&u[g][r]!='null'&&u[g][r]!='undefined'?l.indexOf(u[g][r])<0&&(l[Y]=u[g][r],++Y):typeof u[g][r]!='undefined'&&typeof u[g][r]!=='object'&&u[g][r]===v[r]&&(l[Y]=u[g],++Y)}return l},
|
|
519
519
|
findOne:H,update:null,'delete':function(v){if(typeof v!=='object')throw Error('filter must be an object');var u=JSON.clone(k[this._collection]),Y=0,l=[],g;for(g in u)for(var r in v)v[r]&&e.indexOf(v[r].toLocaleLowerCase())>-1&&v[r].toLowerCase()=='not null'&&typeof u[g][r]!='undefined'&&typeof u[g][r]!=='object'&&u[g][r]!='null'&&u[g][r]!='undefined'?l.indexOf(u[g][r])<0&&(l[Y]=u[g][r],delete k[this._collection][g][r],++Y):typeof u[g][r]!='undefined'&&typeof u[g][r]!=='object'&&u[g][r]===v[r]&&(l[Y]=
|
|
520
520
|
u[g],k[this._collection].splice(g,1),++Y);return l.length>0?(Z.setItem(this._bucket,JSON.stringify(k)),!0):!1},drop:function(v){if(typeof k[this._collection]=='undefined')throw Error('Collection `'+v+'` not found');delete p[this._collection];delete k[this._collection];Z.setItem(this._bucket,JSON.stringify(k))}},ca=function(v){v=v||!1;try{var u=JSON.clone(k),Y=this._index,l=this._collection,g=this._bucket,r=this._filter;this._updatedAt=(new Date).format('isoDateTime');u[l][Y]=O(u[l][Y],this,!0);delete u[l][Y]._index;
|
|
Binary file
|
|
Binary file
|
|
@@ -2795,6 +2795,15 @@ function Config(opt, contextResetNeeded) {
|
|
|
2795
2795
|
try {
|
|
2796
2796
|
secrets.resolve(self.envConf[bundle][env]);
|
|
2797
2797
|
} catch (secretErr) {
|
|
2798
|
+
// #B42 — name the failing secret + config path at debug level so
|
|
2799
|
+
// operators can locate it. The user-facing message intentionally
|
|
2800
|
+
// omits the key (lib/secrets/backends/env.js); the key rides on the
|
|
2801
|
+
// non-enumerable `_ginaSecretKey` and is surfaced here only.
|
|
2802
|
+
console.debug(
|
|
2803
|
+
'[CONFIG][loadBundleConfig] Secret resolution failed for `'
|
|
2804
|
+
+ (secretErr._ginaSecretKey || '<unknown>')
|
|
2805
|
+
+ '` in `'+ bundle +'/'+ env +':'+ scope +'` configuration'
|
|
2806
|
+
);
|
|
2798
2807
|
return callback(secretErr);
|
|
2799
2808
|
}
|
|
2800
2809
|
|
|
@@ -5409,7 +5409,12 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
5409
5409
|
* Late calls: when throwError fires after a response terminal exit has
|
|
5410
5410
|
* already released the per-request refs (`local.res` is null — e.g. an
|
|
5411
5411
|
* entity/query callback resuming after a redirect() sent its 301), the
|
|
5412
|
-
* call is logged and ignored instead of crashing the bundle
|
|
5412
|
+
* call is logged and ignored instead of crashing the bundle. This holds
|
|
5413
|
+
* for every call shape: the 1-arg `throwError(err)` form is caught by the
|
|
5414
|
+
* guard after the errorObject build (#B31), and the 2-arg/3-arg forms —
|
|
5415
|
+
* whose `res` is already the released `local.res` before that build — are
|
|
5416
|
+
* caught by an up-front guard so the HTTP/2 `res.stream` and the
|
|
5417
|
+
* errorObject-build `res.error` reads can't deref null first (#B44).
|
|
5413
5418
|
*
|
|
5414
5419
|
* @param {object} [ res ]
|
|
5415
5420
|
* @param {number} code
|
|
@@ -5436,6 +5441,32 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
5436
5441
|
res = local.res;
|
|
5437
5442
|
}
|
|
5438
5443
|
|
|
5444
|
+
// #B44 — for the 2-arg `throwError(code, Error|string)` and 3-arg
|
|
5445
|
+
// `throwError(local.res, code, msg)` shapes, `res` is already `local.res`
|
|
5446
|
+
// here (set by the shift above, or passed by the caller) — which is null
|
|
5447
|
+
// when a terminal exit has released the response. The reads below all
|
|
5448
|
+
// deref `res` BEFORE the #B31 guard further down: `res.stream` in the
|
|
5449
|
+
// protocol branch (HTTP/2 bundles crash there) and `res.error` /
|
|
5450
|
+
// `res.stack` / `res.message` / `res.fallback` in the errorObject build
|
|
5451
|
+
// (every bundle crashes there). So a released response would crash
|
|
5452
|
+
// (uncaughtException → SIGTERM) instead of being ignored. Bail up-front
|
|
5453
|
+
// with the same no-op contract as the #B31 guard. The 1-arg shapes keep
|
|
5454
|
+
// a truthy `res` (the Error/errorObj) here, so they are unaffected and
|
|
5455
|
+
// still reach the #B31 guard after `res` is reassigned to `local.res` at
|
|
5456
|
+
// the end of the errorObject build.
|
|
5457
|
+
if ( !res ) {
|
|
5458
|
+
self.isProcessingError = true;
|
|
5459
|
+
var _b44LateError = msg || code;
|
|
5460
|
+
var _b44LateErrorStr = '';
|
|
5461
|
+
try {
|
|
5462
|
+
_b44LateErrorStr = ( _b44LateError && typeof(_b44LateError) == 'object' ) ? JSON.stringify(_b44LateError) : String(_b44LateError || '');
|
|
5463
|
+
} catch (_b44JsonErr) {
|
|
5464
|
+
_b44LateErrorStr = String(_b44LateError);
|
|
5465
|
+
}
|
|
5466
|
+
console.warn('[ Controller ] throwError() called after the response was released — ignoring late error: '+ _b44LateErrorStr);
|
|
5467
|
+
return false;
|
|
5468
|
+
}
|
|
5469
|
+
|
|
5439
5470
|
var protocol = getResponseProtocol(res);
|
|
5440
5471
|
var stream = ( /http\/2/.test(protocol) && res.stream ) ? res.stream : null;
|
|
5441
5472
|
var header = ( /http\/2/.test(protocol) && res.stream ) ? {} : null;
|
|
@@ -512,6 +512,20 @@ module.exports = async function renderNunjucksAsync(userData, displayInspector,
|
|
|
512
512
|
var res = local.res;
|
|
513
513
|
var _next = local.next;
|
|
514
514
|
|
|
515
|
+
// #B45 — released-response guard. render() can be re-entered on a controller
|
|
516
|
+
// instance whose terminal exit already nulled the per-request triplet — e.g.
|
|
517
|
+
// an action that fired several parallel self.query() calls against a downed
|
|
518
|
+
// upstream: the first failure callback renders a degraded response and
|
|
519
|
+
// releases the triplet, then a later callback re-enters render() here with
|
|
520
|
+
// local.res === null. A later res.stream / setResources(local.req.headers)
|
|
521
|
+
// deref then throws; since render() is async, that escapes as an unhandled
|
|
522
|
+
// promise rejection. Nothing to render to a response already sent/released —
|
|
523
|
+
// no-op. Mirrors render-json.js (#B36) / render-stream.js (#B38); distinct
|
|
524
|
+
// from the #M1 in-flight null-out the captures above isolate.
|
|
525
|
+
if ( local.res == null ) {
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
|
|
515
529
|
// #HDR5/#HDR16 — per-request CSP nonce (set on req by gina.plugins.Csp({useNonce:true})).
|
|
516
530
|
var _cspNonce = (req && req._ginaCspNonce) ? req._ginaCspNonce : null;
|
|
517
531
|
|
package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.render-nunjucks.js
RENAMED
|
@@ -968,6 +968,20 @@ module.exports = async function renderNunjucks(userData, displayInspector, errOp
|
|
|
968
968
|
var res = local.res;
|
|
969
969
|
var _next = local.next;
|
|
970
970
|
|
|
971
|
+
// #B45 — released-response guard. render() can be re-entered on a controller
|
|
972
|
+
// instance whose terminal exit already nulled the per-request triplet — e.g.
|
|
973
|
+
// an action that fired several parallel self.query() calls against a downed
|
|
974
|
+
// upstream: the first failure callback renders a degraded response and
|
|
975
|
+
// releases the triplet, then a later callback re-enters render() here with
|
|
976
|
+
// local.res === null. A later res.stream / setResources(local.req.headers)
|
|
977
|
+
// deref then throws; since render() is async, that escapes as an unhandled
|
|
978
|
+
// promise rejection. Nothing to render to a response already sent/released —
|
|
979
|
+
// no-op. Mirrors render-json.js (#B36) / render-stream.js (#B38); distinct
|
|
980
|
+
// from the #M1 in-flight null-out the captures above isolate.
|
|
981
|
+
if ( local.res == null ) {
|
|
982
|
+
return;
|
|
983
|
+
}
|
|
984
|
+
|
|
971
985
|
// #HDR5 — per-request CSP nonce (set on req by gina.plugins.Csp({useNonce:true})).
|
|
972
986
|
// Mirrored onto every framework-injected inline <script> so a bundle can drop
|
|
973
987
|
// 'unsafe-inline' from script-src. Threaded into injectAssets() (which has no
|
package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.render-swig-async.js
RENAMED
|
@@ -426,6 +426,20 @@ module.exports = async function renderSwigAsync(userData, displayInspector, errO
|
|
|
426
426
|
var res = local.res;
|
|
427
427
|
var _next = local.next;
|
|
428
428
|
|
|
429
|
+
// #B45 — released-response guard. render() can be re-entered on a controller
|
|
430
|
+
// instance whose terminal exit already nulled the per-request triplet — e.g.
|
|
431
|
+
// an action that fired several parallel self.query() calls against a downed
|
|
432
|
+
// upstream: the first failure callback renders a degraded response and
|
|
433
|
+
// releases the triplet, then a later callback re-enters render() here with
|
|
434
|
+
// local.res === null. A later res.stream / setResources(local.req.headers)
|
|
435
|
+
// deref then throws; since render() is async, that escapes as an unhandled
|
|
436
|
+
// promise rejection. Nothing to render to a response already sent/released —
|
|
437
|
+
// no-op. Mirrors render-json.js (#B36) / render-stream.js (#B38); distinct
|
|
438
|
+
// from the #M1 in-flight null-out the captures above isolate.
|
|
439
|
+
if ( local.res == null ) {
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
|
|
429
443
|
// No-view short-circuit (e.g. redirect responses reach render() without a
|
|
430
444
|
// configured template).
|
|
431
445
|
if (!hasViews || !hasViews()) {
|
package/framework/{v0.5.3-alpha.1 → v0.5.4-alpha.1}/core/controller/controller.render-swig.js
RENAMED
|
@@ -186,6 +186,21 @@ module.exports = async function render(userData, displayInspector, errOptions, d
|
|
|
186
186
|
var req = local.req;
|
|
187
187
|
var res = local.res;
|
|
188
188
|
var _next = local.next;
|
|
189
|
+
|
|
190
|
+
// #B45 — released-response guard. render() can be re-entered on a controller
|
|
191
|
+
// instance whose terminal exit already nulled the per-request triplet — e.g.
|
|
192
|
+
// an action that fired several parallel self.query() calls against a downed
|
|
193
|
+
// upstream: the first failure callback renders a degraded response and
|
|
194
|
+
// releases the triplet, then a later callback re-enters render() here with
|
|
195
|
+
// local.res === null. A later res.stream / setResources(local.req.headers)
|
|
196
|
+
// deref then throws; since render() is async, that escapes as an unhandled
|
|
197
|
+
// promise rejection. Nothing to render to a response already sent/released —
|
|
198
|
+
// no-op. Mirrors render-json.js (#B36) / render-stream.js (#B38); distinct
|
|
199
|
+
// from the #M1 in-flight null-out the captures above isolate.
|
|
200
|
+
if ( local.res == null ) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
|
|
189
204
|
// #H10 — opt-in HTTP/2 response trailers (registered via self.sendTrailers()).
|
|
190
205
|
var _trailers = (local._trailers && typeof(local._trailers) === 'object') ? local._trailers : null;
|
|
191
206
|
// #HDR5 — per-request CSP nonce (set on req by gina.plugins.Csp({useNonce:true})).
|
|
@@ -431,6 +431,10 @@ var abort = function(err, bundle) {
|
|
|
431
431
|
console.emerg(err.stack||err);
|
|
432
432
|
}
|
|
433
433
|
|
|
434
|
+
// Guarantee the abort reason survives process.exit(): process.stdout/stderr
|
|
435
|
+
// are async on a pipe (e.g. under bin/gina-container), so the console.emerg
|
|
436
|
+
// above is truncated by the immediate exit. fs.writeSync blocks until flushed.
|
|
437
|
+
try { fs.writeSync(2, '[ FRAMEWORK ] abort: ' + ((err && err.stack) || err) + '\n'); } catch (_e) { /* best-effort */ }
|
|
434
438
|
process.exit(1);
|
|
435
439
|
};
|
|
436
440
|
|
|
@@ -695,7 +699,10 @@ gna.mount = process.mount = function(bundlesPath, source, target, type, callback
|
|
|
695
699
|
|
|
696
700
|
} catch (err) {
|
|
697
701
|
if (err) {
|
|
698
|
-
|
|
702
|
+
var _mountMsg = '[ FRAMEWORK ] '+ (err.stack||err.message);
|
|
703
|
+
console.emerg(_mountMsg);
|
|
704
|
+
// Guarantee the reason survives process.exit() on an async pipe (e.g. bin/gina-container).
|
|
705
|
+
try { fs.writeSync(2, _mountMsg + '\n'); } catch (_e) { /* best-effort */ }
|
|
699
706
|
process.exit(1)
|
|
700
707
|
}
|
|
701
708
|
if ( fs.existsSync(target) ) {
|
|
@@ -223,8 +223,11 @@ function StoragePlugin(options) {
|
|
|
223
223
|
* */
|
|
224
224
|
function collectionInsert(content) {
|
|
225
225
|
|
|
226
|
-
//
|
|
227
|
-
|
|
226
|
+
// uuid(16): a 16-char base-62 suffix (62^16) avoids the birthday-paradox
|
|
227
|
+
// _id collision the 4-char default risks when several records are inserted
|
|
228
|
+
// within the same millisecond (the Date.now() prefix is shared at ms
|
|
229
|
+
// granularity). Mirrors the lib/collection #COLL1 size=16 opt-in.
|
|
230
|
+
content['_id'] = Date.now().toString(36) + '-' + uuid(16);
|
|
228
231
|
content['_createdAt'] = new Date().format("isoDateTime");
|
|
229
232
|
content['_updatedAt'] = new Date().format("isoDateTime");
|
|
230
233
|
|
|
@@ -488,7 +488,10 @@ function ServerEngineClass(options) {
|
|
|
488
488
|
cert: readSync(options.credentials.certificate)
|
|
489
489
|
};
|
|
490
490
|
} catch(err) {
|
|
491
|
-
|
|
491
|
+
var _credMsg = 'You are trying to start a secured server (https) wihtout suficient credentials: check your `server settings`\n'+ err.stack;
|
|
492
|
+
console.emerg(_credMsg);
|
|
493
|
+
// Guarantee the reason survives process.exit() on an async pipe (e.g. bin/gina-container).
|
|
494
|
+
try { fs.writeSync(2, _credMsg + '\n'); } catch (_e) { /* best-effort */ }
|
|
492
495
|
process.exit(1)
|
|
493
496
|
}
|
|
494
497
|
}
|
|
@@ -691,7 +691,10 @@ function Server(options) {
|
|
|
691
691
|
self.emit('configured', false, engine.instance, engine.middleware, self.conf[self.appName][self.env]);
|
|
692
692
|
|
|
693
693
|
} catch (err) {
|
|
694
|
-
|
|
694
|
+
var _engineMsg = '[ BUNDLE ] [ '+ self.appName +' ] ServerEngine ' + err.stack;
|
|
695
|
+
console.emerg(_engineMsg)
|
|
696
|
+
// Guarantee the reason survives process.exit() on an async pipe (e.g. bin/gina-container).
|
|
697
|
+
try { fs.writeSync(2, _engineMsg + '\n'); } catch (_e) { /* best-effort */ }
|
|
695
698
|
process.exit(1)
|
|
696
699
|
}
|
|
697
700
|
}
|
|
@@ -56,6 +56,17 @@
|
|
|
56
56
|
|
|
57
57
|
Ports 4100-4199 are reserved for Gina infrastructure and will be rejected.
|
|
58
58
|
|
|
59
|
+
Reassign a port already held by another bundle (--force)
|
|
60
|
+
----------
|
|
61
|
+
|
|
62
|
+
By default, setting a port that another bundle/environment already holds is
|
|
63
|
+
rejected. Pass --force to take the port anyway: the prior holder is evicted
|
|
64
|
+
(it loses that port for the protocol/scheme and re-pins itself the next time
|
|
65
|
+
its own context runs port:set). This is the intended shape for one-bundle-per-
|
|
66
|
+
container deployments that pin each bundle to a fixed port.
|
|
67
|
+
|
|
68
|
+
$ gina port:set <bundle_name> @<project_name> --protocol=<protocol> --scheme=<scheme> --port=<port_number> --env=<environment> --force
|
|
69
|
+
|
|
59
70
|
[ Listing port numbers ]
|
|
60
71
|
|
|
61
72
|
$ gina port:list <bundle_name> @<project_name>
|