gina 0.5.17 → 0.5.18
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 +35 -0
- package/README.md +27 -6
- package/ROADMAP.md +33 -0
- package/framework/v0.5.18/VERSION +1 -0
- package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/js/gina.js +101 -15
- package/framework/v0.5.18/core/asset/plugin/dist/vendor/gina/js/gina.min.js +588 -0
- 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.17 → v0.5.18}/core/config.js +18 -0
- package/framework/v0.5.18/core/connectors/redis/lib/render-cache-store.js +355 -0
- package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.js +78 -0
- package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-json.js +81 -51
- package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-nunjucks.js +50 -49
- package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-swig.js +63 -51
- package/framework/v0.5.18/core/controller/release-banner.js +261 -0
- package/framework/{v0.5.17 → v0.5.18}/core/gna.js +78 -0
- package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/validator/src/form-validator.js +11 -1
- package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/validator/src/main.js +89 -13
- package/framework/{v0.5.17 → v0.5.18}/core/router.js +19 -0
- package/framework/{v0.5.17 → v0.5.18}/core/server.isaac.js +269 -13
- package/framework/{v0.5.17 → v0.5.18}/core/server.js +476 -4
- package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +1 -1
- package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +1 -1
- package/framework/{v0.5.17 → v0.5.18}/core/template/conf/env.json +4 -1
- package/framework/{v0.5.17 → v0.5.18}/core/template/conf/settings.json +27 -1
- package/framework/{v0.5.17 → v0.5.18}/helpers/context.js +128 -47
- package/framework/{v0.5.17 → v0.5.18}/lib/cache/README.md +19 -2
- package/framework/{v0.5.17 → v0.5.18}/lib/cache/src/main.js +174 -33
- package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/build.js +28 -0
- package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/help.txt +24 -0
- package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/mcp.js +58 -18
- package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/openapi.js +67 -10
- package/framework/v0.5.18/lib/cmd/bundle/types.js +170 -0
- package/framework/v0.5.18/lib/cmd/cache/arguments.json +5 -0
- package/framework/v0.5.18/lib/cmd/cache/clear.js +373 -0
- package/framework/v0.5.18/lib/cmd/cache/help.txt +65 -0
- package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/reset.js +1 -1
- package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/add.js +1 -1
- package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/build.js +26 -0
- package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/set.js +1 -1
- package/framework/v0.5.18/lib/dto/package.json +17 -0
- package/framework/v0.5.18/lib/dto/src/main.js +662 -0
- package/framework/v0.5.18/lib/dto-pipe/package.json +7 -0
- package/framework/v0.5.18/lib/dto-pipe/src/main.js +203 -0
- package/framework/v0.5.18/lib/dto-types/package.json +17 -0
- package/framework/v0.5.18/lib/dto-types/src/main.js +323 -0
- package/framework/{v0.5.17 → v0.5.18}/lib/index.js +30 -0
- package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/helper.js +8 -1
- package/framework/v0.5.18/lib/release-watch/package.json +20 -0
- package/framework/v0.5.18/lib/release-watch/src/main.js +1890 -0
- package/framework/v0.5.18/lib/render-cache/package.json +17 -0
- package/framework/v0.5.18/lib/render-cache/src/main.js +992 -0
- package/framework/v0.5.18/lib/render-cache-store.js +86 -0
- package/framework/{v0.5.17 → v0.5.18}/lib/routing-introspect/src/main.js +107 -0
- package/framework/{v0.5.17 → v0.5.18}/lib/shell.js +0 -1
- package/framework/{v0.5.17 → v0.5.18}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +30 -0
- package/package.json +7 -5
- package/schema/routing.json +4 -4
- package/schema/settings.json +45 -0
- package/script/check_types_consumer.js +147 -0
- package/script/generate_gna_types.js +10 -6
- package/types/globals.d.ts +91 -23
- package/types/gna.d.ts +26 -74
- package/types/index.d.ts +925 -487
- package/framework/v0.5.17/VERSION +0 -1
- package/framework/v0.5.17/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -585
- package/framework/v0.5.17/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.17/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/AUTHORS +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/LICENSE +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/content.encoding +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/controller/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/dev/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/locales/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/locales/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/mime.types +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/model/entity.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/model/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/server.express.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/status.codes +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/console.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/path.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/task.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/helpers/text.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/async/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/config.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/image-build/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/job/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/job/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/job-store.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/math/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/model.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/proc.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/session-store.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/state.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/url/README.md +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/url/index.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/validator.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.17 → v0.5.18}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,41 @@ 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.18 - 2026-07-16
|
|
10
|
+
### Added
|
|
11
|
+
* 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.
|
|
12
|
+
* Pluggable render/output-cache backend strategy: `server.cache.type` sets the default cache backend (`memory` or `fs`) for a whole bundle, and a route with `cache` set but no `type` now inherits it — mirroring the existing `ttl` / `sliding` / `maxAge` fallbacks. A per-route `cache.type` still wins. New bundles default to `memory`; behaviour is unchanged for existing installs (a route with no effective `type` is not cached, exactly as before). The memory and fs backends now share one strategy dispatcher (`lib/render-cache`) that the render controllers and the server read path go through, providing the seam for additional backends.
|
|
13
|
+
* Added a native schema/DTO builder (gina.dto): author a data shape once and project it to dialect-aware JSON Schema (.toJsonSchema, draft-07 or 2020-12), the live form-validator rules-object (.toRules), and a stable name for the type generator. Also adds a routing-introspect helper that un-collapses inline validator:: requirements into real JSON Schema. Foundation for the #DTO validation pipe and richer OpenAPI/MCP request/response schemas.
|
|
14
|
+
* Added a POST /_gina/cache/clear admin endpoint (both server engines, loopback-gated like /_gina/cache/stats) that flushes the rendered-output cache — the static: (HTML) and data: (JSON) namespaces, with an optional ?bundle=<name> filter — without ever touching compiled templates or HTTP/2 sessions. It is backed by a namespace-scoped renderCache.clear(bundle) (which runs each entry cleanup so fs bodies + their .meta sidecars are removed) and a new keys() accessor on the in-process cache primitive. A new gina cache:clear [<bundle>] @<project> CLI drives it — an offline reclaim of the on-disk render-output dirs for the bundle (including orphaned prior-release dirs, preserving the config/swig infra caches) plus the in-heap flush via the endpoint — with --dry-run and --format=json output.
|
|
15
|
+
* `bundle:openapi` and `bundle:mcp` now emit real request/response schemas from a route's `param.dto` / `param.responseDto`. A bundle DTO module at `dtos/<Name>.js` — a factory `module.exports = function (dto) { return dto.object({ ... }); }` — projects to an OpenAPI 3.1 requestBody plus a 422 response, or an MCP tool inputSchema.body plus outputSchema. An inline `validator::{ ... }` routing requirement is also un-collapsed into a real parameter schema instead of the previous `.*`.
|
|
16
|
+
* Default-on request validation from a route DTO: a routing.json rule declaring `param.dto` now has its payload validated against that DTO before the controller action runs, answering a clean 422 (field -> rule -> message, localised) on failure and handing the action a type-coerced payload on success. `param.responseDto` now also shapes the outgoing JSON, so a field marked `.exclude()` never reaches the wire. DTOs are resolved and registered at bundle boot, so a missing or un-evaluable DTO fails the boot instead of silently disabling validation. Routes that declare no DTO are unaffected.
|
|
17
|
+
* Evict by event from outside the bundle: `POST /_gina/cache/clear?event=<name>` (both engines) and `gina cache:clear --event=<name>`. A controller's `self.cache.invalidateByEvent()` only reaches its own process, so this is how one bundle's write invalidates another bundle's cached pages. Both report the number of entries evicted. Note `?event=` previously went unread, so passing it flushed EVERY bundle's output cache instead of evicting that event's entries; it is now honoured and takes precedence over `?bundle=`.
|
|
18
|
+
* `gina bundle:types <bundle> @<project>` emits TypeScript declarations from a bundle's DTOs — the fourth projection of a DTO, alongside runtime validation, response shaping and the OpenAPI / MCP schemas, so a shape authored once is also the shape your editor and `tsc` see. Written to `<bundle>/dtos/index.d.ts` by default (`--output` overrides). Each DTO emits TWO types, because its declared shape and the shape the server actually holds are not the same: `<Name>` is what the client sends (and what the OpenAPI schema documents), while `<Name>Projected` is what the action reads on `req.dto` and what a `param.responseDto` puts on the wire — with the `.exclude()`d fields dropped. Value bounds (`.min()` / `.max()`) are carried as documentation only, and a `date` field is typed `string` rather than `Date`, because that is what the validator actually hands the action.
|
|
19
|
+
* Per-form legacy opt-in `data-gina-form-checkbox-value-as-state="true"` (deprecated, transitional) preserving the pre-fix value-driven checkbox ticking while markup migrates to the `checked` attribute; a once-per-field console warning now flags checkboxes whose `value` used to imply the checked state
|
|
20
|
+
* Render cache: a redis-backed L2 tier — rendered output is cached in a shared redis so multiple replicas serve the same rendered page, and a freshly-started replica serves content a peer already rendered (cross-replica cold-start). Enable it with a bundle-wide default in settings.json — `cache: { type: "redis", store: "<name>" }`, where `store` names a `connectors.json` redis connector — or per route via `cache: { type: "redis", ttl: <seconds> }`. Writes go to the in-process L1 synchronously and to redis fire-and-forget (the response never waits on redis); a request that misses L1 warms it back from redis with the authoritative remaining PTTL and re-registers the route's invalidateOnEvents; invalidation (delete / clear / invalidateByEvent) propagates to redis; a down or failing redis degrades to per-replica caching (fail-open) with a once-per-process diagnostic warning. The bundle validates its cache configuration at boot and refuses to start on an unsupported shape (redis with `sliding`, a redis route with neither a ttl nor invalidateOnEvents, or a redis strategy with no `store`) — give every redis route a ttl (or invalidateOnEvents), since a non-expiring key is orphaned on a release-namespace change.
|
|
21
|
+
* bundle:build and project:build now stamp a source-tree fingerprint (fingerprint, builtAt, fpSpec) into the project manifest release records — the substrate for stale built-release detection on local production rehearsals (releaseWatch groundwork)
|
|
22
|
+
* Two-tier render-cache observability: every cache hit's Cache-Status header now carries an RFC 9211 detail parameter naming the physical tier that served the bytes — detail=memory for the in-process L1, detail=redis for a shared-L2 warm (the cross-replica cold-start visible per request), detail=fs for a disk read-back after a restart — and /_gina/cache/stats gains an additive l2 block on both engines reporting the redis store connection health (status, mode, key prefix, connection-error count and last error), with no network round-trip on the admin path.
|
|
23
|
+
* releaseWatch — opt-in stale built-release watch for local production rehearsals (#RWATCH): `server.releaseWatch` in settings.json arms a source-tree fingerprint watch on local-scope non-dev bundles; staleness surfaces on `GET /_gina/release/status` and the `GET /_gina/release/events` SSE stream, and `POST /_gina/release/rebuild` rebuilds with an idle-gated restart honouring in-flight requests and `gina.registerBusyProbe` application probes (notify default, opt-in auto mode)
|
|
24
|
+
* releaseWatch — a live stale-release banner (#RWATCH): with `server.releaseWatch` enabled on a local-scope non-dev bundle, rendered HTML pages carry a self-contained bottom-bar banner that surfaces build/restart staleness live over the `/_gina/release/events` SSE stream and offers a one-click rebuild-and-reload (idle-gated restart for server-code changes, build-only for static assets, contextual force-restart while waiting on idle); shadow-DOM isolated, CSP-nonce aware, injected server-side into both the swig and nunjucks render paths, and byte-inert on every other scope/env
|
|
25
|
+
* releaseWatch — a `server.releaseWatch.restartMode` option (#RWATCH): `daemon` (default) drains and spawns `gina bundle:restart`; `supervisor` drains and then exits(0) so an external orchestrator respawns the process on the rebuilt release — the daemonless `gina-container` launch path, which has no framework daemon to spawn a restart (requires a restart-on-clean-exit policy, e.g. a k8s Deployment or `docker run --restart=always`). It is an explicit operator opt-in, never auto-detected: a bundle is spawned detached and legitimately outlives its daemon, so probing for a daemon would risk exiting a healthy process after a routine `gina stop`
|
|
26
|
+
### Changed
|
|
27
|
+
* Release-namespaced render/output-cache keys — a framework upgrade (or a per-deploy `GINA_CACHE_NAMESPACE` bump) now auto-invalidates the render/output cache, so a new build never serves a page cached by old code. The cache key AND the `fs` cache path carry a release namespace: `GINA_CACHE_NAMESPACE` (an operator-set id such as a git SHA or build number) when set, otherwise the framework version (`GINA_VERSION`, which is set at runtime). The key format is centralized in ONE builder shared by the three render controllers and the server read path, so the writer and reader keys can never drift. `fs`-cached files now live under a `<namespace>` directory (`<cache.path>/<bundle>/<namespace>/…`); files from a superseded namespace are orphaned on disk until they are cleared (a cross-strategy flush is a follow-up). Dev mode is unaffected (it runs cacheless).
|
|
28
|
+
* The Cache-Status miss form is now the RFC 9211 grammar gina-cache; fwd=uri-miss (previously the bare gina-cache; uri-miss, which read as an unregistered parameter to RFC-aware tooling), and the engine-agnostic read path now emits it on a genuine both-tier miss — giving Express bundles their first cache-miss signal on the wire.
|
|
29
|
+
### Fixed
|
|
30
|
+
* A framework error raised from a detached context — a scheduled cron/timer, a worker, or a bootstrap-time `getLib()` call — no longer crashes the process with `TypeError: next is not a function`. The internal `throwError` helper treated the per-request router context (stored globally and never cleared) as if a live request were in flight and invoked a stale, non-callable `next()`, which additionally masked the original error. It now writes an error response only when a live response is still writable, hands back to the middleware chain only when `next` is genuinely callable, and otherwise surfaces the real error (emerg-logged for fatal calls, thrown otherwise). Live-request error handling is unchanged.
|
|
31
|
+
* The `fs` render-cache backend now survives a server restart. Previously an `fs`-cached response written to disk was 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 server read path now falls back to disk on an index miss, replaying the entry from a sibling `<file>.meta` JSON sidecar and preserving the ORIGINAL absolute expiry: a restart never extends a TTL (a non-sliding entry still expires at its original creation time plus `ttl`; a sliding entry keeps its absolute `maxAge` ceiling). The `memory` backend stays volatile (cleared on restart), unchanged.
|
|
32
|
+
* getLib() and getConfig() no longer crash with an opaque "Cannot read properties of undefined (reading 'conf')" when the framework configuration build aborts partway (for example a fail-closed secret resolution on an unset ${secret:KEY}) and bundle code, a cron, a worker, or module-load-time bootstrap reads configuration before the build has finished. The resolvers now fall back to the equivalent per-bundle/env configuration when the fully-built container is not yet available, or fail cleanly, so the real underlying boot error surfaces instead of a masking crash.
|
|
33
|
+
* Event-driven cache invalidation now works. A route's `cache.invalidateOnEvents` was registered but nothing ever fired it, so the documented `self.cache.invalidateByEvent()` did not exist and configured routes served stale content until their TTL expired. `self.cache` now exists on the controller and returns the number of entries evicted. Three further defects in the same path are fixed: re-registering a key that carries a querystring THREW (the registry ran cache keys through a condition evaluator, and `?`/`=` parse as operator tokens) — under the swig engine that throw unwound to the top-level render error handler, which answered 500 and discarded a page that had already rendered; registrations were never reclaimed, so the registry grew one row per cache-miss re-render; and an `fs`-cached entry read back after a restart came back with no registration at all, so firing its event silently failed to evict it.
|
|
34
|
+
* A failed cache write no longer discards a page that rendered correctly. Under the swig engine a cache-write error unwound to the top-level render error handler, which answered 500 — throwing away a perfectly good response. It now degrades exactly as the nunjucks and JSON renderers already did: the response is served, the failure is logged, and the next cache miss retries the write.
|
|
35
|
+
* 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 instead of 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 consumer 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 (#49)
|
|
36
|
+
* The published TypeScript declarations now describe the runtime: the main entry declares a value (previously 'import gina from "gina"; gina.lib' failed to typecheck for every consumer), the module surface 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 + a runtime-parity test) keeps the declarations and the runtime in sync.
|
|
37
|
+
* Restored error diagnostics that a bitwise `|` was silently destroying at nine sites across the HTTP server, the browser client bundle, and three CLI commands. `err.stack|err.message|err` coerced the Error to the number `0` (because `+` binds tighter than `|`), so a rendered 500 page body, the express-middleware error handler, and the `protocol:set` / `port:reset` / `project:add` CLI error output all reported `0` instead of the cause. They now use a logical `||` and surface the real error stack/message.
|
|
38
|
+
* A server-side form-validator query rule no longer re-points the framework's process-wide cache onto a second Map: the rule's hand-built controller now reuses the live server instance (published at server start), so concurrent renders keep reading their cached entries and pooled HTTP/2 sessions land in the real server's cache instead of an orphan store on the bundle's config dict
|
|
39
|
+
* Fixed bundle:openapi and bundle:mcp advertising .exclude()d DTO fields in response schemas — the 200 content schema and the MCP tool outputSchema now emit the response projection (toJsonSchema with dropExcluded), dropping fields the wire can never carry from properties and required[]; request-side requestBody / inputSchema.body keep the declared shape (#B110)
|
|
40
|
+
* Fixed log messages containing a $ being mangled by the text formatter — the %-token splice used a string replacement, which dollar-expands $-sequences in the message (a $ followed by a backtick was replaced by the rendered log prefix itself, recurring at each occurrence); the formatter now uses a function replacer so messages render verbatim across all levels and all sinks (stdout, mq, file) (#B108)
|
|
41
|
+
* The in-process render/output cache no longer orphans `fs`-strategy files on TTL expiry: an entry expiring on its timer previously skipped the eviction cleanup, leaving its cached body and `.meta` sidecar on disk and its event registrations stranded. Timer expiry now runs the same cleanup as a manual eviction (#B113).
|
|
42
|
+
* The validator's forced rule self-injection for boolean-classified checkboxes (and boolean-valued radios) now appends `isRequired` before `isBoolean`, so the engine's false-value rescue applies and an unchecked box whose rule declared neither key no longer fails validation with "Cannot be left empty"
|
|
43
|
+
|
|
9
44
|
## 0.5.17 - 2026-07-13
|
|
10
45
|
### Fixed
|
|
11
46
|
* 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.
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Gina
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/gina) [](https://www.npmjs.com/package/gina) [](https://github.com/gina-io/gina/stargazers) [](https://github.com/gina-io/gina/actions/workflows/test.yml) [](https://www.npmjs.com/package/gina) [](https://www.npmjs.com/package/gina) [](https://github.com/gina-io/gina/stargazers) [](https://github.com/gina-io/gina/actions/workflows/test.yml) [](https://socket.dev/npm/package/gina) [](https://nodejs.org) [](https://bun.sh) [](https://opensource.org/licenses/MIT)
|
|
4
4
|
|
|
5
5
|
> **Documentation:** [gina.io/docs](https://gina.io/docs/) · **Issues:** [GitHub](https://github.com/gina-io/gina/issues) · **Changelog:** [CHANGELOG.md](./CHANGELOG.md)
|
|
6
6
|
|
|
@@ -42,11 +42,21 @@ 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
|
-
- **
|
|
48
|
-
- **
|
|
49
|
-
- **
|
|
45
|
+
## What's in 0.5.18
|
|
46
|
+
|
|
47
|
+
- **Added — a shared redis L2 for the render cache, and pluggable cache backends.** `server.cache.type` now sets a bundle's default output-cache backend (`memory`, `fs`, or `redis`) and a route with `cache` set inherits it, alongside new bundle-wide `sliding` / `maxAge` fallbacks (per-route values still win). The `redis` tier caches rendered output 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): writes go to the in-process L1 synchronously and to redis fire-and-forget (the response never waits on redis), an L1 miss warms back from redis with the authoritative remaining TTL, invalidation propagates, and a down or failing redis degrades to per-replica caching (fail-open). The bundle validates its cache configuration at boot and refuses to start on an unsupported shape. New bundles default to `memory`; existing installs are unchanged.
|
|
48
|
+
- **Added — type-safe DTOs and a default-on validation pipe.** `gina.dto` lets you author a data shape once and project it four ways: runtime validation, response shaping, JSON Schema (draft-07 or 2020-12), and TypeScript. A `routing.json` rule declaring `param.dto` has its payload validated before the controller action runs — a clean, localised 422 on failure, a type-coerced payload on success — and `param.responseDto` shapes the outgoing JSON so a field marked `.exclude()` never reaches the wire. `gina bundle:types <bundle> @<project>` emits declarations from those same DTOs, and `bundle:openapi` / `bundle:mcp` now emit real request/response schemas instead of `.*`. DTOs are resolved at bundle boot, so a missing one fails the boot instead of silently disabling validation; routes that declare no DTO are unaffected.
|
|
49
|
+
- **Added — `releaseWatch`, a stale built-release watch for local production rehearsals.** A bundle serving a built release under `local` scope + a non-dev env has no hot-reload, so after you edit source it silently keeps serving the stale build. Opt in via `server.releaseWatch`: the bundle fingerprints its source tree against the manifest release stamp (now written by `bundle:build` / `project:build`), surfaces staleness on `GET /_gina/release/status` and a `GET /_gina/release/events` SSE stream, and rebuilds on `POST /_gina/release/rebuild` with an **idle-gated restart** that waits on in-flight requests and `gina.registerBusyProbe` application probes. Rendered pages carry a live shadow-DOM banner offering one-click rebuild-and-reload, and `restartMode: supervisor` suits a daemonless container launch (drain, then exit(0) for an orchestrator to respawn). Hard-gated on local scope + a non-dev env — byte-inert everywhere else.
|
|
50
|
+
- **Added — flush or event-evict the render cache from outside the bundle.** `POST /_gina/cache/clear` (both engines, loopback-gated) and a new `gina cache:clear [<bundle>] @<project>` CLI flush the rendered-output cache — without ever touching compiled templates or HTTP/2 sessions — with `--dry-run` and `--format=json`. `?event=<name>` evicts by event: a controller's `self.cache.invalidateByEvent()` only reaches its own process, so this is how one bundle's write invalidates another bundle's cached pages. Note `?event=` previously went unread, so passing it flushed *every* bundle's output cache; it is now honoured.
|
|
51
|
+
- **Added — two-tier render-cache observability.** Every cache hit's `Cache-Status` header now carries an RFC 9211 `detail` parameter naming the physical tier that served the bytes — `memory` for the in-process L1, `redis` for a shared-L2 warm (the cross-replica cold-start, visible per request), `fs` for a disk read-back after a restart — and `/_gina/cache/stats` gains an `l2` block reporting the redis store's connection health, with no network round-trip on the admin path.
|
|
52
|
+
- **Changed — render-cache keys are release-namespaced, so an upgrade auto-invalidates.** The cache key *and* the `fs` cache path now carry a release namespace — `GINA_CACHE_NAMESPACE` (an id you set, such as a git SHA or build number) when present, otherwise the framework version — so a new build never serves a page cached by old code. `fs`-cached files from a superseded namespace are orphaned on disk until cleared. Dev mode is unaffected (it runs cacheless).
|
|
53
|
+
- **Changed — the `Cache-Status` miss form follows RFC 9211.** It is now `gina-cache; fwd=uri-miss` (previously the bare `gina-cache; uri-miss`, which read as an unregistered parameter to RFC-aware tooling), and the engine-agnostic read path emits it on a genuine both-tier miss — giving Express bundles their first cache-miss signal on the wire.
|
|
54
|
+
- **Fixed — event-driven cache invalidation now works, and a cache fault no longer discards a good page.** A route's `cache.invalidateOnEvents` was registered but nothing ever fired it — the documented `self.cache.invalidateByEvent()` did not exist, so configured routes served stale content until their TTL expired. `self.cache` now exists on the controller and reports the number of entries evicted. Three further defects in the same path are fixed: re-registering a key carrying a querystring **threw** (the registry ran cache keys through a condition evaluator, where `?`/`=` parse as operator tokens) and under the swig engine that throw unwound to the top-level error handler, which answered 500 and discarded a page that had already rendered; registrations were never reclaimed, so the registry grew a row per cache-miss re-render; and an `fs` entry read back after a restart carried no registration at all. Separately, a failed cache **write** now degrades exactly as the nunjucks and JSON renderers already did — the response is served, the failure logged, and the next miss retries.
|
|
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)
|
|
50
60
|
|
|
51
61
|
See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
|
|
52
62
|
|
|
@@ -71,6 +81,17 @@ Full installation guide, tutorials, configuration reference, and API docs at **[
|
|
|
71
81
|
|
|
72
82
|
Gina is co-authored by **Martin Luther ETOUMAN NDAMBWE** ([Rhinostone](https://rhinostone.com)) and **Fabrice DELANEAU** ([fdelaneau.com](https://fdelaneau.com)). Final decisions on direction, API design, and releases rest with Martin Luther. Community contributions and RFCs are welcome and taken seriously. See [GOVERNANCE.md](./GOVERNANCE.md) for details.
|
|
73
83
|
|
|
84
|
+
## Supply-chain scanners
|
|
85
|
+
|
|
86
|
+
Gina is an MVC framework with a process-management CLI, so it uses Node's
|
|
87
|
+
`child_process` by design — to start and supervise application bundle processes
|
|
88
|
+
and the framework daemon, run local/SSH commands (`lib/shell`), launch the
|
|
89
|
+
inspector, and perform setup in the npm install scripts. Supply-chain scanners
|
|
90
|
+
therefore report a **Shell access** capability for `child_process`. This is
|
|
91
|
+
expected and intrinsic to a CLI framework, not a vulnerability: the install-time
|
|
92
|
+
commands are built only from local values (npm prefix, install path) and take no
|
|
93
|
+
network input.
|
|
94
|
+
|
|
74
95
|
## License (MIT)
|
|
75
96
|
|
|
76
97
|
Copyright © 2009-2026 [Rhinostone](https://rhinostone.com)
|
package/ROADMAP.md
CHANGED
|
@@ -42,6 +42,8 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
42
42
|
| **Q3 2026** | `0.5.15` ✅ | Client-side components (Web Components) — standards-based, zero-dependency conventions for stateful client widgets: `gina view:add` scaffolds a reference custom element (server-rendered light-DOM partial + behavior-only class), components upgrade automatically in popin/XHR-injected content with no rebinding, form-associated custom elements participate in `FormValidator`, live-data components ride the connect/disconnect lifecycle over `method:"ws"` routes or SSE, and the dev Inspector gains a component census + client component-event capture · a popin/dialog trigger can opt out of the hover/focus preload (`data-gina-dialog-preload="false"`) · **Fixed**: `gina.popin` sees every popin so a form can redirect into a different one (#B90), a redirect into a popin opens content-first (#B79), server-side validation of a data object against a rules object works (#B85), `$form.send(FormData)` nests bracket-notation field names (#B92), a fields-only multipart POST no longer hangs (#B93) and a malformed multipart body no longer crashes the bundle (#B97), `X-Powered-By` suppression reaches static and error responses (#B96), and upload reset/delete removes the preview, restores class-hidden inputs, and gains removal callbacks (#B94/#B95) |
|
|
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
|
+
| **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
|
+
| **Q4 2026** | `0.6.0` | Security & compliance controls (technical safeguards mapping to PCI-DSS / SOC2 / HIPAA) |
|
|
45
47
|
| **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
46
48
|
| **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
|
|
47
49
|
|
|
@@ -60,6 +62,20 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
60
62
|
| ✅ | **PATCH method** — `req.patch` populated with the parsed request body (JSON or form-encoded). `req.body` aliases `req.patch`. URI params merged. `"method": "PATCH"` valid in `routing.json`. Use PATCH for partial updates (only sent fields change) vs PUT which replaces the full resource. | `0.3.0` | 2026-03-31 |
|
|
61
63
|
| ✅ | **HEAD method** — `req.head` populated with query-string and URI params. Full controller action runs so all response headers are set correctly; body is suppressed before writing to the wire. Both `render()` and `renderJSON()` honour HEAD. Routes declared as `GET` automatically accept HEAD — no extra routing rule needed. | `0.3.0` | 2026-03-31 |
|
|
62
64
|
| ✅ | **Client-side components (Web Components)** — Standards-based conventions for stateful client widgets: custom elements v1, zero dependency, no build tooling. Server-rendered light-DOM authoring keeps HTML (designer) and JS (developer) separated — the behavior-only class binds its own server-rendered subtree and holds no markup strings (repeatable markup clones from a server-rendered `<template>`). Components upgrade automatically in popin/XHR-injected content with no rebinding; SEO/GEO-first (meaningful content ships in the initial server-rendered HTML). `gina view:add` scaffolds a reference component (engine partial + behavior-only class); e2e coverage locks popin auto-upgrade, strict-CSP compatibility (real nonce'd header, no `unsafe-inline`), SSR hydration from attributes + a JSON `data-*` payload, and no-JS crawler equivalence. The `gina-*` tag prefix is reserved for framework components. Form-associated custom elements participate in FormValidator — a named component exposing a `.value` getter is collected, validated, serialized into the AJAX payload, and error-rendered like a native control (client-side live-check on its composed bubbling `change`, dirty-tracking, and auto-id), so long as it declares `static formAssociated = true`, carries a `name`, and fires a composed `change` on commit. Live-data components ride the same lifecycle — open the connection in `connectedCallback`, close it in `disconnectedCallback` (popin close then tears it down automatically) — paired with `method:"ws"` routes or SSE via `renderStream()`, with per-animation-frame batching guidance for high-frequency streams; the lifecycle contract is executed against a live HTTP/2 extended-CONNECT loopback in the test suite. Dev-mode Inspector observability: the View tab carries a component census with a red undefined-components indicator (a typo'd tag or a missing definition script is no longer a silent failure), and the Events tab surfaces client-side `<tag>:<verb>` component events — metadata always, `detail` values only behind the existing `inspector.events.captureArgs` opt-in. | `0.5.15` | 2026-07-11 |
|
|
65
|
+
| ✅ | **Stale built-release watch** — For LOCAL production rehearsals. A bundle serving a built release under `local` scope + a non-dev env has no hot-reload, so after you edit source it silently keeps serving the stale build. Opt in via `server.releaseWatch` in `settings.json`: the bundle watches its SOURCE tree, compares fingerprints against the manifest release stamp, and surfaces staleness on `GET /_gina/release/status` and a live `GET /_gina/release/events` SSE stream (notify mode, the default) — or auto-rebuilds on change (opt-in `auto` mode). `POST /_gina/release/rebuild` rebuilds with an **idle-gated restart** that waits on in-flight HTTP requests and `gina.registerBusyProbe` application probes, so a restart never interrupts in-flight work. Hard-gated on `local` scope + a non-dev env — never active on a real cluster. | `0.5.18-alpha` | 2026-07-16 |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Type-Safe DTOs & Validation
|
|
70
|
+
|
|
71
|
+
A unified data-shape layer — define a DTO/schema once and reuse it for request validation, response serialization, static types, and OpenAPI, then layer a default-on validation pipe and DTO-derived typing on top.
|
|
72
|
+
|
|
73
|
+
| Status | Feature | Version | Target |
|
|
74
|
+
| --- | --- | --- | --- |
|
|
75
|
+
| ✅ | **Unified DTO / schema primitive** — Define a data shape once and reuse it for runtime validation, static types, JSON-Schema/OpenAPI, and response serialization. Foundation for the validation pipe and DTO-derived types. | `0.5.18-alpha.2` | shipped |
|
|
76
|
+
| ✅ | **Global validation pipe** — Framework-level, default-on validation + coercion of the request payload against the route's DTO before the controller action runs, handing a typed, validated object to the handler. Declaring `param.dto` on a route also answers a clean 422 on failure; `param.responseDto` shapes the outgoing JSON. | `0.5.18-alpha.2` | shipped |
|
|
77
|
+
| ✅ | **Type safety from the DTO** — Types derived from DTO definitions (`gina bundle:types` emits `.d.ts` from a bundle's DTOs) plus a two-part gate that verifies the shipped declarations against the runtime: a consumer fixture compiled by `tsc` through the package exports map, and a runtime-parity test diffing the declarations against the live framework surface. `GinaRequest<TDto>` and `req.dto` type route-DTO payloads end to end. Keeps the existing JS runtime, no rewrite. | `0.5.18-alpha.2` | shipped |
|
|
78
|
+
| ✅ | **Documentation & guides** — DTO authoring, the validation pipe, and typed controllers on the docs site: the Route DTOs guide, `bundle:types` in the CLI reference, the routing `param.dto` / `param.responseDto` schema rows, and migration notes. | `0.5.18-alpha.2` | shipped |
|
|
63
79
|
|
|
64
80
|
---
|
|
65
81
|
|
|
@@ -226,6 +242,23 @@ Secrets handling for bundle JSON configs without baking plaintext values into so
|
|
|
226
242
|
|
|
227
243
|
---
|
|
228
244
|
|
|
245
|
+
## Security & Compliance Controls
|
|
246
|
+
|
|
247
|
+
Technical-safeguard primitives that map to the **PCI-DSS**, **SOC2**, and **HIPAA** technical requirements. Gina supplies the controls; certification itself is an organizational, infrastructure, and process matter (a QSA assessment, a SOC2 auditor, HIPAA BAAs + a risk analysis) — a framework cannot be "certified." These are the building blocks an application deployed on Gina uses to satisfy the technical safeguards.
|
|
248
|
+
|
|
249
|
+
| Status | Feature | Version | Target |
|
|
250
|
+
| --- | --- | --- | --- |
|
|
251
|
+
| 📋 | **Authorization / RBAC** — A role/permission model, per-route authorization gate, and policy helpers (today Gina ships authentication status only, no authorization). Maps to PCI-DSS req 7, HIPAA §164.312(a)(1), SOC2 CC6 (least privilege). | `0.6.x` | Q4 2026 |
|
|
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 |
|
|
253
|
+
| 📋 | **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
|
+
| 📋 | **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
|
+
| 📋 | **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 |
|
|
256
|
+
| 📋 | **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 |
|
|
257
|
+
| 📋 | **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 |
|
|
258
|
+
| 📋 | **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 |
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
229
262
|
## Connectors
|
|
230
263
|
|
|
231
264
|
New database connectors follow the same interface as the existing Couchbase connector: declared in `connectors.json`, acquired via `getConnection()`.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.18
|
|
@@ -3769,7 +3769,17 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
3769
3769
|
var Controller = require(_(GINA_FRAMEWORK_DIR +'/core/controller/controller.js'), true);
|
|
3770
3770
|
var controller = new Controller(controllerOptions);
|
|
3771
3771
|
controller.name = route.param.control;
|
|
3772
|
-
|
|
3772
|
+
// #B115 — prefer the LIVE engine published by server.js start(): query()
|
|
3773
|
+
// re-points lib/cache's process-wide backing Map to the controller's
|
|
3774
|
+
// `serverInstance._cached`, so handing it the config dict's own minted Map
|
|
3775
|
+
// sends a concurrent render's cache ops (compiled templates, output cache)
|
|
3776
|
+
// to the wrong store and strands the pooled HTTP/2 session + its
|
|
3777
|
+
// `_http2Sessions` tracker where nothing reads them. The config dict above
|
|
3778
|
+
// (+ its minted `_cached`) remains the fallback when no server runs in this
|
|
3779
|
+
// process (offline CLI / test harnesses).
|
|
3780
|
+
controller.serverInstance = ( process.gina && process.gina._serverInstance )
|
|
3781
|
+
? process.gina._serverInstance
|
|
3782
|
+
: serverInstance;
|
|
3773
3783
|
controller.setOptions(request, response, next, controllerOptions);
|
|
3774
3784
|
|
|
3775
3785
|
var data = ( typeof(options.data) == 'object' && options.data.count() > 0 )
|
|
@@ -11006,10 +11016,6 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
11006
11016
|
|
|
11007
11017
|
defaultValue = $form.fieldsSet[f].defaultValue;
|
|
11008
11018
|
|
|
11009
|
-
if (/$(on|true|false)$/i.test(defaultValue)) {
|
|
11010
|
-
defaultValue = (/$(on|true)$/i.test(defaultValue)) ? true : false;
|
|
11011
|
-
}
|
|
11012
|
-
|
|
11013
11019
|
if ( /^(checkbox|radio)$/i.test($element.type) ) {
|
|
11014
11020
|
$element.checked = $form.fieldsSet[f].defaultChecked;
|
|
11015
11021
|
} else if ( !/^(checkbox|radio)$/i.test($element.type) ) {
|
|
@@ -14574,6 +14580,47 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
14574
14580
|
*
|
|
14575
14581
|
* @return {object} bindedForm
|
|
14576
14582
|
* */
|
|
14583
|
+
/**
|
|
14584
|
+
* Tells whether a checkbox posts a boolean derived from its live `.checked`
|
|
14585
|
+
* state (#49). A checkbox is boolean-classified when it carries no `value`
|
|
14586
|
+
* attribute (the DOM then defaults `.value` to `on`), when its value reads
|
|
14587
|
+
* `true` or `false` (the framework's change-time mirror maintains those), or
|
|
14588
|
+
* when a validation rule declares `isBoolean` for the field. A checkbox that
|
|
14589
|
+
* is NOT boolean-classified is value-carrying: its `value` is the submitted
|
|
14590
|
+
* payload and must never be coerced to a boolean.
|
|
14591
|
+
*
|
|
14592
|
+
* @inner
|
|
14593
|
+
* @param {object} $el - Checkbox element
|
|
14594
|
+
* @param {object} [rule] - Validation rule object declared for the field
|
|
14595
|
+
*
|
|
14596
|
+
* @returns {boolean} isBooleanCheckbox
|
|
14597
|
+
*/
|
|
14598
|
+
var isBooleanCheckbox = function($el, rule) {
|
|
14599
|
+
return (
|
|
14600
|
+
$el.getAttribute('value') === null
|
|
14601
|
+
|| /^(true|false)$/.test($el.value)
|
|
14602
|
+
|| typeof(rule) != 'undefined' && rule && typeof(rule.isBoolean) != 'undefined'
|
|
14603
|
+
) ? true : false;
|
|
14604
|
+
}
|
|
14605
|
+
|
|
14606
|
+
/**
|
|
14607
|
+
* Legacy opt-in (#49 — deprecated, transitional): when the form carries
|
|
14608
|
+
* `data-gina-form-checkbox-value-as-state="true"`, a checkbox's `value`
|
|
14609
|
+
* attribute keeps deciding its initial checked state like it did before
|
|
14610
|
+
* the fix. Default is the HTML-spec behavior: only the `checked`
|
|
14611
|
+
* attribute decides the initial state.
|
|
14612
|
+
*
|
|
14613
|
+
* @inner
|
|
14614
|
+
* @param {object} $form - Form object (`instance.$forms[id]` shape)
|
|
14615
|
+
*
|
|
14616
|
+
* @returns {boolean} isCheckboxValueAsState
|
|
14617
|
+
*/
|
|
14618
|
+
var isCheckboxValueAsState = function($form) {
|
|
14619
|
+
return /^true$/i.test($form.target.dataset.ginaFormCheckboxValueAsState) ? true : false;
|
|
14620
|
+
}
|
|
14621
|
+
// one warn per field id per page load (migration aid, #49)
|
|
14622
|
+
var checkboxValueStateWarned = {};
|
|
14623
|
+
|
|
14577
14624
|
var bindForm = function($target, customRule) {
|
|
14578
14625
|
|
|
14579
14626
|
var $form = null
|
|
@@ -14851,9 +14898,6 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
14851
14898
|
|
|
14852
14899
|
if (!$form.fieldsSet[ elId ]) {
|
|
14853
14900
|
let defaultValue = $inputs[f].value;
|
|
14854
|
-
if (/$(on|true|false)$/i.test(defaultValue)) {
|
|
14855
|
-
defaultValue = (/$(on|true)$/i.test(defaultValue)) ? true : false;
|
|
14856
|
-
}
|
|
14857
14901
|
// just in case
|
|
14858
14902
|
// if (
|
|
14859
14903
|
// typeof($form.fieldsSet[elId]) != 'undefined'
|
|
@@ -14878,10 +14922,14 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
14878
14922
|
// reads FALSE at bind time despite the attribute being present, so
|
|
14879
14923
|
// caching from `.checked` would hold the wrong default and a subsequent
|
|
14880
14924
|
// form-reset would clear the originally-checked option.
|
|
14925
|
+
// #49: the value-derived clause (a checkbox whose `value` reads
|
|
14926
|
+
// true/on used to be treated as checked-by-default) is legacy
|
|
14927
|
+
// behavior, now gated on the form's explicit opt-in.
|
|
14881
14928
|
$form.fieldsSet[elId].defaultChecked = (
|
|
14882
14929
|
$inputs[f].defaultChecked
|
|
14883
14930
|
||
|
|
14884
|
-
|
|
14931
|
+
isCheckboxValueAsState($form)
|
|
14932
|
+
&& /^(true|on)$/.test(defaultValue)
|
|
14885
14933
|
&& /^(checkbox)$/i.test($inputs[f].type)
|
|
14886
14934
|
) ? true : false;
|
|
14887
14935
|
|
|
@@ -14889,6 +14937,20 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
14889
14937
|
$form.fieldsSet[elId].value = $inputs[f].value;
|
|
14890
14938
|
$form.fieldsSet[elId].defaultValue = $inputs[f].value;
|
|
14891
14939
|
}
|
|
14940
|
+
|
|
14941
|
+
// Migration aid (#49): this markup used to be auto-ticked by its
|
|
14942
|
+
// `value` — surface it once so the author adds `checked` or the
|
|
14943
|
+
// legacy form opt-in.
|
|
14944
|
+
if (
|
|
14945
|
+
/^(checkbox)$/i.test($inputs[f].type)
|
|
14946
|
+
&& !isCheckboxValueAsState($form)
|
|
14947
|
+
&& !$inputs[f].hasAttribute('checked')
|
|
14948
|
+
&& /^(true|on)$/i.test($inputs[f].getAttribute('value'))
|
|
14949
|
+
&& !checkboxValueStateWarned[elId]
|
|
14950
|
+
) {
|
|
14951
|
+
checkboxValueStateWarned[elId] = true;
|
|
14952
|
+
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
|
+
}
|
|
14892
14954
|
}
|
|
14893
14955
|
}
|
|
14894
14956
|
|
|
@@ -15635,7 +15697,9 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
15635
15697
|
localValue = false
|
|
15636
15698
|
}
|
|
15637
15699
|
var isLocalBoleanValue = ( /^(true|on|false)$/i.test(localValue) ) ? true : false;
|
|
15638
|
-
|
|
15700
|
+
// #49: value-driven initial ticking is legacy behavior — the HTML `checked`
|
|
15701
|
+
// attribute decides the initial state unless the form explicitly opts in.
|
|
15702
|
+
if (isInit && isLocalBoleanValue && isCheckboxValueAsState($form)) { // on checkbox init (legacy value-as-state mode)
|
|
15639
15703
|
// update checkbox initial state
|
|
15640
15704
|
// Value defines checked state by default
|
|
15641
15705
|
if ( /^true$/i.test(localValue) && !$el.checked) {
|
|
@@ -16577,7 +16641,10 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
16577
16641
|
if (isDisabled) continue;
|
|
16578
16642
|
|
|
16579
16643
|
// checkbox or radio
|
|
16580
|
-
if ( typeof($target[i].type) != 'undefined' && $target[i].type == '
|
|
16644
|
+
if ( typeof($target[i].type) != 'undefined' && $target[i].type == 'checkbox' && isBooleanCheckbox($target[i], (rules) ? rules[name] : null) ) {
|
|
16645
|
+
// #49: boolean checkbox — the live `.checked` state IS the posted value
|
|
16646
|
+
fields[name] = $target[i].checked;
|
|
16647
|
+
} else if ( typeof($target[i].type) != 'undefined' && $target[i].type == 'radio' || typeof($target[i].type) != 'undefined' && $target[i].type == 'checkbox' ) {
|
|
16581
16648
|
|
|
16582
16649
|
if ( $target[i].checked ) {
|
|
16583
16650
|
// if is boolean
|
|
@@ -16833,7 +16900,23 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
16833
16900
|
&& $form[i].type == 'checkbox' )
|
|
16834
16901
|
{
|
|
16835
16902
|
|
|
16836
|
-
if (
|
|
16903
|
+
if ( $form[i].type == 'checkbox' && isBooleanCheckbox($form[i], (rules) ? rules[name] : null) ) {
|
|
16904
|
+
// #49: boolean checkbox — the live `.checked` state IS the posted
|
|
16905
|
+
// value; self-inject the isBoolean rule like the legacy path did
|
|
16906
|
+
if (rules) {
|
|
16907
|
+
if ( typeof(rules[name]) == 'undefined' ) {
|
|
16908
|
+
rules[name] = { isBoolean: true };
|
|
16909
|
+
} else if ( typeof(rules[name]) != 'undefined' && typeof(rules[name].isBoolean) == 'undefined' ) {
|
|
16910
|
+
// forces it when field found in validation rules; isRequired is
|
|
16911
|
+
// appended BEFORE isBoolean — rules run in key insertion order and
|
|
16912
|
+
// the engine's isBoolean rescue only clears an isRequired error
|
|
16913
|
+
// recorded before it (a boolean false otherwise reads as empty)
|
|
16914
|
+
rules[name].isRequired = true;
|
|
16915
|
+
rules[name].isBoolean = true;
|
|
16916
|
+
}
|
|
16917
|
+
}
|
|
16918
|
+
fields[name] = $form[i].checked;
|
|
16919
|
+
} else if (
|
|
16837
16920
|
$form[i].checked
|
|
16838
16921
|
|| typeof (rules[name]) == 'undefined'
|
|
16839
16922
|
&& $form[i].value != 'undefined'
|
|
@@ -16851,9 +16934,12 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
16851
16934
|
if ( typeof(rules[name]) == 'undefined' ) {
|
|
16852
16935
|
rules[name] = { isBoolean: true };
|
|
16853
16936
|
} else if ( typeof(rules[name]) != 'undefined' && typeof(rules[name].isBoolean) == 'undefined' ) {
|
|
16854
|
-
rules
|
|
16855
|
-
//
|
|
16937
|
+
// forces it when field found in validation rules; isRequired is
|
|
16938
|
+
// appended BEFORE isBoolean — rules run in key insertion order and
|
|
16939
|
+
// the engine's isBoolean rescue only clears an isRequired error
|
|
16940
|
+
// recorded before it (a boolean false otherwise reads as empty)
|
|
16856
16941
|
rules[name].isRequired = true;
|
|
16942
|
+
rules[name].isBoolean = true;
|
|
16857
16943
|
}
|
|
16858
16944
|
|
|
16859
16945
|
if ($form[i].type == 'radio') {
|
|
@@ -23475,7 +23561,7 @@ function getDependencies(gina, cb) {
|
|
|
23475
23561
|
arr[i].func.apply(null,arr[i].args);
|
|
23476
23562
|
}
|
|
23477
23563
|
} catch (err) {
|
|
23478
|
-
console.error(err.stack
|
|
23564
|
+
console.error(err.stack||err.message||err);
|
|
23479
23565
|
}
|
|
23480
23566
|
}
|
|
23481
23567
|
|