gina 0.5.18 → 0.5.19
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 +22 -1
- package/README.md +10 -15
- package/ROADMAP.md +5 -2
- package/bin/cli +1 -0
- package/framework/v0.5.19/VERSION +1 -0
- package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/js/gina.js +53 -8
- package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +466 -465
- package/framework/v0.5.19/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.19/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.js +198 -34
- package/framework/{v0.5.18 → v0.5.19}/core/gna.js +14 -1
- package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/validator/src/main.js +19 -0
- package/framework/{v0.5.18 → v0.5.19}/core/router.js +20 -0
- package/framework/{v0.5.18 → v0.5.19}/core/server.isaac.js +26 -2
- package/framework/{v0.5.18 → v0.5.19}/core/server.js +277 -9
- package/framework/{v0.5.18 → v0.5.19}/core/template/conf/settings.json +53 -0
- package/framework/v0.5.19/lib/audit/package.json +12 -0
- package/framework/v0.5.19/lib/audit/src/main.js +434 -0
- package/framework/v0.5.19/lib/audit-store.js +91 -0
- package/framework/v0.5.19/lib/authz-gate/package.json +7 -0
- package/framework/v0.5.19/lib/authz-gate/src/main.js +581 -0
- package/framework/v0.5.19/lib/cmd/container/arguments.json +6 -0
- package/framework/v0.5.19/lib/cmd/container/help.js +46 -0
- package/framework/v0.5.19/lib/cmd/container/help.txt +86 -0
- package/framework/v0.5.19/lib/cmd/container/man.js +6 -0
- package/framework/v0.5.19/lib/cmd/container/ps.js +219 -0
- package/framework/v0.5.19/lib/cmd/container/stop.js +258 -0
- package/framework/{v0.5.18 → v0.5.19}/lib/cmd/gina.1.md +1 -0
- package/framework/{v0.5.18 → v0.5.19}/lib/cmd/helper.js +7 -1
- package/framework/v0.5.19/lib/cmd/image/_host.js +160 -0
- package/framework/{v0.5.18 → v0.5.19}/lib/cmd/image/arguments.json +7 -1
- package/framework/{v0.5.18 → v0.5.19}/lib/cmd/image/build.js +2 -48
- package/framework/v0.5.19/lib/cmd/image/help.txt +173 -0
- package/framework/v0.5.19/lib/cmd/image/list.js +183 -0
- package/framework/v0.5.19/lib/cmd/image/rm.js +150 -0
- package/framework/v0.5.19/lib/cmd/image/run.js +601 -0
- package/framework/{v0.5.18 → v0.5.19}/lib/image-build/src/main.js +483 -7
- package/framework/{v0.5.18 → v0.5.19}/lib/index.js +20 -0
- package/framework/{v0.5.18 → v0.5.19}/lib/routing/src/main.js +34 -8
- package/framework/{v0.5.18 → v0.5.19}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +28 -56
- package/package.json +3 -3
- package/types/index.d.ts +28 -4
- package/framework/v0.5.18/VERSION +0 -1
- package/framework/v0.5.18/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.18/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.5.18/lib/cmd/image/help.txt +0 -72
- /package/framework/{v0.5.18 → v0.5.19}/AUTHORS +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/LICENSE +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/config.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/content.encoding +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/dev/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/locales/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/locales/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/mime.types +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/model/entity.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/model/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/server.express.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/status.codes +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/console.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/context.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/path.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/task.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/helpers/text.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/async/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/config.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/dto/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/image-build/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/job/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/job/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/job-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/math/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/model.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/proc.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/session-store.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/shell.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/state.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/url/README.md +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/url/index.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/validator.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.18 → v0.5.19}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,27 @@ 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.19 - 2026-07-17
|
|
10
|
+
### Added
|
|
11
|
+
* The checkbox migration warning now also covers the un-tick direction: markup carrying the `checked` attribute plus a `value` (or `data-value`) reading false or empty — which used to render unticked and now stays ticked — is flagged once per field, with the same legacy opt-in pointer as the existing warning
|
|
12
|
+
* Routes can now require an authenticated session. Declare `"requireAuth": true` in a routing.json rule's `param` block and the framework answers unauthenticated requests before the controller action ever runs: a 401 by default, or — for a browser navigation, when `settings.json > auth.loginRoute` names a rule or a path — a non-cacheable redirect to the login page, with the original request snapshotted first so the login action can replay it via `self.resumeRequest()`. A request counts as authenticated when `req.session.user` is set; populating it at login stays the application's job. XHR requests always get the 401, never a redirect. Routes that declare nothing behave exactly as before. Author mistakes now refuse to boot rather than silently leaving a route open: a non-boolean `requireAuth`, or an `auth.loginRoute` the bundle does not declare.
|
|
13
|
+
* image:list and image:rm — inspect and remove OCI images on the container host image:build targets. Both resolve the host with image:build's own precedence (GINA_CONTAINER_HOST env override, then native buildah, then the container.host setting), so image:list always shows what image:build would build onto. image:list prints an aligned table or --format=json ({ host, images: [{ ref, id, size, created, sizeBytes, createdAt }] } — createdAt is the exact RFC3339 creation time and sizeBytes an approximate machine-sortable byte count derived from buildah's humanized size); an untagged image reports <none>:<none> and a multi-tagged image yields one entry per tag. image:rm takes an explicit image reference or id (--force removes one a container still references; removing one tag of a multi-tagged image untags it — the image survives under its other tags); there is no bulk delete, and the reference is charset-gated before it reaches the host
|
|
14
|
+
* Role-based route authorization — a route can now require the session user to hold one of a set of roles: routing.json `param.roles: ["admin", "editor"]` (ANY-of match against `req.session.user.roles`; implies `requireAuth`, so unauthenticated callers still get the 401/login bounce). Authenticated callers holding none of the listed roles get a 403 whose body stays generic — the required roles are never echoed to the wire. Declared but invalid `roles` shapes (null, a bare string, an empty array, non-string members) refuse to boot instead of leaving the route silently ungated, and the client-served routing maps no longer ship the authorization keys (`requireAuth`/`roles`/`policy`).
|
|
15
|
+
* A policy-function escape hatch for route authorization — a route can now delegate its access decision to a named per-bundle function for the record/attribute checks roles cannot express (ownership and the like): routing.json `param.policy: "ownsInvoice"` loads `<bundle>/policies/ownsInvoice.js` (`module.exports = function (user, req) { return boolean; }`), registered at boot and AND-composed after roles (implies `requireAuth`; evaluation order authN → roles → policy). A policy is allowed only when it returns a literal `true`; any other return denies, and a policy that throws denies with a 403 rather than erroring the response. The 403 stays generic — the policy name is never echoed to the wire. A missing, broken, non-function, non-string or `async function` policy refuses to boot instead of leaving the route silently ungated. Also adds the imperative `self.hasRole(role)` controller helper for actions that authorize mid-logic.
|
|
16
|
+
* An audit trail — a user-attributed, append-only record of "who did what to which record when", distinct from application logging (it has its own store and never rides the logger sinks). Opt in with `settings.json > audit.enabled: true` and call `self.audit(action, data[, cb])` from an action: `self.audit("invoice.delete", { resource: id })` writes a v1 record `{ id, ts, requestId, actor: {key, roles}, action, resource?, meta?, ip, rule, method, bundle, env }`. The default backend is an append-only JSONL file at `<project>/logs/audit-<bundle>-<env>.jsonl` (per-bundle-per-env, resolved path logged at boot; override with `audit.file`, or point `audit.store` at a connectors.json entry — no connector ships an audit-store implementation yet, so that path currently refuses the boot rather than failing silently). Writes are serialized, so on-disk order matches emit order. The actor is a snapshot of `session.user[audit.actorKey]` (default `"id"`) plus a copy of `user.roles` — never the whole user object; `ip` is the socket address and `X-Forwarded-For` is never trusted. Route authorization denials are recorded automatically when the trail is on (`authz.denied` with `meta.outcome` covering `401` / `login-bounce` / `403-roles` / `403-policy`; opt out with `audit.events.authz: false`), and an audit failure can never change an authorization outcome. Every request now carries an always-on request id, so audit records and JSON log lines correlate by construction (that id honours a sanitized inbound `X-Request-Id`, so it is a correlation key, not attribution — attribution is the actor fields). Malformed `audit` settings — a non-boolean `enabled`, an empty `file`/`store`/`actorKey`, a non-boolean `events.authz`, or `store` and `file` together — refuse to boot instead of leaving a compliance control silently OFF.
|
|
17
|
+
* `gina image:run <image>` runs an image on the same container host `image:build` targets, with podman. Detached by default (the container id is printed on stdout, alone, so it can be captured), publishing the port the image EXPOSEs mapped same:same — that EXPOSE is the port the gina-init allocator computed at build time, so it is the one the bundle actually binds. `--publish=<host>:<container>[,...]` overrides it, `--publish=none` publishes nothing. Also `--name`, `--rm`, `--stream` (foreground, mirroring the container output as NDJSON frames) and `--format=json`. Runtime environment comes from `--env-var=KEY=VALUE` (repeatable) and `--env-file=<path>`, and reaches the container without ever entering argv or a shell, so values stay out of the host process list — which is how a ${secret:KEY} placeholder baked verbatim into the image gets its value at start. buildah builds images but cannot run them, so a build-only host (buildah present, podman absent) says so honestly instead of failing opaquely. Host resolution is identical to image:build / image:list / image:rm, and no project is required.
|
|
18
|
+
* A new `container:` command group — `gina container:ps [--all] [--format=json]` lists the containers on the container host `image:build` targets (running only by default; every container on the host is shown, as there is no gina-specific marker to filter on), and `gina container:stop <name|id> [--time=<s>] [--force] [--format=json]` stops one. The verbs live in their own group because they act on containers rather than images — the split podman and docker make — but they resolve the host through exactly the same precedence as the image group, so container:ps always lists the host image:build builds onto and image:run runs on. container:stop reports the rung the container came down on, which podman own exit code hides: podman exits 0 whether the container handled SIGTERM or had to be SIGKILLed after the grace period, so a post-stop inspect reads the container exit code — 137 is 128+SIGKILL (it did not handle the signal in time) and anything else means it came down on its own terms. Stopping an already-exited container is a success no-op, so the verb is safe to re-run. Both verbs drive podman and report a build-only host (buildah present, podman absent) honestly rather than as an opaque exec failure.
|
|
19
|
+
### Changed
|
|
20
|
+
* Request data crossing a redirect() now rides the session (the hidden inheritedData flash channel, one-shot — consumed by the next routed GET, gone on refresh) whenever a live session exists; the clear-text ?inheritedData= URL form and its 2000-char cap now apply only to session-less bundles. resumeRequest()'s plain-XHR and non-XHR GET replays no longer drop the halted request's extra data. For a session-ful bundle that halts a credential-bearing POST (a registration or login paused mid-flight), this removes a plaintext-secret-in-URL disclosure: the payload no longer lands in the address bar, browser history, or access logs.
|
|
21
|
+
### Fixed
|
|
22
|
+
* Calling `gina.emit('error', ...)` on the module object no longer throws — `emit` is now an inert stub that always returns `false` (the detached-copy assignment it replaces never dispatched to any listener; the module object is not an event surface — application events go through the controller's `self.emitEvent()`)
|
|
23
|
+
* image:build: images for projects that declare gina among their own dependencies no longer fail at gina-init with EACCES — the synthesized Containerfile re-hands the runtime home back after the project-dependency install, whose framework postinstall was re-seeding $HOME/.gina root-owned after the earlier hand-back (dependency-free projects were unaffected)
|
|
24
|
+
* image:build: the pinned framework now actually wins require('gina') inside images built for gina-dependent projects — the node_modules/gina link supersedes the project-extracted copy (ln -sfn against a real directory exits 0 but nests the symlink inside it, so the project's own gina was silently used at runtime while the CLI binaries ran from the global pin)
|
|
25
|
+
* getRoute() no longer throws (surfacing as a 500 at the caller) when composing a URL for a GET route that declares no requirements block and receives extra params — the deep-link-before-login replay (resumeRequest()) failed on any halted requirements-less GET route carrying data, and the same crash was reachable from the url template filter / getUrl() family, in the browser bundle too. Extra params now land on the composed URL as query parameters.
|
|
26
|
+
* The relative-path `self.redirect('/path')` form resolves its target again server-side: the route matcher is async and the historical un-awaited call could never match. `redirect()` is now async as a result — prefer `return self.redirect(...)` from controller actions so a resolution error reaches the framework's handler.
|
|
27
|
+
* A redirect to an unresolvable target no longer crashes the process — the request now gets a clean 404, and the response-header composer tolerates a falsy routing state instead of throwing from inside the error path itself.
|
|
28
|
+
* Prometheus metrics (app.json metrics.enabled) no longer double-count requests under the isaac engine: the request-lifecycle hook ran at both dispatch layers for any request reaching the router, so counters were double-incremented and the duration histogram double-observed. The hook now records exactly once on either engine, request durations are measured from engine entry, and the dev Inspector Flow timeline keeps its accurate request-start time.
|
|
29
|
+
|
|
9
30
|
## 0.5.18 - 2026-07-16
|
|
10
31
|
### Added
|
|
11
32
|
* Bundle-wide `sliding` and `maxAge` cache defaults: `server.cache` now supplies `sliding` and `maxAge` fallbacks that a route inherits when it omits them, mirroring the existing `ttl` fallback — so sliding-window caching can be enabled for a whole bundle from one place. Per-route values still win (an explicit `sliding: false` overrides a bundle-wide `true`), and behaviour is unchanged for bundles that do not set these keys. Applies to cached HTML (swig, nunjucks) and JSON responses.
|
|
@@ -45,7 +66,7 @@ and is generated by [Changie](https://github.com/miniscruff/changie).
|
|
|
45
66
|
### Fixed
|
|
46
67
|
* Cleaning up a stale project registration is now reliable. `gina project:rm @<project> --force` (the `:rm` alias) removes the entry instead of erroring — the alias had failed an internal `--force` guard that only the full `project:remove` form passed. And `gina project:remove` / `project:rm @<project> --force` no longer crashes with an `ENOENT` error when the stale project's path can no longer be created (a top-level path such as `/app`, or any path under a read-only parent): it skips the now-pointless project-directory re-creation and goes straight to registry-only removal, cleaning both `~/.gina/projects.json` and its state-store mirror plus the project's port assignments — without resurrecting an empty skeleton directory.
|
|
47
68
|
* Installing gina with the npm 12 `--allow-scripts=gina` remedy (or `npm config set allow-scripts=gina --location=user`) no longer fails with `EALLOWSCRIPTS`. npm exports the allowance to install-script children as `npm_config_allow_scripts`, and npm rejects it in project-scoped installs — which killed the nested framework-dependency install inside post-install, and with it the whole `npm install -g gina`. The nested install now drops the inherited allowance for its duration (the framework dependencies carry no install scripts, so nothing is lost). This unblocks the npm 12 install path, where install scripts are blocked by default and the flag is required.
|
|
48
|
-
* `gina bundle:start`
|
|
69
|
+
* Corrected a typo in `gina bundle:start`'s scope-resolution expression, which read a misspelled property name. **No behaviour change** — the local variable it assigns is never read, and no bundle manifest carries the per-bundle property (nothing writes it), so the misspelled branch was unreachable: no bundle was ever started with a wrong or undefined scope. A bundle's effective scope continues to resolve, unchanged, from `--scope=`, then `NODE_SCOPE`, then the project's default scope, then the framework default.
|
|
49
70
|
|
|
50
71
|
## 0.5.16 - 2026-07-12
|
|
51
72
|
### Added
|
package/README.md
CHANGED
|
@@ -42,21 +42,16 @@ open https://localhost:3100
|
|
|
42
42
|
|
|
43
43
|
> **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.)
|
|
44
44
|
|
|
45
|
-
## What's in 0.5.
|
|
46
|
-
|
|
47
|
-
- **Added —
|
|
48
|
-
- **Added —
|
|
49
|
-
- **Added —
|
|
50
|
-
- **
|
|
51
|
-
- **
|
|
52
|
-
- **
|
|
53
|
-
- **
|
|
54
|
-
- **Fixed —
|
|
55
|
-
- **Fixed — the `fs` render cache survives a restart.** An `fs`-cached response written to disk was previously orphaned on the next boot (the in-process index starts empty), so it was never served again and its file was never cleaned up — `fs` behaved no better than `memory` across a restart. The read path now falls back to disk on an index miss, replaying the entry from a `.meta` sidecar and preserving the **original absolute expiry**, so a restart never extends a TTL. Entries expiring on their timer now run the same cleanup as a manual eviction, instead of stranding their body and sidecar on disk.
|
|
56
|
-
- **Fixed — a checkbox's `value` attribute no longer decides its `checked` state.** The HTML `checked` attribute alone drives the initial rendering, and the posted boolean is derived from the live checked state rather than the value string — so a consent-style checkbox rendered with `value="true"` is no longer silently pre-ticked, `value="false"` no longer un-ticks a server-checked box, a checkbox unticked from your own script no longer posts `true` off its stale value, and a neutral-valued checkbox with an `isBoolean` rule posts real booleans instead of going dead. The forced rule injection now appends `isRequired` before `isBoolean`, so an unchecked box whose rule declared neither no longer fails with "Cannot be left empty". A transitional per-form opt-in — `data-gina-form-checkbox-value-as-state="true"` (deprecated) — preserves the old value-driven ticking while markup migrates to `checked`, and a once-per-field console warning flags the affected checkboxes. (#49)
|
|
57
|
-
- **Fixed — the published TypeScript declarations now describe the runtime.** `import gina from "gina"; gina.lib` previously failed to typecheck for every consumer, because the main entry declared no value at all. The module surface now carries all 78 runtime members including `gina.dto`; `SuperController` gains its i18n / jobs / trailers / events / template-override methods plus `GinaRequest<TDto>` and `req.dto` typing for route DTOs; fictional declarations were removed; and a two-part gate (a consumer fixture compiled by `tsc` through the package exports map, plus a runtime-parity test) keeps the declarations and the runtime in sync.
|
|
58
|
-
- **Fixed — errors surface instead of crashing, masking, or coming back as `0`.** A framework error raised from a detached context — a scheduled cron/timer, a worker, or a bootstrap-time `getLib()` — no longer crashes the process with `TypeError: next is not a function` while masking the original error. `getLib()` / `getConfig()` no longer crash with an opaque `Cannot read properties of undefined (reading 'conf')` when configuration is read while the config build is still partway (for example a fail-closed `${secret:KEY}` resolution), so the real boot error surfaces. A bitwise `|` at nine sites across the HTTP server, the browser client bundle, and three CLI commands coerced the Error to the number `0` — a rendered 500 page body and the `protocol:set` / `port:reset` / `project:add` output all reported `0` instead of the cause. And log messages containing a `$` are no longer mangled by the text formatter's `%`-token splice, across every level and sink. (#B108 / #B112)
|
|
59
|
-
- **Fixed — two smaller corrections.** A server-side form-validator `query` rule no longer re-points the framework's process-wide cache onto a second Map, so concurrent renders keep reading their cached entries and pooled HTTP/2 sessions land in the real server's cache. And `bundle:openapi` / `bundle:mcp` no longer advertise `.exclude()`d DTO fields in response schemas — the 200 content schema and the MCP tool `outputSchema` now emit the response projection, while request-side schemas keep the declared shape. (#B110 / #B115)
|
|
45
|
+
## What's in 0.5.19
|
|
46
|
+
|
|
47
|
+
- **Added — route authorization.** A `routing.json` rule can now gate access declaratively, enforced before the controller action runs. `param.requireAuth: true` requires an authenticated session (`req.session.user` set — populating it at login stays the app's job): an unauthenticated XHR gets a 401, a browser navigation gets a non-cacheable redirect to `settings.json > auth.loginRoute` with the original request snapshotted for `self.resumeRequest()` to replay. `param.roles: ["admin", "editor"]` requires any one of a set of roles (implies `requireAuth`); `param.policy: "ownsInvoice"` delegates the decision to a per-bundle `policies/ownsInvoice.js` function for the ownership/record checks roles can't express (AND-composed after roles, allowed only on a literal `true`, a throwing policy denies). Denials stay generic — the required roles and policy name never reach the wire, and the client-served routing maps no longer ship the authorization keys. Author mistakes refuse to boot rather than leaving a route silently open (a non-boolean flag, an undeclared `loginRoute`, an invalid `roles` shape, a missing / broken / `async` policy). Also adds the imperative `self.hasRole(role)` controller helper. Routes that declare nothing behave exactly as before.
|
|
48
|
+
- **Added — an audit trail.** A user-attributed, append-only record of "who did what to which record when", with its own store, never riding the logger sinks. Opt in with `settings.json > audit.enabled: true` and call `self.audit("invoice.delete", { resource: id })` from an action; the default backend is an append-only JSONL file at `<project>/logs/audit-<bundle>-<env>.jsonl` (override with `audit.file`, or point `audit.store` at a connectors.json entry). The actor is a snapshot of `session.user[audit.actorKey]` plus a copy of `user.roles` — never the whole user object — and `X-Forwarded-For` is never trusted. Route-authorization denials are recorded automatically (`authz.denied`, opt out with `audit.events.authz: false`), and an audit failure can never change an authorization outcome. Every request now carries an always-on request id, so audit records and JSON log lines correlate by construction. Malformed `audit` settings refuse to boot rather than leaving a compliance control silently off.
|
|
49
|
+
- **Added — an OCI image and container CLI.** Building on `image:build` (0.5.11), five verbs now inspect and run images on the same container host: `gina image:list` (aligned table or `--format=json` with a machine-sortable `sizeBytes` and an RFC3339 `createdAt`), `image:rm <ref>` (untags a multi-tagged image; no bulk delete; the reference is charset-gated), and `image:run <image>` (runs with podman — detached by default, publishing the EXPOSEd port same:same, with `--publish` / `--rm` / `--stream` / `--env-var` / `--env-file`, so a `${secret:KEY}` baked into an image gets its value at start without ever entering argv or a shell). A new `container:` group lists and stops running containers — `container:ps [--all]` and `container:stop <name|id>`, which reports the rung the container came down on (137 = SIGKILL after the grace period, otherwise its own terms). Every verb resolves the host with `image:build`'s precedence and reports a build-only host (buildah without podman) honestly instead of failing opaquely.
|
|
50
|
+
- **Changed — `redirect()` carries request data through the session by default.** When a redirect carried the request's params they used to travel in the URL as `?inheritedData=<encoded JSON>` — in clear, in the address bar, browser history, and access logs, capped at 2000 characters. On a bundle with a session they now ride the session instead (a one-shot flash, consumed by the next routed GET, gone on refresh); the URL form and its cap now apply only to session-less bundles. For a bundle that halts a credential-bearing POST mid-flight (a registration or login), this removes a plaintext-secret-in-URL disclosure. The target action still reads the data from `req.get` unchanged, and `resumeRequest()`'s plain-XHR and full-page replays no longer drop it.
|
|
51
|
+
- **Fixed — metrics no longer double-count under the isaac engine.** With `app.json metrics.enabled` on, the request-lifecycle hook ran at both dispatch layers for any request reaching the router, so Prometheus counters were double-incremented and the duration histogram double-observed. The hook now records exactly once on either engine, durations are measured from engine entry, and the dev Inspector Flow timeline keeps its accurate request-start time. Metrics-enabled deployments will see counter rates roughly halve at pickup — that is the double-count disappearing, not traffic dropping. (#OBS1)
|
|
52
|
+
- **Fixed — redirect resolution.** The relative-path `self.redirect('/path')` form resolves its target server-side again (the route matcher is async and the historical un-awaited call could never match; `redirect()` is now async — prefer `return self.redirect(...)` from actions), a redirect to an unresolvable target gets a clean 404 instead of crashing the process, and `getRoute()` no longer throws a 500 when composing a URL for a GET route that declares no `requirements` block and receives extra params (they now land as query parameters). (#B120 / #B121)
|
|
53
|
+
- **Fixed — `image:build` for projects that depend on gina.** Images built for a project that lists gina among its own dependencies no longer fail at `gina-init` with `EACCES`, and the pinned framework now actually wins `require('gina')` inside the image — the `node_modules/gina` link supersedes the project-extracted copy. Dependency-free projects were unaffected. (#B118 / #B119)
|
|
54
|
+
- **Fixed — two smaller corrections.** `gina.emit('error', ...)` on the module object no longer throws (`emit` is an inert stub; application events go through the controller's `self.emitEvent()`), and the checkbox migration warning added in 0.5.18 now also covers the un-tick direction — markup carrying `checked` plus a false / empty `value` that used to render unticked and now stays ticked is flagged once per field. (#B109 / #49)
|
|
60
55
|
|
|
61
56
|
See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
|
|
62
57
|
|
package/ROADMAP.md
CHANGED
|
@@ -43,6 +43,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
43
43
|
| **Q3 2026** | `0.5.16` ✅ | **Added**: a `multipart/form-data` request's non-file text fields are now captured into `request.body` (bracket-notation nested, values verbatim, capped by `upload.maxTextFields` / `upload.maxTextFieldSize` with a 400 on breach) — previously silently dropped · **Fixed**: `$form.send(FormData)` keeps its non-file fields when the payload also carries files (#B92), and a routing rule's `param.title` now reaches the browser-tab title (`page.view.title`) instead of always showing the route name, with the route name as the fallback (#B98) |
|
|
44
44
|
| **Q3 2026** | `0.5.17` ✅ | **Fixed**: `npm install -g gina` no longer fails with `EALLOWSCRIPTS` under the npm 12 `--allow-scripts=gina` remedy — the nested framework-dependency install drops the inherited allowance, making `0.5.17` the first version installable on npm 12 (#B106) · stale project cleanup is reliable — `project:rm @<project> --force` (the alias) removes the entry, and `project:remove` / `:rm --force` no longer `ENOENT`-crashes on an uncreatable stale path, going straight to registry-only removal (#B104/#B105) · `bundle:start` honours a bundle's configured default scope (a typo had returned an undefined property) |
|
|
45
45
|
| **Q3 2026** | `0.5.18` ✅ | **Added**: a redis-backed L2 render cache — rendered output is cached in a shared store, so several replicas serve the same rendered page and a freshly-started replica serves what a peer already rendered (cross-replica cold-start), degrading to per-replica caching if redis is down · pluggable cache backends (`server.cache.type`: `memory` / `fs` / `redis`) with bundle-wide `sliding` / `maxAge` fallbacks a route inherits · type-safe DTOs and a default-on validation pipe (`gina.dto` — one shape projected to runtime validation, response shaping, JSON Schema and TypeScript; `param.dto` validates the payload before the action with a localised 422, `param.responseDto` shapes the wire, `gina bundle:types` emits declarations, and `bundle:openapi` / `bundle:mcp` emit real request/response schemas) · `releaseWatch` — an opt-in stale built-release watch for local production rehearsals (source-tree fingerprint against the manifest release stamp, `GET /_gina/release/status` + an SSE stream, idle-gated rebuild-and-restart honouring in-flight requests and busy probes, a live shadow-DOM banner, and `restartMode: supervisor` for daemonless container launches) · `POST /_gina/cache/clear` + a `gina cache:clear` CLI (flush the rendered-output cache, or evict by event across bundles) · two-tier cache observability (an RFC 9211 `Cache-Status` `detail` naming the serving tier, plus an `l2` redis-health block on `/_gina/cache/stats`) · **Changed**: render-cache keys are release-namespaced, so an upgrade auto-invalidates (`GINA_CACHE_NAMESPACE`, else the framework version) · the `Cache-Status` miss form is now the RFC 9211 `gina-cache; fwd=uri-miss`, and Express bundles get their first cache-miss signal · **Fixed**: event-driven cache invalidation works — `self.cache.invalidateByEvent()` now exists, and a key carrying a querystring no longer throws a 500 that discarded an already-rendered page · the `fs` cache survives a restart (disk read-back via a `.meta` sidecar, original absolute expiry preserved, no TTL extension) · a checkbox's `value` attribute no longer decides its `checked` state (#49) · the published TypeScript declarations describe the runtime · errors surface instead of crashing, masking, or coming back as `0` (detached-context `throwError`, partial-boot `getLib()` / `getConfig()`, a bitwise-or at nine sites, and `$` in log messages) |
|
|
46
|
+
| **Q3 2026** | `0.5.19` ✅ | **Added**: route authorization — a `routing.json` rule gates access before the action runs via `param.requireAuth` (a 401 for XHR, a non-cacheable login redirect for a browser navigation, the original request snapshotted for `resumeRequest()`), `param.roles` (ANY-of, implies `requireAuth`), and `param.policy` (a per-bundle function for the ownership/record checks roles can't express, AND-composed after roles); denials stay generic — required roles and the policy name never reach the wire — author mistakes refuse to boot, and `self.hasRole()` authorizes mid-logic · an audit trail — opt-in `self.audit(action, data)` writes a user-attributed append-only JSONL record (its own store, never the logger sinks; an actor snapshot, `X-Forwarded-For` never trusted), route-authorization denials recorded automatically, and an always-on request id correlating audit records to JSON logs · an OCI image/container CLI on the `image:build` host — `image:list` / `image:rm` / `image:run` (podman; publishes the EXPOSEd port, `--env-var` / `--env-file` keep secrets out of argv) and a `container:` group (`container:ps` / `container:stop`, reporting the rung a container came down on) · **Changed**: `redirect()` carries request data through the session by default (a one-shot flash, gone on refresh), the clear-text `?inheritedData=` URL form and its 2000-char cap now session-less-only — removing a plaintext-secret-in-URL disclosure when a session-ful bundle halts a credential-bearing POST · **Fixed**: Prometheus metrics no longer double-count under the isaac engine (#OBS1) · the relative `self.redirect('/path')` form resolves again and an unresolvable target 404s instead of crashing (`redirect()` is now async), and `getRoute()` no longer 500s on a requirements-less GET route with extra params (#B120/#B121) · `image:build` for gina-dependent projects no longer fails at gina-init and the pinned framework wins `require('gina')` (#B118/#B119) · `gina.emit` is an inert stub (#B109) and the checkbox migration warning now covers the un-tick direction (#49) |
|
|
46
47
|
| **Q4 2026** | `0.6.0` | Security & compliance controls (technical safeguards mapping to PCI-DSS / SOC2 / HIPAA) |
|
|
47
48
|
| **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
48
49
|
| **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
|
|
@@ -117,6 +118,8 @@ Stub commands confirmed in source — handler files exist but are empty or comme
|
|
|
117
118
|
| ✅ | **`project:backup` / `project:restore`** — Archive a project's source tree to a `.zip` (`backup`, symlinks skipped), and rebuild + re-register a project from a backup `.zip` so it is immediately startable (`restore`). | `0.5.5-alpha.2` | 2026-06-19 |
|
|
118
119
|
| ✅ | **`framework:man` / `project:man` / `bundle:man` / `service:man`** — Inline CLI manual pages. Runtime-renders the group's ronn `.1.md` (substituting `{version}`/`{year}`) when it exists (`framework` today), else falls back to that group's `help.txt`. No build step or markdown/man dependency. | `0.5.5-alpha.2` | 2026-06-20 |
|
|
119
120
|
| ✅ | **`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 |
|
|
121
|
+
| ✅ | **`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 |
|
|
122
|
+
| ✅ | **`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 |
|
|
120
123
|
|
|
121
124
|
---
|
|
122
125
|
|
|
@@ -248,8 +251,8 @@ Technical-safeguard primitives that map to the **PCI-DSS**, **SOC2**, and **HIPA
|
|
|
248
251
|
|
|
249
252
|
| Status | Feature | Version | Target |
|
|
250
253
|
| --- | --- | --- | --- |
|
|
251
|
-
|
|
|
252
|
-
| 📋 | **Tamper-evident audit trail** — A user-attributed, append-only, integrity-protected record of who did what to which record when, distinct from application logging. Maps to PCI-DSS req 10, HIPAA §164.312(b), SOC2 CC7. | `0.6.x` | Q4 2026 |
|
|
254
|
+
| ✅ | **Authorization / RBAC** — Per-route authorization declared in `routing.json`: `param.requireAuth` requires an authenticated session, `param.roles: ["admin","editor"]` requires any one of a set of roles, and `param.policy: "ownsInvoice"` delegates to a per-bundle function for the record/attribute checks roles cannot express (evaluation order: authentication → roles → policy). Unauthenticated callers get a 401, or a non-cacheable login bounce when `settings.json > auth.loginRoute` is set (the paused request replays after sign-in); authorized-but-denied callers get a 403 whose body stays generic — the required roles and the policy name are never echoed to the wire. `self.hasRole(role)` covers actions that authorize mid-logic. A route that declares nothing is untouched, and any declaration that would leave a route silently ungated refuses to boot. Maps to PCI-DSS req 7, HIPAA §164.312(a)(1), SOC2 CC6 (least privilege). | `0.5.19-alpha.2` | shipped |
|
|
255
|
+
| 📋 | **Tamper-evident audit trail** — A user-attributed, append-only, integrity-protected record of who did what to which record when, distinct from application logging. **The audit trail itself has already shipped** — `settings.json > audit.enabled` plus `self.audit(action, data)` writes an append-only JSONL trail (actor, action, resource, request id, ip, route, timestamp), and route-authorization denials are recorded automatically; see the changelog for the release that carries it. **What remains for this row is the tamper-evidence** — the HMAC hash chain that makes an edited, deleted, or reordered record detectable, plus `gina audit:verify`. Maps to PCI-DSS req 10, HIPAA §164.312(b), SOC2 CC7. | `0.6.x` | Q4 2026 |
|
|
253
256
|
| 📋 | **Authentication hardening** — Password hashing/policy helpers, account lockout, and MFA/TOTP hooks. Maps to PCI-DSS req 8, HIPAA §164.312(d). | `0.6.x` | Q4 2026 |
|
|
254
257
|
| 📋 | **Session lifecycle hardening** — Session-id rotation on privilege change and idle/absolute timeouts, on top of the existing Session plugin. Maps to PCI-DSS req 8.2. | `0.6.x` | Q4 2026 |
|
|
255
258
|
| 📋 | **PII/PHI protection** — Production log-field redaction, data classification, and retention helpers (today's redaction is a dev-only inspector tool). Maps to HIPAA and SOC2 Privacy. | `0.6.x` | Q4 2026 |
|
package/bin/cli
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.19
|
|
@@ -6216,7 +6216,7 @@ function Routing() {
|
|
|
6216
6216
|
* @function getRoute
|
|
6217
6217
|
*
|
|
6218
6218
|
* @param {string} rule e.g.: [ <scheme>:// ]<name>[ @<bundle> ][ /<environment> ]
|
|
6219
|
-
* @param {object} params
|
|
6219
|
+
* @param {object} params - substituted into the route's `:placeholders`; on a GET route, leftover keys that are neither reserved nor declared in the rule's `requirements` are appended to `route.url` as query parameters (a rule with no `requirements` block is safe — the block is optional)
|
|
6220
6220
|
* @param {number} [urlIndex] in case you have more than one url registered for the current route, you can select the one you want to use. Default is 0.
|
|
6221
6221
|
*
|
|
6222
6222
|
* @returns {object} route
|
|
@@ -6349,7 +6349,10 @@ function Routing() {
|
|
|
6349
6349
|
for (let p in params) {
|
|
6350
6350
|
if (
|
|
6351
6351
|
self.reservedParams.indexOf(p) > -1
|
|
6352
|
-
|
|
6352
|
+
// a rule that declares no `requirements` block composes with requirements: undefined —
|
|
6353
|
+
// guard the deref (the fitsWithRequirements discipline) so getRoute(rule, extraParams)
|
|
6354
|
+
// on such a GET route appends the query params instead of throwing
|
|
6355
|
+
|| ( route.requirements && typeof(route.requirements[p]) != 'undefined' )
|
|
6353
6356
|
|| extracted.indexOf(p) > -1
|
|
6354
6357
|
) {
|
|
6355
6358
|
continue;
|
|
@@ -6547,9 +6550,15 @@ function Routing() {
|
|
|
6547
6550
|
/**
|
|
6548
6551
|
* Get route by url
|
|
6549
6552
|
* N.B.: this will only work with rules declared with `GET` method property
|
|
6550
|
-
*
|
|
6553
|
+
*
|
|
6554
|
+
* Async since #B121: the underlying `compareUrls` machinery is async (it can
|
|
6555
|
+
* await `validator::` routing-requirement validation), and the historical
|
|
6556
|
+
* un-awaited call meant no rule could ever match — callers received the
|
|
6557
|
+
* `false` sentinel for every url. Await this method (or `.then()` it); the
|
|
6558
|
+
* old "unresolved promises" caveat that used to sit here was this defect.
|
|
6551
6559
|
*
|
|
6552
6560
|
* @function getRouteByUrl
|
|
6561
|
+
* @async
|
|
6553
6562
|
*
|
|
6554
6563
|
* @param {string} url e.g.: /webroot/some/url/path or http
|
|
6555
6564
|
* @param {string} [bundle] targeted bundle
|
|
@@ -6557,10 +6566,15 @@ function Routing() {
|
|
|
6557
6566
|
* @param {object} [request]
|
|
6558
6567
|
* @param {boolean} [isOverridingMethod] // will replace request.method by the provided method - Used for redirections
|
|
6559
6568
|
*
|
|
6560
|
-
* @returns {object|boolean} route - when route is found; `false` when not found
|
|
6569
|
+
* @returns {Promise<object|boolean>} route - when route is found; `false` when not found
|
|
6570
|
+
*
|
|
6571
|
+
* @example
|
|
6572
|
+
* // from an async context (e.g. a controller helper)
|
|
6573
|
+
* var route = await lib.routing.getRouteByUrl('/myapp/landing', 'myapp', 'GET', req);
|
|
6574
|
+
* if (route) { console.log(route.name, route.param); }
|
|
6561
6575
|
* */
|
|
6562
6576
|
|
|
6563
|
-
self.getRouteByUrl = function (url, bundle, method, request, isOverridingMethod) {
|
|
6577
|
+
self.getRouteByUrl = async function (url, bundle, method, request, isOverridingMethod) {
|
|
6564
6578
|
|
|
6565
6579
|
if (
|
|
6566
6580
|
arguments.length == 2
|
|
@@ -6744,8 +6758,16 @@ function Routing() {
|
|
|
6744
6758
|
// normal case
|
|
6745
6759
|
//Parsing for the right url.
|
|
6746
6760
|
try {
|
|
6747
|
-
|
|
6748
|
-
|
|
6761
|
+
// #B121 root cause — `compareUrls` is async (it can await `validator::`
|
|
6762
|
+
// requirement validation), so the historical un-awaited call yielded a
|
|
6763
|
+
// Promise whose `.past` is always undefined: no rule could EVER match
|
|
6764
|
+
// server-side. Await it, and mirror the engine loop's exact-url
|
|
6765
|
+
// fast-path so this block stays identical to `server.js` (see the
|
|
6766
|
+
// N.B. above the loop).
|
|
6767
|
+
// was: isRoute = self.compareUrls(params, routing[name].url, request);
|
|
6768
|
+
// was: if (isRoute.past) {
|
|
6769
|
+
isRoute = await self.compareUrls(params, routing[name].url, request);
|
|
6770
|
+
if (pathname == routing[name].url || isRoute.past) {
|
|
6749
6771
|
route = JSON.clone(routing[name]);
|
|
6750
6772
|
route.name = name;
|
|
6751
6773
|
// #B52-residual finding-2: getRouteByUrl returns `route` (a fresh clone of the
|
|
@@ -6839,7 +6861,11 @@ function Routing() {
|
|
|
6839
6861
|
}
|
|
6840
6862
|
|
|
6841
6863
|
// forms
|
|
6842
|
-
|
|
6864
|
+
// #B121 root-cause sibling — un-awaited async `compareUrls`: `altRoute`
|
|
6865
|
+
// was a Promise (truthy, `.past` undefined), so this not-found
|
|
6866
|
+
// bookkeeping branch could never run.
|
|
6867
|
+
// was: var altRoute = self.compareUrls(params, url, request) || null;
|
|
6868
|
+
var altRoute = ( await self.compareUrls(params, url, request) ) || null;
|
|
6843
6869
|
if(altRoute.past && isMethodProvidedByDefault) {
|
|
6844
6870
|
notFound = method.toUpperCase() +'::'+ altRoute.request.routing.rule;
|
|
6845
6871
|
if ( typeof(self.notFound[notFound]) == 'undefined' ) {
|
|
@@ -14951,6 +14977,25 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
14951
14977
|
checkboxValueStateWarned[elId] = true;
|
|
14952
14978
|
console.warn('[ FormValidator ] checkbox `'+ elId +'`: `value` no longer implies the checked state; add the `checked` attribute if it must render ticked, or set `data-gina-form-checkbox-value-as-state="true"` on the form to restore the legacy behavior');
|
|
14953
14979
|
}
|
|
14980
|
+
|
|
14981
|
+
// Migration aid (#49) — the mirror direction: this markup used to be
|
|
14982
|
+
// auto-UN-ticked by its `value` (the pre-fix init pass cleared a
|
|
14983
|
+
// parser-checked box whose resolved value read false/empty) and now
|
|
14984
|
+
// stays ticked. Membership mirrors the old resolution chain:
|
|
14985
|
+
// `data-value` attribute, else `value` attribute, else the DOM
|
|
14986
|
+
// `.value` — with the empty string mapping to false. Reads run
|
|
14987
|
+
// before the checkbox init pass, so `.value` is parser-fresh here.
|
|
14988
|
+
var legacyUntickValue = $inputs[f].getAttribute('data-value') || $inputs[f].getAttribute('value') || $inputs[f].value;
|
|
14989
|
+
if (
|
|
14990
|
+
/^(checkbox)$/i.test($inputs[f].type)
|
|
14991
|
+
&& !isCheckboxValueAsState($form)
|
|
14992
|
+
&& $inputs[f].hasAttribute('checked')
|
|
14993
|
+
&& ( legacyUntickValue === '' || /^false$/i.test(legacyUntickValue) )
|
|
14994
|
+
&& !checkboxValueStateWarned[elId]
|
|
14995
|
+
) {
|
|
14996
|
+
checkboxValueStateWarned[elId] = true;
|
|
14997
|
+
console.warn('[ FormValidator ] checkbox `'+ elId +'`: `value` no longer un-ticks a checked box; remove the `checked` attribute if it must render unticked, or set `data-gina-form-checkbox-value-as-state="true"` on the form to restore the legacy behavior');
|
|
14998
|
+
}
|
|
14954
14999
|
}
|
|
14955
15000
|
}
|
|
14956
15001
|
|