gina 0.7.2 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +40 -40
- package/ROADMAP.md +1 -0
- package/bin/cli +29 -0
- package/bin/cmd +34 -25
- package/bin/gina +55 -15
- package/framework/v0.7.3/VERSION +1 -0
- package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/js/gina.js +44 -8
- package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +602 -602
- package/framework/v0.7.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.7.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.7.2 → v0.7.3}/core/config.js +5 -0
- package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.js +39 -6
- package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-swig.js +14 -1
- package/framework/v0.7.3/core/controller/preload-hints.js +230 -0
- package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/validator/src/main.js +26 -4
- package/framework/{v0.7.2 → v0.7.3}/core/server.js +181 -19
- package/framework/{v0.7.2 → v0.7.3}/core/template/conf/templates.json +2 -1
- package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/add.js +1 -1
- package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/help.txt +6 -5
- package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/help.txt +5 -1
- package/framework/v0.7.3/lib/cmd/framework/inc/listen-error.js +217 -0
- package/framework/v0.7.3/lib/cmd/framework/inc/ps-titles.js +193 -0
- package/framework/{v0.7.2 → v0.7.3}/lib/cmd/gina-framework.1.md +2 -0
- package/framework/{v0.7.2 → v0.7.3}/lib/cmd/gina.1.md +4 -0
- package/framework/{v0.7.2 → v0.7.3}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +5 -5
- package/package.json +3 -3
- package/schema/settings.json +5 -0
- package/types/index.d.ts +1 -0
- package/utils/helper.js +33 -0
- package/framework/v0.7.2/VERSION +0 -1
- package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.7.2/lib/cmd/framework/inc/ps-titles.js +0 -113
- /package/framework/{v0.7.2 → v0.7.3}/AUTHORS +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/LICENSE +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/html/static.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/config.requirements-anchor.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/couchbase/lib/storage-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/param-redact.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/lib/kv-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/settle-once.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sqlite/lib/kv-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/content.encoding +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/controller.render-xml.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/inline-script.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/dev/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/gna.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/locales/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/locales/currency.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/locales/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/mime.types +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/model/entity.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/model/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/model/template/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/router.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/server.express.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/server.isaac.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/server.isaac.rapid-reset.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/server.route-candidates.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/status.codes +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/_gitignore +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/conf/env.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/conf/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/console.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/context.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/data/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/data/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/json/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/json/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/path.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/prototypes.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/task.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/helpers/text.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/admin/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/archiver/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/archiver/build.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/archiver/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/async/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/async/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/audit/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/audit-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/authn/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cache/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cache/build.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cache/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/inc/boot-lines.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/inc/name.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/inc/name.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/inc/name.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/inc/name.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/storage/arguments.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/storage/gc.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/storage/help.txt +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/storage/stats.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/storage/verify.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/collection/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/collection/build.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/collection/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/conf-view/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/conf-view/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/config.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cron/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cron/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/domain/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/domain/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/dto/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/duration/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/duration/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/error-ref/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/error-ref/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/generator/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/i18n/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/idempotency/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/idempotency/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/image-build/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/inherits/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/inherits/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/instrument/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/job/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/job/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/job-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/kv/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/kv/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/kv-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/lane/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/lane/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/logger/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/logger/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/logger/src/redact.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/maintenance/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/maintenance/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/math/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/merge/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/merge/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/message-validator/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/message-validator/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/metrics/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/model.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/money/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/money/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/multipart/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/multipart/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/priority/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/priority/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/proc.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/push/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/push/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/rate-limit/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/rate-limit/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/routing/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/routing/build.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/routing/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/backends/exec.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/declaration.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/secrets/src/sources.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/security-headers-emitter/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/security-headers-emitter/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/session-lifetime/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/session-lifetime/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/session-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/shell.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/sri/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/sri/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/state.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/storage/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/local-cas.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/local-stream.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/local.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/meta-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/s3.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/storage/src/util.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/storage-store.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/url/README.md +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/url/index.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/url/routing.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/uuid/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/validator.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/watcher/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.7.2 → v0.7.3}/lib/ws-session/src/main.js +0 -0
|
@@ -3095,6 +3095,56 @@ function Server(options) {
|
|
|
3095
3095
|
}).finish().body.read().decodeToString();
|
|
3096
3096
|
}
|
|
3097
3097
|
|
|
3098
|
+
/**
|
|
3099
|
+
* #B766 — whether a stylesheet `<link>` or a `<script src>` written in a
|
|
3100
|
+
* layout may be preloaded through the `link` header (`as=style` /
|
|
3101
|
+
* `as=script`). A preload the browser cannot match to the tag's own request
|
|
3102
|
+
* costs a second download, so the tag is left out when it carries
|
|
3103
|
+
* `integrity` or `crossorigin` (the preload would carry neither), is a
|
|
3104
|
+
* module or `nomodule` script, or is a stylesheet not applied to the screen
|
|
3105
|
+
* (a `media` other than `all` / `screen`, an `alternate` one). The tests
|
|
3106
|
+
* read the tag's own text: up to its first `>` outside a quoted attribute
|
|
3107
|
+
* value, since a value may hold one (`media="(width > 600px)"`).
|
|
3108
|
+
*
|
|
3109
|
+
* One more condition, a guard for a caller that passes more than one tag:
|
|
3110
|
+
* until #B768, getAssets()' layout scan matched up to the end of a source
|
|
3111
|
+
* line and kept the LAST `src` / `href` it found there, so when several tags
|
|
3112
|
+
* shared a line the URL could be another tag's; it now passes one start tag.
|
|
3113
|
+
* The tag only qualifies when nothing after its `>` carries a `src`, `href`
|
|
3114
|
+
* or `srcset`.
|
|
3115
|
+
*
|
|
3116
|
+
* @inner
|
|
3117
|
+
* @private
|
|
3118
|
+
* @param {string} match - One match of getAssets()' layout scan
|
|
3119
|
+
* @param {string|null} rel - The `rel` value of a `<link>`, `null` for a `<script>`
|
|
3120
|
+
* @returns {boolean}
|
|
3121
|
+
*
|
|
3122
|
+
* @example
|
|
3123
|
+
* isPreloadableLayoutTag('<link rel="stylesheet" href="/css/app.css">', 'stylesheet'); // true
|
|
3124
|
+
* isPreloadableLayoutTag('<link rel="stylesheet" href="/css/print.css" media="print">', 'stylesheet'); // false
|
|
3125
|
+
*/
|
|
3126
|
+
var isPreloadableLayoutTag = function(match, rel) {
|
|
3127
|
+
var tagEnd = match.match(/^<[^>"']*(?:(?:"[^"]*"|'[^']*')[^>"']*)*>/);
|
|
3128
|
+
if ( !tagEnd ) {
|
|
3129
|
+
return false;
|
|
3130
|
+
}
|
|
3131
|
+
var tag = tagEnd[0];
|
|
3132
|
+
if ( /(src|href|srcset)\=/.test(match.substring(tag.length)) ) {
|
|
3133
|
+
return false;
|
|
3134
|
+
}
|
|
3135
|
+
if ( /\s(integrity|crossorigin|nomodule)(\s|=|>|\/)/i.test(tag) || /\stype\s*=\s*["']?module\b/i.test(tag) ) {
|
|
3136
|
+
return false;
|
|
3137
|
+
}
|
|
3138
|
+
if ( rel && /\balternate\b/i.test(rel) ) {
|
|
3139
|
+
return false;
|
|
3140
|
+
}
|
|
3141
|
+
var media = tag.match(/\smedia\s*=\s*["']([^"']*)["']/i);
|
|
3142
|
+
if ( media && !/^\s*(all|screen)\s*$/i.test(media[1]) ) {
|
|
3143
|
+
return false;
|
|
3144
|
+
}
|
|
3145
|
+
return true;
|
|
3146
|
+
};
|
|
3147
|
+
|
|
3098
3148
|
/**
|
|
3099
3149
|
* Parses a rendered layout string for `<link>`, `<script>`, `<source>`,
|
|
3100
3150
|
* and `<img>` tags, resolves each asset URL to an absolute file path, and
|
|
@@ -3107,14 +3157,69 @@ function Server(options) {
|
|
|
3107
3157
|
* @param {object} bundleConf - Bundle/env configuration slice
|
|
3108
3158
|
* @param {string} layoutStr - Rendered HTML layout string to scan for asset tags
|
|
3109
3159
|
* @param {object} [swig] - Swig instance when called from the controller
|
|
3110
|
-
* @param {object} [data] - Template data when called from the controller
|
|
3160
|
+
* @param {object} [data] - Template data when called from the controller; its
|
|
3161
|
+
* `page.environment.webroot` (the public webroot) is stripped, like
|
|
3162
|
+
* `bundleConf.server.webroot`, from a URL before it is resolved (#B769)
|
|
3111
3163
|
* @returns {object} Assets map keyed by URL
|
|
3112
3164
|
*/
|
|
3113
3165
|
var getAssets = function (bundleConf, layoutStr, swig, data) {
|
|
3114
3166
|
|
|
3115
3167
|
// layout search for <link|source|script|img>; this is an asset-tag scan over the bundle's own
|
|
3116
|
-
// layout template, not an HTML sanitizer
|
|
3117
|
-
|
|
3168
|
+
// layout template, not an HTML sanitizer.
|
|
3169
|
+
// #B768 — one match per TAG. Each alternative used to run to the end of its source line,
|
|
3170
|
+
// and the URL loop below kept the last `src` / `href` it met, so tags sharing a line were
|
|
3171
|
+
// read as one: `<img><script>` preloaded the script `as=image`, a <picture>'s <img> was
|
|
3172
|
+
// swallowed by its <source>, a minified layout got no hint. A start tag now ends at its
|
|
3173
|
+
// first `>` outside a quoted attribute value (isPreloadableLayoutTag's rule); a <script>
|
|
3174
|
+
// element is consumed whole and only its start tag kept, so the text of an inline script
|
|
3175
|
+
// is never read as markup; `</picture>` is kept as the marker that ends the srcset a
|
|
3176
|
+
// picture's <source> tags collected. Which tags count is unchanged (filtered below): a
|
|
3177
|
+
// <link> whose rel starts with stylesheet, icon or manifest or ends in -icon, a <source>
|
|
3178
|
+
// whose type is an image type, every <script> and <img>.
|
|
3179
|
+
var layoutAssets = []
|
|
3180
|
+
, layoutTagRe = /(<script\b(?:[^>"']|"[^"]*"|'[^']*')*>)[\s\S]*?<\/script\s*>|<(?:link|source|img)\b(?:[^>"']|"[^"]*"|'[^']*')*>|<\/picture\s*>/g
|
|
3181
|
+
, layoutTag = null
|
|
3182
|
+
;
|
|
3183
|
+
while ( (layoutTag = layoutTagRe.exec(layoutStr)) !== null ) {
|
|
3184
|
+
layoutAssets.push( layoutTag[1] || layoutTag[0] );
|
|
3185
|
+
}
|
|
3186
|
+
|
|
3187
|
+
/**
|
|
3188
|
+
* #B769 — the path to hand getAssetFilenameFromUrl() for a URL written in the layout
|
|
3189
|
+
* or in a stylesheet's url(). The resolver takes a path WITHOUT the webroot
|
|
3190
|
+
* (handleStatics strips it from a request first), while a layout writes its URLs with
|
|
3191
|
+
* it: `{{ page.environment.webroot }}img/x.png` reaches this scan as `/web/img/x.png`,
|
|
3192
|
+
* or as `/proxy/web/img/x.png` behind a path-prefixing proxy, and resolved to
|
|
3193
|
+
* '404.html', so the asset got no hint. Strips the public webroot, else the bundle's
|
|
3194
|
+
* own, once, when the URL starts with it, ending `/` included (`/webx/` is never
|
|
3195
|
+
* stripped by `/web/`). The entry keeps the URL as written.
|
|
3196
|
+
*
|
|
3197
|
+
* @inner
|
|
3198
|
+
* @private
|
|
3199
|
+
* @param {string} u - An asset URL as written
|
|
3200
|
+
* @returns {string} The URL without its webroot, or `u` unchanged
|
|
3201
|
+
*
|
|
3202
|
+
* @example
|
|
3203
|
+
* // server.webroot '/web/', no proxy prefix
|
|
3204
|
+
* withoutWebroot('/web/img/x.png'); // '/img/x.png'
|
|
3205
|
+
* withoutWebroot('/webx/img/x.png'); // '/webx/img/x.png'
|
|
3206
|
+
*/
|
|
3207
|
+
var withoutWebroot = function (u) {
|
|
3208
|
+
var roots = [
|
|
3209
|
+
( data && data.page && data.page.environment ) ? data.page.environment.webroot : null,
|
|
3210
|
+
bundleConf.server.webroot
|
|
3211
|
+
];
|
|
3212
|
+
for (var r = 0; r < roots.length; ++r) {
|
|
3213
|
+
if ( typeof(roots[r]) != 'string' || roots[r].length < 2 ) {
|
|
3214
|
+
continue;
|
|
3215
|
+
}
|
|
3216
|
+
var root = roots[r].replace(/\/*$/, '/');
|
|
3217
|
+
if ( u.indexOf(root) === 0 ) {
|
|
3218
|
+
return '/' + u.substring(root.length);
|
|
3219
|
+
}
|
|
3220
|
+
}
|
|
3221
|
+
return u;
|
|
3222
|
+
};
|
|
3118
3223
|
|
|
3119
3224
|
var assets = {}
|
|
3120
3225
|
, cssFiles = []
|
|
@@ -3144,6 +3249,13 @@ function Server(options) {
|
|
|
3144
3249
|
;
|
|
3145
3250
|
for (; i < len; ++i) {
|
|
3146
3251
|
|
|
3252
|
+
// #B768 — a picture ends here: the srcset its <source> tags collected no longer
|
|
3253
|
+
// waits for an <img>
|
|
3254
|
+
if ( /^<\/picture/.test(layoutAssets[i]) ) {
|
|
3255
|
+
sourceTagSrcSetStr = '';
|
|
3256
|
+
continue;
|
|
3257
|
+
}
|
|
3258
|
+
|
|
3147
3259
|
if (
|
|
3148
3260
|
!/(\<img|\<link|\<source|\<script)/g.test(layoutAssets[i])
|
|
3149
3261
|
// ||
|
|
@@ -3155,10 +3267,26 @@ function Server(options) {
|
|
|
3155
3267
|
continue;
|
|
3156
3268
|
}
|
|
3157
3269
|
|
|
3270
|
+
// #B768 — the tag's kind, from its own name: the kind tests used to run on the whole
|
|
3271
|
+
// match, so with several tags in it the last test that matched won
|
|
3272
|
+
let tagName = layoutAssets[i].match(/^<([a-z]+)/)[1];
|
|
3273
|
+
// only the tags the former alternatives took
|
|
3274
|
+
if (
|
|
3275
|
+
tagName == 'link' && !/rel\=\"(stylesheet|icon|manifest|[^"]*\-icon)/.test(layoutAssets[i])
|
|
3276
|
+
|| tagName == 'source' && !/type\=\"image/.test(layoutAssets[i])
|
|
3277
|
+
) {
|
|
3278
|
+
continue;
|
|
3279
|
+
}
|
|
3280
|
+
// #B775 — nothing carried over from the previous tag: `url` and `ext` were kept, so a
|
|
3281
|
+
// tag with no src / href reused the previous URL (the first such tag threw, and the
|
|
3282
|
+
// page answered 500) and a missing asset showed the previous asset's extension
|
|
3283
|
+
url = null;
|
|
3284
|
+
ext = null;
|
|
3285
|
+
|
|
3158
3286
|
// https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/preload
|
|
3159
3287
|
let asType = null;
|
|
3160
3288
|
|
|
3161
|
-
if (
|
|
3289
|
+
if ( tagName == 'img' ) {
|
|
3162
3290
|
type = 'image';
|
|
3163
3291
|
tag = 'img';
|
|
3164
3292
|
asType = type;
|
|
@@ -3166,7 +3294,7 @@ function Server(options) {
|
|
|
3166
3294
|
|
|
3167
3295
|
|
|
3168
3296
|
|
|
3169
|
-
if (
|
|
3297
|
+
if ( tagName == 'link' ) {
|
|
3170
3298
|
// if ( /rel\=\"stylesheet/.test(layoutAssets[i]) ) {
|
|
3171
3299
|
// type = 'stylesheet';
|
|
3172
3300
|
// } else if ( /rel\=\"(icon|(.*)\-icon)/.test(layoutAssets[i]) ) {
|
|
@@ -3180,7 +3308,10 @@ function Server(options) {
|
|
|
3180
3308
|
}
|
|
3181
3309
|
|
|
3182
3310
|
|
|
3183
|
-
switch
|
|
3311
|
+
// #B766 — this switch used to test `type`, the rel STRING, against the
|
|
3312
|
+
// BOOLEAN results of its case tests, so no case ever matched and a
|
|
3313
|
+
// layout stylesheet never got an `as`
|
|
3314
|
+
switch (true) {
|
|
3184
3315
|
case /stylesheet/.test(type):
|
|
3185
3316
|
asType = 'style';
|
|
3186
3317
|
break;
|
|
@@ -3204,11 +3335,15 @@ function Server(options) {
|
|
|
3204
3335
|
// }
|
|
3205
3336
|
break;
|
|
3206
3337
|
}
|
|
3338
|
+
// #B766 — no preload the browser could not match to the tag
|
|
3339
|
+
if ( ( asType == 'style' || asType == 'script' ) && !isPreloadableLayoutTag(layoutAssets[i], type) ) {
|
|
3340
|
+
asType = null;
|
|
3341
|
+
}
|
|
3207
3342
|
|
|
3208
3343
|
tag = 'link';
|
|
3209
3344
|
}
|
|
3210
3345
|
|
|
3211
|
-
if (
|
|
3346
|
+
if ( tagName == 'source' ) {
|
|
3212
3347
|
if ( /type\=\"image/.test(layoutAssets[i]) ) {
|
|
3213
3348
|
type = 'image';
|
|
3214
3349
|
}
|
|
@@ -3216,13 +3351,17 @@ function Server(options) {
|
|
|
3216
3351
|
tag = 'source';
|
|
3217
3352
|
}
|
|
3218
3353
|
|
|
3219
|
-
if (
|
|
3354
|
+
if ( tagName == 'script' ) {
|
|
3220
3355
|
type = 'javascript';
|
|
3221
3356
|
tag = 'script';
|
|
3222
3357
|
// Skip inline scripts (no src attribute) — not external assets
|
|
3223
3358
|
if ( !/\ssrc\s*=/.test(layoutAssets[i]) ) {
|
|
3224
3359
|
continue;
|
|
3225
3360
|
}
|
|
3361
|
+
// #B766 — a layout script is preloaded too (it never got an `as`)
|
|
3362
|
+
if ( isPreloadableLayoutTag(layoutAssets[i], null) ) {
|
|
3363
|
+
asType = 'script';
|
|
3364
|
+
}
|
|
3226
3365
|
}
|
|
3227
3366
|
|
|
3228
3367
|
domain = null;
|
|
@@ -3267,6 +3406,12 @@ function Server(options) {
|
|
|
3267
3406
|
continue;
|
|
3268
3407
|
}
|
|
3269
3408
|
|
|
3409
|
+
// #B775 — a tag with no `src` / `href` (an <img> with only a srcset) names no file
|
|
3410
|
+
// to preload; first in a layout, it threw at the quote strip below
|
|
3411
|
+
if ( !url ) {
|
|
3412
|
+
continue;
|
|
3413
|
+
}
|
|
3414
|
+
|
|
3270
3415
|
|
|
3271
3416
|
// if ( /data\:/.test(url) ) { // ignoring "data:..."
|
|
3272
3417
|
// continue
|
|
@@ -3291,7 +3436,7 @@ function Server(options) {
|
|
|
3291
3436
|
}
|
|
3292
3437
|
|
|
3293
3438
|
if (!/(\:\/\/|^\/\/)/.test(url) ) {
|
|
3294
|
-
filename = getAssetFilenameFromUrl(bundleConf, url);
|
|
3439
|
+
filename = getAssetFilenameFromUrl(bundleConf, withoutWebroot(url));
|
|
3295
3440
|
} else {
|
|
3296
3441
|
domain = url.match(/^.*:\/\/[a-z0-9._-]+\/?/);
|
|
3297
3442
|
//url = ( new RegExp('/'+ bundleConf.host +'/' ).test(domain) ) ? url.replace(domain, '/') : url;
|
|
@@ -3305,7 +3450,9 @@ function Server(options) {
|
|
|
3305
3450
|
}
|
|
3306
3451
|
//key = (( /404/.test(filename) ) ? '[404]' : '[200]') +' '+ url;
|
|
3307
3452
|
key = url;
|
|
3308
|
-
|
|
3453
|
+
// #B777 — a miss is the resolver's own '404.html'; `/404/` anywhere in the path also
|
|
3454
|
+
// took a bundle under a directory holding `404`, or a file like `error-404.png`, for one
|
|
3455
|
+
isAvailable = ( filename == '404.html' ) ? false : true;
|
|
3309
3456
|
if ( isAvailable ) {
|
|
3310
3457
|
try {
|
|
3311
3458
|
ext = url.substring(url.lastIndexOf('.')).match(/(\.[A-Za-z0-9]+)/)[0];
|
|
@@ -3323,12 +3470,12 @@ function Server(options) {
|
|
|
3323
3470
|
url : url,
|
|
3324
3471
|
ext : ext,
|
|
3325
3472
|
mime : (!ext) ? 'NA' : (bundleConf.server.coreConfiguration.mime[ext.substring(1)] || 'NA'),
|
|
3326
|
-
filename : (
|
|
3473
|
+
filename : ( filename == '404.html' ) ? 'not found' : filename,
|
|
3327
3474
|
isAvailable : isAvailable
|
|
3328
3475
|
};
|
|
3329
3476
|
|
|
3330
|
-
//sourceTagSrcSetStr
|
|
3331
|
-
if (sourceTagSrcSetStr.length > 0) {
|
|
3477
|
+
//sourceTagSrcSetStr — #B768: for the picture's <img> only, never another asset
|
|
3478
|
+
if ( sourceTagSrcSetStr.length > 0 && tagName == 'img' ) {
|
|
3332
3479
|
assets[key]['imagesrcset'] = sourceTagSrcSetStr.substring(0, sourceTagSrcSetStr.length-1);
|
|
3333
3480
|
// reset
|
|
3334
3481
|
sourceTagSrcSetStr = '';
|
|
@@ -3444,7 +3591,13 @@ function Server(options) {
|
|
|
3444
3591
|
|
|
3445
3592
|
if ( /(url\(|url\s+\()/.test(cssArr[c]) && !/data\:|\@font-face/.test(cssArr[c]) ) {
|
|
3446
3593
|
|
|
3447
|
-
|
|
3594
|
+
// #B774 — a `url()` this pattern cannot read (an SVG reference such as
|
|
3595
|
+
// `url(#grad)`), or one naming a fragment, is not a file: skip the block. The
|
|
3596
|
+
// unguarded `[0]` threw, and render-swig answered 500 for the page.
|
|
3597
|
+
let urlMatched = cssArr[c].match(/((background\:url|url)+\()([A-Za-z0-9->~_.,:"'%/\s+]+).*?\)+/g);
|
|
3598
|
+
if ( !urlMatched ) continue;
|
|
3599
|
+
url = urlMatched[0].replace(/((background\:url|url)+\(|\))/g, '').trim();
|
|
3600
|
+
if ( /^["']?#/.test(url) ) continue;
|
|
3448
3601
|
if ( typeof(assetsInClassFound[url]) != 'undefined') continue; // already defined
|
|
3449
3602
|
|
|
3450
3603
|
//cssMatched = cssArr[c].match(/((\.[A-Za-z0-9-_.,;:"'%\s+]+)(\s+\{|{))/);
|
|
@@ -3469,7 +3622,7 @@ function Server(options) {
|
|
|
3469
3622
|
// url: url
|
|
3470
3623
|
// }
|
|
3471
3624
|
if (!/(\:\/\/|^\/\/)/.test(url) ) {
|
|
3472
|
-
filename = getAssetFilenameFromUrl(bundleConf, url);
|
|
3625
|
+
filename = getAssetFilenameFromUrl(bundleConf, withoutWebroot(url));
|
|
3473
3626
|
} else {
|
|
3474
3627
|
domain = url.match(/^.*:\/\/[a-z0-9._-]+\/?/);
|
|
3475
3628
|
url = url.replace(domain, '/');
|
|
@@ -3478,16 +3631,25 @@ function Server(options) {
|
|
|
3478
3631
|
|
|
3479
3632
|
//key = (( /404/.test(filename) ) ? '[404]' : '[200]') +' '+ url;
|
|
3480
3633
|
key = url;
|
|
3481
|
-
|
|
3482
|
-
|
|
3634
|
+
// #B776 — the layout scan's entry for the same URL stays: it carries the
|
|
3635
|
+
// `as` the 200's link header needs, a CSS entry carries none (the
|
|
3636
|
+
// layout image lost its hint)
|
|
3637
|
+
if ( typeof(assets[key]) != 'undefined' ) {
|
|
3638
|
+
break;
|
|
3639
|
+
}
|
|
3640
|
+
isAvailable = ( filename == '404.html' ) ? false : true; // #B777
|
|
3641
|
+
// #B774 — a `url()` with no extension (`url(/img/sprite)`) threw here;
|
|
3642
|
+
// the layout scan reads its own `ext` inside a try
|
|
3643
|
+
let extMatched = url.substring(url.lastIndexOf('.')).match(/(\.[A-Za-z0-9]+)/);
|
|
3644
|
+
ext = ( extMatched ) ? extMatched[0] : null;
|
|
3483
3645
|
assets[key] = {
|
|
3484
3646
|
referrer : cssFiles[i],
|
|
3485
3647
|
definition : definition,
|
|
3486
3648
|
type : type,
|
|
3487
3649
|
url : url,
|
|
3488
3650
|
ext : ext,
|
|
3489
|
-
mime : bundleConf.server.coreConfiguration.mime[ext.substring(1)] || 'NA',
|
|
3490
|
-
filename : (
|
|
3651
|
+
mime : ( ext ) ? ( bundleConf.server.coreConfiguration.mime[ext.substring(1)] || 'NA' ) : 'NA',
|
|
3652
|
+
filename : ( filename == '404.html' ) ? 'not found' : filename
|
|
3491
3653
|
};
|
|
3492
3654
|
|
|
3493
3655
|
if (domain)
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
"forms" : "${bundlePath}/forms",
|
|
10
10
|
"handlers" : "${templatesPath}/handlers",
|
|
11
11
|
"routeNameAsFilenameEnabled": true,
|
|
12
|
-
"ginaEnabled" : true, // set to false, this will exclude gina assets from being loaded
|
|
13
12
|
"pluginLoader" : "{src:${gina}/framework/v${version}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js}",
|
|
14
13
|
"http-metas": {
|
|
15
14
|
"content-type": "text/html"
|
|
@@ -28,6 +27,8 @@
|
|
|
28
27
|
"javascriptsDeferEnabled": true, // will place scripts in defer mode in the head by default. If false, will place in the footer
|
|
29
28
|
"sriEnabled": false, // opt-in Subresource Integrity: adds integrity= + crossorigin= to same-origin <script>/<link> tags whose files resolve on disk; external URLs and unresolvable paths are skipped (fail-open)
|
|
30
29
|
"assetVersioningEnabled": true, // #P48: appends ?v=<10 hex of the file's sha384> to the same-origin asset URLs gina emits (tags + their preload hints) so they can be cached for a year; false keeps today's URLs. Never applied to js external plugins, layoutless renders or dev (fail-open: an unresolvable file keeps its plain URL)
|
|
30
|
+
"preloadHintsEnabled": true, // #B765: the automatic preload hints of an http/2.0 bundle in production, i.e. the `link` header of an HTML page and the 103 Early Hints sent before it; false sends neither (calls to self.setEarlyHints() are not affected)
|
|
31
|
+
"preloadHintsMaxSize": 1024, // #B765: bytes; each automatic hint stops at the last entry that keeps it within this size, so a reverse proxy's response-header buffer (nginx: 4 KiB by default) is not outgrown; 0 = no cap; a negative or non-integer value falls back to 1024 with one warning
|
|
31
32
|
"javascripts": [
|
|
32
33
|
{
|
|
33
34
|
"name" : "gina",
|
|
@@ -21,7 +21,7 @@ var CmdHelper = require('./../helper');
|
|
|
21
21
|
*
|
|
22
22
|
* After writing the entry, prints the exact `npm install <driver>@<range>`
|
|
23
23
|
* command to run, using the resolved version range in this order:
|
|
24
|
-
* 1. the entry's `version` field (set via `--version=`)
|
|
24
|
+
* 1. the entry's `version` field (set via `--driver-version=`)
|
|
25
25
|
* 2. the framework's built-in driver range table (DRIVER_MAP / AI_DRIVER_MAP)
|
|
26
26
|
*
|
|
27
27
|
* Leading header comments at the top of an existing `connectors.json` are
|
|
@@ -83,9 +83,10 @@
|
|
|
83
83
|
install (e.g. ^5.0.0, >=5.3.0 <6.0.0).
|
|
84
84
|
Named `--driver-version=` (not `--version=`)
|
|
85
85
|
because the framework reserves the bare
|
|
86
|
-
`--version` flag (maps to GINA_VERSION
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
`--version` flag (maps to GINA_VERSION; a
|
|
87
|
+
value naming no installed framework version
|
|
88
|
+
is refused). Written to the connector entry
|
|
89
|
+
under the `version` key.
|
|
89
90
|
--force Overwrite an existing entry with the
|
|
90
91
|
same <name>.
|
|
91
92
|
--install After writing the entry, run the detected
|
|
@@ -215,8 +216,8 @@
|
|
|
215
216
|
|
|
216
217
|
After writing, `connector:add` prints the exact
|
|
217
218
|
`npm install <driver>@"<range>"` command. The resolved range comes
|
|
218
|
-
from `--version=` when supplied, otherwise from the
|
|
219
|
-
built-in driver range table.
|
|
219
|
+
from `--driver-version=` when supplied, otherwise from the
|
|
220
|
+
framework's built-in driver range table.
|
|
220
221
|
|
|
221
222
|
`connector:rm` writes to the same two targets (shared vs bundle) per
|
|
222
223
|
positional-absence. It never uninstalls the npm driver — another
|
|
@@ -17,7 +17,11 @@ $ gina --status | -t
|
|
|
17
17
|
$ gina framework:start | start
|
|
18
18
|
|
|
19
19
|
Start the framework socket server (port 8124) + MQ listener (8125) in the
|
|
20
|
-
background. Required before any online command (e.g. bundle:start).
|
|
20
|
+
background. Required before any online command (e.g. bundle:start). Exits 0
|
|
21
|
+
once the server is ready or already running; if it stops before that, exits
|
|
22
|
+
with its exit code (1 when that is 0, 128 + the signal number on a signal).
|
|
23
|
+
Exits 1 when another program holds the framework port, printing how to free
|
|
24
|
+
the port or move the framework (gina framework:set --port=<port>).
|
|
21
25
|
|
|
22
26
|
$ gina framework:stop | stop [ @<version> ]
|
|
23
27
|
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module gina/lib/cmd/framework/inc/listen-error
|
|
3
|
+
*
|
|
4
|
+
* Decides what `gina start` does when the framework's command socket cannot
|
|
5
|
+
* listen (#B761). `bin/cli` binds the MQ listener, then `bin/cmd` binds the
|
|
6
|
+
* command socket on the framework port; its `error` handler asks `decide()`.
|
|
7
|
+
*
|
|
8
|
+
* When the port is in use, « Framework already running … [ <pid> ] » (the line
|
|
9
|
+
* the `gina` wrapper exits 0 on) is printed only for a `procs.json` entry whose
|
|
10
|
+
* pid is alive and a framework daemon, read with `inc/ps-titles.js`
|
|
11
|
+
* `readPidTitle()`: titled `gina-v<version>` on Node, or, on Bun (which does
|
|
12
|
+
* not show `process.title`), still running the framework's own start command.
|
|
13
|
+
* Otherwise, and for any other listen error, the start writes the reason to
|
|
14
|
+
* stderr and exits 1, which also frees the MQ port the starting process holds.
|
|
15
|
+
*
|
|
16
|
+
* Before 0.7.3 the handler trusted any `procs.json` entry for the port without
|
|
17
|
+
* checking it, returned when there was none, and only logged any other error:
|
|
18
|
+
* a port held by another program read « already running » with exit 0, a stale
|
|
19
|
+
* entry named a dead pid, the process never ended (a half-started daemon kept
|
|
20
|
+
* the MQ port), and an EACCES left `gina start` hanging.
|
|
21
|
+
*/
|
|
22
|
+
var psTitles = require('./ps-titles');
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The prefix of every message this module writes.
|
|
26
|
+
*
|
|
27
|
+
* @constant
|
|
28
|
+
* @type {string}
|
|
29
|
+
*/
|
|
30
|
+
var PREFIX = 'gina: cannot start the framework: ';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Lists the pids that `procs.json` records for a port, in the file's order:
|
|
34
|
+
* each entry of its own whose `port` equals `port` once both are strings, its
|
|
35
|
+
* `pid` read with `parsePid()` (so `-1`, `0`, `12abc` and `null` are no pid).
|
|
36
|
+
* A pid recorded twice is listed once.
|
|
37
|
+
*
|
|
38
|
+
* @param {?object} procs - The parsed `procs.json`: `{ "<title>": { pid, port, … } }`
|
|
39
|
+
* @param {number|string} port - The framework port
|
|
40
|
+
* @returns {Array<number>} The recorded pids; empty when there is none
|
|
41
|
+
* @example
|
|
42
|
+
* findRecordedPids({ 'gina-v0.7.2': { pid: 111, port: 8124 }, 'gina-v0.7.3': { pid: 222, port: '8124' } }, 8124);
|
|
43
|
+
* // [ 111, 222 ]
|
|
44
|
+
*/
|
|
45
|
+
function findRecordedPids(procs, port) {
|
|
46
|
+
var pids = [];
|
|
47
|
+
if (!procs || typeof procs !== 'object' || port === null || typeof port === 'undefined' || String(port) === '') {
|
|
48
|
+
return pids;
|
|
49
|
+
}
|
|
50
|
+
Object.keys(procs).forEach(function (key) {
|
|
51
|
+
var entry = procs[key];
|
|
52
|
+
if (!entry || typeof entry !== 'object' || String(entry.port) !== String(port)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
var pid = psTitles.parsePid(entry.pid);
|
|
56
|
+
if (pid !== null && pids.indexOf(pid) < 0) {
|
|
57
|
+
pids.push(pid);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return pids;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The first pid that `procs.json` records for a port (see `findRecordedPids()`).
|
|
65
|
+
*
|
|
66
|
+
* @param {?object} procs - The parsed `procs.json`
|
|
67
|
+
* @param {number|string} port - The framework port
|
|
68
|
+
* @returns {?number} The pid, or `null` when no entry for the port has one
|
|
69
|
+
* @example
|
|
70
|
+
* findRecordedPid({ x: { pid: 4321, port: '8124' } }, 8124); // 4321
|
|
71
|
+
* findRecordedPid({ x: { pid: '-1', port: 8124 } }, 8124); // null
|
|
72
|
+
*/
|
|
73
|
+
function findRecordedPid(procs, port) {
|
|
74
|
+
var pids = findRecordedPids(procs, port);
|
|
75
|
+
return pids.length > 0 ? pids[0] : null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Tells what a recorded pid is now. It is `'dead'` when no process has it
|
|
80
|
+
* (`process.kill(pid, 0)` throws, other than EPERM, which another user's live
|
|
81
|
+
* process gives) or when it is a zombie; `'framework'` when it is a framework
|
|
82
|
+
* daemon: titled `gina-v<version>` (`DAEMON_TITLE_RE`, Node), or running the
|
|
83
|
+
* framework's own start command (`DAEMON_COMMAND_RE`, Bun, which does not
|
|
84
|
+
* show `process.title`); `'other'` when another program has it. Where the
|
|
85
|
+
* process cannot be read, the alive check decides, as before 0.7.3: `ps`
|
|
86
|
+
* cannot tell (no `ps` on Windows, busybox), or `ps` lists nothing for
|
|
87
|
+
* another user's live process (a `/proc` mounted with `hidepid`).
|
|
88
|
+
*
|
|
89
|
+
* @param {number} pid - A pid read with `parsePid()`
|
|
90
|
+
* @param {{kill: function(number, number), readPidTitle: function(number): (?object|undefined)}} [probe]
|
|
91
|
+
* Replaces `process.kill` and `readPidTitle()` (tests)
|
|
92
|
+
* @returns {string} `'framework'`, `'other'` or `'dead'`
|
|
93
|
+
* @example
|
|
94
|
+
* classifyPid(process.pid); // 'other' — a live process that is not a framework daemon
|
|
95
|
+
* classifyPid(99999); // 'dead' — when no process has that pid
|
|
96
|
+
*/
|
|
97
|
+
function classifyPid(pid, probe) {
|
|
98
|
+
var kill = (probe && probe.kill) ? probe.kill : function (p, signal) { return process.kill(p, signal); };
|
|
99
|
+
var read = (probe && probe.readPidTitle) ? probe.readPidTitle : psTitles.readPidTitle;
|
|
100
|
+
var otherUser = false;
|
|
101
|
+
try {
|
|
102
|
+
kill(pid, 0);
|
|
103
|
+
} catch (killErr) {
|
|
104
|
+
if (!killErr || killErr.code !== 'EPERM') {
|
|
105
|
+
return 'dead';
|
|
106
|
+
}
|
|
107
|
+
otherUser = true;
|
|
108
|
+
}
|
|
109
|
+
var seen = read(pid);
|
|
110
|
+
if (typeof seen === 'undefined') {
|
|
111
|
+
return 'framework';
|
|
112
|
+
}
|
|
113
|
+
if (seen === null) {
|
|
114
|
+
// our own process is always listed, so it has just exited; another
|
|
115
|
+
// user's live process can be hidden from `ps`
|
|
116
|
+
return otherUser ? 'framework' : 'dead';
|
|
117
|
+
}
|
|
118
|
+
if (seen.zombie) {
|
|
119
|
+
return 'dead';
|
|
120
|
+
}
|
|
121
|
+
var isDaemon = psTitles.DAEMON_TITLE_RE.test(seen.title || '')
|
|
122
|
+
|| psTitles.DAEMON_COMMAND_RE.test(seen.command || '');
|
|
123
|
+
return isDaemon ? 'framework' : 'other';
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* The message for a framework port held by something that is not a running
|
|
128
|
+
* framework: the cause, the fix, and (not on Windows) how to find the holder.
|
|
129
|
+
* It never says « address already in use »: the `gina` wrapper exits on those
|
|
130
|
+
* words at once instead of waiting for the start's exit code.
|
|
131
|
+
*
|
|
132
|
+
* @param {number|string} port - The framework port
|
|
133
|
+
* @param {?{procsFile: string, pid: number, state: string}} recorded - The
|
|
134
|
+
* `procs.json` entry for the port, with the `classifyPid()` state of its pid
|
|
135
|
+
* (`'dead'` or `'other'`); `null` when there is none
|
|
136
|
+
* @param {string} platform - `process.platform`
|
|
137
|
+
* @returns {string} Two or three lines, without a trailing newline
|
|
138
|
+
* @example
|
|
139
|
+
* heldPortMessage(8124, null, 'darwin');
|
|
140
|
+
* // gina: cannot start the framework: port 8124 is held by another program, not a running gina framework.
|
|
141
|
+
* // Free the port, or move the framework: gina framework:set --port=<port>
|
|
142
|
+
* // Find the holder: lsof -nP -iTCP:8124 -sTCP:LISTEN
|
|
143
|
+
*/
|
|
144
|
+
function heldPortMessage(port, recorded, platform) {
|
|
145
|
+
var cause = PREFIX + 'port ' + port + ' is held by another program';
|
|
146
|
+
if (recorded && recorded.pid) {
|
|
147
|
+
cause += '; ' + recorded.procsFile + ' names pid ' + recorded.pid + ', which is '
|
|
148
|
+
+ (recorded.state === 'dead' ? 'not running.' : 'not a gina framework.');
|
|
149
|
+
} else {
|
|
150
|
+
cause += ', not a running gina framework.';
|
|
151
|
+
}
|
|
152
|
+
var lines = [cause, 'Free the port, or move the framework: gina framework:set --port=<port>'];
|
|
153
|
+
if (platform !== 'win32') {
|
|
154
|
+
lines.push('Find the holder: lsof -nP -iTCP:' + port + ' -sTCP:LISTEN');
|
|
155
|
+
}
|
|
156
|
+
return lines.join('\n');
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Decides what the command socket's `error` handler does when the socket
|
|
161
|
+
* cannot listen. Only an EADDRINUSE under `framework:start` looks at
|
|
162
|
+
* `procs.json`: when a pid recorded for the port is a running framework, the
|
|
163
|
+
* start reports it as already running; otherwise it exits 1 with
|
|
164
|
+
* `heldPortMessage()`. Any other error exits 1 with its own message, on one
|
|
165
|
+
* line.
|
|
166
|
+
*
|
|
167
|
+
* @param {Error} err - The listen error (`code`, `port`, `message`)
|
|
168
|
+
* @param {object} ctx
|
|
169
|
+
* @param {string} ctx.command - The command being run (`process.argv[2]`)
|
|
170
|
+
* @param {number|string} ctx.port - The framework port
|
|
171
|
+
* @param {string} ctx.procsFile - The path of `procs.json`, named in the message
|
|
172
|
+
* @param {?object} ctx.procs - The parsed `procs.json`; `null` when it is
|
|
173
|
+
* missing or does not parse
|
|
174
|
+
* @param {string} [ctx.platform] - Defaults to `process.platform`
|
|
175
|
+
* @param {function(number): string} [ctx.classifyPid] - Defaults to `classifyPid()` (tests)
|
|
176
|
+
* @returns {{action: string, pid: number, port: (number|string)}|{action: string, code: number, message: string}}
|
|
177
|
+
* `{ action: 'already-running', pid, port }` or `{ action: 'exit', code: 1, message }`
|
|
178
|
+
* @example
|
|
179
|
+
* var decision = decide(err, { command: 'framework:start', port: 8124, procsFile: procsFile, procs: procs });
|
|
180
|
+
* if (decision.action === 'already-running') {
|
|
181
|
+
* console.warn('Framework already running on port `'+ decision.port +'`: [ '+ decision.pid +' ]');
|
|
182
|
+
* } else {
|
|
183
|
+
* fs.writeSync(2, decision.message + '\n');
|
|
184
|
+
* process.exit(decision.code);
|
|
185
|
+
* }
|
|
186
|
+
*/
|
|
187
|
+
function decide(err, ctx) {
|
|
188
|
+
ctx = ctx || {};
|
|
189
|
+
var platform = ctx.platform || process.platform;
|
|
190
|
+
|
|
191
|
+
if (err && err.code === 'EADDRINUSE' && ctx.command === 'framework:start') {
|
|
192
|
+
var classify = ctx.classifyPid || classifyPid;
|
|
193
|
+
var pids = findRecordedPids(ctx.procs, ctx.port);
|
|
194
|
+
var recorded = null;
|
|
195
|
+
for (var i = 0; i < pids.length; i++) {
|
|
196
|
+
var state = classify(pids[i]);
|
|
197
|
+
if (state === 'framework') {
|
|
198
|
+
return { action: 'already-running', pid: pids[i], port: ctx.port };
|
|
199
|
+
}
|
|
200
|
+
if (!recorded) {
|
|
201
|
+
recorded = { procsFile: ctx.procsFile, pid: pids[i], state: state };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return { action: 'exit', code: 1, message: heldPortMessage(ctx.port, recorded, platform) };
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
var reason = (err && err.message) ? String(err.message) : String(err);
|
|
208
|
+
return { action: 'exit', code: 1, message: PREFIX + reason.split(/\r?\n/)[0] };
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
module.exports = {
|
|
212
|
+
findRecordedPids : findRecordedPids,
|
|
213
|
+
findRecordedPid : findRecordedPid,
|
|
214
|
+
classifyPid : classifyPid,
|
|
215
|
+
heldPortMessage : heldPortMessage,
|
|
216
|
+
decide : decide
|
|
217
|
+
};
|