gina 0.5.6 → 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.6 → v0.5.7}/core/controller/controller.render-json.js +41 -31
- package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-stream.js +10 -5
- package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-swig.js +37 -31
- package/framework/{v0.5.6 → v0.5.7}/core/gna.js +22 -2
- package/framework/{v0.5.6 → v0.5.7}/core/server.js +68 -0
- package/framework/{v0.5.6 → v0.5.7}/lib/index.js +4 -0
- package/framework/{v0.5.6 → 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.6 → 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.6/VERSION +0 -1
- package/framework/v0.5.6/core/connectors/redis/index.js +0 -30
- /package/framework/{v0.5.6 → v0.5.7}/AUTHORS +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/config.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/content.encoding +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/dev/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/mime.types +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/model/entity.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/model/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/router.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/server.express.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/server.isaac.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/status.codes +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/console.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/context.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/path.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/task.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/text.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/async/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/config.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/job/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/math/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/model.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/proc.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/shell.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/state.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/url/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/url/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/validator.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-session/src/main.js +0 -0
|
@@ -0,0 +1,454 @@
|
|
|
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/redis/job-store
|
|
12
|
+
*
|
|
13
|
+
* Redis-backed `JobStore` for the async-job primitive (`lib/job`) — the third
|
|
14
|
+
* connector store of the #AI6 family (SQLite, then MongoDB, shipped first).
|
|
15
|
+
* Backed by the `ioredis` driver, resolved at construction time — the
|
|
16
|
+
* framework keeps zero hard dependency on it.
|
|
17
|
+
*
|
|
18
|
+
* Like the MongoDB store, this is a multi-pod backend: the record lives on a
|
|
19
|
+
* redis every pod reaches, so a job created on pod A is pollable from pod B
|
|
20
|
+
* via `/_gina/jobs/:id` and records survive any single bundle restart. The
|
|
21
|
+
* deferred *function* still runs only in the process that created the job —
|
|
22
|
+
* the store shares the record, never the closure (see `lib/job`).
|
|
23
|
+
*
|
|
24
|
+
* Data layout — redis has no secondary queries, so the two query shapes the
|
|
25
|
+
* seam needs (list-by-state, sweep-by-expiry) are materialised as explicit
|
|
26
|
+
* index structures, maintained atomically with the record on every write
|
|
27
|
+
* (one MULTI per `set`/`remove`/`sweep` — indexes can never drift from the
|
|
28
|
+
* records):
|
|
29
|
+
*
|
|
30
|
+
* <prefix><id> record — the full JSON string (records
|
|
31
|
+
* legitimately gain keys post-create:
|
|
32
|
+
* `webhookDeliveredAt`, `webhookFailed`, ...)
|
|
33
|
+
* <prefix>idx:state:<state> SET of ids per lifecycle state
|
|
34
|
+
* <prefix>idx:expires sorted set: score = `expiresAt` (epoch ms),
|
|
35
|
+
* member = id — TERMINAL records with a numeric
|
|
36
|
+
* `expiresAt` only, so membership+score is exactly
|
|
37
|
+
* the memory store's sweep predicate
|
|
38
|
+
*
|
|
39
|
+
* Job ids are base-62 (no colon), so the colon-suffixed `idx:` keys can never
|
|
40
|
+
* collide with a record key under the same prefix.
|
|
41
|
+
*
|
|
42
|
+
* Deliberate divergences from the redis SESSION store (same connector,
|
|
43
|
+
* different contract):
|
|
44
|
+
* - NO per-key TTL. Redis-side auto-eviction would purge records OUTSIDE
|
|
45
|
+
* the seam's `sweep` (breaking memory-store parity — expiry acts only at
|
|
46
|
+
* sweep time), so keys are written without any TTL and `connConf.ttl`
|
|
47
|
+
* (a session-store knob) is deliberately ignored; retention is governed
|
|
48
|
+
* by `app.json`'s `jobs.ttl` through the seam.
|
|
49
|
+
* - `get` / `list` do NOT filter on expiry: a terminal record past its
|
|
50
|
+
* `expiresAt` stays readable until `sweep` purges it (memory parity).
|
|
51
|
+
* - Default key prefix is `'jobs:'` (`'{jobs}:'` in cluster mode), not the
|
|
52
|
+
* session store's `'sess:'` — a shared entry keeps the two namespaces
|
|
53
|
+
* apart unless the operator explicitly unifies them via `prefix`.
|
|
54
|
+
*
|
|
55
|
+
* Cluster mode: the index design needs MULTI / SUNION / MGET across several
|
|
56
|
+
* keys, which Redis Cluster only allows when all keys hash to one slot. The
|
|
57
|
+
* prefix must therefore carry a `{hash-tag}` in cluster mode — the default is
|
|
58
|
+
* `'{jobs}:'`, and a custom untagged prefix fails fast at construction
|
|
59
|
+
* (instead of CROSSSLOT errors at runtime). Job data is small; single-slot
|
|
60
|
+
* placement is fine.
|
|
61
|
+
*
|
|
62
|
+
* Config keys follow the redis connector's OWN conventions (the session
|
|
63
|
+
* store's connection surface): `host` / `port` / `db` / `password` / `tls` /
|
|
64
|
+
* `cluster`, plus `prefix` (job-store default `'jobs:'`). Canonical entry:
|
|
65
|
+
* `{ "jobsRedis": { "connector": "redis", "host": "127.0.0.1", "port": 6379 } }`.
|
|
66
|
+
*
|
|
67
|
+
* Constructed by the `lib/job-store` dispatcher at boot; not meant to be
|
|
68
|
+
* instantiated from application code.
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Job lifecycle states — imported so the sweep predicate can never drift from
|
|
73
|
+
* the memory store's (`lib/job` is a plain-required module-singleton; there is
|
|
74
|
+
* no load-time cycle because `lib/job` never requires this file — the
|
|
75
|
+
* `lib/job-store` dispatcher requires it lazily at boot).
|
|
76
|
+
*
|
|
77
|
+
* @inner
|
|
78
|
+
* @type {{PENDING:string, RUNNING:string, COMPLETED:string, FAILED:string}}
|
|
79
|
+
*/
|
|
80
|
+
var STATES = require('../../../../lib/job/src/main').STATES;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* The four state values, for the blind per-state index fan-out — derived from
|
|
84
|
+
* `STATES` so a future state cannot silently be missed.
|
|
85
|
+
*
|
|
86
|
+
* @inner
|
|
87
|
+
* @type {Array<string>}
|
|
88
|
+
*/
|
|
89
|
+
var STATE_VALUES = Object.keys(STATES).map(function(k) { return STATES[k]; });
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* No-op callback used when a caller omits one.
|
|
93
|
+
* @inner
|
|
94
|
+
* @returns {void}
|
|
95
|
+
*/
|
|
96
|
+
function noop() {}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Build a Redis-backed job store implementing the `lib/job` `JobStore` seam
|
|
100
|
+
* (`set / get / remove / list / sweep`, all Node-callback-shaped). ioredis
|
|
101
|
+
* callbacks fire asynchronously — `lib/job`'s create-race hardening (drain
|
|
102
|
+
* scheduled inside the `set` callback) is what makes an async store safe as a
|
|
103
|
+
* drop-in.
|
|
104
|
+
*
|
|
105
|
+
* Driver resolution — a strict superset of both existing precedents: a bare
|
|
106
|
+
* `require('ioredis')` first (byte-parity with the redis session store, so the
|
|
107
|
+
* two stores resolve identically wherever the session store works), then the
|
|
108
|
+
* project's `node_modules` (the mongodb job-store precedent — covers the
|
|
109
|
+
* global-install topology where a bare require cannot see a project-local
|
|
110
|
+
* install), then an actionable error. No runtime version floor (session-store
|
|
111
|
+
* parity; the CLI connector registry's `>=5.0.0` governs install hints).
|
|
112
|
+
*
|
|
113
|
+
* All timestamps are epoch MILLISECONDS — the seam's unit (`sweep(now)`
|
|
114
|
+
* receives `Date.now()`; the session store's seconds-based TTL convention does
|
|
115
|
+
* NOT apply).
|
|
116
|
+
*
|
|
117
|
+
* @param {object} connConf - Resolved `connectors.json` entry for this store.
|
|
118
|
+
* @param {string} [connConf.host] - Redis host (default 127.0.0.1; standalone mode).
|
|
119
|
+
* @param {number} [connConf.port] - Redis port (default 6379; standalone mode).
|
|
120
|
+
* @param {number} [connConf.db] - Redis DB index (default 0; standalone mode).
|
|
121
|
+
* @param {string} [connConf.password] - AUTH password (standalone and cluster).
|
|
122
|
+
* @param {boolean} [connConf.tls] - Enable TLS (managed providers).
|
|
123
|
+
* @param {Array<{host:string,port:number}>} [connConf.cluster] - Cluster nodes; presence
|
|
124
|
+
* switches to cluster mode (session-store shape).
|
|
125
|
+
* @param {string} [connConf.prefix] - Key prefix (default `'jobs:'`; `'{jobs}:'` in
|
|
126
|
+
* cluster mode — a custom cluster prefix MUST
|
|
127
|
+
* carry a `{hash-tag}`).
|
|
128
|
+
* @param {string} bundle - Bundle name — used in log lines.
|
|
129
|
+
* @param {object} [injected] - Test-only dependency injection (the entity-layer
|
|
130
|
+
* `injected` precedent): `{ driver }` replaces the
|
|
131
|
+
* resolved ioredis module. The dispatcher always
|
|
132
|
+
* calls with two arguments.
|
|
133
|
+
* @returns {object} - A `JobStore` instance, plus a `close()` convenience
|
|
134
|
+
* (not part of the seam; releases the client).
|
|
135
|
+
* @throws {Error} - When ioredis is not installed, or a custom
|
|
136
|
+
* cluster-mode prefix carries no hash tag.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* // connectors.json: { "jobsRedis": { "connector": "redis",
|
|
140
|
+
* // "host": "127.0.0.1", "port": 6379 } }
|
|
141
|
+
* // app.json: { "jobs": { "store": "jobsRedis" } }
|
|
142
|
+
* // (wired automatically at boot by gna.js via lib/job-store)
|
|
143
|
+
*/
|
|
144
|
+
module.exports = function RedisJobStore(connConf, bundle, injected) {
|
|
145
|
+
connConf = connConf || {};
|
|
146
|
+
|
|
147
|
+
// Resolve the ioredis driver: bare require first (session-store parity),
|
|
148
|
+
// then the project's node_modules (mongodb job-store precedent). The
|
|
149
|
+
// injected branch is test-only; the fallback branch is the only place the
|
|
150
|
+
// injected `_` / `getPath` globals are read, so tests stay standalone.
|
|
151
|
+
var Redis;
|
|
152
|
+
if (injected && injected.driver) {
|
|
153
|
+
Redis = injected.driver;
|
|
154
|
+
} else {
|
|
155
|
+
try {
|
|
156
|
+
Redis = require('ioredis');
|
|
157
|
+
} catch (bareErr) {
|
|
158
|
+
try {
|
|
159
|
+
var driverPath = _(getPath('project') + '/node_modules/ioredis', true);
|
|
160
|
+
Redis = require(driverPath);
|
|
161
|
+
} catch (projectErr) {
|
|
162
|
+
throw new Error(
|
|
163
|
+
'[RedisJobStore] ioredis is not installed. '
|
|
164
|
+
+ 'Run `npm install ioredis` in your project.\n'
|
|
165
|
+
+ bareErr.message
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
var isCluster = Array.isArray(connConf.cluster) && connConf.cluster.length > 0;
|
|
172
|
+
|
|
173
|
+
var prefix = (typeof connConf.prefix === 'string' && connConf.prefix.length > 0)
|
|
174
|
+
? connConf.prefix
|
|
175
|
+
: (isCluster ? '{jobs}:' : 'jobs:');
|
|
176
|
+
|
|
177
|
+
if (isCluster && !/\{.+\}/.test(prefix)) {
|
|
178
|
+
throw new Error(
|
|
179
|
+
'[RedisJobStore] cluster mode requires a hash-tagged `prefix` (e.g. "{jobs}:") '
|
|
180
|
+
+ 'so every job key hashes to one slot — the store\'s MULTI/SUNION/MGET '
|
|
181
|
+
+ 'operations fail with CROSSSLOT across slots. Got: "' + prefix + '"'
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Client construction mirrors the redis session store (standalone,
|
|
186
|
+
// cluster, TLS).
|
|
187
|
+
var client;
|
|
188
|
+
if (isCluster) {
|
|
189
|
+
var clusterRedisOpts = {};
|
|
190
|
+
if (connConf.password) clusterRedisOpts.password = connConf.password;
|
|
191
|
+
if (connConf.tls) clusterRedisOpts.tls = {};
|
|
192
|
+
client = new Redis.Cluster(connConf.cluster, { redisOptions: clusterRedisOpts });
|
|
193
|
+
} else {
|
|
194
|
+
var clientConf = {
|
|
195
|
+
host : connConf.host || '127.0.0.1',
|
|
196
|
+
port : +(connConf.port || 6379),
|
|
197
|
+
db : +(connConf.db || 0)
|
|
198
|
+
};
|
|
199
|
+
if (connConf.password) clientConf.password = connConf.password;
|
|
200
|
+
if (connConf.tls) clientConf.tls = {};
|
|
201
|
+
client = new Redis(clientConf);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// An 'error' event with no listener would crash the process (EventEmitter
|
|
205
|
+
// semantics). Log it; each seam operation surfaces its own driver error
|
|
206
|
+
// through its callback (ioredis queues commands while reconnecting).
|
|
207
|
+
client.on('error', function(err) {
|
|
208
|
+
console.error('[RedisJobStore] ' + ((err && err.message) || err) + ' (bundle: ' + bundle + ')');
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Record key for a job id.
|
|
213
|
+
* @inner
|
|
214
|
+
* @param {string} id
|
|
215
|
+
* @returns {string}
|
|
216
|
+
*/
|
|
217
|
+
function recKey(id) { return prefix + id; }
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Per-state index SET key.
|
|
221
|
+
* @inner
|
|
222
|
+
* @param {string} state
|
|
223
|
+
* @returns {string}
|
|
224
|
+
*/
|
|
225
|
+
function stateKey(state) { return prefix + 'idx:state:' + state; }
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Expiry index (sorted set) key — terminal records with a numeric
|
|
229
|
+
* `expiresAt` only.
|
|
230
|
+
* @inner
|
|
231
|
+
* @type {string}
|
|
232
|
+
*/
|
|
233
|
+
var expiresKey = prefix + 'idx:expires';
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Whether a state is terminal (sweepable once expired).
|
|
237
|
+
* @inner
|
|
238
|
+
* @param {string} state
|
|
239
|
+
* @returns {boolean}
|
|
240
|
+
*/
|
|
241
|
+
function isTerminal(state) {
|
|
242
|
+
return state === STATES.COMPLETED || state === STATES.FAILED;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Extract the first error out of a MULTI exec outcome — the exec-level
|
|
247
|
+
* error, or the first per-command error from the `[err, result]` pairs.
|
|
248
|
+
*
|
|
249
|
+
* @inner
|
|
250
|
+
* @param {?Error} err - exec-level error.
|
|
251
|
+
* @param {?Array} results - Array of `[err, result]` pairs.
|
|
252
|
+
* @returns {?Error}
|
|
253
|
+
*/
|
|
254
|
+
function firstExecError(err, results) {
|
|
255
|
+
if (err) return err;
|
|
256
|
+
if (!results) return null;
|
|
257
|
+
for (var i = 0; i < results.length; i++) {
|
|
258
|
+
if (results[i] && results[i][0]) return results[i][0];
|
|
259
|
+
}
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return {
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Upsert `record` under `id` and maintain the two index structures in
|
|
267
|
+
* the same atomic MULTI: the record JSON, a blind SREM from every
|
|
268
|
+
* other state SET + SADD into the current one, and the expiry index
|
|
269
|
+
* entry (added only for a terminal state with a numeric `expiresAt`,
|
|
270
|
+
* removed otherwise) — so index membership always reflects the last
|
|
271
|
+
* write.
|
|
272
|
+
*
|
|
273
|
+
* @param {string} id
|
|
274
|
+
* @param {JobRecord} record
|
|
275
|
+
* @param {function} [fn] - `fn(err, record)`.
|
|
276
|
+
* @returns {void}
|
|
277
|
+
*/
|
|
278
|
+
set: function(id, record, fn) {
|
|
279
|
+
if (typeof fn !== 'function') fn = noop;
|
|
280
|
+
var json;
|
|
281
|
+
try {
|
|
282
|
+
json = JSON.stringify(record);
|
|
283
|
+
} catch (err) {
|
|
284
|
+
return fn(err);
|
|
285
|
+
}
|
|
286
|
+
var state = String(record.state || '');
|
|
287
|
+
var multi = client.multi();
|
|
288
|
+
multi.set(recKey(id), json);
|
|
289
|
+
for (var i = 0; i < STATE_VALUES.length; i++) {
|
|
290
|
+
if (STATE_VALUES[i] !== state) {
|
|
291
|
+
multi.srem(stateKey(STATE_VALUES[i]), id);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
multi.sadd(stateKey(state), id);
|
|
295
|
+
if (isTerminal(state) && typeof record.expiresAt === 'number') {
|
|
296
|
+
multi.zadd(expiresKey, record.expiresAt, id);
|
|
297
|
+
} else {
|
|
298
|
+
multi.zrem(expiresKey, id);
|
|
299
|
+
}
|
|
300
|
+
multi.exec(function(execErr, results) {
|
|
301
|
+
var err = firstExecError(execErr, results);
|
|
302
|
+
if (err) return fn(err);
|
|
303
|
+
fn(null, record);
|
|
304
|
+
});
|
|
305
|
+
},
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Fetch a record by `id`. A plain key read — NO expiry filter: a
|
|
309
|
+
* terminal record past its `expiresAt` stays readable until `sweep`
|
|
310
|
+
* purges it (memory-store parity).
|
|
311
|
+
*
|
|
312
|
+
* @param {string} id
|
|
313
|
+
* @param {function} fn - `fn(err, record|null)`.
|
|
314
|
+
* @returns {void}
|
|
315
|
+
*/
|
|
316
|
+
get: function(id, fn) {
|
|
317
|
+
if (typeof fn !== 'function') fn = noop;
|
|
318
|
+
client.get(recKey(id), function(err, data) {
|
|
319
|
+
if (err) return fn(err);
|
|
320
|
+
if (!data) return fn(null, null);
|
|
321
|
+
var rec;
|
|
322
|
+
try {
|
|
323
|
+
rec = JSON.parse(data);
|
|
324
|
+
} catch (parseErr) {
|
|
325
|
+
return fn(new Error('[RedisJobStore] could not parse job record `' + id + '`: ' + parseErr.message));
|
|
326
|
+
}
|
|
327
|
+
fn(null, rec);
|
|
328
|
+
});
|
|
329
|
+
},
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Delete a record by `id`, cleaning its index entries in the same
|
|
333
|
+
* MULTI. `existed` is derived from the DEL count.
|
|
334
|
+
*
|
|
335
|
+
* @param {string} id
|
|
336
|
+
* @param {function} [fn] - `fn(err, existed)`.
|
|
337
|
+
* @returns {void}
|
|
338
|
+
*/
|
|
339
|
+
remove: function(id, fn) {
|
|
340
|
+
if (typeof fn !== 'function') fn = noop;
|
|
341
|
+
var multi = client.multi();
|
|
342
|
+
multi.del(recKey(id));
|
|
343
|
+
for (var i = 0; i < STATE_VALUES.length; i++) {
|
|
344
|
+
multi.srem(stateKey(STATE_VALUES[i]), id);
|
|
345
|
+
}
|
|
346
|
+
multi.zrem(expiresKey, id);
|
|
347
|
+
multi.exec(function(execErr, results) {
|
|
348
|
+
var err = firstExecError(execErr, results);
|
|
349
|
+
if (err) return fn(err);
|
|
350
|
+
fn(null, !!(results && results[0] && results[0][1] > 0));
|
|
351
|
+
});
|
|
352
|
+
},
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* List records, optionally filtered by `{ state }` — SMEMBERS on the
|
|
356
|
+
* matching state SET (or SUNION across all four for an unfiltered
|
|
357
|
+
* list), then one MGET for the records. No expiry filter (memory
|
|
358
|
+
* parity). An id whose record key is gone by MGET time was
|
|
359
|
+
* removed/swept between the two reads — equivalent to listing a
|
|
360
|
+
* moment later, so it is skipped; a record that fails to PARSE fails
|
|
361
|
+
* the whole list loudly (silent skipping would hide corruption).
|
|
362
|
+
*
|
|
363
|
+
* @param {?Object} filter - e.g. `{ state: 'failed' }`; `null` for all.
|
|
364
|
+
* @param {function} fn - `fn(err, records)`.
|
|
365
|
+
* @returns {void}
|
|
366
|
+
*/
|
|
367
|
+
list: function(filter, fn) {
|
|
368
|
+
if (typeof fn !== 'function') fn = noop;
|
|
369
|
+
var onIds = function(err, ids) {
|
|
370
|
+
if (err) return fn(err);
|
|
371
|
+
if (!ids || ids.length === 0) return fn(null, []);
|
|
372
|
+
var keys = [];
|
|
373
|
+
for (var i = 0; i < ids.length; i++) {
|
|
374
|
+
keys.push(recKey(ids[i]));
|
|
375
|
+
}
|
|
376
|
+
client.mget(keys, function(mgetErr, values) {
|
|
377
|
+
if (mgetErr) return fn(mgetErr);
|
|
378
|
+
var out = [];
|
|
379
|
+
try {
|
|
380
|
+
for (var j = 0; j < values.length; j++) {
|
|
381
|
+
if (values[j] === null || typeof values[j] === 'undefined') continue;
|
|
382
|
+
out.push(JSON.parse(values[j]));
|
|
383
|
+
}
|
|
384
|
+
} catch (parseErr) {
|
|
385
|
+
return fn(new Error('[RedisJobStore] could not parse a job record while listing: ' + parseErr.message));
|
|
386
|
+
}
|
|
387
|
+
fn(null, out);
|
|
388
|
+
});
|
|
389
|
+
};
|
|
390
|
+
if (filter && filter.state) {
|
|
391
|
+
client.smembers(stateKey(String(filter.state)), onIds);
|
|
392
|
+
} else {
|
|
393
|
+
var setKeys = [];
|
|
394
|
+
for (var i = 0; i < STATE_VALUES.length; i++) {
|
|
395
|
+
setKeys.push(stateKey(STATE_VALUES[i]));
|
|
396
|
+
}
|
|
397
|
+
client.sunion(setKeys, onIds);
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Purge terminal (`completed` / `failed`) records whose `expiresAt`
|
|
403
|
+
* has elapsed — the exact memory-store predicate. Only terminal
|
|
404
|
+
* records with a numeric `expiresAt` ever enter the expiry index (see
|
|
405
|
+
* `set`), so a range read up to `now` yields exactly the sweepable
|
|
406
|
+
* ids — O(expired), not O(all): pending/running and null-`expiresAt`
|
|
407
|
+
* records are excluded by construction (the SQLite store's
|
|
408
|
+
* `IS NOT NULL` analog). Deletion + index cleanup happen in one MULTI;
|
|
409
|
+
* the removed count is the number of DELs that hit.
|
|
410
|
+
*
|
|
411
|
+
* @param {number} now - Epoch ms (passed in by `lib/job`).
|
|
412
|
+
* @param {function} fn - `fn(err, removedCount)`.
|
|
413
|
+
* @returns {void}
|
|
414
|
+
*/
|
|
415
|
+
sweep: function(now, fn) {
|
|
416
|
+
if (typeof fn !== 'function') fn = noop;
|
|
417
|
+
client.zrangebyscore(expiresKey, '-inf', now, function(err, ids) {
|
|
418
|
+
if (err) return fn(err);
|
|
419
|
+
if (!ids || ids.length === 0) return fn(null, 0);
|
|
420
|
+
var multi = client.multi();
|
|
421
|
+
for (var i = 0; i < ids.length; i++) {
|
|
422
|
+
multi.del(recKey(ids[i]));
|
|
423
|
+
multi.srem(stateKey(STATES.COMPLETED), ids[i]);
|
|
424
|
+
multi.srem(stateKey(STATES.FAILED), ids[i]);
|
|
425
|
+
multi.zrem(expiresKey, ids[i]);
|
|
426
|
+
}
|
|
427
|
+
multi.exec(function(execErr, results) {
|
|
428
|
+
var execFirstErr = firstExecError(execErr, results);
|
|
429
|
+
if (execFirstErr) return fn(execFirstErr);
|
|
430
|
+
var removed = 0;
|
|
431
|
+
// Each swept id contributed 4 commands; every 4th result
|
|
432
|
+
// (offset 0) is its DEL count.
|
|
433
|
+
for (var j = 0; j < results.length; j += 4) {
|
|
434
|
+
if (results[j] && results[j][1] > 0) removed++;
|
|
435
|
+
}
|
|
436
|
+
fn(null, removed);
|
|
437
|
+
});
|
|
438
|
+
});
|
|
439
|
+
},
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* Release the underlying client. NOT part of the `JobStore` seam —
|
|
443
|
+
* `lib/job` never calls it; provided for tests and explicit teardown.
|
|
444
|
+
*
|
|
445
|
+
* @returns {void}
|
|
446
|
+
*/
|
|
447
|
+
close: function() {
|
|
448
|
+
try {
|
|
449
|
+
var p = client.quit();
|
|
450
|
+
if (p && typeof p.catch === 'function') p.catch(noop);
|
|
451
|
+
} catch (e) { /* already closed */ }
|
|
452
|
+
}
|
|
453
|
+
};
|
|
454
|
+
};
|