gina 0.6.6 → 0.6.7
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 +26 -0
- package/README.md +26 -23
- package/ROADMAP.md +2 -0
- package/bin/cli +1 -0
- package/framework/v0.6.7/VERSION +1 -0
- package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css +1 -0
- package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +27 -0
- package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +93 -8
- package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.js +443 -28
- package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js +647 -0
- package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.6.6 → v0.6.7}/core/config.js +22 -0
- package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/index.js +16 -4
- package/framework/{v0.6.6 → v0.6.7}/core/connectors/duckdb/index.js +5 -2
- package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/index.js +8 -3
- package/framework/{v0.6.6 → v0.6.7}/core/connectors/mysql/index.js +5 -2
- package/framework/v0.6.7/core/connectors/param-redact.js +177 -0
- package/framework/{v0.6.6 → v0.6.7}/core/connectors/postgresql/index.js +5 -2
- package/framework/{v0.6.6 → v0.6.7}/core/connectors/scylladb/index.js +5 -2
- package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/index.js +5 -2
- package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.js +190 -23
- package/framework/{v0.6.6 → v0.6.7}/core/gna.js +186 -0
- package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/src/form-validator.js +91 -7
- package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/src/main.js +352 -21
- package/framework/{v0.6.6 → v0.6.7}/core/server.js +190 -1
- package/framework/{v0.6.6 → v0.6.7}/core/template/conf/settings.json +7 -8
- package/framework/v0.6.7/lib/cmd/storage/arguments.json +6 -0
- package/framework/v0.6.7/lib/cmd/storage/gc.js +418 -0
- package/framework/v0.6.7/lib/cmd/storage/help.txt +63 -0
- package/framework/v0.6.7/lib/cmd/storage/stats.js +396 -0
- package/framework/v0.6.7/lib/cmd/storage/verify.js +413 -0
- package/framework/{v0.6.6 → v0.6.7}/lib/index.js +14 -0
- package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/main.js +13 -6
- package/framework/v0.6.7/lib/storage/package.json +7 -0
- package/framework/v0.6.7/lib/storage/src/local-cas.js +1186 -0
- package/framework/v0.6.7/lib/storage/src/local.js +599 -0
- package/framework/v0.6.7/lib/storage/src/main.js +890 -0
- package/framework/v0.6.7/lib/storage/src/meta-store.js +506 -0
- package/framework/v0.6.7/lib/storage/src/util.js +336 -0
- package/framework/v0.6.7/lib/storage-store.js +110 -0
- package/framework/{v0.6.6 → v0.6.7}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +10 -9
- package/package.json +3 -3
- package/schema/settings.json +142 -2
- package/types/index.d.ts +7 -0
- package/framework/v0.6.6/VERSION +0 -1
- package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -1
- package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -643
- package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/AUTHORS +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/LICENSE +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/content.encoding +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/dev/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/locales/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/locales/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/mime.types +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/model/entity.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/model/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/router.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/server.express.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/server.isaac.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/status.codes +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/console.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/context.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/path.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/task.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/helpers/text.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/async/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cache/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/config.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/job/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/job-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/math/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/model.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/proc.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/session-store.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/shell.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/state.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/url/README.md +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/url/index.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/validator.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.6 → v0.6.7}/lib/ws-session/src/main.js +0 -0
|
@@ -3302,7 +3302,22 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
3302
3302
|
// - previous error detected
|
|
3303
3303
|
if ( !self.isValid() ) {
|
|
3304
3304
|
console.debug('stopping on errors ...');
|
|
3305
|
-
|
|
3305
|
+
// #B338 — release ASYNCHRONOUSLY. A synchronous trigger fires the
|
|
3306
|
+
// completion waiter MID-FIELD-LOOP (inside this very field's rule
|
|
3307
|
+
// application), so the pass composed its payload before LATER
|
|
3308
|
+
// fields were adjudicated — a field declared after the query field
|
|
3309
|
+
// vanished from the submit verdict, its rendered error was then
|
|
3310
|
+
// CLEARED by the render pass, and the outcome depended on field
|
|
3311
|
+
// ORDER. A microtask runs once the call stack empties — after the
|
|
3312
|
+
// whole field loop and its terminal block — which is exactly the
|
|
3313
|
+
// shape a real XHR settle already has: one completion timing for
|
|
3314
|
+
// every release path. (`_skipTarget`/`_skipField` are snapshotted:
|
|
3315
|
+
// `this` is not the field object inside the deferred call.)
|
|
3316
|
+
// was: triggerEvent(gina, this.target, 'asyncCompleted.' + id, self[this['name']]);
|
|
3317
|
+
var _skipTarget = this.target, _skipFieldName = this['name'];
|
|
3318
|
+
queueMicrotask(function deferredKnownInvalidRelease() {
|
|
3319
|
+
triggerEvent(gina, _skipTarget, 'asyncCompleted.' + id, self[_skipFieldName]);
|
|
3320
|
+
});
|
|
3306
3321
|
//return self[this.name];
|
|
3307
3322
|
return;
|
|
3308
3323
|
}
|
|
@@ -3337,6 +3352,20 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
3337
3352
|
|
|
3338
3353
|
}
|
|
3339
3354
|
} else if (testedValue === this.value) {
|
|
3355
|
+
// #B332 — while an XHR for this very (field, value) is still IN FLIGHT the
|
|
3356
|
+
// cache below has no verdict yet, and the immediate release at the end of
|
|
3357
|
+
// this branch woke every armed waiter with a verdict-less field object —
|
|
3358
|
+
// the submit pass then completed on its sync-only rules and sent while the
|
|
3359
|
+
// authoritative answer was still on the wire. Do nothing here: the pending
|
|
3360
|
+
// request's settle (processQueryResult / releaseQueryWaiter — both clear
|
|
3361
|
+
// the marker first) triggers `asyncCompleted.<id>` and wakes every waiter
|
|
3362
|
+
// with the real verdict. Marker is set right before xhr.send() below.
|
|
3363
|
+
if (
|
|
3364
|
+
this.target && this.target.dataset
|
|
3365
|
+
&& this.target.dataset.ginaFormValidatorQueryPending === this.value
|
|
3366
|
+
) {
|
|
3367
|
+
return self[this.name];
|
|
3368
|
+
}
|
|
3340
3369
|
// not resending to backend, but in case of cached errors, re display same error message
|
|
3341
3370
|
var hasCachedErrors = false;
|
|
3342
3371
|
if (
|
|
@@ -3357,7 +3386,18 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
3357
3386
|
}
|
|
3358
3387
|
// Do not remove this test
|
|
3359
3388
|
if ( typeof( gina.events[_evt]) != 'undefined' ) {
|
|
3360
|
-
|
|
3389
|
+
// #B338 — same deferral as the known-invalid release above: a
|
|
3390
|
+
// cached-verdict re-check fires synchronously mid-field-loop,
|
|
3391
|
+
// and the waiter it wakes must not compose the pass verdict
|
|
3392
|
+
// before the remaining fields are adjudicated (measured: the
|
|
3393
|
+
// second click on an unchanged registered value delivered a
|
|
3394
|
+
// payload missing every field declared after the query field,
|
|
3395
|
+
// clearing their rendered errors).
|
|
3396
|
+
// was: triggerEvent(gina, this.target, _evt, self[this['name']]);
|
|
3397
|
+
var _cacheTarget = this.target, _cacheFieldName = this['name'];
|
|
3398
|
+
queueMicrotask(function deferredCachedVerdictRelease() {
|
|
3399
|
+
triggerEvent(gina, _cacheTarget, _evt, self[_cacheFieldName]);
|
|
3400
|
+
});
|
|
3361
3401
|
}
|
|
3362
3402
|
|
|
3363
3403
|
return self[this.name];
|
|
@@ -3492,6 +3532,17 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
3492
3532
|
|
|
3493
3533
|
var processQueryResult = function(result) {
|
|
3494
3534
|
|
|
3535
|
+
// #B332 — this request has settled: release the in-flight marker BEFORE any
|
|
3536
|
+
// processing (a throw below routes to releaseQueryWaiter, which also clears).
|
|
3537
|
+
// Value-guarded so a newer request's marker — a keystroke re-fired the query
|
|
3538
|
+
// while this one was on the wire — is never cleared by a stale settle.
|
|
3539
|
+
if (
|
|
3540
|
+
_this.target && _this.target.dataset
|
|
3541
|
+
&& _this.target.dataset.ginaFormValidatorQueryPending === String(_this.value)
|
|
3542
|
+
) {
|
|
3543
|
+
delete _this.target.dataset.ginaFormValidatorQueryPending;
|
|
3544
|
+
}
|
|
3545
|
+
|
|
3495
3546
|
// #B87: a boolean checkbox routed through a `query` rule carries a real
|
|
3496
3547
|
// boolean — `.toLowerCase()` only applies to string values
|
|
3497
3548
|
_this.value = local['data'][_this.name] = (_this.value && typeof(_this.value) == 'string') ? _this.value.toLowerCase() : _this.value;
|
|
@@ -3622,6 +3673,17 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
3622
3673
|
*/
|
|
3623
3674
|
var releaseQueryWaiter = function(err) {
|
|
3624
3675
|
console.warn('[ FormValidator ] `query` result handling failed for field `'+ (_this && _this.name) +'`: '+ ( err && err.message || err ));
|
|
3676
|
+
// #B332 — the failed settle still ends this request: clear the in-flight
|
|
3677
|
+
// marker (value-guarded, same as processQueryResult) or the same-value
|
|
3678
|
+
// fast path would treat the field as pending forever.
|
|
3679
|
+
try {
|
|
3680
|
+
if (
|
|
3681
|
+
_this.target && _this.target.dataset
|
|
3682
|
+
&& _this.target.dataset.ginaFormValidatorQueryPending === String(_this.value)
|
|
3683
|
+
) {
|
|
3684
|
+
delete _this.target.dataset.ginaFormValidatorQueryPending;
|
|
3685
|
+
}
|
|
3686
|
+
} catch (ignorePendingClear) {}
|
|
3625
3687
|
try {
|
|
3626
3688
|
var _releaseId = _this.target && (_this.target.id || _this.target.getAttribute('id'));
|
|
3627
3689
|
if (_releaseId) {
|
|
@@ -3761,6 +3823,13 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
3761
3823
|
}
|
|
3762
3824
|
}// xhr.onload = function () {
|
|
3763
3825
|
|
|
3826
|
+
// #B332 — mark the (field, value) as in flight BEFORE the wire call: the
|
|
3827
|
+
// same-value fast path above must not immediate-release a verdict-less
|
|
3828
|
+
// field while this request is pending. Cleared at both settle chokepoints
|
|
3829
|
+
// (processQueryResult / releaseQueryWaiter), value-guarded.
|
|
3830
|
+
if ( _this.target && _this.target.dataset ) {
|
|
3831
|
+
_this.target.dataset.ginaFormValidatorQueryPending = _this.value;
|
|
3832
|
+
}
|
|
3764
3833
|
if (data) {
|
|
3765
3834
|
xhr.send( queryData ); // stringyfied
|
|
3766
3835
|
} else {
|
|
@@ -4097,15 +4166,14 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
4097
4166
|
}
|
|
4098
4167
|
|
|
4099
4168
|
try {
|
|
4100
|
-
// security checks
|
|
4101
|
-
compiledCondition = compiledCondition.replace(/(\(|\)|return)/g, '');
|
|
4102
4169
|
// #SCS1e (2026-04-24) — replaced the two `eval(...)` calls below with
|
|
4103
|
-
// auditable equivalents. After `$var` substitution (lines 910-920)
|
|
4104
|
-
//
|
|
4170
|
+
// auditable equivalents. After `$var` substitution (lines 910-920),
|
|
4171
|
+
// `compiledCondition` is either:
|
|
4105
4172
|
// (a) a regex literal `/<body>/<flags>` (when `/^\//` matches), or
|
|
4106
4173
|
// (b) a binary comparison `<operand><op><operand>` where operand ∈
|
|
4107
4174
|
// {number, "string", true, false, null, undefined} and op ∈
|
|
4108
|
-
// {===, !==, ==, !=, <, >, <=, >=}
|
|
4175
|
+
// {===, !==, ==, !=, <, >, <=, >=} — paren/`return`-stripped
|
|
4176
|
+
// inside its branch, before the grammar match.
|
|
4109
4177
|
// Old eval executed arbitrary JS; any value reaching `$var` substitution
|
|
4110
4178
|
// that contained a quote (e.g. user input `bar"; process.exit();//`)
|
|
4111
4179
|
// could escape the `"..."` wrapper at line 916 and reach eval as
|
|
@@ -4116,6 +4184,18 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
4116
4184
|
// } else {
|
|
4117
4185
|
// isValid = eval(compiledCondition)
|
|
4118
4186
|
// }
|
|
4187
|
+
// #B345 — the paren/`return` strip used to run HERE, before the branch
|
|
4188
|
+
// decision, so it also mangled every parenthesized regex literal:
|
|
4189
|
+
// groups were destroyed (`^(a|b)$` compiled as `^a|b$`, rebinding the
|
|
4190
|
+
// anchors and turning middle alternatives substring-permissive),
|
|
4191
|
+
// quantified groups were requantified (`(#TAG)?` became `#TA` plus an
|
|
4192
|
+
// optional `G`), and a literal `return` inside a pattern was deleted —
|
|
4193
|
+
// all silently, because the stripped text still compiled as a valid
|
|
4194
|
+
// regex. The strip protects the BINARY-COMPARISON shape only, so it
|
|
4195
|
+
// now lives inside that branch; the regex branch never evaluates the
|
|
4196
|
+
// condition as JS (`new RegExp(body, flags).test(value)` — no eval),
|
|
4197
|
+
// so parentheses there are legitimate syntax and a regex literal is
|
|
4198
|
+
// compiled exactly as authored.
|
|
4119
4199
|
if ( /^\//.test(compiledCondition) ) {
|
|
4120
4200
|
var _scsRegexMatch = compiledCondition.match(/^\/(.+)\/([a-z]*)$/);
|
|
4121
4201
|
if (!_scsRegexMatch) {
|
|
@@ -4123,6 +4203,10 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
4123
4203
|
}
|
|
4124
4204
|
isValid = new RegExp(_scsRegexMatch[1], _scsRegexMatch[2]).test(this.value);
|
|
4125
4205
|
} else {
|
|
4206
|
+
// security checks (#SCS1e) — strip parens/`return` before the
|
|
4207
|
+
// grammar-locked match; authored parens in a comparison stay
|
|
4208
|
+
// tolerated (`("a") === ("a")` strips to `"a" === "a"`).
|
|
4209
|
+
compiledCondition = compiledCondition.replace(/(\(|\)|return)/g, '');
|
|
4126
4210
|
var _SCS_BINARY_RE = /^\s*(null|undefined|true|false|"[^"]*"|-?\d+(?:\.\d+)?)\s*(===|!==|<=|>=|==|!=|<|>)\s*(null|undefined|true|false|"[^"]*"|-?\d+(?:\.\d+)?)\s*$/;
|
|
4127
4211
|
var _scsBinMatch = (typeof(compiledCondition) == 'string') ? compiledCondition.match(_SCS_BINARY_RE) : null;
|
|
4128
4212
|
if (!_scsBinMatch) {
|
|
@@ -17399,21 +17483,28 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
17399
17483
|
// filter also excludes in-tree descendants whose `form="..."` points at a different
|
|
17400
17484
|
// form (parent-form contamination guard).
|
|
17401
17485
|
var getOwnedElements = function($form, tag) {
|
|
17486
|
+
// #B333 — dedup by NODE IDENTITY, not by id. The old `seen` table was
|
|
17487
|
+
// id-keyed, so an ID-LESS control already collected from `$form.elements`
|
|
17488
|
+
// was pushed a second time by the in-tree sweep (`!$el.id` passed the old
|
|
17489
|
+
// condition unconditionally). For an id-less `<button type=submit>` —
|
|
17490
|
+
// gina auto-assigns its id only later, in the submit-binding loop — the
|
|
17491
|
+
// double entry meant `bindSubmitEl` ran twice and every click executed
|
|
17492
|
+
// TWO full validate()+send() cycles. `arr.indexOf($el)` is an identity
|
|
17493
|
+
// test, so the same node can never enter twice regardless of id state.
|
|
17402
17494
|
var arr = []
|
|
17403
|
-
, seen = {}
|
|
17404
17495
|
, tagUpper = tag.toUpperCase()
|
|
17405
17496
|
;
|
|
17406
17497
|
for (let i = 0, len = $form.elements.length; i < len; i++) {
|
|
17407
17498
|
let $el = $form.elements[i];
|
|
17408
17499
|
if ($el.tagName === tagUpper) {
|
|
17409
17500
|
arr.push($el);
|
|
17410
|
-
if ($el.id) seen[$el.id] = true;
|
|
17411
17501
|
}
|
|
17412
17502
|
}
|
|
17413
17503
|
var inTree = $form.getElementsByTagName(tag);
|
|
17414
17504
|
for (let i = 0, len = inTree.length; i < len; i++) {
|
|
17415
17505
|
let $el = inTree[i];
|
|
17416
|
-
if ($el.form === $form && (!$el.id || !seen[$el.id])) {
|
|
17506
|
+
// was: if ($el.form === $form && (!$el.id || !seen[$el.id])) {
|
|
17507
|
+
if ($el.form === $form && arr.indexOf($el) === -1) {
|
|
17417
17508
|
arr.push($el);
|
|
17418
17509
|
}
|
|
17419
17510
|
}
|
|
@@ -19035,7 +19126,18 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
19035
19126
|
// (which is what the operable-trigger design was bought for).
|
|
19036
19127
|
// Checked on the CLICKED element, not `$formInstance.submitTrigger`:
|
|
19037
19128
|
// a form may carry several submit buttons and only one registers.
|
|
19038
|
-
|
|
19129
|
+
//
|
|
19130
|
+
// #B346 carve-out — when the gate's ONLY reason is a `query` verdict
|
|
19131
|
+
// still on the wire (framework gated mark alone, no committed errors,
|
|
19132
|
+
// in-flight marker present), the reveal has NOTHING to reveal and the
|
|
19133
|
+
// refusal ate the click silently. Let that one state through: the
|
|
19134
|
+
// normal submit cycle latches, arms its waiter, and the pending
|
|
19135
|
+
// settle completes it (#B342) — valid ⇒ send, invalid ⇒ render +
|
|
19136
|
+
// release. Every other refusal shape is unchanged.
|
|
19137
|
+
if (
|
|
19138
|
+
/^submit\./i.test(_evt) && isTriggerDisabled($el)
|
|
19139
|
+
&& !isAwaitingQueryVerdictOnly($el, $target, instance.$forms[$form.id] || $form)
|
|
19140
|
+
) {
|
|
19039
19141
|
cancelEvent(event);
|
|
19040
19142
|
revealValidationState( instance.$forms[$form.id] || $form );
|
|
19041
19143
|
return false;
|
|
@@ -19290,6 +19392,21 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
19290
19392
|
// start validation
|
|
19291
19393
|
cancelEvent(event);
|
|
19292
19394
|
|
|
19395
|
+
// #B332 belt — one submit cycle at a time per form. `isSubmitting`
|
|
19396
|
+
// latches below (before validate()) and is released on the XHR settle
|
|
19397
|
+
// AND on the rejected-validation branch (#B192), so a truthy read here
|
|
19398
|
+
// means a full cycle is still between click and settle: refuse the
|
|
19399
|
+
// re-entry (a re-click while a query rule's XHR is in flight, or a
|
|
19400
|
+
// residual duplicate listener on an older bundle) instead of racing
|
|
19401
|
+
// two concurrent cycles against the same form state.
|
|
19402
|
+
var _latchFormId = $target.getAttribute('id');
|
|
19403
|
+
if (
|
|
19404
|
+
typeof(instance.$forms[_latchFormId]) != 'undefined'
|
|
19405
|
+
&& /^true$/i.test(instance.$forms[_latchFormId].isSubmitting)
|
|
19406
|
+
) {
|
|
19407
|
+
return;
|
|
19408
|
+
}
|
|
19409
|
+
|
|
19293
19410
|
// getting fields & values
|
|
19294
19411
|
var $fields = {}
|
|
19295
19412
|
, fields = { '_length': 0 }
|
|
@@ -19456,7 +19573,20 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
19456
19573
|
evt = $submit['id'];
|
|
19457
19574
|
}
|
|
19458
19575
|
|
|
19459
|
-
|
|
19576
|
+
// #B333 — the guard used to test `gina.events[evt]` where `evt` is the
|
|
19577
|
+
// BUTTON id (`click.<uuid>`), a key nothing ever writes: `bindSubmitEl`
|
|
19578
|
+
// registers under the NAMESPACED name (`submit.<id>`). The test was
|
|
19579
|
+
// therefore always true and every extra pass over the same button (the
|
|
19580
|
+
// id-less double-collection fixed in `getOwnedElements`, a re-bind path)
|
|
19581
|
+
// stacked one more live listener -> one more full validate()+send() cycle
|
|
19582
|
+
// per click. Test the key that actually gets registered, against the id
|
|
19583
|
+
// the registry stores. (A trigger REPLACED in the DOM keeps the registry
|
|
19584
|
+
// key but loses the expando marker — the #B294 click-time gate re-binds
|
|
19585
|
+
// that case; this guard only has to stop same-node re-binds.)
|
|
19586
|
+
// was:
|
|
19587
|
+
// if ( typeof(gina.events[evt]) == 'undefined' || gina.events[evt] != $submit.id ) {
|
|
19588
|
+
var _submitEvt = ( /^submit\./i.test(evt) ) ? evt : 'submit.'+ evt;
|
|
19589
|
+
if ( typeof(gina.events[_submitEvt]) == 'undefined' || gina.events[_submitEvt] != $submit.id ) {
|
|
19460
19590
|
bindSubmitEl(evt, $submit);
|
|
19461
19591
|
}
|
|
19462
19592
|
|
|
@@ -19501,7 +19631,15 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
19501
19631
|
// }
|
|
19502
19632
|
if ($formInstance && e.isTrusted) {
|
|
19503
19633
|
var $registeredTrigger = document.getElementById($formInstance.submitTrigger) || null;
|
|
19504
|
-
|
|
19634
|
+
// #B346 — same carve-out as the click proxy's gate: when the ONLY
|
|
19635
|
+
// refusal reason is a query verdict still on the wire, refusing
|
|
19636
|
+
// here ate Enter-key and wrapped-label submits silently (nothing
|
|
19637
|
+
// committed to reveal). Let the pass run and wait for the settle;
|
|
19638
|
+
// every other refusal shape is unchanged.
|
|
19639
|
+
if (
|
|
19640
|
+
isTriggerDisabled($registeredTrigger)
|
|
19641
|
+
&& !isAwaitingQueryVerdictOnly($registeredTrigger, $target, $formInstance)
|
|
19642
|
+
) {
|
|
19505
19643
|
cancelEvent(e);
|
|
19506
19644
|
revealValidationState($formInstance);
|
|
19507
19645
|
return false;
|
|
@@ -19522,12 +19660,19 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
19522
19660
|
// so the registered trigger is the best and only referent. Placed after the
|
|
19523
19661
|
// disabled + defaultPrevented guards above, which both return first.
|
|
19524
19662
|
// NB. the #B308 gesture gate above already cancelled any TRUSTED submit on
|
|
19525
|
-
// a marked trigger
|
|
19526
|
-
//
|
|
19527
|
-
//
|
|
19663
|
+
// a marked trigger (#B346 excepted: a pending-verdict-only refusal now
|
|
19664
|
+
// proceeds, and the arm below covers it via the same carve-out), so this
|
|
19665
|
+
// skip otherwise guards the UNTRUSTED path: a programmatic submit on a
|
|
19666
|
+
// marked form runs the fresh validate pass below and must not flash the
|
|
19667
|
+
// trigger armed for the length of that pass.
|
|
19528
19668
|
if ($formInstance) {
|
|
19529
19669
|
var $loadingTrigger = document.getElementById($formInstance.submitTrigger);
|
|
19530
|
-
|
|
19670
|
+
// #B346 — a pending-verdict bypass proceeds to a real cycle, so it
|
|
19671
|
+
// gets the loading state too (#B247 parity with the click proxy).
|
|
19672
|
+
if (
|
|
19673
|
+
!isTriggerDisabled($loadingTrigger)
|
|
19674
|
+
|| isAwaitingQueryVerdictOnly($loadingTrigger, $target, $formInstance)
|
|
19675
|
+
) {
|
|
19531
19676
|
armSubmitLoading($formInstance, $loadingTrigger);
|
|
19532
19677
|
}
|
|
19533
19678
|
}
|
|
@@ -19637,6 +19782,36 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
19637
19782
|
} else {
|
|
19638
19783
|
rule = getRuleObjByName(id.replace(/\-/g, '.'))
|
|
19639
19784
|
}
|
|
19785
|
+
// #B346 — this pass may proceed while an async query verdict is
|
|
19786
|
+
// still on the wire: the pending-aware gate above lets a trusted
|
|
19787
|
+
// gesture through, and a programmatic submit() never consulted
|
|
19788
|
+
// the gate at all. An un-latched async pass STARVES — with the
|
|
19789
|
+
// query field not declared last, its waiter's completion resolves
|
|
19790
|
+
// to the needsGlobalReValidation display-only work and never runs
|
|
19791
|
+
// this callback. Latch exactly as bindSubmitEl does, so the
|
|
19792
|
+
// latched completion dispatches (#B342) — and mirror the #B332
|
|
19793
|
+
// belt for the window this pass now enters: one cycle at a time.
|
|
19794
|
+
// The owned-field scan mirrors isAwaitingQueryVerdictOnly's
|
|
19795
|
+
// (kept inline THERE — its body literals are pinned); trigger
|
|
19796
|
+
// marks and recorded errors are deliberately not consulted here,
|
|
19797
|
+
// because they do not affect LATCH soundness: an invalid pass
|
|
19798
|
+
// completes through the errors branch and releases via the
|
|
19799
|
+
// rejected-validation release, a clean pass through the latched
|
|
19800
|
+
// dispatch and the send release.
|
|
19801
|
+
var _pendingSel = '[data-gina-form-validator-query-pending]';
|
|
19802
|
+
var _formDomId = $target.id || ( typeof($target.getAttribute) == 'function' ? $target.getAttribute('id') : null );
|
|
19803
|
+
var _safeFormDomId = ( _formDomId && typeof(CSS) != 'undefined' && typeof(CSS.escape) == 'function' ) ? CSS.escape(_formDomId) : _formDomId;
|
|
19804
|
+
var _awaitsQueryVerdict = (
|
|
19805
|
+
typeof($target.querySelector) == 'function' && $target.querySelector(_pendingSel)
|
|
19806
|
+
|| _safeFormDomId && document.querySelector('[form="'+ _safeFormDomId +'"]'+ _pendingSel)
|
|
19807
|
+
) ? true : false;
|
|
19808
|
+
if (_awaitsQueryVerdict) {
|
|
19809
|
+
if ( /^true$/i.test(instance.$forms[id].isSubmitting) ) {
|
|
19810
|
+
return false;
|
|
19811
|
+
}
|
|
19812
|
+
instance.$forms[id].isSubmitting = true;
|
|
19813
|
+
instance.$forms[id].isSending = false;
|
|
19814
|
+
}
|
|
19640
19815
|
instance.$forms[id].isValidating = true;
|
|
19641
19816
|
validate($target, fields, $fields, rule, function onSubmitValidation(result){
|
|
19642
19817
|
instance.$forms[id].isValidating = false;
|
|
@@ -19647,6 +19822,12 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
19647
19822
|
// } else {
|
|
19648
19823
|
// handleErrorsDisplay($target, result.error, result.data);
|
|
19649
19824
|
if ( typeof(gina.events['submit.' + id]) != 'undefined' ) { // if `on('submit', cb)` is binded
|
|
19825
|
+
// #B346 — a consumer's own `on('submit')` handler owns
|
|
19826
|
+
// the rest of the cycle and may never reach send():
|
|
19827
|
+
// the latch cannot ride this dispatch (a stopping
|
|
19828
|
+
// handler would strand it — the #B342 lockout shape).
|
|
19829
|
+
// False -> false when this pass never latched.
|
|
19830
|
+
instance.$forms[id].isSubmitting = false;
|
|
19650
19831
|
triggerEvent(gina, $target, 'submit.' + id, result);
|
|
19651
19832
|
} else {
|
|
19652
19833
|
triggerEvent(gina, $target, 'validate.' + id, result);
|
|
@@ -19710,8 +19891,10 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
19710
19891
|
* marks are removed the moment the form validates. The marker is the
|
|
19711
19892
|
* framework's OWN channel — the trigger carries no ARIA disabled claim,
|
|
19712
19893
|
* because it stays genuinely operable: a click on a gated trigger is
|
|
19713
|
-
* answered by the display-only reveal (#B246),
|
|
19714
|
-
*
|
|
19894
|
+
* answered by the display-only reveal (#B246) — or, when the only blocker
|
|
19895
|
+
* is a query verdict still on the wire, proceeds into a submit pass that
|
|
19896
|
+
* waits for the settle (#B346) — and `isValid()` remains the real send
|
|
19897
|
+
* gate.
|
|
19715
19898
|
*
|
|
19716
19899
|
* `aria-disabled` is deliberately neither written nor cleared here: an
|
|
19717
19900
|
* authored mark belongs to the author (the gates enforce it, and nothing
|
|
@@ -19845,6 +20028,122 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
19845
20028
|
);
|
|
19846
20029
|
};
|
|
19847
20030
|
|
|
20031
|
+
/**
|
|
20032
|
+
* isAwaitingQueryVerdictOnly
|
|
20033
|
+
*
|
|
20034
|
+
* Tells whether a refused submit trigger is refused ONLY because a `query`
|
|
20035
|
+
* verdict is still pending — the one state the #B246 gate misclassifies.
|
|
20036
|
+
*
|
|
20037
|
+
* #B346 — `updateSubmitTriggerState()` gates on a boolean (`isFormValid`)
|
|
20038
|
+
* over a state that is really tri-valued: valid, invalid with COMMITTED
|
|
20039
|
+
* errors, and VERDICT-PENDING (an async `query` XHR on the wire, so the
|
|
20040
|
+
* form has no verdict yet). The #B246 refuse-and-reveal answer is only
|
|
20041
|
+
* coherent for the middle state — with nothing committed there is nothing
|
|
20042
|
+
* to reveal, and the click died silently (measured: wake path fully
|
|
20043
|
+
* healthy, `isSubmitting` never latched, zero sends inside the round-trip
|
|
20044
|
+
* window; the window scales with query LATENCY, not typing speed). When
|
|
20045
|
+
* this returns true the proxy lets the click run the normal submit cycle:
|
|
20046
|
+
* the pass latches and arms its waiter, the engine's in-flight branch
|
|
20047
|
+
* declines to duplicate the XHR, the pending settle wakes the waiter, and
|
|
20048
|
+
* the latched completion dispatches (#B342) — the exact flow live-check-off
|
|
20049
|
+
* forms already run.
|
|
20050
|
+
*
|
|
20051
|
+
* Deliberately NARROW — every arm fails toward the shipped refusal:
|
|
20052
|
+
* - the framework's own gated mark must be the ONLY refusal reason; an
|
|
20053
|
+
* AUTHORED `aria-disabled="true"` or a (non-IDL) native `disabled`
|
|
20054
|
+
* keeps refusing (#B312 — an author's claim is enforced, not
|
|
20055
|
+
* second-guessed);
|
|
20056
|
+
* - any COMMITTED error keeps refusing — refuse-and-reveal stays coherent
|
|
20057
|
+
* when there is something to reveal. Committed means a SETTLED field's:
|
|
20058
|
+
* the pending field itself may carry a provisional `query` entry staged
|
|
20059
|
+
* by the same-value fast path while its verdict is on the wire, and a
|
|
20060
|
+
* provisional entry is not a verdict (measured — counting it refused
|
|
20061
|
+
* every window this helper exists to recognize);
|
|
20062
|
+
* - an owned field must actually carry the in-flight query marker
|
|
20063
|
+
* (`data-gina-form-validator-query-pending`, set by the engine right
|
|
20064
|
+
* before `xhr.send()` and cleared at both settle chokepoints), looked up
|
|
20065
|
+
* inside the form AND among form-reassociated controls (`form="<id>"`).
|
|
20066
|
+
*
|
|
20067
|
+
* @param {object} $el - the clicked submit trigger (DOMObject)
|
|
20068
|
+
* @param {object} $formDom - the owning form element (DOMObject)
|
|
20069
|
+
* @param {object} [$formRecord] - the validator record (`instance.$forms[id]`)
|
|
20070
|
+
*
|
|
20071
|
+
* @returns {boolean} true when the only thing standing between the click
|
|
20072
|
+
* and a verdict is a query still on the wire
|
|
20073
|
+
*
|
|
20074
|
+
* @example
|
|
20075
|
+
* // gated trigger, clean form, uniqueness query in flight -> the click waits for the verdict
|
|
20076
|
+
* isAwaitingQueryVerdictOnly($button, $form, instance.$forms[$form.id]); // true
|
|
20077
|
+
*
|
|
20078
|
+
* @example
|
|
20079
|
+
* // same window but a sibling field has a committed error -> shipped refuse-and-reveal stands
|
|
20080
|
+
* isAwaitingQueryVerdictOnly($button, $form, instance.$forms[$form.id]); // false
|
|
20081
|
+
*
|
|
20082
|
+
* @inner
|
|
20083
|
+
*/
|
|
20084
|
+
var isAwaitingQueryVerdictOnly = function($el, $formDom, $formRecord) {
|
|
20085
|
+
if ( !$el || typeof($el.getAttribute) != 'function' || !$formDom || typeof($formDom.querySelector) != 'function' ) {
|
|
20086
|
+
return false;
|
|
20087
|
+
}
|
|
20088
|
+
// the gated mark must be present, and be the ONLY firing arm
|
|
20089
|
+
if ( $el.getAttribute('data-gina-form-submit-gated') != 'true' ) {
|
|
20090
|
+
return false;
|
|
20091
|
+
}
|
|
20092
|
+
var nativeCounts = !('disabled' in $el);
|
|
20093
|
+
if (
|
|
20094
|
+
nativeCounts
|
|
20095
|
+
&& $el.getAttribute('disabled') != null && $el.getAttribute('disabled') != 'false'
|
|
20096
|
+
||
|
|
20097
|
+
$el.getAttribute('aria-disabled') == 'true'
|
|
20098
|
+
) {
|
|
20099
|
+
return false;
|
|
20100
|
+
}
|
|
20101
|
+
// a query verdict must actually be pending for an owned field — inside
|
|
20102
|
+
// the form, or a form-reassociated control (`form="<id>"`)
|
|
20103
|
+
var pendingSel = '[data-gina-form-validator-query-pending]';
|
|
20104
|
+
var _id = $formDom.id || ( typeof($formDom.getAttribute) == 'function' ? $formDom.getAttribute('id') : null );
|
|
20105
|
+
var _safeId = ( _id && typeof(CSS) != 'undefined' && typeof(CSS.escape) == 'function' ) ? CSS.escape(_id) : _id;
|
|
20106
|
+
var hasPending = (
|
|
20107
|
+
$formDom.querySelector(pendingSel)
|
|
20108
|
+
|| _safeId && document.querySelector('[form="'+ _safeId +'"]'+ pendingSel)
|
|
20109
|
+
) ? true : false;
|
|
20110
|
+
if (!hasPending) {
|
|
20111
|
+
return false;
|
|
20112
|
+
}
|
|
20113
|
+
// COMMITTED errors keep the shipped refuse-and-reveal — but committed
|
|
20114
|
+
// means a SETTLED field's verdict. Measured (#B346): while a query is
|
|
20115
|
+
// on the wire, the same-value fast path stages a provisional `query`
|
|
20116
|
+
// entry under the PENDING field's own key in `$formRecord.errors`, so
|
|
20117
|
+
// a bare `errors.count() > 0` reads the very state this helper exists
|
|
20118
|
+
// to recognize as "no verdict yet" and refuses every window. Count an
|
|
20119
|
+
// erroring field only when it is NOT itself awaiting the verdict.
|
|
20120
|
+
if ( $formRecord && typeof($formRecord.errors) != 'undefined' && $formRecord.errors ) {
|
|
20121
|
+
for (var _fieldName in $formRecord.errors) {
|
|
20122
|
+
if ( !$formRecord.errors.hasOwnProperty(_fieldName) ) {
|
|
20123
|
+
continue;
|
|
20124
|
+
}
|
|
20125
|
+
var _fieldErrors = $formRecord.errors[_fieldName];
|
|
20126
|
+
var _isErroring = ( _fieldErrors && typeof(_fieldErrors.count) == 'function' )
|
|
20127
|
+
? _fieldErrors.count() > 0
|
|
20128
|
+
: !!_fieldErrors;
|
|
20129
|
+
if (!_isErroring) {
|
|
20130
|
+
continue;
|
|
20131
|
+
}
|
|
20132
|
+
var _safeName = ( typeof(CSS) != 'undefined' && typeof(CSS.escape) == 'function' ) ? CSS.escape(_fieldName) : _fieldName;
|
|
20133
|
+
var _erroringIsPending = (
|
|
20134
|
+
$formDom.querySelector('[name="'+ _safeName +'"]'+ pendingSel)
|
|
20135
|
+
|| _safeId && document.querySelector('[form="'+ _safeId +'"][name="'+ _safeName +'"]'+ pendingSel)
|
|
20136
|
+
) ? true : false;
|
|
20137
|
+
if (!_erroringIsPending) {
|
|
20138
|
+
// a settled field carries a real verdict — there IS
|
|
20139
|
+
// something to reveal, the shipped refusal stands
|
|
20140
|
+
return false;
|
|
20141
|
+
}
|
|
20142
|
+
}
|
|
20143
|
+
}
|
|
20144
|
+
return true;
|
|
20145
|
+
};
|
|
20146
|
+
|
|
19848
20147
|
/**
|
|
19849
20148
|
* focusFirstInvalidField
|
|
19850
20149
|
*
|
|
@@ -20375,6 +20674,14 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
20375
20674
|
, $asyncFieldId = null
|
|
20376
20675
|
, asyncEvt = null
|
|
20377
20676
|
, asyncCount = 0
|
|
20677
|
+
// #B332 — fields THIS pass armed an `asyncCompleted.<id>` waiter for.
|
|
20678
|
+
// The arm guard used to consult the global `gina.events` registry, which
|
|
20679
|
+
// cannot tell "this pass already armed it" (legitimate skip — a rules
|
|
20680
|
+
// re-application within one pass) from "a CONCURRENT pass armed it"
|
|
20681
|
+
// (must NOT skip: zeroing `asyncCount` there made this pass complete on
|
|
20682
|
+
// a sync-only verdict and send() fired while the query XHR was in
|
|
20683
|
+
// flight). Pass-local by construction, so only the first case matches.
|
|
20684
|
+
, armedAsyncFields = {}
|
|
20378
20685
|
;
|
|
20379
20686
|
|
|
20380
20687
|
|
|
@@ -20525,15 +20832,42 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
20525
20832
|
asyncEvt = 'asyncCompleted.'+ $asyncFieldId;
|
|
20526
20833
|
|
|
20527
20834
|
var triggeredCount = 0, eventTriggered = false;
|
|
20528
|
-
|
|
20529
|
-
|
|
20530
|
-
|
|
20531
|
-
|
|
20835
|
+
// #B332 — the arm guard is PASS-LOCAL now (see `armedAsyncFields`
|
|
20836
|
+
// at the declaration block). The old registry test saw only that
|
|
20837
|
+
// SOME pass had armed the field: when that pass was a concurrent
|
|
20838
|
+
// one (a duplicate submit listener — #B333, a re-click while the
|
|
20839
|
+
// query XHR was in flight, a live-check cycle beside a submit),
|
|
20840
|
+
// this pass zeroed ITS OWN pending-async counter and returned —
|
|
20841
|
+
// so its terminal block completed on the sync-only verdict, the
|
|
20842
|
+
// `validate.<id>` valid branch ran, and `send()` fired ~200ms
|
|
20843
|
+
// BEFORE the query answered (the "email already registered" error
|
|
20844
|
+
// rendered after the POST had already left). A foreign waiter must
|
|
20845
|
+
// not starve this pass of its own wake-up: waiters stack per pass
|
|
20846
|
+
// (each self-detaches on first fire below) and the ENGINE dedups
|
|
20847
|
+
// the wire via `ginaFormValidatorQueryPending` — no duplicate XHR.
|
|
20848
|
+
// was:
|
|
20849
|
+
// if ( typeof(gina.events[asyncEvt]) != 'undefined' ) {
|
|
20850
|
+
// console.debug('event `'+ asyncEvt +'` already added');
|
|
20851
|
+
// asyncCount = 0;
|
|
20852
|
+
// return;
|
|
20853
|
+
// }
|
|
20854
|
+
if ( typeof(armedAsyncFields[$asyncFieldId]) != 'undefined' ) {
|
|
20855
|
+
console.debug('event `'+ asyncEvt +'` already armed by this pass');
|
|
20856
|
+
continue;
|
|
20532
20857
|
}
|
|
20858
|
+
armedAsyncFields[$asyncFieldId] = true;
|
|
20533
20859
|
++asyncCount;
|
|
20534
20860
|
//console.debug('Adding listner '+asyncEvt);
|
|
20535
20861
|
addListener(gina, $asyncField, asyncEvt, function onasyncCompleted(event) {
|
|
20536
20862
|
event.preventDefault();
|
|
20863
|
+
// #B332/#B334 — one settle per waiter. Waiters stack per pass
|
|
20864
|
+
// now, so each must consume exactly one wake-up and leave the
|
|
20865
|
+
// node: the registry-only `removeListener` in the completion
|
|
20866
|
+
// block below carries no fn ref (a DOM no-op — it only deletes
|
|
20867
|
+
// the `gina.events` key), and a stale un-latched waiter used to
|
|
20868
|
+
// re-enter on every later settle of the same field, replaying a
|
|
20869
|
+
// finished pass's completion against a live one.
|
|
20870
|
+
event.currentTarget.removeEventListener(event.type, onasyncCompleted, false);
|
|
20537
20871
|
|
|
20538
20872
|
triggeredCount++;
|
|
20539
20873
|
--asyncCount;
|
|
@@ -20571,7 +20905,23 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
20571
20905
|
removeListener(gina, event.target, _asyncEvt);
|
|
20572
20906
|
|
|
20573
20907
|
cb._data = d['toData']();
|
|
20574
|
-
|
|
20908
|
+
// #B337 — the completion payload must carry the WHOLE pass's
|
|
20909
|
+
// verdict, not the query field's slice. On a full-form submit
|
|
20910
|
+
// pass `d` holds every field, and scoping to `field` starved
|
|
20911
|
+
// the `validate.<id>` handler of every OTHER invalid field:
|
|
20912
|
+
// their errors were adjudicated (DOM attributes set) but never
|
|
20913
|
+
// rendered on the submit path, and the #A11Y1 first-invalid
|
|
20914
|
+
// focus loop could only ever land on the query field. It also
|
|
20915
|
+
// inverted the query-passes-but-another-field-invalid scene:
|
|
20916
|
+
// the scoped set read empty, the early-return branch was
|
|
20917
|
+
// skipped, and the validated dispatch went out with NO errors
|
|
20918
|
+
// at all. On a single-element live-check pass `d` holds one
|
|
20919
|
+
// field, so the no-arg call is byte-equivalent there — the
|
|
20920
|
+
// touched-field-only DISPLAY below keeps its `field` argument,
|
|
20921
|
+
// which is the live-check contract (§4c). The validated
|
|
20922
|
+
// listener's own fallback was already `d.getErrors()` no-arg.
|
|
20923
|
+
// was: cb._errors = d['getErrors'](field);
|
|
20924
|
+
cb._errors = d['getErrors']();
|
|
20575
20925
|
// console.debug('query callbakc triggered ', cb._errors, '\nisValidating: ', instance.$forms[formId].isValidating);
|
|
20576
20926
|
// update instance form errors
|
|
20577
20927
|
if ( cb._errors && cb._errors.count() > 0) {
|
|
@@ -20608,11 +20958,51 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
20608
20958
|
}
|
|
20609
20959
|
|
|
20610
20960
|
|
|
20611
|
-
|
|
20961
|
+
// #B334 — dispatch where THIS pass's listener actually
|
|
20962
|
+
// sits: $formOrElement (the form on a full-form pass —
|
|
20963
|
+
// identical to $currentForm there — but the ELEMENT on
|
|
20964
|
+
// a single-element pass, whose listener could never
|
|
20965
|
+
// hear a form-dispatched event: bubbling goes up, not
|
|
20966
|
+
// down; it still bubbles up THROUGH the form so
|
|
20967
|
+
// consumer `on('validated')` bindings keep hearing it).
|
|
20968
|
+
// was: triggerEvent(gina, $currentForm, 'validated.' + formId, cb);
|
|
20969
|
+
triggerEvent(gina, $formOrElement, 'validated.' + formId, cb);
|
|
20612
20970
|
return;
|
|
20613
20971
|
}
|
|
20614
20972
|
}
|
|
20615
20973
|
|
|
20974
|
+
// #B342 — a SUBMIT pass has exactly ONE legitimate completer: this
|
|
20975
|
+
// waiter (post-#B338 the terminal block runs while asyncCount is
|
|
20976
|
+
// still > 0, so it can never dispatch for an async pass). On a
|
|
20977
|
+
// CLEAN pass the errors>0 branch above is skipped, and both
|
|
20978
|
+
// branches below are conditional — last-field matches only when
|
|
20979
|
+
// the query field happens to be declared last in the rule set
|
|
20980
|
+
// (minus `exclude:true` splices), and the live-check branch needs
|
|
20981
|
+
// `isValidating`, which a submit pass does not set. A clean submit
|
|
20982
|
+
// whose query field was NOT last exited this block having
|
|
20983
|
+
// dispatched NOTHING: `cb` starved, `validate.<id>` never fired,
|
|
20984
|
+
// no send ever left, and the #B332 `isSubmitting` latch stranded —
|
|
20985
|
+
// gating every later click until reload (measured live on a
|
|
20986
|
+
// consumer login form: value present, every field clean, click
|
|
20987
|
+
// swallowed). Pre-arc this hole was MASKED by the very bugs
|
|
20988
|
+
// #B332/#B333 removed: the duplicate pass's premature sync-only
|
|
20989
|
+
// completion was the accidental completer. A latched form means
|
|
20990
|
+
// this completion belongs to the submit cycle (live-check passes
|
|
20991
|
+
// hard-return while the latch is held), so dispatch it — display
|
|
20992
|
+
// work belongs to the `validate.<id>` handler's send/reject
|
|
20993
|
+
// branches, same as the errors>0 dispatch above.
|
|
20994
|
+
// #B346 note: waiters ARMED before the latch — live-check
|
|
20995
|
+
// passes mid-window, the reveal's own pass — also wake through
|
|
20996
|
+
// this branch once a pending-window gesture latches; each such
|
|
20997
|
+
// dispatch carries THAT waiter's own pass cb, and the #B334
|
|
20998
|
+
// own-pass listener filtering keeps every completion with its
|
|
20999
|
+
// own pass. NEW live-check passes still hard-return on the
|
|
21000
|
+
// latch.
|
|
21001
|
+
if ( /^true$/i.test(instance.$forms[formId].isSubmitting) ) {
|
|
21002
|
+
triggerEvent(gina, $formOrElement, 'validated.' + formId, cb);
|
|
21003
|
+
return;
|
|
21004
|
+
}
|
|
21005
|
+
|
|
20616
21006
|
// is this the last or the only field to be validated ?
|
|
20617
21007
|
var needsGlobalReValidation = false;
|
|
20618
21008
|
if ( listedFields.length == 1 || listedFields[listedFields.length-1] == field) {
|
|
@@ -20647,7 +21037,9 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
20647
21037
|
handleErrorsDisplay($currentForm, cb._errors, cb._data, field);
|
|
20648
21038
|
updateSubmitTriggerState( $currentForm, isFormValid);
|
|
20649
21039
|
}
|
|
20650
|
-
|
|
21040
|
+
// #B334 — same retarget as the completion branch above.
|
|
21041
|
+
// was: triggerEvent(gina, $currentForm, 'validated.' + formId, cb);
|
|
21042
|
+
triggerEvent(gina, $formOrElement, 'validated.' + formId, cb);
|
|
20651
21043
|
}
|
|
20652
21044
|
// just update warning state
|
|
20653
21045
|
else if (/^true$/i.test(instance.$forms[formId].isValidating) && listedFields.length > 1 && listedFields[listedFields.length-1] != field ) {
|
|
@@ -21421,10 +21813,33 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
21421
21813
|
}
|
|
21422
21814
|
|
|
21423
21815
|
|
|
21424
|
-
|
|
21425
|
-
|
|
21816
|
+
// #B334 — three defects lived in this one registration:
|
|
21817
|
+
// (a) it registered for EVERY pass, but a cb-less pass never dispatches
|
|
21818
|
+
// `validated.<id>` (the terminal block returns the result object
|
|
21819
|
+
// instead) — its listener was pure accumulation;
|
|
21820
|
+
// (b) `event.detail` IS the DISPATCHING pass's callback, and the body ran
|
|
21821
|
+
// it unconditionally — so every stale listener replayed the dispatcher's
|
|
21822
|
+
// callback once (measured: two listeners -> one dispatch -> two
|
|
21823
|
+
// `validate.<id>` dispatches -> two send() calls for one click);
|
|
21824
|
+
// (c) the `removeListener` call in the body carries no fn ref, and
|
|
21825
|
+
// events.js then only deletes the registry key —
|
|
21826
|
+
// `removeEventListener(name, undefined)` detaches nothing, so every
|
|
21827
|
+
// pass's listener stayed on the node for the page's lifetime.
|
|
21828
|
+
// The listener now registers only when a callback exists, consumes ONLY its
|
|
21829
|
+
// own pass's dispatch (detail identity), and detaches itself on consumption
|
|
21830
|
+
// (a mid-dispatch removal also stops a not-yet-run duplicate per DOM spec).
|
|
21831
|
+
// was: if (isGFFCtx) {
|
|
21832
|
+
// addListener(gina, $formOrElement, evt, function(event) {
|
|
21833
|
+
if ( isGFFCtx && typeof(cb) === 'function' ) {
|
|
21834
|
+
addListener(gina, $formOrElement, evt, function onValidatedOwnPass(event) {
|
|
21426
21835
|
event.preventDefault();
|
|
21427
21836
|
|
|
21837
|
+
if ( event.detail !== cb ) {
|
|
21838
|
+
// another pass's completion — not ours to consume
|
|
21839
|
+
return;
|
|
21840
|
+
}
|
|
21841
|
+
event.currentTarget.removeEventListener(event.type, onValidatedOwnPass, false);
|
|
21842
|
+
|
|
21428
21843
|
if (!hasBeenValidated) {
|
|
21429
21844
|
hasBeenValidated = true;
|
|
21430
21845
|
hasParsedAllRules = false;
|