gina 0.3.7-alpha.5 → 0.3.7-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/scripts/scan-vendored-cves.js +188 -0
- package/.github/workflows/bundle-freshness.yml +116 -0
- package/.github/workflows/vendored-cve.yml +36 -0
- package/CHANGELOG.md +14 -0
- package/ROADMAP.md +22 -0
- package/framework/v0.3.7-alpha.7/VERSION +1 -0
- package/framework/v0.3.7-alpha.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css +1 -0
- package/framework/v0.3.7-alpha.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- package/framework/v0.3.7-alpha.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/js/gina.js +107 -5
- package/framework/v0.3.7-alpha.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js +544 -0
- package/framework/v0.3.7-alpha.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.3.7-alpha.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.3.7-alpha.7/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +8 -0
- package/framework/v0.3.7-alpha.7/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- package/framework/v0.3.7-alpha.7/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/couchbase/lib/session-store.v2.js +1 -1
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/couchbase/lib/session-store.v3.js +1 -1
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/couchbase/lib/session-store.v4.js +1 -1
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/deps/busboy-1.6.0/package.json +12 -0
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/deps/streamsearch-1.1.0/package.json +9 -0
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/locales/README.md +1 -1
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/index.js +3 -1
- package/framework/v0.3.7-alpha.7/core/plugins/lib/session/README.md +86 -0
- package/framework/v0.3.7-alpha.7/core/plugins/lib/session/package.json +22 -0
- package/framework/v0.3.7-alpha.7/core/plugins/lib/session/src/main.js +191 -0
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/validator/src/form-validator.js +86 -3
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/validator/src/main.js +20 -1
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/server.js +0 -2
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/controllers/setup.js +2 -2
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/index.js +12 -8
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/conf/settings.json +13 -0
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/gina-dev.1.md +1 -1
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/gina-framework.1.md +1 -1
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/gina.1.md +1 -1
- package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +10 -2
- package/package.json +5 -3
- package/schema/app.crons.json +1 -1
- package/schema/app.json +1 -1
- package/schema/connectors.json +1 -1
- package/schema/manifest.json +1 -1
- package/schema/routing.json +1 -1
- package/schema/settings.json +1 -1
- package/schema/watchers.json +1 -1
- package/script/.local-sync-targets.json +6 -0
- package/framework/v0.3.7-alpha.5/VERSION +0 -1
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -1
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -249
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -540
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -8
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- package/framework/v0.3.7-alpha.5/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/AUTHORS +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/LICENSE +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/html/static.html +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/config.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/couchbase/lib/connector.v2.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/content.encoding +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/controller/controller.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/controller/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/dev/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/gna.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/locales/currency.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/locales/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/mime.types +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/model/entity.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/model/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/model/template/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/file/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/file/build.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/file/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/intl/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/intl/build.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/intl/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/intl/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/router.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/server.express.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/server.isaac.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/status.codes +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/_gitignore +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/conf/env.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/conf/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/console.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/context.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/data/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/data/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/json/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/json/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/path.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/prototypes.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/task.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/helpers/text.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/archiver/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/archiver/build.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/archiver/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/async/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/async/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cache/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cache/build.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cache/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/collection/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/collection/build.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/collection/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/config.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cron/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cron/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/domain/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/domain/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/generator/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/inherits/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/inherits/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/math/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/merge/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/merge/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/model.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/proc.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/routing/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/routing/build.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/routing/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/session-store.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/shell.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/state.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/url/README.md +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/url/index.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/url/routing.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/uuid/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/validator.js +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/watcher/package.json +0 -0
- /package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/lib/watcher/src/main.js +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/*
|
|
3
|
+
* This file is part of the gina package.
|
|
4
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* OSV-based CVE scan for vendored deps.
|
|
12
|
+
*
|
|
13
|
+
* Walks every `package.json` under `framework/v*\/core/deps/`, extracts
|
|
14
|
+
* `(name, version)` pairs, queries `api.osv.dev`, and exits non-zero if
|
|
15
|
+
* any vulnerability is matched.
|
|
16
|
+
*
|
|
17
|
+
* Pinning convention (see .claude/architecture/vendored-deps.md): the
|
|
18
|
+
* vendored `package.json` stays byte-identical to upstream until
|
|
19
|
+
* patched; on patch, `version` is bumped to `<upstream>-rhinostone.N`
|
|
20
|
+
* (e.g. `1.6.0-rhinostone.1`). This script strips the
|
|
21
|
+
* `-rhinostone.N` suffix before querying so OSV still matches the base
|
|
22
|
+
* upstream version.
|
|
23
|
+
*
|
|
24
|
+
* Exit codes:
|
|
25
|
+
* 0 — clean, no CVEs matched
|
|
26
|
+
* 1 — at least one vulnerability matched (build fails)
|
|
27
|
+
* 2 — scan error (malformed package.json, network failure)
|
|
28
|
+
*
|
|
29
|
+
* @module .github/scripts/scan-vendored-cves
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
'use strict';
|
|
33
|
+
|
|
34
|
+
var fs = require('fs');
|
|
35
|
+
var path = require('path');
|
|
36
|
+
var https = require('https');
|
|
37
|
+
|
|
38
|
+
var ROOT = path.resolve(__dirname, '..', '..');
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Walk every `framework/v*\/core/deps/<dep>/package.json` and return the
|
|
42
|
+
* list of absolute paths.
|
|
43
|
+
*
|
|
44
|
+
* @returns {string[]}
|
|
45
|
+
*/
|
|
46
|
+
function walkDepsPackageJsons() {
|
|
47
|
+
var frameworkDir = path.join(ROOT, 'framework');
|
|
48
|
+
if (!fs.existsSync(frameworkDir)) return [];
|
|
49
|
+
var results = [];
|
|
50
|
+
var fws = fs.readdirSync(frameworkDir);
|
|
51
|
+
for (var i = 0; i < fws.length; i++) {
|
|
52
|
+
var depsDir = path.join(frameworkDir, fws[i], 'core', 'deps');
|
|
53
|
+
if (!fs.existsSync(depsDir)) continue;
|
|
54
|
+
if (!fs.statSync(depsDir).isDirectory()) continue;
|
|
55
|
+
var deps = fs.readdirSync(depsDir);
|
|
56
|
+
for (var j = 0; j < deps.length; j++) {
|
|
57
|
+
var pkgPath = path.join(depsDir, deps[j], 'package.json');
|
|
58
|
+
if (fs.existsSync(pkgPath)) results.push(pkgPath);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return results;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Strip the local-patch suffix (`-rhinostone.N`) so OSV sees the base
|
|
66
|
+
* upstream version. If the version has no such suffix, returned as-is.
|
|
67
|
+
*
|
|
68
|
+
* @param {string} v
|
|
69
|
+
* @returns {string}
|
|
70
|
+
*/
|
|
71
|
+
function normalizeVersion(v) {
|
|
72
|
+
return String(v).replace(/-rhinostone\.\d+$/, '');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* POST a single `(name, version)` query to api.osv.dev/v1/query.
|
|
77
|
+
* Resolves with the parsed JSON response (which may carry `{vulns: [...]}`
|
|
78
|
+
* or be empty `{}` on a clean match).
|
|
79
|
+
*
|
|
80
|
+
* @param {string} name
|
|
81
|
+
* @param {string} version
|
|
82
|
+
* @returns {Promise<object>}
|
|
83
|
+
*/
|
|
84
|
+
function queryOSV(name, version) {
|
|
85
|
+
return new Promise(function (resolve, reject) {
|
|
86
|
+
var body = JSON.stringify({
|
|
87
|
+
package: { name: name, ecosystem: 'npm' },
|
|
88
|
+
version: version
|
|
89
|
+
});
|
|
90
|
+
var req = https.request({
|
|
91
|
+
method: 'POST',
|
|
92
|
+
hostname: 'api.osv.dev',
|
|
93
|
+
path: '/v1/query',
|
|
94
|
+
headers: {
|
|
95
|
+
'Content-Type': 'application/json',
|
|
96
|
+
'Content-Length': Buffer.byteLength(body)
|
|
97
|
+
}
|
|
98
|
+
}, function (res) {
|
|
99
|
+
var data = '';
|
|
100
|
+
res.on('data', function (chunk) { data += chunk; });
|
|
101
|
+
res.on('end', function () {
|
|
102
|
+
if (res.statusCode !== 200) {
|
|
103
|
+
return reject(new Error('OSV HTTP ' + res.statusCode + ': ' + data));
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
resolve(JSON.parse(data));
|
|
107
|
+
} catch (e) {
|
|
108
|
+
reject(e);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
req.on('error', reject);
|
|
113
|
+
req.write(body);
|
|
114
|
+
req.end();
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Scan driver. Walks the target package.jsons, queries OSV for each,
|
|
120
|
+
* prints a one-line status per dep, exits with the appropriate code.
|
|
121
|
+
*
|
|
122
|
+
* @returns {Promise<number>} exit code
|
|
123
|
+
*/
|
|
124
|
+
async function main() {
|
|
125
|
+
var pkgs = walkDepsPackageJsons();
|
|
126
|
+
if (pkgs.length === 0) {
|
|
127
|
+
console.log('[osv] no vendored package.json files found under framework/v*/core/deps/');
|
|
128
|
+
return 0;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
var failures = 0;
|
|
132
|
+
var scanned = 0;
|
|
133
|
+
for (var i = 0; i < pkgs.length; i++) {
|
|
134
|
+
var pkgPath = pkgs[i];
|
|
135
|
+
var rel = path.relative(ROOT, pkgPath);
|
|
136
|
+
var pkg;
|
|
137
|
+
try {
|
|
138
|
+
pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
139
|
+
} catch (e) {
|
|
140
|
+
console.error('[osv] ' + rel + ': cannot parse (' + e.message + ')');
|
|
141
|
+
return 2;
|
|
142
|
+
}
|
|
143
|
+
if (!pkg.name || !pkg.version) {
|
|
144
|
+
console.log('[osv] SKIP ' + rel + ': missing name or version');
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
var baseVersion = normalizeVersion(pkg.version);
|
|
149
|
+
var suffix = (pkg.version !== baseVersion) ? ' (patched: ' + pkg.version + ')' : '';
|
|
150
|
+
var result;
|
|
151
|
+
try {
|
|
152
|
+
result = await queryOSV(pkg.name, baseVersion);
|
|
153
|
+
} catch (e) {
|
|
154
|
+
console.error('[osv] ' + rel + ': query failed — ' + e.message);
|
|
155
|
+
return 2;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
scanned++;
|
|
159
|
+
var vulns = result.vulns || [];
|
|
160
|
+
if (vulns.length > 0) {
|
|
161
|
+
failures++;
|
|
162
|
+
console.error('[osv] VULNERABLE ' + pkg.name + '@' + baseVersion + suffix + ' (' + rel + ')');
|
|
163
|
+
for (var v = 0; v < vulns.length; v++) {
|
|
164
|
+
var entry = vulns[v];
|
|
165
|
+
var aliases = (entry.aliases || []).join(', ');
|
|
166
|
+
var summary = (entry.summary || entry.details || '').replace(/\s+/g, ' ').slice(0, 140);
|
|
167
|
+
console.error(' ' + entry.id + (aliases ? ' (' + aliases + ')' : '') + ' — ' + summary);
|
|
168
|
+
}
|
|
169
|
+
} else {
|
|
170
|
+
console.log('[osv] OK ' + pkg.name + '@' + baseVersion + suffix + ' (' + rel + ')');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
console.log('');
|
|
175
|
+
if (failures > 0) {
|
|
176
|
+
console.error('[osv] ' + failures + ' vendored dep(s) with matching CVEs — failing the build.');
|
|
177
|
+
return 1;
|
|
178
|
+
}
|
|
179
|
+
console.log('[osv] clean — no CVEs matched across ' + scanned + ' vendored dep(s).');
|
|
180
|
+
return 0;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
main().then(function (code) {
|
|
184
|
+
process.exit(code);
|
|
185
|
+
}).catch(function (err) {
|
|
186
|
+
console.error('[osv] uncaught:', err);
|
|
187
|
+
process.exit(2);
|
|
188
|
+
});
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
name: Bundle Freshness
|
|
2
|
+
|
|
3
|
+
# Verifies that the committed dist/vendor/gina/ bundle matches what would
|
|
4
|
+
# be produced by rebuilding from the current source. Catches the
|
|
5
|
+
# source-committed-without-rebuild gap that .githooks/pre-commit (cheap,
|
|
6
|
+
# "did you stage dist?") cannot detect — i.e. a stale dist was staged
|
|
7
|
+
# alongside a fresh source change.
|
|
8
|
+
#
|
|
9
|
+
# Precedent: #SCS1e (commit 48b8fd26) shipped four validator walker
|
|
10
|
+
# replacements as source-only. The bundle was not rebuilt until commit
|
|
11
|
+
# 69fb32fc picked it up as a side effect of toolbar removal. Any browser
|
|
12
|
+
# loading gina.min.js between those two commits still ran the original
|
|
13
|
+
# eval('data.' + localValue). See llms.txt §72.
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
push:
|
|
17
|
+
branches: [develop, master]
|
|
18
|
+
pull_request:
|
|
19
|
+
branches: [develop, master]
|
|
20
|
+
workflow_dispatch:
|
|
21
|
+
|
|
22
|
+
# Cancel any in-flight check for the same ref when a newer one kicks off.
|
|
23
|
+
concurrency:
|
|
24
|
+
group: bundle-freshness-${{ github.ref }}
|
|
25
|
+
cancel-in-progress: true
|
|
26
|
+
|
|
27
|
+
permissions:
|
|
28
|
+
contents: read
|
|
29
|
+
|
|
30
|
+
jobs:
|
|
31
|
+
freshness:
|
|
32
|
+
name: Verify dist matches source
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
timeout-minutes: 10
|
|
35
|
+
steps:
|
|
36
|
+
- name: Checkout
|
|
37
|
+
uses: actions/checkout@v4
|
|
38
|
+
|
|
39
|
+
- name: Set up Node.js
|
|
40
|
+
uses: actions/setup-node@v4
|
|
41
|
+
with:
|
|
42
|
+
node-version: '22'
|
|
43
|
+
|
|
44
|
+
- name: Set up Java (for Closure Compiler)
|
|
45
|
+
uses: actions/setup-java@v4
|
|
46
|
+
with:
|
|
47
|
+
distribution: 'temurin'
|
|
48
|
+
java-version: '21'
|
|
49
|
+
|
|
50
|
+
- name: Install build prerequisites
|
|
51
|
+
run: |
|
|
52
|
+
sudo apt-get update
|
|
53
|
+
sudo apt-get install -y brotli
|
|
54
|
+
|
|
55
|
+
- name: Install dev dependencies
|
|
56
|
+
run: |
|
|
57
|
+
# `npm ci` (not `npm install`) — strictly respects package-lock.json
|
|
58
|
+
# so devDeps like engine.io-client (which gets baked into the bundle
|
|
59
|
+
# via build.json) don't drift between local rebuilds and CI rebuilds.
|
|
60
|
+
# See llms.txt §72 / 2026-04-24 incident.
|
|
61
|
+
npm ci --ignore-scripts
|
|
62
|
+
ln -sf $(pwd) node_modules/gina
|
|
63
|
+
|
|
64
|
+
- name: Prepare framework dependencies
|
|
65
|
+
run: |
|
|
66
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
67
|
+
FW_DIR="framework/v${VERSION}"
|
|
68
|
+
if [ ! -f "${FW_DIR}/package.json" ]; then
|
|
69
|
+
cat > "${FW_DIR}/package.json" <<EOF
|
|
70
|
+
{
|
|
71
|
+
"name": "gina-framework",
|
|
72
|
+
"version": "${VERSION}",
|
|
73
|
+
"dependencies": {
|
|
74
|
+
"@rhinostone/swig": "^1.6.0"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
EOF
|
|
78
|
+
fi
|
|
79
|
+
(cd "${FW_DIR}" && npm install --ignore-scripts)
|
|
80
|
+
|
|
81
|
+
- name: Install Closure Compiler JARs
|
|
82
|
+
run: bash framework/v*/core/asset/plugin/lib/js/install-closure-compiler.sh
|
|
83
|
+
|
|
84
|
+
- name: Rebuild bundle
|
|
85
|
+
run: |
|
|
86
|
+
bash framework/v*/core/asset/plugin/build --env=prod \
|
|
87
|
+
--sass-bin="$PWD/node_modules/.bin/sass" \
|
|
88
|
+
--csso-bin="$PWD/node_modules/.bin/csso" \
|
|
89
|
+
--rjs-bin="$PWD/node_modules/.bin/r.js"
|
|
90
|
+
|
|
91
|
+
- name: Verify dist is in sync with source
|
|
92
|
+
run: |
|
|
93
|
+
# *.gz files are excluded: gzip output is platform-specific (Apple
|
|
94
|
+
# gzip on the maintainer's Mac vs GNU gzip on Linux runners produce
|
|
95
|
+
# different deflate bytes for the same input — even Node's zlib
|
|
96
|
+
# disagrees Mac↔Linux because it links the system zlib). Brotli IS
|
|
97
|
+
# cross-platform deterministic (single canonical reference impl),
|
|
98
|
+
# so the .br files remain checked. If a .css/.js/.html source
|
|
99
|
+
# changes without a rebuild, the .br diff catches it; the .gz
|
|
100
|
+
# divergence would have been a false positive.
|
|
101
|
+
if ! git diff --exit-code -- \
|
|
102
|
+
'framework/v*/core/asset/plugin/dist/vendor/gina/' \
|
|
103
|
+
':(exclude)framework/v*/core/asset/plugin/dist/vendor/gina/**/*.gz'; then
|
|
104
|
+
echo ""
|
|
105
|
+
echo "::error::Bundle is out of sync with source."
|
|
106
|
+
echo "::error::A source file under one of the AMD-aliased paths in build.json"
|
|
107
|
+
echo "::error::was modified without a corresponding rebuilt dist staged."
|
|
108
|
+
echo "::error::"
|
|
109
|
+
echo "::error::Locally:"
|
|
110
|
+
echo "::error:: bash framework/v*/core/asset/plugin/build --env=prod"
|
|
111
|
+
echo "::error:: git add framework/v*/core/asset/plugin/dist/vendor/gina/"
|
|
112
|
+
echo "::error::"
|
|
113
|
+
echo "::error::See llms.txt §72 for the rebuild-gate discipline."
|
|
114
|
+
exit 1
|
|
115
|
+
fi
|
|
116
|
+
echo "Bundle is fresh — dist matches source (excluding *.gz, which is platform-divergent)."
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: Vendored CVE Scan
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [develop, master]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [develop, master]
|
|
8
|
+
schedule:
|
|
9
|
+
# Weekly, Sunday 00:00 UTC — catches CVEs disclosed after the last push.
|
|
10
|
+
- cron: '0 0 * * 0'
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
# Cancel any in-flight scan for the same ref when a newer one kicks off.
|
|
14
|
+
concurrency:
|
|
15
|
+
group: vendored-cve-${{ github.ref }}
|
|
16
|
+
cancel-in-progress: true
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: read
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
scan:
|
|
23
|
+
name: OSV scan on vendored deps
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
timeout-minutes: 5
|
|
26
|
+
steps:
|
|
27
|
+
- name: Checkout
|
|
28
|
+
uses: actions/checkout@v4
|
|
29
|
+
|
|
30
|
+
- name: Set up Node.js
|
|
31
|
+
uses: actions/setup-node@v4
|
|
32
|
+
with:
|
|
33
|
+
node-version: '22'
|
|
34
|
+
|
|
35
|
+
- name: Scan vendored package.jsons via api.osv.dev
|
|
36
|
+
run: node .github/scripts/scan-vendored-cves.js
|
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,20 @@ 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.3.7-alpha.7 - 2026-04-25
|
|
10
|
+
### Fixed
|
|
11
|
+
* Schema `$schema` identifier updated from `http://json-schema.org/draft-07/schema#` to `https://json-schema.org/draft-07/schema#` across all seven `schema/*.json` files (app, app.crons, connectors, manifest, routing, settings, watchers). The plain-HTTP form redirects to HTTPS and is bot-blocked by json-schema.org; IDEs and JSON validators that dereference the identifier at validation time were hitting the 302/403 chain instead of fetching the canonical schema. Matches the URI shown in the JSON Schema draft-07 spec and aligns with the `$id` field, which already uses `https://`. First batch from the link-health audit (gina-io/gina#18).
|
|
12
|
+
* Refreshed stale URL references in code comments and man pages across the framework (link-health audit gina-io/gina#18): `core/template/boilerplate/bundle/controllers/setup.js` — dropped reference to the deleted `github.com/jmcmanus/pagedown-extra` repo (the commented-out example code uses `marked`, not pagedown-extra; the link was misleading even before the repo died). `core/connectors/couchbase/lib/session-store.v{2,3,4}.js` — updated `github.com/visionmedia/connect-redis` to `github.com/tj/connect-redis` (the maintainer renamed; old URL still 302s but relying on a stale redirect chain is brittle). `core/locales/README.md` — replaced `currency-iso.org/en/home/tables/table-a1.html` (folded into a SIX Swiss Exchange commercial page) with the canonical `iso.org/iso-4217-currency-codes.html`. `lib/cmd/gina.1.md`, `gina-dev.1.md`, `gina-framework.1.md` — modernised the `groups.google.com/forum/#!forum/ginajs` mailing-list link to the supported `groups.google.com/g/ginajs` URL format. The Google Group itself is still active; only the hash-bang URL format is obsolete. `core/server.js` — dropped dead `strongloop.com/strongblog/...` blog-post reference (domain TLS-broken, StrongLoop dissolved into IBM in 2015, the blog post is not reachable via any successor) and dead `jsperf.com/arraybuffer-string-conversion/4` test reference (410 Gone; jsperf relaunched on Cloudflare but the historical test data was not restored). Comment-only changes; no runtime behaviour modified.
|
|
13
|
+
* `core/asset/plugin/src/vendor/gina/utils/dom.js` — updated the `@source https://gist.github.com/1129031` comment to the current canonical form `https://gist.github.com/eligrey/1129031`. GitHub now requires the username prefix on gist URLs; the old form 302-redirects. Rebuilt dist artefacts in the same commit per the source-dist alignment rule (llms.txt §72) — `dist/vendor/gina/js/gina.js`, `gina.min.js`, and the sibling `gina.min.js.br`/`gina.min.js.gz` compressed copies regenerate identically except for the updated license header URL. No runtime behaviour change. Link-health audit (gina-io/gina#18).
|
|
14
|
+
### Security
|
|
15
|
+
* Removed the `polyfill.io` example from the popin plugin's HTML documentation (`core/asset/plugin/src/vendor/gina/popin/doc/html.md`). The domain NXDOMAINs as of April 2026 and was famously hijacked mid-2024 after its Chinese owners were reported injecting malicious code into the served polyfills. The surrounding guidance on how to include polyfills yourself (via `js/plugins.js` or `js/vendor/polyfills.js`) is preserved. Documentation-only change; no runtime code path loads the domain. Link-health audit (gina-io/gina#18).
|
|
16
|
+
* Added `gina.plugins.Session` — an opt-in hardened wrapper around `express-session` that injects SameSite/HttpOnly/Secure defaults from `settings.json > session.cookie.*` into the cookie options before the middleware sees them (#CSRF1). Caller-supplied `options.cookie` values always override the defaults, so bundles that rely on `httpOnly: false` (for client-side JS reading `document.cookie`) or other intentional choices are preserved. Adoption is a one-line swap in the bundle bootstrap: `var session = require('gina').plugins.Session(require('express-session'))`. The new `session.cookie.{sameSite, httpOnly, secure}` keys land in `core/template/conf/settings.json` with safe defaults ("lax" / true / "auto"). Browser-parity invariant enforced at session factory call time — `SameSite=None` without `Secure` throws. Baseline for the #CSRF2 / #CSRF3 track.
|
|
17
|
+
|
|
18
|
+
## 0.3.7-alpha.6 - 2026-04-24 (npm only — no git tag)
|
|
19
|
+
### Security
|
|
20
|
+
* Restored CVE visibility on vendored deps. `gina@0.3.7-alpha.5` stripped `dependencies`/`devDependencies`/`scripts` from `core/deps/busboy-1.6.0/package.json` and `core/deps/streamsearch-1.1.0/package.json` to reduce Socket's dep-count display — but the strip also removed the dep-graph edge that Socket, Dependabot, and `npm audit` follow to associate the vendored copies with their CVE records. Vendored copies of upstream packages are supply-chain surface exactly like npm-installed ones; stripping the metadata hid them from the tools meant to alert on them. Both files are now byte-identical to their upstream npm tarballs again. Pinning discipline going forward: the vendored `package.json` stays byte-identical to upstream until a local patch is applied; on patch, bump `version` to `<upstream>-rhinostone.N` (e.g. `1.6.0-rhinostone.1`) so CVE scanners still match the base version and readers see at a glance that the copy has diverged. Also adds an OSV-based CI scan (`.github/workflows/vendored-cve.yml`) that walks every `core/deps/*/package.json` and every `framework/v*/package.json`, queries `api.osv.dev` for each `(name, version)` pair, and fails the build on any matched vulnerability — belt-and-suspenders, independent of whichever third-party scanner happens to be in use. Runs on push to `develop`/`master`, weekly Sunday cron, and manual dispatch.
|
|
21
|
+
* Replaced four `eval(...)` call sites in the validator plugin with safe, grammar-locked equivalents (#SCS1e, bucket (c) partial progress). `core/plugins/lib/validator/src/main.js:2603` — `eval('gina.forms.rules.' + customRule)` replaced with a dot-path walker. `customRule` is read from the user-controlled `data-gina-form-rule` HTML attribute; the old eval executed anything that parsed as JS, so a crafted attribute like `constructor.constructor("return process.exit()")()` would fire on lookup. The walker rejects any character outside `[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*)*` and returns undefined on missing path (falling through to the existing "no rule found" error). `core/plugins/lib/validator/src/form-validator.js:161` — `eval('data.' + localValue)` in `compileError()` replaced with a dot+bracket path walker. `localValue` is derived from `{{...}}` placeholders in error messages; the transforms at lines 152-158 produce `ident (. ident | ["quoted"])*`, and the walker rejects anything outside that shape. `core/plugins/lib/validator/src/form-validator.js:893` — the regex-literal branch of `is()` replaced with `new RegExp(body, flags).test(value)`. Parses `/<body>/<flags>` only; `/<body>/` without flags or any non-regex input throws. `core/plugins/lib/validator/src/form-validator.js:895` — the binary-compare branch of `is()` replaced with a regex-based evaluator over the closed grammar `<operand><op><operand>` where operand is in `{number, "string", true, false, null, undefined}` and op is in `{===, !==, ==, !=, <, >, <=, >=}`. After `$var` substitution (lines 910-920) and paren/return strip (line 925), real Freelancer v3 conditions (15 regex literals + 11 binary comparisons) all match the two grammars. Any input outside the grammars (arithmetic, function calls, semicolon injection, throw injection) is rejected. Seven validator-plugin sites remain deferred pending a separate design pass (`form-validator.js:919`, `:1722`, `main.js:2320`, `:2329`, `:2931`, `:2947`, `:2959`). Verified by +69 tests in `test/lib/validator-scs1e.test.js` (source inspection, behavioural parity against corpus, injection rejection).
|
|
22
|
+
|
|
9
23
|
## 0.3.7-alpha.5 - 2026-04-23 (npm only — no git tag)
|
|
10
24
|
### Changed
|
|
11
25
|
* Extracted `DRIVER_MAP` + `AI_DRIVER_MAP` into a new `lib/connector-registry/` module — single source of truth for the connector driver → npm package + semver range mapping. Previously duplicated inline in `lib/cmd/connector/add.js` and `lib/cmd/connector/list.js` and kept in sync by hand; the two copies had already drifted (list.js knew about `mongodb` and `scylladb`, add.js did not). Both cmd handlers now read from `lib.connectorRegistry.getDriver(type)` / `.getAIDriver(scheme)` / `.getDriverTypes()` / `.getAISchemes()`, so adding a new connector upstream means editing one table instead of three (root `package.json` `peerDependencies` was the third, removed in the previous commit). Public CLI behaviour is unchanged — the registry exposes the same tables, the install hint and `--install` resolution use the same ranges. 28 new source-inspection + behavioural tests in `test/lib/connector-registry.test.js`; the inline-map tests in `test/lib/connector-add.test.js` and `test/lib/connector-list.test.js` now assert registry consumption instead.
|
package/ROADMAP.md
CHANGED
|
@@ -123,6 +123,28 @@ Four focused follow-up sessions to close the deferred gap left by the `0.3.7-alp
|
|
|
123
123
|
| 📋 | **Static HTML cache parity** — Port the swig disk-write/serve cache path so `cache:` keys in `routing.json` actually produce cached HTML for nunjucks routes. | `0.3.7` | Q4 2026 |
|
|
124
124
|
| 📋 | **Early Hints 103 auto-send for CSS/JS preloads** — Move the 103 path in `controller.js this.render()` to be engine-agnostic. Pure perf optimisation; manual `self.setEarlyHints(linkHeader)` already works. | `0.3.7` | Q4 2026 |
|
|
125
125
|
|
|
126
|
+
### Eval safety
|
|
127
|
+
|
|
128
|
+
Complete the removal of `eval` / `new Function` call sites from the published tarball. Four tranches shipped across `0.3.7-alpha.4` / `0.3.7-alpha.5` cleared 13 of 24 catalogued sites; 2 more were removed by deleting orphaned source during the toolbar cleanup (15 of 24 addressed). Three clusters remain, each needing a focused session.
|
|
129
|
+
|
|
130
|
+
| Status | Feature | Version | Target |
|
|
131
|
+
| --- | --- | --- | --- |
|
|
132
|
+
| 📋 | **Validator structural refactor** — Refactor `makeObjectFromArgs` in the validator plugin to replace the string-accumulator path-build-then-`eval('root=value')` pattern with a segments-array threaded through recursion and a safe setter. Clears 3 eval sites. Test coverage for the validator plugin was bootstrapped in the prior tranche, so the refactor has a safety net. | `0.3.8` | Q1 2027 |
|
|
133
|
+
| 📋 | **Feature-intrinsic eval design pass** — 6 sites eval user-supplied JS by design (user-defined form validators, HTML event callbacks on form data attributes). Decision pass: safe-eval sandbox via `vm.Script`, pre-parse to a restricted AST, or formalise "accept and document" with an explicit trust assumption. Outcome may include dropping unused placeholder features. | `0.3.8` | Q1 2027 |
|
|
134
|
+
| 📋 | **Logger circular-require refactor** — 3 load-bearing `eval(fs.readFileSync(...))` fallbacks in the logger work around a circular `merge → helpers → logger` require chain. Restructure the chain so the fallback is no longer needed. Clears the final 3 sites of the campaign. Regression risk touches every logger-consuming test. | `0.3.8` | Q1 2027 |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Web Security
|
|
139
|
+
|
|
140
|
+
Cross-site request forgery protection. Three-phase defense-in-depth plan aligned with OWASP ASVS 4.0 V4.2.1; each phase shippable on its own. Cookie hardening shipped as an opt-in plugin in `0.3.7-alpha.8`; token middleware and Origin pre-filter still open.
|
|
141
|
+
|
|
142
|
+
| Status | Feature | Version | Target |
|
|
143
|
+
| --- | --- | --- | --- |
|
|
144
|
+
| ✅ | **Cookie hardening (baseline)** — Opt-in plugin `gina.plugins.Session` wraps `express-session` and injects `SameSite=Lax` + `HttpOnly` + `Secure=auto` defaults from `settings.json > session.cookie.{sameSite,httpOnly,secure}` into the cookie options before the middleware sees them. Bundle-supplied cookie options always win, so intentional configuration is preserved. Adoption is a one-line swap in the bundle bootstrap: `var session = require('gina').plugins.Session(require('express-session'))`. Browser-parity invariant enforced at factory call time: `SameSite=None` without `Secure` throws at bundle startup. Migration guide flags cross-site cookie-send bundles (rare — third-party OAuth embeds, iframe flows) that must set `sameSite: "none"` + `secure: true` explicitly. 41 unit tests (source-inspection guards + mergeCookie + invariant negative-lock + resolveSettingsDefaults + end-to-end through stub express-session + registration + template integrity). | `0.3.7-alpha.8` | 2026-04-24 |
|
|
145
|
+
| 📋 | **Signed double-submit token middleware** — Stateless signed-double-submit-cookie pattern (OWASP ASVS 4.0 V4.2.1). HMAC-SHA256 cookie bound to session ID + matching `X-Gina-CSRF-Token` header (or `_csrf` form field) required on POST/PUT/PATCH/DELETE; `timingSafeEqual` comparison; safe methods (GET/HEAD/OPTIONS) pass through. Per-route opt-out via `routing.json > "csrfExempt": true` for webhook receivers (Stripe, GitHub, etc.). Client integration: the validator plugin auto-reads the cookie and sets the header on AJAX submits — zero user code change. Templates get `{{ gina.csrfToken }}` and `{{ gina.csrfInput \| safe }}` helpers for `<form>` hidden inputs. Stateless so it scales with distributed Redis/K8s sessions without server-side storage; signed so sibling subdomains cannot inject cookies. Performance: ~microseconds per mutating request. | `0.3.8` | Q3 2026 |
|
|
146
|
+
| 📋 | **Origin/Referer pre-filter** — Secondary check on mutating methods, layered on top of the token middleware: `Origin` (or `Referer` fallback) must match the bundle's configured hostname or an explicit allowlist. Configured via `settings.json > csrf.allowedOrigins`. Belt-and-suspenders catching edge cases tokens might miss (referrer-header log leaks, legacy browser bugs, misconfigured reverse proxies). Performance: one string compare per mutating request. | `0.4.0` | Q4 2026 |
|
|
147
|
+
|
|
126
148
|
---
|
|
127
149
|
|
|
128
150
|
## Connectors
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.3.7-alpha.7
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@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}.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)}
|
|
Binary file
|
|
Binary file
|
package/framework/{v0.3.7-alpha.5 → v0.3.7-alpha.7}/core/asset/plugin/dist/vendor/gina/js/gina.js
RENAMED
|
@@ -3000,7 +3000,41 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet) {
|
|
|
3000
3000
|
.trim();
|
|
3001
3001
|
|
|
3002
3002
|
try {
|
|
3003
|
-
|
|
3003
|
+
// #SCS1e (2026-04-24) — replaced `eval('data.' + localValue)` with a safe
|
|
3004
|
+
// dot+bracket path walker. `localValue` is derived from `{{...}}` placeholders
|
|
3005
|
+
// in error messages; the transforms at lines 152-158 produce
|
|
3006
|
+
// `ident (. ident | ["quoted"])*`. The old eval executed anything that parsed
|
|
3007
|
+
// as JS; a crafted placeholder like `{{constructor.constructor('return
|
|
3008
|
+
// process.exit()')()}}` would reach eval unsanitised (the `[` → `["` / `]` →
|
|
3009
|
+
// `"]` transforms don't neutralise dotted method access). The walker rejects
|
|
3010
|
+
// any segment that isn't a bare identifier or a double-quoted bracket key.
|
|
3011
|
+
// localValue = eval('data.'+ localValue).replace(/^\"|\"$/g, '');
|
|
3012
|
+
let _scsRest = localValue;
|
|
3013
|
+
let _scsSegments = [];
|
|
3014
|
+
let _scsM = _scsRest.match(/^([A-Za-z_$][\w$]*)/);
|
|
3015
|
+
if (!_scsM) { throw new Error('Invalid property path: `' + localValue + '`'); }
|
|
3016
|
+
_scsSegments.push(_scsM[1]);
|
|
3017
|
+
_scsRest = _scsRest.slice(_scsM[0].length);
|
|
3018
|
+
while (_scsRest.length > 0) {
|
|
3019
|
+
_scsM = _scsRest.match(/^\.([A-Za-z_$][\w$]*)/);
|
|
3020
|
+
if (_scsM) {
|
|
3021
|
+
_scsSegments.push(_scsM[1]);
|
|
3022
|
+
_scsRest = _scsRest.slice(_scsM[0].length);
|
|
3023
|
+
continue;
|
|
3024
|
+
}
|
|
3025
|
+
_scsM = _scsRest.match(/^\["([^"\]]*)"\]/);
|
|
3026
|
+
if (_scsM) {
|
|
3027
|
+
_scsSegments.push(_scsM[1]);
|
|
3028
|
+
_scsRest = _scsRest.slice(_scsM[0].length);
|
|
3029
|
+
continue;
|
|
3030
|
+
}
|
|
3031
|
+
throw new Error('Invalid property path: `' + localValue + '`');
|
|
3032
|
+
}
|
|
3033
|
+
let _scsCur = data;
|
|
3034
|
+
for (let _scsI = 0; _scsCur != null && _scsI < _scsSegments.length; _scsI++) {
|
|
3035
|
+
_scsCur = _scsCur[_scsSegments[_scsI]];
|
|
3036
|
+
}
|
|
3037
|
+
localValue = _scsCur.replace(/^\"|\"$/g, '');
|
|
3004
3038
|
error = error.replace( new RegExp( varArr[v].replace(/\{|\[|\]|\}/g, '\\$&') , 'g'), localValue);
|
|
3005
3039
|
} catch(e) {}
|
|
3006
3040
|
}
|
|
@@ -3731,10 +3765,59 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet) {
|
|
|
3731
3765
|
try {
|
|
3732
3766
|
// security checks
|
|
3733
3767
|
compiledCondition = compiledCondition.replace(/(\(|\)|return)/g, '');
|
|
3768
|
+
// #SCS1e (2026-04-24) — replaced the two `eval(...)` calls below with
|
|
3769
|
+
// auditable equivalents. After `$var` substitution (lines 910-920) and
|
|
3770
|
+
// paren/return strip above, `compiledCondition` is either:
|
|
3771
|
+
// (a) a regex literal `/<body>/<flags>` (when `/^\//` matches), or
|
|
3772
|
+
// (b) a binary comparison `<operand><op><operand>` where operand ∈
|
|
3773
|
+
// {number, "string", true, false, null, undefined} and op ∈
|
|
3774
|
+
// {===, !==, ==, !=, <, >, <=, >=}.
|
|
3775
|
+
// Old eval executed arbitrary JS; any value reaching `$var` substitution
|
|
3776
|
+
// that contained a quote (e.g. user input `bar"; process.exit();//`)
|
|
3777
|
+
// could escape the `"..."` wrapper at line 916 and reach eval as
|
|
3778
|
+
// arbitrary code. Grammar-locked replacements reject any input that
|
|
3779
|
+
// doesn't fit the two documented shapes.
|
|
3780
|
+
// if ( /^\//.test(compiledCondition) ) {
|
|
3781
|
+
// isValid = eval(compiledCondition + '.test("' + this.value + '")')
|
|
3782
|
+
// } else {
|
|
3783
|
+
// isValid = eval(compiledCondition)
|
|
3784
|
+
// }
|
|
3734
3785
|
if ( /^\//.test(compiledCondition) ) {
|
|
3735
|
-
|
|
3786
|
+
var _scsRegexMatch = compiledCondition.match(/^\/(.+)\/([a-z]*)$/);
|
|
3787
|
+
if (!_scsRegexMatch) {
|
|
3788
|
+
throw new Error('Invalid regex literal: `' + compiledCondition + '`');
|
|
3789
|
+
}
|
|
3790
|
+
isValid = new RegExp(_scsRegexMatch[1], _scsRegexMatch[2]).test(this.value);
|
|
3736
3791
|
} else {
|
|
3737
|
-
|
|
3792
|
+
var _SCS_BINARY_RE = /^\s*(null|undefined|true|false|"[^"]*"|-?\d+(?:\.\d+)?)\s*(===|!==|<=|>=|==|!=|<|>)\s*(null|undefined|true|false|"[^"]*"|-?\d+(?:\.\d+)?)\s*$/;
|
|
3793
|
+
var _scsBinMatch = (typeof(compiledCondition) == 'string') ? compiledCondition.match(_SCS_BINARY_RE) : null;
|
|
3794
|
+
if (!_scsBinMatch) {
|
|
3795
|
+
throw new Error('Could not evaluate condition `' + compiledCondition + '`.\n(grammar: <operand><op><operand>; operand ∈ number | "string" | true | false | null | undefined; op ∈ === !== == != < > <= >=)');
|
|
3796
|
+
}
|
|
3797
|
+
var _scsParseOperand = function(s) {
|
|
3798
|
+
var _t = s.replace(/^\s+|\s+$/g, '');
|
|
3799
|
+
if (_t === 'null') return null;
|
|
3800
|
+
if (_t === 'undefined') return undefined;
|
|
3801
|
+
if (_t === 'true') return true;
|
|
3802
|
+
if (_t === 'false') return false;
|
|
3803
|
+
if (/^"[^"]*"$/.test(_t)) return _t.slice(1, -1);
|
|
3804
|
+
var _n = Number(_t);
|
|
3805
|
+
if (!isNaN(_n) && _t !== '') return _n;
|
|
3806
|
+
throw new Error('Invalid operand: `' + s + '`');
|
|
3807
|
+
};
|
|
3808
|
+
var _scsLeft = _scsParseOperand(_scsBinMatch[1]);
|
|
3809
|
+
var _scsOp = _scsBinMatch[2];
|
|
3810
|
+
var _scsRight = _scsParseOperand(_scsBinMatch[3]);
|
|
3811
|
+
switch (_scsOp) {
|
|
3812
|
+
case '===': isValid = _scsLeft === _scsRight; break;
|
|
3813
|
+
case '!==': isValid = _scsLeft !== _scsRight; break;
|
|
3814
|
+
case '==': isValid = _scsLeft == _scsRight; break;
|
|
3815
|
+
case '!=': isValid = _scsLeft != _scsRight; break;
|
|
3816
|
+
case '<': isValid = _scsLeft < _scsRight; break;
|
|
3817
|
+
case '>': isValid = _scsLeft > _scsRight; break;
|
|
3818
|
+
case '<=': isValid = _scsLeft <= _scsRight; break;
|
|
3819
|
+
case '>=': isValid = _scsLeft >= _scsRight; break;
|
|
3820
|
+
}
|
|
3738
3821
|
}
|
|
3739
3822
|
|
|
3740
3823
|
} catch (err) {
|
|
@@ -8967,7 +9050,7 @@ function getElementsByAttribute(attribute) {
|
|
|
8967
9050
|
*
|
|
8968
9051
|
*/
|
|
8969
9052
|
|
|
8970
|
-
/*! @source https://gist.github.com/1129031 */
|
|
9053
|
+
/*! @source https://gist.github.com/eligrey/1129031 */
|
|
8971
9054
|
/*global document, DOMParser*/
|
|
8972
9055
|
(function(DOMParser) {
|
|
8973
9056
|
"use strict";
|
|
@@ -11931,8 +12014,27 @@ function ValidatorPlugin(rules, data, formId) {
|
|
|
11931
12014
|
if (customRule) {
|
|
11932
12015
|
customRule = customRule.replace(/\-|\//g, '.');
|
|
11933
12016
|
if ( typeof(rules) != 'undefined' ) {
|
|
11934
|
-
|
|
12017
|
+
// #SCS1e (2026-04-24) — replaced `eval('gina.forms.rules.' + customRule)`
|
|
12018
|
+
// with a safe dot-path walker. `customRule` is user-controlled (read
|
|
12019
|
+
// from the `data-gina-form-rule` HTML attribute); after the replace at
|
|
12020
|
+
// line 2601 it is a pure dot-path like `account.signin_scope`. The old
|
|
12021
|
+
// eval executed anything that parsed as JS — a crafted rule name such
|
|
12022
|
+
// as `constructor.constructor("return process.exit()")()` would fire on
|
|
12023
|
+
// lookup. The walker rejects any non-identifier character and returns
|
|
12024
|
+
// undefined on missing path (the `typeof(local.rules[customRule]) ==
|
|
12025
|
+
// 'undefined'` check at line 2606 then produces the usual user-facing
|
|
12026
|
+
// "no rule found" error).
|
|
12027
|
+
// instance.$forms[id].rules[customRule] = instance.rules[customRule] = local.rules[customRule] = merge(JSON.clone( eval('gina.forms.rules.'+ customRule)), instance.rules[customRule]);
|
|
11935
12028
|
// instance.$forms[id].rules[customRule] = instance.rules[customRule] = local.rules[customRule] = merge(eval('gina.forms.rules.'+ customRule), instance.rules[customRule]);
|
|
12029
|
+
if (!/^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*)*$/.test(customRule)) {
|
|
12030
|
+
throw new Error('Invalid form rule path: `' + customRule + '`');
|
|
12031
|
+
}
|
|
12032
|
+
var _scsSegments = customRule.split('.');
|
|
12033
|
+
var _scsCur = gina.forms.rules;
|
|
12034
|
+
for (var _scsI = 0; _scsCur != null && _scsI < _scsSegments.length; _scsI++) {
|
|
12035
|
+
_scsCur = _scsCur[_scsSegments[_scsI]];
|
|
12036
|
+
}
|
|
12037
|
+
instance.$forms[id].rules[customRule] = instance.rules[customRule] = local.rules[customRule] = merge(JSON.clone(_scsCur), instance.rules[customRule]);
|
|
11936
12038
|
}
|
|
11937
12039
|
if ( typeof(local.rules[customRule]) == 'undefined' ) {
|
|
11938
12040
|
throw new Error('['+id+'] no rule found with key: `'+customRule+'`. Please check if json is not malformed @ /forms/rules/' + customRule.replace(/\./g, '/') +'.json');
|