gina 0.5.13 → 0.5.14
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 +8 -0
- package/README.md +5 -16
- package/ROADMAP.md +1 -0
- package/framework/v0.5.14/VERSION +1 -0
- package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/js/gina.js +119 -31
- package/framework/v0.5.14/core/asset/plugin/dist/vendor/gina/js/gina.min.js +580 -0
- package/framework/v0.5.14/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.14/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/validator/src/form-validator.js +98 -28
- package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/validator/src/main.js +21 -3
- package/framework/{v0.5.13 → v0.5.14}/helpers/plugins/src/api-error.js +26 -1
- package/framework/{v0.5.13 → v0.5.14}/lib/i18n/src/main.js +6 -4
- package/framework/{v0.5.13 → v0.5.14}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +1 -1
- package/package.json +3 -3
- package/framework/v0.5.13/VERSION +0 -1
- package/framework/v0.5.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -577
- package/framework/v0.5.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/AUTHORS +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/LICENSE +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/config.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/content.encoding +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/dev/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/gna.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/locales/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/locales/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/mime.types +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/model/entity.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/model/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/router.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/server.express.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/server.isaac.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/server.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/status.codes +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/console.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/context.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/path.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/task.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/helpers/text.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/async/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/config.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/image-build/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/job/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/job/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/job-store.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/math/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/model.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/proc.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/session-store.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/shell.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/state.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/url/README.md +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/url/index.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/validator.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.13 → v0.5.14}/lib/ws-session/src/main.js +0 -0
|
@@ -156,6 +156,16 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
156
156
|
'isApiError': 'Condition not satisfied',
|
|
157
157
|
'isInList': 'Must be one of: %s'
|
|
158
158
|
};
|
|
159
|
+
/**
|
|
160
|
+
* Rules already warned about by `replace()`'s fail-soft guard, so one mistyped label
|
|
161
|
+
* emits one warning and not one per debounced keystroke. Scoped to this engine
|
|
162
|
+
* instance on purpose: `validate()` builds a fresh engine per pass, but a
|
|
163
|
+
* module-scoped cache would suppress a second bundle's warning on the server, where
|
|
164
|
+
* the module is shared across bundles and requests.
|
|
165
|
+
* @inner
|
|
166
|
+
* @type {Object.<string, boolean>}
|
|
167
|
+
*/
|
|
168
|
+
var _labelWarnings = {};
|
|
159
169
|
local.errorLabels = _defaultErrorLabels;
|
|
160
170
|
// #i18n (server) — resolve built-in rule labels from the bundle catalog's
|
|
161
171
|
// `_validator.<rule>` namespace for the negotiated `culture`. Mirrors the client
|
|
@@ -284,6 +294,13 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
284
294
|
|
|
285
295
|
var compileError = function(error, data) {
|
|
286
296
|
var varArr = error.match(/\{\{([^{{}}]+)\}\}/g );
|
|
297
|
+
// `String.match` with a /g regex yields `null` — not [] — when nothing matches, so a
|
|
298
|
+
// backend field error carrying no `{{placeholder}}` (the common shape, e.g. "Already
|
|
299
|
+
// taken") used to die on `varArr.length` before it could be rendered. Nothing along
|
|
300
|
+
// the only call path catches it, and the throw kills the whole validation pass.
|
|
301
|
+
if (!varArr) {
|
|
302
|
+
return error;
|
|
303
|
+
}
|
|
287
304
|
for (let v=0, vLen=varArr.length; v<vLen; v++) {
|
|
288
305
|
let localValue = varArr[v]
|
|
289
306
|
.replace(/\[/g, '["')
|
|
@@ -390,7 +407,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
390
407
|
this.error = errorMessage = cachedErrors[this.name].query[this.value].slice(0);
|
|
391
408
|
hasCachedErrors = true;
|
|
392
409
|
}
|
|
393
|
-
errors['query'] = replace( this.error || errorMessage || local.errorLabels['query'], this);
|
|
410
|
+
errors['query'] = replace( this.error || errorMessage || local.errorLabels['query'], this, 'query');
|
|
394
411
|
console.debug('[2] potential cached error detected !! ', hasCachedErrors, cachedErrors, ' vs ', errors['query']);
|
|
395
412
|
|
|
396
413
|
if (hasCachedErrors) {
|
|
@@ -554,7 +571,13 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
554
571
|
if ( typeof(errorFields[_this.name]) != 'undefined') {
|
|
555
572
|
|
|
556
573
|
// compiling against rules[field].query.data
|
|
557
|
-
|
|
574
|
+
// Only a string can be compiled — `compileError` runs `error.match()`.
|
|
575
|
+
// A non-string field error from the backend leaves the resolved
|
|
576
|
+
// `query` label in place (localized, else the English default)
|
|
577
|
+
// rather than taking the pass down.
|
|
578
|
+
if ( typeof(errorFields[_this.name]) === 'string' ) {
|
|
579
|
+
local.errorLabels['query'] = compileError(errorFields[_this.name], options.data);
|
|
580
|
+
}
|
|
558
581
|
|
|
559
582
|
|
|
560
583
|
} else if ( typeof(result.error) != 'undefined' && /^5/.test(result.status) ) {
|
|
@@ -564,7 +587,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
564
587
|
// Fixed added on 2023-01-10
|
|
565
588
|
// We want `local.errorLabels['query']` before the generic|user defined `rule` error
|
|
566
589
|
var optionError = ( typeof(options['error']) != 'undefined' ) ? options['error'] : null;
|
|
567
|
-
errors['query'] = replace(systemError || _this['error'] || optionError || local.errorLabels['query'],
|
|
590
|
+
errors['query'] = replace(systemError || _this['error'] || optionError || local.errorLabels['query'], _this, 'query');
|
|
568
591
|
|
|
569
592
|
console.debug('[1] query error detected !! ', result, errorFields, errors['query']);
|
|
570
593
|
}
|
|
@@ -1164,7 +1187,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1164
1187
|
}
|
|
1165
1188
|
|
|
1166
1189
|
if (!isValid) {
|
|
1167
|
-
errors[alias] = replace(this.error || errorMessage || local.errorLabels[alias], this);
|
|
1190
|
+
errors[alias] = replace(this.error || errorMessage || local.errorLabels[alias], this, alias);
|
|
1168
1191
|
if ( typeof(errorStack) != 'undefined' )
|
|
1169
1192
|
errors['stack'] = errorStack;
|
|
1170
1193
|
}
|
|
@@ -1217,7 +1240,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1217
1240
|
}
|
|
1218
1241
|
|
|
1219
1242
|
if (!isValid) {
|
|
1220
|
-
errors['isEmail'] = replace(this['error'] || local.errorLabels['isEmail'], this)
|
|
1243
|
+
errors['isEmail'] = replace(this['error'] || local.errorLabels['isEmail'], this, 'isEmail')
|
|
1221
1244
|
}
|
|
1222
1245
|
// if error tagged by a previous vlaidation, remove it when isValid == true
|
|
1223
1246
|
else if ( isValid && typeof(errors['isEmail']) != 'undefined' ) {
|
|
@@ -1259,7 +1282,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1259
1282
|
}
|
|
1260
1283
|
|
|
1261
1284
|
if (!isValid) {
|
|
1262
|
-
errors['isJsonWebToken'] = replace(this['error'] || local.errorLabels['isJsonWebToken'], this)
|
|
1285
|
+
errors['isJsonWebToken'] = replace(this['error'] || local.errorLabels['isJsonWebToken'], this, 'isJsonWebToken')
|
|
1263
1286
|
}
|
|
1264
1287
|
// if error tagged by a previous vlaidation, remove it when isValid == true
|
|
1265
1288
|
else if ( isValid && typeof(errors['isJsonWebToken']) != 'undefined' ) {
|
|
@@ -1307,7 +1330,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1307
1330
|
var isValid = (val !== null) ? true : false;
|
|
1308
1331
|
|
|
1309
1332
|
if (!isValid) {
|
|
1310
|
-
errors['isBoolean'] = replace(this.error || local.errorLabels['isBoolean'], this)
|
|
1333
|
+
errors['isBoolean'] = replace(this.error || local.errorLabels['isBoolean'], this, 'isBoolean')
|
|
1311
1334
|
}
|
|
1312
1335
|
// if error tagged by a previous vlaidation, remove it when isValid == true
|
|
1313
1336
|
else if ( isValid && typeof(errors['isBoolean']) != 'undefined' ) {
|
|
@@ -1352,7 +1375,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1352
1375
|
}
|
|
1353
1376
|
|
|
1354
1377
|
} catch (err) {
|
|
1355
|
-
errors['isNumber'] = replace(this.error || local.errorLabels['isNumber'], this);
|
|
1378
|
+
errors['isNumber'] = replace(this.error || local.errorLabels['isNumber'], this, 'isNumber');
|
|
1356
1379
|
this.valid = false;
|
|
1357
1380
|
if ( errors.count() > 0 )
|
|
1358
1381
|
this['errors'] = errors;
|
|
@@ -1378,14 +1401,14 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1378
1401
|
if ( !isValid || !isMinLength || !isMaxLength ) {
|
|
1379
1402
|
|
|
1380
1403
|
if ( !isValid )
|
|
1381
|
-
errors['isNumber'] = replace(this.error || local.errorLabels['isNumber'], this);
|
|
1404
|
+
errors['isNumber'] = replace(this.error || local.errorLabels['isNumber'], this, 'isNumber');
|
|
1382
1405
|
if ( !isMinLength || !isMaxLength ) {
|
|
1383
1406
|
if ( !isMinLength )
|
|
1384
|
-
errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberMinLength'], this);
|
|
1407
|
+
errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberMinLength'], this, 'isNumberMinLength');
|
|
1385
1408
|
if ( !isMaxLength )
|
|
1386
|
-
errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberMaxLength'], this);
|
|
1409
|
+
errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberMaxLength'], this, 'isNumberMaxLength');
|
|
1387
1410
|
if ( minLength === maxLength )
|
|
1388
|
-
errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberLength'], this);
|
|
1411
|
+
errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberLength'], this, 'isNumberLength');
|
|
1389
1412
|
}
|
|
1390
1413
|
|
|
1391
1414
|
isValid = false;
|
|
@@ -1416,7 +1439,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1416
1439
|
val = this.value = local.data[this.name] = Math.round(val);
|
|
1417
1440
|
} catch (err) {
|
|
1418
1441
|
|
|
1419
|
-
errors['toInteger'] = replace(this.error || local.errorLabels['toInteger'], this);
|
|
1442
|
+
errors['toInteger'] = replace(this.error || local.errorLabels['toInteger'], this, 'toInteger');
|
|
1420
1443
|
this.valid = false;
|
|
1421
1444
|
if ( errors.count() > 0 )
|
|
1422
1445
|
this['errors'] = errors;
|
|
@@ -1454,22 +1477,22 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1454
1477
|
if ( !isValid || !isMinLength || !isMaxLength ) {
|
|
1455
1478
|
|
|
1456
1479
|
if ( !isValid )
|
|
1457
|
-
errors['isInteger'] = replace(this.error || local.errorLabels['isInteger'], this);
|
|
1480
|
+
errors['isInteger'] = replace(this.error || local.errorLabels['isInteger'], this, 'isInteger');
|
|
1458
1481
|
|
|
1459
1482
|
if ( !isMinLength || !isMaxLength ) {
|
|
1460
1483
|
|
|
1461
1484
|
if ( !isMinLength ) {
|
|
1462
|
-
errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerMinLength'], this);
|
|
1485
|
+
errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerMinLength'], this, 'isIntegerMinLength');
|
|
1463
1486
|
isValid = false;
|
|
1464
1487
|
}
|
|
1465
1488
|
|
|
1466
1489
|
if ( !isMaxLength ) {
|
|
1467
|
-
errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerMaxLength'], this);
|
|
1490
|
+
errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerMaxLength'], this, 'isIntegerMaxLength');
|
|
1468
1491
|
isValid = false;
|
|
1469
1492
|
}
|
|
1470
1493
|
|
|
1471
1494
|
if ( minLength === maxLength ) {
|
|
1472
|
-
errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerLength'], this);
|
|
1495
|
+
errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerLength'], this, 'isIntegerLength');
|
|
1473
1496
|
isValid = false;
|
|
1474
1497
|
}
|
|
1475
1498
|
}
|
|
@@ -1526,14 +1549,14 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1526
1549
|
}
|
|
1527
1550
|
} catch(err) {
|
|
1528
1551
|
isValid = false;
|
|
1529
|
-
errors['toFloat'] = replace(this.error || local.errorLabels['toFloat'], this);
|
|
1552
|
+
errors['toFloat'] = replace(this.error || local.errorLabels['toFloat'], this, 'toFloat');
|
|
1530
1553
|
this.valid = false;
|
|
1531
1554
|
if ( errors.count() > 0 )
|
|
1532
1555
|
this['errors'] = errors;
|
|
1533
1556
|
}
|
|
1534
1557
|
} else {
|
|
1535
1558
|
isValid = false;
|
|
1536
|
-
errors['toFloat'] = replace(this.error || local.errorLabels['toFloatNAN'], this)
|
|
1559
|
+
errors['toFloat'] = replace(this.error || local.errorLabels['toFloatNAN'], this, 'toFloatNAN')
|
|
1537
1560
|
}
|
|
1538
1561
|
}
|
|
1539
1562
|
|
|
@@ -1621,7 +1644,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1621
1644
|
}
|
|
1622
1645
|
|
|
1623
1646
|
if (!isValid) {
|
|
1624
|
-
errors['isFloat'] = replace(this.error || local.errorLabels['isFloat'], this)
|
|
1647
|
+
errors['isFloat'] = replace(this.error || local.errorLabels['isFloat'], this, 'isFloat')
|
|
1625
1648
|
}
|
|
1626
1649
|
|
|
1627
1650
|
// #B78 - keep .valid consistent with a surviving isRequired error.
|
|
@@ -1687,7 +1710,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1687
1710
|
|
|
1688
1711
|
|
|
1689
1712
|
if (!isValid) {
|
|
1690
|
-
errors['isRequired'] = replace(this.error || local.errorLabels['isRequired'], this)
|
|
1713
|
+
errors['isRequired'] = replace(this.error || local.errorLabels['isRequired'], this, 'isRequired')
|
|
1691
1714
|
}
|
|
1692
1715
|
// if error tagged by a previous vlaidation, remove it when isValid == true
|
|
1693
1716
|
else if ( isValid ) {
|
|
@@ -1771,11 +1794,11 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1771
1794
|
isValid = false;
|
|
1772
1795
|
|
|
1773
1796
|
if ( !isMinLength )
|
|
1774
|
-
errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringMinLength'], this);
|
|
1797
|
+
errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringMinLength'], this, 'isStringMinLength');
|
|
1775
1798
|
if ( !isMaxLength )
|
|
1776
|
-
errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringMaxLength'], this);
|
|
1799
|
+
errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringMaxLength'], this, 'isStringMaxLength');
|
|
1777
1800
|
if (minLength === maxLength)
|
|
1778
|
-
errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringLength'], this);
|
|
1801
|
+
errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringLength'], this, 'isStringLength');
|
|
1779
1802
|
}
|
|
1780
1803
|
|
|
1781
1804
|
}
|
|
@@ -1806,7 +1829,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1806
1829
|
if (!val || val == '' || /NaN|Invalid Date/i.test(val) ) {
|
|
1807
1830
|
if ( /NaN|Invalid Date/i.test(val) ) {
|
|
1808
1831
|
console.warn('[FormValidator::isDate] Provided value for field `'+ this.name +'` is not allowed: `'+ val +'`');
|
|
1809
|
-
errors['isDate'] = replace(this.error || local.errorLabels['isDate'], this);
|
|
1832
|
+
errors['isDate'] = replace(this.error || local.errorLabels['isDate'], this, 'isDate');
|
|
1810
1833
|
|
|
1811
1834
|
}
|
|
1812
1835
|
this.valid = isValid;
|
|
@@ -1893,7 +1916,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1893
1916
|
if ( !errors['isRequired'] && this.value == '' ) {
|
|
1894
1917
|
isValid = true
|
|
1895
1918
|
} else {
|
|
1896
|
-
errors['isDate'] = replace(this.error || local.errorLabels['isDate'], this);
|
|
1919
|
+
errors['isDate'] = replace(this.error || local.errorLabels['isDate'], this, 'isDate');
|
|
1897
1920
|
}
|
|
1898
1921
|
|
|
1899
1922
|
this.valid = isValid;
|
|
@@ -1961,7 +1984,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
1961
1984
|
|
|
1962
1985
|
if (!isValid) {
|
|
1963
1986
|
this['size'] = allowedValues.join(', ');
|
|
1964
|
-
errors['isInList'] = replace(this.error || local.errorLabels['isInList'], this);
|
|
1987
|
+
errors['isInList'] = replace(this.error || local.errorLabels['isInList'], this, 'isInList');
|
|
1965
1988
|
} else if ( typeof(errors['isInList']) != 'undefined' ) {
|
|
1966
1989
|
delete errors['isInList'];
|
|
1967
1990
|
}
|
|
@@ -2244,8 +2267,55 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
|
|
|
2244
2267
|
return local.data
|
|
2245
2268
|
}
|
|
2246
2269
|
|
|
2270
|
+
/**
|
|
2271
|
+
* Interpolate the `%l`/`%n`/`%s` tokens of an error label against a field object.
|
|
2272
|
+
*
|
|
2273
|
+
* `target` reaches here from four independent sources, none of which the framework
|
|
2274
|
+
* controls: a bundle catalog's `_validator.<rule>` label, a runtime
|
|
2275
|
+
* `gina.validator.setErrorLabels()` override, a rule's `errorMessage` argument
|
|
2276
|
+
* (`is: ["$a === $b", <errorMessage>]`), and a per-field `error` (plus the `query`
|
|
2277
|
+
* rule's `systemError`/`optionError`). Only the first is linted at boot.
|
|
2278
|
+
*
|
|
2279
|
+
* A non-string `target` used to throw here, and the throw is unrecoverable: it
|
|
2280
|
+
* escapes `validate()`, so the submit-validation callback never runs and the form
|
|
2281
|
+
* silently refuses to submit, and a boot-time pass aborts the whole form-binding
|
|
2282
|
+
* loop. So degrade instead of dying — an authoring mistake must never cost a form.
|
|
2283
|
+
*
|
|
2284
|
+
* @inner
|
|
2285
|
+
* @param {*} target - The unresolved label. Fail-soft when not a string.
|
|
2286
|
+
* @param {object} fieldObj - Field the label is rendered for; supplies the tokens.
|
|
2287
|
+
* @param {string} [rule] - Rule the label belongs to. OPTIONAL: `replace` is
|
|
2288
|
+
* re-exported to app-defined validators through `getValidationContext()`, which
|
|
2289
|
+
* call it with two arguments. Absent, a non-string label degrades to an empty
|
|
2290
|
+
* message rather than to the rule's English default.
|
|
2291
|
+
* @returns {string} The interpolated label; never throws.
|
|
2292
|
+
*
|
|
2293
|
+
* @example
|
|
2294
|
+
* replace('Should be at least %s characters', { size: 5 }) // -> 'Should be at least 5 characters'
|
|
2295
|
+
* replace({ message: 'oops' }, field, 'isRequired') // -> 'Cannot be left empty' (+ one warn)
|
|
2296
|
+
*/
|
|
2247
2297
|
/**@js_externs replace*/
|
|
2248
|
-
var replace = function(target, fieldObj) {
|
|
2298
|
+
var replace = function(target, fieldObj, rule) {
|
|
2299
|
+
if ( typeof(target) !== 'string' ) {
|
|
2300
|
+
// Prefer the rule's resolved label (it may be localised) over the English
|
|
2301
|
+
// default — the resolved label is only unusable when it IS the bad value,
|
|
2302
|
+
// in which case the `typeof` test below skips it and English wins.
|
|
2303
|
+
var _fallback = ( rule && typeof(local.errorLabels[rule]) === 'string' )
|
|
2304
|
+
? local.errorLabels[rule]
|
|
2305
|
+
: ( rule && typeof(_defaultErrorLabels[rule]) === 'string' )
|
|
2306
|
+
? _defaultErrorLabels[rule]
|
|
2307
|
+
: '';
|
|
2308
|
+
var _warnKey = rule || '(unknown rule)';
|
|
2309
|
+
if ( !_labelWarnings[_warnKey] ) {
|
|
2310
|
+
_labelWarnings[_warnKey] = true;
|
|
2311
|
+
console.warn('[FormValidator] error label for rule `' + _warnKey + '` must be a string'
|
|
2312
|
+
+ ' — got ' + ( target === null ? 'null' : typeof(target) ) + '.'
|
|
2313
|
+
+ ' Falling back to ' + ( _fallback ? '`' + _fallback + '`' : 'an empty message' ) + '.'
|
|
2314
|
+
+ ' Check the bundle catalog\'s `_validator` node, `setErrorLabels()`, the rule\'s'
|
|
2315
|
+
+ ' `errorMessage` argument, and the field\'s `error`.');
|
|
2316
|
+
}
|
|
2317
|
+
target = _fallback;
|
|
2318
|
+
}
|
|
2249
2319
|
var keys = target.match(/%[a-z]+/gi);
|
|
2250
2320
|
if (keys) {
|
|
2251
2321
|
for (var k = 0, len = keys.length; k < len; ++k) {
|
|
@@ -922,9 +922,11 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
922
922
|
// }
|
|
923
923
|
// }
|
|
924
924
|
for (var e in errors[name]) {
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
925
|
+
if (e != 'stack') { // ignore stack for display (parity with the first-error branch, #B89)
|
|
926
|
+
$msg = document.createElement('p');
|
|
927
|
+
$msg.appendChild( document.createTextNode(errors[name][e]) );
|
|
928
|
+
$err.appendChild($msg);
|
|
929
|
+
}
|
|
928
930
|
|
|
929
931
|
if ( envIsDev ) {
|
|
930
932
|
if (!formsErrors) formsErrors = {};
|
|
@@ -947,6 +949,22 @@ function ValidatorPlugin(rules, data, formId, culture) {
|
|
|
947
949
|
if ( !isWarning && $el.type != 'hidden' ) {
|
|
948
950
|
$el.setAttribute('aria-invalid', 'true');
|
|
949
951
|
}
|
|
952
|
+
|
|
953
|
+
// #B89 — re-announce the REFRESHED message through the live region. The
|
|
954
|
+
// first-error branch announces, but this refresh branch rebuilt $err with a
|
|
955
|
+
// NEW message (the value now fails a different rule, or a late setErrorLabels
|
|
956
|
+
// overlay changed the label) and, without this, assistive tech kept announcing
|
|
957
|
+
// the first message. Same guard as the first-error announce: committed (not
|
|
958
|
+
// soft-warning) errors, per-field/blur path, once focus has left the field.
|
|
959
|
+
// aria-live=polite + textContent-replace re-announces because the string changed.
|
|
960
|
+
if (
|
|
961
|
+
!isWarning
|
|
962
|
+
&& typeof(fieldName) != 'undefined'
|
|
963
|
+
&& $err
|
|
964
|
+
&& $el !== document.activeElement
|
|
965
|
+
) {
|
|
966
|
+
announceA11yError($form, $err.textContent);
|
|
967
|
+
}
|
|
950
968
|
}
|
|
951
969
|
|
|
952
970
|
if (
|
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
var merge = require('./../../../lib/merge');
|
|
3
3
|
var statusCodes = requireJSON(__dirname + '/../../../core/status.codes');
|
|
4
4
|
//var statusCodes = requireJSON( _( getPath('gina').core + '/status.codes') );
|
|
5
|
+
|
|
6
|
+
// #B88 — a raw stack trace has the shape `<message>\n at <frame>`; this matches it.
|
|
7
|
+
var STACK_SHAPE_RE = /\n\s+at\s/;
|
|
8
|
+
// Neutral field message rendered outside local scope in place of a leaked stack trace
|
|
9
|
+
// (see formatClientError). Apps that want their own copy pass a real (non-stack) message.
|
|
10
|
+
var GENERIC_FIELD_ERROR = 'An error occurred';
|
|
11
|
+
// Read at call time (NOT module-load) so it honours NODE_SCOPE_IS_LOCAL regardless of
|
|
12
|
+
// whether this helper was required before gna.js set it. Fail-closed: unset/false → not
|
|
13
|
+
// local → strip (production-safe). Mirrors controller.js's `_isLocalScope`.
|
|
14
|
+
function _scopeIsLocal() {
|
|
15
|
+
return !!process.env.NODE_SCOPE_IS_LOCAL && process.env.NODE_SCOPE_IS_LOCAL.toLowerCase() === 'true';
|
|
16
|
+
}
|
|
5
17
|
/**
|
|
6
18
|
*
|
|
7
19
|
* Usage:
|
|
@@ -102,6 +114,15 @@ function ApiError(errorMessage, fieldName, errorStatus) {
|
|
|
102
114
|
|
|
103
115
|
var formatClientError = function(ctx, error, errorMessage, fieldName) {
|
|
104
116
|
error.fields[fieldName] = errorMessage;
|
|
117
|
+
// #B88 — `fields[fieldName]` is the sole channel carrying a value to the browser
|
|
118
|
+
// (both validator render paths read it), and the controller.js root-`stack` wire
|
|
119
|
+
// strip cannot reach it. A message-less Error makes ApiError fall back to `e.stack`
|
|
120
|
+
// above (`e.message || e.stack`), and an app may pass a stack string directly — so
|
|
121
|
+
// outside local scope, replace a stack-shaped field message with a neutral one. Kept
|
|
122
|
+
// in local scope for debugging, mirroring controller.js's fail-closed wire strip.
|
|
123
|
+
if ( !_scopeIsLocal() && typeof(error.fields[fieldName]) == 'string' && STACK_SHAPE_RE.test(error.fields[fieldName]) ) {
|
|
124
|
+
error.fields[fieldName] = GENERIC_FIELD_ERROR;
|
|
125
|
+
}
|
|
105
126
|
var bundleName = ctx.bundle
|
|
106
127
|
, stackObj = __stack[2]
|
|
107
128
|
;
|
|
@@ -131,7 +152,11 @@ function ApiError(errorMessage, fieldName, errorStatus) {
|
|
|
131
152
|
//error.fields[fieldName][funcName] = errorMessage;
|
|
132
153
|
} catch (err) {
|
|
133
154
|
error.tag = 'N/A';
|
|
134
|
-
|
|
155
|
+
// #B88 — this stack (the introspection failure) serialises to the wire via
|
|
156
|
+
// renderJSON, which does no stripping; only expose it in local scope.
|
|
157
|
+
if ( _scopeIsLocal() ) {
|
|
158
|
+
error.stack = err.stack;
|
|
159
|
+
}
|
|
135
160
|
}
|
|
136
161
|
} else {
|
|
137
162
|
//error.fields[fieldName]['isApiError'] = errorMessage;
|
|
@@ -240,15 +240,17 @@ function splitCulture(culture) {
|
|
|
240
240
|
* The engine substitutes every token matching {@link VALIDATOR_TOKEN_RE} it finds
|
|
241
241
|
* in a label, looking each one up verbatim in its `local.keys` map. An unknown
|
|
242
242
|
* token — `%d`, `%L`, or a bare percent glued to letters as in `20%sur le prix` —
|
|
243
|
-
* resolves to `undefined` and is spliced into user-facing copy; a non-string label
|
|
244
|
-
*
|
|
243
|
+
* resolves to `undefined` and is spliced into user-facing copy; a non-string label is
|
|
244
|
+
* discarded by the engine, which renders the rule's English default instead. Both are
|
|
245
245
|
* catalog-authoring mistakes, and the catalog is parsed only here, so this is the
|
|
246
246
|
* one place to surface them before a request renders them.
|
|
247
247
|
*
|
|
248
248
|
* Warns once per offending label at boot and never throws — a translation typo
|
|
249
249
|
* must not take a bundle down. This covers the client too: the browser's
|
|
250
250
|
* `gina.config.validatorLabels` is a subset of this same boot-loaded catalog.
|
|
251
|
-
* It does NOT cover labels supplied at runtime via `gina.validator.setErrorLabels()
|
|
251
|
+
* It does NOT cover labels supplied at runtime via `gina.validator.setErrorLabels()`,
|
|
252
|
+
* nor a rule's `errorMessage` argument — for those, the engine's own fail-soft guard
|
|
253
|
+
* warns at the point of degradation.
|
|
252
254
|
*
|
|
253
255
|
* @memberof module:gina/lib/i18n
|
|
254
256
|
* @inner
|
|
@@ -279,7 +281,7 @@ function warnOnSuspectValidatorLabels(catalog, filePath) {
|
|
|
279
281
|
var label = node[rule];
|
|
280
282
|
if ( typeof label !== 'string' ) {
|
|
281
283
|
console.warn('[i18n] `' + VALIDATOR_NAMESPACE + '.' + rule + '` in ' + filePath
|
|
282
|
-
+ ' must be a string — the validator
|
|
284
|
+
+ ' must be a string — the validator discards it and renders the English default');
|
|
283
285
|
count++;
|
|
284
286
|
continue;
|
|
285
287
|
}
|
package/gna.js
CHANGED
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
'use strict';
|
|
16
16
|
|
|
17
17
|
// Framework core — the main gna module (lifecycle hooks, lib, etc.)
|
|
18
|
-
var _gna = require('./framework/v0.5.
|
|
18
|
+
var _gna = require('./framework/v0.5.14/core/gna');
|
|
19
19
|
|
|
20
20
|
// SuperController and EntitySuper — loaded from their source modules
|
|
21
|
-
var SuperController = require('./framework/v0.5.
|
|
22
|
-
var EntitySuper = require('./framework/v0.5.
|
|
21
|
+
var SuperController = require('./framework/v0.5.14/core/controller');
|
|
22
|
+
var EntitySuper = require('./framework/v0.5.14/core/model/entity');
|
|
23
23
|
|
|
24
24
|
// uuid — from the lib registry
|
|
25
|
-
var uuid = require('./framework/v0.5.
|
|
25
|
+
var uuid = require('./framework/v0.5.14/lib/uuid');
|
|
26
26
|
|
|
27
27
|
module.exports = {
|
|
28
28
|
|
package/llms.txt
CHANGED
|
@@ -973,7 +973,7 @@ Dev-mode query instrumentation captures every database query tied to the current
|
|
|
973
973
|
|
|
974
974
|
221. **FormValidator marks an invalid submit trigger with `aria-disabled` + `.gina-form-submit-disabled`, NOT native `disabled` (#B76, 2026-07-06).** `updateSubmitTriggerState`'s invalid + live-check-on branch used to set the submit `<button>`'s native `.disabled = true`, but a natively-disabled `<button>` emits no click event — so the form-level `validate.<id>` guard (which renders every field's errors + focuses the first invalid field, and only `send()`s when `isValid()`) never fired, and the button was a dead no-op with zero feedback. The HIDE branch now sets `aria-disabled="true"` + adds the class `gina-form-submit-disabled` (keeping the trigger OPERABLE so the click still runs the guard) while `isValid()` stays the real send gate; the SHOW branch KEEPS clearing native `disabled` so a `<button disabled>` in markup still enables on valid / when live-check is off. Tag-agnostic (works for `<button>` and `<a>`; `.disabled=false` on an anchor is a harmless expando). The Enter-key/native-submit DOMParser proxy that read `submitTrigger.disabled` off a re-parsed copy simply never cancels on the invalid path now — harmless: the native submit is still cancelled by the `withRules || isBinded` branch and the `isValid()` gate still blocks the send. **Consumers must style the `[aria-disabled="true"]` / `.gina-form-submit-disabled` submit-trigger state — the framework ships no button CSS.** `main.js` is browser-bundled → a prod dist rebuild is required. Two testing gotchas: jsdom does NOT model "a disabled control emits no click" (it dispatches click on disabled buttons), so the bug is asserted via the pre-fix disabled STATE in a subtract replica; and the consumer-styling comment names the class, so pin the `classList.(add|remove)('gina-form-submit-disabled')` code form (==2), not a bare string count (==3). Tests: `validator-submit-trigger-state.test.js` (18).
|
|
975
975
|
|
|
976
|
-
222. **FormValidator built-in rule labels localise per culture from ONE per-bundle catalog on BOTH client and server — app-owned, the framework ships NO translations (0.5.x, validator i18n Slices 1–3).** The 26 English defaults live in `form-validator.js` as `_defaultErrorLabels`; each rule resolves `this.error || local.errorLabels[rule]` (per-field app override wins, else the default), and the engine seeds `local.errorLabels` from the defaults then overlays the negotiated culture's labels from the same `_validator.<rule>` catalog namespace both sides read. **CLIENT overlay** (`isGFFCtx`-gated) applies two layers over English with precedence **app `setErrorLabels()` > server-whispered bundle catalog > English**: layer 3 reads the `setErrorLabels()` registry `gina.validator._errorLabelsByCulture[gina.config.culture]` (exact `fr_FR` → base `fr` fallback); layer 2 reads `gina.config.validatorLabels` — the culture's `_validator` subset from `bundle/locales/<culture>.json` whispered by the render path (`controller.js` resolves it via `lib.i18n` walkFallback→getCatalog→resolveKey, `encodeRFC5987ValueChars`-encoded into `page.environment.validatorLabels`; `loader.js` reads it into `gina.config.validatorLabels` with a GUARDED `JSON.parse(decodeURIComponent(…))` IIFE — NOT a bare parse like `routing`, an empty whisper would throw and kill `onGinaLoaded` → whole-page JS dead — plus `@js_externs validatorLabels`). Each layer is `merge(JSON.clone(layer), local.errorLabels)` (lib/merge is target-wins/source-fills, so a higher layer wins per key and lower layers fill), catalog applied FIRST then registry; an empty `{}` catalog is skipped (own-key guard) so it degrades to registry/English. **SERVER overlay** (`!isGFFCtx`): passing a string `culture` to `gina.plugins.Validator` resolves the same `_validator` node (same walkFallback→getCatalog→resolveKey chain) and merges it over English. Apps register client overrides through the public `gina.validator.setErrorLabels(labels[, culture])`. Matches the framework's per-bundle "app owns catalogs" i18n stance (`bundle/locales` + `t()`); custom user rules already carry app messages and are untouched; a per-field/rule `error` still wins. **Two SERVER constraints (measured):** routing.json `validator::{}` requirement labels stay English (those validators run during route-matching, BEFORE culture negotiation → `req.culture` undefined there), and the auto-validation path (pass a rules object) has a pre-existing null-`$fields` crash at `forEachField` orthogonal to i18n — so the working server path is the MANUAL `new gina.plugins.Validator({}, data, formId, req.culture)` + `v.field.rule(...)`. **`%`-token contract (measured 2026-07-08).** `replace()` substitutes tokens in the MERGED `local.errorLabels`, so a CATALOG label interpolates exactly like an English default — load-bearing because length bounds arrive as ARRAY args (`"isString": [5]`, spread through `apply()` in `main.js`) and therefore reach `isStringMinLength`/`isStringMaxLength`, keys no rule file ever names (grepping rule files for them returns 0 and wrongly reads as dead). The vocabulary is CLOSED and CASE-SENSITIVE: `replace()` matches `/%[a-z]+/gi` GREEDILY and looks each hit up verbatim in `local.keys` (`%l`→label, `%n`→name, `%s`→size), so an unknown token (`%d`, `%L`) — or a literal percent glued to letters (`20%sur le prix` matches `%sur`) — splices the literal string `undefined` into user-facing copy, and a NON-STRING label makes `replace()` throw `target.match is not a function`. `%l` is frontend-only (it reads the DOM `data-gina-form-field-label`), so a catalog label using it renders EMPTY server-side rather than `undefined`. `lib/i18n loadCatalogs` LINTS the `_validator` node at boot (warns per offending label, never throws, catalog still loads); it covers the client too (the whisper is a subset of the same boot-loaded catalog) but NOT runtime `setErrorLabels()` labels, and its token set is drift-pinned against `local.keys`. **Labels are LATE-BOUND per validation pass (measured).** The overlay lives in the `FormValidatorUtil` CONSTRUCTOR, and `validate()` builds a FRESH engine on every pass (`main.js` ~`:7145`/`:7154`/`:7157`) — not once at bind time — so `setErrorLabels()` called AFTER `new FormValidator(...)`, canonically inside a `ready` handler (which fires immediately after `gina.validator = instance`), applies from the NEXT pass; it does NOT retroactively change a pass already in flight, since the message string is interpolated at rule-evaluation time. **Catalog-load signal (measured correction).** A `locales/*.json` filename failing `CULTURE_FILENAME` (`fr-FR.json`, `fr_fr.json`) DOES warn and is skipped; the genuinely SILENT case is a MISSING `locales/` dir (`config.js` `fs.existsSync` with no `else`) — opt-in by design. Catalogs are boot-loaded with no hot reload, so a catalog edit needs a bundle restart. Closure keeps the cross-module property names via the quoted-literal-decl + dot-read + `@js_externs` pattern; both validator files browser-bundled → any edit needs a prod dist rebuild (the 4 `gina.*` + 3 `gina.onload.*`), but `lib/i18n` is server-only so the boot lint needs none. Tests: `test/lib/validator-label-i18n.test.js` (client registry layer) + `test/lib/validator-label-i18n-server.test.js` (server) + `test/lib/validator-label-i18n-client-catalog.test.js` (client catalog + 3-layer precedence) + `test/lib/validator-label-i18n-runtime.test.js` (%-token interpolation from a catalog label, the boot lint, late binding).
|
|
976
|
+
222. **FormValidator built-in rule labels localise per culture from ONE per-bundle catalog on BOTH client and server — app-owned, the framework ships NO translations (0.5.x, validator i18n Slices 1–3).** The 26 English defaults live in `form-validator.js` as `_defaultErrorLabels`; each rule resolves `this.error || local.errorLabels[rule]` (per-field app override wins, else the default), and the engine seeds `local.errorLabels` from the defaults then overlays the negotiated culture's labels from the same `_validator.<rule>` catalog namespace both sides read. **CLIENT overlay** (`isGFFCtx`-gated) applies two layers over English with precedence **app `setErrorLabels()` > server-whispered bundle catalog > English**: layer 3 reads the `setErrorLabels()` registry `gina.validator._errorLabelsByCulture[gina.config.culture]` (exact `fr_FR` → base `fr` fallback); layer 2 reads `gina.config.validatorLabels` — the culture's `_validator` subset from `bundle/locales/<culture>.json` whispered by the render path (`controller.js` resolves it via `lib.i18n` walkFallback→getCatalog→resolveKey, `encodeRFC5987ValueChars`-encoded into `page.environment.validatorLabels`; `loader.js` reads it into `gina.config.validatorLabels` with a GUARDED `JSON.parse(decodeURIComponent(…))` IIFE — NOT a bare parse like `routing`, an empty whisper would throw and kill `onGinaLoaded` → whole-page JS dead — plus `@js_externs validatorLabels`). Each layer is `merge(JSON.clone(layer), local.errorLabels)` (lib/merge is target-wins/source-fills, so a higher layer wins per key and lower layers fill), catalog applied FIRST then registry; an empty `{}` catalog is skipped (own-key guard) so it degrades to registry/English. **SERVER overlay** (`!isGFFCtx`): passing a string `culture` to `gina.plugins.Validator` resolves the same `_validator` node (same walkFallback→getCatalog→resolveKey chain) and merges it over English. Apps register client overrides through the public `gina.validator.setErrorLabels(labels[, culture])`. Matches the framework's per-bundle "app owns catalogs" i18n stance (`bundle/locales` + `t()`); custom user rules already carry app messages and are untouched; a per-field/rule `error` still wins. **Two SERVER constraints (measured):** routing.json `validator::{}` requirement labels stay English (those validators run during route-matching, BEFORE culture negotiation → `req.culture` undefined there), and the auto-validation path (pass a rules object) has a pre-existing null-`$fields` crash at `forEachField` orthogonal to i18n — so the working server path is the MANUAL `new gina.plugins.Validator({}, data, formId, req.culture)` + `v.field.rule(...)`. **`%`-token contract (measured 2026-07-08).** `replace()` substitutes tokens in the MERGED `local.errorLabels`, so a CATALOG label interpolates exactly like an English default — load-bearing because length bounds arrive as ARRAY args (`"isString": [5]`, spread through `apply()` in `main.js`) and therefore reach `isStringMinLength`/`isStringMaxLength`, keys no rule file ever names (grepping rule files for them returns 0 and wrongly reads as dead). The vocabulary is CLOSED and CASE-SENSITIVE: `replace()` matches `/%[a-z]+/gi` GREEDILY and looks each hit up verbatim in `local.keys` (`%l`→label, `%n`→name, `%s`→size), so an unknown token (`%d`, `%L`) — or a literal percent glued to letters (`20%sur le prix` matches `%sur`) — splices the literal string `undefined` into user-facing copy. **A NON-STRING label FAIL-SOFTS (0.5.14).** `replace(target, fieldObj, rule)` takes the rule name as an OPTIONAL 3rd argument — optional because `replace` is re-exported to app-defined validators through `getValidationContext()`, which call it with two — and when `target` is not a string it warns once per rule per engine instance (per-instance, NOT module-scoped: the module is shared across bundles + requests on the server) and falls back **resolved label → that rule's English default → empty string**. All 26 call sites pass the same key they read from `local.errorLabels`, and every one of those keys has an English default, so "degrade to English" holds at 26/26; the dynamic `is()` site passes `alias`, which is always `'is'` (the `is<N>` alias branch in the plugin's `main.js` is unreachable — its `continue` on non-function rules precedes it). Pre-0.5.14 this threw `target.match is not a function`, and NOTHING on the path catches it (`main.js`'s only `try` rethrows as `[ ginaFormValidator ] could not evaluate …`): measured in a real browser, the validator instance never finished initialising, the first form bound only partially, **every later form on the page was never bound at all** (the `bindForm` loop is unguarded), no error message rendered, and the page fell back to NATIVE browser submits with zero client-side validation. Note the submit trigger is never natively `disabled` — `updateSubmitTriggerState` only ever CLEARS `disabled`, using `aria-disabled` + `.gina-form-submit-disabled` for the invalid state — so "the button looks alive" is not evidence the pass ran. `%l` is frontend-only (it reads the DOM `data-gina-form-field-label`), so a catalog label using it renders EMPTY server-side rather than `undefined`. `lib/i18n loadCatalogs` LINTS the `_validator` node at boot (warns per offending label, never throws, catalog still loads); it covers the client too (the whisper is a subset of the same boot-loaded catalog) but NOT runtime `setErrorLabels()` labels, NOR a rule's `errorMessage` argument (`is: ["$a === $b", <non-string>]` — the lint never reads form-rule JSON), NOR a field's `error` — for those three the engine's own fail-soft guard is the only net, which is why it warns at the point of degradation. **`compileError()` is one line UPSTREAM of `replace()` on the `query` path** and carried the same class of defect: `error.match(/\{\{…\}\}/g)` returns `null` (not `[]`) when a backend field error carries no `{{placeholder}}` — the ordinary shape, e.g. `"Already taken"` — so `varArr.length` threw before any label could render; it now returns the error verbatim, and the `query` call site only compiles a string (a non-string backend field error keeps the resolved label instead of reaching `compileError`). **Labels are LATE-BOUND per validation pass (measured).** The overlay lives in the `FormValidatorUtil` CONSTRUCTOR, and `validate()` builds a FRESH engine on every pass (`main.js` ~`:7145`/`:7154`/`:7157`) — not once at bind time — so `setErrorLabels()` called AFTER `new FormValidator(...)`, canonically inside a `ready` handler (which fires immediately after `gina.validator = instance`), applies from the NEXT pass; it does NOT retroactively change a pass already in flight, since the message string is interpolated at rule-evaluation time. **Catalog-load signal (measured correction).** A `locales/*.json` filename failing `CULTURE_FILENAME` (`fr-FR.json`, `fr_fr.json`) DOES warn and is skipped; the genuinely SILENT case is a MISSING `locales/` dir (`config.js` `fs.existsSync` with no `else`) — opt-in by design. Catalogs are boot-loaded with no hot reload, so a catalog edit needs a bundle restart. Closure keeps the cross-module property names via the quoted-literal-decl + dot-read + `@js_externs` pattern; both validator files browser-bundled → any edit needs a prod dist rebuild (the 4 `gina.*` + 3 `gina.onload.*`), but `lib/i18n` is server-only so the boot lint needs none. Tests: `test/lib/validator-label-i18n.test.js` (client registry layer) + `test/lib/validator-label-i18n-server.test.js` (server) + `test/lib/validator-label-i18n-client-catalog.test.js` (client catalog + 3-layer precedence) + `test/lib/validator-label-i18n-runtime.test.js` (%-token interpolation from a catalog label, the boot lint, late binding). **#B88 fields-slot stack disclosure (0.5.14).** The reachability that renders a backend `fields[<field>]` value is FRAMEWORK-produced, not app-specific: `gna.ApiError` (`helpers/plugins/src/api-error.js`) merges `{tag,fields,path}` over the error so `error`+`fields` land at the response root — a consumer hits `compileError`'s gate with NO literal `fields:` in its source (grep = structural false negative). A raw stack enters that slot via ApiError's own `e.message || e.stack` fallback on a message-less Error, or an app passing a stack string; post-#B86 `compileError` returned it VERBATIM → it rendered into the user-facing field message (info disclosure — the DOM write is `createTextNode`, NOT XSS). FIXED AT THE SOURCE, not `compileError`: `formatClientError` scope-gates a stack-shape (`/\n\s+at\s/`) strip on `fields[fieldName]` (generic message outside local scope, full stack kept in local; call-time `NODE_SCOPE_IS_LOCAL` read, fail-closed), the sibling of `controller.js`'s fail-closed root-`stack` wire strip — which CANNOT reach the fields slot (merge drops the non-enumerable root `.stack`, so the slot is the sole carrier). One source site covers BOTH browser render paths, which each read `result.fields[<field>]`: the live-check `compileError`→`replace` path AND the form-submit `main.js` `isApiError`→`handleErrorsDisplay` path (renders verbatim, pre-dates #B86). Server-side → NO dist rebuild. The same commit scope-gates the `formatClientError` catch-branch root `.stack` (it serialises via renderJSON, which does no stripping). DEFERRED (unreported): a `{error,fields}` response hand-built WITHOUT ApiError bypasses the source strip → escalation is the same strip at the render chokepoint `handleErrorsDisplay` (browser, needs a dist rebuild). Tests: `test/lib/api-error-field-stack.test.js` (real ApiError, both sub-cases × scope, catch-branch gate, subtract). **#B89 aria-live re-announce on message refresh (0.5.14).** `handleErrorsDisplay` has three per-field branches: first-error (parent not yet marked) builds the message div AND announces via the form's `aria-live=polite` region; clear (field valid) removes it; refresh (still-errored, `data-gina-form-errors` truthy) REBUILDS the message div from the fresh `errors[name]`. The refresh branch updated the VISIBLE text but never re-announced, so a screen reader kept announcing the FIRST message when a continuously-errored field's message changed (a different failing rule, a value-dependent message, or a late `setErrorLabels()`). FIXED: a guarded `announceA11yError($form, $err.textContent)` on the refresh branch (same guard as the first-error branch — committed not soft-warning, per-field/blur path, once focus has left the field) + an `e != 'stack'` skip on its message loop (parity with the first-error branch — no stray stack `<p>` feeding the announce). `announceA11yError` writes `_live.textContent` (a REPLACE) on the form's one `gina-aria-live-<formId>` polite region, so a CHANGED string re-announces. On a blur the live-check runs a per-field validate (first-error → Branch A announce) THEN a global pass that sets `data-gina-form-errors` truthy and re-calls `handleErrorsDisplay` for the touched field (Branch C), so a second blur with a different message reliably hits the refresh branch. Browser-bundled → prod dist rebuilt; live-verified in a real headless browser (subtract: the pre-fix bundle keeps the stale announce while the visible text updates, the post-fix re-announces). DEFERRED (message-timing, LOW): which field a per-field pass refreshes is `errAttr`-gated (reset then set only after a completed pass), so a late `setErrorLabels()` before a field's first validation — or with `gina.config.culture` unset (the client culture overlay is skipped on a falsy culture) — can leave an already-errored field's message stale until it clears; register culture-keyed labels before first validation. Test: `test/core/validator-a11y-reannounce.test.js`.
|
|
977
977
|
|
|
978
978
|
223. **Per-request culture negotiation was INERT framework-wide until 0.5.x — `req.culture` / the whispered `gina.config.culture` always `'en'`/`''` regardless of bundle or environment culture, and `t()` / the `t` template filter returned keys — now activated (#I18N Slice 1).** The #I18N1 catalog + negotiation machinery shipped but three legs were dead: `lib/i18n loadCatalogs` had ZERO runtime callers (so `process.gina._i18nCatalogs` stayed empty → `core/server.js availableCultures` `[]` → `matchAvailable` null on an empty list → URL-prefix / cookie / `Accept-Language` never matched); the per-request `negotiateCulture` call passed `defaultCulture: null` (step-4 bundle default skipped); and 8 sites read `process.env.GINA_CULTURE`, which `utils/helper.js` moves into `process.gina` and DELETEs from `process.env` at init (`getEnvVar` reads `process.gina`), so `negotiateCulture` step 5, the `server.js` catch, both swig + both nunjucks `t`/`tIcu` filter fallbacks, and the `i18n:add` CLI all read an always-undefined var → negotiation fell to step 6 = `'en'`. Fix (server-side, NO dist rebuild): `config.js loadBundleConfig` (after the `secrets.resolve` seam) calls `i18n.loadCatalogs(bundle, <bundleRoot>/locales)` guarded by `fs.existsSync` (opt-in; also avoids loadCatalogs' empty-entry + background ICU-loader side effects) + `try/catch`→`console.warn` (a malformed catalog is warned, not boot-fatal — loadCatalogs THROWS on bad JSON); `server.js` reads the matched bundle `content.settings.region.culture` (format-guarded vs an unresolved `${culture}`) as `defaultCulture`; the 8 dead reads → the live `getEnvVar('GINA_CULTURE')` (`typeof getEnvVar === 'function'`-guarded in the strict global-free `lib/i18n` + the filter modules so an isolated unit-require never ReferenceErrors). Precedence now live: URL / cookie / `Accept-Language` > bundle `settings.region.culture` > operator `GINA_CULTURE` > `'en'`. **`settings.region.culture` is the REAL per-bundle culture key** — bundle scaffold `core/template/boilerplate/bundle/config/settings.json` `"culture":"${culture}"` (full underscore culture resolved at `bundle:add`; the merged config carries it — `server.js`/`controller.js` already read `content.settings.region.{timeZone,shortCode}`), NOT `settings.locale.region` (a country code in the framework `settings.json`'s separate CLDR `locale` block). Blast radius: framework-wide — `req.culture`/`gina.config.culture` now reflect the configured culture, `t()` resolves real strings for any bundle shipping a `locales/` dir (others unaffected via the `existsSync` guard). Makes the #222 client validator-label overlay (gated on a truthy `gina.config.culture`) actually reachable; Slice 1 of the validator + i18n unification. **#B84 (same day) completes the activation on the WARM route path:** Slice 1 negotiated `req.culture` only on the COLD (uncached) path — `core/server.js handle()`'s cached-route fast-path (`if ( hasCachedRoute ) { isRoute = hasCachedRoute; … break; }` ~`:4964`) breaks the routing loop BEFORE the cold-path negotiation site (~`:5115`), and the route cache persists across requests (the module-scoped `routingLib` at `:91` is a stable gen-0 binding — server.js is load-once; `Routing._cached` is set at `:5198` on the cold request and read at `:4964` on every later hit to the same `method:pathname`), so the SECOND hit to any URL is warm and left `req.culture` unset → `controller.js` embeds `''` into `page.environment.culture` → `gina.config.culture === ''` → the #222 client overlay inert on warm reloads (a warm BROWSER reload reproduces; `curl` masks it — a fresh cold-only hit after a restart still negotiates). Fixed by extracting the negotiation into a per-request `var _negotiateReqCulture = function(req, routeBundle)` closure in `handle()` scope, called on BOTH the warm (`( req.routing && req.routing.bundle ) || bundle` — `getCached` already ran `compareUrls`→`checkRouteParams`, so `req.routing` incl. `bundle`/`culturePrefix` is populated) and cold (`routing[name].bundle`) paths. **The resolved culture is NEVER cached with the shared route entry** — it's per-request (cookie / Accept-Language), so pinning it would cross-request-bleed (the #B65/#B66 per-request-vs-worker-global class); the consumer's first suggestion "cache `req.culture` with the route" was rejected for exactly this, their second "re-negotiate on the warm path" shipped. **Rule: any per-request state derived after a route match must be re-derived on the cached fast-path too — `if ( hasCachedRoute ) { … break; }` bypasses everything below it in the loop.** Server-side, NO dist rebuild; surfaced by a consumer report-back that Slice 1's cold-only activation had missed. Tests: `test/core/server-culture-negotiation.test.js` (two-path source pins + a behavioural replica of the fast-path-breaks-before-cold-site structure driving the real `negotiateCulture` + a subtract proving the warm-path call is load-bearing) + a daemonless cold→warm `gina-container` boot (`req.culture === 'xx_XX'` on cold AND warm over real HTTP; `''` pre-fix). Established 2026-07-07.
|
|
979
979
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gina",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.14",
|
|
4
4
|
"description": "Node.js MVC framework with built-in HTTP/2, multi-bundle architecture, and scope-based data isolation — no Express dependency",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nodejs",
|
|
@@ -73,12 +73,12 @@
|
|
|
73
73
|
"gina-container": "bin/gina-container",
|
|
74
74
|
"gina-init": "bin/gina-init"
|
|
75
75
|
},
|
|
76
|
-
"main": "./framework/v0.5.
|
|
76
|
+
"main": "./framework/v0.5.14/core/gna",
|
|
77
77
|
"exports": {
|
|
78
78
|
".": {
|
|
79
79
|
"types": "./types/index.d.ts",
|
|
80
80
|
"import": "./index.mjs",
|
|
81
|
-
"require": "./framework/v0.5.
|
|
81
|
+
"require": "./framework/v0.5.14/core/gna.js"
|
|
82
82
|
},
|
|
83
83
|
"./gna": {
|
|
84
84
|
"types": "./types/gna.d.ts",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.5.13
|