gina 0.6.2 → 0.6.3
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 +57 -0
- package/README.md +41 -12
- package/ROADMAP.md +3 -2
- package/bin/cli +19 -2
- package/framework/v0.6.3/VERSION +1 -0
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +6 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/index.html +1 -0
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +50 -1
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +457 -57
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.js +1457 -58
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js +625 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/index.js +114 -0
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.js +14 -3
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.js +14 -3
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.v3.js +29 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.v4.js +29 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/session-store.js +24 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/session-store.js +33 -9
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/lib/session-store.js +25 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/session-store.js +26 -2
- package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.js +201 -21
- package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-nunjucks.js +8 -0
- package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-swig.js +85 -4
- package/framework/{v0.6.2 → v0.6.3}/core/gna.js +23 -1
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/src/main.js +9 -5
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/README.md +20 -0
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/src/form-validator.js +119 -43
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/src/main.js +451 -9
- package/framework/{v0.6.2 → v0.6.3}/core/server.isaac.js +50 -54
- package/framework/{v0.6.2 → v0.6.3}/core/server.js +240 -3
- package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/index.js +6 -4
- package/framework/{v0.6.2 → v0.6.3}/core/template/conf/settings.json +10 -0
- package/framework/{v0.6.2 → v0.6.3}/lib/cache/README.md +9 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/verify.js +11 -9
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/mcp-start.js +21 -12
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/help.txt +1 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/init.js +13 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/dto/src/main.js +18 -11
- package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/index.js +29 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/speaker.js +30 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/math/index.js +57 -6
- package/framework/{v0.6.2 → v0.6.3}/lib/merge/src/main.js +34 -5
- package/framework/{v0.6.2 → v0.6.3}/lib/render-cache/src/main.js +77 -4
- package/framework/{v0.6.2 → v0.6.3}/lib/routing/src/main.js +13 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/routing-introspect/src/main.js +64 -2
- package/framework/v0.6.3/lib/secrets/src/backends/env.js +75 -0
- package/framework/{v0.6.2 → v0.6.3}/package.json +1 -1
- package/gna.js +5 -4
- package/llms.txt +19 -17
- package/package.json +5 -4
- package/schema/connectors.json +2 -2
- package/schema/routing.json +5 -0
- package/schema/settings.json +6 -1
- package/script/generate_gna_types.js +1 -1
- package/script/soak/couchbase-soak.js +1316 -0
- package/types/globals.d.ts +2 -0
- package/types/gna.d.ts +5 -0
- package/types/index.d.ts +1 -0
- package/utils/helper.js +38 -7
- package/framework/v0.6.2/VERSION +0 -1
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -603
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.6.2/lib/secrets/src/backends/env.js +0 -60
- /package/framework/{v0.6.2 → v0.6.3}/AUTHORS +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/config.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/content.encoding +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/mime.types +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/entity.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/router.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/server.express.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/status.codes +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/console.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/context.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/path.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/task.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/text.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/async/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/config.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/job/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/model.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/proc.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/session-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/shell.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/state.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/url/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/url/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/validator.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-session/src/main.js +0 -0
|
@@ -300,7 +300,7 @@
|
|
|
300
300
|
comments are lost on rewrite.
|
|
301
301
|
|
|
302
302
|
Driver resolution uses the framework's built-in driver range table
|
|
303
|
-
(see `lib/
|
|
303
|
+
(see `lib/connector-registry/src/main.js` DRIVER_MAP):
|
|
304
304
|
|
|
305
305
|
couchbase → couchbase >= 3.0.0
|
|
306
306
|
redis → ioredis >= 5.0.0
|
|
@@ -1155,7 +1155,19 @@ function Initialize(opt) {
|
|
|
1155
1155
|
// ps-independent (works on minimal images without procps, and under
|
|
1156
1156
|
// Bun) and parses/trims the pid so a trailing newline can't break the
|
|
1157
1157
|
// check. Mirrors lib/cmd/framework/reset.js detectRunning.
|
|
1158
|
-
let pid =
|
|
1158
|
+
let pid = null;
|
|
1159
|
+
try {
|
|
1160
|
+
pid = parseInt(String(fs.readFileSync(filename)).trim(), 10);
|
|
1161
|
+
} catch (readErr) {
|
|
1162
|
+
// An unreadable run dir entry must never abort the whole init
|
|
1163
|
+
// chain: a nested directory throws EISDIR, an entry removed by a
|
|
1164
|
+
// concurrent prune throws ENOENT, an unreadable one EACCES. Skip
|
|
1165
|
+
// it instead of throwing out of the loop — and deliberately do NOT
|
|
1166
|
+
// prune it, since the rmSync branches below are only safe for
|
|
1167
|
+
// entries whose content was actually read.
|
|
1168
|
+
console.debug('Skipping unreadable run dir entry `'+ filename +'` ['+ ( readErr && readErr.code || readErr ) +']');
|
|
1169
|
+
continue;
|
|
1170
|
+
}
|
|
1159
1171
|
if (!pid || isNaN(pid)) {
|
|
1160
1172
|
filenameObj.rmSync();
|
|
1161
1173
|
continue;
|
|
@@ -52,14 +52,18 @@
|
|
|
52
52
|
* The runtime pipe still enforces TYPE (isInteger/isNumber) + enum + length + format
|
|
53
53
|
* + required.
|
|
54
54
|
*
|
|
55
|
-
* ## The `$` guard (#DTO2 — measured)
|
|
55
|
+
* ## The `$` guard (#DTO2 — measured; rationale updated with #B239)
|
|
56
56
|
* `toRules()` compiles no `$` of its own (see above), but a `$` can still reach the
|
|
57
57
|
* emitted rules through AUTHORED content — an enum value (`dto.enum(['$100'])`), a
|
|
58
|
-
* field NAME, or a date mask.
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
58
|
+
* field NAME, or a date mask. `$` is the validation engine's RESERVED cross-field
|
|
59
|
+
* reference sigil, so whether an authored `$` survives as a literal depends on a
|
|
60
|
+
* runtime field-name COLLISION: a token naming a sibling field is consumed upstream
|
|
61
|
+
* as a reference (substituted + quoted — #B240 — so the literal can never match),
|
|
62
|
+
* while a token naming no field stays literal only since #B239 (before that it
|
|
63
|
+
* crashed the whole pass; earlier still, ANY leftover `$` crashed server-side —
|
|
64
|
+
* #B127/#B234). Deterministic literal semantics are impossible to guarantee for a
|
|
65
|
+
* `$`, so `toRules()` REJECTS one anywhere in its output at build/boot rather than
|
|
66
|
+
* let a DTO validate differently depending on which field names exist beside it.
|
|
63
67
|
* `toJsonSchema()` is deliberately NOT guarded — a `$` is perfectly valid in a JSON
|
|
64
68
|
* Schema enum, so a currency-style DTO still documents (and still serves as a
|
|
65
69
|
* `param.responseDto`); only the runtime-validation projection is constrained.
|
|
@@ -426,7 +430,8 @@ DtoObject.prototype.toJsonSchema = function (dialect, opts) {
|
|
|
426
430
|
* rather than emit a `$` (see the `$` guard in the module header).
|
|
427
431
|
*
|
|
428
432
|
* @throws {Error} when an authored enum value / field name / date mask puts a `$` in
|
|
429
|
-
* the emitted rules —
|
|
433
|
+
* the emitted rules — the engine would reinterpret it
|
|
434
|
+
* collision-dependently (reserved sigil; see the module header).
|
|
430
435
|
* @returns {object}
|
|
431
436
|
*/
|
|
432
437
|
DtoObject.prototype.toRules = function () {
|
|
@@ -434,10 +439,12 @@ DtoObject.prototype.toRules = function () {
|
|
|
434
439
|
for (var f in this._shape) {
|
|
435
440
|
rules[f] = this._shape[f].toFieldRules();
|
|
436
441
|
}
|
|
437
|
-
// #DTO2 —
|
|
438
|
-
//
|
|
439
|
-
//
|
|
440
|
-
//
|
|
442
|
+
// #DTO2 — `$` is the engine's reserved cross-field sigil: whether an authored
|
|
443
|
+
// `$` stays literal depends on a runtime field-name collision (a colliding
|
|
444
|
+
// token is substituted + quoted upstream — #B240 — so the literal can never
|
|
445
|
+
// match; a non-colliding one stays literal only since #B239). Fail at
|
|
446
|
+
// build/boot with a message that names the culprit, never validate
|
|
447
|
+
// collision-dependently at request time.
|
|
441
448
|
if ( /\$/.test(JSON.stringify(rules)) ) {
|
|
442
449
|
// NOTE: every `$` below is followed by a SPACE, deliberately. A message carrying
|
|
443
450
|
// the sequence `$` + backtick/quote/digit is a String.replace() dollar-pattern
|
|
@@ -31,6 +31,19 @@ function FileContainer(opt, loggers) {
|
|
|
31
31
|
var processProperties = null;
|
|
32
32
|
var filenames = {};
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Resolves the framework's connection settings for the file container.
|
|
36
|
+
*
|
|
37
|
+
* Runs before the framework globals are guaranteed to exist (see the
|
|
38
|
+
* "hack for early calls" block below), so every global read is guarded.
|
|
39
|
+
*
|
|
40
|
+
* @inner
|
|
41
|
+
* @param {object} opt - Logger options; mqPort/hostV4/bindHost are filled in here.
|
|
42
|
+
* @returns {void}
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* init({ });
|
|
46
|
+
*/
|
|
34
47
|
function init(opt) {
|
|
35
48
|
|
|
36
49
|
// ---------- BO - hack for early calls
|
|
@@ -52,7 +65,22 @@ function FileContainer(opt, loggers) {
|
|
|
52
65
|
|
|
53
66
|
var settings = { mq_port: 8125, host_v4: '127.0.0.1' };
|
|
54
67
|
try {
|
|
55
|
-
|
|
68
|
+
// #B160-sibling (3) — honour GINA_HOMEDIR so an isolated home resolves
|
|
69
|
+
// its OWN settings instead of the invoking user's. The variable already
|
|
70
|
+
// carries the `/.gina` segment (bin/cli, bin/gina-init both compose it
|
|
71
|
+
// as `home + '/.gina'`), so it replaces that whole prefix, not just the
|
|
72
|
+
// home.
|
|
73
|
+
// Three tiers, and process.env is load-bearing rather than defensive:
|
|
74
|
+
// this container is constructed BEFORE bin/cli imports the OS env into
|
|
75
|
+
// process.gina (measured: process.gina is empty here, while
|
|
76
|
+
// process.env.GINA_HOMEDIR still holds the value), so the framework-env
|
|
77
|
+
// tier alone would never fire on the CLI path. Framework env still wins
|
|
78
|
+
// where it is populated (bundle processes, gina-container), matching the
|
|
79
|
+
// two-tier read used by the secrets backend and resolveHttpHost.
|
|
80
|
+
var _ginaHome = (typeof getEnvVar === 'function' && getEnvVar('GINA_HOMEDIR'))
|
|
81
|
+
|| process.env.GINA_HOMEDIR
|
|
82
|
+
|| (getUserHome() + '/.gina');
|
|
83
|
+
settings = require( _ginaHome + '/' + shortVersion + '/settings.json');
|
|
56
84
|
} catch (err) {}
|
|
57
85
|
|
|
58
86
|
opt.mqPort = settings.mq_port;
|
|
@@ -15,6 +15,20 @@ function MQSpeaker(opt, loggers, cb) {
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Resolves the framework's connection settings, then starts the speaker.
|
|
20
|
+
*
|
|
21
|
+
* Runs before the framework globals are guaranteed to exist (see the
|
|
22
|
+
* "hack for early calls" block below), so every global read is guarded.
|
|
23
|
+
*
|
|
24
|
+
* @inner
|
|
25
|
+
* @param {object} opt - Logger options; mqPort/hostV4/bindHost are filled in here.
|
|
26
|
+
* @param {function} cb - Passed through to startMQSpeaker.
|
|
27
|
+
* @returns {*} Whatever startMQSpeaker() returns.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* init({ }, function(err, speaker) { });
|
|
31
|
+
*/
|
|
18
32
|
function init(opt, cb) {
|
|
19
33
|
|
|
20
34
|
// ---------- BO - hack for early calls
|
|
@@ -36,7 +50,22 @@ function MQSpeaker(opt, loggers, cb) {
|
|
|
36
50
|
|
|
37
51
|
var settings = { mq_port: 8125, host_v4: '127.0.0.1' };
|
|
38
52
|
try {
|
|
39
|
-
|
|
53
|
+
// #B160-sibling (3) — honour GINA_HOMEDIR so an isolated home resolves
|
|
54
|
+
// its OWN settings instead of the invoking user's. The variable already
|
|
55
|
+
// carries the `/.gina` segment (bin/cli, bin/gina-init both compose it
|
|
56
|
+
// as `home + '/.gina'`), so it replaces that whole prefix, not just the
|
|
57
|
+
// home.
|
|
58
|
+
// Three tiers, and process.env is load-bearing rather than defensive:
|
|
59
|
+
// this container is constructed BEFORE bin/cli imports the OS env into
|
|
60
|
+
// process.gina (measured: process.gina is empty here, while
|
|
61
|
+
// process.env.GINA_HOMEDIR still holds the value), so the framework-env
|
|
62
|
+
// tier alone would never fire on the CLI path. Framework env still wins
|
|
63
|
+
// where it is populated (bundle processes, gina-container), matching the
|
|
64
|
+
// two-tier read used by the secrets backend and resolveHttpHost.
|
|
65
|
+
var _ginaHome = (typeof getEnvVar === 'function' && getEnvVar('GINA_HOMEDIR'))
|
|
66
|
+
|| process.env.GINA_HOMEDIR
|
|
67
|
+
|| (getUserHome() + '/.gina');
|
|
68
|
+
settings = require( _ginaHome + '/' + shortVersion + '/settings.json');
|
|
40
69
|
} catch (err) {}
|
|
41
70
|
|
|
42
71
|
// Guard: settings.mq_port may be an unresolved template placeholder (e.g. '${}'
|
|
@@ -194,10 +194,24 @@ function MathHelper() {
|
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
+
/**
|
|
198
|
+
* Serialize an object or array into a stable string for checksumming.
|
|
199
|
+
*
|
|
200
|
+
* Plain objects become sorted `key:value` pairs joined with `,` (function
|
|
201
|
+
* properties skipped); arrays become the JSON of a sorted copy. Both forms
|
|
202
|
+
* are member-order-insensitive, and the input is never mutated.
|
|
203
|
+
*
|
|
204
|
+
* @private
|
|
205
|
+
* @param {object|array} obj
|
|
206
|
+
* @returns {string} serialized form
|
|
207
|
+
* */
|
|
197
208
|
var objectToString = function(obj) {
|
|
198
209
|
var str = '';
|
|
199
210
|
if (Array.isArray(obj)) {
|
|
200
|
-
|
|
211
|
+
// #B208 — serialize a sorted COPY into `str`: the previous assignment
|
|
212
|
+
// targeted `obj` and returned the still-empty `str`, collapsing every
|
|
213
|
+
// array input to the checksum of '' — and `sort()` mutated the caller's array.
|
|
214
|
+
str = JSON.stringify(obj.slice().sort(), null, 0);
|
|
201
215
|
} else {
|
|
202
216
|
var arr = [], i = 0;
|
|
203
217
|
for (let k in obj) {
|
|
@@ -213,13 +227,29 @@ function MathHelper() {
|
|
|
213
227
|
};
|
|
214
228
|
|
|
215
229
|
/**
|
|
216
|
-
* Check sum from file or form data
|
|
230
|
+
* Check sum from a file or from form data.
|
|
217
231
|
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
232
|
+
* Dispatch: an object or array input is serialized first (a plain object as
|
|
233
|
+
* sorted `key:value` pairs joined with `,` — see `objectToString`). A string
|
|
234
|
+
* ending in an extension shape — a dot followed by 1-10 alphanumerics
|
|
235
|
+
* (`.txt`, `.js`, `.json`, `.TXT`, `.c`, ...) — is then PROBED as a
|
|
236
|
+
* filename: the file branch is taken only when the WHOLE string resolves to
|
|
237
|
+
* an existing regular file — anything else (no such entry, name too long, a
|
|
238
|
+
* directory, a NUL-carrying string) is hashed as data. Note the probe needs
|
|
239
|
+
* an extension-shaped tail: an extension-less path (`Makefile`, `LICENSE`)
|
|
240
|
+
* is hashed as a data string, never read from disk. (#B207/#B210)
|
|
241
|
+
*
|
|
242
|
+
* @param {string|object|array} filename|data - path to an existing file, or raw data
|
|
243
|
+
* @param {string} [algorithm] - e.g.: sha1 (defaults to md5)
|
|
244
|
+
* @param {string} [encoding] - e.g.: hex (default)
|
|
221
245
|
*
|
|
222
246
|
* @returns {string} checksum
|
|
247
|
+
* @throws {Error} on an unreadable existing file (e.g. EACCES) or a digest failure
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* var math = require('gina').lib.math;
|
|
251
|
+
* math.checkSumSync({ contact: 'user@example.com' }, 'sha1'); // hash of `contact:user@example.com`
|
|
252
|
+
* math.checkSumSync('/tmp/manifest.txt', 'sha1'); // hash of the file bytes
|
|
223
253
|
* */
|
|
224
254
|
self.checkSumSync = function(filename, algorithm, encoding) {
|
|
225
255
|
var sum = null;
|
|
@@ -229,7 +259,28 @@ function MathHelper() {
|
|
|
229
259
|
filename = objectToString(filename);
|
|
230
260
|
}
|
|
231
261
|
|
|
232
|
-
|
|
262
|
+
// #B207 — an extension-shaped tail is only a HINT that the input is a
|
|
263
|
+
// filename: serialized data ends the same way (`user@example.com`,
|
|
264
|
+
// `report.pdf`). Only take the file branch when the path resolves to an
|
|
265
|
+
// actual file; data that merely looks like a name falls through.
|
|
266
|
+
var isFile = false;
|
|
267
|
+
// #B210 — any real extension shape (dot + 1-10 alphanumerics), not just
|
|
268
|
+
// dot+3-lowercase: file.js / file.json / FILE.TXT used to be hashed as
|
|
269
|
+
// PATH STRINGS because the narrow probe never fired for them.
|
|
270
|
+
if ( /(\.[A-Za-z0-9]{1,10})$/.test(filename) ) { // must be a string
|
|
271
|
+
try {
|
|
272
|
+
isFile = fs.statSync(filename).isFile();
|
|
273
|
+
} catch (statErr) {
|
|
274
|
+
// ENOENT / ENAMETOOLONG / ENOTDIR / ERR_INVALID_ARG_VALUE: the
|
|
275
|
+
// input cannot name an existing file — treat it as data. Anything
|
|
276
|
+
// else (e.g. EACCES on a real entry) must keep failing loudly.
|
|
277
|
+
if ( !/^(ENOENT|ENAMETOOLONG|ENOTDIR|ERR_INVALID_ARG_VALUE)$/.test(statErr.code) ) {
|
|
278
|
+
throw statErr;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
if (isFile) {
|
|
233
284
|
// from filename
|
|
234
285
|
sum = checkSum( fs.readFileSync(filename), algorithm, encoding )
|
|
235
286
|
} else {
|
|
@@ -48,6 +48,7 @@ function Merge() {
|
|
|
48
48
|
* merge({ a: 1 }, { a: 9 }, true) // { a: 9 }
|
|
49
49
|
* merge([1, 2], [3, 4]) // [1, 2, 3, 4]
|
|
50
50
|
* merge([1, 2], [3, 4], true) // [3, 4]
|
|
51
|
+
* merge({ a: [null, 'x'] }, { a: [null, 'x'] }) // { a: [null, 'x'] } — null elements are preserved (#B226)
|
|
51
52
|
*/
|
|
52
53
|
var browse = function (_target, _source) {
|
|
53
54
|
|
|
@@ -252,8 +253,25 @@ function Merge() {
|
|
|
252
253
|
return target;
|
|
253
254
|
};
|
|
254
255
|
|
|
255
|
-
|
|
256
|
-
|
|
256
|
+
/**
|
|
257
|
+
* Merge two arrays. Will not merge function items: this is normal.
|
|
258
|
+
* Merging plain arrays is OK, merging collections is still experimental.
|
|
259
|
+
*
|
|
260
|
+
* `null` elements are VALUES and are preserved (#B226): `typeof null ==
|
|
261
|
+
* 'object'`, so the object-exclusion guards below each carry an explicit
|
|
262
|
+
* null exception — without it a no-override merge silently dropped `null`
|
|
263
|
+
* from arrays (while `''` / `false` / `0` survived), which stripped the
|
|
264
|
+
* first slot of positional argument arrays such as the documented
|
|
265
|
+
* validator rule `"setFlash": [null, "message"]` on the client-side
|
|
266
|
+
* rules path.
|
|
267
|
+
*
|
|
268
|
+
* @inner
|
|
269
|
+
* @private
|
|
270
|
+
* @param {Array} options - Source array (merged INTO target)
|
|
271
|
+
* @param {Array} target - Target array (wins on conflicts unless `override`)
|
|
272
|
+
* @param {boolean} override - `true` lets `options` win / replace
|
|
273
|
+
* @returns {Array|undefined} the merged array
|
|
274
|
+
*/
|
|
257
275
|
var mergeArray = function(options, target, override) {
|
|
258
276
|
newTarget = [];
|
|
259
277
|
|
|
@@ -358,7 +376,12 @@ function Merge() {
|
|
|
358
376
|
// ok, but don't merge objects
|
|
359
377
|
a = 0;
|
|
360
378
|
for (; a < target.length; ++a ) {
|
|
361
|
-
|
|
379
|
+
// #B226 — typeof null == 'object': a null element is a value
|
|
380
|
+
// (e.g. the first slot of a positional rule-argument array),
|
|
381
|
+
// not a collection item to exclude; this rebuild dropped it
|
|
382
|
+
// while '' / false / 0 survived
|
|
383
|
+
// was: if ( typeof(target[a]) != 'object' && newTarget.indexOf(target[a]) == -1 ) {
|
|
384
|
+
if ( ( typeof(target[a]) != 'object' || target[a] === null ) && newTarget.indexOf(target[a]) == -1 ) {
|
|
362
385
|
newTarget.push(target[a]);
|
|
363
386
|
}
|
|
364
387
|
}
|
|
@@ -443,7 +466,11 @@ function Merge() {
|
|
|
443
466
|
localKeyComparison = ownPropertyNames;
|
|
444
467
|
if ( target.indexOf(options[a]) > -1 && override) {
|
|
445
468
|
target.splice(target.indexOf(options[a]), 1, options[a])
|
|
446
|
-
|
|
469
|
+
// #B226 — a null source element must not enter the index-merge:
|
|
470
|
+
// `for (var k in null)` is a no-op, so null used to surface as
|
|
471
|
+
// `{}` here; let it fall through to the primitive push below
|
|
472
|
+
// was: } else if ( typeof(newTarget[a]) == 'undefined' && typeof(options[a]) == 'object' ) {
|
|
473
|
+
} else if ( typeof(newTarget[a]) == 'undefined' && typeof(options[a]) == 'object' && options[a] != null ) {
|
|
447
474
|
// merge using index
|
|
448
475
|
newTarget = target;
|
|
449
476
|
|
|
@@ -488,7 +515,9 @@ function Merge() {
|
|
|
488
515
|
newTarget[a] = target[a]
|
|
489
516
|
}
|
|
490
517
|
// array with string key
|
|
491
|
-
|
|
518
|
+
// #B226 — same typeof-null exception as the rebuild above
|
|
519
|
+
// was: else if (newTarget.indexOf(options[a]) == -1 && typeof(options[a]) != 'object') {
|
|
520
|
+
else if (newTarget.indexOf(options[a]) == -1 && ( typeof(options[a]) != 'object' || options[a] === null )) {
|
|
492
521
|
newTarget.push(options[a]);
|
|
493
522
|
}
|
|
494
523
|
// collection without keyComparison
|
|
@@ -171,6 +171,14 @@ var _l2ErrorWarned = false;
|
|
|
171
171
|
// a typo that silently disabled caching (#B114) — validateConfig names it loudly.
|
|
172
172
|
var _RC_STRATEGIES = /^(memory|fs|redis)$/i;
|
|
173
173
|
|
|
174
|
+
// #B238 — accepted `server.cache.name` grammar (the RFC 9211 Cache-Status
|
|
175
|
+
// identifier): a conservative RFC 8941 Token subset — a letter, then up to 63
|
|
176
|
+
// of [A-Za-z0-9._-]. Same charset as resolveReleaseToken's sanitizer, but this
|
|
177
|
+
// one VALIDATES rather than sanitizes: an identifier the operator did not
|
|
178
|
+
// write must never reach the wire, so an invalid value falls back to the
|
|
179
|
+
// default and validateConfig names it at boot.
|
|
180
|
+
var _RC_NAME_RE = /^[A-Za-z][A-Za-z0-9._-]{0,63}$/;
|
|
181
|
+
|
|
174
182
|
/**
|
|
175
183
|
* Once-per-process L2 failure warn. Fail-open must stay silent per-operation
|
|
176
184
|
* (no log spam during an outage — the store's client `error` listener already
|
|
@@ -913,22 +921,36 @@ function RenderCache(options) {
|
|
|
913
921
|
* - an unknown `cache.type` (bundle-wide or per-route) — the fold made the config
|
|
914
922
|
* non-silent; this names the typo (#B114);
|
|
915
923
|
* - a redis route with no effective ttl but WITH `invalidateOnEvents` — the legit
|
|
916
|
-
* invalidate-only pattern, still orphaned on a namespace rotation
|
|
924
|
+
* invalidate-only pattern, still orphaned on a namespace rotation;
|
|
925
|
+
* - an invalid `server.cache.name` (#B238) — ignored, the Cache-Status identifier
|
|
926
|
+
* stays `gina-cache` (see {@link RenderCache.resolveCacheName});
|
|
927
|
+
* - `context.hidePoweredBy` + `context.cacheEnabled` with no validly-set name
|
|
928
|
+
* (#B238) — the operator declared hide-the-stack intent but every cache-enabled
|
|
929
|
+
* GET still names the framework in Cache-Status. Warn-not-flip is deliberate:
|
|
930
|
+
* the identifier is a documented-stable wire value (0.5.18 promised
|
|
931
|
+
* `gina-cache; hit` grep-stability), so it never changes without an explicit
|
|
932
|
+
* operator choice — the warn hands them both one-line exits.
|
|
917
933
|
*
|
|
918
934
|
* @memberof RenderCache
|
|
919
935
|
* @static
|
|
920
|
-
* @param {object} serverCache - Merged `server.cache` (type/store/ttl/sliding/maxAge/…).
|
|
936
|
+
* @param {object} serverCache - Merged `server.cache` (type/store/ttl/sliding/maxAge/name/…).
|
|
921
937
|
* @param {object} routing - The bundle routing map (`{ ruleName: { cache, bundle, … } }`).
|
|
922
938
|
* @param {string} [bundle] - When set, per-route checks skip routes of another bundle.
|
|
939
|
+
* @param {object} [context] - Caller-supplied boot context for the #B238 disclosure
|
|
940
|
+
* warn: `{ hidePoweredBy: boolean, cacheEnabled: boolean }`
|
|
941
|
+
* (both must be `true` for it to fire). Omitting the
|
|
942
|
+
* argument disables only that warn — every other check
|
|
943
|
+
* is unchanged (back-compat with pre-#B238 callers).
|
|
923
944
|
* @returns {{ fatal: (string|null), warnings: string[], redisConfigured: boolean }}
|
|
924
945
|
*
|
|
925
946
|
* @example
|
|
926
|
-
* var v = RenderCache.validateConfig(serverCache, gna.getConfig('routing'), bundle
|
|
947
|
+
* var v = RenderCache.validateConfig(serverCache, gna.getConfig('routing'), bundle,
|
|
948
|
+
* { hidePoweredBy: hpb, cacheEnabled: enabled });
|
|
927
949
|
* v.warnings.forEach(function (w) { console.warn('[render-cache] ' + w); });
|
|
928
950
|
* if (v.fatal) { console.emerg('[render-cache] ' + v.fatal); process.exit(1); }
|
|
929
951
|
* if (v.redisConfigured) { process.gina._renderCacheStore = lib.RenderCacheStore(serverCache.store); }
|
|
930
952
|
*/
|
|
931
|
-
RenderCache.validateConfig = function(serverCache, routing, bundle) {
|
|
953
|
+
RenderCache.validateConfig = function(serverCache, routing, bundle, context) {
|
|
932
954
|
var out = { fatal: null, warnings: [], redisConfigured: false };
|
|
933
955
|
serverCache = serverCache || {};
|
|
934
956
|
routing = routing || {};
|
|
@@ -938,6 +960,20 @@ RenderCache.validateConfig = function(serverCache, routing, bundle) {
|
|
|
938
960
|
out.warnings.push('unknown server.cache.type `' + bundleType + '` (expected memory|fs|redis) — this bundle-wide default is ignored; routes inheriting it are NOT cached');
|
|
939
961
|
}
|
|
940
962
|
|
|
963
|
+
// #B238 — `server.cache.name` (the Cache-Status identifier) sanity + disclosure.
|
|
964
|
+
var _declaredName = serverCache.name;
|
|
965
|
+
var _nameIsSet = ( typeof(_declaredName) === 'string' && _RC_NAME_RE.test(_declaredName) );
|
|
966
|
+
if ( typeof(_declaredName) !== 'undefined' && !_nameIsSet ) {
|
|
967
|
+
out.warnings.push('invalid server.cache.name `' + String(_declaredName) + '` — must be a letter followed by up to 63 of [A-Za-z0-9._-] (a conservative RFC 8941 token subset); ignored, the Cache-Status identifier stays `gina-cache`');
|
|
968
|
+
}
|
|
969
|
+
// Gated on the caller context: cacheEnabled (a disabled cache emits no
|
|
970
|
+
// Cache-Status — no disclosure, no noise) and hidePoweredBy (no declared
|
|
971
|
+
// intent, no nag). An explicit `"name": "gina-cache"` counts as validly
|
|
972
|
+
// set — the documented silence path for keeping the default wire.
|
|
973
|
+
if ( context && context.hidePoweredBy === true && context.cacheEnabled === true && !_nameIsSet ) {
|
|
974
|
+
out.warnings.push('server.hidePoweredBy is set but the Cache-Status identifier still names the framework (`gina-cache`) — set server.cache.name (any token, e.g. "cache") to close the disclosure, or explicitly "gina-cache" to keep the current wire and silence this warning');
|
|
975
|
+
}
|
|
976
|
+
|
|
941
977
|
for (var name in routing) {
|
|
942
978
|
var route = routing[name];
|
|
943
979
|
if ( !route || typeof(route) !== 'object' ) { continue; } // skip $schema / annotations
|
|
@@ -990,6 +1026,43 @@ RenderCache.validateConfig = function(serverCache, routing, bundle) {
|
|
|
990
1026
|
return out;
|
|
991
1027
|
};
|
|
992
1028
|
|
|
1029
|
+
/**
|
|
1030
|
+
* #B238 — resolve the Cache-Status response-header identifier for a bundle (pure, static).
|
|
1031
|
+
*
|
|
1032
|
+
* RFC 9211 §2 leaves the cache identifier to the deployment (a free-form
|
|
1033
|
+
* structured-field Token). gina's default is `gina-cache`; an operator picks
|
|
1034
|
+
* their own via `server.cache.name` (the settings.json `cache` block — rides
|
|
1035
|
+
* the same #B114 fold as `type`/`store`, so an env.json `server.cache.name`
|
|
1036
|
+
* wins over it like every sibling key). An invalid value is IGNORED here
|
|
1037
|
+
* (default returned) and named loudly by {@link RenderCache.validateConfig}
|
|
1038
|
+
* at boot — never sanitized into a name the operator did not write.
|
|
1039
|
+
*
|
|
1040
|
+
* Accepted grammar is a deliberate STRICT SUBSET of the RFC 8941 Token
|
|
1041
|
+
* (a letter, then up to 63 of `[A-Za-z0-9._-]`) — every accepted value is a
|
|
1042
|
+
* valid sf-token, and the charset matches the release-namespace sanitizer
|
|
1043
|
+
* (`resolveReleaseToken`), keeping the two token surfaces aligned.
|
|
1044
|
+
*
|
|
1045
|
+
* Resolved ONCE at boot (server.js stamps `instance._cacheName` beside the
|
|
1046
|
+
* sibling cache scalars) and read by all three Cache-Status mint sites —
|
|
1047
|
+
* both engines, hit and miss — so the identifier can never disagree across
|
|
1048
|
+
* engines or outcomes.
|
|
1049
|
+
*
|
|
1050
|
+
* @memberof RenderCache
|
|
1051
|
+
* @static
|
|
1052
|
+
* @param {object} [serverCache] - Merged `server.cache` (the #B114 post-fold block).
|
|
1053
|
+
* @returns {string} The identifier to mint (`serverCache.name` when valid, else `'gina-cache'`).
|
|
1054
|
+
*
|
|
1055
|
+
* @example
|
|
1056
|
+
* RenderCache.resolveCacheName({ name: 'cache' }); // 'cache'
|
|
1057
|
+
* RenderCache.resolveCacheName({ name: 'bad name!' }); // 'gina-cache' (validateConfig warns at boot)
|
|
1058
|
+
* RenderCache.resolveCacheName({}); // 'gina-cache'
|
|
1059
|
+
* RenderCache.resolveCacheName(null); // 'gina-cache'
|
|
1060
|
+
*/
|
|
1061
|
+
RenderCache.resolveCacheName = function(serverCache) {
|
|
1062
|
+
var name = ( serverCache ) ? serverCache.name : null;
|
|
1063
|
+
return ( typeof(name) === 'string' && _RC_NAME_RE.test(name) ) ? name : 'gina-cache';
|
|
1064
|
+
};
|
|
1065
|
+
|
|
993
1066
|
/**
|
|
994
1067
|
* #B130 — CSP-nonce re-stamp for served cache hits (pure, static).
|
|
995
1068
|
*
|
|
@@ -230,6 +230,13 @@ function Routing() {
|
|
|
230
230
|
if ( typeof(routeObject.queryTimeout) != 'undefined' ) {
|
|
231
231
|
params.queryTimeout = parseTimeout(routeObject.queryTimeout);
|
|
232
232
|
}
|
|
233
|
+
// #SPA1 — propagate the per-route content-negotiation capability to
|
|
234
|
+
// req.routing.negotiate (top-level, NOT req.routing.param.* — the #CSRF2
|
|
235
|
+
// trap). Assigned only when declared, so a routing.json that never mentions
|
|
236
|
+
// `negotiate` produces a byte-identical params object.
|
|
237
|
+
if ( typeof(routeObject.negotiate) != 'undefined' ) {
|
|
238
|
+
params.negotiate = routeObject.negotiate;
|
|
239
|
+
}
|
|
233
240
|
|
|
234
241
|
// isRoute
|
|
235
242
|
return self.compareUrls(params, routeObject.url, req);
|
|
@@ -1221,7 +1228,12 @@ function Routing() {
|
|
|
1221
1228
|
route.toUrl = function (ignoreWebRoot) {
|
|
1222
1229
|
|
|
1223
1230
|
var urlProps = null;
|
|
1224
|
-
|
|
1231
|
+
// Slice 3 (#SPA1) — the client-served map ships the derived boolean
|
|
1232
|
+
// `isRedirect` instead of `param.control` (a dispatch key that stays
|
|
1233
|
+
// server-side); server-side routes still carry the full `param`, so
|
|
1234
|
+
// both forms are honoured. The `this.param &&` guard also keeps a
|
|
1235
|
+
// param-less route from throwing here.
|
|
1236
|
+
if ( this.isRedirect === true || /^redirect$/i.test(this.param && this.param.control) ) {
|
|
1225
1237
|
urlProps = self.getUrlProps(this.bundle, (env||GINA_ENV));
|
|
1226
1238
|
}
|
|
1227
1239
|
|
|
@@ -174,11 +174,63 @@ var requirementToPattern = function(raw) {
|
|
|
174
174
|
return { type: 'pattern', value: cleaned };
|
|
175
175
|
};
|
|
176
176
|
|
|
177
|
+
/**
|
|
178
|
+
* #B201 — annotates a numeric-type schema fragment with the rule's DIGIT bounds.
|
|
179
|
+
*
|
|
180
|
+
* `isInteger` / `isNumber` bounds constrain the LENGTH OF THE VALUE'S STRING
|
|
181
|
+
* FORM (a negative sign counts toward it), not the value's range — so they are
|
|
182
|
+
* deliberately NOT mapped to `minimum`/`maximum` (wrong for any negative:
|
|
183
|
+
* digit bounds [2,4] admit `[-999,-1] ∪ [10,9999]`, which no single range
|
|
184
|
+
* expresses) nor to `minLength`/`maxLength` (string-only assertions, inert on
|
|
185
|
+
* numeric types — a documented bound nothing enforces). Instead the fragment
|
|
186
|
+
* gains an honest human-readable `description` plus a namespaced
|
|
187
|
+
* machine-readable `x-gina-digitBounds` extension; both bundle:openapi and
|
|
188
|
+
* bundle:mcp copy fragment keys verbatim, so the annotations reach the
|
|
189
|
+
* generated schemas as-is.
|
|
190
|
+
*
|
|
191
|
+
* @inner
|
|
192
|
+
* @param {object} s - the fragment being built (mutated)
|
|
193
|
+
* @param {number|Array|boolean} v - the rule's declared value
|
|
194
|
+
* @returns {undefined}
|
|
195
|
+
*/
|
|
196
|
+
var annotateDigitBounds = function(s, v) {
|
|
197
|
+
var min = null, max = null;
|
|
198
|
+
if ( typeof(v) === 'number' ) {
|
|
199
|
+
min = v; // scalar N supplies minLength only — same arity contract as isString
|
|
200
|
+
} else if ( Array.isArray(v) ) {
|
|
201
|
+
if ( typeof(v[0]) === 'number' ) min = v[0];
|
|
202
|
+
if ( typeof(v[1]) === 'number' ) max = v[1];
|
|
203
|
+
}
|
|
204
|
+
if ( min === null && max === null ) return; // bare `true` — nothing declared
|
|
205
|
+
|
|
206
|
+
var bounds = {};
|
|
207
|
+
var text = null;
|
|
208
|
+
if ( min !== null && max !== null ) {
|
|
209
|
+
text = (min === max) ? ('exactly ' + min + ' digits') : (min + '-' + max + ' digits');
|
|
210
|
+
} else if ( min !== null ) {
|
|
211
|
+
text = 'at least ' + min + ' digits';
|
|
212
|
+
} else {
|
|
213
|
+
text = 'at most ' + max + ' digits';
|
|
214
|
+
}
|
|
215
|
+
if ( min !== null ) bounds.min = min;
|
|
216
|
+
if ( max !== null ) bounds.max = max;
|
|
217
|
+
|
|
218
|
+
s.description = text + ' (string-form length; a negative sign counts)';
|
|
219
|
+
s['x-gina-digitBounds'] = bounds;
|
|
220
|
+
};
|
|
221
|
+
|
|
177
222
|
/**
|
|
178
223
|
* Maps a single-field form-validator rules-object to a JSON Schema fragment
|
|
179
224
|
* (the inverse of the DTO builder's toRules, for the curated vocabulary). Pure
|
|
180
225
|
* and inline — routing-introspect does not require lib.dto (its purity contract).
|
|
181
226
|
*
|
|
227
|
+
* Length bounds (#B201): `isString` maps its scalar and array forms to real
|
|
228
|
+
* `minLength`/`maxLength` facets (`isString: 8` === `isString: [8]` — the
|
|
229
|
+
* scalar supplies a minimum, per the engine's arity contract). `isInteger` /
|
|
230
|
+
* `isNumber` digit bounds are annotated via {@link annotateDigitBounds}
|
|
231
|
+
* (description + `x-gina-digitBounds`) rather than mapped to value facets —
|
|
232
|
+
* see that function's JSDoc for why both facet mappings would be wrong.
|
|
233
|
+
*
|
|
182
234
|
* @memberof module:gina/lib/routing-introspect
|
|
183
235
|
* @param {object} rules - e.g. `{ isEmail: true, isString: [7] }`
|
|
184
236
|
* @returns {object} a JSON Schema fragment (always includes `type`)
|
|
@@ -186,6 +238,12 @@ var requirementToPattern = function(raw) {
|
|
|
186
238
|
* @example
|
|
187
239
|
* rulesToSchemaFragment({ isEmail: true, isString: [7] });
|
|
188
240
|
* // { type: 'string', format: 'email', minLength: 7 }
|
|
241
|
+
*
|
|
242
|
+
* @example
|
|
243
|
+
* rulesToSchemaFragment({ isInteger: [2, 4] });
|
|
244
|
+
* // { type: 'integer',
|
|
245
|
+
* // description: '2-4 digits (string-form length; a negative sign counts)',
|
|
246
|
+
* // 'x-gina-digitBounds': { min: 2, max: 4 } }
|
|
189
247
|
*/
|
|
190
248
|
var rulesToSchemaFragment = function(rules) {
|
|
191
249
|
var s = {};
|
|
@@ -201,10 +259,14 @@ var rulesToSchemaFragment = function(rules) {
|
|
|
201
259
|
if ( Array.isArray(v) ) {
|
|
202
260
|
if ( typeof(v[0]) === 'number' ) s.minLength = v[0];
|
|
203
261
|
if ( typeof(v[1]) === 'number' ) s.maxLength = v[1];
|
|
262
|
+
} else if ( typeof(v) === 'number' ) {
|
|
263
|
+
// #B201 - the scalar form was silently dropped; the engine
|
|
264
|
+
// treats `isString: 8` as a minimum, identical to `[8]`.
|
|
265
|
+
s.minLength = v;
|
|
204
266
|
}
|
|
205
267
|
break;
|
|
206
|
-
case 'isInteger': s.type = 'integer'; break;
|
|
207
|
-
case 'isNumber': s.type = 'number'; break;
|
|
268
|
+
case 'isInteger': s.type = 'integer'; annotateDigitBounds(s, v); break;
|
|
269
|
+
case 'isNumber': s.type = 'number'; annotateDigitBounds(s, v); break;
|
|
208
270
|
case 'isBoolean': s.type = 'boolean'; break;
|
|
209
271
|
case 'isDate': s.type = 'string'; s.format = 'date'; break;
|
|
210
272
|
case 'isInList': if ( Array.isArray(v) ) s.enum = v.slice(); break;
|