gina 0.6.0 → 0.6.1
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 +16 -0
- package/README.md +24 -31
- package/ROADMAP.md +2 -1
- package/context7.json +43 -0
- package/framework/v0.6.1/VERSION +1 -0
- package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/js/gina.js +200 -30
- package/framework/v0.6.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js +603 -0
- package/framework/v0.6.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.6.0 → v0.6.1}/core/connectors/couchbase/index.js +15 -0
- package/framework/v0.6.1/core/connectors/duckdb/index.js +478 -0
- package/framework/v0.6.1/core/connectors/duckdb/lib/connector.js +125 -0
- package/framework/{v0.6.0 → v0.6.1}/core/connectors/mongodb/index.js +9 -1
- package/framework/{v0.6.0 → v0.6.1}/core/connectors/mysql/index.js +9 -1
- package/framework/{v0.6.0 → v0.6.1}/core/connectors/postgresql/index.js +9 -1
- package/framework/{v0.6.0 → v0.6.1}/core/connectors/scylladb/index.js +9 -1
- package/framework/{v0.6.0 → v0.6.1}/core/connectors/sqlite/index.js +9 -1
- package/framework/{v0.6.0 → v0.6.1}/core/connectors/sqlite/lib/connector.js +4 -6
- package/framework/{v0.6.0 → v0.6.1}/core/connectors/sqlite/lib/job-store.js +5 -7
- package/framework/{v0.6.0 → v0.6.1}/core/connectors/sqlite/lib/session-store.js +5 -7
- package/framework/{v0.6.0 → v0.6.1}/core/controller/controller.render-json.js +17 -1
- package/framework/{v0.6.0 → v0.6.1}/core/model/entity.js +8 -3
- package/framework/{v0.6.0 → v0.6.1}/core/model/template/index.js +1 -1
- package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/validator/src/form-validator.js +71 -4
- package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/validator/src/main.js +129 -26
- package/framework/{v0.6.0 → v0.6.1}/core/server.isaac.js +47 -1
- package/framework/{v0.6.0 → v0.6.1}/core/server.js +10 -2
- package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/add.js +1 -1
- package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/help.txt +1 -0
- package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/migrate.js +1 -1
- package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/remove.js +1 -1
- package/framework/{v0.6.0 → v0.6.1}/lib/connector-registry/src/main.js +6 -1
- package/framework/{v0.6.0 → v0.6.1}/lib/model.js +2 -2
- package/framework/v0.6.1/lib/sqlite-driver.js +217 -0
- package/framework/{v0.6.0 → v0.6.1}/lib/state.js +5 -4
- package/framework/{v0.6.0 → v0.6.1}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +15 -4
- package/package.json +5 -5
- package/schema/connectors.json +9 -4
- package/script/smoke_in_container.js +401 -8
- package/types/index.d.ts +1 -1
- package/framework/v0.6.0/VERSION +0 -1
- package/framework/v0.6.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -601
- package/framework/v0.6.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/AUTHORS +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/LICENSE +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/config.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/content.encoding +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/controller.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/dev/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/gna.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/locales/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/locales/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/mime.types +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/model/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/router.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/server.express.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/status.codes +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/console.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/context.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/path.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/task.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/helpers/text.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/async/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cache/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/config.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/job/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/job-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/math/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/proc.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/session-store.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/shell.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/url/README.md +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/url/index.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/validator.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.0 → v0.6.1}/lib/ws-session/src/main.js +0 -0
|
@@ -492,6 +492,21 @@ function Couchbase(conn, infos) {
|
|
|
492
492
|
entities[entityName].prototype.getCluster = getCluster;
|
|
493
493
|
}
|
|
494
494
|
|
|
495
|
+
// #B174: the attach below is deliberately UNCONDITIONAL — a colliding
|
|
496
|
+
// name overwrites/shadows the existing member (the documented exception
|
|
497
|
+
// to the six-connector skip guard, see #B173). Warn when that collision
|
|
498
|
+
// clobbers machinery: an own member (a stamped entity property like
|
|
499
|
+
// `name`/`getCluster`, or a previously attached query method) or an
|
|
500
|
+
// inherited member NOT on `Object.prototype` (the EventEmitter API —
|
|
501
|
+
// an `on.sql` file breaks event wiring for this entity). Shadowing
|
|
502
|
+
// gina's `Object.prototype` helpers (`count()`/`functionCount()`) is
|
|
503
|
+
// the desired outcome and stays silent. Warn only — never skip.
|
|
504
|
+
if (typeof entities[entityName].prototype[name] !== 'undefined') {
|
|
505
|
+
var _isOwnMember = Object.prototype.hasOwnProperty.call(entities[entityName].prototype, name);
|
|
506
|
+
if ( _isOwnMember || !Object.prototype.hasOwnProperty.call(Object.prototype, name) ) {
|
|
507
|
+
console.warn('[couchbase] query method \'' + name + '\' (' + source + ') on the ' + entityName + ' entity ' + (_isOwnMember ? 'overwrites an existing own member (a stamped entity property or a previously attached query method)' : 'shadows an inherited member on the prototype chain (e.g. the EventEmitter API)') + ' — the query file WINS and the original member becomes unreachable on this entity. Rename the file, e.g. \'' + name + 'Rows.sql\'.');
|
|
508
|
+
}
|
|
509
|
+
}
|
|
495
510
|
|
|
496
511
|
entities[entityName].prototype[name] = function() {
|
|
497
512
|
// #B11 fix: recover the entity singleton when called via util.promisify
|
|
@@ -0,0 +1,478 @@
|
|
|
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 fs = require('fs');
|
|
11
|
+
var sqlParser = require('./../sql-parser'); // #SQL1 state-machine comment stripper
|
|
12
|
+
var lib = require('./../../../lib') || require.cache[require.resolve('./../../../lib')];
|
|
13
|
+
var inherits = lib.inherits;
|
|
14
|
+
var console = lib.logger;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* DuckDB ORM connector — embedded analytical (columnar / OLAP) store.
|
|
18
|
+
*
|
|
19
|
+
* Wires entity classes with SQL methods read from the bundle's `sql/` directory.
|
|
20
|
+
* SQL files use DuckDB syntax with positional placeholders — `?` and `$1` are both
|
|
21
|
+
* accepted by the engine; args are bound positionally as an array either way.
|
|
22
|
+
* Backed by the DuckDBConnection passed from DuckdbConnector.onReady.
|
|
23
|
+
*
|
|
24
|
+
* Bundle model layout:
|
|
25
|
+
* ```
|
|
26
|
+
* models/
|
|
27
|
+
* <database>/
|
|
28
|
+
* entities/
|
|
29
|
+
* ReportEntity.js ← entity class
|
|
30
|
+
* sql/
|
|
31
|
+
* Report/
|
|
32
|
+
* findById.sql ← SELECT … WHERE id = ?
|
|
33
|
+
* totals.sql ← WITH … SELECT … (CTEs are fine)
|
|
34
|
+
* insert.sql
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* SQL file format:
|
|
38
|
+
* ```sql
|
|
39
|
+
* / *
|
|
40
|
+
* * @param {string} $1 report id
|
|
41
|
+
* * @return {object}
|
|
42
|
+
* * /
|
|
43
|
+
* SELECT * FROM reports WHERE id = ?
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* `@return` annotation controls result shape:
|
|
47
|
+
* {object} → first row or null
|
|
48
|
+
* {Array} → all rows (default for row-returning statements)
|
|
49
|
+
* {boolean} → rowsChanged > 0 (write) / rows.length > 0 (row-returning)
|
|
50
|
+
* {number} → first key of first row (COUNT(*) queries)
|
|
51
|
+
* (none) → { changes } for write ops; all rows otherwise
|
|
52
|
+
*
|
|
53
|
+
* Row values come from the driver's JSON-safe getter (`getRowObjectsJson()`):
|
|
54
|
+
* BIGINT / HUGEINT / DECIMAL / DATE / TIMESTAMP arrive as STRINGS (same behaviour
|
|
55
|
+
* as the pg driver's bigint/numeric handling) so results always survive
|
|
56
|
+
* JSON.stringify. `{number}` coercion Number()s the COUNT string.
|
|
57
|
+
*
|
|
58
|
+
* Row-returning statements are recognised beyond bare SELECT: WITH (CTEs),
|
|
59
|
+
* FROM-first, SUMMARIZE, PIVOT/UNPIVOT, DESCRIBE and SHOW all return rows in
|
|
60
|
+
* DuckDB's dialect — a bare ^SELECT test would route them to the write path,
|
|
61
|
+
* where the driver reports rowsChanged 0 and the rows would be silently lost.
|
|
62
|
+
*
|
|
63
|
+
* Methods return a native Promise with `.onComplete(cb)` for backward compatibility.
|
|
64
|
+
*
|
|
65
|
+
* @class Duckdb
|
|
66
|
+
* @constructor
|
|
67
|
+
* @param {object} conn - DuckDBConnection from DuckdbConnector.onReady
|
|
68
|
+
* @param {object} infos - { model, bundle, database, scope }
|
|
69
|
+
* @returns {object} - Entity class map: { ReportEntity: Constructor, … }
|
|
70
|
+
*/
|
|
71
|
+
function Duckdb(conn, infos) {
|
|
72
|
+
var envIsDev = ( /^true$/i.test(process.env.NODE_ENV_IS_DEV) ) ? true : false;
|
|
73
|
+
var isCacheless = (process.env.NODE_ENV_IS_DEV == 'false') ? false : true;
|
|
74
|
+
|
|
75
|
+
// #QI1 — in-memory index map built from indexes.sql at startup.
|
|
76
|
+
// Keys are lowercase table names; values are [{ name, primary }].
|
|
77
|
+
// null when no indexes.sql exists (grey N/A badge in Inspector).
|
|
78
|
+
var _knownIndexes = null;
|
|
79
|
+
/** @type {boolean} #QI2 — true after live introspection has populated _knownIndexes */
|
|
80
|
+
var _liveIntrospected = false;
|
|
81
|
+
|
|
82
|
+
// -------------------------------------------------------------------------
|
|
83
|
+
// init — load entities + SQL methods
|
|
84
|
+
// -------------------------------------------------------------------------
|
|
85
|
+
var init = function(conn, infos) {
|
|
86
|
+
var EntitySuperClass = null;
|
|
87
|
+
var entitiesPath = getPath('bundle') + '/models/' + infos.database + '/entities';
|
|
88
|
+
var files = [];
|
|
89
|
+
var entities = {};
|
|
90
|
+
var entityName = '';
|
|
91
|
+
var Entity = null;
|
|
92
|
+
var className = null;
|
|
93
|
+
var filename = null;
|
|
94
|
+
|
|
95
|
+
// EntitySuperClass ────────────────────────────────────────────────────
|
|
96
|
+
filename = getPath('gina').core + '/model/entity.js';
|
|
97
|
+
if (isCacheless) {
|
|
98
|
+
delete require.cache[require.resolve(_(filename, true))];
|
|
99
|
+
}
|
|
100
|
+
EntitySuperClass = require(_(filename, true));
|
|
101
|
+
|
|
102
|
+
// Entity JS files ─────────────────────────────────────────────────────
|
|
103
|
+
if (!fs.existsSync(entitiesPath)) {
|
|
104
|
+
new _(entitiesPath).mkdirSync();
|
|
105
|
+
}
|
|
106
|
+
files = fs.readdirSync(entitiesPath);
|
|
107
|
+
|
|
108
|
+
for (var f = 0, fLen = files.length; f < fLen; ++f) {
|
|
109
|
+
if ( /^\./.test(files[f]) || !/\.js$/i.test(files[f]) ) continue;
|
|
110
|
+
|
|
111
|
+
if (isCacheless) {
|
|
112
|
+
delete require.cache[require.resolve(_(entitiesPath + '/' + files[f], true))];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
entityName = files[f].replace(/\.js$/i, '');
|
|
116
|
+
className = entityName.substring(0, 1).toUpperCase() + entityName.substring(1);
|
|
117
|
+
|
|
118
|
+
Entity = require(_(entitiesPath + '/' + files[f], true));
|
|
119
|
+
if (typeof Entity !== 'function') continue;
|
|
120
|
+
|
|
121
|
+
Entity = inherits(Entity, EntitySuperClass);
|
|
122
|
+
|
|
123
|
+
Entity.prototype.name = className;
|
|
124
|
+
Entity.prototype.model = infos.model;
|
|
125
|
+
Entity.prototype.bundle = infos.bundle;
|
|
126
|
+
Entity.prototype.database = infos.database;
|
|
127
|
+
Entity.prototype._collection = entityName;
|
|
128
|
+
Entity.prototype._scope = infos.scope || process.env.NODE_SCOPE;
|
|
129
|
+
Entity.prototype._filename = _(entitiesPath + '/' + files[f], true);
|
|
130
|
+
|
|
131
|
+
entities[className] = Entity;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// SQL method files ────────────────────────────────────────────────────
|
|
135
|
+
var sqlDir = _(getPath('bundle') + '/models/' + infos.database + '/sql');
|
|
136
|
+
if (fs.existsSync(sqlDir)) {
|
|
137
|
+
var sqlEntries = fs.readdirSync(sqlDir);
|
|
138
|
+
for (var s = 0, sLen = sqlEntries.length; s < sLen; s++) {
|
|
139
|
+
if ( /^\./.test(sqlEntries[s]) ) continue;
|
|
140
|
+
loadSQL(entities, conn, _(sqlDir + '/' + sqlEntries[s]));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// #QI1 — load indexes.sql if present
|
|
144
|
+
var indexesFile = _(sqlDir + '/indexes.sql', true);
|
|
145
|
+
if (fs.existsSync(indexesFile)) {
|
|
146
|
+
try {
|
|
147
|
+
var indexesSrc = fs.readFileSync(indexesFile).toString();
|
|
148
|
+
_knownIndexes = sqlParser.parseCreateIndexes(indexesSrc);
|
|
149
|
+
} catch (e) {
|
|
150
|
+
console.warn('[duckdb] Failed to parse indexes.sql: ' + e.message);
|
|
151
|
+
_knownIndexes = {};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// #QI2 — live index introspection listener (dev mode only).
|
|
157
|
+
// The /_gina/indexes endpoint emits this event; the connector responds
|
|
158
|
+
// with live index data from duckdb_indexes(), updating _knownIndexes
|
|
159
|
+
// so all subsequent QI entries benefit automatically.
|
|
160
|
+
if (envIsDev) {
|
|
161
|
+
process.on('inspector#indexes', function(_cb) {
|
|
162
|
+
if (_liveIntrospected) {
|
|
163
|
+
return _cb(null, 'duckdb', infos.database, _knownIndexes);
|
|
164
|
+
}
|
|
165
|
+
try {
|
|
166
|
+
conn.runAndReadAll('SELECT index_name, table_name, is_unique, sql FROM duckdb_indexes()').then(
|
|
167
|
+
function(reader) {
|
|
168
|
+
var map = {};
|
|
169
|
+
var rows = reader.getRowObjectsJson();
|
|
170
|
+
for (var r = 0, rLen = rows.length; r < rLen; r++) {
|
|
171
|
+
var tbl = String(rows[r].table_name).toLowerCase();
|
|
172
|
+
var idx = rows[r].index_name;
|
|
173
|
+
var def = rows[r].sql || '';
|
|
174
|
+
if (!map[tbl]) map[tbl] = [];
|
|
175
|
+
map[tbl].push({
|
|
176
|
+
name: idx,
|
|
177
|
+
primary: /PRIMARY KEY/i.test(def),
|
|
178
|
+
// #QI Phase C.2 — parse the indexed columns out of the CREATE INDEX text
|
|
179
|
+
columns: sqlParser.parseIndexDefColumns(def)
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
// Merge live data into _knownIndexes (live wins)
|
|
183
|
+
if (_knownIndexes === null) _knownIndexes = {};
|
|
184
|
+
var tables = Object.keys(map);
|
|
185
|
+
for (var i = 0; i < tables.length; i++) {
|
|
186
|
+
_knownIndexes[tables[i]] = map[tables[i]];
|
|
187
|
+
}
|
|
188
|
+
_liveIntrospected = true;
|
|
189
|
+
_cb(null, 'duckdb', infos.database, _knownIndexes);
|
|
190
|
+
},
|
|
191
|
+
function(err) {
|
|
192
|
+
_cb(err, 'duckdb', infos.database, _knownIndexes);
|
|
193
|
+
}
|
|
194
|
+
);
|
|
195
|
+
} catch (e) {
|
|
196
|
+
_cb(e, 'duckdb', infos.database, _knownIndexes);
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return entities;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
// -------------------------------------------------------------------------
|
|
206
|
+
// loadSQL — walk the sql/ entry (directory per entity or flat file)
|
|
207
|
+
// -------------------------------------------------------------------------
|
|
208
|
+
var loadSQL = function(entities, conn, sqlPath) {
|
|
209
|
+
var stat = fs.statSync(sqlPath);
|
|
210
|
+
|
|
211
|
+
if (stat.isDirectory()) {
|
|
212
|
+
// sql/<EntityName>/methodName.sql
|
|
213
|
+
var arr = sqlPath.split(/\//g);
|
|
214
|
+
var entityName = arr[arr.length - 1];
|
|
215
|
+
entityName = entityName.charAt(0).toUpperCase() + entityName.slice(1);
|
|
216
|
+
|
|
217
|
+
var sqlFiles = fs.readdirSync(sqlPath);
|
|
218
|
+
for (var f = 0, fLen = sqlFiles.length; f < fLen; f++) {
|
|
219
|
+
if ( /^\./.test(sqlFiles[f]) || !/\.sql$/i.test(sqlFiles[f]) ) continue;
|
|
220
|
+
readSQL(entities, conn, entityName, _(sqlPath + '/' + sqlFiles[f], true));
|
|
221
|
+
}
|
|
222
|
+
} else {
|
|
223
|
+
// flat file: <EntityName>_<methodName>.sql
|
|
224
|
+
readSQL(entities, conn, null, sqlPath);
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
// -------------------------------------------------------------------------
|
|
230
|
+
// readSQL — parse one .sql file and attach a method to the entity
|
|
231
|
+
// -------------------------------------------------------------------------
|
|
232
|
+
var readSQL = function(entities, conn, entityName, source) {
|
|
233
|
+
var arr = source.split(/\//g);
|
|
234
|
+
var name = arr[arr.length - 1].replace(/\.sql$/i, '');
|
|
235
|
+
|
|
236
|
+
// Infer entity from flat filename prefix when not given
|
|
237
|
+
if (!entityName) {
|
|
238
|
+
var parts = name.split('_');
|
|
239
|
+
if (parts.length < 2) return;
|
|
240
|
+
entityName = parts[0].charAt(0).toUpperCase() + parts[0].slice(1);
|
|
241
|
+
name = parts.slice(1).join('_');
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (!entities[entityName]) return;
|
|
245
|
+
if (typeof entities[entityName].prototype[name] !== 'undefined') {
|
|
246
|
+
// Own property = user code in the entity .js wins (designed intent).
|
|
247
|
+
// Inherited name = the file is silently shadowed (e.g. gina's
|
|
248
|
+
// Object.prototype count()) — warn so the skip is diagnosable (#B173).
|
|
249
|
+
if ( !Object.prototype.hasOwnProperty.call(entities[entityName].prototype, name) ) {
|
|
250
|
+
console.warn('[duckdb] skipping query method \'' + name + '\' (' + source + '): the name is inherited on the ' + entityName + ' prototype chain (EventEmitter, entity base API, or gina\'s Object.prototype helpers like count()) — calls would run the inherited member instead. Rename the file, e.g. \'' + name + 'Rows.sql\'.');
|
|
251
|
+
}
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// ── Parse the SQL file ────────────────────────────────────────────────
|
|
256
|
+
var rawSource = fs.readFileSync(source).toString();
|
|
257
|
+
|
|
258
|
+
var returnType = null;
|
|
259
|
+
var retMatch = rawSource.match(/@return\s+\{([^}]+)\}/);
|
|
260
|
+
if (retMatch) returnType = retMatch[1].trim().toLowerCase();
|
|
261
|
+
|
|
262
|
+
var paramTypes = [];
|
|
263
|
+
var ptMatches = rawSource.match(/@param\s+\{([^}]+)\}/g);
|
|
264
|
+
if (ptMatches) {
|
|
265
|
+
for (var pt = 0; pt < ptMatches.length; pt++) {
|
|
266
|
+
paramTypes.push(ptMatches[pt].match(/\{([^}]+)\}/)[1].trim().toLowerCase());
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// #SQL1 — state-machine stripper handles nested comments and
|
|
271
|
+
// -- / // inside string literals correctly
|
|
272
|
+
var queryString = sqlParser.stripComments(rawSource)
|
|
273
|
+
.replace(/\s+/g, ' ')
|
|
274
|
+
.trim();
|
|
275
|
+
|
|
276
|
+
if (!queryString) return;
|
|
277
|
+
|
|
278
|
+
// DuckDB-dialect row-returning detection. A bare ^SELECT test (the
|
|
279
|
+
// mysql/postgresql form) would route WITH (CTEs), FROM-first,
|
|
280
|
+
// SUMMARIZE, PIVOT/UNPIVOT, DESCRIBE and SHOW through the write path —
|
|
281
|
+
// measured on the driver: run() reports rowsChanged 0 for a WITH query
|
|
282
|
+
// and the rows are silently lost. Analytics SQL leans on CTEs, so the
|
|
283
|
+
// classifier covers the dialect's row-returning statement heads.
|
|
284
|
+
var isRowReturning = /^\s*(SELECT|WITH|FROM|SUMMARIZE|PIVOT|UNPIVOT|DESCRIBE|SHOW)\b/i.test(queryString);
|
|
285
|
+
var trigger = 'DUCKDB:' + entityName.toLowerCase() + '#' + name;
|
|
286
|
+
|
|
287
|
+
// ── Helper: coerce a driver result to the annotated return type ───────
|
|
288
|
+
//
|
|
289
|
+
// Row-returning → a DuckDBResultReader; rows via getRowObjectsJson()
|
|
290
|
+
// (JSON-safe: BIGINT/DECIMAL/DATE/TIMESTAMP as strings)
|
|
291
|
+
// Write → a DuckDBMaterializedResult; rowsChanged is the
|
|
292
|
+
// affected-row count (plain number)
|
|
293
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
294
|
+
var coerce = function(result) {
|
|
295
|
+
if (isRowReturning) {
|
|
296
|
+
var rows = result.getRowObjectsJson();
|
|
297
|
+
|
|
298
|
+
if (returnType === 'object') {
|
|
299
|
+
return (rows.length > 0) ? rows[0] : null;
|
|
300
|
+
}
|
|
301
|
+
if (returnType === 'boolean') {
|
|
302
|
+
return rows.length > 0;
|
|
303
|
+
}
|
|
304
|
+
if (returnType === 'number' && /count\s*\(/i.test(queryString)) {
|
|
305
|
+
if (rows.length > 0 && typeof rows[0] === 'object') {
|
|
306
|
+
var keys = Object.keys(rows[0]);
|
|
307
|
+
return (keys.length > 0) ? Number(rows[0][keys[0]]) : 0;
|
|
308
|
+
}
|
|
309
|
+
return 0;
|
|
310
|
+
}
|
|
311
|
+
// {array} or no annotation — all rows, normalised to null when empty
|
|
312
|
+
return rows.length > 0 ? rows : null;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Write op
|
|
316
|
+
if (returnType === 'boolean') return result.rowsChanged > 0;
|
|
317
|
+
if (returnType === 'number') return result.rowsChanged;
|
|
318
|
+
// Default: normalised write result (DuckDB has no insertId analog)
|
|
319
|
+
return { changes: result.rowsChanged };
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
// ── Entity method ─────────────────────────────────────────────────────
|
|
323
|
+
entities[entityName].prototype[name] = function() {
|
|
324
|
+
var args = Array.prototype.slice.call(arguments);
|
|
325
|
+
var _mainCallback = null;
|
|
326
|
+
|
|
327
|
+
// Trailing-function detection (util.promisify / explicit callback)
|
|
328
|
+
if (typeof args[args.length - 1] === 'function') {
|
|
329
|
+
_mainCallback = args.pop();
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// Positional type casting from @param annotations
|
|
333
|
+
for (var t = 0, tLen = paramTypes.length; t < tLen && t < args.length; t++) {
|
|
334
|
+
switch (paramTypes[t]) {
|
|
335
|
+
case 'number':
|
|
336
|
+
case 'integer': args[t] = parseInt(args[t], 10); break;
|
|
337
|
+
case 'float': args[t] = parseFloat(String(args[t]).replace(/,/, '.')); break;
|
|
338
|
+
case 'string': args[t] = String(args[t]); break;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
if (envIsDev) {
|
|
343
|
+
console.debug('[ ' + trigger + ' ] ' + queryString);
|
|
344
|
+
if (args.length > 0) {
|
|
345
|
+
console.debug('[ ' + trigger + ' ] params: ' + JSON.stringify(args));
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// ── QI — dev-mode query instrumentation ──────────────────────────
|
|
350
|
+
var _devLog = null, _queryEntry = null;
|
|
351
|
+
// #INS10 — capture during a prod instrumentation window too (not just dev mode).
|
|
352
|
+
if (envIsDev || (process.gina && process.gina._inspectorWindowUntil > Date.now())) {
|
|
353
|
+
var _alsStore = process.gina && process.gina._queryALS
|
|
354
|
+
? process.gina._queryALS.getStore() : null;
|
|
355
|
+
_devLog = _alsStore ? _alsStore._devQueryLog : null;
|
|
356
|
+
if (_devLog) {
|
|
357
|
+
// #QI1 — resolve indexes from _knownIndexes map
|
|
358
|
+
// #QI Phase C — annotate per-index column coverage vs the WHERE filter
|
|
359
|
+
var _indexes = null;
|
|
360
|
+
// #QI Phase C.3 - emit table + whereColumns even without indexes.sql
|
|
361
|
+
var _tbl = sqlParser.extractTargetTable(queryString);
|
|
362
|
+
var _whereColumns = sqlParser.extractWhereColumns(queryString);
|
|
363
|
+
if (_knownIndexes !== null) {
|
|
364
|
+
var _tblIdx = (_tbl && _knownIndexes[_tbl]) ? _knownIndexes[_tbl] : [];
|
|
365
|
+
var _cov = sqlParser.annotateCoverage(_tblIdx, queryString);
|
|
366
|
+
_indexes = _cov.indexes;
|
|
367
|
+
_whereColumns = _cov.whereColumns;
|
|
368
|
+
}
|
|
369
|
+
_queryEntry = {
|
|
370
|
+
type : 'DUCKDB',
|
|
371
|
+
trigger : entityName.toLowerCase() + '#' + name,
|
|
372
|
+
statement : String(queryString),
|
|
373
|
+
params : args.length > 0 ? args.slice() : [],
|
|
374
|
+
durationMs : 0,
|
|
375
|
+
resultCount : 0,
|
|
376
|
+
resultSize : 0,
|
|
377
|
+
indexes : _indexes,
|
|
378
|
+
whereColumns: _whereColumns,
|
|
379
|
+
table : _tbl || null,
|
|
380
|
+
error : null,
|
|
381
|
+
source : source || '',
|
|
382
|
+
origin : infos.bundle,
|
|
383
|
+
connector : 'duckdb'
|
|
384
|
+
};
|
|
385
|
+
_queryEntry._startMs = Date.now();
|
|
386
|
+
_devLog.push(_queryEntry);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
// ── Option B — native Promise with .onComplete() shim ─────────────
|
|
391
|
+
//
|
|
392
|
+
// @duckdb/node-api is natively async (Promise-based) — no
|
|
393
|
+
// setTimeout(0) needed. The Promise resolves inside the driver's
|
|
394
|
+
// own then-chain, giving callers the same timing guarantees as the
|
|
395
|
+
// mysql / postgresql connectors.
|
|
396
|
+
// ─────────────────────────────────────────────────────────────────
|
|
397
|
+
if (_mainCallback === null) {
|
|
398
|
+
var _resolve, _reject, _internalData;
|
|
399
|
+
|
|
400
|
+
var _promise = new Promise(function(resolve, reject) {
|
|
401
|
+
_resolve = resolve;
|
|
402
|
+
_reject = reject;
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
_promise.onComplete = function(cb) {
|
|
406
|
+
_promise.then(
|
|
407
|
+
function() { cb(null, _internalData); },
|
|
408
|
+
function(err) { cb(err); }
|
|
409
|
+
);
|
|
410
|
+
return _promise;
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
var _driverCall = isRowReturning
|
|
414
|
+
? conn.runAndReadAll(queryString, args)
|
|
415
|
+
: conn.run(queryString, args);
|
|
416
|
+
|
|
417
|
+
_driverCall.then(
|
|
418
|
+
function(result) {
|
|
419
|
+
if (_queryEntry) {
|
|
420
|
+
_queryEntry.durationMs = Date.now() - _queryEntry._startMs;
|
|
421
|
+
// _startMs is kept for the Flow tab timeline (#FI)
|
|
422
|
+
}
|
|
423
|
+
var raw = coerce(result);
|
|
424
|
+
if (_queryEntry) {
|
|
425
|
+
_queryEntry.resultCount = raw ? (Array.isArray(raw) ? raw.length : 1) : 0;
|
|
426
|
+
try { _queryEntry.resultSize = raw ? JSON.stringify(raw).length : 0; } catch(_e) { _queryEntry.resultSize = 0; }
|
|
427
|
+
}
|
|
428
|
+
_internalData = raw;
|
|
429
|
+
_resolve(raw);
|
|
430
|
+
},
|
|
431
|
+
function(err) {
|
|
432
|
+
if (_queryEntry) {
|
|
433
|
+
_queryEntry.durationMs = Date.now() - _queryEntry._startMs;
|
|
434
|
+
_queryEntry.error = err.message || String(err);
|
|
435
|
+
}
|
|
436
|
+
err.message = '[ ' + source + ' ]\n' + err.message;
|
|
437
|
+
_reject(lib.connectorError.stamp(err));
|
|
438
|
+
}
|
|
439
|
+
);
|
|
440
|
+
|
|
441
|
+
return _promise;
|
|
442
|
+
|
|
443
|
+
} else {
|
|
444
|
+
// Direct callback path (util.promisify or explicit callback)
|
|
445
|
+
var _driverCall2 = isRowReturning
|
|
446
|
+
? conn.runAndReadAll(queryString, args)
|
|
447
|
+
: conn.run(queryString, args);
|
|
448
|
+
|
|
449
|
+
_driverCall2.then(
|
|
450
|
+
function(result) {
|
|
451
|
+
if (_queryEntry) {
|
|
452
|
+
_queryEntry.durationMs = Date.now() - _queryEntry._startMs;
|
|
453
|
+
}
|
|
454
|
+
var raw = coerce(result);
|
|
455
|
+
if (_queryEntry) {
|
|
456
|
+
_queryEntry.resultCount = raw ? (Array.isArray(raw) ? raw.length : 1) : 0;
|
|
457
|
+
try { _queryEntry.resultSize = raw ? JSON.stringify(raw).length : 0; } catch(_e) { _queryEntry.resultSize = 0; }
|
|
458
|
+
}
|
|
459
|
+
_mainCallback(null, raw);
|
|
460
|
+
},
|
|
461
|
+
function(err) {
|
|
462
|
+
if (_queryEntry) {
|
|
463
|
+
_queryEntry.durationMs = Date.now() - _queryEntry._startMs;
|
|
464
|
+
_queryEntry.error = err.message || String(err);
|
|
465
|
+
}
|
|
466
|
+
err.message = '[ ' + source + ' ]\n' + err.message;
|
|
467
|
+
_mainCallback(lib.connectorError.stamp(err));
|
|
468
|
+
}
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
};
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
return init(conn, infos);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
module.exports = Duckdb;
|
|
@@ -0,0 +1,125 @@
|
|
|
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 gina = require('../../../../core/gna');
|
|
12
|
+
var lib = gina.lib;
|
|
13
|
+
var console = lib.logger;
|
|
14
|
+
var inherits = lib.inherits;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* DuckDB connector — opens an embedded analytical (columnar / OLAP) database.
|
|
18
|
+
*
|
|
19
|
+
* `@duckdb/node-api` is loaded from the **project's** node_modules so the
|
|
20
|
+
* framework has zero hard dependency on it. Install it in your project:
|
|
21
|
+
* npm install @duckdb/node-api
|
|
22
|
+
*
|
|
23
|
+
* connectors.json entry:
|
|
24
|
+
* {
|
|
25
|
+
* "analytics": {
|
|
26
|
+
* "connector": "duckdb",
|
|
27
|
+
* "database": "analytics",
|
|
28
|
+
* "file": "/optional/absolute/path/to/analytics.duckdb"
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* `database` names the logical model directory (`models/<database>/entities/`).
|
|
33
|
+
* `file` is the actual DuckDB file path. Defaults to `~/.gina/{version}/{database}.duckdb`
|
|
34
|
+
* when absent. Use `':memory:'` for an ephemeral in-process database.
|
|
35
|
+
* `readOnly` opens the database in read-only mode (driver `access_mode: 'READ_ONLY'`) —
|
|
36
|
+
* writes are refused by the engine, and any number of read-only PROCESSES can share
|
|
37
|
+
* one file. DuckDB is single-writer across processes: while one process holds a file
|
|
38
|
+
* read-write, no other process can open it at all (not even read-only). Within one
|
|
39
|
+
* process, re-opening the same file is fine (merged-process bundles share cleanly).
|
|
40
|
+
*
|
|
41
|
+
* Unlike the SQLite connector (synchronous `node:sqlite`), the DuckDB driver is
|
|
42
|
+
* natively async — `onReady()` resolves after the instance + connection handshake.
|
|
43
|
+
*
|
|
44
|
+
* @class DuckdbConnector
|
|
45
|
+
* @constructor
|
|
46
|
+
* @param {object} conf - Connector config from connectors.json
|
|
47
|
+
* @param {string} conf.database - Logical database name (models/ directory)
|
|
48
|
+
* @param {string} [conf.file] - DuckDB file path (defaults to ~/.gina/{v}/{database}.duckdb; ':memory:' supported)
|
|
49
|
+
* @param {boolean} [conf.readOnly] - Open read-only (access_mode READ_ONLY; default false)
|
|
50
|
+
*/
|
|
51
|
+
function DuckdbConnector(conf) {
|
|
52
|
+
var _conn = null;
|
|
53
|
+
var _err = null;
|
|
54
|
+
var _initPromise = null;
|
|
55
|
+
|
|
56
|
+
var init = function(conf) {
|
|
57
|
+
var duckdb;
|
|
58
|
+
try {
|
|
59
|
+
var duckdbPath = _(getPath('project') + '/node_modules/@duckdb/node-api', true);
|
|
60
|
+
duckdb = require(duckdbPath);
|
|
61
|
+
} catch (e) {
|
|
62
|
+
_err = new Error(
|
|
63
|
+
'[DuckdbConnector] @duckdb/node-api is not installed in your project.\n'
|
|
64
|
+
+ 'Run: npm install @duckdb/node-api\n'
|
|
65
|
+
+ e.message
|
|
66
|
+
);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Resolve file path: conf.file > ~/.gina/{version}/{database}.duckdb
|
|
71
|
+
// ':memory:' passes through to the driver verbatim.
|
|
72
|
+
var dbFile = conf.file || _(getPath('gina').home + '/' + conf.database + '.duckdb', true);
|
|
73
|
+
|
|
74
|
+
// `create(path)` and `create(path, config)` are both valid driver forms;
|
|
75
|
+
// only pass a config object when an option is actually set.
|
|
76
|
+
var pending = (conf.readOnly)
|
|
77
|
+
? duckdb.DuckDBInstance.create(dbFile, { access_mode: 'READ_ONLY' })
|
|
78
|
+
: duckdb.DuckDBInstance.create(dbFile);
|
|
79
|
+
|
|
80
|
+
_initPromise = pending
|
|
81
|
+
.then(function(instance) {
|
|
82
|
+
return instance.connect();
|
|
83
|
+
})
|
|
84
|
+
.then(function(connection) {
|
|
85
|
+
_conn = connection;
|
|
86
|
+
// Expose metadata on the connection object for use by index.js.
|
|
87
|
+
_conn._file = dbFile;
|
|
88
|
+
_conn._name = conf.database;
|
|
89
|
+
console.debug('[DuckdbConnector] opened: ' + dbFile);
|
|
90
|
+
})
|
|
91
|
+
.catch(function(e) {
|
|
92
|
+
_err = new Error('[DuckdbConnector] Failed to open "' + dbFile + '": ' + e.message);
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Register a one-time ready callback. Async — resolves once the DuckDB
|
|
98
|
+
* instance + connection handshake completes. No ping query is needed:
|
|
99
|
+
* the database is embedded, so a successful open IS the connectivity proof
|
|
100
|
+
* (SQLite precedent).
|
|
101
|
+
*
|
|
102
|
+
* @param {function} fn - `fn(err, conn)` where `conn` is the DuckDBConnection.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* var connector = new DuckdbConnector({ database: 'analytics' });
|
|
106
|
+
* connector.onReady(function(err, conn) {
|
|
107
|
+
* if (err) return console.error(err.message);
|
|
108
|
+
* // conn is ready — conn._name === 'analytics'
|
|
109
|
+
* });
|
|
110
|
+
*/
|
|
111
|
+
this.onReady = function(fn) {
|
|
112
|
+
if (_err) return fn(_err, null);
|
|
113
|
+
|
|
114
|
+
_initPromise.then(function() {
|
|
115
|
+
if (_err) return fn(_err, null);
|
|
116
|
+
console.debug('[DuckdbConnector] connected to: ' + _conn._name);
|
|
117
|
+
fn(null, _conn);
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
init(conf);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
DuckdbConnector = inherits(DuckdbConnector, EventEmitter);
|
|
125
|
+
module.exports = DuckdbConnector;
|
|
@@ -205,7 +205,15 @@ function Mongodb(conn, infos) {
|
|
|
205
205
|
var name = arr[arr.length - 1].replace(/\.json$/i, '');
|
|
206
206
|
|
|
207
207
|
if (!entities[entityName]) return;
|
|
208
|
-
if (typeof entities[entityName].prototype[name] !== 'undefined')
|
|
208
|
+
if (typeof entities[entityName].prototype[name] !== 'undefined') {
|
|
209
|
+
// Own property = user code in the entity .js wins (designed intent).
|
|
210
|
+
// Inherited name = the file is silently shadowed (e.g. gina's
|
|
211
|
+
// Object.prototype count()) — warn so the skip is diagnosable (#B173).
|
|
212
|
+
if ( !Object.prototype.hasOwnProperty.call(entities[entityName].prototype, name) ) {
|
|
213
|
+
console.warn('[Mongodb] skipping pipeline method \'' + name + '\' (' + source + '): the name is inherited on the ' + entityName + ' prototype chain (EventEmitter, entity base API, or gina\'s Object.prototype helpers like count()) — calls would run the inherited member instead. Rename the file, e.g. \'' + name + 'Rows.json\'.');
|
|
214
|
+
}
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
209
217
|
|
|
210
218
|
var rawSource = fs.readFileSync(source).toString();
|
|
211
219
|
|
|
@@ -244,7 +244,15 @@ function Mysql(conn, infos) {
|
|
|
244
244
|
}
|
|
245
245
|
|
|
246
246
|
if (!entities[entityName]) return;
|
|
247
|
-
if (typeof entities[entityName].prototype[name] !== 'undefined')
|
|
247
|
+
if (typeof entities[entityName].prototype[name] !== 'undefined') {
|
|
248
|
+
// Own property = user code in the entity .js wins (designed intent).
|
|
249
|
+
// Inherited name = the file is silently shadowed (e.g. gina's
|
|
250
|
+
// Object.prototype count()) — warn so the skip is diagnosable (#B173).
|
|
251
|
+
if ( !Object.prototype.hasOwnProperty.call(entities[entityName].prototype, name) ) {
|
|
252
|
+
console.warn('[mysql] skipping query method \'' + name + '\' (' + source + '): the name is inherited on the ' + entityName + ' prototype chain (EventEmitter, entity base API, or gina\'s Object.prototype helpers like count()) — calls would run the inherited member instead. Rename the file, e.g. \'' + name + 'Rows.sql\'.');
|
|
253
|
+
}
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
248
256
|
|
|
249
257
|
// ── Parse the SQL file ────────────────────────────────────────────────
|
|
250
258
|
var rawSource = fs.readFileSync(source).toString();
|