gina 0.5.7-alpha.1 → 0.5.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/CHANGELOG.md +17 -0
- package/README.md +9 -6
- package/ROADMAP.md +1 -0
- package/framework/v0.5.7/VERSION +1 -0
- package/framework/v0.5.7/core/connectors/mongodb/lib/job-store.js +334 -0
- package/framework/v0.5.7/core/connectors/redis/index.js +36 -0
- package/framework/v0.5.7/core/connectors/redis/lib/connector.js +66 -0
- package/framework/v0.5.7/core/connectors/redis/lib/job-store.js +454 -0
- package/framework/v0.5.7/core/connectors/sqlite/lib/job-store.js +263 -0
- package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/controller.render-json.js +41 -31
- package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/controller.render-stream.js +10 -5
- package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/controller.render-swig.js +37 -31
- package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/gna.js +22 -2
- package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/server.js +68 -0
- package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/index.js +4 -0
- package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/job/src/main.js +147 -29
- package/framework/v0.5.7/lib/job-store.js +84 -0
- package/framework/{v0.5.7-alpha.1 → v0.5.7}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +7 -4
- package/package.json +4 -4
- package/script/check_no_local_leak.js +22 -2
- package/script/smoke_in_container.js +8 -2
- package/script/smoke_test_tarball.js +8 -1
- package/framework/v0.5.7-alpha.1/VERSION +0 -1
- package/framework/v0.5.7-alpha.1/core/connectors/redis/index.js +0 -30
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/AUTHORS +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/LICENSE +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/config.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/content.encoding +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/controller.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/dev/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/locales/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/locales/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/mime.types +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/model/entity.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/model/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/router.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/server.express.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/server.isaac.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/status.codes +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/console.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/context.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/path.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/task.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/helpers/text.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/async/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/config.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/job/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/math/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/model.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/proc.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/session-store.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/shell.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/state.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/url/README.md +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/url/index.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/validator.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.7-alpha.1 → v0.5.7}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,23 @@ 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.5.7 - 2026-07-03
|
|
10
|
+
### Added
|
|
11
|
+
* Added a connector-backed job store to the async-job primitive: point `jobs.store` (app.json) at a `connectors.json` entry and job records persist in SQLite (`node:sqlite` built-in, zero new dependencies) — they survive bundle restarts and are readable cross-process, while the deferred function still runs in the creating process. A configured store that cannot be built fails the boot instead of silently degrading to the in-memory store, and the create/worker race on async stores was hardened away for future backends.
|
|
12
|
+
* Added a MongoDB backend for the connector-backed job store: point `jobs.store` (app.json) at a `connectors.json` entry with `"connector": "mongodb"` (same `uri`/`host`/`database` keys as the MongoDB session store; the driver is resolved from the consuming project `node_modules`) and job records live on a shared mongod — restart-durable and visible across processes and pods, while the deferred function still runs in the creating process. Expiry stays sweep-driven for parity with the other stores: no server-side TTL reaping.
|
|
13
|
+
* Added a Redis backend for the connector-backed job store: point `jobs.store` (app.json) at a `connectors.json` entry with `"connector": "redis"` (same `host`/`port`/`db`/`password`/`tls`/`cluster` keys as the Redis session store; driver `ioredis`, resolved like the session store with a project `node_modules` fallback) and job records live on a shared Redis — restart-durable and visible across processes and pods, while the deferred function still runs in the creating process. Records carry per-state and expiry indexes maintained atomically (MULTI) so list and sweep never scan the keyspace, and expiry stays sweep-driven for parity with the other stores: no per-key TTL. Redis Cluster is supported via a hash-tagged key prefix (default `{jobs}:`).
|
|
14
|
+
* Failed async jobs can now retry: pass `maxAttempts` to `self.startJob` / `lib.job.create` and a failed attempt is retried on the creating process with exponential backoff (`jobs.retryBackoffMs` in app.json, default 1000 ms, doubling per attempt). Between attempts the record returns to `pending` with the last error and a `nextRetryAt` timestamp visible, and it cannot be purged by the TTL sweep; `failed` and `completed` remain strictly terminal, and the completion webhook fires exactly once, after the final attempt. The default stays a single attempt — behavior is unchanged unless you opt in.
|
|
15
|
+
### Changed
|
|
16
|
+
* npm 12 readiness for the install and release tooling: the prepack leak scan and the smoke harness accept the object-keyed `npm pack --json` output of npm 12 (npm <= 11 array output unchanged), the leak scan fails closed on unrecognized shapes instead of passing vacuously, the container smoke opts tarball install scripts back in under the npm 12 allow-scripts default, and the README documents installing with `--allow-scripts=gina` on npm 12+
|
|
17
|
+
### Fixed
|
|
18
|
+
* A `connectors.json` entry with `"connector": "redis"` no longer aborts the bundle boot. The model layer loads a `lib/connector.js` for every declared connector and treated the Redis connector's missing one as fatal — so even the documented Redis session-store configuration could not boot with its entry declared. The Redis connector now ships a no-op boot connector that opens no connection and requires no driver.
|
|
19
|
+
* Fixed a production-mode HTTP 500 on every swig-rendered route carrying a cache setting in routing.json: the render cache writer referenced render()-scoped state from module scope (ReferenceError: self is not defined); the cache flag and error reporter are now threaded into writeCache as parameters
|
|
20
|
+
* Fixed a cross-request data bleed in the swig render delegate under production concurrency: per-request helpers (the template-data getter, resource injector and layout-cache path) were captured at module scope, so a render suspended at the template-read await could resume with a concurrent request's closures and merge that request's page data into its own response. All per-request dependencies are now function-scoped inside render().
|
|
21
|
+
* Fixed two cross-request defects in the streaming render delegate under production concurrency: a finishing stream released a concurrent request's req/res refs mid-stream instead of its own (leaving its own unreleased), and a stream error was reported through the concurrent request's controller. The per-request dependencies are now function-scoped.
|
|
22
|
+
* Fixed the JSON render delegate's cache writer reporting a cache-configuration error through a concurrent request's controller under production concurrency: the module-level writeCache resumed after its file-write await reading the module-scoped controller reference, which any renderJSON entering during the suspension had reassigned. Every render-scoped value is now threaded into writeCache as a parameter and the delegate's per-request dependencies are function-scoped.
|
|
23
|
+
### Security
|
|
24
|
+
* Fixed a path-traversal vulnerability in the static-asset resolver: a request URL containing `../` — or its `%2F` / `%2e%2e` percent-encoded forms — could escape a `statics.json` mapping's target directory and read any sibling file under the shared root (configuration, credentials, or server-side source). Both static resolvers now canonicalise the resolved path and confine it to its mapping target (or `publicPath`), returning 404 on any escape; legitimate assets are served unchanged and no configuration change is required.
|
|
25
|
+
|
|
9
26
|
## 0.5.6 - 2026-07-01
|
|
10
27
|
### Added
|
|
11
28
|
* Added a streaming variant to the AI connector: getModel('<name>').stream(messages, options) returns an EventEmitter emitting start/delta/done/error events for token-by-token inference, plus an .onComplete(cb) shim mirroring infer(). Works across Anthropic and every OpenAI-compatible provider; the buffered infer() is unchanged.
|
package/README.md
CHANGED
|
@@ -40,13 +40,16 @@ gina bundle:start api @myproject
|
|
|
40
40
|
open https://localhost:3100
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
> **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- **
|
|
48
|
-
-
|
|
49
|
-
- **
|
|
45
|
+
## What's in 0.5.7
|
|
46
|
+
|
|
47
|
+
- **Durable async-job stores.** The async-job primitive (`self.startJob` / `lib.job`) can now persist job records in a real backend: point `jobs.store` (app.json) at a `connectors.json` entry and records survive bundle restarts and are readable cross-process — **SQLite** (`node:sqlite` built-in, zero new dependencies), **MongoDB** (shared mongod — durable and visible across processes and pods), or **Redis** (`ioredis`; per-state and expiry indexes maintained atomically so list and sweep never scan the keyspace; Redis Cluster supported via a hash-tagged key prefix). A configured store that cannot be built fails the boot instead of silently degrading to the in-memory store.
|
|
48
|
+
- **Failed-job retry (opt-in).** Pass `maxAttempts` to `self.startJob` / `lib.job.create` and a failed attempt is retried on the creating process with exponential backoff (`jobs.retryBackoffMs` in app.json, default 1000 ms, doubling per attempt). Between attempts the record returns to `pending` with the last error and a `nextRetryAt` timestamp visible; `failed` and `completed` remain strictly terminal, and the completion webhook fires exactly once. The default stays a single attempt — behavior is unchanged unless you opt in.
|
|
49
|
+
- **npm 12 readiness.** The install and release tooling accept npm 12's changed `npm pack --json` output shape, and installing under npm 12's script-blocking default is documented (`npm install -g gina@latest --allow-scripts=gina` — not needed on npm ≤ 11).
|
|
50
|
+
- **Concurrency fixes in the render delegates.** A family of cross-request defects under production concurrency: the swig render cache writer crashed with an HTTP 500 on every cached route in production (#B60); a swig render suspended at its template-read await could resume with a concurrent request's closures and merge that request's page data into its own response (#B61); a finishing stream released a concurrent request's `req`/`res` refs instead of its own and reported stream errors through the wrong controller (#B62); the JSON delegate's cache writer reported cache-configuration errors through a concurrent request's controller (#B63). All per-request state in the delegates is now function-scoped.
|
|
51
|
+
- **Robustness fixes.** A `connectors.json` entry with `"connector": "redis"` no longer aborts the bundle boot — the Redis connector now ships a no-op boot connector, unblocking the documented Redis session-store configuration.
|
|
52
|
+
- **Security — static-asset path traversal fixed.** A request URL with `../` (or its `%2F` / `%2e%2e` percent-encoded forms) could escape a `statics.json` mapping's target directory and read any sibling file under the shared root (config, credentials, server-side source). Both static resolvers now confine the resolved path to its mapping target (or `publicPath`) and return 404 on any escape (#B64); legitimate assets are unaffected and no configuration change is required.
|
|
50
53
|
|
|
51
54
|
See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
|
|
52
55
|
|
package/ROADMAP.md
CHANGED
|
@@ -31,6 +31,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
31
31
|
| **Q2 2026** | `0.5.4` ✅ | Node.js 26 support (engine `>= 22 <27`, CI matrix) · FormValidator fixes (`isFloat` accepts string floats · `isDate` non-ISO masks + rule chaining) · quieter live form validation (error message revealed on blur) · file-upload fixes (honour `tmpPath` / per-group `path` · enforce `maxFields` + `maxFieldsSize` unit suffix · **Security**: reject uploads to an unconfigured group, closing an `allowedExtensions` / `isMultipleAllowed` bypass) · two dev-mode heap fixes (hot-reload lib-eviction leak · HTTP/2 `self.query()` settled-stream retention) · tighter per-request config isolation (narrowed router clone · `getRouteByUrl` shared-config mutation) · dev Inspector reliability (per-tab channel under COOP · Swig render-race isolation · multi-bundle proxy log/index routing · SPA hardening) · Express-engine `/_gina/info` + `/_gina/cache/stats` parity · `bundle:add --ignore-ports` |
|
|
32
32
|
| **Q2 2026** | `0.5.5` ✅ | WebSocket routes in `routing.json` (`method: "ws"` + `param.wsHandler` → `channels/<name>.js`, `:param` paths, per-route `param.wsOptions`) · cross-bundle `session.query()` from WebSocket channel handlers · framework version side-by-side CLI (`framework:add` / `framework:list` / `framework:remove` / `framework:update` / `framework:reset`) · `project:move` / `project:backup` / `project:restore` · inline CLI man pages (`framework:man` / `project:man` / `bundle:man` / `service:man`) · Bun promoted to a supported, CI-gated runtime · idempotent HTTP/2 client retries (safe-method gating + per-call `retryUnsafe` opt-in) · **Security**: WebSocket-DoS dependency hardening (`ws` override) · `tail` restart hardening |
|
|
33
33
|
| **Q3 2026** | `0.5.6` ✅ | AI-connector CLI suite — `connector:infer` (one-off inference · `--stream` NDJSON · `--raw`) + `connector:test` (CI readiness probe · `--connect` zero-token live check) · AI connector `stream()` + Inspector "AI stream" tab · application events in the Inspector — `self.emitEvent()` + a new "Events" tab, opt-in entity-event & connector-lifecycle bridges · `getModel()` exposes the AI `infer`/`stream` API · fixes: model-init fail-fast · corrupt `projects.json` registration skipped cleanly · DELETE-route regex flags + off-by-one crash · UTF-8 multipart upload filenames · native `<dialog>` popin close cleanup · Couchbase dynamic field-path placeholder · `project:import` additive across release targets · `gina stop` bundles-still-running notice |
|
|
34
|
+
| **Q3 2026** | `0.5.7` ✅ | Durable async-job stores — `jobs.store` (app.json) → `connectors.json` entry: SQLite (`node:sqlite`, zero new dependencies) · MongoDB (shared mongod, multi-pod) · Redis (`ioredis`, atomic per-state + expiry indexes, Redis Cluster via hash-tagged prefix); restart-durable, cross-process, fail-fast on an unbuildable store · opt-in failed-job retry (`maxAttempts` + exponential backoff; completion webhook fires exactly once) · npm 12 readiness (install + release tooling, `--allow-scripts=gina` guidance) · render-delegate concurrency fixes (production cross-request data bleed / wrong-controller error routing / cached-route 500) · `"connector": "redis"` entry no longer aborts boot · **Security**: static-asset path-traversal fix — resolver paths canonicalised and confined to their `statics.json` mapping target (404 on any escape, `%2F` / `%2e%2e` forms included) |
|
|
34
35
|
| **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
35
36
|
| **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
|
|
36
37
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.7
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the gina package.
|
|
3
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @module gina/core/connectors/mongodb/job-store
|
|
12
|
+
*
|
|
13
|
+
* MongoDB-backed `JobStore` for the async-job primitive (`lib/job`) — the
|
|
14
|
+
* second connector store of the #AI6 family (SQLite shipped first). Backed by
|
|
15
|
+
* the consumer project's own `mongodb` driver, resolved from the project's
|
|
16
|
+
* `node_modules` exactly like the MongoDB session store — the framework keeps
|
|
17
|
+
* zero hard dependency on it.
|
|
18
|
+
*
|
|
19
|
+
* What it buys over the SQLite store: the record lives on a mongod every pod
|
|
20
|
+
* can reach, so this is the true multi-pod backend — a job created on pod A is
|
|
21
|
+
* pollable from pod B via `/_gina/jobs/:id`, and records survive any single
|
|
22
|
+
* bundle restart. The deferred *function* still runs only in the process that
|
|
23
|
+
* created the job — the store shares the record, never the closure (see
|
|
24
|
+
* `lib/job`).
|
|
25
|
+
*
|
|
26
|
+
* Deliberate divergences from the MongoDB SESSION store (same connector,
|
|
27
|
+
* different contract):
|
|
28
|
+
* - `get` / `list` do NOT filter on expiry. The memory store returns
|
|
29
|
+
* terminal records until `sweep` purges them, and behavioral parity with
|
|
30
|
+
* the memory store is the contract here — expiry acts only at sweep time.
|
|
31
|
+
* - NO server-side TTL index. Mongo's TTL monitor is a Date-indexed reaper
|
|
32
|
+
* that would purge records OUTSIDE the seam's sweep (breaking the parity
|
|
33
|
+
* above) — and the job record's `expiresAt` is an epoch-ms NUMBER, which
|
|
34
|
+
* the TTL monitor ignores anyway (it only reaps BSON Date fields), so a
|
|
35
|
+
* TTL index here would look configured while silently never firing. The
|
|
36
|
+
* two secondary indexes created at construction (`jobsState`,
|
|
37
|
+
* `jobsExpires`) are plain performance indexes with no reaping semantics.
|
|
38
|
+
* - The record is stored as a JSON STRING (the session store's `sess`
|
|
39
|
+
* precedent), not a nested document: caller-supplied `meta` may carry
|
|
40
|
+
* dotted or dollar-prefixed keys that BSON documents reject, and the
|
|
41
|
+
* JSON round-trip is exactly the fidelity the seam guarantees.
|
|
42
|
+
*
|
|
43
|
+
* Config keys follow the mongodb connector's OWN conventions (the §11 rule —
|
|
44
|
+
* mirrors the session store's URI assembly): `uri` preferred, else
|
|
45
|
+
* host/port/username/password/database/authSource/replicaSet + ssl. For
|
|
46
|
+
* mongodb, `database` is a NAME (the same field the model layer's entity scan
|
|
47
|
+
* reads), so the connectors.json entry is model-scan-compatible by
|
|
48
|
+
* construction — the sqlite `file`-as-path quirk does not apply here.
|
|
49
|
+
*
|
|
50
|
+
* Constructed by the `lib/job-store` dispatcher at boot; not meant to be
|
|
51
|
+
* instantiated from application code.
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Job lifecycle states — imported so the sweep predicate can never drift from
|
|
56
|
+
* the memory store's (`lib/job` is a plain-required module-singleton; there is
|
|
57
|
+
* no load-time cycle because `lib/job` never requires this file — the
|
|
58
|
+
* `lib/job-store` dispatcher requires it lazily at boot).
|
|
59
|
+
*
|
|
60
|
+
* @inner
|
|
61
|
+
* @type {{PENDING:string, RUNNING:string, COMPLETED:string, FAILED:string}}
|
|
62
|
+
*/
|
|
63
|
+
var STATES = require('../../../../lib/job/src/main').STATES;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* No-op callback used when a caller omits one.
|
|
67
|
+
* @inner
|
|
68
|
+
* @returns {void}
|
|
69
|
+
*/
|
|
70
|
+
function noop() {}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Build a MongoDB-backed job store implementing the `lib/job` `JobStore` seam
|
|
74
|
+
* (`set / get / remove / list / sweep`, all Node-callback-shaped). The driver
|
|
75
|
+
* is promise-based, so callbacks fire asynchronously — `lib/job`'s create-race
|
|
76
|
+
* hardening (drain scheduled inside the `set` callback) is what makes an async
|
|
77
|
+
* store safe as a drop-in.
|
|
78
|
+
*
|
|
79
|
+
* Each record is stored as `{ _id, state, expiresAt, updatedAt, record }`:
|
|
80
|
+
* thin indexed fields for the two query shapes (list-by-state,
|
|
81
|
+
* sweep-by-expiry) — mirroring the SQLite store's columns — with the full
|
|
82
|
+
* record riding as a JSON string because it legitimately gains keys after
|
|
83
|
+
* creation (`webhookDeliveredAt`, `webhookFailed`, ...). All timestamps are
|
|
84
|
+
* epoch MILLISECONDS — the seam's unit (`sweep(now)` receives `Date.now()`;
|
|
85
|
+
* the session store's Date-typed `expiresAt` convention does NOT apply).
|
|
86
|
+
*
|
|
87
|
+
* @param {object} connConf - Resolved `connectors.json` entry for this store.
|
|
88
|
+
* @param {string} [connConf.uri] - Full mongodb:// or mongodb+srv:// URI (preferred).
|
|
89
|
+
* @param {string} [connConf.host] - Single host (used when uri absent; default 127.0.0.1).
|
|
90
|
+
* @param {number} [connConf.port] - Single port (default 27017).
|
|
91
|
+
* @param {string} [connConf.username] - Auth username.
|
|
92
|
+
* @param {string} [connConf.password] - Auth password.
|
|
93
|
+
* @param {string} connConf.database - Database NAME (required — the mongodb connector's
|
|
94
|
+
* own convention; the model layer reads the same field).
|
|
95
|
+
* @param {string} [connConf.authSource] - Auth db (typically "admin").
|
|
96
|
+
* @param {string} [connConf.replicaSet] - Replica set name.
|
|
97
|
+
* @param {object|boolean} [connConf.ssl] - TLS configuration (true, or a driver options object).
|
|
98
|
+
* @param {string} [connConf.collection] - Jobs collection (default 'jobs').
|
|
99
|
+
* @param {string} bundle - Bundle name — used in log lines.
|
|
100
|
+
* @param {object} [injected] - Test-only dependency injection (the entity-layer
|
|
101
|
+
* `injected` precedent): `{ driver }` replaces the
|
|
102
|
+
* project-resolved mongodb module. The dispatcher
|
|
103
|
+
* always calls with two arguments.
|
|
104
|
+
* @returns {object} - A `JobStore` instance, plus a `close()` convenience
|
|
105
|
+
* (not part of the seam; releases the client).
|
|
106
|
+
* @throws {Error} - When the mongodb driver is not installed in the
|
|
107
|
+
* project, or `database` is missing.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* // connectors.json: { "jobsDb": { "connector": "mongodb", "host": "127.0.0.1",
|
|
111
|
+
* // "port": 27017, "database": "gina_jobs" } }
|
|
112
|
+
* // app.json: { "jobs": { "store": "jobsDb" } }
|
|
113
|
+
* // (wired automatically at boot by gna.js via lib/job-store)
|
|
114
|
+
*/
|
|
115
|
+
module.exports = function MongodbJobStore(connConf, bundle, injected) {
|
|
116
|
+
connConf = connConf || {};
|
|
117
|
+
|
|
118
|
+
// Resolve the mongodb driver from the project's node_modules (session-store
|
|
119
|
+
// precedent) so the framework has zero hard dependency on it. The injected
|
|
120
|
+
// branch is test-only; the default branch is the only place the injected
|
|
121
|
+
// `_` / `getPath` globals are read, so tests stay standalone.
|
|
122
|
+
var mongodb;
|
|
123
|
+
if (injected && injected.driver) {
|
|
124
|
+
mongodb = injected.driver;
|
|
125
|
+
} else {
|
|
126
|
+
try {
|
|
127
|
+
var driverPath = _(getPath('project') + '/node_modules/mongodb', true);
|
|
128
|
+
mongodb = require(driverPath);
|
|
129
|
+
} catch (e) {
|
|
130
|
+
throw new Error(
|
|
131
|
+
'[MongodbJobStore] mongodb is not installed. '
|
|
132
|
+
+ 'Run `npm install mongodb` in your project.\n'
|
|
133
|
+
+ e.message
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
var dbName = connConf.database;
|
|
139
|
+
if (!dbName) {
|
|
140
|
+
throw new Error('[MongodbJobStore] missing required `database` field in the connectors.json entry');
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Compose the connection URI — mirrors the session store's resolveUri()
|
|
144
|
+
// (itself mirroring core/connectors/mongodb/lib/connector.js).
|
|
145
|
+
var uri = connConf.uri;
|
|
146
|
+
if (!uri) {
|
|
147
|
+
var host = connConf.host || '127.0.0.1';
|
|
148
|
+
var port = connConf.port || 27017;
|
|
149
|
+
var username = connConf.username;
|
|
150
|
+
var password = connConf.password;
|
|
151
|
+
var authSource = connConf.authSource;
|
|
152
|
+
var replicaSet = connConf.replicaSet;
|
|
153
|
+
|
|
154
|
+
var auth = '';
|
|
155
|
+
if (username) {
|
|
156
|
+
auth = encodeURIComponent(username);
|
|
157
|
+
if (password) auth += ':' + encodeURIComponent(password);
|
|
158
|
+
auth += '@';
|
|
159
|
+
}
|
|
160
|
+
uri = 'mongodb://' + auth + host + ':' + port + '/' + encodeURIComponent(dbName);
|
|
161
|
+
var qs = [];
|
|
162
|
+
if (authSource) qs.push('authSource=' + encodeURIComponent(authSource));
|
|
163
|
+
if (replicaSet) qs.push('replicaSet=' + encodeURIComponent(replicaSet));
|
|
164
|
+
if (qs.length) uri += '?' + qs.join('&');
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
var clientOptions = {};
|
|
168
|
+
var ssl = connConf.ssl;
|
|
169
|
+
if (ssl === true) {
|
|
170
|
+
clientOptions.tls = true;
|
|
171
|
+
} else if (ssl && typeof ssl === 'object') {
|
|
172
|
+
clientOptions.tls = true;
|
|
173
|
+
for (var k in ssl) {
|
|
174
|
+
if (Object.prototype.hasOwnProperty.call(ssl, k)) {
|
|
175
|
+
clientOptions[k] = ssl[k];
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
var collectionName = connConf.collection || 'jobs';
|
|
181
|
+
var client = new mongodb.MongoClient(uri, clientOptions);
|
|
182
|
+
var coll = client.db(dbName).collection(collectionName);
|
|
183
|
+
|
|
184
|
+
// Eager connect + plain secondary indexes, fire-and-forget: operations
|
|
185
|
+
// never wait on this (the driver queues them until connected, and index
|
|
186
|
+
// existence is a pure performance concern — no behavioral role). A failure
|
|
187
|
+
// is logged; each subsequent operation then surfaces its own driver error
|
|
188
|
+
// through the seam callbacks.
|
|
189
|
+
client.connect().then(function() {
|
|
190
|
+
return Promise.all([
|
|
191
|
+
coll.createIndex({ state: 1 }, { name: 'jobsState' }),
|
|
192
|
+
coll.createIndex({ expiresAt: 1 }, { name: 'jobsExpires' })
|
|
193
|
+
]);
|
|
194
|
+
}).catch(function(err) {
|
|
195
|
+
console.error('[MongodbJobStore] connection/index setup failed (bundle: '
|
|
196
|
+
+ bundle + '): ' + ((err && err.message) || err));
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
return {
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Upsert `record` under `id`. The record is serialised whole into the
|
|
203
|
+
* `record` JSON-string field; `state` and `expiresAt` are additionally
|
|
204
|
+
* mirrored into their indexed fields. The driver result is never
|
|
205
|
+
* forwarded to the callback (a resolved UpdateResult in the err slot
|
|
206
|
+
* is the classic express-session-store bug) — `fn(null, record)`
|
|
207
|
+
* explicitly on success.
|
|
208
|
+
*
|
|
209
|
+
* @param {string} id
|
|
210
|
+
* @param {JobRecord} record
|
|
211
|
+
* @param {function} [fn] - `fn(err, record)`.
|
|
212
|
+
* @returns {void}
|
|
213
|
+
*/
|
|
214
|
+
set: function(id, record, fn) {
|
|
215
|
+
if (typeof fn !== 'function') fn = noop;
|
|
216
|
+
var json;
|
|
217
|
+
try {
|
|
218
|
+
json = JSON.stringify(record);
|
|
219
|
+
} catch (err) {
|
|
220
|
+
return fn(err);
|
|
221
|
+
}
|
|
222
|
+
var doc = {
|
|
223
|
+
_id: id,
|
|
224
|
+
state: String(record.state || ''),
|
|
225
|
+
expiresAt: (typeof record.expiresAt === 'number') ? record.expiresAt : null,
|
|
226
|
+
updatedAt: (typeof record.updatedAt === 'number') ? record.updatedAt : Date.now(),
|
|
227
|
+
record: json
|
|
228
|
+
};
|
|
229
|
+
coll.replaceOne({ _id: id }, doc, { upsert: true })
|
|
230
|
+
.then(function() { fn(null, record); })
|
|
231
|
+
.catch(function(err) { fn(err); });
|
|
232
|
+
},
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Fetch a record by `id`. No expiry filter — a terminal record past its
|
|
236
|
+
* `expiresAt` stays readable until `sweep` purges it (memory-store
|
|
237
|
+
* parity; the session store's lag-protection filter does NOT apply).
|
|
238
|
+
*
|
|
239
|
+
* @param {string} id
|
|
240
|
+
* @param {function} fn - `fn(err, record|null)`.
|
|
241
|
+
* @returns {void}
|
|
242
|
+
*/
|
|
243
|
+
get: function(id, fn) {
|
|
244
|
+
if (typeof fn !== 'function') fn = noop;
|
|
245
|
+
coll.findOne({ _id: id }).then(function(doc) {
|
|
246
|
+
if (!doc) return fn(null, null);
|
|
247
|
+
var rec;
|
|
248
|
+
try {
|
|
249
|
+
rec = JSON.parse(doc.record);
|
|
250
|
+
} catch (parseErr) {
|
|
251
|
+
return fn(new Error('[MongodbJobStore] could not parse job record `' + id + '`: ' + parseErr.message));
|
|
252
|
+
}
|
|
253
|
+
fn(null, rec);
|
|
254
|
+
}).catch(function(err) {
|
|
255
|
+
fn(err);
|
|
256
|
+
});
|
|
257
|
+
},
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Delete a record by `id`.
|
|
261
|
+
*
|
|
262
|
+
* @param {string} id
|
|
263
|
+
* @param {function} [fn] - `fn(err, existed)`.
|
|
264
|
+
* @returns {void}
|
|
265
|
+
*/
|
|
266
|
+
remove: function(id, fn) {
|
|
267
|
+
if (typeof fn !== 'function') fn = noop;
|
|
268
|
+
coll.deleteOne({ _id: id })
|
|
269
|
+
.then(function(res) { fn(null, !!(res && res.deletedCount > 0)); })
|
|
270
|
+
.catch(function(err) { fn(err); });
|
|
271
|
+
},
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* List records, optionally filtered by `{ state }`. No expiry filter
|
|
275
|
+
* (memory-store parity). A record that fails to parse fails the whole
|
|
276
|
+
* list loudly — silent skipping would hide corruption.
|
|
277
|
+
*
|
|
278
|
+
* @param {?Object} filter - e.g. `{ state: 'failed' }`; `null` for all.
|
|
279
|
+
* @param {function} fn - `fn(err, records)`.
|
|
280
|
+
* @returns {void}
|
|
281
|
+
*/
|
|
282
|
+
list: function(filter, fn) {
|
|
283
|
+
if (typeof fn !== 'function') fn = noop;
|
|
284
|
+
var query = (filter && filter.state) ? { state: String(filter.state) } : {};
|
|
285
|
+
coll.find(query).toArray().then(function(docs) {
|
|
286
|
+
var out = [];
|
|
287
|
+
try {
|
|
288
|
+
for (var i = 0; i < docs.length; i++) {
|
|
289
|
+
out.push(JSON.parse(docs[i].record));
|
|
290
|
+
}
|
|
291
|
+
} catch (parseErr) {
|
|
292
|
+
return fn(new Error('[MongodbJobStore] could not parse a job record while listing: ' + parseErr.message));
|
|
293
|
+
}
|
|
294
|
+
fn(null, out);
|
|
295
|
+
}).catch(function(err) {
|
|
296
|
+
fn(err);
|
|
297
|
+
});
|
|
298
|
+
},
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Purge terminal (`completed` / `failed`) records whose `expiresAt` has
|
|
302
|
+
* elapsed — the exact memory-store predicate, expressed as one
|
|
303
|
+
* deleteMany. BSON type bracketing makes the `$lte` bound match numeric
|
|
304
|
+
* `expiresAt` values only, so null / absent `expiresAt` records are
|
|
305
|
+
* excluded server-side (the SQLite store's `IS NOT NULL` clause,
|
|
306
|
+
* for free).
|
|
307
|
+
*
|
|
308
|
+
* @param {number} now - Epoch ms (passed in by `lib/job`).
|
|
309
|
+
* @param {function} fn - `fn(err, removedCount)`.
|
|
310
|
+
* @returns {void}
|
|
311
|
+
*/
|
|
312
|
+
sweep: function(now, fn) {
|
|
313
|
+
if (typeof fn !== 'function') fn = noop;
|
|
314
|
+
coll.deleteMany({
|
|
315
|
+
state: { $in: [STATES.COMPLETED, STATES.FAILED] },
|
|
316
|
+
expiresAt: { $lte: now }
|
|
317
|
+
}).then(function(res) { fn(null, (res && res.deletedCount) || 0); })
|
|
318
|
+
.catch(function(err) { fn(err); });
|
|
319
|
+
},
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Release the underlying MongoClient. NOT part of the `JobStore` seam —
|
|
323
|
+
* `lib/job` never calls it; provided for tests and explicit teardown.
|
|
324
|
+
*
|
|
325
|
+
* @returns {void}
|
|
326
|
+
*/
|
|
327
|
+
close: function() {
|
|
328
|
+
try {
|
|
329
|
+
var p = client.close();
|
|
330
|
+
if (p && typeof p.catch === 'function') p.catch(noop);
|
|
331
|
+
} catch (e) { /* already closed */ }
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the gina package.
|
|
3
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Redis connector — v1: session store + job store (no entity/ORM wiring).
|
|
12
|
+
*
|
|
13
|
+
* Entity/ORM wiring is not implemented in v1. Use this connector as:
|
|
14
|
+
* - a session store backend via `lib.SessionStore`
|
|
15
|
+
* (see: core/connectors/redis/lib/session-store.js), or
|
|
16
|
+
* - an async-job store backend via `app.json`'s `jobs.store`
|
|
17
|
+
* (see: core/connectors/redis/lib/job-store.js).
|
|
18
|
+
*
|
|
19
|
+
* To configure:
|
|
20
|
+
* 1. Add a `redis` entry to `config/connectors.json` in your bundle.
|
|
21
|
+
* 2. Install ioredis in your project: `npm install ioredis`
|
|
22
|
+
* 3. Wire the store: session store in `bundle/index.js`, job store via
|
|
23
|
+
* `app.json` `{ "jobs": { "store": "<entry name>" } }`.
|
|
24
|
+
*
|
|
25
|
+
* The boot-time model scan is satisfied by the no-op `lib/connector.js`
|
|
26
|
+
* (no connection is opened at boot — each store owns its client).
|
|
27
|
+
* ORM / entity support is planned for a future release.
|
|
28
|
+
*
|
|
29
|
+
* @class Redis
|
|
30
|
+
* @constructor
|
|
31
|
+
*/
|
|
32
|
+
var Redis = function Redis() {
|
|
33
|
+
// v1: no entity wiring — session store + job store only
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
module.exports = Redis;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the gina package.
|
|
3
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
var EventEmitter = require('events').EventEmitter;
|
|
11
|
+
var util = require('util');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Redis connector — no-op boot-scan satisfier (v1: no entity/ORM wiring).
|
|
15
|
+
*
|
|
16
|
+
* The model layer (`lib/model.js` -> `core/model/index.js`) loads
|
|
17
|
+
* `core/connectors/<type>/lib/connector.js` for EVERY `connectors.json` entry
|
|
18
|
+
* at bundle boot and treats a missing file as fatal (`model#ready` fires with
|
|
19
|
+
* an Error and the boot exits). Before this file existed, ANY redis entry —
|
|
20
|
+
* including the documented session-store configuration and a job-store entry —
|
|
21
|
+
* aborted the boot at that scan.
|
|
22
|
+
*
|
|
23
|
+
* This connector therefore exists to let a redis entry pass the scan; it
|
|
24
|
+
* deliberately:
|
|
25
|
+
* - opens NO connection (the redis session store and job store each build
|
|
26
|
+
* and own their own client — nothing at boot needs one);
|
|
27
|
+
* - requires NO driver (the entry must boot even before the driver package
|
|
28
|
+
* is installed; the stores resolve the driver themselves at their own
|
|
29
|
+
* construction time, with an actionable error);
|
|
30
|
+
* - reports ready synchronously with a `null` connection (the sqlite
|
|
31
|
+
* connector's sync-`onReady` precedent — there is no handshake to wait on).
|
|
32
|
+
*
|
|
33
|
+
* Entity/ORM support remains unimplemented for redis: `getModel()` on a redis
|
|
34
|
+
* entry yields only the bare `{ _connection: null, getConnection }` shell the
|
|
35
|
+
* model layer builds — by design, until a redis ORM lands.
|
|
36
|
+
*
|
|
37
|
+
* @class RedisConnector
|
|
38
|
+
* @constructor
|
|
39
|
+
* @param {object} conf - Connector config from connectors.json (kept for
|
|
40
|
+
* API parity with real connectors; nothing is read).
|
|
41
|
+
*/
|
|
42
|
+
function RedisConnector(conf) {
|
|
43
|
+
EventEmitter.call(this);
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The connectors.json entry, exposed for introspection/debugging only.
|
|
47
|
+
* @type {object}
|
|
48
|
+
*/
|
|
49
|
+
this.conf = conf || {};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Register a one-time ready callback.
|
|
53
|
+
* Fires synchronously (sqlite precedent) with a `null` connection —
|
|
54
|
+
* nothing is dialled at boot; the session/job stores own their clients.
|
|
55
|
+
*
|
|
56
|
+
* @param {function} fn - `fn(err, conn)`; always called as `fn(null, null)`.
|
|
57
|
+
* @returns {void}
|
|
58
|
+
*/
|
|
59
|
+
this.onReady = function(fn) {
|
|
60
|
+
fn(null, null);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
util.inherits(RedisConnector, EventEmitter);
|
|
65
|
+
|
|
66
|
+
module.exports = RedisConnector;
|