gina 0.5.24 → 0.5.25
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 +19 -0
- package/README.md +15 -10
- package/ROADMAP.md +7 -0
- package/bin/cli +1 -0
- package/framework/v0.5.25/VERSION +1 -0
- package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/js/gina.js +63 -7
- package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +236 -236
- package/framework/v0.5.25/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.25/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.5.24 → v0.5.25}/core/connectors/couchbase/index.js +45 -7
- package/framework/{v0.5.24 → v0.5.25}/core/connectors/mongodb/index.js +2 -2
- package/framework/{v0.5.24 → v0.5.25}/core/connectors/mysql/index.js +2 -2
- package/framework/{v0.5.24 → v0.5.25}/core/connectors/postgresql/index.js +2 -2
- package/framework/{v0.5.24 → v0.5.25}/core/connectors/scylladb/index.js +2 -2
- package/framework/{v0.5.24 → v0.5.25}/core/connectors/sqlite/index.js +2 -2
- package/framework/{v0.5.24 → v0.5.25}/core/controller/controller.js +79 -4
- package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/validator/src/main.js +63 -7
- package/framework/{v0.5.24 → v0.5.25}/core/router.js +32 -1
- package/framework/{v0.5.24 → v0.5.25}/core/server.isaac.js +7 -1
- package/framework/{v0.5.24 → v0.5.25}/core/server.js +158 -2
- package/framework/{v0.5.24 → v0.5.25}/core/template/conf/settings.json +41 -1
- package/framework/{v0.5.24 → v0.5.25}/lib/audit/src/main.js +24 -2
- package/framework/{v0.5.24 → v0.5.25}/lib/authz-gate/src/main.js +426 -11
- package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/openapi.js +123 -3
- package/framework/v0.5.25/lib/cmd/controller/add.js +244 -0
- package/framework/v0.5.25/lib/cmd/controller/arguments.json +8 -0
- package/framework/v0.5.25/lib/cmd/controller/help.txt +105 -0
- package/framework/v0.5.25/lib/cmd/controller/inc/args.js +54 -0
- package/framework/v0.5.25/lib/cmd/controller/inc/namespace.js +127 -0
- package/framework/v0.5.25/lib/cmd/controller/inc/reference-rewrite.js +82 -0
- package/framework/v0.5.25/lib/cmd/controller/inc/reference-scan.js +301 -0
- package/framework/v0.5.25/lib/cmd/controller/inc/scaffold.js +282 -0
- package/framework/v0.5.25/lib/cmd/controller/remove.js +457 -0
- package/framework/v0.5.25/lib/cmd/controller/rename.js +483 -0
- package/framework/v0.5.25/lib/cmd/controller/rm.js +6 -0
- package/framework/v0.5.25/lib/connector-error/package.json +17 -0
- package/framework/v0.5.25/lib/connector-error/src/main.js +296 -0
- package/framework/{v0.5.24 → v0.5.25}/lib/index.js +8 -0
- package/framework/{v0.5.24 → v0.5.25}/lib/nunjucks-filters/src/main.js +17 -4
- package/framework/{v0.5.24 → v0.5.25}/lib/swig-filters/src/main.js +17 -4
- package/framework/{v0.5.24 → v0.5.25}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +21 -61
- package/package.json +3 -3
- package/schema/settings.json +67 -0
- package/types/index.d.ts +2 -0
- package/framework/v0.5.24/VERSION +0 -1
- package/framework/v0.5.24/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.24/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/AUTHORS +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/LICENSE +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/config.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/content.encoding +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/dev/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/gna.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/locales/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/locales/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/mime.types +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/model/entity.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/model/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/server.express.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/status.codes +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/console.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/context.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/path.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/task.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/helpers/text.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/async/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/audit/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/audit-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/config.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/dto/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/image-build/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/job/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/job/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/job-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/math/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/model.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/proc.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/session-store.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/shell.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/state.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/url/README.md +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/url/index.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/validator.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.24 → v0.5.25}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,25 @@ 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.25 - 2026-07-25
|
|
10
|
+
### Added
|
|
11
|
+
* controller:add scaffolds a NAMESPACE controller inside a bundle and prints the paste-ready routing.json rules to wire it. It generates controllers/controller.<name>.js with one JSDoc'd action stub per --controls entry (or a single default action when --controls is omitted), auto-detecting the bundle flavor: a view bundle gets self.render() stubs plus one template per action at templates/html/<name>/<action>.html, while an API-only bundle gets self.renderJSON() stubs and no templates. --api / --views force the flavor. The routing rules are PRINTED for you to paste — routing.json is never edited — so restart the bundle after wiring them. Controller and action names are validated (a lowercase letter followed by letters, digits or underscores; `controller` is reserved), and an existing controller is refused rather than overwritten. Offline CLI command — no bundle rebuild.
|
|
12
|
+
* controller:remove (and its controller:rm alias) removes a namespace controller from a bundle, but only after a reference-aware safety scan. Because a routing rule that names a namespace with no matching controller file silently falls back to the default controller.js rather than erroring, a bare delete is unsafe: controller:remove scans routing.json (both the rule-level namespace and param.namespace) plus requireController() calls across the bundle, and REFUSES the removal if any still point at the controller, listing each one so you can repoint it first. It never edits routing.json. When clean, it confirms interactively, then deletes the controller file and its templates/html/<name>/ tree. --dry-run previews the plan and any blockers, --force deletes the file even with blockers (leaving the references for you to clean up by hand), and --format=json emits a machine-readable envelope. Offline CLI command — no bundle rebuild.
|
|
13
|
+
* controller:rename renames a namespace controller in place, rewriting the structured references to the old namespace so nothing dangles. It moves controllers/controller.<old>.js to controller.<new>.js, moves the templates/html/<old>/ tree, and rewrites the old namespace at the two sites it can do safely: the routing.json namespace values (both the rule-level namespace and param.namespace, via anchored comment-preserving string edits — comments and ordering survive) and every requireController() call. Unlike controller:remove, rename DOES edit routing.json, but only those values. A full plan is shown first, then it confirms interactively before applying all-or-nothing (snapshot-guarded rollback on failure). Anything a static rewrite cannot resolve — a variable namespace, a non-literal requireController() argument, or the cosmetic controller class name — is REPORTED for you to fix by hand, never rewritten. --dry-run previews, --force applies without the prompt, and --format=json emits a machine-readable envelope. Offline CLI command — no bundle rebuild.
|
|
14
|
+
* Added `settings.swig.autoescape` (boolean, default false) to opt in to HTML-escaping of Swig `{{ variable }}` output as an XSS defense, mirroring the existing `settings.nunjucks.autoescape` (default true). Swig's escaping default is unchanged in this release — set the flag to true per bundle to enable it. A non-boolean value now refuses bundle startup, so the security toggle can never be silently mis-typed.
|
|
15
|
+
* Added `server.proxy.requireForwardedHeaders` (settings.json, opt-in, declared in the published schema): when true, a request is classified as reverse-proxied ONLY when it carries an X-Forwarded-Host header — the port-less-Host heuristic is disabled, so internal service-DNS calls can never rewrite the worker's proxy-host context. This is the deterministic option for deployments whose front proxy always sends X-Forwarded-Host, and the only mechanism that also protects renders with no request of their own (worker/cron-driven rendering). Defaults to false (historical heuristic unchanged).
|
|
16
|
+
* Added GET /_gina/health/check on the default (express) engine, mirroring the isaac engine's existing liveness endpoint. It returns 200 with {"status":"healthy","timestamp":<ISO>}, is deliberately ungated (no admin allowlist, no dev gate) so container liveness probes reach it off-loopback, and stays in sync with the isaac fast-path per the /_gina/* built-in endpoint rule. Previously only the isaac engine served it, so bundles on the express engine had no ungated liveness target and had to run the isaac engine just to satisfy a Docker or Kubernetes healthcheck. Server-side only — no bundle rebuild; restart to apply.
|
|
17
|
+
* Added cross-service request-id propagation. The always-on request id (req._ginaReqId, resolved from a sanitised inbound X-Request-Id or a fresh UUID) is now forwarded as x-request-id on every outbound self.query() call — the file-download proxy path plus both the HTTP/1 and HTTP/2 inter-bundle client paths — so one logical request stays correlatable as it fans out across bundles. A caller that sets x-request-id explicitly is never overwritten, and only the sanitised resolved id is forwarded (never a raw inbound header). The server also echoes X-Request-Id back on every response (both engines), so a caller, load balancer, or APM can read the id off the wire; the echo is independent of log format and guarded against an already-sent response. Server-side only — no bundle rebuild; restart to apply.
|
|
18
|
+
* Machine-caller authentication for app routes (MS3): a request presenting `Authorization: Bearer <key>` matching a caller named in `settings.json > auth.machine.callers` now passes the authorization gate without a session — it satisfies `requireAuth`, its configured roles match route `roles` exactly like a session user's, and route policies receive it as `{ name, roles, machine: true }`. Session wins when both are present. Strictly opt-in and fail-closed (`auth.machine.enabled` defaults false; the boot lint refuses malformed shapes); keys support `${secret:KEY}` placeholders and are compared in constant time against boot-computed sha256 hashes — raw keys are not retained after boot. A presented-but-invalid key gets a clean 401 with `WWW-Authenticate: Bearer` (never the login bounce); audit records carry the caller name as the actor key plus `machine: true`, and `self.hasRole()` answers the caller's configured roles.
|
|
19
|
+
* The staged upload progress indicator (`data-gina-form-upload-progress`) gains a `processing` lifecycle state, stamped on `data-gina-upload-progress-state` the moment the browser finishes sending the bytes (`xhr.upload.onloadend`) — the window during which the server post-processes the upload (rendering a preview, transcoding, scanning) before it responds. On a fast link the bytes finish in milliseconds while the server window can run for seconds, during which the bar would otherwise sit frozen at a full `uploading` state; the new state advances the state attribute ONLY, leaving the bar full (value/max/the percent attribute untouched) so a styled bar can show a distinct processing affordance via CSS instead of appearing stuck, and a native indeterminate bar keeps its animation running. Purely additive and i18n-neutral (no wording is hardcoded): a consumer that does not style the new state sees the bar stay full, exactly as before. Browser-bundled — re-bake bundles to pick it up.
|
|
20
|
+
* Authorization contract in `bundle:openapi` — gated routes (`param.requireAuth` / `param.roles` / `param.policy`) now emit a `401` response entry (plus a `403` when roles or a policy add authorization beyond authentication), and when machine-caller auth (`settings.json > auth.machine`) is configured the spec gains `components.securitySchemes.bearerAuth` (`http`/`bearer`) plus a per-operation `security` requirement on gated routes. Role and policy names are never emitted into the spec; an un-gated, un-configured bundle's spec is unchanged.
|
|
21
|
+
* Datastore query errors now carry a transient-vs-permanent classification, so an application can tell a self-healing failure from a real one without string-matching vendor error text. When a connector query fails, the error reaching your controller is stamped with `err.isTransient` (true when a retry after backoff can succeed — a datastore timeout, a dropped connection, a node warming up after a restart, rebalance or failover) and `err.transientReason`, a normalized token naming the condition (`socket:econnrefused`, `postgres:serialization-failure`, `mongo:transient-transaction`, `couchbase:timeout`, …). A controller can branch on it to render an honest "temporarily unavailable, please retry" instead of a generic 500 for a condition that clears itself in seconds. The classifier normalizes signals every driver already carries — socket errno, driver error codes and class names, ANSI SQLSTATE classes, MongoDB error labels, Couchbase N1QL cause codes — across all six datastore connectors (Couchbase, MongoDB, MySQL, PostgreSQL, ScyllaDB, SQLite), and is deliberately conservative: an unrecognized error, or one that is genuinely permanent such as a DNS misconfiguration (ENOTFOUND) or a duplicate key, classifies as permanent. Purely additive — it sets only those two fields, never alters existing ones, and never throws, so nothing changes for code that ignores them. Server-side; restart to pick it up.
|
|
22
|
+
### Fixed
|
|
23
|
+
* A file input that declares only its staging upload action (`data-gina-form-upload-action`) and relies on route defaults for the rest no longer emits a spurious warning-and-error pair — nor writes a visible error into the form's error container — on every bind (and re-bind). The delete action (`data-gina-form-upload-delete-action`, which removes an already-saved file) deliberately has no framework default because its endpoint is app-specific, so its absence is now a quiet debug at bind time; the requirement is still enforced when a delete is actually triggered. Declaring the delete action explicitly — the previous workaround — is no longer needed. Browser-bundled: rebuild your bundles to pick it up.
|
|
24
|
+
* When a staged-upload reset or delete click matches none of the rendered previews, the framework now logs a diagnostic warning instead of silently doing nothing. Previously a zero-match removal skipped its whole cleanup path — the server-side temp-file delete request, the upload-progress-indicator reset, and the removal callback — with no signal, so orphaned temp files could go unnoticed. A normal removal (at least one preview matched) is unchanged. Browser-bundled: rebuild your bundles to pick it up.
|
|
25
|
+
* Fixed absolute URLs poisoned by port-less internal calls (#B152): a request whose Host carries no port — a container health probe on an app route, a service-mesh hop, a sibling-bundle call addressed by service/DNS name — was classified as reverse-proxied and rewrote the worker's proxy-host context, so later renders' `getUrl`/`url` filter output and cross-bundle redirect / error-fallback targets could emit the internal host. The template filters (swig + nunjucks) and both redirect/error-fallback URL builders now prefer the emitting request's own per-request classification on both engines (Express included — the per-request slots are now filled engine-agnostically); the worker-global remains the fallback for renders without a request.
|
|
26
|
+
* The Couchbase connector no longer hangs the request when an N1QL query fails at the socket level — connection refused or reset, or a node still warming up after a restart or rebalance — with no query-error envelope. The three query error handlers read the vendor `cause` unconditionally, so on such a failure a swallowed TypeError left the query callback un-fired and the request never settled (no response, no error page). Each handler now forwards a usable error on both paths — building from the query-error envelope when present, otherwise the raw driver error with its code/errno preserved — and always settles the query. Server-side; restart to pick it up.
|
|
27
|
+
|
|
9
28
|
## 0.5.24 - 2026-07-22
|
|
10
29
|
### Added
|
|
11
30
|
* A per-upload-group `simulateWriteError` flag (honoured outside production scope only) deterministically triggers the multipart write-error path, so you can confirm the guarded-500 crash-guard on your own upload surface after an upgrade — with no filesystem or global-config change that affects real uploads. A group carrying the flag makes every upload tagging it answer HTTP 500 (the same guarded response a real mid-stream write error produces), and a boot warning surfaces the flag if it is ever shipped to production, where it stays inert. Server-side only — restart your bundles to pick it up.
|
package/README.md
CHANGED
|
@@ -59,16 +59,21 @@ open https://localhost:3100
|
|
|
59
59
|
|
|
60
60
|
> **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
|
|
61
61
|
|
|
62
|
-
## What's in 0.5.
|
|
63
|
-
|
|
64
|
-
- **Added —
|
|
65
|
-
- **Added —
|
|
66
|
-
- **Added —
|
|
67
|
-
- **Added —
|
|
68
|
-
- **
|
|
69
|
-
- **
|
|
70
|
-
- **
|
|
71
|
-
- **
|
|
62
|
+
## What's in 0.5.25
|
|
63
|
+
|
|
64
|
+
- **Added — machine-caller authentication for app routes.** A request presenting `Authorization: Bearer <key>` matching a caller named in `settings.json > auth.machine.callers` now passes the route authorization gate without a session: it satisfies `param.requireAuth`, its configured roles match route `roles` exactly like a session user's, and route policies receive it as `{ name, roles, machine: true }`. A session still wins when both are present. Strictly opt-in and fail-closed — `auth.machine.enabled` defaults false and the boot lint refuses every malformed shape rather than silently running open. Keys accept `${secret:KEY}` placeholders and are compared in constant time against sha256 hashes computed at boot, so raw keys are not retained; a presented-but-invalid key gets a clean `401` with `WWW-Authenticate: Bearer` and never the login redirect. Audit records carry the caller name as the actor plus `machine: true`, and `self.hasRole()` answers the caller's roles. An optional `auth.machine.authenticator` hook verifies any other sync-checkable credential (a JWT signature, an HMAC header, an `x-api-key` scheme). Server-side — restart your bundles. (MS3)
|
|
65
|
+
- **Added — cross-service request-id propagation.** The always-on request id is now forwarded as `x-request-id` on every outbound `self.query()` call — the file-download proxy path and both the HTTP/1 and HTTP/2 inter-bundle client paths — so one logical request stays correlatable as it fans out across bundles. A caller that sets `x-request-id` explicitly is never overwritten, and only the sanitised resolved id is forwarded (never a raw inbound header). The server also echoes `X-Request-Id` back on every response on both engines, so a caller, load balancer or APM can read the id off the wire. Server-side — restart your bundles. (MS1)
|
|
66
|
+
- **Added — `GET /_gina/health/check` on the default (express) engine**, mirroring the isaac engine's existing liveness endpoint. It returns `200` with `{"status":"healthy","timestamp":<ISO>}` and is deliberately ungated — no admin allowlist, no dev gate — so container liveness probes reach it off-loopback. Previously only isaac served it, so express bundles had no ungated liveness target and had to switch engines just to satisfy a Docker or Kubernetes healthcheck. Server-side — restart your bundles. (MS2)
|
|
67
|
+
- **Added — the authorization contract in `bundle:openapi`.** Gated routes (`param.requireAuth` / `param.roles` / `param.policy`) now emit a `401` response entry, plus a `403` when roles or a policy add authorization beyond authentication, and a bundle with machine-caller auth configured gains `components.securitySchemes.bearerAuth` (`http`/`bearer`) with a per-operation `security` requirement on gated routes. Role and policy names are never emitted into the spec, and an un-gated, un-configured bundle's spec is byte-unchanged. (MS4)
|
|
68
|
+
- **Added — the `controller:` CLI group.** `controller:add` scaffolds a namespace controller with one JSDoc'd action stub per `--controls` entry, auto-detecting the bundle flavor (a view bundle gets `self.render()` stubs plus a template per action; an API bundle gets `self.renderJSON()` stubs), and prints the paste-ready `routing.json` rules rather than editing your routing. `controller:remove` (alias `controller:rm`) deletes one only after a reference-aware scan of `routing.json` and every `requireController()` call — because a routing rule naming a namespace with no controller file silently falls back to the default controller instead of erroring, a bare delete is unsafe, so it refuses and lists the blockers. `controller:rename` renames in place and rewrites the references it can do safely, reporting anything a static rewrite cannot resolve rather than guessing. All three support `--dry-run` and `--format=json`; remove and rename confirm interactively and support `--force`. Offline CLI — no bundle rebuild. (#R9)
|
|
69
|
+
- **Added — transient-vs-permanent classification for datastore connector errors.** When a connector query fails, the error reaching your controller now carries `err.isTransient` (true when a retry after backoff can succeed — a datastore timeout, a dropped connection, a node warming up after a restart, rebalance or failover) and `err.transientReason`, a normalized token naming the condition (`socket:econnrefused`, `postgres:serialization-failure`, `mongo:transient-transaction`, `couchbase:timeout`, …). A controller can branch on it to render an honest "temporarily unavailable, please retry" instead of a generic 500 for a condition that clears itself in seconds — without hand-rolling a vendor-error classifier. It normalizes signals every driver already carries (socket errno, driver codes and class names, ANSI SQLSTATE classes, MongoDB error labels, Couchbase N1QL cause codes) across all six datastore connectors, and is deliberately conservative: an unrecognized error, or a genuinely permanent one such as a DNS misconfiguration or a duplicate key, classifies as permanent. Purely additive — it sets only those two fields and never throws. Server-side — restart your bundles. (#CE1)
|
|
70
|
+
- **Added — `settings.swig.autoescape`** (boolean, default false) to opt in to HTML-escaping of Swig `{{ variable }}` output as an XSS defense, mirroring the existing `settings.nunjucks.autoescape`. Swig's escaping default is unchanged in this release — set the flag per bundle to enable it. A non-boolean value now refuses bundle startup, so the security toggle can never be silently mis-typed.
|
|
71
|
+
- **Added — `server.proxy.requireForwardedHeaders`** (opt-in, declared in the published schema): when true, a request is classified as reverse-proxied only when it carries an `X-Forwarded-Host` header, disabling the port-less-Host heuristic so internal service-DNS calls can never rewrite the worker's proxy-host context. This is the deterministic option for deployments whose front proxy always sends `X-Forwarded-Host`, and the only mechanism that also protects renders with no request of their own (worker- or cron-driven rendering). Defaults to false — the historical heuristic is unchanged.
|
|
72
|
+
- **Added — a `processing` state on the staged upload progress indicator.** `data-gina-upload-progress-state` is stamped `processing` the moment the browser finishes sending the bytes — the window during which the server post-processes the upload (rendering a preview, transcoding, scanning) before it responds. On a fast link the bytes finish in milliseconds while that window can run for seconds, during which the bar would otherwise sit frozen at a full `uploading` state; the new state advances the state attribute only, leaving the bar full so a styled bar can show a distinct processing affordance via CSS, and a native indeterminate bar keeps animating. Purely additive and i18n-neutral. Browser-bundled — re-bake your bundles. (#R8)
|
|
73
|
+
- **Fixed — absolute URLs poisoned by port-less internal calls.** A request whose `Host` carries no port — a container health probe on an app route, a service-mesh hop, a sibling-bundle call addressed by service or DNS name — was classified as reverse-proxied and rewrote the worker's proxy-host context, so later renders' `getUrl` / `url` filter output and cross-bundle redirect and error-fallback targets could emit the internal host. The template filters (swig and nunjucks) and both URL builders now prefer the emitting request's own per-request classification on both engines, Express included; the worker-global remains the fallback for renders without a request. Server-side — restart your bundles. (#B152)
|
|
74
|
+
- **Fixed — the Couchbase connector no longer hangs the request when an N1QL query fails at the socket level** — connection refused or reset, or a node still warming up after a restart or rebalance — with no query-error envelope. The three query error handlers read the vendor `cause` unconditionally, so on such a failure a swallowed `TypeError` left the query callback un-fired and the request never settled: no response, no error page. Each handler now forwards a usable error on both paths and always settles the query. Server-side — restart your bundles. (#B153)
|
|
75
|
+
- **Fixed — a file input declaring only its staging upload action no longer emits a spurious warning-and-error pair** — nor writes a visible error into the form's error container — on every bind and re-bind. The delete action deliberately has no framework default because its endpoint is app-specific, so its absence is now a quiet debug at bind time; the requirement is still enforced when a delete is actually triggered. Declaring the delete action explicitly, the previous workaround, is no longer needed. Browser-bundled — re-bake your bundles.
|
|
76
|
+
- **Fixed — a staged-upload reset or delete click that matches none of the rendered previews now logs a diagnostic warning instead of silently doing nothing.** Previously a zero-match removal skipped its whole cleanup path — the server-side temp-file delete request, the progress-indicator reset, and the removal callback — with no signal, so orphaned temp files could go unnoticed. A normal removal is unchanged. Browser-bundled — re-bake your bundles. (#B150)
|
|
72
77
|
|
|
73
78
|
See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
|
|
74
79
|
|
package/ROADMAP.md
CHANGED
|
@@ -49,6 +49,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
49
49
|
| **Q3 2026** | `0.5.22` ✅ | **Fixed**: multipart binary uploads arrive byte-identical — file payloads are no longer string-decoded on their way to disk, so images, PDFs and archives stop arriving mangled and mis-sized (pure-ASCII payloads were unaffected, which is what hid it), and `req.files[].size` reports the real on-disk byte count (#B103) · link HTML callbacks work and no longer break the link — `data-gina-link-event-on-success` / `-on-error` used to make every click throw before the request was opened, leaving a dead link; both attributes now fire a `window`-level function with `(event, result)`, the programmatic `gina.link.on()` channel unchanged (#B141) · reopening an AJAX popin renders current content instead of the previous open's — the content cache now dies with the open it warmed, and `data-gina-dialog-preload="false"` becomes a hard always-refetch guarantee (#B139) · FormValidator — numbered `is<N>` rules keep their distinct error keys on re-validation instead of collapsing onto a doubled bare `is` (#B138), a `query` rule failure can no longer hang the submit pass (#B87), and the #49 checkbox migration warnings name the payload-only remedy and can be silenced per form (#B125) · `page.view.locale` carries the real country record instead of an empty object (#B101) · `npm install -g gina` no longer dies when the effective npm prefix contains a path segment npm's redactor masks (#B126) · **Added**: the `settings.i18n.cultures` allowlist is honoured — a non-empty array constrains which cultures the user-signal negotiation steps may match, so a shipped-but-unlaunched catalog stays unreachable until listed; the whole `i18n` block is now in the published schema · **Changed**: runtime pins moved to the standard `engines` manifest key, so unsupported runtimes finally get npm's `EBADENGINE` warning |
|
|
50
50
|
| **Q3 2026** | `0.5.23` ✅ | **Fixed**: multipart `req.files[].size` now reports the exact stored byte count — the value was snapshotted before the write pipeline finished counting, coming up a varying whole-chunk short (file bytes on disk were always intact); it is finalized before the request resumes, so `self.store()` and any persister see the real size (#B142) · a multi-file multipart upload no longer hangs when an early small file finishes while a later large part is still streaming — the per-stream completion listeners now arm at creation (an already-finished stream's event never replays), and a mid-stream write error answers a guarded 500 instead of crashing the bundle; single-file uploads were unaffected (#B143) · the stale-release banner (`server.releaseWatch`) is now injected by the async template-loader render delegates too — a bundle on a custom async loader got the `/_gina/release/*` endpoints and SSE but no in-page banner; both async delegates (swig / nunjucks) now splice it onto the finalized HTML like the sync paths, CSP-nonce-aware, byte-inert outside the gate (#RWATCH) |
|
|
51
51
|
| **Q3 2026** | `0.5.24` ✅ | **Added**: upload progress for the staged upload client layer — the staging POST reports real client-to-server wire progress via a new `uploadProgress.<id>` form event and an opt-in declarative `<progress>` / percent indicator (#R8, slice 1) · drag-and-drop — a file input binds a named element as a dropzone that routes dropped files through the exact same staging pipeline as the native picker, opt-in and explicit-id-only with `idle`/`over`/`dropped` CSS state hooks (#R8, slice 2) · an incident `ref` on every error response — a short voice-relayable correlation code (present in all scopes) that a server-side log line pairs with the full error detail before the wire copy is stripped, so support can resolve a user-relayed ref to the exact failure even in production (#ERRREF) · a per-upload-group `simulateWriteError` flag (non-production only) to verify the upload write-error crash-guard on your own surface after an upgrade (#B144) · **Fixed**: the staged upload client layer no longer corrupts binary uploads — the multipart body is now a Blob of raw file bytes instead of a UTF-8-inflating DOMString, so images / PDFs / archives are stored byte-identical (the defect only surfaced on gina ≥ 0.5.22; corrupted files are losslessly recoverable) (#B148) · a misconfigured upload group whose destination directory cannot be created answers a guarded 500 instead of crashing the bundle (#B145) · a file input declaring only its upload action is no longer silently repointed at the reset/delete route (#B146) · an upload no longer throws in its success handler when no preview element is present (#B147) |
|
|
52
|
+
| **Q3 2026** | `0.5.25` ✅ | **Added**: microservices readiness — machine-caller authentication (an `Authorization: Bearer` key named in `settings.json > auth.machine.callers` satisfies route authorization without a session, opt-in and fail-closed, constant-time compared against boot-computed hashes, with an optional custom authenticator hook for JWT/HMAC/api-key schemes), cross-service request-id propagation (the always-on request id forwarded as `x-request-id` on every `self.query()` and echoed back on every response, so one logical request stays correlatable across bundles), an ungated `GET /_gina/health/check` on the express engine so container liveness probes no longer require the isaac engine, and the authorization contract in `bundle:openapi` (gated routes emit `401`/`403` entries and a `bearerAuth` security scheme, never role or policy names) · the `controller:` CLI group — `controller:add` scaffolds a namespace controller with per-action stubs and prints paste-ready routing rules, `controller:remove`/`rm` deletes only after a reference-aware scan that refuses while any routing rule or `requireController()` still points at it, and `controller:rename` rewrites the references it can resolve safely and reports the rest (#R9) · transient-vs-permanent classification for datastore connector errors — `err.isTransient` + a normalized `err.transientReason` on every connector query failure across all six datastore connectors, so an application can render an honest retry response without string-matching vendor error text; conservative by design, an unrecognized or genuinely permanent error classifies as permanent (#CE1) · `settings.swig.autoescape` to opt in to Swig output escaping (default unchanged; a non-boolean now refuses boot) · `server.proxy.requireForwardedHeaders` to require `X-Forwarded-Host` for proxy classification, the deterministic alternative to the port-less-Host heuristic · a `processing` state on the staged upload progress indicator, covering the server post-processing window so a full bar reads as working rather than stuck (#R8) · **Fixed**: absolute URLs poisoned by port-less internal calls — a health probe, service-mesh hop or service-DNS sibling call could rewrite the worker's proxy-host context and leak the internal host into later renders' `getUrl`/`url` output and cross-bundle redirect targets; emitting requests now prefer their own classification on both engines (#B152) · the Couchbase connector no longer hangs a request when an N1QL query fails at the socket level with no query-error envelope — the callback went un-fired and the request never settled (#B153) · a file input declaring only its staging upload action no longer emits a spurious warning-and-error pair on every bind · a staged-upload removal matching no preview now logs a diagnostic instead of silently skipping its whole cleanup path, including the temp-file delete (#B150) |
|
|
52
53
|
| **Q4 2026** | `0.6.0` | Security & compliance controls (technical safeguards mapping to PCI-DSS / SOC2 / HIPAA) |
|
|
53
54
|
| **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
54
55
|
| **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
|
|
@@ -127,6 +128,9 @@ Stub commands confirmed in source — handler files exist but are empty or comme
|
|
|
127
128
|
| ✅ | **`image:build` — first-class OCI packaging** — Packages a project bundle as a standard OCI image: synthesizes a Containerfile + build context from the project's registered state (bundles, entry, ports, env model, node floor) and executes the build with buildah — natively on Linux, or on a container host reached over ssh (`GINA_CONTAINER_HOST=ssh://[user@]host[:port]` env override → native buildah → `container.host` settings fallback). The selected `--env` bakes dev/prod parity: a non-dev env ships the release tree built in-image by `gina bundle:build` (never dev-mode hot-reload); the image boots via `gina-init` + `gina-container` (SIGTERM drain) and `EXPOSE` is computed deterministically from the `gina-init` port allocator. `${secret:KEY}` config placeholders ride byte-verbatim and resolve from the container environment at runtime — never baked. `--emit` prints the Containerfile + context manifest without building; `--format=json` emits a one-shot `{ project, bundle, image, tag, imageId?, durationMs, host, exposedPort }`; `--stream` emits NDJSON progress frames (`start` → `step` → `log` → `done` \| `error`); failures exit 1 with the reason on stdout. | `0.5.11-alpha.2` | 2026-07-05 |
|
|
128
129
|
| ✅ | **`image:list` / `image:rm`** — Host-level image management on the container host `image:build` targets, resolved with the same precedence (`GINA_CONTAINER_HOST=ssh://[user@]host[:port]` env override → native buildah → `container.host` settings fallback); no `@<project>` argument. `image:list` prints every image on the host — an aligned table or `--format=json` (`{ host, images: [{ ref, id, size, created }] }`); the listing is deliberately unfiltered (a synthesized image carries no distinguishing label to filter on). `image:rm <ref>` removes one explicitly-named image — no bulk delete; `--force` maps to `buildah rmi -f`. | `0.5.19-alpha.2` | 2026-07-17 |
|
|
129
130
|
| ✅ | **`image:run` / `container:ps` / `container:stop` — running images on the container host** — Runs a built OCI image as a container on the same host every `image:*` verb resolves (`GINA_CONTAINER_HOST=ssh://[user@]host[:port]` env override → native → `container.host` settings), driving `podman` — buildah builds images but cannot run them, and a build-only host (buildah present, podman absent) is reported honestly (`run unavailable on this host … needs podman + conmon`) rather than as an opaque exec failure. `image:run <image>` is detached by default and prints the container id alone on stdout (`--format=json` → `{ host, id, name, image, ports }`); with no `--publish` the image’s own baked `EXPOSE` is published same:same, `--publish=<host:ctr>[,…]` overrides, `--publish=none` disables; `--env-var=K=V` (repeatable) and `--env-file=<path>` hand environment values to the container without ever placing them in a process argv or baking them into the image; `--rm`; `--stream` runs it in the foreground and mirrors the container as NDJSON frames (`start` → `log` → `done` \| `error`, carrying the container’s own exit code). `container:ps [--all]` lists the host’s containers (aligned table or `--format=json` with normalized port maps); `container:stop <name|id> [--time=<s>] [--force]` stops one and reports the rung it came down on — `graceful` (the container handled the signal), `killed` (force-killed after the grace period) or `forced` (`--force`) — read from a post-stop inspect, since podman exits 0 either way. | `0.5.19-alpha.2` | 2026-07-17 |
|
|
131
|
+
| ✅ | **`controller:add`** — Scaffold a namespace controller into a bundle and print the paste-ready `routing.json` rules to wire it. `controller:add <name> <bundle> @<project> [--controls=a,b,c]` writes `controllers/controller.<name>.js` with one JSDoc'd action stub per `--controls` entry (a single `default` action when omitted) — `render()` stubs plus per-action templates (`templates/html/<name>/<action>.html`) in a view bundle, `renderJSON()` stubs in an API-only bundle (auto-detected, `--views` / `--api` to override) — and prints the routing rules with an explanation. The hand-maintained, comment-bearing routing file is **never** edited (an opt-in `--with-route` writer is deferred on-demand); refuses to overwrite an existing controller. | `0.5.25-alpha.2` | 2026-07-23 |
|
|
132
|
+
| ✅ | **`controller:remove` / `controller:rm`** — Remove a namespace controller from a bundle, reference-aware and refuse-unless-clean: scans the bundle's `routing.json` `namespace` keys (rule-level and `param.namespace`), `requireController('<name>')` call sites, and the namespace template tree, lists every blocking reference, and deletes the controller file + `templates/html/<name>/` tree only after interactive confirmation. `--dry-run` previews, `--force` deletes the file only (never editing `routing.json`, listing what remains to clean), `--format=json` emits a machine-readable envelope; the default `controller.js` is never removable. | `0.5.25-alpha.2` | 2026-07-23 |
|
|
133
|
+
| ✅ | **`controller:rename`** — Rename a namespace controller and rewrite the references that point at it: moves the controller file, moves its `templates/html/<old>/` tree, and rewrites the `routing.json` `namespace` values + `requireController('<old>')` literals with comment-preserving string ops. Reports (does not rewrite) anything a static rewrite cannot resolve — a `param.namespace` `:variable`, a non-literal `requireController()` argument, the cosmetic class name. Shows the full plan then confirms interactively; `--dry-run` previews, `--force` applies non-interactively, `--format=json` emits the plan envelope. | `0.5.25-alpha.2` | 2026-07-23 |
|
|
130
134
|
|
|
131
135
|
---
|
|
132
136
|
|
|
@@ -266,6 +270,9 @@ Technical-safeguard primitives that map to the **PCI-DSS**, **SOC2**, and **HIPA
|
|
|
266
270
|
| 📋 | **Application-level rate limiting** — Per-endpoint / per-client throttling at the route layer (today only an HTTP/2 rapid-reset limiter exists). Maps to PCI-DSS anti-automation and SOC2 availability. | `0.6.x` | Q4 2026 |
|
|
267
271
|
| 📋 | **Data-at-rest / field-level encryption helpers** — Field-level encryption + key-management utilities. Maps to PCI-DSS req 3 and HIPAA §164.312(a)(2)(iv). | `0.6.x` | Q4 2026 |
|
|
268
272
|
| 📋 | **Compliance control-mapping guide** — A reference mapping each Gina control to the PCI-DSS / SOC2 / HIPAA requirement it supports, plus an explicit "what the framework does not cover" section (to follow). | `0.6.x` | Q4 2026 |
|
|
273
|
+
| 📋 | **Transport-security posture** — A production-scope HTTPS enforcement option (refuse or warn when a bundle serves plain HTTP outside local/dev scope), with a "TLS terminates upstream" escape hatch for the common mesh/ingress pattern, plus documented guidance for terminating mTLS at the mesh or ingress. Maps to the "encrypt everywhere / no implicit network trust" principle of NIST SP 800-207 (Zero Trust). | `0.6.x` | Q4 2026 |
|
|
274
|
+
| 📋 | **Deny-by-default authorization mode** — An opt-in posture where every route requires authentication unless explicitly marked public, inverting today's per-route opt-in (a route that declares nothing is currently untouched). Complements the shipped Authorization / RBAC control. Maps to NIST SP 800-207 least-privilege / deny-by-default. | `0.6.x` | Q4 2026 |
|
|
275
|
+
| 📋 | **Zero-Trust deployment guide** — A guide to running Gina inside a zero-trust architecture (NIST SP 800-207): terminating mTLS at the mesh/ingress, enforcing HTTPS, applying network default-deny between services, and shipping the built-in audit/metrics telemetry to a SOC. An honest-boundary companion to the compliance control-mapping guide — the framework supplies the enforcement point, identity, and telemetry; the deployment supplies transport identity and segmentation. | `0.6.x` | Q4 2026 |
|
|
269
276
|
|
|
270
277
|
---
|
|
271
278
|
|
package/bin/cli
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.25
|
|
@@ -12003,6 +12003,23 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
12003
12003
|
if (uploadProgressHFormIsRequired)
|
|
12004
12004
|
triggerEvent(gina, $target, 'uploadProgress.' + id + '.hform', result);
|
|
12005
12005
|
};
|
|
12006
|
+
|
|
12007
|
+
// #R8 — bytes-done → server post-processing window. onloadend is the
|
|
12008
|
+
// final upload-phase event (fires on success AND on abort/error/timeout),
|
|
12009
|
+
// so it robustly marks "sending finished" even when a browser omits the
|
|
12010
|
+
// final onprogress at loaded==total. Advance the indicator STATE only —
|
|
12011
|
+
// updateUploadProgressIndicator's `processing` branch leaves value/max/the
|
|
12012
|
+
// percent attribute exactly as the last onprogress left them, so a styled
|
|
12013
|
+
// (appearance:none) determinate bar stays visually full instead of
|
|
12014
|
+
// regressing to an empty track. onUpload later flips complete/error at the
|
|
12015
|
+
// response chokepoint, cleanly overwriting `processing`.
|
|
12016
|
+
xhr.upload.onloadend = function() {
|
|
12017
|
+
if (!isUploadXhr) return;
|
|
12018
|
+
updateUploadProgressIndicator(
|
|
12019
|
+
($target.uploadProperties) ? $target.uploadProperties.progressContainer : null,
|
|
12020
|
+
'processing'
|
|
12021
|
+
);
|
|
12022
|
+
};
|
|
12006
12023
|
}
|
|
12007
12024
|
|
|
12008
12025
|
// catching timeout
|
|
@@ -12199,12 +12216,17 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
12199
12216
|
* Every target also carries two data attributes as styling hooks:
|
|
12200
12217
|
* `data-gina-upload-progress` (integer percent, absent while indeterminate)
|
|
12201
12218
|
* and `data-gina-upload-progress-state`
|
|
12202
|
-
* (`preparing|uploading|indeterminate|complete|error`). No copy/labels
|
|
12203
|
-
* hardcoded — wording is the consumer's concern (CSS on the state attribute).
|
|
12219
|
+
* (`preparing|uploading|indeterminate|processing|complete|error`). No copy/labels
|
|
12220
|
+
* are hardcoded — wording is the consumer's concern (CSS on the state attribute).
|
|
12221
|
+
* The `processing` state marks bytes-sent → awaiting-response (server-side
|
|
12222
|
+
* post-processing): it advances the state attribute ONLY, leaving value/max/the
|
|
12223
|
+
* percent attribute exactly as the last `uploading` update left them, so a styled
|
|
12224
|
+
* determinate bar stays visually full (an indeterminate one keeps animating)
|
|
12225
|
+
* through the window rather than regressing to an empty track.
|
|
12204
12226
|
* The `reset` state strips everything this layer ever set on the element.
|
|
12205
12227
|
*
|
|
12206
12228
|
* @param {string|null} containerId - resolved indicator element id
|
|
12207
|
-
* @param {string} state - `preparing` | `uploading` | `indeterminate` | `complete` | `error` | `reset`
|
|
12229
|
+
* @param {string} state - `preparing` | `uploading` | `indeterminate` | `processing` | `complete` | `error` | `reset`
|
|
12208
12230
|
* @param {object} [result] - `uploadProgress` payload (`progress`, `loaded`, `total`) — read for `uploading` only
|
|
12209
12231
|
*
|
|
12210
12232
|
* @returns {undefined}
|
|
@@ -12230,6 +12252,16 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
12230
12252
|
|
|
12231
12253
|
$indicator.setAttribute('data-gina-upload-progress-state', state);
|
|
12232
12254
|
|
|
12255
|
+
if (state == 'processing') {
|
|
12256
|
+
// #R8 — byte-complete, server still post-processing. Advance the STATE only:
|
|
12257
|
+
// leave value/max and the `data-gina-upload-progress` percent exactly as the
|
|
12258
|
+
// last `uploading` update left them (a determinate bar stays full; an
|
|
12259
|
+
// indeterminate one keeps its native animation). Falling through to the guard
|
|
12260
|
+
// below would strip `value` + the percent attribute — the regression this
|
|
12261
|
+
// early return prevents (the state attribute is already stamped above).
|
|
12262
|
+
return;
|
|
12263
|
+
}
|
|
12264
|
+
|
|
12233
12265
|
if (state == 'complete') {
|
|
12234
12266
|
if (isNativeProgress) {
|
|
12235
12267
|
if ( !$indicator.getAttribute('max') ) {
|
|
@@ -12875,6 +12907,20 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
12875
12907
|
}
|
|
12876
12908
|
}
|
|
12877
12909
|
|
|
12910
|
+
// #B150 — the removal loop matched zero previews against the input's
|
|
12911
|
+
// customFiles, so NOTHING was removed: the tmp-delete XHR, the #R8
|
|
12912
|
+
// indicator strip, and the removal callback below are all `removedCount>0`
|
|
12913
|
+
// -gated and are about to be skipped, silently, leaving any staged tmp
|
|
12914
|
+
// files on the server. That is expected when there was nothing to remove
|
|
12915
|
+
// (an empty preview set), but a NON-EMPTY preview set that matched nothing
|
|
12916
|
+
// is a state desync (e.g. a runtime-injected bind whose customFiles names
|
|
12917
|
+
// do not line up with the rendered `data-upload-original-filename`s) —
|
|
12918
|
+
// signal it so the otherwise-invisible skip is diagnosable. Signal-only:
|
|
12919
|
+
// the `removedCount>0` gates STAY (no removal => no removal callback, #B94).
|
|
12920
|
+
if (removedCount === 0 && childNodes.length > 0) {
|
|
12921
|
+
console.warn('[FormValidator][upload]['+ ($uploadTrigger.id || '?') +'] '+ bindingType +': '+ childNodes.length +' preview(s) present but none matched the staged input files — nothing removed, cleanup skipped. Ensure each preview\'s `data-upload-original-filename` matches a current input file name.');
|
|
12922
|
+
}
|
|
12923
|
+
|
|
12878
12924
|
// #R8 — at least one staged file the indicator reported is gone:
|
|
12879
12925
|
// strip the upload-progress indicator entirely
|
|
12880
12926
|
if (removedCount > 0) {
|
|
@@ -14839,12 +14885,22 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
14839
14885
|
}
|
|
14840
14886
|
var uploadActionUrl = $el.getAttribute(action);
|
|
14841
14887
|
if (!uploadActionUrl || uploadActionUrl == '' ) {
|
|
14842
|
-
|
|
14843
|
-
|
|
14888
|
+
// #B149 — an action with NO framework default route is legitimately
|
|
14889
|
+
// optional at bind time. `data-gina-form-upload-delete-action` removes
|
|
14890
|
+
// an ALREADY-SAVED file, so its endpoint is app-specific — the injected
|
|
14891
|
+
// tmp routes cannot serve it and there is deliberately no default (see
|
|
14892
|
+
// the public file-uploads guide). Its real enforcement is lazy, at the
|
|
14893
|
+
// delete USE site (onUploadResetOrDelete throws when a delete actually
|
|
14894
|
+
// fires with no URL). So a missing no-default action is a single debug,
|
|
14895
|
+
// never the warn + error + $errorContainer write that used to paint a
|
|
14896
|
+
// spurious error on every (re)bind of a working upload-only input.
|
|
14897
|
+
if (!defaultRoute) {
|
|
14898
|
+
console.debug('`'+ action +'` not declared for `'+ $el.id +'` (no framework default; optional until a delete is triggered).');
|
|
14899
|
+
return;
|
|
14900
|
+
}
|
|
14844
14901
|
var additionalErrorDetails = null;
|
|
14845
14902
|
try {
|
|
14846
|
-
|
|
14847
|
-
uploadActionUrl = routing.getRoute(defaultRoute);
|
|
14903
|
+
uploadActionUrl = routing.getRoute(defaultRoute);
|
|
14848
14904
|
} catch (err) {
|
|
14849
14905
|
additionalErrorDetails = err;
|
|
14850
14906
|
}
|