gina 0.4.5 → 0.4.6
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 +36 -0
- package/CONTRIBUTING.md +2 -2
- package/README.md +10 -8
- package/ROADMAP.md +2 -2
- package/framework/v0.4.6/VERSION +1 -0
- package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css +1 -0
- package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +62 -0
- package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/js/gina.js +934 -42
- package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js +571 -0
- package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.4.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.js +62 -6
- package/framework/v0.4.6/core/controller/controller.render-nunjucks-async.js +788 -0
- package/framework/v0.4.6/core/controller/controller.render-swig-async.js +664 -0
- package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.render-swig.js +52 -5
- package/framework/{v0.4.5 → v0.4.6}/core/gna.js +24 -0
- package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/csp/README.md +35 -0
- package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/csp/src/main.js +136 -2
- package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/storage/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/validator/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/validator/src/main.js +17 -4
- package/framework/{v0.4.5 → v0.4.6}/core/server.isaac.js +2 -2
- package/framework/{v0.4.5 → v0.4.6}/core/server.js +273 -97
- package/framework/{v0.4.5 → v0.4.6}/helpers/data/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/helpers/data/src/main.js +58 -3
- package/framework/{v0.4.5 → v0.4.6}/helpers/json/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/helpers/plugins/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/archiver/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/cache/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/link.js +16 -5
- package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/msg.json +1 -1
- package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/restart.js +11 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/start.js +5 -1
- package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/version.js +24 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/cmd/helper.js +28 -9
- package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/add.js +29 -13
- package/framework/{v0.4.5 → v0.4.6}/lib/collection/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/cron/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/domain/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/index.js +7 -0
- package/framework/{v0.4.5 → v0.4.6}/lib/inherits/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/logger/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/merge/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/model.js +17 -0
- package/framework/{v0.4.5 → v0.4.6}/lib/nunjucks-filters/src/main.js +37 -11
- package/framework/{v0.4.5 → v0.4.6}/lib/routing/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/routing/src/main.js +4 -4
- package/framework/{v0.4.5 → v0.4.6}/lib/swig-filters/package.json +0 -3
- package/framework/{v0.4.5 → v0.4.6}/lib/swig-filters/src/main.js +45 -6
- package/framework/v0.4.6/lib/template-loaders/package.json +17 -0
- package/framework/v0.4.6/lib/template-loaders/src/loaders/http.js +272 -0
- package/framework/v0.4.6/lib/template-loaders/src/loaders/memory.js +75 -0
- package/framework/v0.4.6/lib/template-loaders/src/main.js +134 -0
- package/framework/{v0.4.5 → v0.4.6}/package.json +2 -2
- package/gna.js +4 -4
- package/llms.txt +32 -44
- package/package.json +6 -3
- package/playwright.config.js +35 -0
- package/schema/settings.json +105 -0
- package/types/gna.d.ts +1 -1
- package/framework/v0.4.5/VERSION +0 -1
- package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -1
- package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -555
- package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.4.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/AUTHORS +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/LICENSE +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/html/static.html +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/config.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/content.encoding +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/controller/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/dev/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/locales/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/locales/currency.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/locales/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/mime.types +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/model/entity.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/model/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/model/template/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/router.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/server.express.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/status.codes +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/_gitignore +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/env.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/console.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/context.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/data/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/json/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/path.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/prototypes.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/task.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/helpers/text.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/archiver/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/archiver/build.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/async/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/async/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cache/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cache/build.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/collection/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/collection/build.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/config.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cron/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/domain/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/generator/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/i18n/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/inherits/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/instrument/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/job/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/job/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/logger/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/math/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/merge/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/metrics/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/proc.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/routing/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/routing/build.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/secrets/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/session-store.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/shell.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/state.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/url/README.md +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/url/index.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/url/routing.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/uuid/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/validator.js +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/watcher/package.json +0 -0
- /package/framework/{v0.4.5 → v0.4.6}/lib/watcher/src/main.js +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gina-lib-template-loaders",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Async template-loader extension point for the swig (and, later, nunjucks) render paths. Builds a built-in loader from its flat settings.template.<engine>.loader config (Slice 1: the in-memory loader) and wraps it with a CVE-2023-25345 segment-safety guard applied on every resolve(). Consumed by initSwigEngine (startup build + validation) and controller.render-swig-async.js (the isolated per-bundle swig engine).",
|
|
5
|
+
"authors": [
|
|
6
|
+
{
|
|
7
|
+
"name": "Martin-Luther ETOUMAN",
|
|
8
|
+
"email": "contact@gina.io"
|
|
9
|
+
}
|
|
10
|
+
],
|
|
11
|
+
"copyright": "Copyright (c) 2009-2026 Rhinostone <contact@gina.io>",
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=0.10.22"
|
|
14
|
+
},
|
|
15
|
+
"main": "src/main",
|
|
16
|
+
"license": "MIT"
|
|
17
|
+
}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the gina package.
|
|
3
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @module lib/template-loaders/http
|
|
11
|
+
* @description Built-in HTTP(S)-fetch template loader for the async loader
|
|
12
|
+
* extension point (`settings.template.<engine>.loader.type === "http"`).
|
|
13
|
+
* Resolves each template identifier to an absolute URL under a configured
|
|
14
|
+
* `origin` + `basePath`, fetches the source over node `https`/`http` (no SDK),
|
|
15
|
+
* and caches it via `lib/cache` keyed by the resolved URL — a Tier-1 source
|
|
16
|
+
* cache with an absolute TTL plus opt-in ETag revalidation. Unblocks
|
|
17
|
+
* deployments where templates ship separately from app code (S3 / R2 / GCS /
|
|
18
|
+
* CDN / a CMS endpoint).
|
|
19
|
+
*
|
|
20
|
+
* Loader contract: `resolve(to, from) -> absolute URL`, `load(id, cb)` (arity 2
|
|
21
|
+
* so swig's `getTemplate()` picks the callback load path), `async: true`. The
|
|
22
|
+
* gina CVE-2023-25345 segment-guard (applied by the wrapper in `main.js`)
|
|
23
|
+
* already rejected `..` / absolute identifiers BEFORE `resolve()` runs;
|
|
24
|
+
* `resolve()` adds the origin/basePath CONTAINMENT check — a second,
|
|
25
|
+
* independent boundary that also catches absolute-URL, protocol-relative and
|
|
26
|
+
* host-swap escapes the segment guard cannot see.
|
|
27
|
+
*
|
|
28
|
+
* Identifiers resolve ROOT-relative under `basePath` (a flat namespace: an
|
|
29
|
+
* `{% include "partials/x.html" %}` resolves to `<origin><basePath>/partials/x.html`,
|
|
30
|
+
* not relative to the including template's directory). Parent-relative `../`
|
|
31
|
+
* includes are rejected upstream by the segment guard.
|
|
32
|
+
*
|
|
33
|
+
* @package gina.framework
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
var http = require('http');
|
|
37
|
+
var https = require('https');
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Default source-cache TTL in seconds (absolute, from fetch). 60s bounds
|
|
41
|
+
* staleness even with no revalidation while collapsing per-render fetches to
|
|
42
|
+
* ~once/template/minute under load. Immutable-CDN operators raise it (e.g.
|
|
43
|
+
* `ttl: 86400`); live-CMS operators turn on `revalidate` instead.
|
|
44
|
+
*
|
|
45
|
+
* @constant
|
|
46
|
+
* @inner
|
|
47
|
+
* @type {number}
|
|
48
|
+
*/
|
|
49
|
+
var DEFAULT_TTL_S = 60;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Per-fetch socket timeout (ms). A hung origin must not hang the render.
|
|
53
|
+
*
|
|
54
|
+
* @constant
|
|
55
|
+
* @inner
|
|
56
|
+
* @type {number}
|
|
57
|
+
*/
|
|
58
|
+
var FETCH_TIMEOUT_MS = 10000;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Build an HTTP(S)-fetch loader from its flat config. Validates shape only — it
|
|
62
|
+
* never reaches the backend, so a flaky/unreachable origin at boot is a
|
|
63
|
+
* render-time concern, not a bundle-startup failure (the no-network-probe rule).
|
|
64
|
+
*
|
|
65
|
+
* @param {object} cfg - Loader config (`settings.template.<engine>.loader`)
|
|
66
|
+
* @param {string} cfg.origin - `scheme://host[:port]` of the template origin (no path). http or https.
|
|
67
|
+
* @param {string} [cfg.basePath=""] - Path prefix under origin every identifier resolves against.
|
|
68
|
+
* @param {number} [cfg.ttl=60] - Source-cache TTL in seconds (absolute from fetch). `0` = cache until evicted.
|
|
69
|
+
* @param {boolean} [cfg.revalidate=false] - When true, a cache hit issues a conditional GET (`If-None-Match`).
|
|
70
|
+
* @param {object} [ctx] - Build context (`{ bundle }`) threaded from `initSwigEngine` for cache-key namespacing.
|
|
71
|
+
* @returns {{async: boolean, resolve: function, load: function}} Loader object
|
|
72
|
+
* @throws {Error} When `origin` is missing or not an http(s) URL
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* var http = require('lib/template-loaders/http');
|
|
76
|
+
* var loader = http({ type: 'http', origin: 'https://cdn.example.com', basePath: '/templates' }, { bundle: 'site' });
|
|
77
|
+
* loader.load(loader.resolve('pages/home.html'), function (err, source) { ... });
|
|
78
|
+
*/
|
|
79
|
+
module.exports = function httpLoader(cfg, ctx) {
|
|
80
|
+
if (!cfg || typeof cfg.origin !== 'string' || cfg.origin === '') {
|
|
81
|
+
throw new Error('[template-loader:http] "origin" (scheme://host[:port]) is required');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
var parsedOrigin;
|
|
85
|
+
try {
|
|
86
|
+
parsedOrigin = new URL(cfg.origin);
|
|
87
|
+
} catch (e) {
|
|
88
|
+
throw new Error('[template-loader:http] "origin" must be a valid URL: ' + cfg.origin);
|
|
89
|
+
}
|
|
90
|
+
if (parsedOrigin.protocol !== 'http:' && parsedOrigin.protocol !== 'https:') {
|
|
91
|
+
throw new Error('[template-loader:http] "origin" must use http or https: ' + cfg.origin);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Normalise basePath: leading slash, no trailing slash, "" when absent.
|
|
95
|
+
var basePath = (typeof cfg.basePath === 'string') ? cfg.basePath.trim() : '';
|
|
96
|
+
if (basePath.length > 0) {
|
|
97
|
+
if (basePath.charAt(0) !== '/') { basePath = '/' + basePath; }
|
|
98
|
+
basePath = basePath.replace(/\/+$/, '');
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
var originConst = parsedOrigin.origin; // e.g. https://cdn.example.com
|
|
102
|
+
var containPrefix = originConst + basePath + '/'; // every resolved URL must start with this (note trailing /)
|
|
103
|
+
var transport = (parsedOrigin.protocol === 'http:') ? http : https;
|
|
104
|
+
var ttlSeconds = (typeof cfg.ttl === 'number' && cfg.ttl >= 0) ? cfg.ttl : DEFAULT_TTL_S;
|
|
105
|
+
var revalidate = (cfg.revalidate === true);
|
|
106
|
+
var bundle = (ctx && typeof ctx.bundle === 'string' && ctx.bundle) ? ctx.bundle : 'default';
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Resolve a template identifier to an absolute URL under origin+basePath and
|
|
110
|
+
* containment-check it. The CVE segment-guard (main.js wrapper) already ran
|
|
111
|
+
* on `to`. Resolution is root-relative against `containPrefix` (`from` is not
|
|
112
|
+
* used for path construction — the namespace is flat under basePath); the
|
|
113
|
+
* containment check rejects anything escaping the configured origin/basePath.
|
|
114
|
+
*
|
|
115
|
+
* @inner
|
|
116
|
+
* @param {string} to - Template identifier (page, or an extends/include target)
|
|
117
|
+
* @param {string} [from] - Resolving template's id (unused — flat-namespace resolution)
|
|
118
|
+
* @returns {string} Absolute URL string (also the cache key suffix + load() arg)
|
|
119
|
+
* @throws {Error} When the resolved URL escapes the configured origin/basePath
|
|
120
|
+
*/
|
|
121
|
+
function resolve(to, from) {
|
|
122
|
+
var url;
|
|
123
|
+
try {
|
|
124
|
+
url = new URL(to, containPrefix);
|
|
125
|
+
} catch (e) {
|
|
126
|
+
throw new Error('[template-loader:http] cannot resolve template identifier: ' + to);
|
|
127
|
+
}
|
|
128
|
+
if (url.origin !== originConst || url.href.indexOf(containPrefix) !== 0) {
|
|
129
|
+
throw new Error('[template-loader:http] resolved URL escapes configured origin/basePath: ' + url.href);
|
|
130
|
+
}
|
|
131
|
+
return url.href;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Fetch `url` over the configured transport. Single-settle (error / timeout /
|
|
136
|
+
* end race exactly once). A 304 returns no body. Optional `If-None-Match`
|
|
137
|
+
* makes it a conditional GET.
|
|
138
|
+
*
|
|
139
|
+
* @inner
|
|
140
|
+
* @param {string} url - Absolute URL to fetch
|
|
141
|
+
* @param {?string} etag - When set, sent as `If-None-Match` (conditional GET)
|
|
142
|
+
* @param {function} cb - `(err, statusCode, body, responseEtag)`
|
|
143
|
+
* @returns {void}
|
|
144
|
+
*/
|
|
145
|
+
function fetchUrl(url, etag, cb) {
|
|
146
|
+
var settled = false;
|
|
147
|
+
function settle(err, status, body, respEtag) {
|
|
148
|
+
if (settled) { return; }
|
|
149
|
+
settled = true;
|
|
150
|
+
cb(err, status, body, respEtag);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
var opts = {};
|
|
154
|
+
if (etag) { opts.headers = { 'If-None-Match': etag }; }
|
|
155
|
+
|
|
156
|
+
var req = transport.get(url, opts, function (res) {
|
|
157
|
+
var respEtag = (res.headers && res.headers.etag) ? res.headers.etag : null;
|
|
158
|
+
if (res.statusCode === 304) {
|
|
159
|
+
res.resume(); // drain so the socket frees
|
|
160
|
+
return settle(null, 304, null, etag);
|
|
161
|
+
}
|
|
162
|
+
var chunks = [];
|
|
163
|
+
res.on('data', function (chunk) { chunks.push(chunk); });
|
|
164
|
+
res.on('end', function () {
|
|
165
|
+
settle(null, res.statusCode, Buffer.concat(chunks).toString('utf8'), respEtag);
|
|
166
|
+
});
|
|
167
|
+
res.on('error', function (streamErr) { settle(streamErr); });
|
|
168
|
+
});
|
|
169
|
+
req.on('error', function (reqErr) { settle(reqErr); });
|
|
170
|
+
req.setTimeout(FETCH_TIMEOUT_MS, function () {
|
|
171
|
+
req.destroy(new Error('[template-loader:http] timeout (' + FETCH_TIMEOUT_MS + 'ms) fetching ' + url));
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* The shared gina cache, resolved LAZILY at load time. It is NOT available
|
|
177
|
+
* at loader-build time — `initSwigEngine` builds the loader before the
|
|
178
|
+
* server's shared Map is created in `start()`, so a build-time capture would
|
|
179
|
+
* grab nothing. The request pipeline points `process.gina._cache` at the
|
|
180
|
+
* server Map before any render-driven `load()`. Returns null when absent
|
|
181
|
+
* (e.g. a unit test with no server) so caching is skipped, not crashed.
|
|
182
|
+
*
|
|
183
|
+
* @inner
|
|
184
|
+
* @returns {?object} A `lib.Cache` instance, or null
|
|
185
|
+
*/
|
|
186
|
+
function getCache() {
|
|
187
|
+
return (typeof process.gina === 'object' && process.gina && process.gina._cache) ? process.gina._cache : null;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Cache key for a resolved URL: `tpl:src:<bundle>:<URL>` (mirrors the
|
|
192
|
+
* `static:<bundle>:<url>` convention of the static-HTML response cache, with
|
|
193
|
+
* a distinct `tpl:src:` prefix so the two never collide).
|
|
194
|
+
*
|
|
195
|
+
* @inner
|
|
196
|
+
* @param {string} url - Resolved absolute URL
|
|
197
|
+
* @returns {string} Cache key
|
|
198
|
+
*/
|
|
199
|
+
function cacheKey(url) {
|
|
200
|
+
return 'tpl:src:' + bundle + ':' + url;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return {
|
|
204
|
+
// Dispatch flag — routes the bundle to the async swig delegate and tells
|
|
205
|
+
// swig's renderFile to take the async getTemplate path.
|
|
206
|
+
async: true,
|
|
207
|
+
|
|
208
|
+
resolve: resolve,
|
|
209
|
+
|
|
210
|
+
// Arity 2 (id, cb) so swig.getTemplate() uses the callback load path. A
|
|
211
|
+
// network fetch is callback-only — there is no synchronous return path.
|
|
212
|
+
load: function (id, cb) {
|
|
213
|
+
var cache = getCache();
|
|
214
|
+
var key = cacheKey(id);
|
|
215
|
+
var hit = (cache && typeof cache.get === 'function') ? cache.get(key) : undefined;
|
|
216
|
+
|
|
217
|
+
if (hit && typeof hit.source === 'string') {
|
|
218
|
+
if (!revalidate || !hit.etag) {
|
|
219
|
+
// Fresh hit, no revalidation to do → serve cached source.
|
|
220
|
+
return void cb(null, hit.source);
|
|
221
|
+
}
|
|
222
|
+
// Revalidate via a conditional GET.
|
|
223
|
+
return void fetchUrl(id, hit.etag, function (err, status, body, respEtag) {
|
|
224
|
+
if (err) {
|
|
225
|
+
// Flaky origin during revalidation — serve stale rather
|
|
226
|
+
// than 500 a page that is only slightly out of date.
|
|
227
|
+
return void cb(null, hit.source);
|
|
228
|
+
}
|
|
229
|
+
if (status === 304) {
|
|
230
|
+
// Unchanged — refresh the TTL, serve cached source.
|
|
231
|
+
if (cache) { cache.set(key, makeEntry(hit.source, hit.etag)); }
|
|
232
|
+
return void cb(null, hit.source);
|
|
233
|
+
}
|
|
234
|
+
if (status === 200) {
|
|
235
|
+
if (cache) { cache.set(key, makeEntry(body, respEtag)); }
|
|
236
|
+
return void cb(null, body);
|
|
237
|
+
}
|
|
238
|
+
return void cb(new Error('[template-loader:http] ' + status + ' revalidating ' + id));
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Miss (or expired, or no cache) → unconditional GET.
|
|
243
|
+
return void fetchUrl(id, null, function (err, status, body, respEtag) {
|
|
244
|
+
if (err) { return void cb(err); }
|
|
245
|
+
if (status === 200) {
|
|
246
|
+
if (cache) { cache.set(key, makeEntry(body, respEtag)); }
|
|
247
|
+
return void cb(null, body);
|
|
248
|
+
}
|
|
249
|
+
return void cb(new Error('[template-loader:http] ' + status + ' fetching ' + id));
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Build a cache-entry value. `ttl` (seconds) drives `lib/cache` expiry;
|
|
256
|
+
* `fromMemory` classifies it under "memory" in `/_gina/cache/stats`.
|
|
257
|
+
*
|
|
258
|
+
* @inner
|
|
259
|
+
* @param {string} source - Template source
|
|
260
|
+
* @param {?string} etag - Origin ETag (for revalidation), or null
|
|
261
|
+
* @returns {object} Cache value
|
|
262
|
+
*/
|
|
263
|
+
function makeEntry(source, etag) {
|
|
264
|
+
return {
|
|
265
|
+
source: source,
|
|
266
|
+
etag: etag || null,
|
|
267
|
+
fetchedAt: Date.now(),
|
|
268
|
+
ttl: ttlSeconds,
|
|
269
|
+
fromMemory: true
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the gina package.
|
|
3
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @module lib/template-loaders/memory
|
|
11
|
+
* @description Built-in in-memory template loader for the async loader
|
|
12
|
+
* extension point (`settings.template.<engine>.loader.type === "memory"`).
|
|
13
|
+
* Templates are supplied inline as a flat `identifier -> source` map in the
|
|
14
|
+
* loader config — no filesystem, no network. Useful for tests and small,
|
|
15
|
+
* self-contained template sets.
|
|
16
|
+
*
|
|
17
|
+
* Implements the two-method swig/nunjucks loader contract (`resolve` + `load`)
|
|
18
|
+
* plus the `async: true` dispatch flag. `load` is dual-mode (callback form and
|
|
19
|
+
* synchronous return) with arity 2 so swig's async `getTemplate()` picks the
|
|
20
|
+
* callback load path (it gates on `load.length >= 2`).
|
|
21
|
+
*
|
|
22
|
+
* @package gina.framework
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Build an in-memory loader from a templates map.
|
|
27
|
+
*
|
|
28
|
+
* @param {object} cfg - Loader config (`settings.template.<engine>.loader`)
|
|
29
|
+
* @param {Object.<string,string>} cfg.templates - Flat map of identifier -> source string
|
|
30
|
+
* @returns {{async: boolean, resolve: function, load: function}} Loader object
|
|
31
|
+
* @throws {Error} When `cfg.templates` is not a plain object map
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* var memory = require('lib/template-loaders/memory');
|
|
35
|
+
* var loader = memory({ templates: { 'index.html': '<h1>{{ title }}</h1>' } });
|
|
36
|
+
* loader.load('index.html', function (err, source) { ... });
|
|
37
|
+
*/
|
|
38
|
+
module.exports = function memory(cfg) {
|
|
39
|
+
if (
|
|
40
|
+
!cfg
|
|
41
|
+
|| typeof cfg.templates !== 'object'
|
|
42
|
+
|| cfg.templates === null
|
|
43
|
+
|| Array.isArray(cfg.templates)
|
|
44
|
+
) {
|
|
45
|
+
throw new Error('[template-loader:memory] "templates" must be an object map of identifier -> source string');
|
|
46
|
+
}
|
|
47
|
+
var map = cfg.templates;
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
// Dispatch flag — read by swig's renderFile and by gina's delegate
|
|
51
|
+
// selection (controller.js routes async-loader bundles to the async
|
|
52
|
+
// delegate). Always true for this loader.
|
|
53
|
+
async: true,
|
|
54
|
+
|
|
55
|
+
// Identity resolve — the supplied identifier IS the map key. extends /
|
|
56
|
+
// include targets pass through here too, so the gina CVE segment-guard
|
|
57
|
+
// (applied by the wrapper in main.js) covers the whole transitive chain.
|
|
58
|
+
resolve: function (to, from) {
|
|
59
|
+
return to;
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
// Dual-mode load. Arity 2 (identifier, cb) so swig.getTemplate() uses
|
|
63
|
+
// the callback path; the synchronous return keeps the loader usable by
|
|
64
|
+
// any sync consumer.
|
|
65
|
+
load: function (identifier, cb) {
|
|
66
|
+
if (cb) {
|
|
67
|
+
if (!Object.prototype.hasOwnProperty.call(map, identifier)) {
|
|
68
|
+
return void cb(new Error('[template-loader:memory] template not found: ' + identifier));
|
|
69
|
+
}
|
|
70
|
+
return void cb(null, map[identifier]);
|
|
71
|
+
}
|
|
72
|
+
return map[identifier];
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the gina package.
|
|
3
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @module lib/template-loaders
|
|
11
|
+
* @description Registry + factory for gina's async template-loader extension
|
|
12
|
+
* point (`settings.template.<engine>.loader`). Builds a built-in loader from
|
|
13
|
+
* its flat config — a named `type` plus type-specific keys, mirroring the
|
|
14
|
+
* `connectors.json` convention — and wraps it with a CVE-2023-25345
|
|
15
|
+
* segment-safety guard applied on EVERY `resolve()`, covering the whole
|
|
16
|
+
* transitive extends/include chain (stronger than a first-hop-only guard).
|
|
17
|
+
*
|
|
18
|
+
* Ships two built-ins: `memory` (inline templates, no network) and `http`
|
|
19
|
+
* (HTTP(S)-fetch from a configured origin + basePath, with a TTL'd source cache
|
|
20
|
+
* and opt-in ETag revalidation). A custom project-supplied loader hook lands in
|
|
21
|
+
* a later slice.
|
|
22
|
+
*
|
|
23
|
+
* @package gina.framework
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Built-in loader factories keyed by `type`. Grows one entry per slice.
|
|
28
|
+
*
|
|
29
|
+
* @constant
|
|
30
|
+
* @inner
|
|
31
|
+
* @type {Object.<string, function>}
|
|
32
|
+
*/
|
|
33
|
+
var BUILTINS = {
|
|
34
|
+
memory: require('./loaders/memory'),
|
|
35
|
+
http: require('./loaders/http')
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Assert a template identifier is segment-safe: not absolute and free of any
|
|
40
|
+
* parent-traversal (`..`) segment. Runs on every `resolve()` so it guards the
|
|
41
|
+
* full transitive extends/include chain, not just the first hop
|
|
42
|
+
* (CVE-2023-25345).
|
|
43
|
+
*
|
|
44
|
+
* @inner
|
|
45
|
+
* @param {string} id - Template identifier requested by the engine
|
|
46
|
+
* @returns {void}
|
|
47
|
+
* @throws {Error} When `id` is empty/non-string, absolute, or contains a `..` segment
|
|
48
|
+
*/
|
|
49
|
+
function assertSafeIdentifier(id) {
|
|
50
|
+
if (typeof id !== 'string' || id === '') {
|
|
51
|
+
throw new Error('[template-loader] invalid template identifier: ' + JSON.stringify(id));
|
|
52
|
+
}
|
|
53
|
+
if (id.charAt(0) === '/' || id.charAt(0) === '\\') {
|
|
54
|
+
throw new Error('[template-loader] absolute template path rejected: ' + id);
|
|
55
|
+
}
|
|
56
|
+
var segs = id.split(/[\\/]/);
|
|
57
|
+
for (var i = 0; i < segs.length; i++) {
|
|
58
|
+
if (segs[i] === '..') {
|
|
59
|
+
throw new Error('[CVE-2023-25345] template path traversal blocked: ' + id);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Wrap a built-in (or, later, user-supplied) loader with the gina CVE
|
|
66
|
+
* segment-guard. The guard runs inside `resolve()`; `load` is re-exposed via
|
|
67
|
+
* `.bind()` so its `.length` (arity) is preserved — swig's `getTemplate()`
|
|
68
|
+
* uses `load.length >= 2` to choose the callback load path, so a wrapper that
|
|
69
|
+
* dropped the arity would silently break async loading.
|
|
70
|
+
*
|
|
71
|
+
* @inner
|
|
72
|
+
* @param {object} inner - Loader exposing `resolve(to, from)` + `load(id, cb)` [+ `async`]
|
|
73
|
+
* @returns {{async: boolean, resolve: function, load: function}} Guarded loader
|
|
74
|
+
* @throws {Error} When `inner` does not expose both `resolve()` and `load()`
|
|
75
|
+
*/
|
|
76
|
+
function wrapWithGuard(inner) {
|
|
77
|
+
if (!inner || typeof inner.resolve !== 'function' || typeof inner.load !== 'function') {
|
|
78
|
+
throw new Error('[template-loader] loader must expose resolve(to, from) and load(identifier, cb)');
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
async: inner.async === true,
|
|
82
|
+
resolve: function (to, from) {
|
|
83
|
+
assertSafeIdentifier(to);
|
|
84
|
+
return inner.resolve(to, from);
|
|
85
|
+
},
|
|
86
|
+
// .bind() preserves load.length (arity) — load-bearing for swig's
|
|
87
|
+
// callback-vs-sync load dispatch.
|
|
88
|
+
load: inner.load.bind(inner)
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Build a guarded async loader from its bundle config, or return `null` when
|
|
94
|
+
* no loader is configured. Throws on a bad config so the caller
|
|
95
|
+
* (`initSwigEngine`) can let it propagate and fail bundle startup fast — the
|
|
96
|
+
* same fail-fast contract as `initNunjucksEngine`/`NUNJUCKS_NOT_INSTALLED`.
|
|
97
|
+
*
|
|
98
|
+
* @param {?object} [cfg] - `settings.template.<engine>.loader` (absent -> null)
|
|
99
|
+
* @param {string} cfg.type - Built-in loader name (`"memory"` | `"http"`)
|
|
100
|
+
* @param {object} [ctx] - Build context (`{ bundle }`) forwarded to the built-in factory for cache-key namespacing
|
|
101
|
+
* @returns {?{async: boolean, resolve: function, load: function}} Guarded loader, or null when `cfg` is absent
|
|
102
|
+
* @throws {Error} On unknown `type`, a loader missing `resolve`/`load`, or a built-in's own config error
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* var loader = lib.templateLoaders.build({ type: 'memory', templates: { 'a.html': 'hi' } });
|
|
106
|
+
* // loader.async === true
|
|
107
|
+
* var remote = lib.templateLoaders.build({ type: 'http', origin: 'https://cdn.example.com' }, { bundle: 'site' });
|
|
108
|
+
*/
|
|
109
|
+
function build(cfg, ctx) {
|
|
110
|
+
if (cfg === null || typeof cfg !== 'object') {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
var type = cfg.type;
|
|
114
|
+
if (typeof type !== 'string' || !Object.prototype.hasOwnProperty.call(BUILTINS, type)) {
|
|
115
|
+
throw new Error(
|
|
116
|
+
'[template-loader] unknown loader type ' + JSON.stringify(type) +
|
|
117
|
+
' - expected one of: ' + Object.keys(BUILTINS).join(', ')
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
// The built-in factory validates its own flat config and throws on a bad
|
|
121
|
+
// shape; we let that propagate (fail-fast at bundle startup). `ctx` (e.g.
|
|
122
|
+
// `{ bundle }`) is forwarded for built-ins that namespace by bundle (the
|
|
123
|
+
// http source cache); built-ins that don't need it (memory) ignore it.
|
|
124
|
+
var inner = BUILTINS[type](cfg, ctx);
|
|
125
|
+
return wrapWithGuard(inner);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
module.exports = {
|
|
129
|
+
build: build,
|
|
130
|
+
// Exposed for unit tests and future-slice built-in registration.
|
|
131
|
+
BUILTINS: BUILTINS,
|
|
132
|
+
assertSafeIdentifier: assertSafeIdentifier,
|
|
133
|
+
wrapWithGuard: wrapWithGuard
|
|
134
|
+
};
|
package/gna.js
CHANGED
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
'use strict';
|
|
16
16
|
|
|
17
17
|
// Framework core — the main gna module (lifecycle hooks, lib, etc.)
|
|
18
|
-
var _gna = require('./framework/v0.4.
|
|
18
|
+
var _gna = require('./framework/v0.4.6/core/gna');
|
|
19
19
|
|
|
20
20
|
// SuperController and EntitySuper — loaded from their source modules
|
|
21
|
-
var SuperController = require('./framework/v0.4.
|
|
22
|
-
var EntitySuper = require('./framework/v0.4.
|
|
21
|
+
var SuperController = require('./framework/v0.4.6/core/controller');
|
|
22
|
+
var EntitySuper = require('./framework/v0.4.6/core/model/entity');
|
|
23
23
|
|
|
24
24
|
// uuid — from the lib registry
|
|
25
|
-
var uuid = require('./framework/v0.4.
|
|
25
|
+
var uuid = require('./framework/v0.4.6/lib/uuid');
|
|
26
26
|
|
|
27
27
|
module.exports = {
|
|
28
28
|
|