gina 0.7.1 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +39 -44
- package/ROADMAP.md +3 -0
- package/framework/v0.7.2/VERSION +1 -0
- package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.js +351 -24
- package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +726 -0
- package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/session-store.js +24 -6
- package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.js +90 -9
- package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-nunjucks.js +12 -5
- package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-xml.js +10 -2
- package/framework/{v0.7.1 → v0.7.2}/core/gna.js +15 -1
- package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/src/main.js +301 -12
- package/framework/{v0.7.1 → v0.7.2}/core/server.isaac.js +95 -13
- package/framework/{v0.7.1 → v0.7.2}/core/server.js +232 -7
- package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/index.js +2 -1
- package/framework/{v0.7.1 → v0.7.2}/core/template/conf/templates.json +1 -0
- package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/inc/name.js +1 -1
- package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/inc/name.js +1 -1
- package/framework/v0.7.2/lib/error-ref/package.json +7 -0
- package/framework/v0.7.2/lib/error-ref/src/main.js +70 -0
- package/framework/{v0.7.1 → v0.7.2}/lib/index.js +12 -0
- package/framework/v0.7.2/lib/lane/package.json +7 -0
- package/framework/v0.7.2/lib/lane/src/main.js +1440 -0
- package/framework/v0.7.2/lib/sri/src/main.js +518 -0
- package/framework/{v0.7.1 → v0.7.2}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +11 -9
- package/package.json +6 -6
- package/schema/routing.json +7 -1
- package/types/index.d.ts +28 -0
- package/framework/v0.7.1/VERSION +0 -1
- package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -720
- package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.7.1/lib/sri/src/main.js +0 -237
- /package/framework/{v0.7.1 → v0.7.2}/AUTHORS +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/LICENSE +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/html/static.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/config.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/config.requirements-anchor.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/storage-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/param-redact.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/kv-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/settle-once.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/kv-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/content.encoding +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/inline-script.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/dev/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/currency.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/mime.types +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/model/entity.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/model/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/model/template/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/router.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/server.express.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/server.isaac.rapid-reset.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/server.route-candidates.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/status.codes +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/_gitignore +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/env.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/console.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/context.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/data/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/data/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/json/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/json/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/path.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/prototypes.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/task.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/text.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/admin/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/async/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/async/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/audit/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/audit-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authn/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cache/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cache/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cache/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/inc/boot-lines.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/inc/name.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/inc/ps-titles.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/inc/name.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/gc.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/stats.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/verify.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/collection/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/collection/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/collection/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/conf-view/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/conf-view/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/config.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cron/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cron/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/domain/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/domain/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/duration/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/duration/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/generator/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/i18n/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/idempotency/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/idempotency/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/image-build/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/instrument/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/job/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/job/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/job-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/kv/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/kv/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/kv-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/redact.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/maintenance/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/maintenance/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/math/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/merge/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/merge/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/message-validator/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/message-validator/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/metrics/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/model.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/money/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/money/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/multipart/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/multipart/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/priority/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/priority/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/proc.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/push/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/push/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/rate-limit/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/rate-limit/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/backends/exec.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/declaration.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/sources.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/security-headers-emitter/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/security-headers-emitter/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/session-lifetime/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/session-lifetime/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/session-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/shell.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/sri/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/state.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/local-cas.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/local-stream.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/local.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/meta-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/s3.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/util.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/url/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/url/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/url/routing.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/uuid/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/validator.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/watcher/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-session/src/main.js +0 -0
|
@@ -2086,7 +2086,17 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
2086
2086
|
uploadStarted : 'Upload started',
|
|
2087
2087
|
uploadComplete : 'Upload complete',
|
|
2088
2088
|
// #A11Y7/U5 — spoken when a staged file's reset/delete control removes it.
|
|
2089
|
-
fileRemoved : '%s removed'
|
|
2089
|
+
fileRemoved : '%s removed',
|
|
2090
|
+
// #B724 (gh#83 part 1) — the visible text for a status-0 XHR settle. It fires for
|
|
2091
|
+
// a true transport failure AND for a reverse-proxy 413 arriving mid-send over
|
|
2092
|
+
// HTTP/2 or a navigation that aborted the request — both of which DID reach the
|
|
2093
|
+
// server. "did not complete" is honest for all three; the old "did not reach the
|
|
2094
|
+
// server" was false for the latter two. Resolved through a11yLabel() so a project
|
|
2095
|
+
// can translate it, which the hardcoded literal could not.
|
|
2096
|
+
transportError : 'Transport failure: the request did not complete',
|
|
2097
|
+
// #B726 (gh#83 part 3) — spoken once when a submit waits for one of its form's staged
|
|
2098
|
+
// uploads to finish; the submit is sent when the last of them settles.
|
|
2099
|
+
uploadPending : 'Waiting for the upload to finish…'
|
|
2090
2100
|
};
|
|
2091
2101
|
|
|
2092
2102
|
/**
|
|
@@ -2117,6 +2127,19 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
2117
2127
|
return A11Y_LABELS[key] || '';
|
|
2118
2128
|
};
|
|
2119
2129
|
|
|
2130
|
+
// #B724 (gh#83 part 1) — track page unload once, at module load. A status-0 XHR
|
|
2131
|
+
// settle during a navigation (the browser aborts in-flight requests as the page tears
|
|
2132
|
+
// down) is an abort, not a transport failure; the flag lets the status-0 arm tag the
|
|
2133
|
+
// result `reason: 'unload'` so a consumer's submit-error handler can distinguish it.
|
|
2134
|
+
var _pageIsUnloading = false;
|
|
2135
|
+
if ( typeof(window) != 'undefined' && window.addEventListener ) {
|
|
2136
|
+
window.addEventListener('pagehide', function() { _pageIsUnloading = true; }, true);
|
|
2137
|
+
// #B728 — a page restored from the back-forward cache keeps its JS state, so the flag the
|
|
2138
|
+
// `pagehide` above set would still be true and every later status-0 settle would be tagged
|
|
2139
|
+
// `unload`. The `pageshow` that restores the page ends that unload.
|
|
2140
|
+
window.addEventListener('pageshow', function() { _pageIsUnloading = false; }, true);
|
|
2141
|
+
}
|
|
2142
|
+
|
|
2120
2143
|
/**
|
|
2121
2144
|
* announceA11yStatus — announce a non-error status through the form's region.
|
|
2122
2145
|
*
|
|
@@ -4297,7 +4320,13 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
4297
4320
|
result = {
|
|
4298
4321
|
'status' : 408,
|
|
4299
4322
|
'transportError': true,
|
|
4300
|
-
|
|
4323
|
+
// #B724 (gh#83 part 1) — a status-0 settle also fires for a 413
|
|
4324
|
+
// arriving mid-send over HTTP/2 and for a navigation that aborted
|
|
4325
|
+
// the request, both of which DID reach the server. `reason` lets a
|
|
4326
|
+
// submit-error handler tell an unload-abort (benign) from a real
|
|
4327
|
+
// transport failure; the text is overridable + honest (see a11yLabel).
|
|
4328
|
+
'reason' : _pageIsUnloading ? 'unload' : 'transport',
|
|
4329
|
+
'error' : a11yLabel('transportError')
|
|
4301
4330
|
};
|
|
4302
4331
|
|
|
4303
4332
|
$form.eventData.error = result;
|
|
@@ -4920,6 +4949,172 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
4920
4949
|
});
|
|
4921
4950
|
};
|
|
4922
4951
|
|
|
4952
|
+
/**
|
|
4953
|
+
* getStagedUploadsInFlight — #B726: the staged uploads of a form whose staging request is
|
|
4954
|
+
* on the wire.
|
|
4955
|
+
*
|
|
4956
|
+
* A staged file input points at its virtual `gina-upload-*` form through
|
|
4957
|
+
* `data-gina-form-virtual`, written on every selection. That form's record carries `sent`,
|
|
4958
|
+
* which `send()` sets only AFTER `xhr.send()` and clears when the request settles (readyState
|
|
4959
|
+
* 4 and the `loadend` fail-safe). So `sent` reads true exactly while a staging request is in
|
|
4960
|
+
* flight — unlike `isSending`, which is claimed before the request opens and stays true for
|
|
4961
|
+
* good when something throws before it is sent.
|
|
4962
|
+
*
|
|
4963
|
+
* `form.elements` is walked so that a staged input reassociated with `form="<id>"` counts.
|
|
4964
|
+
*
|
|
4965
|
+
* @inner
|
|
4966
|
+
* @param {HTMLFormElement} $formEl - the REAL form (never its virtual upload form)
|
|
4967
|
+
* @returns {Array<string>} the ids of the virtual upload forms still in flight; empty when none
|
|
4968
|
+
*
|
|
4969
|
+
* @example
|
|
4970
|
+
* getStagedUploadsInFlight(document.getElementById('profile')); // ['gina-upload-avatar']
|
|
4971
|
+
*/
|
|
4972
|
+
var getStagedUploadsInFlight = function($formEl) {
|
|
4973
|
+
var inFlight = [];
|
|
4974
|
+
if ( !$formEl || !$formEl.elements ) {
|
|
4975
|
+
return inFlight;
|
|
4976
|
+
}
|
|
4977
|
+
var $controls = $formEl.elements, $control = null, virtualId = null;
|
|
4978
|
+
for (var c = 0, cLen = $controls.length; c < cLen; ++c) {
|
|
4979
|
+
$control = $controls[c];
|
|
4980
|
+
if ( !$control || $control.type != 'file' || typeof($control.getAttribute) != 'function' ) {
|
|
4981
|
+
continue;
|
|
4982
|
+
}
|
|
4983
|
+
virtualId = $control.getAttribute('data-gina-form-virtual');
|
|
4984
|
+
if (
|
|
4985
|
+
virtualId
|
|
4986
|
+
&& typeof(instance.$forms[virtualId]) != 'undefined'
|
|
4987
|
+
&& /^true$/i.test(instance.$forms[virtualId].sent)
|
|
4988
|
+
&& inFlight.indexOf(virtualId) < 0
|
|
4989
|
+
) {
|
|
4990
|
+
inFlight.push(virtualId);
|
|
4991
|
+
}
|
|
4992
|
+
}
|
|
4993
|
+
return inFlight;
|
|
4994
|
+
};
|
|
4995
|
+
|
|
4996
|
+
/**
|
|
4997
|
+
* holdSubmitForStagedUploads — #B726: make a submit WAIT while one of its form's staged
|
|
4998
|
+
* uploads is in flight, instead of posting the upload's still-empty hidden fields.
|
|
4999
|
+
*
|
|
5000
|
+
* Called at the top of both submit doors, before the payload is collected. When an upload is
|
|
5001
|
+
* in flight it records ONE wait on the form's record (`stagedUploadWait`), keeps the busy
|
|
5002
|
+
* state the gesture armed, announces the wait once through the form's live region
|
|
5003
|
+
* (`a11yLabel('uploadPending')`) and tells the caller to stop. When the last upload settles,
|
|
5004
|
+
* `resolveStagedUploadWait` either runs `replay` — which re-enters the same door, so the
|
|
5005
|
+
* fields are collected again, now filled — or, if an upload failed, sends nothing.
|
|
5006
|
+
*
|
|
5007
|
+
* A gesture made while a wait is pending adds nothing; one made when a wait is recorded but
|
|
5008
|
+
* nothing is in flight any more drops the wait and goes through.
|
|
5009
|
+
*
|
|
5010
|
+
* @inner
|
|
5011
|
+
* @param {HTMLFormElement} $formEl - the real form being submitted
|
|
5012
|
+
* @param {function} replay - re-runs this submit through the door it came in by
|
|
5013
|
+
* @returns {boolean} true when the submit must stop here: it is waiting, or a wait is pending
|
|
5014
|
+
*
|
|
5015
|
+
* @example
|
|
5016
|
+
* if ( holdSubmitForStagedUploads($form, function() { $form.requestSubmit(); }) ) {
|
|
5017
|
+
* return; // the submit runs again once the upload settles
|
|
5018
|
+
* }
|
|
5019
|
+
*/
|
|
5020
|
+
var holdSubmitForStagedUploads = function($formEl, replay) {
|
|
5021
|
+
var formId = ( $formEl && typeof($formEl.getAttribute) == 'function' ) ? $formEl.getAttribute('id') : null;
|
|
5022
|
+
var $formRecord = ( formId && typeof(instance.$forms[formId]) != 'undefined' ) ? instance.$forms[formId] : null;
|
|
5023
|
+
if ( !$formRecord ) {
|
|
5024
|
+
return false;
|
|
5025
|
+
}
|
|
5026
|
+
var inFlight = getStagedUploadsInFlight($formEl);
|
|
5027
|
+
if ( $formRecord.stagedUploadWait ) {
|
|
5028
|
+
if ( inFlight.length > 0 ) {
|
|
5029
|
+
return true; // one wait per form
|
|
5030
|
+
}
|
|
5031
|
+
// nothing is on the wire any more: a settle this wait never heard of
|
|
5032
|
+
$formRecord.stagedUploadWait = null;
|
|
5033
|
+
return false;
|
|
5034
|
+
}
|
|
5035
|
+
if ( inFlight.length == 0 ) {
|
|
5036
|
+
return false;
|
|
5037
|
+
}
|
|
5038
|
+
$formRecord.stagedUploadWait = { replay: replay, failed: false };
|
|
5039
|
+
announceA11yStatus($formEl, a11yLabel('uploadPending'));
|
|
5040
|
+
if (envIsDev) {
|
|
5041
|
+
try { console.info('[FormValidator][upload] form `#'+ formId +'`: submit waiting for '+ inFlight.length +' staged upload(s) to finish ('+ inFlight.join(', ') +')'); } catch (e) {}
|
|
5042
|
+
}
|
|
5043
|
+
return true;
|
|
5044
|
+
};
|
|
5045
|
+
|
|
5046
|
+
/**
|
|
5047
|
+
* noteStagedUploadSettled — #B726: called by `onUpload` for every staging outcome.
|
|
5048
|
+
*
|
|
5049
|
+
* When the real form has a submit waiting, a failure marks the wait as failed, and the
|
|
5050
|
+
* decision is left to a microtask: it runs after the whole XHR settle has finished — the
|
|
5051
|
+
* hidden fields filled on success, or the error rendered — and even when the rest of
|
|
5052
|
+
* `onUpload` throws. Every outcome of one settle has been recorded by then, including a
|
|
5053
|
+
* success that `onUpload` turned into an error.
|
|
5054
|
+
*
|
|
5055
|
+
* @inner
|
|
5056
|
+
* @param {HTMLFormElement|undefined} $formEl - the real form (`uploadProperties.$form`)
|
|
5057
|
+
* @param {string} status - `success`, or anything else for a failure
|
|
5058
|
+
* @returns {undefined}
|
|
5059
|
+
*
|
|
5060
|
+
* @example
|
|
5061
|
+
* noteStagedUploadSettled(document.getElementById('profile'), 'error');
|
|
5062
|
+
*/
|
|
5063
|
+
var noteStagedUploadSettled = function($formEl, status) {
|
|
5064
|
+
var formId = ( $formEl && typeof($formEl.getAttribute) == 'function' ) ? $formEl.getAttribute('id') : null;
|
|
5065
|
+
var $formRecord = ( formId && typeof(instance.$forms[formId]) != 'undefined' ) ? instance.$forms[formId] : null;
|
|
5066
|
+
if ( !$formRecord || !$formRecord.stagedUploadWait ) {
|
|
5067
|
+
return;
|
|
5068
|
+
}
|
|
5069
|
+
if ( status != 'success' ) {
|
|
5070
|
+
$formRecord.stagedUploadWait.failed = true;
|
|
5071
|
+
}
|
|
5072
|
+
var decide = function onStagedUploadSettled() { resolveStagedUploadWait($formEl); };
|
|
5073
|
+
if ( typeof(queueMicrotask) == 'function' ) {
|
|
5074
|
+
queueMicrotask(decide);
|
|
5075
|
+
} else {
|
|
5076
|
+
Promise.resolve().then(decide);
|
|
5077
|
+
}
|
|
5078
|
+
};
|
|
5079
|
+
|
|
5080
|
+
/**
|
|
5081
|
+
* resolveStagedUploadWait — #B726: decide a waiting submit once a staged upload settled.
|
|
5082
|
+
*
|
|
5083
|
+
* Still waiting while another upload of the form is in flight. Otherwise the wait ends: when
|
|
5084
|
+
* every upload succeeded the submit is replayed through its own door; when one failed, or the
|
|
5085
|
+
* form has left the page, nothing is sent and the busy state the gesture armed is released —
|
|
5086
|
+
* unless the form has a request of its own in flight, whose settle owns that state (#B247).
|
|
5087
|
+
* No announcement on a failure: the upload already announced the server's message, and a
|
|
5088
|
+
* second write in the same beat would replace it.
|
|
5089
|
+
*
|
|
5090
|
+
* @inner
|
|
5091
|
+
* @param {HTMLFormElement} $formEl - the real form
|
|
5092
|
+
* @returns {undefined}
|
|
5093
|
+
*
|
|
5094
|
+
* @example
|
|
5095
|
+
* resolveStagedUploadWait(document.getElementById('profile'));
|
|
5096
|
+
*/
|
|
5097
|
+
var resolveStagedUploadWait = function($formEl) {
|
|
5098
|
+
var formId = ( $formEl && typeof($formEl.getAttribute) == 'function' ) ? $formEl.getAttribute('id') : null;
|
|
5099
|
+
var $formRecord = ( formId && typeof(instance.$forms[formId]) != 'undefined' ) ? instance.$forms[formId] : null;
|
|
5100
|
+
if ( !$formRecord || !$formRecord.stagedUploadWait ) {
|
|
5101
|
+
return;
|
|
5102
|
+
}
|
|
5103
|
+
var wait = $formRecord.stagedUploadWait;
|
|
5104
|
+
var isDetached = ( typeof($formEl.isConnected) != 'undefined' && !$formEl.isConnected );
|
|
5105
|
+
if ( !isDetached && getStagedUploadsInFlight($formEl).length > 0 ) {
|
|
5106
|
+
return;
|
|
5107
|
+
}
|
|
5108
|
+
$formRecord.stagedUploadWait = null;
|
|
5109
|
+
if ( wait.failed || isDetached ) {
|
|
5110
|
+
if ( !/^true$/i.test($formRecord.isSending) ) {
|
|
5111
|
+
disarmSubmitLoading($formRecord);
|
|
5112
|
+
}
|
|
5113
|
+
return;
|
|
5114
|
+
}
|
|
5115
|
+
wait.replay();
|
|
5116
|
+
};
|
|
5117
|
+
|
|
4923
5118
|
var onUpload = function(gina, $target, status, id, data) {
|
|
4924
5119
|
|
|
4925
5120
|
var uploadProperties = $target.uploadProperties || null;
|
|
@@ -4946,6 +5141,9 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
4946
5141
|
// #R8 slice 2 — the dropzone (if bound) returns to idle at the same
|
|
4947
5142
|
// single chokepoint
|
|
4948
5143
|
updateUploadDropzoneState(uploadProperties.dropzoneContainer || null, 'idle');
|
|
5144
|
+
// #B726 — a submit of the real form may be waiting for this upload; it is decided once
|
|
5145
|
+
// this whole settle has run (see noteStagedUploadSettled)
|
|
5146
|
+
noteStagedUploadSettled(uploadProperties.$form, status);
|
|
4949
5147
|
// parent form
|
|
4950
5148
|
// var $mainForm = uploadProperties.$form;
|
|
4951
5149
|
var $uploadTriger = document.getElementById(uploadProperties.uploadTriggerId);
|
|
@@ -4975,7 +5173,16 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
4975
5173
|
// console.error('[ mainUploadError ] ', status, data)
|
|
4976
5174
|
var errMsg = data.message || data.error;
|
|
4977
5175
|
|
|
4978
|
-
|
|
5176
|
+
// #B727 — render the server's error message as TEXT, never HTML. A non-JSON
|
|
5177
|
+
// error response is kept verbatim as `result.message` (see the XHR response
|
|
5178
|
+
// handler), so `innerHTML` here parsed a proxy/WAF HTML error page — or a
|
|
5179
|
+
// reflected upload filename (the server rejects a disallowed extension by
|
|
5180
|
+
// echoing the name) — as live markup. textContent closes the injection sink;
|
|
5181
|
+
// the <p> wrapper is kept for the existing styling + fadeIn.
|
|
5182
|
+
$error.textContent = '';
|
|
5183
|
+
var _errP = document.createElement('p');
|
|
5184
|
+
_errP.textContent = errMsg;
|
|
5185
|
+
$error.appendChild(_errP);
|
|
4979
5186
|
fadeIn($error);
|
|
4980
5187
|
// #A11Y7/U3 — the container is `display:none` when the text is written and
|
|
4981
5188
|
// only revealed by the fadeIn above, which is exactly the case where a
|
|
@@ -4987,8 +5194,22 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
4987
5194
|
if ( $uploadTriger && $uploadTriger.form ) {
|
|
4988
5195
|
announceA11yError($uploadTriger.form, $error.textContent);
|
|
4989
5196
|
}
|
|
4990
|
-
} else if(
|
|
4991
|
-
|
|
5197
|
+
} else if ( status != 'success' ) {
|
|
5198
|
+
// #B731 — no error element. Every error site calls onUpload BEFORE it dispatches
|
|
5199
|
+
// `error.<id>` and the declared `data-gina-form-upload-on-error` callback, so the
|
|
5200
|
+
// throw this branch held (`new Error(undefined)`: `errMsg` is assigned only in the
|
|
5201
|
+
// branch above) cancelled both. The message is announced instead of shown, and the
|
|
5202
|
+
// dispatch goes on.
|
|
5203
|
+
// was: } else if(!$error && status != 'success') {
|
|
5204
|
+
// was: throw new Error(errMsg)
|
|
5205
|
+
var noSlotMsg = data.message || data.error;
|
|
5206
|
+
noSlotMsg = ( typeof(noSlotMsg) == 'undefined' || noSlotMsg === null ) ? '' : String(noSlotMsg);
|
|
5207
|
+
if ( $uploadTriger && $uploadTriger.form && noSlotMsg != '' ) {
|
|
5208
|
+
announceA11yError($uploadTriger.form, noSlotMsg);
|
|
5209
|
+
}
|
|
5210
|
+
if (envIsDev) {
|
|
5211
|
+
try { console.warn('[FormValidator] upload `#'+ uploadProperties.uploadTriggerId +'`: no error element `#'+ uploadProperties.errorField +'`; the staging error is announced, not shown'); } catch (warnErr) {}
|
|
5212
|
+
}
|
|
4992
5213
|
} else {
|
|
4993
5214
|
// #A11Y7/U2 — success is the other end of the `uploadStarted` transition.
|
|
4994
5215
|
// It lives in this branch rather than at the indicator chokepoint above so
|
|
@@ -8005,6 +8226,9 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
8005
8226
|
// or
|
|
8006
8227
|
// $form.target.dataset.ginaFormIsResetting = true;
|
|
8007
8228
|
// handleErrorsDisplay($form.target, {});
|
|
8229
|
+
// #B726 — a submit waiting for a staged upload belongs to the binding being torn down:
|
|
8230
|
+
// drop it, so that upload's settle never replays a submit on an unbound form
|
|
8231
|
+
$form.stagedUploadWait = null;
|
|
8008
8232
|
$form.binded = false;
|
|
8009
8233
|
|
|
8010
8234
|
return $form;
|
|
@@ -8651,12 +8875,23 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
8651
8875
|
var url = $el.getAttribute('data-gina-form-upload-action');
|
|
8652
8876
|
var name = $el.getAttribute('name');
|
|
8653
8877
|
var fileId = name;
|
|
8654
|
-
|
|
8878
|
+
// #B732 — the virtual form id must be unique per form. A bracketed name
|
|
8879
|
+
// already carries the form id (once per `]`), but a bracket-less one
|
|
8880
|
+
// (`doc`) gave `gina-upload-doc` in EVERY form, so two forms with
|
|
8881
|
+
// same-named staged inputs shared one virtual form: the second form's
|
|
8882
|
+
// upload filled the first form's hidden fields and left its own empty.
|
|
8883
|
+
// was: var uploadFormId = 'gina-upload-' + name.replace(/\[/g, '-').replace(/\]/g, '-' + $form.id);
|
|
8884
|
+
var uploadFormId = 'gina-upload-' + name.replace(/\[/g, '-').replace(/\]/g, '-' + $form.id) + ( (/\]/.test(name)) ? '' : '-' + $form.id );
|
|
8655
8885
|
$el.setAttribute('data-gina-form-virtual', uploadFormId);
|
|
8656
8886
|
var eventOnSuccess = $el.getAttribute('data-gina-form-upload-on-success');
|
|
8657
8887
|
var eventOnError = $el.getAttribute('data-gina-form-upload-on-error');
|
|
8658
8888
|
var eventOnProgress = $el.getAttribute('data-gina-form-upload-on-progress'); // #R8
|
|
8659
|
-
|
|
8889
|
+
// #B731 — the error slot is an attribute of THIS file input (default
|
|
8890
|
+
// `<id>-error`), read once. It was recomputed for every <input> of the real
|
|
8891
|
+
// form and kept the last one's, so a custom slot was honoured only when the
|
|
8892
|
+
// file input was the form's last input.
|
|
8893
|
+
// was: var errorField = null;
|
|
8894
|
+
var errorField = $el.getAttribute('data-gina-form-upload-error') || ( ($el.id) ? $el.id + '-error' : null );
|
|
8660
8895
|
// #B572 — which popin, if any, this upload belongs to is decided by
|
|
8661
8896
|
// CONTAINMENT (the popin the real form is inside), captured ONCE per
|
|
8662
8897
|
// selection and read by every site below — never by "some popin is open"
|
|
@@ -8689,10 +8924,31 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
8689
8924
|
}
|
|
8690
8925
|
|
|
8691
8926
|
if ( !$uploadForm ) {
|
|
8692
|
-
|
|
8693
|
-
|
|
8694
|
-
|
|
8695
|
-
|
|
8927
|
+
// #B733 — `getFormById()` returns the validator RECORD, not the form
|
|
8928
|
+
// element, and every line below treats `$uploadForm` as the element
|
|
8929
|
+
// (`setAttribute`, `appendChild`). A record is still registered here
|
|
8930
|
+
// when an earlier selection's virtual form has left the document: a
|
|
8931
|
+
// popin close wipes the content but nothing destroys that record, so
|
|
8932
|
+
// after a reopen the next selection threw and sent nothing. A record's
|
|
8933
|
+
// element is reused only while it is in the document; a detached one
|
|
8934
|
+
// is destroyed (its own `destroy()` removes its listeners and their
|
|
8935
|
+
// registry entries, so the new form binds afresh) and a new form is built.
|
|
8936
|
+
// was:
|
|
8937
|
+
// try {
|
|
8938
|
+
// $uploadForm = getFormById(uploadFormId) || null;
|
|
8939
|
+
// } catch (noExistingFormErr) {
|
|
8940
|
+
// // do nothing
|
|
8941
|
+
// }
|
|
8942
|
+
var $knownUpload = instance.$forms[uploadFormId] || null;
|
|
8943
|
+
if ( $knownUpload && $knownUpload.target && $knownUpload.target.isConnected ) {
|
|
8944
|
+
$uploadForm = $knownUpload.target;
|
|
8945
|
+
} else if ( $knownUpload ) {
|
|
8946
|
+
try {
|
|
8947
|
+
$knownUpload.destroy();
|
|
8948
|
+
} catch (staleUploadErr) {
|
|
8949
|
+
// a record that cannot unbind must still never be reused
|
|
8950
|
+
}
|
|
8951
|
+
delete instance.$forms[uploadFormId];
|
|
8696
8952
|
}
|
|
8697
8953
|
|
|
8698
8954
|
if (!$uploadForm) {
|
|
@@ -8783,7 +9039,8 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
8783
9039
|
fieldType = formInputsFields[h].getAttribute('type');
|
|
8784
9040
|
hiddenField = null;
|
|
8785
9041
|
_name = null, _userName = null;
|
|
8786
|
-
|
|
9042
|
+
// #B731 — read once from the file input, above
|
|
9043
|
+
// was: errorField= formInputsFields[h].getAttribute('data-gina-form-upload-error') || fieldId + '-error' || null;
|
|
8787
9044
|
|
|
8788
9045
|
if (fieldType && /hidden/i.test(fieldType) ) {
|
|
8789
9046
|
hiddenField = formInputsFields[h];
|
|
@@ -8906,6 +9163,14 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
8906
9163
|
if (eventOnProgress) {
|
|
8907
9164
|
$uploadForm.setAttribute('data-gina-form-event-on-upload-progress', eventOnProgress);
|
|
8908
9165
|
}
|
|
9166
|
+
// #B729 — a file chosen while this input's previous staging request is
|
|
9167
|
+
// still on the wire supersedes that request: the input now shows the new
|
|
9168
|
+
// file, so only the new file's metadata may reach the form. Without this
|
|
9169
|
+
// the one-request-at-a-time gate in send() returned silently, the new
|
|
9170
|
+
// selection was never sent, and the earlier request filled the form with
|
|
9171
|
+
// the file the user had just replaced. A superseded request settles
|
|
9172
|
+
// through `abort.<id>` only: no error, no on-error callback.
|
|
9173
|
+
$uploadForm.setAttribute('data-gina-form-sync', 'replace');
|
|
8909
9174
|
|
|
8910
9175
|
|
|
8911
9176
|
// adding for to current document
|
|
@@ -10243,6 +10508,13 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
10243
10508
|
// return;
|
|
10244
10509
|
// }
|
|
10245
10510
|
|
|
10511
|
+
// #B726 (gh#83 part 3) — a staged upload of this form still on the wire would post
|
|
10512
|
+
// its hidden fields empty: wait for it, then re-run this click, which collects them
|
|
10513
|
+
// again once filled. Placed before the latch below, so there is nothing to release.
|
|
10514
|
+
if ( holdSubmitForStagedUploads($target, function replayStagedUploadClick() { triggerEvent(gina, $submit, evt); }) ) {
|
|
10515
|
+
return;
|
|
10516
|
+
}
|
|
10517
|
+
|
|
10246
10518
|
var validatorInfos = getFormValidationInfos($target, rules);
|
|
10247
10519
|
fields = validatorInfos.fields;
|
|
10248
10520
|
$fields = validatorInfos.$fields;
|
|
@@ -10499,6 +10771,14 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
10499
10771
|
cancelEvent(e);
|
|
10500
10772
|
}
|
|
10501
10773
|
|
|
10774
|
+
// #B726 (gh#83 part 3) — the same wait as the click door: a click inside the button,
|
|
10775
|
+
// Enter in a form with no submit button, `<input type=submit>`, requestSubmit() and
|
|
10776
|
+
// `$forms[id].submit()` all arrive here. Only once the native submit is cancelled above:
|
|
10777
|
+
// an earlier return would let the browser post the form itself.
|
|
10778
|
+
if ( (withRules || isBinded) && holdSubmitForStagedUploads($target, function replayStagedUploadSubmit() { triggerEvent(gina, $target, 'submit'); }) ) {
|
|
10779
|
+
return false;
|
|
10780
|
+
}
|
|
10781
|
+
|
|
10502
10782
|
|
|
10503
10783
|
// just collect data over forms
|
|
10504
10784
|
// getting fields & values
|
|
@@ -10560,6 +10840,10 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
10560
10840
|
fields[name] = '';
|
|
10561
10841
|
}
|
|
10562
10842
|
|
|
10843
|
+
} else if ( $target[i].type == 'file' && $target[i].getAttribute('data-gina-form-upload-action') ) {
|
|
10844
|
+
// #B725 (gh#83 part 2) — a staged file input's `.value` is the browser
|
|
10845
|
+
// placeholder `C:\fakepath\<name>`; its real data travels through the
|
|
10846
|
+
// staged hidden fields, so keep it out of the XHR payload.
|
|
10563
10847
|
} else {
|
|
10564
10848
|
fields[name] = $target[i].value;
|
|
10565
10849
|
}
|
|
@@ -11421,6 +11705,11 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
11421
11705
|
fields[name] = '';
|
|
11422
11706
|
}
|
|
11423
11707
|
|
|
11708
|
+
} else if ( $form[i].type == 'file' && $form[i].getAttribute('data-gina-form-upload-action') ) {
|
|
11709
|
+
// #B725 (gh#83 part 2) — a staged file input's `.value` is the browser
|
|
11710
|
+
// placeholder `C:\fakepath\<name>`; its real data travels through the staged
|
|
11711
|
+
// hidden fields, so keep it out of the XHR payload. The element is still
|
|
11712
|
+
// registered in `$fields` below for any rule that inspects it.
|
|
11424
11713
|
} else {
|
|
11425
11714
|
fields[name] = $form[i].value;
|
|
11426
11715
|
}
|
|
@@ -400,6 +400,61 @@ function ServerEngineClass(options) {
|
|
|
400
400
|
return fs.readFileSync(filename).toString()
|
|
401
401
|
}
|
|
402
402
|
|
|
403
|
+
/**
|
|
404
|
+
* Appends field names to a response's `Vary` header (RFC 9110 § 12.5.5).
|
|
405
|
+
* `Vary` is a list, so a value already set (by a middleware, by the
|
|
406
|
+
* configured `server.response.header`, or by the caller) is kept: a name
|
|
407
|
+
* already listed, in any case, is not added again, and nothing is added
|
|
408
|
+
* after a `*`, which already varies on everything. Takes one name, a
|
|
409
|
+
* comma-separated list, or an array of either, so a value read back with
|
|
410
|
+
* `getHeader('vary')` can be passed straight in to restore it. Does nothing
|
|
411
|
+
* once the headers are sent. Keep in sync with the twin in core/server.js
|
|
412
|
+
* (#B743).
|
|
413
|
+
*
|
|
414
|
+
* @inner
|
|
415
|
+
* @private
|
|
416
|
+
* @param {object} response - Server response object (HTTP/1.x, or the HTTP/2 compatibility API)
|
|
417
|
+
* @param {string|string[]|null|undefined} names - Field name(s) to add; an empty value adds nothing
|
|
418
|
+
* @returns {void}
|
|
419
|
+
*
|
|
420
|
+
* @example
|
|
421
|
+
* // Vary: Origin → Vary: Origin, Accept-Encoding
|
|
422
|
+
* appendVary(response, 'Accept-Encoding');
|
|
423
|
+
*/
|
|
424
|
+
var appendVary = function(response, names) {
|
|
425
|
+
if (
|
|
426
|
+
!response
|
|
427
|
+
|| typeof(response.getHeader) != 'function'
|
|
428
|
+
|| typeof(response.setHeader) != 'function'
|
|
429
|
+
|| response.headersSent
|
|
430
|
+
) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
var list = ( Array.isArray(names) ) ? names.join(',') : names;
|
|
434
|
+
if ( typeof(list) == 'undefined' || list === null || String(list).trim() === '' ) {
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
var current = response.getHeader('vary');
|
|
438
|
+
if ( Array.isArray(current) ) {
|
|
439
|
+
current = current.join(', ');
|
|
440
|
+
}
|
|
441
|
+
current = ( typeof(current) == 'undefined' || current === null ) ? '' : String(current).trim();
|
|
442
|
+
var present = ( current === '' ) ? [] : current.toLowerCase().split(',').map(function(n) { return n.trim(); });
|
|
443
|
+
var added = [];
|
|
444
|
+
String(list).split(',').forEach(function(n) {
|
|
445
|
+
n = n.trim();
|
|
446
|
+
if ( n === '' || present.indexOf('*') > -1 || present.indexOf(n.toLowerCase()) > -1 ) {
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
present.push(n.toLowerCase());
|
|
450
|
+
added.push(n);
|
|
451
|
+
});
|
|
452
|
+
if ( added.length == 0 ) {
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
response.setHeader('vary', ( current === '' ) ? added.join(', ') : current +', '+ added.join(', '));
|
|
456
|
+
}
|
|
457
|
+
|
|
403
458
|
var preferedEncoding = options.preferedCompressionEncodingOrder
|
|
404
459
|
, acceptEncodingArr = null
|
|
405
460
|
, acceptEncoding = null
|
|
@@ -2493,20 +2548,19 @@ function ServerEngineClass(options) {
|
|
|
2493
2548
|
}
|
|
2494
2549
|
|
|
2495
2550
|
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2551
|
+
// #P48 — the path alone: a versioned fetch carries `?v=<token>` (request.url
|
|
2552
|
+
// is query-stripped only further down). #B707 — the lookup is lower-cased to
|
|
2553
|
+
// agree with the case-insensitive test (`findOne` compares strictly, so a
|
|
2554
|
+
// `Routing.json` GET found nothing and dereferenced null below — an
|
|
2555
|
+
// uncaughtException that killed the bundle), and a miss falls through to the
|
|
2556
|
+
// shared pipeline, whose handler answers from memory or 404s.
|
|
2557
|
+
var _routingPath = ( request.method.toUpperCase() === 'GET' ) ? request.url.split('?')[0] : null;
|
|
2558
|
+
localAsset = ( _routingPath && /\_gina\/assets\/routing\.json$/i.test(_routingPath) )
|
|
2559
|
+
? assetsCollection.findOne({ file: _routingPath.split(/\//g).slice(-1).toString().toLowerCase() })
|
|
2560
|
+
: null;
|
|
2561
|
+
if ( localAsset ) {
|
|
2499
2562
|
// server.toApi(reques, response)
|
|
2500
2563
|
// console.debug('[ SERVER ][200] '+ request.url);
|
|
2501
|
-
// #B717 — a query string no longer misses the handler (`(?:\?|$)`), and the asset
|
|
2502
|
-
// lookup reads the file name the test matched: the url's last segment of
|
|
2503
|
-
// `routing.json?x` named no asset, and the `localAsset.mime` read below would
|
|
2504
|
-
// have thrown. Not the query-free path's last segment either — the test also
|
|
2505
|
-
// matches `/x?y=/_gina/assets/routing.json`, whose path names `x`.
|
|
2506
|
-
// #B707 — the name is lower-cased: the test is case-insensitive while `findOne`
|
|
2507
|
-
// compares strictly, so `Routing.json` named no asset and the `localAsset.mime`
|
|
2508
|
-
// read below threw — an uncaughtException that ended the process.
|
|
2509
|
-
localAsset = assetsCollection.findOne({ file: /\_gina\/assets\/(routing\.json)(?:\?|$)/i.exec(request.url)[1].toLowerCase() });
|
|
2510
2564
|
// #B66 — on a proxied deployment serve the host-stripped routing.json so
|
|
2511
2565
|
// the browser never receives any bundle's INTERNAL scheme://host:port (an
|
|
2512
2566
|
// information disclosure) and cross-bundle client toUrl resolves
|
|
@@ -2528,6 +2582,14 @@ function ServerEngineClass(options) {
|
|
|
2528
2582
|
: ( options.clientRoutingAssets ? options.clientRoutingAssets.fullEtag : null );
|
|
2529
2583
|
response.setHeader('content-type', localAsset.mime);
|
|
2530
2584
|
response.setHeader('vary', 'Origin');
|
|
2585
|
+
// #B743 — in production the table's precompressed copy (`.br`, `.gz`)
|
|
2586
|
+
// is served when the request accepts its coding (below), over both
|
|
2587
|
+
// protocols, so the answer varies on Accept-Encoding too. Set before the
|
|
2588
|
+
// ETag 304 below, so the 304 carries the Vary its 200 would (RFC 9110
|
|
2589
|
+
// § 15.4.5).
|
|
2590
|
+
if ( !isCacheless ) {
|
|
2591
|
+
appendVary(response, 'Accept-Encoding');
|
|
2592
|
+
}
|
|
2531
2593
|
// #B66 — a shared cache must not cross-serve the stripped (proxied) and
|
|
2532
2594
|
// full (raw) variants under the same URL; mark the proxied variant
|
|
2533
2595
|
// private. Slice 3 (SPA Tier 1): `no-cache` = revalidate-before-use — each
|
|
@@ -2535,6 +2597,19 @@ function ServerEngineClass(options) {
|
|
|
2535
2597
|
// new route table reaches returning browsers immediately instead of
|
|
2536
2598
|
// after the old 24h max-age window.
|
|
2537
2599
|
response.setHeader('cache-control', ( request._ginaIsProxyHost === true ) ? 'private, no-cache' : 'public, no-cache');
|
|
2600
|
+
// #P48 — a request naming the token of the variant actually served (the
|
|
2601
|
+
// page's `data-gina-routing-v`) may keep the table for a year; mirrors the
|
|
2602
|
+
// core/server.js handler (the /_gina/* sync rule). Keyed on the file served,
|
|
2603
|
+
// so the full map is never marked immutable under the stripped token.
|
|
2604
|
+
var _routingAssetVersion = ( options.clientRoutingAssets )
|
|
2605
|
+
? ( ( localAsset.file === 'routing.stripped.json' ) ? options.clientRoutingAssets.strippedVersion : options.clientRoutingAssets.fullVersion )
|
|
2606
|
+
: null;
|
|
2607
|
+
if (
|
|
2608
|
+
_routingAssetVersion
|
|
2609
|
+
&& lib.sri.getRequestedVersion(request.originalUrl || request.url) === _routingAssetVersion
|
|
2610
|
+
) {
|
|
2611
|
+
response.setHeader('cache-control', ( ( request._ginaIsProxyHost === true ) ? 'private' : 'public' ) + ', max-age=31536000, immutable');
|
|
2612
|
+
}
|
|
2538
2613
|
response.setHeader('x-content-type-options', 'nosniff');
|
|
2539
2614
|
response.setHeader('x-frame-options', 'DENY');
|
|
2540
2615
|
response.setHeader('x-xss-protection', '1; mode=block');
|
|
@@ -2553,10 +2628,14 @@ function ServerEngineClass(options) {
|
|
|
2553
2628
|
}
|
|
2554
2629
|
|
|
2555
2630
|
var filename = _(localAsset.path +'/'+ localAsset.file, true);
|
|
2631
|
+
// #B742 — the coding's NAME (`gzip`), kept beside its file extension
|
|
2632
|
+
// (`acceptEncoding`, `.gz`): Content-Encoding takes the name.
|
|
2633
|
+
var acceptEncodingName = null;
|
|
2556
2634
|
if (acceptEncodingArr) {
|
|
2557
2635
|
for (let e=0, eLen=preferedEncoding.length; e<eLen; e++) {
|
|
2558
2636
|
if ( acceptEncodingArr && acceptEncodingArr.indexOf(preferedEncoding[e]) > -1 ) {
|
|
2559
2637
|
acceptEncoding = options.coreConfiguration.encoding[ preferedEncoding[e] ] ;
|
|
2638
|
+
acceptEncodingName = preferedEncoding[e];
|
|
2560
2639
|
break;
|
|
2561
2640
|
}
|
|
2562
2641
|
}
|
|
@@ -2570,7 +2649,10 @@ function ServerEngineClass(options) {
|
|
|
2570
2649
|
isBinary = true;
|
|
2571
2650
|
filename += acceptEncoding;
|
|
2572
2651
|
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Encoding
|
|
2573
|
-
response.setHeader('content-encoding', acceptEncoding.replace(/^\./, ''));
|
|
2652
|
+
// was: response.setHeader('content-encoding', acceptEncoding.replace(/^\./, ''));
|
|
2653
|
+
// #B742 — the extension without its dot is not a coding name for gzip
|
|
2654
|
+
// (`gz`), and a browser does not decode such a response.
|
|
2655
|
+
response.setHeader('content-encoding', acceptEncodingName);
|
|
2574
2656
|
// override content length
|
|
2575
2657
|
response.setHeader('content-length', fs.statSync(filename).size);
|
|
2576
2658
|
}
|