gina 0.6.4 → 0.6.5
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 +29 -0
- package/CONTRIBUTING.md +23 -3
- package/README.md +36 -34
- package/ROADMAP.md +1 -0
- package/framework/v0.6.5/VERSION +1 -0
- package/framework/v0.6.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css +1 -0
- package/framework/v0.6.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- package/framework/v0.6.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +29 -3
- package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/js/gina.js +715 -131
- package/framework/v0.6.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js +643 -0
- package/framework/v0.6.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.6.4 → v0.6.5}/core/connectors/duckdb/lib/connector.js +3 -3
- package/framework/{v0.6.4 → v0.6.5}/core/connectors/sqlite/lib/connector.js +3 -3
- package/framework/{v0.6.4 → v0.6.5}/core/controller/controller.js +30 -3
- package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/validator/src/form-validator.js +10 -2
- package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/validator/src/main.js +285 -93
- package/framework/{v0.6.4 → v0.6.5}/lib/loading-state/src/main.js +4 -5
- package/framework/{v0.6.4 → v0.6.5}/lib/logger/src/containers/mq/speaker.js +29 -0
- package/framework/{v0.6.4 → v0.6.5}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +8 -8
- package/package.json +6 -4
- package/playwright.config.js +32 -7
- package/schema/connectors.json +1 -1
- package/framework/v0.6.4/VERSION +0 -1
- package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -1
- package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -640
- package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/AUTHORS +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/LICENSE +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/config.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/content.encoding +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/dev/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/gna.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/locales/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/locales/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/mime.types +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/model/entity.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/model/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/router.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/server.express.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/server.isaac.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/server.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/status.codes +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/console.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/context.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/path.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/task.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/helpers/text.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/async/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cache/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/config.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/job/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/job-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/math/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/model.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/proc.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/session-store.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/shell.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/state.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/url/README.md +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/url/index.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/validator.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.4 → v0.6.5}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,35 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|
|
6
6
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## 0.6.5 - 2026-08-08
|
|
10
|
+
### Changed
|
|
11
|
+
* The not-ready submit-trigger state is now expressed with the framework-owned `data-gina-form-submit-gated="true"` attribute plus the existing `gina-form-submit-disabled` class, instead of `aria-disabled` (#B312): the trigger is genuinely operable — a click is answered with the validation reveal — so it no longer carries an ARIA claim its behaviour contradicts. `aria-disabled` now has exactly two writers, both honest: your own authored marks, which the click gates enforce and the framework never auto-clears (clear yours when you enable the control — previously a valid form stripped it for you), and the anchor in-flight lock for the request window. A default look ships for the gated state (`cursor: not-allowed` + a modest dim, single-attribute specificity, trivially overridden). If your CSS targeted `[aria-disabled="true"]` on submit triggers, key it on `.gina-form-submit-disabled` (written since 0.5.12) or the new attribute; automation note — a gated trigger no longer fails driver actionability checks, so plain clicks deliver.
|
|
12
|
+
### Fixed
|
|
13
|
+
* Fixed the `npm test` script, which pointed at a glob (`test*.test.js`) matching no files: it reported 0 tests and exited 0, a silent green that could pass for a healthy run. It now runs the full suite — the same set CI gates on — and package.json is the single source of truth for that file list, with the Tests workflow and CONTRIBUTING.md both deferring to it instead of carrying their own divergent copies. Also added `npm run test:coverage` (node:test built-in coverage) and a `pretest:e2e` step that installs the matching Chromium build, so `npm run test:e2e` works from a clean checkout instead of failing every scenario with a missing-browser error.
|
|
14
|
+
* A `data-gina-link` anchor no longer swallows clicks the browser itself should handle. Four cases are now left alone. Three are properties of the anchor: one carrying `download` saves natively instead of being buffered in memory by the request layer, one carrying `target` opens its window or tab again, and one pointing at a bare `#` fragment moves within the page instead of issuing a request for the literal fragment text. The fourth is a property of the click — holding ctrl, cmd, shift or alt now opens the new tab or window the browser would normally open, instead of being turned into a background request that never opens anything. Previously all four were intercepted, so the click either did nothing visible or produced the wrong result. The anchor tests are made against the resolved target, so the documented placeholder form — an empty or `#` href paired with `data-gina-link-url` — keeps working, and the modifier test covers clicks landing on an element nested inside the anchor as well as on the anchor itself. Cross-origin links are unaffected and still go through the request layer.
|
|
15
|
+
* A form's submit trigger no longer stops responding to clicks when your own code sets the native `disabled` attribute on it during the click — the shape used by the common double-submit guard, where a click handler disables the button to block a second submit. Since 0.6.4 the trigger's disabled check accepted that attribute, so the click was cancelled before anything was sent; because the page then cleared the attribute again, the button looked perfectly normal and every further click was swallowed just as silently. The native attribute is now honoured only on elements where the browser does not already enforce it (anchors, custom elements) — on a real form control the browser suppresses the click itself, so the check was never what protected you there. Forms gated by gina's own aria-disabled marker are unaffected and still cannot be submitted while invalid.
|
|
16
|
+
* A form whose last rule is an async `query` — the uniqueness check a registration form typically carries — no longer stays marked invalid after that check comes back clean. The async completion path decided the form's validity from a single field's result, and its update step only ran when that field FAILED, so a form that had just become valid was never re-examined: the submit trigger kept its `aria-disabled` marker and `gina.validator.$forms[id].errors` kept listing the field. Until 0.6.4 that was invisible, because nothing read the marker; since the submit gate began reading it, the first click after the query settled was silently swallowed and only a second click got through. The verdict now comes from a fresh whole-form pass, the same one already used when the async field is not the last to validate, which also clears the stale error message. A form with another field still invalid stays correctly blocked.
|
|
17
|
+
* A form's submit button keeps working after the page replaces its DOM node — the shape an AJAX update or a popin re-render produces when it swaps in fresh markup. Previously such a button went permanently and silently dead: clicking it produced no request, no navigation and no error, and the button looked entirely normal, while submitting the same form by pressing Enter or by calling submit() from your own code still worked. The cause was that the click handling is delegated to the form and so survived the swap, but the step that actually runs the submit was attached to the original button; the replacement inherited every attribute except that binding, and nothing re-established it. Gina now recognises a replaced trigger the first time it is clicked and re-binds it, so the swap is invisible to your code. Validation is unaffected — a replaced trigger on an invalid form still refuses to submit.
|
|
18
|
+
* A popin or dialog trigger keeps working when your own click handler disables it — the near-universal double-submit guard that sets the disabled attribute on the control it just handled. Previously that guard ran first, inside the very click being handled, and gina then read the attribute and silently refused to open: no popin, no error, and because your handler clears the attribute again, a control that looked completely normal. Gina now trusts the native disabled attribute only on elements where the browser does not enforce it itself. On a real form control the browser already suppresses the click entirely, so the check protected nothing there and could only ever fire on a mid-click write; on a link or a custom element it is still honoured, so markup relying on <a disabled> is unchanged. The same fix covers the legacy popin dispatch path and in-popin close buttons, where a capture-phase guard could leave a popin stuck open. Gina's own behaviour of disabling a trigger while its popin loads is unaffected.
|
|
19
|
+
* A popin holding more than one form now tears every form down when it closes. Previously the teardown walked its list of forms while removing entries from that same list, so it skipped every other one: those forms were never released, and their stale records were left pointing at markup the popin had already discarded. On the next open the validator handed back the stale record instead of binding the fresh markup, so the form — its submit control included — came up silently inert, with no error and nothing to see in the page. Only popins given a validator explicitly are affected; the ones gina wires up for you never reached this path. Teardown is also no longer all-or-nothing: if releasing one form fails it is reported and the remaining forms are still torn down, where before the first failure quietly abandoned every form after it.
|
|
20
|
+
* A popin's close button now closes the popin whatever id you give it, and wherever inside it you click. Two shapes were silently inert before. Giving the button your own id — for styling, a test hook or an aria reference — stopped it working, because gina recognised its close buttons by an id it had assigned itself and yours replaced it. More commonly, putting an icon inside the button broke it too: a click landing on the inner icon rather than the button's own edge was not recognised, so the ordinary markup of a close affordance with an svg or a span inside it did nothing. Neither case reported an error, and because gina suppresses the button's default action either way, nothing at all happened on click. A close button that also acts as a trigger for another popin is unaffected and still behaves as before.
|
|
21
|
+
* A link marked with data-gina-link no longer does nothing when you give it your own id. Previously gina kept the id you wrote but dispatched only the links whose id it had generated itself, so markup like <a id="my-link" data-gina-link>Open</a> registered normally and was then silently ignored on every click — and because gina had already suppressed the default action, the click did nothing at all: no request, no navigation, no error. Links left without an id were unaffected, as were links wrapping an element such as a span or an image, whose clicks reach the plugin by a different internal route — which is why this could sit unnoticed. The id you set is preserved rather than overwritten, so anything targeting it from CSS or your own scripts keeps working.
|
|
22
|
+
* A popin trigger that gina has disabled while its popin loads can no longer be clicked a second time to start a second load. An anchor using the older data-gina-popin-name markup was marked aria-disabled for the duration of the load, but the code that dispatched its clicks tested only the plain disabled attribute, which an anchor never carries here — so a second click during a slow load issued a second request. In practice this reached triggers that opt out of preloading with data-gina-dialog-preload="false", which is the setting used for links whose request has side effects on the server, so the duplicate request could cost more than bandwidth. Clicks landing on an icon or other markup nested inside the trigger are covered too. Buttons and other real form controls were never affected, because the browser suppresses those clicks itself.
|
|
23
|
+
* Fixed `gina.setOptions()`, which merged its options into an orphan object nothing ever read and was therefore silently ignored for every key since it shipped — the documented `loadingAttribute` rename (`gina.setOptions({ loadingAttribute: 'data-loading' })`) could not work. It now merges options into the exposed `gina.config` — the object every plugin and library reads — in place, with override semantics (a top-level scalar replaces, a top-level object merges one level deep, keys absent from the options are never removed). An identity guard keeps the framework boot's own call a no-op, so page-load behaviour is unchanged. Note that anything a project was already passing to `setOptions()` and silently having ignored will now take effect. The `data-gina-config` script-tag attribute, which was documented alongside the rename but is parsed by nothing, is no longer documented.
|
|
24
|
+
* Fixed the client-side blob-download filename parse (both the shared XHR handler and the validator's copy): a `Content-Disposition` without a `filename` parameter no longer throws mid-download — the browser derives a name instead — and an RFC 6266 quoted-string filename is unquoted and unescaped rather than saved with its surrounding quotes; a trailing extended parameter is no longer folded into the name.
|
|
25
|
+
* Fixed the `Content-Disposition` emission for downloads: both server emitters (`downloadFromURL`'s attachment upgrade and `downloadFromLocal`) now emit the filename as an RFC 6266 quoted-string with `"` and `\` escaped, so filenames containing spaces, `;` or `,` produce a conformant header instead of a bare token an intermediary may truncate or split.
|
|
26
|
+
* Fixed the dev Inspector's footer source-mode badge, which never appeared when the Inspector ran as a standalone window opened from a `?target=` URL. That badge names where the window's data comes from (`bound`, `agent`, or a warn-tinted `global`), but it was only ever painted from the data-poll timer — which standalone mode deliberately never starts, since its data is pushed over the stream rather than polled — so the badge kept the hidden state it ships with and the window reported no mode at all. The same `agent` mode did show up when the window was reached through the "No source" connect form instead, which meant the badge's presence depended on how the Inspector had been opened rather than on the mode it was in — the opposite of what the badge exists for. Standalone windows now report their source mode on both entry paths and for both agent transports (WebSocket and the SSE fallback). Polling is still not started in that mode, deliberately: it would repaint the active tab on every tick and disturb scrolling, expanded nodes and text selection, and the refresh button does not need it.
|
|
27
|
+
* Fixed popin triggers showing no busy state when their open adopts a still-in-flight hover/focus preload (the common path when warm-on-intent preloading is on): the trigger is now armed for the adopted wait exactly like a cold click-time load — aria-disabled on links, native disabled on other controls, plus the shared data-gina-loading marker — and released when the preload settles, success or failure alike. An instant open from an already-cached preload never flashes a busy state, and a second click during the wait is refused by the existing trigger gates.
|
|
28
|
+
* Fixed the form submit proxy enforcing its disabled gate on a DOMParser copy of the form that only saw native `disabled` — a gated (`aria-disabled`) submit trigger still ran the full validation cycle and sent from trusted gestures (a wrapped-label click, or Enter on a form whose trigger is not a native submit button), while a native `disabled` written mid-dispatch by a double-submit guard could kill the submit outright. User gestures now hit the live registered trigger with the same predicate and answer as the click path (cancel + reveal errors + focus the first invalid field); programmatic `$forms[id].submit()` deliberately keeps the fresh-validate path.
|
|
29
|
+
* Fixed the send-settle releases clobbering the live-check gate on `<a data-gina-form-submit>` triggers — the gate and the in-flight lock share `aria-disabled` with opposite lifecycles, and both releases removed the attribute unconditionally, so a form invalidated mid-flight (an edited-empty field plus an impatient second click, whose refusal re-derives validity) settled with the gate class present but the attribute gone: marked to the framework, operable to assistive tech and the trigger gates. The releases now replay the gate verdict stamped at its last evaluation; button triggers are untouched (their lock is native `disabled`), and the stray second arguments to two unary `removeAttribute` calls are gone in passing.
|
|
30
|
+
* Fixed `data-gina-link` anchors having no disabled gate at all — an anchor marked `aria-disabled="true"` (or carrying the native attribute, which an anchor never enforces) still fired its XHR on click, from both the direct-click and the child-element dispatch paths. Both sites now refuse the click with the same trigger-disabled predicate the popin and validator gates use, while still suppressing the default navigation; programmatic `gina.link.request()` deliberately stays ungated.
|
|
31
|
+
* A second click on an anchor submit trigger while its request was in flight ran the validation reveal, whose valid-form heal erased the in-flight lock's `aria-disabled` mid-request — announcing the control operable again while the send was still running, and re-running validation (including async `query` rules) per extra click (#B313). With the not-ready marker moved to its own channel, the lock owns `aria-disabled` exclusively and survives mid-flight clicks; the settle releases are plain unconditional removals again (the conditional verdict replay they carried is retired as no longer needed).
|
|
32
|
+
* FormValidator's `trim` strips leading AND trailing whitespace when both are present: the replacement previously rewrote only the first match, so a both-sides-padded value kept its trailing run (#B245).
|
|
33
|
+
* FormValidator's `isRequired` no longer rejects a leading-whitespace-padded non-empty value: emptiness now means undefined, null, the empty string, or whitespace-only. The documented `isRequired` + `trim` pairing therefore cleans a stray leading space off the stored value instead of recording "Cannot be left empty" against a value the same pass had just trimmed (#B245).
|
|
34
|
+
* The SQLite and DuckDB connector JSDoc and the connectors.json schema no longer describe the default database-file location as version-segmented (~/.gina/{version}/{database}.sqlite or .duckdb): the framework resolves the gina home without a version segment, so the documented default now matches the real path — ~/.gina/{database}.sqlite and ~/.gina/{database}.duckdb (#B317).
|
|
35
|
+
* A gina process no longer hangs for the OS connect timeout (~75 seconds on macOS) when the configured MQ log host is unreachable — a powered-off peer, a firewalled segment, or a stale `host_v4` left behind by a DHCP reassignment. The speaker's socket was already unref'd, but an unref'd socket only releases the event loop once the dial settles: a connect that is still PENDING is a live request that holds the process open on its own, so `require()`ing framework code stalled for the full window wherever the host answered nothing at all (a REFUSED connection was always fine — the peer's reset closes the handle). The dial now carries its own unref'd deadline and gives up after a bounded wait, flowing through the same error path as a refused connection: the logging transport can be degraded, never load-bearing (#B318).
|
|
36
|
+
* Fixed a refused submit hiding its own error message (#B319): both refused-submit answers — the disabled/gated-trigger reveal and an enabled trigger's failed validation — render the first invalid field's message and then focus that field, and that focus re-entered the live-check suppression that hides a message while its field is being edited, leaving the answer readable only by a screen reader the instant it appeared. The framework's own answer focus is now exempt (one-shot): the message stays visible with the hard `form-item-error` styling, and the first later keystroke re-engages the mid-typing suppression unchanged. Pre-existing in 0.6.4.
|
|
37
|
+
|
|
9
38
|
## 0.6.4 - 2026-08-05
|
|
10
39
|
### Added
|
|
11
40
|
* Submit-like triggers now carry a framework-owned loading state. Clicking a `<button type="submit">`, an `<input type="submit">` or an `<a data-gina-form-submit>` sets `data-gina-loading="true"` on that trigger, and the attribute flips to `"false"` as soon as the action completes or is interrupted — settled, errored, timed out, aborted, rate-limited, or rejected by validation. That last case is the one that stranded loading state on forever (#B247): a submit refused before it starts sends no request at all, so nothing in the XHR lifecycle could ever release it, and only the framework knows the submit was refused. Enter-key and programmatic submits arm the form's registered trigger, and a click on a wrapped label such as `<button type="submit"><span>Save</span></button>` arms the button rather than the span. A project already built on `data-loading` renames the attribute with `gina.setOptions({ loadingAttribute: 'data-loading' })`; there is no auto-detection, so nothing changes for anyone who does not opt in. Style the running state with `[data-gina-loading="true"]` and never with a bare `[data-gina-loading]` — the attribute stays present when released, carrying `"false"`, so a presence selector would pin the loading style on permanently.
|
package/CONTRIBUTING.md
CHANGED
|
@@ -90,13 +90,33 @@ cd "$(npm config get prefix)/bin" && ln -s ../lib/node_modules/gina/bin/gina* .
|
|
|
90
90
|
The test suite uses Node's built-in `node:test` runner — no additional test dependencies needed.
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
|
-
# Run all tests
|
|
94
|
-
|
|
93
|
+
# Run all tests — the same set CI gates on
|
|
94
|
+
npm test
|
|
95
|
+
|
|
96
|
+
# Run all tests with a coverage report
|
|
97
|
+
npm run test:coverage
|
|
95
98
|
|
|
96
99
|
# Run a single file
|
|
97
100
|
node --test test/core/controller.test.js
|
|
101
|
+
|
|
102
|
+
# Pass extra node:test flags — via the env var, NOT `npm test -- --flag`
|
|
103
|
+
GINA_TEST_FLAGS=--test-concurrency=2 npm test
|
|
98
104
|
```
|
|
99
105
|
|
|
106
|
+
`npm test` is the single source of truth for which files make up the suite:
|
|
107
|
+
CI runs exactly this script, so a green local run and a green CI run cover the
|
|
108
|
+
same set.
|
|
109
|
+
|
|
110
|
+
**Extra runner flags must go through `GINA_TEST_FLAGS`.** `node --test` stops
|
|
111
|
+
parsing options at the first positional argument, so a flag placed after the
|
|
112
|
+
file list is neither honoured nor rejected — it is silently ignored and the run
|
|
113
|
+
still exits 0. That makes `npm test -- --test-concurrency=2` a no-op that looks
|
|
114
|
+
like it worked. The `test` script interpolates `$GINA_TEST_FLAGS` *before* the
|
|
115
|
+
file list, which is why `npm run test:coverage` is defined as
|
|
116
|
+
`GINA_TEST_FLAGS=--experimental-test-coverage npm test`. Measured over 199
|
|
117
|
+
files: `--test-concurrency=1` before the list takes 47s, after the list 15s,
|
|
118
|
+
and with no flag at all 17s.
|
|
119
|
+
|
|
100
120
|
Some tests resolve the framework the way a consuming project does — via
|
|
101
121
|
`require('gina')`. For that to resolve from inside the clone, the repository
|
|
102
122
|
must be reachable as its own `gina` module. Create a one-time self-symlink (it
|
|
@@ -221,7 +241,7 @@ Pick the kind (`Added`, `Changed`, `Fixed`, `Removed`, `Security`) and write the
|
|
|
221
241
|
|
|
222
242
|
Before opening a PR against `develop`:
|
|
223
243
|
|
|
224
|
-
- [ ] Tests pass — `
|
|
244
|
+
- [ ] Tests pass — `npm test`
|
|
225
245
|
- [ ] New behaviour is covered by a test (or an explanation is provided for why it cannot be)
|
|
226
246
|
- [ ] A `changie new` entry exists for any user-facing change
|
|
227
247
|
- [ ] Commit messages follow the style above
|
package/README.md
CHANGED
|
@@ -60,45 +60,47 @@ open https://localhost:3100
|
|
|
60
60
|
|
|
61
61
|
> **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
|
|
62
62
|
|
|
63
|
-
## What's in 0.6.
|
|
63
|
+
## What's in 0.6.5
|
|
64
64
|
|
|
65
65
|
> **Re-bake your bundles, not just restart them.** The browser bundle changed in
|
|
66
|
-
> this release.
|
|
67
|
-
>
|
|
68
|
-
>
|
|
69
|
-
> restarting.
|
|
66
|
+
> this release. Nearly every fix below lives in the bundle — the form validator,
|
|
67
|
+
> the popin plugin and the link plugin — so a restart alone will not deliver
|
|
68
|
+
> them. Rebuild each bundle (`gina bundle:build`) as well as restarting.
|
|
70
69
|
|
|
71
|
-
> **No settings reset.** `0.6.
|
|
70
|
+
> **No settings reset.** `0.6.5` is a patch — the `shortVersion` stays `0.6`, so
|
|
72
71
|
> your `~/.gina/0.6/settings.json` is untouched. (`0.6.0` was the reset.)
|
|
73
72
|
|
|
74
|
-
> **
|
|
75
|
-
>
|
|
76
|
-
>
|
|
77
|
-
>
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
- **
|
|
85
|
-
- **Fixed — a submit
|
|
86
|
-
- **Fixed — a
|
|
87
|
-
- **Fixed —
|
|
88
|
-
- **Fixed —
|
|
89
|
-
- **Fixed —
|
|
90
|
-
- **Fixed —
|
|
91
|
-
- **Fixed —
|
|
92
|
-
- **Fixed —
|
|
93
|
-
- **Fixed —
|
|
94
|
-
- **Fixed — a
|
|
95
|
-
- **Fixed —
|
|
96
|
-
- **Fixed — a
|
|
97
|
-
- **Fixed —
|
|
98
|
-
- **Fixed —
|
|
99
|
-
- **Fixed —
|
|
100
|
-
|
|
101
|
-
|
|
73
|
+
> **If you are on 0.6.4, upgrade.** `0.6.4` shipped a regression that could stop a
|
|
74
|
+
> submit button responding to clicks entirely (#B293, first below). This release
|
|
75
|
+
> fixes it, together with a family of long-standing defects that produced the same
|
|
76
|
+
> signature — a control that looks completely normal and does nothing at all.
|
|
77
|
+
|
|
78
|
+
**Four items may need action before you upgrade:** the submit-trigger marker
|
|
79
|
+
vocabulary change, `gina.setOptions()` starting to take effect, the new disabled
|
|
80
|
+
gate on links, and `isRequired` accepting padded input. Each is called out below
|
|
81
|
+
and detailed in the [migration guide](https://gina.io/docs/migration).
|
|
82
|
+
|
|
83
|
+
- **Changed — the not-ready submit-trigger marker is `data-gina-form-submit-gated`, not `aria-disabled`.** While live validation reports a form invalid, its submit control is marked with the framework-owned attribute plus the existing `gina-form-submit-disabled` class. It no longer carries `aria-disabled`, which announces a control as not operable while gina deliberately answers the click — revealing every invalid field and moving focus to the first. Announcing one thing and doing another was the contradiction; the behaviour is unchanged and the vocabulary now matches it. `aria-disabled` keeps exactly two writers, both honest: marks you author yourself, which the click gates now enforce and gina never auto-clears, and the anchor in-flight lock for the request window. A modest default look ships for the gated state (`cursor: not-allowed` plus a dim, single-attribute specificity, trivially overridden). **Action:** if your CSS targets `[aria-disabled="true"]` on submit triggers, key it on the new attribute or on the class. A gated trigger also no longer fails browser-driver actionability checks, so plain clicks deliver in tests. (#B312)
|
|
84
|
+
- **Fixed — a double-submit guard no longer kills the submit.** Since `0.6.4`, a submit trigger stopped responding to clicks when your own handler set the native `disabled` attribute during the click — the shape the near-universal double-submit guard uses. The click was cancelled before anything was sent, and because your handler cleared the attribute again the button looked perfectly normal while every further click was swallowed. The native attribute is now honoured only where the browser does not already enforce it (anchors, custom elements); on a real form control the browser suppresses the click itself, so the check never protected you there. The same shape is fixed for popin and dialog triggers, the legacy popin dispatch path, and in-popin close buttons, where a capture-phase guard could leave a popin stuck open. (#B293, #B296)
|
|
85
|
+
- **Fixed — a submit button keeps working after its DOM node is replaced.** The shape an AJAX update or a popin re-render produces when it swaps in fresh markup: the replacement went permanently and silently dead — no request, no navigation, no error — while Enter and `submit()` still worked. Click handling is delegated to the form and survived the swap, but the step that runs the submit was bound to the original node. Gina now recognises a replaced trigger on its first click and re-binds it. (#B294)
|
|
86
|
+
- **Fixed — an async `query` rule no longer leaves a valid form blocked.** A form whose last rule is an async uniqueness check stayed marked invalid after the check came back clean, because the completion path decided validity from one field's result and only ran its update when that field failed. Invisible until `0.6.4`, when the submit gate began reading the marker — after which the first click following a settled query was silently swallowed. (#B295)
|
|
87
|
+
- **Fixed — Enter and wrapped-label clicks respect the submit gate.** The submit proxy enforced its gate against a `DOMParser` copy of the form that could only see native `disabled`, so a gated trigger still ran the full cycle and **sent** from a click on markup nested inside the button, or from Enter on a form whose trigger is not a native submit button. Trusted gestures now hit the live registered trigger with the same answer as the click path. Programmatic `$forms[id].submit()` deliberately keeps the fresh-validate path. (#B308)
|
|
88
|
+
- **Fixed — an anchor submit trigger's in-flight lock survives a second click.** On an `<a data-gina-form-submit>` the validity gate and the in-flight lock both wrote `aria-disabled` with opposite lifecycles and could erase each other, leaving a form marked to the framework but operable to assistive technology, or announcing a control operable while its request was still running. With the not-ready state on its own attribute, the lock owns `aria-disabled` exclusively. Button triggers were never affected. (#B309, #B313)
|
|
89
|
+
- **Fixed — required fields accept padded input, and `trim` strips both sides.** `isRequired` treated any value *starting* with whitespace as empty, so `" john"` was rejected as *Cannot be left empty* — and when the rule set also declared `trim`, the same pass then trimmed the value after recording the error. Emptiness now means `undefined`, `null`, the empty string, or whitespace-only. `trim` also rewrote only the first whitespace run it found, so a value padded on both sides kept its trailing run. **Action:** if anything relied on leading whitespace being rejected, enforce it explicitly. (#B245)
|
|
90
|
+
- **Fixed — a popin holding several forms tears all of them down.** The teardown walked its list of forms while removing entries from it, releasing only every other one; the skipped forms kept stale records pointing at discarded markup, so the next open handed back the stale record and the form came up silently inert. Only popins given a validator explicitly are affected. Teardown is also no longer all-or-nothing. (#B265)
|
|
91
|
+
- **Fixed — a popin trigger shows its busy state when it adopts a preload.** The common path when warm-on-intent preloading is on: an open adopting a still-in-flight hover/focus preload left the trigger with no affordance. It is now armed for the adopted wait exactly like a cold load and released when the preload settles either way. An instant open from cache never flashes a busy state. (#B285)
|
|
92
|
+
- **Fixed — a legacy popin trigger cannot start a second load.** An anchor using the older `data-gina-popin-name` markup was marked `aria-disabled` while loading, but its dispatch path tested only the plain `disabled` attribute, which an anchor never carries — so a second click during a slow load issued a second request. In practice this reached triggers that opt out of preloading, i.e. links whose request has side effects on the server. (#B298)
|
|
93
|
+
- **Fixed — a popin close button works with your own id and with nested markup.** Giving the button your own id stopped it working, because gina recognised its close buttons by an id it had assigned itself. More commonly, an icon inside the button broke it too — a click landing on the inner `svg` or `span` was not recognised. Neither reported an error, and gina suppresses the default action either way, so nothing happened at all. (#B299, #B301)
|
|
94
|
+
- **Fixed — `data-gina-link` leaves native affordances to the browser.** Four cases are no longer intercepted: an anchor carrying `download` saves natively instead of being buffered in memory, one carrying `target` opens its window or tab again, one pointing at a bare `#` fragment moves within the page, and a ctrl/cmd/shift/alt click opens the tab or window the browser would. The tests run against the resolved target, so the documented placeholder form keeps working. Cross-origin links are unaffected. (#B288)
|
|
95
|
+
- **Fixed — a `data-gina-link` with your own id dispatches again.** Gina kept the id you wrote but dispatched only links whose id it had generated itself, so `<a id="my-link" data-gina-link>` registered normally and was then silently ignored on every click — with the default action already suppressed, nothing happened at all. Links with no id, and links wrapping a `span` or image, were unaffected, which is why this could sit unnoticed. (#B302)
|
|
96
|
+
- **Fixed — disabled links are refused.** `data-gina-link` anchors had no disabled gate at all: one marked `aria-disabled="true"` still fired its XHR from both dispatch paths. Both now refuse the click with the same predicate the popin and validator gates use, while still suppressing the default navigation. Programmatic `gina.link.request()` deliberately stays ungated. **Action:** this is an enforcement tightening — remove the attribute from any link you still expect to fire. (#B310)
|
|
97
|
+
- **Fixed — download filenames parse and serialize correctly.** Client-side, a `Content-Disposition` carrying no `filename` no longer throws mid-download (the browser derives a name), a quoted-string filename is unquoted and unescaped rather than saved with its quotes, and a trailing extended parameter is no longer folded into the name. Server-side, both emitters now write the filename as an RFC 6266 quoted-string with `"` and `\` escaped, so a name containing spaces, `;` or `,` produces a conformant header instead of a bare token an intermediary may truncate. (#B290, #B297)
|
|
98
|
+
- **Fixed — `gina.setOptions()` writes the config the framework actually reads.** It merged into an orphan object nothing ever read, and was therefore silently ignored for every key since it shipped — the documented `loadingAttribute` rename could not work. It now merges into the exposed `gina.config` in place, with override semantics. **Action:** anything your project was already passing and silently having ignored **will now take effect** — review those calls. The `data-gina-config` script-tag attribute, documented alongside the rename but parsed by nothing, is no longer documented. (#B305)
|
|
99
|
+
- **Fixed — the dev Inspector's standalone window reports its source mode.** The footer badge naming where the window's data comes from never appeared for a window opened from a `?target=` URL, because it was painted only from the data-poll timer that standalone mode deliberately never starts. The same mode did show when the window was reached through the connect form, so the badge's presence depended on how the Inspector had been opened rather than on the mode it was in. Polling is still not started there, deliberately. (#B306)
|
|
100
|
+
- **Fixed — the documented SQLite and DuckDB default database path.** The connector JSDoc and the `connectors.json` schema described the default as version-segmented; the framework resolves the gina home without a version segment, so the documented default now matches the real path. Documentation only — behaviour is unchanged. (#B317)
|
|
101
|
+
- **Fixed — `npm test` runs the suite.** The script pointed at a glob matching no files: 0 tests, exit 0 — a silent green that could pass for a healthy run. It now runs the full suite CI gates on, with `package.json` as the single source of truth for that file list. Adds `npm run test:coverage`, and a `pretest:e2e` step that installs the matching Chromium build so `npm run test:e2e` works from a clean checkout.
|
|
102
|
+
- **Fixed — an unreachable log host no longer stalls gina processes.** With the default `mq` log flow configured and the host unreachable — a powered-off peer, a firewalled segment, a stale `host_v4` after a DHCP reassignment — any fresh gina process, a bare `require()` of framework code included, hung for the OS connect timeout (~75 seconds on macOS) before doing anything. A *refused* connection was always fine; it was the host that answers nothing at all that held the process open, because a still-pending dial is a live request even on an unref'd socket. The dial now carries its own bounded deadline and degrades through the same error path as a refusal — logging stays best-effort, never load-bearing. This fix is server-side: a restart delivers it, no re-bake needed. (#B318)
|
|
103
|
+
- **Fixed — a refused submit keeps its error message visible.** Both refused-submit answers — the gated-trigger reveal and an enabled trigger's failed validation — render the first invalid field's message and then focus that field, and that focus re-engaged the live-check suppression that hides a message while its field is being edited: the answer was clipped to a screen-reader-only state the instant it appeared, so a refused submit looked like a dead click to sighted users. The framework's own answer focus is now exempt, one-shot; the first later keystroke re-engages the mid-typing suppression unchanged, as does clicking into an errored field yourself. Pre-existing — reproduced back to `0.6.4`. (#B319)
|
|
102
104
|
|
|
103
105
|
## Documentation
|
|
104
106
|
|
package/ROADMAP.md
CHANGED
|
@@ -56,6 +56,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
56
56
|
| **Q4 2026** | `0.6.2` ✅ | **Changed**: render and request-path CPU overhead sharply reduced — the per-render deep copies of the request options (template-filter configuration and render envelope) are passed by reference after each one's write surface was measured empty, per-request locale lookups are memoized with the request-local copy materialized lazily on first read, and the id generator right-sizes its entropy batch to the requested length; measured on the profiling harness at **4.4× render throughput** (10.7 → 2.4 ms per render), deep-clone CPU share 50.31% → 1.81%, GC time down ~18× — no API change, but the browser bundle changed so bundles pick the id-generator half up on rebuild (#P39) · **Added**: opt-in 503 + `Retry-After` rendering for transient datastore failures — with `server.transientErrors.enabled`, a connector error stamped `isTransient` that would render as HTTP 500 through `throwError` renders as 503 carrying `Retry-After`, with a configurable retry delay and user-facing message, on both engines across JSON and HTML error surfaces; off by default and byte-identical when off, and a malformed block warns at boot rather than refusing it (#CE1) · **Fixed**: an `env.json` block that omits `host` no longer leaves the `${host}` token unsubstituted inside the TLS credentials paths, which refused https and HTTP/2 boots with an ENOENT naming a literal `${host}` segment under an error pointing at the server settings — `host` was the only per-bundle value with no framework-side default, so a hand-written or partial block never received one (#B181) · **Fixed**: a bundle whose project `env.json` carries no block for the environment it starts in now refuses with the bundle, the environment, the resolved path and whether the file was found all named — covering the absent, empty and unlisted-bundles shapes — instead of an opaque `Cannot read properties of undefined` crash, exiting 1 so an external supervisor can retry (#B181) · **Fixed**: starting a bundle in an environment its `env.json` block does not cover refuses cleanly at exit 1 rather than dying at exit 143 on `Cannot set properties of undefined (setting 'bundlesPath')`, and a bundle declared only for other environments is now reported as skipped instead of taking every sibling bundle down with it (#B183) · **Fixed**: dead process records are removed from the `~/.gina/procs.json` registry under the right key — `removeRunningProc()` matched the entry by pid but deleted under the constructing bundle key, rewriting dead records back to disk and able to destroy a live one, degrading `gina stop`'s graceful-kill path (#B180) |
|
|
57
57
|
| **Q4 2026** | `0.6.3` ✅ | **Security**: the client-served routing map (`/_gina/assets/routing.json`) is now built from an ALLOWLIST instead of a denylist — controller dispatch keys (`param.control`/`file`/`path`/`title`), `namespace`, `scopes`, `cache` configuration including invalidation event names, `csrfExempt`, `middlewareIgnored` and `validator::` requirement bodies all stay server-side, and structurally so does every future route key until deliberately added to the roster; client URL building is unaffected, but code reading other keys off `gina.config.routing` must move server-side · **Added**: opt-in SPA-style client-side navigation — a route declares `negotiate: true` and answers `X-Gina-Navigate: fragment` layoutlessly over the same URL, while the new `gina/nav` module swaps same-origin link targets into a `data-gina-nav` region with history, scroll, focus, title, script re-injection and validator rebinding, falling back to a full-page navigation on every uncertainty; negotiable routes advertise `Vary: X-Gina-Navigate` and opt out of the render cache (#SPA1) · a configurable RFC 9211 `Cache-Status` identifier (`server.cache.name`), with a boot warn naming the residual framework disclosure when `hidePoweredBy` is set (#B238) · a Couchbase SDK soak harness that screens a candidate SDK in a fully isolated throwaway project before a consuming project adopts it (#CN12) · **Changed**: `/_gina/assets/routing.json` now revalidates on each page boot (per-variant weak `ETag` + `no-cache`, was `max-age=86400`), so a restart's new route table reaches returning browsers immediately instead of up to 24 hours later · the dormant transitive `object-assign` dependency overridden to a maintained re-export (gina's own tree only — `overrides` are root-manifest-scoped; the consumer-reaching fix is upstream) · **Fixed**: server-side form-body validation now enforces rules authored on bracket-notation (`account[username]`) and nested keys — previously skipped silently, fail-open, for checks, `exclude` and transforms alike (#B241) · the validator's empty-value contract made uniform: five loose-equality sites let `0`, `false` and `[]` ride the empty bypass so `isEmail`/`isJsonWebToken`/`isFloat` reported them VALID outright, and `is`/`isBoolean` joined the same contract (#B233, #B235) · `isBoolean` is now the single adjudicator on every surface — server auto-validation coerced junk to `false` and persisted it — and `isInteger` digit bounds enforce on real numbers, not only strings (#B236) · a `$` token in a rule no longer crashes the validation pass on either surface (#B234, #B239) · required radio groups now gate, and the submit trigger re-enables on a pick (#B221, #B228) · a field driving its own `_case_` block is validated and keeps the value the user picked (#B229, #B230) · a rejected submit no longer kills a form's live check for the rest of the page's life · the documented `setFlash` `[null, "message"]` form works in the browser (#B226) · `pauseRequest()`/`resumeRequest()` replay the byte-exact halted URL, query string included, on both engines (#B215, #B219) · `Controller.store()` publishes each file atomically and surfaces the real filesystem error instead of a fabricated `No file to upload`, where a source-stream error previously killed the bundle process (#B223) · custom error pages answer with their real HTTP status and keep their resolved template instead of falling back to the failing route's own file (#B190) · session stores no longer write an immortal record for an already-expired session (redis wrote an expiry-less SET; couchbase and scylladb stored a never-expires zero expiry) · a Couchbase N1QL parameter the SDK cannot serialize no longer aborts the whole bundle process (#B243), and range SDK pins like `~4.5.0` resolve instead of mangling past the version floor · `lib/math` `checkSumSync` — every array collapsed to the empty-string checksum, data ending in an extension shape was misrouted to the filesystem, and real file paths were hashed as path strings (#B208, #B209, #B210) · `GINA_*` environment variables are visible to the CLI's own bootstrap, the MQ and file logger containers, the MCP bind tier and `${secret:}` resolution · the client routing map serves under every engine, and a non-2xx boot fetch is no longer installed as the client routing table (#B212, #B213) · Inspector bundle-following across a proxy-routed project, per-tab restore, advertised-channel adoption and six scope/display fixes (#B205, #B222, #B225, #B231, #B237) · `bundle:openapi`/`bundle:mcp` no longer drop three declared bound forms when un-collapsing a `validator::{}` requirement · a sub-directory in the run directory no longer aborts every gina command · the scaffolded bundle template's impossible session-store selection (`expressSession.name = 'myRedis'` silently no-ops) |
|
|
58
58
|
| **Q4 2026** | `0.6.4` ✅ | **Added**: a framework-owned loading state for busy controls — clicking a submit trigger, a `data-gina-link` anchor or a popin trigger sets `data-gina-loading="true"` on that control and flips it to `"false"` when the work settles, errors, times out, aborts or is rejected by validation (the case that stranded the state on forever, since a refused submit sends no request at all), with a shipped default look gated on `prefers-reduced-motion` and an opt-in attribute rename (#B247) · `gina.config.a11y` overrides for the status strings gina announces on its own behalf · an opt-in `secrets.file` layer resolving `${secret:KEY}` from `.env`-style files **beneath** the environment, so a non-empty environment value can never be shadowed by a stale file on disk, with later array entries winning, empty-value fall-through warning, and fail-closed resolution · **Security**: secret-file ignore rules now match by glob (`.env`, `.env.*`, `*.env`) in both the repository and published-package ignore lists, where the previous exact `.env` entry left `secrets.env` or `db.env` committable and publishable by default · **Fixed**: a submit trigger disabled by live validation was inert in appearance only and still ran the whole submit cycle when clicked (#B246) · a form's first validation error was the one least likely to be heard, because the polite live region was created, inserted and written in a single synchronous step · submitting a form dropped the keyboard user's focus to the document body, and nothing told assistive technology a submit was under way · validation messages kept `aria-invalid` asserted while `display: none` removed the message from the accessibility tree, and the first-invalid focus loop could stop on a control that never actually took focus · staged uploads gained progressbar semantics with the value dropped rather than zeroed while indeterminate, spoken start/complete/error, an operable reset control, and preview `alt` text taken from the user's own filename · a popin opened over another left the superseded one reachable in the tab order behind it · built-in error pages emitted no doctype, head, title or `lang` and never terminated the document on HTTP/1.1, and the `lang` gina emits is now normalised to BCP-47 · the link plugin reused one `XMLHttpRequest` for every click, so a second click aborted the first and its response vanished in total silence · `gina secrets:check` reported `UNSET` for keys a bundle would have started with once `secrets.file` was declared, and could not resolve version- or scope-templated paths (#B263, #B266) · a declared secrets file that exists but cannot be read was mistaken for an absent one, so a bundle booted healthily on the wrong credential (#B267) · an environment variable that is set but empty now warns as it falls through to the file (#B268) · a trailing `#` comment was read as part of the secret, diverging from the POSIX shell that sources the same file · requiring gina outside a bundle context hung the process instead of failing cleanly, because the logger's MQ socket kept the event loop alive (#B276, #B277) · a bundle starting in an undeclared environment could lose its refusal message to a truncated pipe (#B278) · a gina command died mid-run when an MQ speaker disconnected abruptly, leaving a half-created bundle (#B279) |
|
|
59
|
+
| **Q4 2026** | `0.6.5` ✅ | **Fixed**: the silent-dead-control release — a family of defects where a control looked completely normal and did nothing at all. A submit trigger disabled by your own double-submit guard during the click (a `0.6.4` regression), a submit button whose DOM node an AJAX update or popin re-render replaced, a form left blocked after its async uniqueness check came back clean, a popin close button given your own id or wrapping an icon, a `data-gina-link` given your own id, and a popin holding several forms releasing only every other one — all now work. Trusted gestures (Enter, wrapped-label clicks) respect the submit gate; `data-gina-link` stops swallowing `download`, `target`, `#`-fragment and modified clicks, and gains the disabled gate it never had; download filenames parse and serialize per RFC 6266; `gina.setOptions()` writes the config the framework reads, having been silently ignored since it shipped; `isRequired` accepts padded input and `trim` strips both sides · **Changed**: the not-ready submit-trigger state moves off `aria-disabled` onto the framework-owned `data-gina-form-submit-gated`, with a default look — the marker no longer claims a control is inoperable while gina deliberately answers its click |
|
|
59
60
|
| **Q1 2027** | `0.6.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
60
61
|
| **2027** | `0.7.0` | Performance — remaining measure-gated candidates: multipart & WebSocket fast paths, render/log cleanups, SIMD scanner (the render-path deep-clone & id-mint reduction shipped early in `0.6.2` with a measured 4.4× render-throughput gain; the profiling baseline itself also shipped in `0.6.2`) |
|
|
61
62
|
| **2027** | `0.8.0` | Financial-messaging foundations — XML request/response handling · pluggable message-schema validation · IBAN/BIC validation rules · money & ISO 4217 minor-unit utilities · idempotency keys · sequence primitive · OAuth2 client-credentials egress |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.6.5
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";@keyframes gina-loading-pulse{0%{opacity:1}to{opacity:.55}}@keyframes gina-popin-skeleton-shimmer{0%{background-position:200%0}to{background-position:-200%0}}[data-gina-loading=true]{cursor:progress}@media (prefers-reduced-motion:no-preference){[data-gina-loading=true]{animation:gina-loading-pulse .9s ease-in-out infinite alternate}}@media (prefers-reduced-motion:reduce){[data-gina-loading=true]{opacity:.7}}[data-gina-form-submit-gated=true]{cursor:not-allowed;opacity:.7}@font-face{font-family:"have_heart_oneregular";src:url(fonts/have_heart_one-webfont.woff2)format("woff2"),url(fonts/have_heart_one-webfont.woff)format("woff");font-weight:400;font-style:normal}.gina-popin-container{background:#fff}.gina-popins-overlay,div.gina-popin-container{visibility:hidden;opacity:0;z-index:1;transition:opacity .3s,visibility 0 .3s}.gina-popins-overlay.gina-popin-is-active,div.gina-popin-container.gina-popin-is-active{opacity:1;visibility:visible;transition-delay:0}dialog.gina-popin-container{padding:0;border:0;z-index:1}@media (prefers-reduced-motion:no-preference){dialog.gina-popin-container{opacity:0;transform:translateY(-.5rem);transition:opacity .2s ease,transform .2s ease,overlay .2s ease allow-discrete,display .2s ease allow-discrete}dialog.gina-popin-container[open]{opacity:1;transform:translateY(0)}@starting-style{dialog.gina-popin-container[open]{opacity:0;transform:translateY(-.5rem)}}dialog.gina-popin-container::backdrop{opacity:0;transition:opacity .2s ease,overlay .2s ease allow-discrete,display .2s ease allow-discrete}dialog.gina-popin-container[open]::backdrop{opacity:1}@starting-style{dialog.gina-popin-container[open]::backdrop{opacity:0}}}body[data-gina-popin-scroll-lock]{overflow:hidden}.gina-popins-overlay{position:fixed;left:0;top:0;display:grid;place-items:center;width:100%;height:100%;transition:opacity .3s,visibility .3s;overflow:auto;background:rgba(0,0,0,.75)}.gina-popins-overlay.gina-popin-is-active{backdrop-filter:blur(6px)}dialog::backdrop{background-color:rgba(0,0,0,.75);backdrop-filter:blur(6px)}.gina-popin-skeleton{padding:1.5rem;min-width:18rem;max-width:90vw}.gina-popin-skeleton .gina-popin-skeleton-line{height:.85rem;margin-bottom:.75rem;border-radius:4px;background:linear-gradient(90deg,#ededed 25%,#f7f7f7 50%,#ededed 75%);background-size:200% 100%;animation:gina-popin-skeleton-shimmer 1.4s ease-in-out infinite}.gina-popin-skeleton .gina-popin-skeleton-line:last-child{margin-bottom:0}.gina-popin-skeleton .gina-popin-skeleton-title{height:1.4rem;width:60%;margin-bottom:1.25rem}.gina-popin-skeleton .gina-popin-skeleton-line--short{width:40%}@media (prefers-reduced-motion:reduce){.gina-popin-skeleton .gina-popin-skeleton-line{animation:none}}
|
package/framework/{v0.6.4 → v0.6.5}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js
RENAMED
|
@@ -3758,6 +3758,10 @@
|
|
|
3758
3758
|
* Called from `pollData()` (every tick + every bound-channel apply) and at
|
|
3759
3759
|
* the end of the init acquisition, so a mode transition (e.g. an adopted
|
|
3760
3760
|
* channel handing over to the legacy fallback) surfaces within one tick.
|
|
3761
|
+
* Agent mode (`?target=`) reaches neither of those — it schedules no poll
|
|
3762
|
+
* timer — so init calls this directly on its branch; without that call the
|
|
3763
|
+
* `agent` badge would be unreachable from a URL-entered standalone session
|
|
3764
|
+
* (#B306).
|
|
3761
3765
|
*
|
|
3762
3766
|
* @inner
|
|
3763
3767
|
*/
|
|
@@ -5945,6 +5949,20 @@
|
|
|
5945
5949
|
}
|
|
5946
5950
|
}
|
|
5947
5951
|
}
|
|
5952
|
+
} else {
|
|
5953
|
+
// #B306 — agent mode skips every acquisition-path badge call above
|
|
5954
|
+
// AND never schedules pollData (see the polling block below), so
|
|
5955
|
+
// this is the only place the badge's `agent` branch is reachable on
|
|
5956
|
+
// this entry path. Without it the same mode renders when reached via
|
|
5957
|
+
// the connect form (whose timer is already ticking when `source`
|
|
5958
|
+
// becomes 'agent') but stays hidden under a URL `?target=` — badged
|
|
5959
|
+
// or silent depending purely on how the Inspector was opened, which
|
|
5960
|
+
// defeats #B231's "visible instead of silent" purpose. `tryAgent()`
|
|
5961
|
+
// has already settled `source` to 'agent' by the time it returns
|
|
5962
|
+
// true — including when `tryAgentWS()` claimed the channel first, on
|
|
5963
|
+
// which path it short-circuits via its own `source === 'agent'`
|
|
5964
|
+
// guard — so the badge reads the final mode, not an interim one.
|
|
5965
|
+
updateSourceModeBadge();
|
|
5948
5966
|
}
|
|
5949
5967
|
|
|
5950
5968
|
// ── Persist window geometry on resize/move ──────────────────────────
|
|
@@ -5966,9 +5984,17 @@
|
|
|
5966
5984
|
window.addEventListener('resize', debouncedSaveGeometry);
|
|
5967
5985
|
window.addEventListener('beforeunload', saveGeometry);
|
|
5968
5986
|
|
|
5969
|
-
// In agent mode, data arrives via SSE push — no polling needed
|
|
5970
|
-
//
|
|
5971
|
-
//
|
|
5987
|
+
// In agent mode, data arrives via SSE push — no polling needed, and the
|
|
5988
|
+
// timer is deliberately NOT scheduled.
|
|
5989
|
+
//
|
|
5990
|
+
// #B306 — the comment previously here claimed the opposite ("pollData()
|
|
5991
|
+
// still runs on the timer as a no-op … so the refresh button works").
|
|
5992
|
+
// Both halves were wrong, so do not "reconcile" this guard to match it:
|
|
5993
|
+
// pollData() is NOT a no-op under `source === 'agent'` — it re-renders
|
|
5994
|
+
// the active tab from cache before returning — so a ticking timer would
|
|
5995
|
+
// repaint every pollDataMs and fight scroll position, expanded folds and
|
|
5996
|
+
// text selection. And the refresh button needs no timer either: it calls
|
|
5997
|
+
// pollData() directly.
|
|
5972
5998
|
if (!isAgent) {
|
|
5973
5999
|
pollDataTimer = setInterval(pollData, pollDataMs);
|
|
5974
6000
|
setInterval(pollLogs, POLL_LOGS_MS);
|