gina 0.6.14 → 0.6.15
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 +12 -0
- package/README.md +22 -25
- package/ROADMAP.md +1 -0
- package/framework/v0.6.15/VERSION +1 -0
- package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +1 -1
- package/framework/v0.6.15/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- package/framework/v0.6.15/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/js/gina.js +120 -8
- package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +458 -456
- package/framework/v0.6.15/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.15/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.6.14 → v0.6.15}/core/connectors/couchbase/index.js +41 -12
- package/framework/{v0.6.14 → v0.6.15}/lib/routing/src/main.js +9 -0
- package/framework/{v0.6.14 → v0.6.15}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +5 -3
- package/package.json +3 -3
- package/script/check_changie_entries.js +117 -23
- package/framework/v0.6.14/VERSION +0 -1
- package/framework/v0.6.14/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- package/framework/v0.6.14/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- package/framework/v0.6.14/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.14/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/AUTHORS +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/LICENSE +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/config.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/couchbase/lib/storage-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/param-redact.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/redis/lib/kv-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/sqlite/lib/kv-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/content.encoding +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/controller.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/dev/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/gna.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/locales/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/locales/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/mime.types +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/model/entity.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/model/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/router.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/server.express.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/server.isaac.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/server.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/status.codes +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/console.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/context.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/path.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/task.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/helpers/text.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/async/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cache/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/storage/arguments.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/storage/gc.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/storage/help.txt +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/storage/stats.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/storage/verify.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/config.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/job/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/job-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/kv/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/kv/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/kv-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/maintenance/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/maintenance/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/math/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/model.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/proc.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/push/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/push/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/rate-limit/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/rate-limit/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/secrets/src/backends/exec.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/secrets/src/declaration.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/secrets/src/sources.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/session-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/shell.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/state.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/storage/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/storage/src/local-cas.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/storage/src/local-stream.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/storage/src/local.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/storage/src/meta-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/storage/src/s3.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/storage/src/util.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/storage-store.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/url/README.md +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/url/index.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/validator.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.14 → v0.6.15}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,18 @@ 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.6.15 - 2026-08-24
|
|
10
|
+
### Changed
|
|
11
|
+
* The changie pre-commit guard now also requires that a fragment whose FILENAME names a tracker id cites that id in its body (#B410). Only the body is rendered into CHANGELOG.md and the published tarball, so an id carried by the filename and the commit message but missing from the body ships an UNNUMBERED changelog entry, and anyone triaging by id gets a false zero. Measured across all 937 historical fragments, roughly 60 shipped entries are unnumbered this way; the guard stops the next one at commit time rather than at cut time. Recognised id families are an explicit allowlist rather than a generic letters-then-digits pattern, because the generic form false-positives on real filenames (express5, npm12, s3) and a false positive would block a commit; a filename encoding no recognised id is skipped, never failed.
|
|
12
|
+
### Fixed
|
|
13
|
+
* The couchbase connector no longer hangs a request when a `@return {number}` COUNT query does not match its alias parser (#B412, consumer-reported). The branch parsed the COUNT alias out of the query text and dereferenced the match without a guard, so `SELECT COUNT(DISTINCT a.b) AS n` (the pattern could not span the space inside the parentheses) and an unaliased `SELECT COUNT(*)` both produced a null match and threw. Because the throw happened inside the connector's own result callback, the failure did not surface as a 5xx: a promisified caller never settled and the request hung until the client or proxy timed out, leaving only an uncorrelated log line, and behind an HTTP/2 inter-bundle client the stall was then retried. It was also invisible in development, where only the first comment block is stripped from the query text, so a commented-out parsable COUNT elsewhere in the file kept the parser satisfied locally while production - which strips every comment - threw on the identical file. The branch now derives the count from the first projected column with no regex at all, guarded against empty result sets, empty rows and null payloads, exactly as the mysql, postgresql, scylladb and sqlite connectors already did and as the documented contract (first key of first row) already stated. Also fixed on the same path: the `@return` annotation parser was greedy, so a second brace pair later on the same line over-captured (`@return {object} note {x}` yielded `object} note {x`) and the resulting unknown return type fell through every branch silently, handing the caller the raw row array instead of the declared shape; it is now bounded to the first brace pair like the sibling connectors. Behaviour change worth knowing: for a multi-column projection whose COUNT is not the first column, the returned value is now the first column rather than the aliased one - consistent with every other connector.
|
|
14
|
+
* The couchbase connector now normalises the types it reads from `@return` and `@param` annotations, and bounds both captures to the first brace pair (#B413). Both extracted types feed exact-match comparisons whose arms are all lowercase - the return type against the branch chain that dispatches the declared shape, and each param type against the switch in the parameter cast - so a capitalised or space-padded type such as `{Number}` or `{ number }` matched nothing and was SILENTLY skipped: the caller received the raw row array instead of the declared shape, and the parameter was left uncast. Both are now trimmed and lowercased at extraction, exactly as the mysql, postgresql, scylladb and sqlite connectors already did. The two captures were also greedy, so a second brace pair on the same line bled into the extracted type (`@param {a} and {b}` yielded `a} and {b`), which then matched no cast arm either; both are bounded to the first brace pair. Behaviour change worth knowing: annotations that previously fell through silently now reach their branch, so a query declaring `@return {Number}` begins returning the declared shape rather than the raw row array. The `@options` annotation deliberately keeps its greedy capture and is pinned as such - it holds a nestable object literal rather than a single type token, so bounding it would truncate a nested object and break the parse.
|
|
15
|
+
* Client-side handler release now awaits the routing table (#B414, consumer-reported with a two-way browser reproduction). The client routing table arrives only by async fetch (the page whispers an empty stub), yet `gina.ready` handlers and the auto-boot validator released at DOMContentLoaded - so any `getRoute()`/`toUrl()` during handler or form-bind initialisation ran against an empty table. Loopback wins that race by single-digit milliseconds, which is why development never sees it; a real deployment loses it by 150ms or more on every load, deterministically - a validator form rule naming a route then threw inside the init listener, the throw was swallowed by the event dispatch, and the instance's `ready` never fired, silently. All three release paths now gate on the dependency SETTLING: the ready-list scheduler, the validator auto-boot poll, and the late-registration path (a handler registered after DOMContentLoaded previously bypassed the scheduler entirely and fired immediately). Settled deliberately means loaded OR failed - a broken endpoint still releases handlers rather than hanging the page - and a parse-time 5-second fallback force-settles with a console error in degenerate shapes where the fetch is never issued. Behaviour change worth knowing: on deployed tiers, `gina.ready` handlers now fire when routing is actually available (typically 150ms-1.3s later than before, per the consumer's measurements); on loopback and in development the difference is single-digit milliseconds. Pages that do not use client routing are unaffected in every case but the timing.
|
|
16
|
+
* Client-side `getRoute()` no longer crashes with a context-free TypeError when a bundle's routing table is absent (#B415). The client `getRouting()` returns null by design when nothing matches - an empty table before the routing fetch lands, or a bundle with no rules - and the bare dereference of that null sat one line above the very diagnostic built for the degraded-table case, so the case it existed for was exactly the one it could never report. A named guard now throws `bundle X has no routing table for rule Y (client: routing config not loaded yet, or empty)`, restoring the diagnostic's intent on both the client and the server.
|
|
17
|
+
* A failed client routing fetch now leaves console evidence (#B416). The dependency bus event fires on fetch failure as well as success - that is what keeps the page booting - but the listener discarded the error it carried, so a genuinely failed fetch (a non-OK status caught by the response guard) booted the framework permanently degraded, with an empty routing table and zero console output. The listener now reads and reports the carried error, naming the consequence: client `getRoute()`/`toUrl()` degraded until reload.
|
|
18
|
+
* Fixed #B328 — calling the public link API with a url no link is registered for (gina.link.request(url), or a registered link's .request(url) with a foreign url) threw a bare TypeError. It now throws a named error identifying the url and the likely cause — never bound, or bound by a later construction the published instance cannot see. The miss is also detected before the supersede step, so a mistyped url no longer aborts a legitimate request still in flight. Click-driven links are unaffected: both click paths always resolve a real registration.
|
|
19
|
+
* Fixed #B329 — the popin stylesheet no longer restyles every dialog on the page: its ::backdrop rule (dark overlay + blur) is now scoped to gina's own popin dialogs (dialog.gina-popin-container::backdrop), matching the reduced-motion rules that were already scoped. Consumer-visible: a page that relied on the unscoped rule to style its own dialogs must now style them itself, and a popin dialog element supplied by the page's own markup needs the gina-popin-container class to keep gina's backdrop.
|
|
20
|
+
|
|
9
21
|
## 0.6.14 - 2026-08-23
|
|
10
22
|
### Added
|
|
11
23
|
* Secrets exec bridge (#SECRETS3): a bundle may declare `settings.secrets.exec` — one operator-declared command (`{"command": ["sops", "decrypt", "--output-type", "json", "${project}/secrets.enc.json"], "timeout": 10000}`, argv form, no shell) whose stdout must be a single flat JSON object of string values, layered UNDERNEATH the environment exactly like the `file` tier and mutually exclusive with it (a bundle inheriting a project-wide `file` chain opts out with `"file": null` beside its `exec` block). The command runs once per bundle per config-load cycle, at boot only, and failure is always a per-bundle boot REFUSAL, never a hang: the child is bounded by `timeout` (default 10000ms) and killed with SIGKILL on expiry, so a wedged secrets endpoint becomes a fast, named boot failure. The fetched output is never echoed into any error, log or report. A non-empty environment value still beats the fetched map — decrypting at the container entrypoint remains the better pattern wherever the entrypoint can be controlled; this tier exists for environments where it cannot. `gina secrets:check` validates and RUNS the same command through the same code, so the CI gate's verdict matches the boot's. Also stricter, deliberately: `settings.secrets` now refuses unknown keys and non-object values at boot instead of silently ignoring them — a typo'd tier name used to degrade to environment-only resolution without a word.
|
package/README.md
CHANGED
|
@@ -62,39 +62,36 @@ open https://localhost:3100
|
|
|
62
62
|
|
|
63
63
|
> **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.)
|
|
64
64
|
|
|
65
|
-
## What's in 0.6.
|
|
65
|
+
## What's in 0.6.15
|
|
66
66
|
|
|
67
|
-
> **Restart your bundles
|
|
68
|
-
>
|
|
69
|
-
>
|
|
70
|
-
>
|
|
71
|
-
> to
|
|
67
|
+
> **Restart your bundles AND rebuild them.** This release changes the browser
|
|
68
|
+
> bundle: both `gina.min.js` and `gina.min.css` differ from `0.6.14`. A restart
|
|
69
|
+
> alone updates the server half only — each bundle bakes its own copy of the
|
|
70
|
+
> client assets, so `gina bundle:build` is required for the client-boot,
|
|
71
|
+
> link and popin fixes below to reach a browser at all.
|
|
72
72
|
|
|
73
|
-
> **No settings reset.** `0.6.
|
|
73
|
+
> **No settings reset.** `0.6.15` is a patch — the `shortVersion` stays `0.6`, so
|
|
74
74
|
> your `~/.gina/0.6/settings.json` is untouched. (`0.6.0` was the reset.)
|
|
75
75
|
|
|
76
|
-
**
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
76
|
+
**A correctness pass over client boot, and two connector defects that could hang
|
|
77
|
+
a request.** The headline is a race that only a real deployment can lose: the
|
|
78
|
+
client routing table arrives by async fetch, but handlers were released before it
|
|
79
|
+
landed — so anything resolving a route during initialisation ran against an empty
|
|
80
|
+
table, deterministically, on every page load away from loopback. Alongside it,
|
|
81
|
+
the couchbase connector no longer hangs a request on an unparsed `COUNT`, and two
|
|
82
|
+
client plugins stop leaking their behaviour onto pages that never asked for it.
|
|
83
83
|
**Several behaviour changes are worth checking before you upgrade** — each is
|
|
84
84
|
called out in its bullet below, with the details in the
|
|
85
85
|
[migration guide](https://gina.io/docs/migration).
|
|
86
86
|
|
|
87
|
-
- **
|
|
88
|
-
- **Fixed —
|
|
89
|
-
- **Fixed — a
|
|
90
|
-
- **Fixed —
|
|
91
|
-
- **Fixed —
|
|
92
|
-
- **Fixed —
|
|
93
|
-
- **Fixed —
|
|
94
|
-
- **
|
|
95
|
-
- **Fixed — GET and HEAD query parameters no longer lose backslash-escaped characters (#B407, consumer-reported).** The query pipeline serialized `request.query` and then stripped every backslash from the whole document in order to support nested-JSON value unwrapping. A newline (`%0A`) in a value degraded to the letter `n`, a tab to `t`, a backslash vanished outright, and a double quote or a JSON-array value produced invalid JSON that silently dropped **every** query parameter on the request. Nested-JSON string values (`?filter={"a":1}`) are now unwrapped by parsing them individually — the same intent, validated, and correct even when the nested content itself carries escapes, which the old unwrap also corrupted — and the query then serializes cleanly. Whole-value `true`/`false`/`on`/`null` coercion and plain values are unchanged; JSON-array parameters and unparsable `{`-leading values now arrive intact where they previously killed the whole query.
|
|
96
|
-
- **Fixed — `gina secrets:check` now agrees with the boot (#B408, #B409).** The checker kept its own hand-written mirror of the runtime's `settings.secrets.file` declaration guards, and it had drifted — twice, both times permissively: a whitespace-only entry and a path whose `${…}` token collapsed to a double separator both reported **green** while the bundle refused to boot on them. The validation now lives in one shared implementation (`lib.secrets.validateFilePaths`) that boot and check both consume, and the check validates the declaration *before* reading any declared layer, exactly as the boot does — so an invalid chain now reports with no layers listed. **Behaviour change for CI:** the command now exits non-zero when a bundle's declaration is itself invalid or unreachable — an unreadable declared file, a malformed entry, a failing exec fetch — not only when a required key is unset. Previously such errors were printed while the exit code stayed 0 whenever the environment happened to carry the keys, so the gate green-lit configurations the runtime refuses to boot.
|
|
97
|
-
- **Changed — one shared config-source walk behind `secrets:scan` and `secrets:check`.** The walk now lives in `lib.secrets` as `getProjectRequiredKeys(projectPath, {scope, bundle})`, with `loadManifest`, `readJsonSafe` and `resolveBundleSrc` exported alongside it for single-file reads. The two CLI handlers each carried a near-identical private copy and now delegate to the one implementation, so they enumerate the same config sources by construction and cannot drift apart. CLI behaviour and report output are unchanged by the relocation.
|
|
87
|
+
- **Fixed — client handlers now wait for the routing table (#B414, consumer-reported).** The client routing table arrives only by async fetch — the page deliberately whispers an empty stub rather than inlining it — yet `gina.ready` handlers and the auto-boot validator released at `DOMContentLoaded`. Anything calling `getRoute()`/`toUrl()` during handler or form-bind initialisation therefore ran against an empty table. Loopback wins that race by single-digit milliseconds, which is why development and local suites never see it; a real deployment loses it by 150ms or more on *every* load. A validator form rule naming a route then threw inside the init listener, the event dispatch swallowed the throw, and the instance's `ready` never fired — silently, with one uncorrelated console error as the only artefact. All three release paths now gate on the dependency *settling*: the ready-list scheduler, the validator auto-boot poll, and the late-registration path (a handler registered after `DOMContentLoaded` previously bypassed the scheduler and fired immediately). Settled deliberately means loaded **or** failed, so a broken endpoint still releases handlers rather than hanging the page, and a parse-time 5-second fallback force-settles with a console error in degenerate shapes where no fetch is ever issued. **Behaviour change:** on deployed tiers `gina.ready` handlers now fire when routing is actually available — typically 150ms–1.3s later than before; on loopback and in development the difference is single-digit milliseconds. Pages that do not use client routing are unaffected but for the timing.
|
|
88
|
+
- **Fixed — `getRoute()` reports a missing routing table instead of crashing (#B415).** The client `getRouting()` returns `null` by design when nothing matches — an empty table before the fetch lands, or a bundle with no rules — and the bare dereference of that `null` sat one line *above* the very diagnostic built for the degraded-table case, so the case it existed for was exactly the one it could never report. A named guard now throws `bundle X has no routing table for rule Y (client: routing config not loaded yet, or empty)`, on both the client and the server.
|
|
89
|
+
- **Fixed — a failed routing fetch now leaves console evidence (#B416).** The dependency bus fires on fetch failure as well as success — that is what keeps the page booting — but the listener discarded the error it carried. A genuinely failed fetch booted the framework permanently degraded, with an empty routing table and *zero* console output. The listener now reports the carried error and names the consequence: client `getRoute()`/`toUrl()` degraded until reload.
|
|
90
|
+
- **Fixed — a couchbase `COUNT` query can no longer hang the request (#B412, consumer-reported).** The `@return {number}` branch parsed the COUNT alias out of the query text and dereferenced the match unguarded, so `SELECT COUNT(DISTINCT a.b) AS n` — the pattern cannot span the space inside the parentheses — and an unaliased `SELECT COUNT(*)` both produced a null match and threw. The severity was not the throw but where it landed: inside the connector's own result callback, so no 5xx was ever produced, a promisified caller never settled, and the request hung until the client or proxy timed out — leaving one uncorrelated log line, and behind an HTTP/2 inter-bundle client the stall was then retried. It was dev-invisible too: the dev path strips only the first comment block, so a commented-out parsable COUNT elsewhere in the file kept the regex satisfied locally while production, which strips every comment, threw on the identical file. The branch now derives the count from the first projected column with no regex at all, guarded against empty result sets, empty rows and null payloads — exactly as mysql, postgresql, scylladb and sqlite already did, and as the documented contract already stated. **Behaviour change:** for a multi-column projection whose COUNT is not the first column, the returned value is now the first column rather than the aliased one — consistent with every other connector.
|
|
91
|
+
- **Fixed — couchbase annotation types are normalised and bounded (#B413).** Both the `@return` type and each `@param` type feed exact-match comparisons whose arms are all lowercase, so a capitalised or space-padded type such as `{Number}` or `{ number }` matched nothing and was silently skipped — handing the caller the raw row array instead of the declared shape, and leaving the parameter uncast. Both are now trimmed and lowercased at extraction, as the sibling connectors already did. Both captures were also greedy, so a second brace pair on the same line bled into the extracted type (`@param {a} and {b}` yielded `a} and {b`), matching no cast arm either; both are bounded to the first brace pair. **Behaviour change:** annotations that previously fell through silently now reach their branch, so a query declaring `@return {Number}` begins returning the declared shape rather than the raw row array. `@options` deliberately keeps its greedy capture — it holds a nestable object literal, not a single type token.
|
|
92
|
+
- **Fixed — the public link API names its error instead of throwing a bare TypeError (#B328).** Calling `gina.link.request(url)` — or a registered link's `.request(url)` with a foreign url — for a url no link is registered for dereferenced the null resolution. It now throws a named error identifying the url and the likely cause: never bound, or bound by a later construction the published instance cannot see. The miss is also detected *before* the supersede step, so a mistyped url no longer aborts a legitimate request still in flight. Click-driven links are unaffected — both click paths always resolve a real registration.
|
|
93
|
+
- **Fixed — the popin stylesheet no longer restyles every dialog on the page (#B329).** Its `::backdrop` rule (dark overlay + blur) shipped unscoped on the bare `dialog` element, so gina painted its backdrop on any `<dialog>` a page opened. It is now scoped to `dialog.gina-popin-container::backdrop`, matching the reduced-motion rules that were already scoped. **Consumer-visible:** a page that relied on the unscoped rule to style its own dialogs must style them itself now, and a popin dialog element supplied by the page's own markup needs the `gina-popin-container` class to keep gina's backdrop.
|
|
94
|
+
- **Changed — a changelog fragment must cite the tracker id its filename names (#B410).** Only the body is rendered into `CHANGELOG.md` and the published tarball, so an id carried by the filename and the commit message but missing from the body ships an unnumbered changelog entry — and anyone triaging by id gets a false zero. Measured across all 937 historical fragments, roughly 60 shipped entries are unnumbered this way; the guard stops the next one at commit time rather than at cut time. Recognised id families are an explicit allowlist rather than a generic letters-then-digits pattern, because the generic form false-positives on real filenames (`express5`, `npm12`, `s3`) and a false positive would block a commit; a filename encoding no recognised id is skipped, never failed.
|
|
98
95
|
|
|
99
96
|
## Documentation
|
|
100
97
|
|
package/ROADMAP.md
CHANGED
|
@@ -66,6 +66,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
66
66
|
| **Q4 2026** | `0.6.12` ✅ | **Fixed**: an undefined-valued filter key no longer makes a `Collection` query match every record — every `Collection` method that accepts a filter object round-tripped it through `JSON.stringify`, which silently drops keys whose value is `undefined`, so a filter built from a possibly-absent field degraded to the match-everything `{}` filter: `findOne()` returned the collection's first row instead of the `null` the calling guard expected, `update()` wrote its `set` onto every record, and `delete()` returned an empty collection with every record removed. All eight filter-object methods now throw a descriptive error naming the offending key — `find()`, `findOne()`, `or()`, `update()`, `replace()`, `max()`, `notIn()` and `delete()`, the last two because `notIn()` routes a filter-object argument through `find()`; only `notIn()`'s array form, `notIn(rows, key)`, is exempt (ACTION REQUIRED if you relied on an undefined value meaning "no constraint" — build the filter conditionally; an explicitly empty `{}` still means no constraint, and `null` remains a legal needle). A non-string field value no longer aborts the whole form validation pass — `isEmail`, `isJsonWebToken` and `trim` called a string method on the value without a type check, so a `123`, `true` or `[]` arriving from a JSON body or a checkbox threw and the rule driver re-threw, killing every remaining field: the request went unvalidated server-side, and client-side the boot-time binding loop died so forms bound after it silently lost both validation and CSRF token injection. All three now leave a non-string untouched — the two checks record their normal rule error and `trim` passes it through untransformed, matching how `isFloat` already behaved (no action required; a defensive upstream coercion added to work around the crash can be removed). Documentation: the external references carried by the framework READMEs are current again, the retired Simple Data Format specification link replaced by the Tabular Data Package specification that superseded it, and every remaining plain-HTTP reference moved to HTTPS. Pickup: restart **and** rebuild your bundles (the browser bundle changed). |
|
|
67
67
|
| **Q4 2026** | `0.6.13` ✅ | **Added**: a general-purpose key-value primitive — declare namespaces under `settings.json > kv.namespaces` and reach them as `gina.kv('<namespace>')`, a promise-native handle with 13 operations including the ones that are hard to get right by hand: set-if-absent, atomic read-and-delete (a one-shot token's second reader gets `null`), compare-and-delete as the safe lock-release primitive, TTL-on-create-only counters, and fetch-or-compute with per-process single-flight. Three backends: in-memory with zero config, redis for namespaces shared across hosts and replicas (every guarantee server-side — `SET .. PX .. NX`, `GETDEL` with a Lua fallback below redis 6.2), and SQLite as the zero-dependency durable option that survives a restart and stays atomic across processes via `IMMEDIATE` transactions, using `node:sqlite` so there is nothing to install. Namespaces are strict-declared — an unknown name throws at the call site rather than silently minting an empty store — and each owns its failure policy; all three backends are verified against one shared contract spec. Deliberately not a redis client: no data structures, batch operations, key scanning, binary values or first-class locks. Identified-caller rate limiting — opt-in quota enforcement at the router keyed on the authenticated principal (a session user via an operator-named field, or a machine caller), with fixed-window counters in a kv namespace you declare, so choosing that namespace's backend chooses the quota's scope: redis or SQLite share one quota across replicas, in-memory counts per process. The gate runs after route authorization and before payload validation, so the refusal order is 401 → 429 → 422 and a throttled caller never receives a field map; it throttles identified callers only, and a request with no resolvable principal is skipped rather than bucketed by IP, since behind a reverse proxy that would be one bucket for the whole internet — anonymous flood control stays with your edge proxy. Denials answer 429 with `Retry-After` plus the `RateLimit` / `RateLimit-Policy` structured fields, which allowed limited requests carry too, and per-route overrides ride a top-level `rateLimit` key in `routing.json`. An opt-in per-authority circuit breaker for `Controller::query()` — after N consecutive transport-class failures to one authority the circuit opens and further calls fail fast with a machine-readable `CIRCUIT_OPEN` error instead of hammering a dead upstream, admitting exactly one critical request as the half-open probe after the cooldown; the gate sits above the HTTP/1.x / HTTP/2 dispatch so retries can never hammer an open circuit by construction, and only transport-class errors count, so an application response of any status cannot trip it. **Fixed**: an exception in a controller's `onReady` or `setup` hook can no longer vanish — both dispatch sites invoked the reserved-action hooks outside the guarded band, so a synchronous throw escaped to the process level (on the built-in engine an uncaught exception killing the whole bundle process, while Express answered its own 500 — an engine asymmetry) and an asynchronous rejection was unowned, leaving the request to hang to client or proxy timeout while work after the throw silently never happened; both loops now run inside the dispatch `try` and every hook's promise is owned by the same guard the main action carried, with the synthesized `setup` wrapper returning the app call's own result so an async `setup.js` rejection actually reaches it (ACTION REQUIRED if a hook of yours can throw: it now answers 500 where it previously crashed, hung, or was masked — and since hooks are still dispatched without awaiting, a hook rejection does not stop the action, so its side effects may already have run when the 500 lands). The entity dispatch diagnostics are readable again — five markers were raw `console.log` calls, which in gina bypasses both the container dispatch and the level gate, so they reached neither a bundle log file nor container logs and were visible only by running a bundle in the foreground; they now go through `console.debug`, off by default and appearing at the `debug` hierarchy as originally intended. **Documentation**: the published claim that gina ships a companion reverse-proxy service is retired — no release ever carried the bundle the help text advertised, and each surface now states the position the rest of the documentation already assumed, that gina ships no edge or reverse proxy by design; run nginx, Traefik or an ingress controller in front of your bundles. Two deliberate boundaries are now stated rather than left as absences: API versioning (no version route field, no version-aware dispatch — with the three shapes the existing primitives already cover) and database migrations (the per-database tools to use, plus running them as a discrete step before the new version serves rather than at bundle boot where replicas race each other, and keeping changes additive during a rolling deploy), and `connector:migrate` is explicitly flagged as not a database migration. Pickup: restart **and** rebuild your bundles — the browser bundle changed, though its client-side delta is inert. |
|
|
68
68
|
| **Q4 2026** | `0.6.14` ✅ | **Added**: network-backed secrets without a vendor SDK or a hung boot — a bundle may declare one operator-supplied fetch command under `settings.secrets.exec` (argv form, no shell) whose stdout must be a single flat JSON object of string values, layered underneath the environment exactly like the existing file tier and mutually exclusive with it, a bundle inheriting a project-wide file chain opting out with `"file": null` beside its own block. It runs once per bundle per config-load cycle, at boot only, and a failing fetch is always a fast, named per-bundle boot refusal rather than a hang: the child is bounded by its own timeout and killed with SIGKILL on expiry, so a wedged secrets endpoint costs a failed boot instead of a process that never comes up. The fetched output is never echoed into any error, log or report, and `gina secrets:check` validates *and runs* the same command through the same code, so the CI gate's verdict matches the boot's by construction; recipes for vault, kubectl and sops ship with the guide, and decrypting at the container entrypoint remains the better pattern wherever the entrypoint can be controlled. `settings.secrets` is also stricter, deliberately: unknown keys and non-object values now refuse the boot instead of silently degrading to environment-only resolution. **Fixed**: a correctness pass over how `self.query()` hands results back to application code. An exception in an `async` query callback could vanish — every app-callback delivery (the Node-style callback form and the `{onComplete}` facade, on both transports) invoked the callback bare, so an asynchronous rejection was unowned and the request hung to client or proxy timeout; rejections now answer 500 with the correlation ref. A synchronous throw inside a callback invoked on a transport-error delivery escaped to the process handler on the event- and timer-frame sites, killing the whole bundle on both engines, and re-invoked the callback with its own exception on the caller-frame sites; all fourteen error-path deliveries are now guarded. An HTTP/2 transport failure was answered twice, the session-level error handler racing the stream-level delivery — and on a reused session answering with the *creating* request's context, since session listeners bind once at connect; notification is now owned solely by the stream-level terminals. Handle-mode error deliveries never reached the app's `onComplete` listener, because both facades dereferenced `data.status` on a single-argument error emit and crashed into a 500 that misattributed the failure to the app callback; the listener is now invoked with the error, and owns the outcome as the callback form does. And HTTP/2 callback mode never delivered a non-5xx error status at all, so graceful degradation was impossible for something as ordinary as a 404 from an HTTP/2 upstream and the documented promisify idiom never settled on one — every body-announced non-2xx now reaches the callback on both transports. `self.query()`'s JSDoc no longer claims the no-callback form returns a Promise: it returns a handle exposing `.onComplete(cb)`, which is not a thenable, so `await self.query({...})` resolved immediately with the handle and silently dropped the result — the real contract and the supported `await` idiom are documented with their rejection shapes, each verified against the runtime. A crash during bundle bootstrap now aborts loudly instead of hanging silently — the async boot frame turned a synchronous throw into a rejection logged at error level with no emergency marker and no exit, so `gina bundle:start` sat on its startup timer and reported a timeout with no cause attached. GET and HEAD query parameters keep their backslash-escaped characters: the pipeline stripped every backslash from the whole serialized document, so a newline degraded to the letter `n`, a backslash vanished, and a double quote or JSON-array value produced invalid JSON that silently dropped every parameter on the request. And `gina secrets:check` now agrees with the boot — its hand-kept mirror of the `settings.secrets.file` declaration guards had drifted permissively twice, reporting green on configurations the bundle refuses to start on, and the command now exits non-zero when a declaration is itself invalid or unreachable rather than only when a required key is unset. **Changed**: the config-source walk behind `secrets:scan` and `secrets:check` now lives in `lib.secrets`, so the two commands enumerate the same config sources by construction and cannot drift apart; CLI behaviour and report output are unchanged. Pickup: restart your bundles — no rebuild needed, the browser bundle's executable content is byte-identical to `0.6.13`. |
|
|
69
|
+
| **Q4 2026** | `0.6.15` ✅ | **Fixed**: client-side handler release now awaits the routing table — the table arrives only by async fetch (the page deliberately whispers an empty stub rather than inlining it) yet `gina.ready` handlers and the auto-boot validator released at `DOMContentLoaded`, so anything calling `getRoute()`/`toUrl()` during handler or form-bind initialisation ran against an empty table; loopback wins that race by single-digit milliseconds, which is why development and the local suites never see it, while a real deployment loses it by 150ms or more on every load, deterministically — a validator form rule naming a route then threw inside the init listener, the event dispatch swallowed the throw, and the instance's `ready` never fired, silently. All three release paths now gate on the dependency settling (the ready-list scheduler, the validator auto-boot poll, and the late-registration path that previously bypassed the scheduler entirely and fired immediately), settled deliberately meaning loaded **or** failed so a broken endpoint still releases handlers rather than hanging the page, with a parse-time 5-second fallback force-settling in degenerate shapes where no fetch is ever issued (ACTION REQUIRED only in the sense of timing: on deployed tiers handlers now fire 150ms–1.3s later than before, when routing is actually available). Alongside it, client `getRoute()` no longer crashes with a context-free TypeError when a bundle's routing table is absent — the client `getRouting()` returns null by design, and the bare dereference of that null sat one line above the very diagnostic built for the degraded-table case, so the case it existed for was exactly the one it could never report — and a failed routing fetch now leaves console evidence instead of booting the framework permanently degraded in silence. The couchbase connector no longer hangs a request when a `@return {number}` COUNT query does not match its alias parser: the branch dereferenced an unguarded regex match, so `SELECT COUNT(DISTINCT a.b) AS n` and an unaliased `SELECT COUNT(*)` both threw inside the connector's own result callback — no 5xx was ever produced, a promisified caller never settled, and the request hung until the client or proxy timed out, a stall then retried behind an HTTP/2 inter-bundle client; it was dev-invisible too, since the dev path strips only the first comment block, so a commented-out parsable COUNT elsewhere in the file kept the regex satisfied locally while production threw on the identical file. The branch now derives the count from the first projected column with no regex at all, guarded against empty result sets, empty rows and null payloads, exactly as mysql, postgresql, scylladb and sqlite already did (ACTION REQUIRED if a multi-column projection puts its COUNT anywhere but first: the returned value is now the first column rather than the aliased one, consistent with every other connector). The same connector now trims and lowercases the types it reads from `@return` and `@param`, and bounds both captures to the first brace pair — the extracted types feed exact-match comparisons whose arms are all lowercase, so `{Number}` or `{ number }` matched nothing and was silently skipped, handing back the raw row array instead of the declared shape and leaving the parameter uncast, while a second brace pair on the same line bled into the greedy capture (ACTION REQUIRED: annotations that previously fell through silently now reach their branch, so a query declaring `@return {Number}` begins returning the declared shape; `@options` deliberately keeps its greedy capture, holding a nestable object literal rather than a single type token). Two client plugins stop leaking behaviour onto pages that never asked for it: the public link API throws a named error identifying the url and the likely cause instead of a bare TypeError, and detects the miss before the supersede step so a mistyped url no longer aborts a legitimate request still in flight; and the popin stylesheet's `::backdrop` rule is scoped to gina's own popin dialogs rather than every `<dialog>` on the page (ACTION REQUIRED if a page relied on the unscoped rule to style its own dialogs, or supplies a popin dialog element from its own markup — that element needs the `gina-popin-container` class to keep gina's backdrop). **Changed**: a changelog fragment whose filename names a tracker id must now cite that id in its body, since only the body renders into `CHANGELOG.md` and the published tarball — an id carried by filename and commit message alone ships an unnumbered entry and anyone triaging by id gets a false zero (roughly 60 of 937 historical fragments shipped that way); recognised id families are an explicit allowlist rather than a generic pattern, because the generic form false-positives on real filenames and a false positive would block a commit. Pickup: restart **and** rebuild your bundles (the browser bundle changed — both `gina.min.js` and `gina.min.css` differ from `0.6.14`). |
|
|
69
70
|
| **Q1 2027** | `0.6.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
70
71
|
| **2027** | `0.7.0` | Performance — remaining measure-gated candidates: multipart & WebSocket fast paths, render/log cleanups, SIMD scanner (the render-path deep-clone & id-mint reduction shipped early in `0.6.2` with a measured 4.4× render-throughput gain; the profiling baseline itself also shipped in `0.6.2`) |
|
|
71
72
|
| **2027** | `0.8.0` | Financial-messaging foundations — XML request/response handling · pluggable message-schema validation · IBAN/BIC validation rules · money & ISO 4217 minor-unit utilities · idempotency keys · sequence primitive · OAuth2 client-credentials egress |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.6.15
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";@keyframes gina-popin-skeleton-shimmer{0%{background-position:200%0}to{background-position:-200%0}}@layer gina{[data-gina-loading=true]{cursor:progress}@keyframes gina-loading-pulse{0%{opacity:1}to{opacity:.55}}@media (prefers-reduced-motion:no-preference){[data-gina-loading=true]{animation:gina-loading-pulse .9s ease-in-out infinite alternate}}@media (prefers-reduced-motion:reduce){[data-gina-loading=true]{opacity:.7}}[data-gina-form-submit-gated=true]{cursor:not-allowed;opacity:.7}}@font-face{font-family:"have_heart_oneregular";src:url(fonts/have_heart_one-webfont.woff2)format("woff2"),url(fonts/have_heart_one-webfont.woff)format("woff");font-weight:400;font-style:normal}.gina-popin-container{background:#fff}.gina-popins-overlay,div.gina-popin-container{visibility:hidden;opacity:0;z-index:1;transition:opacity .3s,visibility 0 .3s}.gina-popins-overlay.gina-popin-is-active,div.gina-popin-container.gina-popin-is-active{opacity:1;visibility:visible;transition-delay:0}dialog.gina-popin-container{padding:0;border:0;z-index:1}@media (prefers-reduced-motion:no-preference){dialog.gina-popin-container{opacity:0;transform:translateY(-.5rem);transition:opacity .2s ease,transform .2s ease,overlay .2s ease allow-discrete,display .2s ease allow-discrete}dialog.gina-popin-container[open]{opacity:1;transform:translateY(0)}@starting-style{dialog.gina-popin-container[open]{opacity:0;transform:translateY(-.5rem)}}dialog.gina-popin-container::backdrop{opacity:0;transition:opacity .2s ease,overlay .2s ease allow-discrete,display .2s ease allow-discrete}dialog.gina-popin-container[open]::backdrop{opacity:1}@starting-style{dialog.gina-popin-container[open]::backdrop{opacity:0}}}body[data-gina-popin-scroll-lock]{overflow:hidden}.gina-popins-overlay{position:fixed;left:0;top:0;display:grid;place-items:center;width:100%;height:100%;transition:opacity .3s,visibility .3s;overflow:auto;background:rgba(0,0,0,.75)}.gina-popins-overlay.gina-popin-is-active{backdrop-filter:blur(6px)}dialog::backdrop{background-color:rgba(0,0,0,.75);backdrop-filter:blur(6px)}.gina-popin-skeleton{padding:1.5rem;min-width:18rem;max-width:90vw}.gina-popin-skeleton .gina-popin-skeleton-line{height:.85rem;margin-bottom:.75rem;border-radius:4px;background:linear-gradient(90deg,#ededed 25%,#f7f7f7 50%,#ededed 75%);background-size:200% 100%;animation:gina-popin-skeleton-shimmer 1.4s ease-in-out infinite}.gina-popin-skeleton .gina-popin-skeleton-line:last-child{margin-bottom:0}.gina-popin-skeleton .gina-popin-skeleton-title{height:1.4rem;width:60%;margin-bottom:1.25rem}.gina-popin-skeleton .gina-popin-skeleton-line--short{width:40%}@media (prefers-reduced-motion:reduce){.gina-popin-skeleton .gina-popin-skeleton-line{animation:none}}
|
|
1
|
+
@charset "UTF-8";@keyframes gina-popin-skeleton-shimmer{0%{background-position:200%0}to{background-position:-200%0}}@layer gina{[data-gina-loading=true]{cursor:progress}@keyframes gina-loading-pulse{0%{opacity:1}to{opacity:.55}}@media (prefers-reduced-motion:no-preference){[data-gina-loading=true]{animation:gina-loading-pulse .9s ease-in-out infinite alternate}}@media (prefers-reduced-motion:reduce){[data-gina-loading=true]{opacity:.7}}[data-gina-form-submit-gated=true]{cursor:not-allowed;opacity:.7}}@font-face{font-family:"have_heart_oneregular";src:url(fonts/have_heart_one-webfont.woff2)format("woff2"),url(fonts/have_heart_one-webfont.woff)format("woff");font-weight:400;font-style:normal}.gina-popin-container{background:#fff}.gina-popins-overlay,div.gina-popin-container{visibility:hidden;opacity:0;z-index:1;transition:opacity .3s,visibility 0 .3s}.gina-popins-overlay.gina-popin-is-active,div.gina-popin-container.gina-popin-is-active{opacity:1;visibility:visible;transition-delay:0}dialog.gina-popin-container{padding:0;border:0;z-index:1}@media (prefers-reduced-motion:no-preference){dialog.gina-popin-container{opacity:0;transform:translateY(-.5rem);transition:opacity .2s ease,transform .2s ease,overlay .2s ease allow-discrete,display .2s ease allow-discrete}dialog.gina-popin-container[open]{opacity:1;transform:translateY(0)}@starting-style{dialog.gina-popin-container[open]{opacity:0;transform:translateY(-.5rem)}}dialog.gina-popin-container::backdrop{opacity:0;transition:opacity .2s ease,overlay .2s ease allow-discrete,display .2s ease allow-discrete}dialog.gina-popin-container[open]::backdrop{opacity:1}@starting-style{dialog.gina-popin-container[open]::backdrop{opacity:0}}}body[data-gina-popin-scroll-lock]{overflow:hidden}.gina-popins-overlay{position:fixed;left:0;top:0;display:grid;place-items:center;width:100%;height:100%;transition:opacity .3s,visibility .3s;overflow:auto;background:rgba(0,0,0,.75)}.gina-popins-overlay.gina-popin-is-active{backdrop-filter:blur(6px)}dialog.gina-popin-container::backdrop{background-color:rgba(0,0,0,.75);backdrop-filter:blur(6px)}.gina-popin-skeleton{padding:1.5rem;min-width:18rem;max-width:90vw}.gina-popin-skeleton .gina-popin-skeleton-line{height:.85rem;margin-bottom:.75rem;border-radius:4px;background:linear-gradient(90deg,#ededed 25%,#f7f7f7 50%,#ededed 75%);background-size:200% 100%;animation:gina-popin-skeleton-shimmer 1.4s ease-in-out infinite}.gina-popin-skeleton .gina-popin-skeleton-line:last-child{margin-bottom:0}.gina-popin-skeleton .gina-popin-skeleton-title{height:1.4rem;width:60%;margin-bottom:1.25rem}.gina-popin-skeleton .gina-popin-skeleton-line--short{width:40%}@media (prefers-reduced-motion:reduce){.gina-popin-skeleton .gina-popin-skeleton-line{animation:none}}
|
|
@@ -6675,6 +6675,15 @@ function Routing() {
|
|
|
6675
6675
|
// }
|
|
6676
6676
|
|
|
6677
6677
|
|
|
6678
|
+
// #B415 — client-side getRouting returns null BY DESIGN when nothing
|
|
6679
|
+
// matches (a {} table before the routing fetch lands, or a bundle with
|
|
6680
|
+
// no rules). The bare `routing[rule]` deref below then threw a context-
|
|
6681
|
+
// free TypeError ONE LINE ABOVE the #B132 diagnostic — so the degraded-
|
|
6682
|
+
// table case #B132 was built for was exactly the one it could never
|
|
6683
|
+
// report. Name the bundle and the likely cause instead.
|
|
6684
|
+
if ( !routing ) {
|
|
6685
|
+
throw new Error('[ RoutingHelper::getRoute(rule, params) ] : bundle `'+ bundle +'` has no routing table for rule `'+ rule +'` (client: routing config not loaded yet, or empty)')
|
|
6686
|
+
}
|
|
6678
6687
|
if ( typeof(routing[rule]) == 'undefined' ) {
|
|
6679
6688
|
// #B132 — name the bundle + its table size so a degraded/near-empty
|
|
6680
6689
|
// table (e.g. a bundle whose routing config never loaded) is
|
|
@@ -10075,6 +10084,10 @@ define('gina/link', [ 'require', 'lib/domain', 'lib/loading-state', 'lib/merge',
|
|
|
10075
10084
|
* url lookup run. Before this order existed, two anchors sharing one url
|
|
10076
10085
|
* collapsed onto whichever registered first, whichever was clicked.
|
|
10077
10086
|
*
|
|
10087
|
+
* A url that resolves to no registration throws a named error BEFORE the
|
|
10088
|
+
* supersede step (#B328) — a miss can never abort a request already in
|
|
10089
|
+
* flight, and the message names the url plus the likely cause.
|
|
10090
|
+
*
|
|
10078
10091
|
* Side effects: supersedes any request still in flight, arms `data-gina-loading`
|
|
10079
10092
|
* on the anchor for the duration of this one, and releases it from a `loadend`
|
|
10080
10093
|
* listener. An indefinite hang is the single outcome that never releases, because
|
|
@@ -10083,6 +10096,8 @@ define('gina/link', [ 'require', 'lib/domain', 'lib/loading-state', 'lib/merge',
|
|
|
10083
10096
|
* @param {string} url - URL to request
|
|
10084
10097
|
* @param {object} [options] - XHR options, merged over the link's own
|
|
10085
10098
|
*
|
|
10099
|
+
* @throws {Error} when `url` matches no registration (the public-path miss)
|
|
10100
|
+
*
|
|
10086
10101
|
* @returns {void}
|
|
10087
10102
|
*
|
|
10088
10103
|
* @example
|
|
@@ -10097,6 +10112,20 @@ define('gina/link', [ 'require', 'lib/domain', 'lib/loading-state', 'lib/merge',
|
|
|
10097
10112
|
var $operated = _operatedLink;
|
|
10098
10113
|
_operatedLink = null;
|
|
10099
10114
|
|
|
10115
|
+
// link object — #B287: the operated registration wins; the first-match
|
|
10116
|
+
// url lookup remains only for the public `gina.link.request(url)` path.
|
|
10117
|
+
// #B328 — resolved (and guarded) BEFORE the transport block below:
|
|
10118
|
+
// resolving after it meant a mistyped public url had already aborted a
|
|
10119
|
+
// legitimate in-flight request before throwing a bare TypeError on
|
|
10120
|
+
// `$link.id`. A miss now leaves transport state untouched.
|
|
10121
|
+
var $link = $operated || getLinkByUrl(url);
|
|
10122
|
+
if ( !$link ) {
|
|
10123
|
+
// Named like #B415's null-table guard: tell a mistyped url from the
|
|
10124
|
+
// real second shape — a registration added by a later construction,
|
|
10125
|
+
// which the published instance's walk cannot see (#B326).
|
|
10126
|
+
throw new Error('[ LinkHandler::request(url, options) ] : no link is registered for url `'+ url +'` (never bound, or bound by a later construction — the published instance walks only its own registrations)');
|
|
10127
|
+
}
|
|
10128
|
+
|
|
10100
10129
|
// One transport per request, and a sequence taken BEFORE the abort so a
|
|
10101
10130
|
// supersede-abort is stale by construction — its handler sees
|
|
10102
10131
|
// `seq !== _linkSeq` and drops out, which is what keeps the abort from
|
|
@@ -10110,9 +10139,6 @@ define('gina/link', [ 'require', 'lib/domain', 'lib/loading-state', 'lib/merge',
|
|
|
10110
10139
|
var xhr = createXhr();
|
|
10111
10140
|
_linkXhr = xhr;
|
|
10112
10141
|
|
|
10113
|
-
// link object — #B287: the operated registration wins; the first-match
|
|
10114
|
-
// url lookup remains only for the public `gina.link.request(url)` path.
|
|
10115
|
-
var $link = $operated || getLinkByUrl(url);
|
|
10116
10142
|
var id = $link.id;
|
|
10117
10143
|
|
|
10118
10144
|
|
|
@@ -28625,6 +28651,55 @@ var readyList = [
|
|
|
28625
28651
|
var readyFired = false;
|
|
28626
28652
|
var readyEventHandlersInstalled = false;
|
|
28627
28653
|
|
|
28654
|
+
// #B414 — the framework's ONE mandatory client dependency (the routing table,
|
|
28655
|
+
// fetched by getDependencies from `<webroot>_gina/assets/routing.json`) must be
|
|
28656
|
+
// SETTLED before any consumer handler runs: the server whispers
|
|
28657
|
+
// `page.environment.routing` as a hardcoded '{}' (the real export is commented
|
|
28658
|
+
// out — "Adding 289 KB"), so between DOMContentLoaded and the fetch landing,
|
|
28659
|
+
// `gina.config.routing` is {} and any getRoute()/toUrl() in handler init throws
|
|
28660
|
+
// or misroutes. Loopback wins that race by single-digit ms; a real deployment
|
|
28661
|
+
// LOSES it by 150ms+ on every load — deterministic breakage that local dev can
|
|
28662
|
+
// never see. "Settled" deliberately means loaded OR failed: loadRoutingConf
|
|
28663
|
+
// dispatches `deps.loaded` on both paths, so a broken endpoint still releases
|
|
28664
|
+
// handlers (with console evidence via the listener) instead of hanging the page.
|
|
28665
|
+
var _ginaDepsSettled = false;
|
|
28666
|
+
var _ginaDepsQueue = [];
|
|
28667
|
+
/**
|
|
28668
|
+
* Marks the mandatory client deps settled and drains every queued callback.
|
|
28669
|
+
* Idempotent — the forced (timeout) and real (deps.loaded) paths can both fire.
|
|
28670
|
+
* @param {boolean} [forced] - true when the 5s fallback fired before the deps
|
|
28671
|
+
* @inner
|
|
28672
|
+
*/
|
|
28673
|
+
function _settleDeps(forced) {
|
|
28674
|
+
if (_ginaDepsSettled) return;
|
|
28675
|
+
_ginaDepsSettled = true;
|
|
28676
|
+
if (forced && typeof(console) != 'undefined' && console.error) {
|
|
28677
|
+
console.error('[gina] routing dependency still pending after 5s — releasing handlers with a degraded routing table');
|
|
28678
|
+
}
|
|
28679
|
+
while (_ginaDepsQueue.length) {
|
|
28680
|
+
try { _ginaDepsQueue.shift()(); } catch (depsCbErr) {
|
|
28681
|
+
if ( typeof(console) != 'undefined' && console.error ) {
|
|
28682
|
+
console.error(depsCbErr.stack || depsCbErr.message || depsCbErr);
|
|
28683
|
+
}
|
|
28684
|
+
}
|
|
28685
|
+
}
|
|
28686
|
+
}
|
|
28687
|
+
/**
|
|
28688
|
+
* Runs `fn` now if the mandatory deps have settled, else queues it for the
|
|
28689
|
+
* settle drain (real or forced).
|
|
28690
|
+
* @param {function} fn
|
|
28691
|
+
* @inner
|
|
28692
|
+
*/
|
|
28693
|
+
function _whenDepsSettled(fn) {
|
|
28694
|
+
if (_ginaDepsSettled) { fn(); return; }
|
|
28695
|
+
_ginaDepsQueue.push(fn);
|
|
28696
|
+
}
|
|
28697
|
+
// Armed at PARSE TIME on purpose — NOT inside getDependencies: on a page where
|
|
28698
|
+
// the script-tag scan matches nothing (renamed src, static harness) the fetch
|
|
28699
|
+
// is never issued, so a timer armed there would never start and the gate would
|
|
28700
|
+
// hang handlers forever in exactly the degenerate case it exists to protect.
|
|
28701
|
+
setTimeout(function () { _settleDeps(true); }, 5000);
|
|
28702
|
+
|
|
28628
28703
|
// call this when the document is ready
|
|
28629
28704
|
// this function protects itself against being called more than once
|
|
28630
28705
|
function ready() {
|
|
@@ -28651,7 +28726,13 @@ function ready() {
|
|
|
28651
28726
|
result = readyList[i].fn.call(window, readyList[i].ctx, window.require);
|
|
28652
28727
|
|
|
28653
28728
|
// clear
|
|
28654
|
-
|
|
28729
|
+
// #B414 — advance past the gina entry only once the
|
|
28730
|
+
// routing dependency has settled too: a truthy
|
|
28731
|
+
// onGinaLoaded means only that the LOADER's whispers
|
|
28732
|
+
// ran (isFrameworkLoaded), never that the async
|
|
28733
|
+
// routing fetch landed. Releasing here without it
|
|
28734
|
+
// ran consumer handlers against a {} table.
|
|
28735
|
+
if (result && _ginaDepsSettled) {
|
|
28655
28736
|
window.clearInterval(scheduler);
|
|
28656
28737
|
++i;
|
|
28657
28738
|
handleEvent(i, readyList);
|
|
@@ -28742,7 +28823,12 @@ if ( typeof(window['gina']) == 'undefined' ) { // could have be defined by loade
|
|
|
28742
28823
|
/**
|
|
28743
28824
|
* ready
|
|
28744
28825
|
* This is the one public interface use to wrap `handlers`
|
|
28745
|
-
* It
|
|
28826
|
+
* It fires once BOTH document readiness (DOMContentLoaded-equivalent)
|
|
28827
|
+
* AND the framework's mandatory routing dependency have settled — the
|
|
28828
|
+
* routing table arrives by async fetch, so DOMContentLoaded alone was
|
|
28829
|
+
* too early on deployed tiers (#B414). If the fetch fails or never
|
|
28830
|
+
* starts, handlers still release (settle-on-error / 5s fallback), with
|
|
28831
|
+
* console evidence.
|
|
28746
28832
|
*
|
|
28747
28833
|
* No need to use it for `handlers`, it is automatically applied for each `handler`
|
|
28748
28834
|
*
|
|
@@ -28756,7 +28842,14 @@ if ( typeof(window['gina']) == 'undefined' ) { // could have be defined by loade
|
|
|
28756
28842
|
// if ready has already beenfired, then just schedule the callback
|
|
28757
28843
|
// to fire asynchronously, but right away
|
|
28758
28844
|
if (readyFired) {
|
|
28759
|
-
|
|
28845
|
+
// #B414 — the late-registration path must gate on the routing
|
|
28846
|
+
// dependency too: this branch bypasses the readyList scheduler
|
|
28847
|
+
// entirely, so without the gate a handler registered after
|
|
28848
|
+
// DOMContentLoaded (a deferred script, a handler registered
|
|
28849
|
+
// from another handler) still ran against a {} table.
|
|
28850
|
+
_whenDepsSettled(function () {
|
|
28851
|
+
setTimeout(function() {callback(context);}, 1);
|
|
28852
|
+
});
|
|
28760
28853
|
return;
|
|
28761
28854
|
} else {
|
|
28762
28855
|
// add the function and context to the list
|
|
@@ -28882,7 +28975,14 @@ require([
|
|
|
28882
28975
|
var _validatorBootTries = 0;
|
|
28883
28976
|
var bootValidator = function () {
|
|
28884
28977
|
try {
|
|
28885
|
-
|
|
28978
|
+
// #B414 — `_ginaDepsSettled` joins the gate: `isFrameworkLoaded`
|
|
28979
|
+
// guarantees the whispers (incl. gina.forms) ran, but NOT that the
|
|
28980
|
+
// async routing fetch landed — and a form rule may name a route
|
|
28981
|
+
// (the `query` rule), which evaluates at bind. Constructing before
|
|
28982
|
+
// the deps settle bound forms against a {} table and died inside
|
|
28983
|
+
// the init listener. Settle-on-error + the 5s fallback keep this
|
|
28984
|
+
// poll terminating in every degenerate shape.
|
|
28985
|
+
if ( !window['gina'] || !window['gina']['isFrameworkLoaded'] || !_ginaDepsSettled ) {
|
|
28886
28986
|
if ( _validatorBootTries++ < 100 ) {
|
|
28887
28987
|
(window['setTimeout'] || function (fn) { fn(); })(bootValidator, 50);
|
|
28888
28988
|
}
|
|
@@ -29046,9 +29146,21 @@ function getDependencies(gina, cb) {
|
|
|
29046
29146
|
// }
|
|
29047
29147
|
];
|
|
29048
29148
|
depsEventBus.addEventListener('deps.loaded', (event) => {
|
|
29149
|
+
// #B416 — surface the failure the event carries: loadRoutingConf
|
|
29150
|
+
// dispatches this on ERROR too (that is what keeps the boot alive),
|
|
29151
|
+
// but the detail was discarded — a failed fetch (#B213's guard
|
|
29152
|
+
// throwing on a non-OK status) booted the framework permanently
|
|
29153
|
+
// degraded (routing {}) with ZERO console evidence.
|
|
29154
|
+
if ( event && event.detail && event.detail.error ) {
|
|
29155
|
+
if ( typeof(console) != 'undefined' && console.error ) {
|
|
29156
|
+
console.error('[gina] routing dependency failed to load — client getRoute()/toUrl() will be degraded until reload:', event.detail.error.stack || event.detail.error.message || event.detail.error);
|
|
29157
|
+
}
|
|
29158
|
+
}
|
|
29049
29159
|
arr.splice(0,1);
|
|
29050
29160
|
if (!arr.length) {
|
|
29051
|
-
// Deps
|
|
29161
|
+
// Deps settled (loaded or failed) — release the #B414 gate, then
|
|
29162
|
+
// run the script-onload continuation (the ginaloaded attach).
|
|
29163
|
+
_settleDeps();
|
|
29052
29164
|
cb()
|
|
29053
29165
|
}
|
|
29054
29166
|
});
|