gina 0.5.20 → 0.5.21
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 +14 -0
- package/README.md +9 -6
- package/ROADMAP.md +2 -0
- package/framework/v0.5.21/VERSION +1 -0
- package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/js/gina.js +251 -76
- package/framework/v0.5.21/core/asset/plugin/dist/vendor/gina/js/gina.min.js +589 -0
- package/framework/v0.5.21/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.21/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.5.20 → v0.5.21}/core/config.js +49 -2
- package/framework/{v0.5.20 → v0.5.21}/core/controller/controller.render-json.js +6 -1
- package/framework/{v0.5.20 → v0.5.21}/core/controller/controller.render-swig.js +46 -8
- package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/validator/src/main.js +115 -47
- package/framework/{v0.5.20 → v0.5.21}/core/server.isaac.js +39 -4
- package/framework/{v0.5.20 → v0.5.21}/core/server.js +47 -3
- package/framework/{v0.5.20 → v0.5.21}/core/template/conf/env.json +7 -1
- package/framework/{v0.5.20 → v0.5.21}/lib/render-cache/src/main.js +113 -2
- package/framework/{v0.5.20 → v0.5.21}/lib/routing/src/main.js +4 -1
- package/framework/{v0.5.20 → v0.5.21}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +12 -2
- package/package.json +3 -3
- package/framework/v0.5.20/VERSION +0 -1
- package/framework/v0.5.20/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -588
- package/framework/v0.5.20/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.20/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/AUTHORS +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/LICENSE +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/content.encoding +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/controller/controller.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/controller/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/dev/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/gna.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/locales/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/locales/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/mime.types +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/model/entity.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/model/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/router.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/server.express.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/status.codes +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/console.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/context.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/path.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/task.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/helpers/text.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/async/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/audit/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/audit-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/config.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/dto/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/image-build/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/job/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/job/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/job-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/math/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/model.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/proc.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/session-store.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/shell.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/state.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/url/README.md +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/url/index.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/validator.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.20 → v0.5.21}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,20 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|
|
6
6
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## 0.5.21 - 2026-07-20
|
|
10
|
+
### Added
|
|
11
|
+
* Popin eager preload — a trigger can opt into warming its AJAX content off the critical path with data-gina-dialog-preload="eager" (case-insensitive): after window load, at browser idle, the popin plugin fetches the content one trigger at a time through the same gate as the hover/focus warm (the "false" opt-out, the disabled skip, and the cache dedup all apply — whichever warm runs second is a no-op), so a later open injects instantly with no second GET. The pass is skipped when the browser signals Save-Data. Default behavior is unchanged: hover/focus warm stays the default and "false" still disables warming entirely. Browser-bundled — rebuild your bundles to pick it up.
|
|
12
|
+
### Fixed
|
|
13
|
+
* Fixed CSP useNonce nonces diverging between the Content-Security-Policy header and the framework-injected inline bootstrap script on cache-enabled routes: the bootstrap nonce was frozen at first compile inside the per-view compiled-template cache (and the persisted layout cache) while the header rotated per request, so every cache-path response failed nonce validation under an enforcing policy. The bootstrap nonce is now injected as a render-time template conditional (re-evaluated per response), stale pre-fix layout-cache files are healed in place on the next compile, and cache HITS re-mint: the serve path rewrites the stored CSP header and body with a fresh per-response nonce on both engines, so header and markup nonces match and rotate on misses and hits alike.
|
|
14
|
+
* A bundle whose config/routing.json is missing or unreadable at boot now refuses to start with an error naming the bundle and environment (previously it booted silently with only the framework-synthetic routes, so every app route 404'd and cross-bundle route lookups threw hours later with no boot-time signal); an external supervisor restart (an orchestrator liveness/restart or a container restart policy) then retries until the release tree settles, which self-heals mid-deploy races — the gina daemon itself does not retry a startup crash (it reports it once and stops; restart manually) — a deployment that relied on the silent half-boot must fix its release artifact. The route-lookup not-found error now also names the bundle and its rule count, so a degraded or near-empty routing table is tellable from a plain mistyped rule at the call site
|
|
15
|
+
* FormValidator: on live-check fields with autocomplete="off", the Safari-autocomplete keydown interception no longer swallows modifier chords — Cmd/Ctrl+A/C/V/X/Z and Cmd+Arrow run their native defaults instead of typing the chord letter into the field (Cmd+A appended "a") or routing keyboard paste through document.execCommand("paste"), which is inert in unprivileged web content, so keyboard paste on intercepted fields works again (#B134)
|
|
16
|
+
* The framework env template no longer declares a hardcoded accept-language RESPONSE header — Accept-Language is a request header, and the runtime-merged template default made every response (error responses included) emit it. A project or bundle env.json that declares its own response headers keeps working, including re-declaring accept-language, which is still emitted verbatim and still honored by the controller's locale fallback; deployments whose generated env.json copied the old template value should remove that line themselves
|
|
17
|
+
* FormValidator: the Safari-autocomplete keydown interception (fields with autocomplete="off" on a live-check form) now gates on REAL Safari only — every Chromium UA (Chrome/Edge/Brave/Opera) carries the Safari/537.36 token, so the bare /safari/i test ran the WebKit workaround on Chromium where it was never intended; Chromium users get native typing/autofill behavior back, while WebKit-on-iOS browsers (CriOS/FxiOS) stay covered by design (#B135)
|
|
18
|
+
* FormValidator live-check: when the whole-form validation pass turns valid (e.g. a checkbox interaction raises a field another field's comparison rule reads), the pass now clears every previously-errored field's rendered error message along with re-enabling the submit trigger — pre-fix the stale blocking-error paragraph stayed visible next to an enabled submit until the field's next keystroke; applied to both global-pass copies (input/checkbox/radio path and select path), and the pass still never renders new errors on untouched fields (#B136)
|
|
19
|
+
* Merged-process projects (several bundles sharing one port, served by one process): the first cross-bundle getUrl no longer permanently replaces the target bundle's routing table with the starting app's — previously every cross-bundle link to that bundle rendered the literal 404:[<METHOD>]<rule>@<bundle> marker instead of a URL, and merged-mode inbound statics dispatch could match requests against the wrong bundle's table. Each bundle now keeps its own routing table (the hostname share is preserved); projects with distinct per-bundle ports were never affected.
|
|
20
|
+
### Security
|
|
21
|
+
* Server-side error responses no longer serialize stack traces to HTTP clients outside local scope: the engine-level error responder logs the full stack server-side and sends the message line only (JSON/XHR bodies, the inline HTML fallback, and custom-error-page data), the JSON render delegate's HTTP/1.1 reason-phrase fallback ships the error message instead of a stack, and the cached-file stream error path ships message-only — local scope keeps the stack on the wire for the development toolbar
|
|
22
|
+
|
|
9
23
|
## 0.5.20 - 2026-07-19
|
|
10
24
|
### Changed
|
|
11
25
|
* Multipart parsing now uses `@rhinostone/busboy` installed from npm instead of a patched copy vendored inside the framework. The fork is a strict superset of upstream busboy 1.6.0 whose only addition exposes each part's parsed Content-Disposition parameters, which is what lets the upload layer read the `group="..."` tag — previously a local patch that had to be re-applied by hand on every upstream upgrade. Upload behaviour and the multipart wire format are unchanged: files still arrive with their group, an unconfigured group is still rejected, and a file with no group still falls back to `untagged`. Pickup is the version plus a bundle restart; no client rebuild is needed.
|
package/README.md
CHANGED
|
@@ -42,12 +42,15 @@ open https://localhost:3100
|
|
|
42
42
|
|
|
43
43
|
> **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
|
|
44
44
|
|
|
45
|
-
## What's in 0.5.
|
|
46
|
-
|
|
47
|
-
- **
|
|
48
|
-
- **
|
|
49
|
-
- **Fixed — FormValidator:
|
|
50
|
-
- **
|
|
45
|
+
## What's in 0.5.21
|
|
46
|
+
|
|
47
|
+
- **Security — 500 bodies no longer carry stack traces outside local scope.** Uncaught controller and middleware errors route through the server-side error responder, which used to serialize the full stack — absolute server paths and frames — into the JSON `error` field, the inline HTML fallback, and custom-error-page data on every scope. Outside local scope the wire now carries only the error's message line (the JSON render delegate's HTTP/1.1 reason-phrase fallback and the cached-file stream error path included); the full stack goes to the server log. Local scope is unchanged — the development toolbar keeps its stack.
|
|
48
|
+
- **Changed — a missing bundle `routing.json` now fails the boot (deliberate).** A bundle whose `config/routing.json` was missing at boot used to start silently with only the framework-synthetic routes — every app route 404'd, and cross-bundle lookups threw hours later. The boot now refuses to start with an error naming the bundle and environment, exactly like a malformed `routing.json` always has; under an external supervisor (Kubernetes, a container restart policy, an init system) the restart retries until the release tree settles, while a bare `gina bundle:start` reports the crash once and stays down until restarted manually. The route-lookup not-found error also names the bundle and its rule count, so a degraded table is tellable from a mistyped rule — that half is browser-bundled, so rebuild your bundles.
|
|
49
|
+
- **Fixed — FormValidator: keyboard shortcuts on `autocomplete="off"` fields, the Safari-only gate, and stale error clearing.** The Safari-autocomplete keydown interception no longer swallows modifier chords (Cmd/Ctrl+A/C/V/X/Z run their native defaults instead of typing the chord letter into the field) and now runs on real Safari only — every Chromium UA carries the `Safari/537.36` token, so Chrome/Edge/Brave were wrongly intercepted. And when a live-check whole-form pass turns valid, every previously-errored field's message is now cleared along with re-enabling the submit trigger, instead of leaving a stale blocking error on screen. Browser-bundled — rebuild your bundles. (#B134/#B135/#B136)
|
|
50
|
+
- **Fixed — cross-bundle links in merged-process projects.** In a project whose bundles share one port (served by one process), the first cross-bundle `getUrl` permanently replaced the target bundle's routing table with the starting app's — every cross-bundle link to that bundle rendered a literal `404:[…]` marker instead of a URL. Each bundle now keeps its own routing table. Server-side only; projects with distinct per-bundle ports were never affected. (#B137)
|
|
51
|
+
- **Fixed — CSP `useNonce` on cache-enabled routes.** The framework-injected inline bootstrap's nonce was frozen at first compile inside the compiled-template and layout caches while the `Content-Security-Policy` header rotated per request, so every cache-path response failed nonce validation under an enforcing policy. The nonce is now injected per response, stale pre-fix layout-cache files heal in place, and cache hits re-mint both the stored header and body with a fresh nonce on both engines.
|
|
52
|
+
- **Fixed — the hardcoded `accept-language` response header is gone.** Accept-Language is a request header, but the framework env template declared it as a response default, so every response — error responses included — emitted it. An env.json that declares its own response headers keeps working verbatim; deployments whose generated env.json copied the old template line should remove it.
|
|
53
|
+
- **Added — popin eager preload.** Mark a trigger with `data-gina-dialog-preload="eager"` and the popin plugin fetches its AJAX content after window load, at browser idle — one trigger at a time, off the critical path — so a later open injects instantly with no second GET. Same safety gates as the hover/focus warm (the `"false"` opt-out, the disabled skip, cache dedup), and the pass is skipped under Save-Data. Default behavior is unchanged. Browser-bundled — rebuild your bundles.
|
|
51
54
|
|
|
52
55
|
See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
|
|
53
56
|
|
package/ROADMAP.md
CHANGED
|
@@ -45,6 +45,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
45
45
|
| **Q3 2026** | `0.5.18` ✅ | **Added**: a redis-backed L2 render cache — rendered output is cached in a shared store, so several replicas serve the same rendered page and a freshly-started replica serves what a peer already rendered (cross-replica cold-start), degrading to per-replica caching if redis is down · pluggable cache backends (`server.cache.type`: `memory` / `fs` / `redis`) with bundle-wide `sliding` / `maxAge` fallbacks a route inherits · type-safe DTOs and a default-on validation pipe (`gina.dto` — one shape projected to runtime validation, response shaping, JSON Schema and TypeScript; `param.dto` validates the payload before the action with a localised 422, `param.responseDto` shapes the wire, `gina bundle:types` emits declarations, and `bundle:openapi` / `bundle:mcp` emit real request/response schemas) · `releaseWatch` — an opt-in stale built-release watch for local production rehearsals (source-tree fingerprint against the manifest release stamp, `GET /_gina/release/status` + an SSE stream, idle-gated rebuild-and-restart honouring in-flight requests and busy probes, a live shadow-DOM banner, and `restartMode: supervisor` for daemonless container launches) · `POST /_gina/cache/clear` + a `gina cache:clear` CLI (flush the rendered-output cache, or evict by event across bundles) · two-tier cache observability (an RFC 9211 `Cache-Status` `detail` naming the serving tier, plus an `l2` redis-health block on `/_gina/cache/stats`) · **Changed**: render-cache keys are release-namespaced, so an upgrade auto-invalidates (`GINA_CACHE_NAMESPACE`, else the framework version) · the `Cache-Status` miss form is now the RFC 9211 `gina-cache; fwd=uri-miss`, and Express bundles get their first cache-miss signal · **Fixed**: event-driven cache invalidation works — `self.cache.invalidateByEvent()` now exists, and a key carrying a querystring no longer throws a 500 that discarded an already-rendered page · the `fs` cache survives a restart (disk read-back via a `.meta` sidecar, original absolute expiry preserved, no TTL extension) · a checkbox's `value` attribute no longer decides its `checked` state (#49) · the published TypeScript declarations describe the runtime · errors surface instead of crashing, masking, or coming back as `0` (detached-context `throwError`, partial-boot `getLib()` / `getConfig()`, a bitwise-or at nine sites, and `$` in log messages) |
|
|
46
46
|
| **Q3 2026** | `0.5.19` ✅ | **Added**: route authorization — a `routing.json` rule gates access before the action runs via `param.requireAuth` (a 401 for XHR, a non-cacheable login redirect for a browser navigation, the original request snapshotted for `resumeRequest()`), `param.roles` (ANY-of, implies `requireAuth`), and `param.policy` (a per-bundle function for the ownership/record checks roles can't express, AND-composed after roles); denials stay generic — required roles and the policy name never reach the wire — author mistakes refuse to boot, and `self.hasRole()` authorizes mid-logic · an audit trail — opt-in `self.audit(action, data)` writes a user-attributed append-only JSONL record (its own store, never the logger sinks; an actor snapshot, `X-Forwarded-For` never trusted), route-authorization denials recorded automatically, and an always-on request id correlating audit records to JSON logs · an OCI image/container CLI on the `image:build` host — `image:list` / `image:rm` / `image:run` (podman; publishes the EXPOSEd port, `--env-var` / `--env-file` keep secrets out of argv) and a `container:` group (`container:ps` / `container:stop`, reporting the rung a container came down on) · **Changed**: `redirect()` carries request data through the session by default (a one-shot flash, gone on refresh), the clear-text `?inheritedData=` URL form and its 2000-char cap now session-less-only — removing a plaintext-secret-in-URL disclosure when a session-ful bundle halts a credential-bearing POST · **Fixed**: Prometheus metrics no longer double-count under the isaac engine (#OBS1) · the relative `self.redirect('/path')` form resolves again and an unresolvable target 404s instead of crashing (`redirect()` is now async), and `getRoute()` no longer 500s on a requirements-less GET route with extra params (#B120/#B121) · `image:build` for gina-dependent projects no longer fails at gina-init and the pinned framework wins `require('gina')` (#B118/#B119) · `gina.emit` is an inert stub (#B109) and the checkbox migration warning now covers the un-tick direction (#49) |
|
|
47
47
|
| **Q3 2026** | `0.5.20` ✅ | **Fixed**: region locale data — the generator now emits one standalone file per language with localized country names (a `fr` culture renders `Allemagne` / `États-Unis` / `Royaume-Uni` through the same `getLocales().getCountries()` path, no app changes; rows without an ISO 3166 alpha-2 code are dropped; read once at boot, so restart to pick up), and `getCountries(code)` honors its projection argument — adding the requested field while the four historical fields stay untouched, an empty locale set degrading to an empty list instead of throwing (#50) · **Fixed**: FormValidator — numbered `is` rules (`is1`, `is2`, …) now install and enforce on client and server (previously silently skipped; **sweep rule JSONs before upgrading — forms may begin 422ing**), each alias keying its error distinctly and server-side `$`-cross-field rules no longer crashing; injected/popin forms resolve `data-gina-form-rule` so live checking activates; boolean `_case_` conditions match live (#B127/#B128/#B129) · **Changed**: multipart parsing uses `@rhinostone/busboy` installed from npm instead of a patched vendored copy — a strict superset of upstream busboy 1.6.0, upload behaviour and the wire format unchanged, pickup is the version plus a bundle restart |
|
|
48
|
+
| **Q3 2026** | `0.5.21` ✅ | **Security**: server-side error responses no longer serialize stack traces to HTTP clients outside local scope — the responder logs the full stack server-side and ships the message line only (JSON bodies, the inline HTML fallback, custom-error-page data; local scope keeps the development-toolbar stack) · **Changed**: a bundle whose `config/routing.json` is missing at boot now refuses to start with an error naming the bundle and environment (previously a silent half-boot with only the framework-synthetic routes; an external supervisor's restart retries until the release tree settles — the daemon itself is fail-stop), and the route-lookup not-found error names the bundle and its rule count · **Fixed**: FormValidator — modifier chords (Cmd/Ctrl+A/C/V/X/Z) run their native defaults again on `autocomplete="off"` live-check fields, the Safari-autocomplete interception gates on real Safari only (Chromium UAs no longer intercepted), and a whole-form live-check pass that turns valid clears every previously-errored field's message (#B134/#B135/#B136) · **Fixed**: merged-process (same-port multi-bundle) projects — the first cross-bundle getUrl no longer permanently replaces the target bundle's routing table with the starting app's, which rendered every cross-bundle link as a literal `404:[…]` marker; distinct-port projects were never affected (#B137) · **Fixed**: CSP `useNonce` on cache-enabled routes — the header and inline-bootstrap nonces now match and rotate per response, on cache hits and misses alike · **Fixed**: the env template's hardcoded `accept-language` response header is gone (a request header, wrongly emitted on every response) · **Added**: popin eager preload — `data-gina-dialog-preload="eager"` warms a popin's AJAX content at browser idle after window load, same safety gates as the hover/focus warm, skipped under Save-Data |
|
|
48
49
|
| **Q4 2026** | `0.6.0` | Security & compliance controls (technical safeguards mapping to PCI-DSS / SOC2 / HIPAA) |
|
|
49
50
|
| **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
50
51
|
| **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
|
|
@@ -65,6 +66,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
65
66
|
| ✅ | **HEAD method** — `req.head` populated with query-string and URI params. Full controller action runs so all response headers are set correctly; body is suppressed before writing to the wire. Both `render()` and `renderJSON()` honour HEAD. Routes declared as `GET` automatically accept HEAD — no extra routing rule needed. | `0.3.0` | 2026-03-31 |
|
|
66
67
|
| ✅ | **Client-side components (Web Components)** — Standards-based conventions for stateful client widgets: custom elements v1, zero dependency, no build tooling. Server-rendered light-DOM authoring keeps HTML (designer) and JS (developer) separated — the behavior-only class binds its own server-rendered subtree and holds no markup strings (repeatable markup clones from a server-rendered `<template>`). Components upgrade automatically in popin/XHR-injected content with no rebinding; SEO/GEO-first (meaningful content ships in the initial server-rendered HTML). `gina view:add` scaffolds a reference component (engine partial + behavior-only class); e2e coverage locks popin auto-upgrade, strict-CSP compatibility (real nonce'd header, no `unsafe-inline`), SSR hydration from attributes + a JSON `data-*` payload, and no-JS crawler equivalence. The `gina-*` tag prefix is reserved for framework components. Form-associated custom elements participate in FormValidator — a named component exposing a `.value` getter is collected, validated, serialized into the AJAX payload, and error-rendered like a native control (client-side live-check on its composed bubbling `change`, dirty-tracking, and auto-id), so long as it declares `static formAssociated = true`, carries a `name`, and fires a composed `change` on commit. Live-data components ride the same lifecycle — open the connection in `connectedCallback`, close it in `disconnectedCallback` (popin close then tears it down automatically) — paired with `method:"ws"` routes or SSE via `renderStream()`, with per-animation-frame batching guidance for high-frequency streams; the lifecycle contract is executed against a live HTTP/2 extended-CONNECT loopback in the test suite. Dev-mode Inspector observability: the View tab carries a component census with a red undefined-components indicator (a typo'd tag or a missing definition script is no longer a silent failure), and the Events tab surfaces client-side `<tag>:<verb>` component events — metadata always, `detail` values only behind the existing `inspector.events.captureArgs` opt-in. | `0.5.15` | 2026-07-11 |
|
|
67
68
|
| ✅ | **Stale built-release watch** — For LOCAL production rehearsals. A bundle serving a built release under `local` scope + a non-dev env has no hot-reload, so after you edit source it silently keeps serving the stale build. Opt in via `server.releaseWatch` in `settings.json`: the bundle watches its SOURCE tree, compares fingerprints against the manifest release stamp, and surfaces staleness on `GET /_gina/release/status` and a live `GET /_gina/release/events` SSE stream (notify mode, the default) — or auto-rebuilds on change (opt-in `auto` mode). `POST /_gina/release/rebuild` rebuilds with an **idle-gated restart** that waits on in-flight HTTP requests and `gina.registerBusyProbe` application probes, so a restart never interrupts in-flight work. Hard-gated on `local` scope + a non-dev env — never active on a real cluster. | `0.5.18-alpha` | 2026-07-16 |
|
|
69
|
+
| ✅ | **Popin eager preload** — Opt-in idle warming for AJAX popin content. Mark a trigger with `data-gina-dialog-preload="eager"` (case-insensitive) and the popin plugin fetches its content after `window` load, at browser idle — one trigger at a time, off the critical path — so opening feels instant with no second GET. Same safety gates as the hover/focus warm: the `"false"` opt-out and the disabled skip apply identically, and an eager warm and a hover warm coalesce into a single GET (whichever runs second is a no-op). The pass is skipped when the browser signals Save-Data. Default behavior is unchanged — hover/focus warm remains the default. | `0.5.21-alpha` | 2026-07-19 |
|
|
68
70
|
|
|
69
71
|
---
|
|
70
72
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.21
|
|
@@ -6295,7 +6295,10 @@ function Routing() {
|
|
|
6295
6295
|
|
|
6296
6296
|
|
|
6297
6297
|
if ( typeof(routing[rule]) == 'undefined' ) {
|
|
6298
|
-
|
|
6298
|
+
// #B132 — name the bundle + its table size so a degraded/near-empty
|
|
6299
|
+
// table (e.g. a bundle whose routing config never loaded) is
|
|
6300
|
+
// tellable from a plain mistyped rule at the call site.
|
|
6301
|
+
throw new Error('[ RoutingHelper::getRouting(rule, params) ] : `' +rule + '` not found ! (bundle `'+ bundle +'` holds '+ Object.keys(routing).length +' rules)')
|
|
6299
6302
|
}
|
|
6300
6303
|
|
|
6301
6304
|
var route = JSON.clone(routing[rule]);
|
|
@@ -13799,6 +13802,24 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
13799
13802
|
handleErrorsDisplay($gForm, gResult.error, gResult.data, _touchedField);
|
|
13800
13803
|
}
|
|
13801
13804
|
}
|
|
13805
|
+
// #B136 — the fresh global pass is VALID but the store still
|
|
13806
|
+
// holds errors from an earlier pass (e.g. a cross-field
|
|
13807
|
+
// comparison fixed by ANOTHER control's change: a checkbox
|
|
13808
|
+
// handler raising the compared field). Every stored error is
|
|
13809
|
+
// stale — clear each previously-errored field's display, not
|
|
13810
|
+
// just the touched field's, so the re-enabled submit trigger
|
|
13811
|
+
// never sits beside a stale blocking-error message.
|
|
13812
|
+
// handleErrorsDisplay's empty-errors path also prunes the
|
|
13813
|
+
// per-field bookkeeping; new errors are never rendered here
|
|
13814
|
+
// (untouched-field display still waits for interaction or
|
|
13815
|
+
// submit).
|
|
13816
|
+
else if ( isFormValid && instance.$forms[formId].errors && instance.$forms[formId].errors.count() > 0 ) {
|
|
13817
|
+
var staleErrors = instance.$forms[formId].errors;
|
|
13818
|
+
instance.$forms[formId].errors = {};
|
|
13819
|
+
for (var staleField in staleErrors) {
|
|
13820
|
+
handleErrorsDisplay($gForm, {}, null, staleField);
|
|
13821
|
+
}
|
|
13822
|
+
}
|
|
13802
13823
|
// Fixed on 2025-03-16
|
|
13803
13824
|
// Eg.: input select change impacting another element: solve `no more errors`
|
|
13804
13825
|
else if ( instance.$forms[formId].errors && !instance.$forms[formId].errors.count() ) {
|
|
@@ -14011,7 +14032,19 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
14011
14032
|
* handleAutoComplete
|
|
14012
14033
|
* This is a temporary fix to handle safari autocomplete/autosuggest
|
|
14013
14034
|
* Will be removed when Safari honores autocomplete="off"
|
|
14035
|
+
*
|
|
14036
|
+
* Intercepts keydown on the field (preventDefault + a programmatic value
|
|
14037
|
+
* rebuild behind a transient readonly) so the browser never sees typing
|
|
14038
|
+
* and offers no autofill/autosuggest. Modifier chords (metaKey/ctrlKey)
|
|
14039
|
+
* are deliberately NOT intercepted (#B134): they return before
|
|
14040
|
+
* preventDefault so the native select-all/copy/paste/cut/undo defaults
|
|
14041
|
+
* run — the rebuild cannot reproduce them.
|
|
14042
|
+
*
|
|
14043
|
+
* Gated to REAL Safari at the registerForLiveChecking call site (#B135):
|
|
14044
|
+
* Chromium UAs carry the Safari token but were never this workaround's
|
|
14045
|
+
* target — they get native behavior.
|
|
14014
14046
|
* @param {object} $el HTMLElement
|
|
14047
|
+
* @param {number} [liveCheckTimer] - live-check debounce handle, cleared per intercepted keystroke
|
|
14015
14048
|
*/
|
|
14016
14049
|
var handleAutoComplete = function($el, liveCheckTimer) {
|
|
14017
14050
|
|
|
@@ -14032,6 +14065,17 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
14032
14065
|
// add once
|
|
14033
14066
|
if ( typeof(gina.events[evtName]) == 'undefined' ) {
|
|
14034
14067
|
addListener(gina, event.currentTarget, evtName, function(e) {
|
|
14068
|
+
// #B134 — modifier chords are NOT intercepted: return before
|
|
14069
|
+
// preventDefault so the native select-all/copy/paste/cut/undo
|
|
14070
|
+
// defaults run. The rebuild below cannot reproduce them — the
|
|
14071
|
+
// printable branch typed the chord letter into the field
|
|
14072
|
+
// (Cmd+A appended "a") and execCommand("paste") is inert in
|
|
14073
|
+
// unprivileged web content. The field is not readonly here
|
|
14074
|
+
// (focusin removed it), so the native edit lands and the
|
|
14075
|
+
// live-check picks it up on the keyup that follows.
|
|
14076
|
+
if ( e.metaKey || e.ctrlKey ) {
|
|
14077
|
+
return;
|
|
14078
|
+
}
|
|
14035
14079
|
e.preventDefault();
|
|
14036
14080
|
clearTimeout(liveCheckTimer);
|
|
14037
14081
|
|
|
@@ -14115,53 +14159,61 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
14115
14159
|
}
|
|
14116
14160
|
break;
|
|
14117
14161
|
// Shortcuts
|
|
14118
|
-
|
|
14119
|
-
|
|
14120
|
-
|
|
14121
|
-
|
|
14122
|
-
|
|
14123
|
-
|
|
14124
|
-
|
|
14125
|
-
|
|
14126
|
-
|
|
14127
|
-
|
|
14128
|
-
|
|
14129
|
-
|
|
14130
|
-
|
|
14131
|
-
|
|
14132
|
-
|
|
14133
|
-
|
|
14134
|
-
|
|
14135
|
-
|
|
14136
|
-
|
|
14137
|
-
|
|
14138
|
-
|
|
14139
|
-
|
|
14140
|
-
|
|
14141
|
-
|
|
14142
|
-
|
|
14143
|
-
|
|
14144
|
-
|
|
14145
|
-
|
|
14146
|
-
|
|
14147
|
-
|
|
14148
|
-
|
|
14149
|
-
|
|
14150
|
-
|
|
14151
|
-
|
|
14152
|
-
|
|
14153
|
-
|
|
14154
|
-
|
|
14155
|
-
|
|
14156
|
-
|
|
14157
|
-
|
|
14158
|
-
|
|
14159
|
-
|
|
14160
|
-
|
|
14161
|
-
|
|
14162
|
-
|
|
14163
|
-
|
|
14164
|
-
|
|
14162
|
+
// #B134 — the modifier-chord cases below are unreachable
|
|
14163
|
+
// since the e.metaKey/e.ctrlKey bail at the top of this
|
|
14164
|
+
// handler: chords now run natively, and the native
|
|
14165
|
+
// copy/cut/paste/select-all/undo defaults are correct
|
|
14166
|
+
// where these re-implementations were not (the paste
|
|
14167
|
+
// re-implementation was inert in unprivileged web
|
|
14168
|
+
// content, and undo-to-defaultValue wiped user input).
|
|
14169
|
+
// Kept commented for the record.
|
|
14170
|
+
// case 17: // CTRL
|
|
14171
|
+
// case 91: // CMD
|
|
14172
|
+
// console.debug("CMD, CTRL hit");
|
|
14173
|
+
// e.preventDefault();
|
|
14174
|
+
// break;
|
|
14175
|
+
// case 67: // to handle CMD+C (copy)
|
|
14176
|
+
// if (
|
|
14177
|
+
// keyboardMapping[67] && keyboardMapping[91] // mac osx
|
|
14178
|
+
// ||
|
|
14179
|
+
// keyboardMapping[67] && keyboardMapping[17] // windows
|
|
14180
|
+
// ) {
|
|
14181
|
+
// $_el.setSelectionRange(posStart, posEnd);
|
|
14182
|
+
// document.execCommand("copy");
|
|
14183
|
+
// break;
|
|
14184
|
+
// }
|
|
14185
|
+
// case 86: // to handle CMD+V (paste)
|
|
14186
|
+
// if (
|
|
14187
|
+
// keyboardMapping[86] && keyboardMapping[91] // mac osx
|
|
14188
|
+
// ||
|
|
14189
|
+
// keyboardMapping[86] && keyboardMapping[17] // windows
|
|
14190
|
+
// ) {
|
|
14191
|
+
// if (posStart != posEnd) {
|
|
14192
|
+
// $_el.value = $_el.value.replace(str.substring(posStart, posEnd), '');
|
|
14193
|
+
// }
|
|
14194
|
+
// setCaretToPos($_el, posStart);
|
|
14195
|
+
// document.execCommand("paste");
|
|
14196
|
+
// break;
|
|
14197
|
+
// }
|
|
14198
|
+
// case 88: // to handle CMD+X (cut)
|
|
14199
|
+
// if (
|
|
14200
|
+
// keyboardMapping[88] && keyboardMapping[91] // mac osx
|
|
14201
|
+
// ||
|
|
14202
|
+
// keyboardMapping[88] && keyboardMapping[17] // windows
|
|
14203
|
+
// ) {
|
|
14204
|
+
// $_el.setSelectionRange(posStart, posEnd);
|
|
14205
|
+
// document.execCommand("cut");
|
|
14206
|
+
// break;
|
|
14207
|
+
// }
|
|
14208
|
+
// case 90: // to handle CMD+Z (undo)
|
|
14209
|
+
// if (
|
|
14210
|
+
// keyboardMapping[90] && keyboardMapping[91] // mac osx
|
|
14211
|
+
// ||
|
|
14212
|
+
// keyboardMapping[90] && keyboardMapping[17] // windows
|
|
14213
|
+
// ) {
|
|
14214
|
+
// $_el.value = $_el.defaultValue;
|
|
14215
|
+
// break;
|
|
14216
|
+
// }
|
|
14165
14217
|
default:
|
|
14166
14218
|
// Replace selection
|
|
14167
14219
|
if (e.key.length > 1) {
|
|
@@ -14230,9 +14282,17 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
14230
14282
|
addLiveForInput($form, $el, liveCheckTimer, isCustomEl);
|
|
14231
14283
|
if ( !isCustomEl ) {
|
|
14232
14284
|
// Bypass Safari autocomplete (native inputs only)
|
|
14285
|
+
// #B135 — REAL Safari only: every Chromium UA (Chrome/Edge/
|
|
14286
|
+
// Brave/Opera...) also carries the "Safari/537.36" token, so
|
|
14287
|
+
// the bare /safari/i test matched them all and ran this
|
|
14288
|
+
// WebKit workaround where it was never intended (see the
|
|
14289
|
+
// handleAutoComplete header). WebKit-on-iOS third-party
|
|
14290
|
+
// browsers (CriOS/FxiOS/EdgiOS — no "Chrome"/"Chromium"
|
|
14291
|
+
// token) stay matched on purpose: they run Safari's engine.
|
|
14233
14292
|
var isAutoCompleteField = $el.getAttribute('autocomplete');
|
|
14234
14293
|
if (
|
|
14235
14294
|
/safari/i.test(navigator.userAgent)
|
|
14295
|
+
&& !/chrom(e|ium)/i.test(navigator.userAgent)
|
|
14236
14296
|
&& isAutoCompleteField
|
|
14237
14297
|
&& /^(off|false)/i.test(isAutoCompleteField)
|
|
14238
14298
|
) {
|
|
@@ -15544,6 +15604,17 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
15544
15604
|
handleErrorsDisplay($gForm, gResult.error, gResult.data, _touchedField);
|
|
15545
15605
|
}
|
|
15546
15606
|
}
|
|
15607
|
+
// #B136 — same stale-clear as processEvent's global pass (keep the
|
|
15608
|
+
// two copies in sync): the fresh pass is valid but the store still
|
|
15609
|
+
// holds earlier errors — clear each previously-errored field's
|
|
15610
|
+
// display, not just the touched field's.
|
|
15611
|
+
else if ( isFormValid && instance.$forms[formId].errors && instance.$forms[formId].errors.count() > 0 ) {
|
|
15612
|
+
var staleErrors = instance.$forms[formId].errors;
|
|
15613
|
+
instance.$forms[formId].errors = {};
|
|
15614
|
+
for (var staleField in staleErrors) {
|
|
15615
|
+
handleErrorsDisplay($gForm, {}, null, staleField);
|
|
15616
|
+
}
|
|
15617
|
+
}
|
|
15547
15618
|
|
|
15548
15619
|
updateSubmitTriggerState( $gForm, isFormValid);
|
|
15549
15620
|
once = false;
|
|
@@ -18252,9 +18323,10 @@ define('gina/popin', [ 'require', 'lib/domain', 'lib/merge', 'utils/events' ], f
|
|
|
18252
18323
|
|
|
18253
18324
|
/**
|
|
18254
18325
|
* Module-level preload cache, keyed by URL. Warmed by the delegated
|
|
18255
|
-
* mouseover/focusin listeners (installPreload) and
|
|
18256
|
-
* (
|
|
18257
|
-
*
|
|
18326
|
+
* mouseover/focusin listeners (installPreload) and by the opt-in idle eager
|
|
18327
|
+
* pass (installEagerPreload); consumed once at open time (consumePreload).
|
|
18328
|
+
* Shared across popin instances so a warm entry survives the subsequent
|
|
18329
|
+
* click. A reserved-but-not-yet-loaded entry is `null` (in-flight).
|
|
18258
18330
|
*
|
|
18259
18331
|
* @inner
|
|
18260
18332
|
* @type {object}
|
|
@@ -18312,6 +18384,8 @@ define('gina/popin', [ 'require', 'lib/domain', 'lib/merge', 'utils/events' ], f
|
|
|
18312
18384
|
var _ginaDialogDelegated = false;
|
|
18313
18385
|
/** @inner @type {boolean} module guard — the preload listeners are installed once */
|
|
18314
18386
|
var _ginaPreloadInstalled = false;
|
|
18387
|
+
/** @inner @type {boolean} module guard — the idle eager-preload pass is installed once */
|
|
18388
|
+
var _ginaEagerInstalled = false;
|
|
18315
18389
|
|
|
18316
18390
|
/**
|
|
18317
18391
|
* Gina Popin Handler
|
|
@@ -18797,13 +18871,21 @@ define('gina/popin', [ 'require', 'lib/domain', 'lib/merge', 'utils/events' ], f
|
|
|
18797
18871
|
* Cross-origin URLs are left for the click-time XHR/CORS path.
|
|
18798
18872
|
*
|
|
18799
18873
|
* @inner
|
|
18874
|
+
* @param {string} url - same-origin popin content URL
|
|
18875
|
+
* @param {function} [onDone] - completion callback, fired on EVERY exit path
|
|
18876
|
+
* (cross-origin bail, cache, or decline) so a serialized caller — the
|
|
18877
|
+
* eager warm queue — always advances. The hover path passes none.
|
|
18800
18878
|
*/
|
|
18801
|
-
function preloadFetch(url) {
|
|
18879
|
+
function preloadFetch(url, onDone) {
|
|
18880
|
+
var _preloadDone = function () {
|
|
18881
|
+
if ( typeof(onDone) == 'function' ) { onDone(); }
|
|
18882
|
+
};
|
|
18802
18883
|
if (
|
|
18803
18884
|
/^(http|https):/.test(url)
|
|
18804
18885
|
&& !new RegExp('^' + window.location.protocol + '//' + window.location.host).test(url)
|
|
18805
18886
|
) {
|
|
18806
18887
|
delete preloadCache[url];
|
|
18888
|
+
_preloadDone();
|
|
18807
18889
|
return;
|
|
18808
18890
|
}
|
|
18809
18891
|
var xhrPreload = new XMLHttpRequest();
|
|
@@ -18829,6 +18911,7 @@ define('gina/popin', [ 'require', 'lib/domain', 'lib/merge', 'utils/events' ], f
|
|
|
18829
18911
|
delete preloadCache[url];
|
|
18830
18912
|
for ( var _wf = 0; _wf < _waiters.length; ++_wf ) { _waiters[_wf](null); }
|
|
18831
18913
|
}
|
|
18914
|
+
_preloadDone();
|
|
18832
18915
|
}
|
|
18833
18916
|
};
|
|
18834
18917
|
xhrPreload.send();
|
|
@@ -18929,10 +19012,10 @@ define('gina/popin', [ 'require', 'lib/domain', 'lib/merge', 'utils/events' ], f
|
|
|
18929
19012
|
/**
|
|
18930
19013
|
* installPreload — one-time delegated `mouseover` + `focusin` listeners that warm
|
|
18931
19014
|
* preloadCache for AJAX triggers (`data-gina-dialog-src` / legacy
|
|
18932
|
-
* `data-gina-popin-url`).
|
|
18933
|
-
*
|
|
18934
|
-
*
|
|
18935
|
-
*
|
|
19015
|
+
* `data-gina-popin-url`). Per-trigger gating (disabled skip, the #B91
|
|
19016
|
+
* `data-gina-dialog-preload="false"` opt-out, URL-cache dedup) lives in
|
|
19017
|
+
* warmTrigger, shared with the idle eager pass (installEagerPreload) so the
|
|
19018
|
+
* two warm paths can never drift.
|
|
18936
19019
|
*
|
|
18937
19020
|
* @inner
|
|
18938
19021
|
*/
|
|
@@ -18949,30 +19032,119 @@ define('gina/popin', [ 'require', 'lib/domain', 'lib/merge', 'utils/events' ], f
|
|
|
18949
19032
|
if ( !$trigger ) {
|
|
18950
19033
|
return;
|
|
18951
19034
|
}
|
|
18952
|
-
|
|
18953
|
-
$trigger.getAttribute('disabled') != null && $trigger.getAttribute('disabled') != 'false'
|
|
18954
|
-
|| $trigger.getAttribute('aria-disabled') == 'true'
|
|
18955
|
-
) {
|
|
18956
|
-
return;
|
|
18957
|
-
}
|
|
18958
|
-
// #B91 — per-trigger preload opt-out: a trigger whose GET has server-side
|
|
18959
|
-
// effects declares itself. Case-insensitive on purpose (a templated "False"
|
|
18960
|
-
// must not silently fail open and fire the GET anyway); its click still
|
|
18961
|
-
// loads normally, at click time (consumePreload -> false).
|
|
18962
|
-
if ( /^false$/i.test($trigger.getAttribute('data-gina-dialog-preload')) ) {
|
|
18963
|
-
return;
|
|
18964
|
-
}
|
|
18965
|
-
var url = $trigger.getAttribute('data-gina-dialog-src') || $trigger.getAttribute('data-gina-popin-url');
|
|
18966
|
-
if ( !url || typeof(preloadCache[url]) != 'undefined' ) {
|
|
18967
|
-
return; // already cached or in-flight — dedup
|
|
18968
|
-
}
|
|
18969
|
-
preloadCache[url] = null; // reserve in-flight slot (dedup concurrent intents)
|
|
18970
|
-
preloadFetch(url);
|
|
19035
|
+
warmTrigger($trigger);
|
|
18971
19036
|
};
|
|
18972
19037
|
document.addEventListener('mouseover', onIntent);
|
|
18973
19038
|
document.addEventListener('focusin', onIntent);
|
|
18974
19039
|
}
|
|
18975
19040
|
|
|
19041
|
+
/**
|
|
19042
|
+
* warmTrigger — shared per-trigger warm gate + fetch, used by BOTH the
|
|
19043
|
+
* hover/focus intent path (installPreload's onIntent) and the idle eager
|
|
19044
|
+
* pass (installEagerPreload). Gates, in order: the disabled/aria-disabled
|
|
19045
|
+
* skip, the #B91 `data-gina-dialog-preload="false"` opt-out
|
|
19046
|
+
* (case-insensitive), URL resolution, the already-cached/in-flight dedup —
|
|
19047
|
+
* then the in-flight slot reserve + GET. Keeping the gates in ONE place is
|
|
19048
|
+
* the point: a future gate change cannot land in one warm path and miss
|
|
19049
|
+
* the other.
|
|
19050
|
+
*
|
|
19051
|
+
* `onDone` (optional) fires on EVERY exit path — gate skip or fetch
|
|
19052
|
+
* completion — so a serialized caller (the eager queue) always advances.
|
|
19053
|
+
* The hover path passes none.
|
|
19054
|
+
*
|
|
19055
|
+
* @inner
|
|
19056
|
+
* @param {object} $trigger - the matched trigger element
|
|
19057
|
+
* @param {function} [onDone]
|
|
19058
|
+
*/
|
|
19059
|
+
function warmTrigger($trigger, onDone) {
|
|
19060
|
+
var _warmDone = function () {
|
|
19061
|
+
if ( typeof(onDone) == 'function' ) { onDone(); }
|
|
19062
|
+
};
|
|
19063
|
+
if (
|
|
19064
|
+
$trigger.getAttribute('disabled') != null && $trigger.getAttribute('disabled') != 'false'
|
|
19065
|
+
|| $trigger.getAttribute('aria-disabled') == 'true'
|
|
19066
|
+
) {
|
|
19067
|
+
_warmDone();
|
|
19068
|
+
return;
|
|
19069
|
+
}
|
|
19070
|
+
// #B91 — per-trigger preload opt-out: a trigger whose GET has server-side
|
|
19071
|
+
// effects declares itself. Case-insensitive on purpose (a templated "False"
|
|
19072
|
+
// must not silently fail open and fire the GET anyway); its click still
|
|
19073
|
+
// loads normally, at click time (consumePreload -> false).
|
|
19074
|
+
if ( /^false$/i.test($trigger.getAttribute('data-gina-dialog-preload')) ) {
|
|
19075
|
+
_warmDone();
|
|
19076
|
+
return;
|
|
19077
|
+
}
|
|
19078
|
+
var url = $trigger.getAttribute('data-gina-dialog-src') || $trigger.getAttribute('data-gina-popin-url');
|
|
19079
|
+
if ( !url || typeof(preloadCache[url]) != 'undefined' ) {
|
|
19080
|
+
_warmDone();
|
|
19081
|
+
return; // already cached or in-flight — dedup
|
|
19082
|
+
}
|
|
19083
|
+
preloadCache[url] = null; // reserve in-flight slot (dedup concurrent intents)
|
|
19084
|
+
preloadFetch(url, onDone);
|
|
19085
|
+
}
|
|
19086
|
+
|
|
19087
|
+
/**
|
|
19088
|
+
* installEagerPreload — one-time idle warm-all pass for triggers that opt
|
|
19089
|
+
* in with `data-gina-dialog-preload="eager"` (case-insensitive). Runs off
|
|
19090
|
+
* the critical path by construction: waits for `window` load, then
|
|
19091
|
+
* schedules on requestIdleCallback (setTimeout fallback — load-bearing for
|
|
19092
|
+
* browsers without rIC), and warms the opted-in triggers ONE AT A TIME
|
|
19093
|
+
* through the same warmTrigger gate as the hover path — so the #B91
|
|
19094
|
+
* `"false"` opt-out, the disabled skip, and the cache dedup (an eager warm
|
|
19095
|
+
* and a hover warm coalesce into one GET) all apply identically. Skipped
|
|
19096
|
+
* entirely when the browser signals Save-Data.
|
|
19097
|
+
*
|
|
19098
|
+
* One-shot: triggers injected after the pass are not re-scanned — the
|
|
19099
|
+
* delegated hover/focus warm covers them. Content staleness matches the
|
|
19100
|
+
* shipped hover-warm semantics (no TTL): the cache entry lives until
|
|
19101
|
+
* consumed, declined, or page unload — a trigger opts into that window by
|
|
19102
|
+
* declaring `eager`.
|
|
19103
|
+
*
|
|
19104
|
+
* @inner
|
|
19105
|
+
*/
|
|
19106
|
+
function installEagerPreload() {
|
|
19107
|
+
if ( _ginaEagerInstalled ) {
|
|
19108
|
+
return;
|
|
19109
|
+
}
|
|
19110
|
+
_ginaEagerInstalled = true;
|
|
19111
|
+
// Respect the user's reduced-data preference — no speculative warm at all.
|
|
19112
|
+
if ( typeof(navigator) != 'undefined' && navigator.connection && navigator.connection.saveData ) {
|
|
19113
|
+
return;
|
|
19114
|
+
}
|
|
19115
|
+
var run = function () {
|
|
19116
|
+
var $candidates = document.querySelectorAll('[data-gina-dialog-src],[data-gina-popin-url]');
|
|
19117
|
+
var queue = [];
|
|
19118
|
+
for (var c = 0, cLen = $candidates.length; c < cLen; ++c) {
|
|
19119
|
+
if ( /^eager$/i.test($candidates[c].getAttribute('data-gina-dialog-preload')) ) {
|
|
19120
|
+
queue.push($candidates[c]);
|
|
19121
|
+
}
|
|
19122
|
+
}
|
|
19123
|
+
// Serialized: each warm starts only when the previous one finished
|
|
19124
|
+
// (or was gate-skipped) — N eager popins never burst N parallel GETs.
|
|
19125
|
+
var next = function () {
|
|
19126
|
+
var $trigger = queue.shift();
|
|
19127
|
+
if ( !$trigger ) {
|
|
19128
|
+
return;
|
|
19129
|
+
}
|
|
19130
|
+
warmTrigger($trigger, next);
|
|
19131
|
+
};
|
|
19132
|
+
next();
|
|
19133
|
+
};
|
|
19134
|
+
var schedule = function () {
|
|
19135
|
+
if ( typeof(window.requestIdleCallback) == 'function' ) {
|
|
19136
|
+
window.requestIdleCallback(run);
|
|
19137
|
+
} else {
|
|
19138
|
+
setTimeout(run, 1500);
|
|
19139
|
+
}
|
|
19140
|
+
};
|
|
19141
|
+
if ( document.readyState == 'complete' ) {
|
|
19142
|
+
schedule();
|
|
19143
|
+
} else {
|
|
19144
|
+
window.addEventListener('load', schedule, { once: true });
|
|
19145
|
+
}
|
|
19146
|
+
}
|
|
19147
|
+
|
|
18976
19148
|
/**
|
|
18977
19149
|
* openInPageDialog
|
|
18978
19150
|
*
|
|
@@ -20924,9 +21096,12 @@ define('gina/popin', [ 'require', 'lib/domain', 'lib/merge', 'utils/events' ], f
|
|
|
20924
21096
|
|
|
20925
21097
|
// New `data-gina-dialog-*` entry layer — install the delegated open + preload
|
|
20926
21098
|
// listeners once per page (module-guarded). Additive to the legacy bindOpen
|
|
20927
|
-
// scan (which registerPopin still runs per popin).
|
|
21099
|
+
// scan (which registerPopin still runs per popin). The eager pass warms
|
|
21100
|
+
// `data-gina-dialog-preload="eager"` triggers off the critical path
|
|
21101
|
+
// (post-load idle) through the same warmTrigger gate.
|
|
20928
21102
|
bindDelegatedOpen();
|
|
20929
21103
|
installPreload();
|
|
21104
|
+
installEagerPreload();
|
|
20930
21105
|
//instance.on('init', function(event) {
|
|
20931
21106
|
addListener(gina, instance.target, 'init.'+instance.id, function(e) {
|
|
20932
21107
|
|