gina 0.3.6 → 0.3.7-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/security.yml +6 -6
- package/.github/workflows/test.yml +17 -0
- package/AUTHORS +1 -1
- package/CHANGELOG.md +6 -6
- package/CONTRIBUTING.md +1 -1
- package/CONVENTIONS.md +52 -0
- package/GOVERNANCE.md +1 -1
- package/LICENSE +2 -0
- package/README.md +8 -6
- package/ROADMAP.md +4 -2
- package/bin/cli +13 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/AUTHORS +1 -1
- package/framework/{v0.3.6/lib/inherits → v0.3.7-alpha.2}/LICENSE +2 -0
- package/framework/v0.3.7-alpha.2/VERSION +1 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +46 -10
- package/framework/v0.3.7-alpha.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.3.7-alpha.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/index.html +4 -1
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +12 -2
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +341 -8
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/config.js +12 -2
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.js +90 -24
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.render-json.js +17 -1
- package/framework/v0.3.7-alpha.2/core/controller/controller.render-nunjucks.js +580 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.render-swig.js +31 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/gna.js +476 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/file/package.json +1 -1
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/intl/package.json +1 -1
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/validator/package.json +1 -1
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/server.isaac.js +70 -7
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/server.js +107 -9
- package/framework/v0.3.7-alpha.2/lib/cmd/bundle/arguments.json +17 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/bundle/help.txt +191 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/list.js +125 -4
- package/framework/v0.3.7-alpha.2/lib/cmd/bundle/mcp-start.js +551 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/bundle/mcp.js +460 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/openapi.js +12 -162
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/start.js +8 -1
- package/framework/v0.3.7-alpha.2/lib/cmd/connector/add.js +646 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/connector/arguments.json +20 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/connector/help.js +46 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/connector/help.txt +216 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/connector/list.js +624 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/connector/migrate.js +515 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/connector/remove.js +522 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/connector/rm.js +6 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/init.js +5 -1
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/gina.1.md +2 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/helper.js +6 -1
- package/framework/v0.3.7-alpha.2/lib/cmd/inspector/help.txt +62 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/inspector/open.js +149 -9
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/add.js +4 -1
- package/framework/v0.3.7-alpha.2/lib/cmd/service/help.js +46 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/service/help.txt +31 -0
- package/framework/v0.3.7-alpha.2/lib/cmd/service/list.js +230 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/index.js +24 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/inspector-redact/src/main.js +54 -15
- package/framework/v0.3.7-alpha.2/lib/mcp-dispatch/package.json +17 -0
- package/framework/v0.3.7-alpha.2/lib/mcp-dispatch/src/main.js +415 -0
- package/framework/v0.3.7-alpha.2/lib/mcp-http/package.json +17 -0
- package/framework/v0.3.7-alpha.2/lib/mcp-http/src/main.js +586 -0
- package/framework/v0.3.7-alpha.2/lib/mcp-server/package.json +17 -0
- package/framework/v0.3.7-alpha.2/lib/mcp-server/src/main.js +608 -0
- package/framework/v0.3.7-alpha.2/lib/nunjucks-resolver/package.json +17 -0
- package/framework/v0.3.7-alpha.2/lib/nunjucks-resolver/src/main.js +425 -0
- package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/proc.js +53 -2
- package/framework/v0.3.7-alpha.2/lib/routing-introspect/package.json +17 -0
- package/framework/v0.3.7-alpha.2/lib/routing-introspect/src/main.js +301 -0
- package/framework/v0.3.7-alpha.2/lib/swig-resolver/package.json +17 -0
- package/framework/v0.3.7-alpha.2/lib/swig-resolver/src/main.js +545 -0
- package/gna.js +34 -13
- package/llms.txt +119 -9
- package/package.json +6 -4
- package/resources/package.json.template +1 -1
- package/schema/connectors.json +5 -0
- package/schema/settings.json +48 -0
- package/script/check_changie_entries.js +247 -0
- package/script/{check_no_claude_leak.js → check_no_local_leak.js} +19 -9
- package/script/generate_gna_types.js +564 -0
- package/types/gna.d.ts +130 -4
- package/utils/helper.js +6 -3
- package/framework/v0.3.6/VERSION +0 -1
- package/framework/v0.3.6/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.3.6/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/v0.3.6/core/deps/swig-client/swig-2.0.0.min.js +0 -19
- package/framework/v0.3.6/core/deps/swig-client/swig.js +0 -5114
- package/framework/v0.3.6/lib/cmd/bundle/arguments.json +0 -10
- package/framework/v0.3.6/lib/cmd/bundle/help.txt +0 -107
- package/framework/v0.3.6/lib/cmd/inspector/help.txt +0 -28
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/html/static.html +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/connector.v2.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/content.encoding +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/optimist-0.6.1/LICENSE +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/optimist-0.6.1/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/optimist-0.6.1/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/optimist-0.6.1/readme.markdown +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/dev/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/currency.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/mime.types +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/model/entity.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/model/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/model/template/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/file/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/file/build.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/intl/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/intl/build.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/intl/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/router.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/server.express.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/status.codes +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/_gitignore +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/env.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/console.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/context.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/data/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/data/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/json/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/json/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/path.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/prototypes.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/task.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/text.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/archiver/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/archiver/build.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/archiver/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/async/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/async/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cache/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cache/build.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cache/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/collection/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/collection/build.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/collection/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/config.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cron/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cron/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/dist/2025-03-14_13-41-20_UTC.dat +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/dist/public_suffix_list.dat +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/dist/public_suffix_list.dat.br +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/dist/public_suffix_list.dat.gz +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/generator/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2/lib/inherits}/LICENSE +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/inherits/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/inherits/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/math/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/merge/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/merge/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/model.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/routing/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/routing/build.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/routing/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/session-store.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/shell.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/state.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/url/README.md +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/url/index.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/url/routing.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/uuid/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/validator.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/watcher/package.json +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.3.6 → v0.3.7-alpha.2}/package.json +0 -0
|
@@ -100,6 +100,8 @@
|
|
|
100
100
|
var CUSTOM_ORDER_KEY = '__gina_inspector_tab_layout_custom';
|
|
101
101
|
/** @constant {string} localStorage key — hidden tabs in custom layout (JSON array of tab names) */
|
|
102
102
|
var HIDDEN_TABS_KEY = '__gina_inspector_tab_layout_hidden';
|
|
103
|
+
/** @constant {string} localStorage key — Reveal toggle state for Data tab (#R7 reveal) */
|
|
104
|
+
var REVEAL_STORAGE_KEY = '__gina_inspector_reveal';
|
|
103
105
|
|
|
104
106
|
/**
|
|
105
107
|
* Tab order definitions for each layout preset.
|
|
@@ -150,6 +152,10 @@
|
|
|
150
152
|
var logs = [];
|
|
151
153
|
/** @type {number} Read offset into `source.__ginaLogs` for client-side polling */
|
|
152
154
|
var logsOff = 0;
|
|
155
|
+
/** @type {?Array} Last-seen `source.__ginaLogs` array reference — used to detect
|
|
156
|
+
* opener navigation, which replaces the array with a fresh empty one. When the
|
|
157
|
+
* reference changes, {@link logsOff} must be reset to 0. */
|
|
158
|
+
var _lastLogsRef = null;
|
|
153
159
|
/** @type {boolean} When true, new log entries are not appended */
|
|
154
160
|
var paused = false;
|
|
155
161
|
/** @type {string} JSON.stringify of last processed ginaData — for change detection */
|
|
@@ -164,6 +170,15 @@
|
|
|
164
170
|
var autoExpand = false;
|
|
165
171
|
/** @type {?number} Timeout ID for the coalesced log render timer */
|
|
166
172
|
var _renderTimer = null;
|
|
173
|
+
/** @type {boolean} When true, the Data tab uses the unredacted snapshot fetched from `/_gina/reveal` (#R7 reveal) */
|
|
174
|
+
var _revealActive = false;
|
|
175
|
+
/** @type {?Object} Cached unredacted Inspector payload from `/_gina/reveal` (local scope only) */
|
|
176
|
+
var _revealedData = null;
|
|
177
|
+
/** @type {?EventSource} Passive `/_gina/agent` subscription used alongside opener
|
|
178
|
+
* polling to receive pushed data/log frames from SPA (pushState/XHR) navigations
|
|
179
|
+
* that do not rewrite `window.__ginaData`. Null when no opener is available
|
|
180
|
+
* or when agent mode (`?target=`) is the primary source. */
|
|
181
|
+
var _passiveAgentEs = null;
|
|
167
182
|
|
|
168
183
|
// ── Log row selection ──────────────────────────────────────────────────
|
|
169
184
|
/** @type {Set<number>} IDs of currently selected log rows */
|
|
@@ -1666,8 +1681,12 @@
|
|
|
1666
1681
|
|
|
1667
1682
|
captureFoldState(name);
|
|
1668
1683
|
|
|
1669
|
-
|
|
1670
|
-
|
|
1684
|
+
// #R7 reveal — when active, swap in the unredacted payload fetched from
|
|
1685
|
+
// /_gina/reveal. Only Data/View/Forms/Query/Flow render from `u`/`g`,
|
|
1686
|
+
// so a single source swap covers every visible field.
|
|
1687
|
+
var src = (_revealActive && _revealedData) ? _revealedData : ginaData;
|
|
1688
|
+
var u = src.user || {};
|
|
1689
|
+
var g = src.gina || {};
|
|
1671
1690
|
var content = '';
|
|
1672
1691
|
var hasXhr = typeof u['data-xhr'] !== 'undefined';
|
|
1673
1692
|
|
|
@@ -1731,7 +1750,8 @@
|
|
|
1731
1750
|
*/
|
|
1732
1751
|
function renderRaw(treeEl) {
|
|
1733
1752
|
if (!ginaData) { treeEl.innerHTML = '<span class="bm-hint">No data to display</span>'; return; }
|
|
1734
|
-
var
|
|
1753
|
+
var src = (_revealActive && _revealedData) ? _revealedData : ginaData;
|
|
1754
|
+
var u = src.user || {};
|
|
1735
1755
|
var data = u['data-xhr'] || u.data;
|
|
1736
1756
|
treeEl.innerHTML = '<pre class="bm-raw-view">' + escHtml(JSON.stringify(data, null, 2)) + '</pre>';
|
|
1737
1757
|
}
|
|
@@ -2866,6 +2886,108 @@
|
|
|
2866
2886
|
captureFoldState('data');
|
|
2867
2887
|
}
|
|
2868
2888
|
|
|
2889
|
+
// ── Reveal toggle (Data tab only — local scope only) ──────────────────
|
|
2890
|
+
|
|
2891
|
+
/**
|
|
2892
|
+
* Show or hide the Reveal button based on the current scope. The button is
|
|
2893
|
+
* only available when the source bundle is running in `local` scope — the
|
|
2894
|
+
* server-side endpoint enforces the same gate, this is just the UI mirror.
|
|
2895
|
+
* Called after every data poll since scope can change when switching
|
|
2896
|
+
* sources via the standalone Inspector `?target=` mode.
|
|
2897
|
+
* @inner
|
|
2898
|
+
*/
|
|
2899
|
+
function updateRevealVisibility() {
|
|
2900
|
+
var btn = qs('#bm-reveal');
|
|
2901
|
+
if (!btn) return;
|
|
2902
|
+
var scope = (ginaData && ginaData.gina && ginaData.gina.environment)
|
|
2903
|
+
? ginaData.gina.environment.scope : null;
|
|
2904
|
+
if (scope === 'local') {
|
|
2905
|
+
btn.classList.remove('bm-hidden');
|
|
2906
|
+
} else {
|
|
2907
|
+
btn.classList.add('bm-hidden');
|
|
2908
|
+
// If we previously revealed in local and the source flipped to a
|
|
2909
|
+
// non-local scope, drop the cache and visual state immediately.
|
|
2910
|
+
if (_revealActive) {
|
|
2911
|
+
_revealActive = false;
|
|
2912
|
+
_revealedData = null;
|
|
2913
|
+
btn.classList.remove('active');
|
|
2914
|
+
try { localStorage.removeItem(REVEAL_STORAGE_KEY); } catch (e) {}
|
|
2915
|
+
}
|
|
2916
|
+
}
|
|
2917
|
+
}
|
|
2918
|
+
|
|
2919
|
+
/**
|
|
2920
|
+
* Toggle the Data tab reveal state. When activated, fetches the unredacted
|
|
2921
|
+
* payload from `/_gina/reveal` and re-renders the Data tab. The endpoint
|
|
2922
|
+
* is scope-gated server-side — a 403 means the bundle is no longer in
|
|
2923
|
+
* local scope and the toggle is forced off.
|
|
2924
|
+
* @inner
|
|
2925
|
+
*/
|
|
2926
|
+
function toggleReveal() {
|
|
2927
|
+
var btn = qs('#bm-reveal');
|
|
2928
|
+
if (!btn) return;
|
|
2929
|
+
if (_revealActive) {
|
|
2930
|
+
_revealActive = false;
|
|
2931
|
+
_revealedData = null;
|
|
2932
|
+
btn.classList.remove('active');
|
|
2933
|
+
try { localStorage.removeItem(REVEAL_STORAGE_KEY); } catch (e) {}
|
|
2934
|
+
renderTab('data');
|
|
2935
|
+
return;
|
|
2936
|
+
}
|
|
2937
|
+
// Resolve the reveal URL. Three modes:
|
|
2938
|
+
// 1. Standalone (`?target=<bundle_url>`) — route to the explicit target.
|
|
2939
|
+
// 2. Opener (same-origin) — use the opener's pathname as the prefix so
|
|
2940
|
+
// the request routes to the bundle that rendered the current page.
|
|
2941
|
+
// Critical in proxy-routed multi-bundle setups where bare
|
|
2942
|
+
// `/_gina/reveal` hits the proxy's default bundle instead of the
|
|
2943
|
+
// one that produced the snapshot.
|
|
2944
|
+
// 3. Fallback — strip `_gina/inspector` from the Inspector's own
|
|
2945
|
+
// pathname (same approach as tryServerLogs).
|
|
2946
|
+
var base = '';
|
|
2947
|
+
try {
|
|
2948
|
+
var params = new URLSearchParams(window.location.search);
|
|
2949
|
+
var target = (params.get('target') || '').replace(/\/+$/, '');
|
|
2950
|
+
if (target) {
|
|
2951
|
+
base = target;
|
|
2952
|
+
} else if (window.opener && window.opener.location) {
|
|
2953
|
+
base = (window.opener.location.pathname || '').replace(/\/+$/, '');
|
|
2954
|
+
} else {
|
|
2955
|
+
base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
|
|
2956
|
+
}
|
|
2957
|
+
} catch (e) {
|
|
2958
|
+
base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
|
|
2959
|
+
}
|
|
2960
|
+
var url = base + '/_gina/reveal';
|
|
2961
|
+
var xhr = new XMLHttpRequest();
|
|
2962
|
+
try {
|
|
2963
|
+
xhr.open('GET', url, true);
|
|
2964
|
+
xhr.onreadystatechange = function () {
|
|
2965
|
+
if (xhr.readyState !== 4) return;
|
|
2966
|
+
if (xhr.status === 200) {
|
|
2967
|
+
try {
|
|
2968
|
+
_revealedData = JSON.parse(xhr.responseText);
|
|
2969
|
+
_revealActive = true;
|
|
2970
|
+
btn.classList.add('active');
|
|
2971
|
+
try { localStorage.setItem(REVEAL_STORAGE_KEY, '1'); } catch (e) {}
|
|
2972
|
+
renderTab('data');
|
|
2973
|
+
} catch (e) {
|
|
2974
|
+
_revealedData = null;
|
|
2975
|
+
_revealActive = false;
|
|
2976
|
+
btn.classList.remove('active');
|
|
2977
|
+
}
|
|
2978
|
+
} else if (xhr.status === 403) {
|
|
2979
|
+
// Scope flipped server-side — sync the UI.
|
|
2980
|
+
btn.classList.add('bm-hidden');
|
|
2981
|
+
btn.classList.remove('active');
|
|
2982
|
+
_revealActive = false;
|
|
2983
|
+
_revealedData = null;
|
|
2984
|
+
try { localStorage.removeItem(REVEAL_STORAGE_KEY); } catch (e) {}
|
|
2985
|
+
}
|
|
2986
|
+
};
|
|
2987
|
+
xhr.send();
|
|
2988
|
+
} catch (e) { /* network error — leave state untouched */ }
|
|
2989
|
+
}
|
|
2990
|
+
|
|
2869
2991
|
// ── Download modal ────────────────────────────────────────────────────
|
|
2870
2992
|
|
|
2871
2993
|
/**
|
|
@@ -2875,7 +2997,8 @@
|
|
|
2875
2997
|
*/
|
|
2876
2998
|
function openDownloadModal() {
|
|
2877
2999
|
if (!ginaData || !ginaData.user) return;
|
|
2878
|
-
var
|
|
3000
|
+
var src = (_revealActive && _revealedData) ? _revealedData : ginaData;
|
|
3001
|
+
var u = src.user || {};
|
|
2879
3002
|
var dataObj = u['data-xhr'] || u.data;
|
|
2880
3003
|
if (!dataObj || typeof dataObj !== 'object') return;
|
|
2881
3004
|
|
|
@@ -2902,7 +3025,8 @@
|
|
|
2902
3025
|
*/
|
|
2903
3026
|
function doDownload() {
|
|
2904
3027
|
if (!ginaData || !ginaData.user) return;
|
|
2905
|
-
var
|
|
3028
|
+
var src = (_revealActive && _revealedData) ? _revealedData : ginaData;
|
|
3029
|
+
var u = src.user || {};
|
|
2906
3030
|
var dataObj = u['data-xhr'] || u.data;
|
|
2907
3031
|
var checks = qsa('#bm-dl-checks input:checked');
|
|
2908
3032
|
var result = {};
|
|
@@ -3080,6 +3204,7 @@
|
|
|
3080
3204
|
}
|
|
3081
3205
|
qs('#bm-no-source').classList.add('hidden');
|
|
3082
3206
|
renderEnvironmentInfo();
|
|
3207
|
+
updateRevealVisibility();
|
|
3083
3208
|
var tab = activeTab();
|
|
3084
3209
|
if (tab !== 'logs') renderTab(tab);
|
|
3085
3210
|
// Always update query tab badge regardless of active tab
|
|
@@ -3214,7 +3339,16 @@
|
|
|
3214
3339
|
try {
|
|
3215
3340
|
if (source === 'localStorage' || !source) return;
|
|
3216
3341
|
var src = source.__ginaLogs;
|
|
3217
|
-
if (!src || !Array.isArray(src)
|
|
3342
|
+
if (!src || !Array.isArray(src)) return;
|
|
3343
|
+
// Detect opener navigation: the new page installs a fresh __ginaLogs
|
|
3344
|
+
// array, so the array identity differs from the one we last polled
|
|
3345
|
+
// (or its length is smaller than our offset). Reset the offset so
|
|
3346
|
+
// new entries on the new page are picked up.
|
|
3347
|
+
if (src !== _lastLogsRef || src.length < logsOff) {
|
|
3348
|
+
_lastLogsRef = src;
|
|
3349
|
+
logsOff = 0;
|
|
3350
|
+
}
|
|
3351
|
+
if (src.length <= logsOff) return;
|
|
3218
3352
|
} catch (e) { return; }
|
|
3219
3353
|
|
|
3220
3354
|
var fresh = src.slice(logsOff);
|
|
@@ -3536,6 +3670,7 @@
|
|
|
3536
3670
|
document.title = 'Inspector — ' + (env.bundle || '?') + '@' + (env.env || '?');
|
|
3537
3671
|
qs('#bm-no-source').classList.add('hidden');
|
|
3538
3672
|
renderEnvironmentInfo();
|
|
3673
|
+
updateRevealVisibility();
|
|
3539
3674
|
var tab = activeTab();
|
|
3540
3675
|
if (tab !== 'logs') renderTab(tab);
|
|
3541
3676
|
if (tab !== 'query') {
|
|
@@ -3587,6 +3722,125 @@
|
|
|
3587
3722
|
return true;
|
|
3588
3723
|
}
|
|
3589
3724
|
|
|
3725
|
+
// ── Passive /_gina/agent subscription (opener mode) ──────────────────
|
|
3726
|
+
|
|
3727
|
+
/**
|
|
3728
|
+
* Open a parallel `/_gina/agent` SSE subscription alongside opener polling.
|
|
3729
|
+
*
|
|
3730
|
+
* Opener polling alone misses SPA (pushState) and XHR navigations because
|
|
3731
|
+
* those paths do not rewrite `window.__ginaData` — only full HTML renders
|
|
3732
|
+
* do. `render-json.js` however emits `process.emit('inspector#data', ...)`
|
|
3733
|
+
* on every JSON render when `process.gina._inspectorActive` is true, and
|
|
3734
|
+
* `/_gina/agent` forwards those emits as `event: data` SSE frames.
|
|
3735
|
+
*
|
|
3736
|
+
* This function subscribes to that same stream in the background while
|
|
3737
|
+
* `source` stays set to the opener window. The data handler updates the
|
|
3738
|
+
* Inspector UI but does NOT change `source`, so opener-driven behaviour
|
|
3739
|
+
* (reveal URL derivation, pollData fallback, log polling) is unchanged.
|
|
3740
|
+
*
|
|
3741
|
+
* Server-side logs arrive on this stream too (`event: log`), so when
|
|
3742
|
+
* passive mode succeeds `tryServerLogs()` is skipped to avoid duplicates.
|
|
3743
|
+
*
|
|
3744
|
+
* @inner
|
|
3745
|
+
* @returns {boolean} `true` when a subscription was opened, `false` when
|
|
3746
|
+
* the environment is unsupported or the URL cannot be derived.
|
|
3747
|
+
*/
|
|
3748
|
+
function tryAgentPassive() {
|
|
3749
|
+
if (typeof EventSource === 'undefined') return false;
|
|
3750
|
+
// Agent mode already covers data + logs via the primary tryAgent stream.
|
|
3751
|
+
if (source === 'agent') return false;
|
|
3752
|
+
|
|
3753
|
+
// Derive the bundle URL the same way toggleReveal() does: prefer the
|
|
3754
|
+
// opener's pathname so multi-bundle proxy setups route to the bundle
|
|
3755
|
+
// that rendered the current page, falling back to stripping the
|
|
3756
|
+
// inspector path.
|
|
3757
|
+
var base = '';
|
|
3758
|
+
try {
|
|
3759
|
+
if (window.opener && window.opener.location) {
|
|
3760
|
+
base = (window.opener.location.pathname || '').replace(/\/+$/, '');
|
|
3761
|
+
} else {
|
|
3762
|
+
base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
|
|
3763
|
+
}
|
|
3764
|
+
} catch (e) {
|
|
3765
|
+
base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
|
|
3766
|
+
}
|
|
3767
|
+
var url = base + '/_gina/agent';
|
|
3768
|
+
|
|
3769
|
+
try {
|
|
3770
|
+
var es = new EventSource(url);
|
|
3771
|
+
_passiveAgentEs = es;
|
|
3772
|
+
|
|
3773
|
+
es.addEventListener('data', function (ev) {
|
|
3774
|
+
try {
|
|
3775
|
+
var gd = JSON.parse(ev.data);
|
|
3776
|
+
if (!gd) return;
|
|
3777
|
+
var str = JSON.stringify(gd);
|
|
3778
|
+
if (str === lastGdStr) return;
|
|
3779
|
+
showLoader();
|
|
3780
|
+
lastGdStr = str;
|
|
3781
|
+
ginaData = gd;
|
|
3782
|
+
var env = (gd.user && gd.user.environment) || {};
|
|
3783
|
+
qs('#bm-label').textContent = (env.bundle || '?') + '@' + (env.env || '?');
|
|
3784
|
+
qs('#bm-dot').className = 'bm-dot ok';
|
|
3785
|
+
try {
|
|
3786
|
+
var _pageUrl = (window.opener && window.opener.location)
|
|
3787
|
+
? window.opener.location.pathname + window.opener.location.search
|
|
3788
|
+
: null;
|
|
3789
|
+
document.title = _pageUrl
|
|
3790
|
+
? 'Inspector — ' + _pageUrl
|
|
3791
|
+
: 'Inspector — ' + (env.bundle || '?') + '@' + (env.env || '?');
|
|
3792
|
+
} catch (e) {
|
|
3793
|
+
document.title = 'Inspector — ' + (env.bundle || '?') + '@' + (env.env || '?');
|
|
3794
|
+
}
|
|
3795
|
+
qs('#bm-no-source').classList.add('hidden');
|
|
3796
|
+
renderEnvironmentInfo();
|
|
3797
|
+
updateRevealVisibility();
|
|
3798
|
+
var tab = activeTab();
|
|
3799
|
+
if (tab !== 'logs') renderTab(tab);
|
|
3800
|
+
if (tab !== 'query') {
|
|
3801
|
+
var _u = gd.user || {};
|
|
3802
|
+
var _hasXhr = typeof _u['data-xhr'] !== 'undefined';
|
|
3803
|
+
var _qd = _hasXhr && _u['data-xhr'] && _u['data-xhr'].queries
|
|
3804
|
+
? _u['data-xhr'].queries : _u.queries;
|
|
3805
|
+
updateQueryToolbar(_qd || null);
|
|
3806
|
+
}
|
|
3807
|
+
if (tab !== 'view') {
|
|
3808
|
+
var _u2 = gd.user || {};
|
|
3809
|
+
var _isXhr2 = typeof _u2['view-xhr'] !== 'undefined';
|
|
3810
|
+
var _vm = getPageMetrics(_isXhr2);
|
|
3811
|
+
var _dxhr = typeof _u2['data-xhr'] !== 'undefined';
|
|
3812
|
+
var _vq = _dxhr && _u2['data-xhr'] && _u2['data-xhr'].queries
|
|
3813
|
+
? _u2['data-xhr'].queries : _u2.queries;
|
|
3814
|
+
updateViewDot(checkPerfAnomalies(_vm, _vq || []));
|
|
3815
|
+
}
|
|
3816
|
+
hideLoader();
|
|
3817
|
+
} catch (e) {}
|
|
3818
|
+
});
|
|
3819
|
+
|
|
3820
|
+
es.addEventListener('log', function (ev) {
|
|
3821
|
+
if (paused) return;
|
|
3822
|
+
try {
|
|
3823
|
+
var entry = JSON.parse(ev.data);
|
|
3824
|
+
entry._id = ++_logIdCounter;
|
|
3825
|
+
logs.push(entry);
|
|
3826
|
+
if (logs.length > MAX_LOG_ENTRIES) logs.shift();
|
|
3827
|
+
updateLogDot([entry]);
|
|
3828
|
+
scheduleRender();
|
|
3829
|
+
} catch (e) {}
|
|
3830
|
+
});
|
|
3831
|
+
|
|
3832
|
+
es.onerror = function () {
|
|
3833
|
+
// EventSource reconnects automatically. Opener polling is the
|
|
3834
|
+
// primary source here, so no UI state change is needed.
|
|
3835
|
+
};
|
|
3836
|
+
} catch (e) {
|
|
3837
|
+
_passiveAgentEs = null;
|
|
3838
|
+
return false;
|
|
3839
|
+
}
|
|
3840
|
+
|
|
3841
|
+
return true;
|
|
3842
|
+
}
|
|
3843
|
+
|
|
3590
3844
|
// ── Copy to clipboard ──────────────────────────────────────────────────
|
|
3591
3845
|
|
|
3592
3846
|
/**
|
|
@@ -4117,6 +4371,23 @@
|
|
|
4117
4371
|
}
|
|
4118
4372
|
var dlBtn = qs('#bm-download');
|
|
4119
4373
|
if (dlBtn) dlBtn.addEventListener('click', openDownloadModal);
|
|
4374
|
+
var revealBtn = qs('#bm-reveal');
|
|
4375
|
+
if (revealBtn) {
|
|
4376
|
+
revealBtn.addEventListener('click', toggleReveal);
|
|
4377
|
+
// Restore the previously-saved Reveal state on init: if it was on
|
|
4378
|
+
// and the source is still local, fetch the unredacted snapshot.
|
|
4379
|
+
try {
|
|
4380
|
+
if (localStorage.getItem(REVEAL_STORAGE_KEY) === '1') {
|
|
4381
|
+
// Defer one tick so ginaData is populated by the first poll.
|
|
4382
|
+
setTimeout(function () {
|
|
4383
|
+
var scope = (ginaData && ginaData.gina && ginaData.gina.environment)
|
|
4384
|
+
? ginaData.gina.environment.scope : null;
|
|
4385
|
+
if (scope === 'local') toggleReveal();
|
|
4386
|
+
else { try { localStorage.removeItem(REVEAL_STORAGE_KEY); } catch (e) {} }
|
|
4387
|
+
}, 250);
|
|
4388
|
+
}
|
|
4389
|
+
} catch (e) {}
|
|
4390
|
+
}
|
|
4120
4391
|
var dlCancel = qs('#bm-dl-cancel');
|
|
4121
4392
|
if (dlCancel) dlCancel.addEventListener('click', function () { qs('#bm-dl-modal').classList.add('hidden'); });
|
|
4122
4393
|
var dlConfirm = qs('#bm-dl-confirm');
|
|
@@ -4432,12 +4703,68 @@
|
|
|
4432
4703
|
setupScrollToTop();
|
|
4433
4704
|
|
|
4434
4705
|
// ── Refresh button — force immediate re-poll ────────────────────────
|
|
4706
|
+
// Click = soft refresh (data, live indexes, reveal snapshot,
|
|
4707
|
+
// passive agent stream).
|
|
4708
|
+
// Shift+click = also reload the inspected page via window.opener.
|
|
4435
4709
|
var refreshBtn = qs('#bm-refresh');
|
|
4436
4710
|
if (refreshBtn) {
|
|
4437
|
-
refreshBtn.addEventListener('click', function () {
|
|
4711
|
+
refreshBtn.addEventListener('click', function (ev) {
|
|
4438
4712
|
lastGdStr = '';
|
|
4439
4713
|
refreshBtn.classList.add('spinning');
|
|
4440
4714
|
pollData();
|
|
4715
|
+
|
|
4716
|
+
// Bypass the cache guard in fetchLiveIndexes().
|
|
4717
|
+
_liveIndexes = null;
|
|
4718
|
+
_liveIndexesFetching = false;
|
|
4719
|
+
fetchLiveIndexes();
|
|
4720
|
+
|
|
4721
|
+
if (_revealActive) {
|
|
4722
|
+
var base = '';
|
|
4723
|
+
try {
|
|
4724
|
+
var params = new URLSearchParams(window.location.search);
|
|
4725
|
+
var target = (params.get('target') || '').replace(/\/+$/, '');
|
|
4726
|
+
if (target) {
|
|
4727
|
+
base = target;
|
|
4728
|
+
} else if (window.opener && window.opener.location) {
|
|
4729
|
+
base = (window.opener.location.pathname || '').replace(/\/+$/, '');
|
|
4730
|
+
} else {
|
|
4731
|
+
base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
|
|
4732
|
+
}
|
|
4733
|
+
} catch (e) {
|
|
4734
|
+
base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
|
|
4735
|
+
}
|
|
4736
|
+
try {
|
|
4737
|
+
var xhr = new XMLHttpRequest();
|
|
4738
|
+
xhr.open('GET', base + '/_gina/reveal', true);
|
|
4739
|
+
xhr.onreadystatechange = function () {
|
|
4740
|
+
if (xhr.readyState !== 4) return;
|
|
4741
|
+
if (xhr.status === 200) {
|
|
4742
|
+
try {
|
|
4743
|
+
_revealedData = JSON.parse(xhr.responseText);
|
|
4744
|
+
renderTab('data');
|
|
4745
|
+
} catch (e) {}
|
|
4746
|
+
}
|
|
4747
|
+
};
|
|
4748
|
+
xhr.send();
|
|
4749
|
+
} catch (e) {}
|
|
4750
|
+
}
|
|
4751
|
+
|
|
4752
|
+
// Reopen the passive /_gina/agent stream if it has closed.
|
|
4753
|
+
if (source !== 'agent'
|
|
4754
|
+
&& (!_passiveAgentEs || _passiveAgentEs.readyState === 2)) {
|
|
4755
|
+
try { if (_passiveAgentEs) _passiveAgentEs.close(); } catch (e) {}
|
|
4756
|
+
_passiveAgentEs = null;
|
|
4757
|
+
tryAgentPassive();
|
|
4758
|
+
}
|
|
4759
|
+
|
|
4760
|
+
if (ev.shiftKey) {
|
|
4761
|
+
try {
|
|
4762
|
+
if (window.opener && !window.opener.closed && window.opener.location) {
|
|
4763
|
+
window.opener.location.reload();
|
|
4764
|
+
}
|
|
4765
|
+
} catch (e) {}
|
|
4766
|
+
}
|
|
4767
|
+
|
|
4441
4768
|
refreshBtn.addEventListener('animationend', function onEnd() {
|
|
4442
4769
|
refreshBtn.classList.remove('spinning');
|
|
4443
4770
|
refreshBtn.removeEventListener('animationend', onEnd);
|
|
@@ -4490,7 +4817,13 @@
|
|
|
4490
4817
|
}
|
|
4491
4818
|
|
|
4492
4819
|
tryEngineIO();
|
|
4493
|
-
|
|
4820
|
+
// Subscribe to /_gina/agent in parallel with opener polling. Opener
|
|
4821
|
+
// polling alone misses SPA (pushState) and XHR renders because
|
|
4822
|
+
// those paths never rewrite window.__ginaData. The passive agent
|
|
4823
|
+
// stream delivers pushed data + log frames from those renders.
|
|
4824
|
+
// It also supersedes tryServerLogs() (same `event: log` frames).
|
|
4825
|
+
var _passiveAgentActive = tryAgentPassive();
|
|
4826
|
+
if (!_passiveAgentActive) tryServerLogs();
|
|
4494
4827
|
}
|
|
4495
4828
|
|
|
4496
4829
|
// ── Persist window geometry on resize/move ──────────────────────────
|
|
@@ -810,7 +810,13 @@ function Config(opt, contextResetNeeded) {
|
|
|
810
810
|
// loading env if exists
|
|
811
811
|
if ( self.isCacheless() ) {
|
|
812
812
|
if (exists) {
|
|
813
|
-
|
|
813
|
+
try {
|
|
814
|
+
delete require.cache[require.resolve(_(filename, true))];
|
|
815
|
+
} catch (_cacheErr) {
|
|
816
|
+
// requireJSON reads via fs.readFileSync and evicts its own cache.
|
|
817
|
+
// Filesystem races (e.g. OrbStack bind mount) can make require.resolve()
|
|
818
|
+
// throw EINVAL on readlink for freshly re-symlinked bundles dirs — non-fatal.
|
|
819
|
+
}
|
|
814
820
|
}
|
|
815
821
|
}
|
|
816
822
|
// if (new RegExp('\.'+ env +'\.json$').test(fName)) {
|
|
@@ -839,7 +845,11 @@ function Config(opt, contextResetNeeded) {
|
|
|
839
845
|
try {
|
|
840
846
|
|
|
841
847
|
if (isCacheless && exists) {
|
|
842
|
-
|
|
848
|
+
try {
|
|
849
|
+
delete require.cache[require.resolve(_(filename, true))];
|
|
850
|
+
} catch (_cacheErr) {
|
|
851
|
+
// See note above — EINVAL/ENOENT on require.resolve from symlink races is non-fatal.
|
|
852
|
+
}
|
|
843
853
|
}
|
|
844
854
|
|
|
845
855
|
if (exists) {
|
|
@@ -53,7 +53,13 @@ var routingLib = lib.routing;
|
|
|
53
53
|
// removed: Domain import + domainLib instantiation — domainLib was never used in active code
|
|
54
54
|
// (only usage at line 508 is commented out); re-instantiating Domain on every dev-mode request
|
|
55
55
|
// via refreshCoreDependencies() caused [DOMAIN] PSL Loaded ×2 noise per request
|
|
56
|
-
|
|
56
|
+
// Swig is resolved through lib.swigResolver (process-cached on
|
|
57
|
+
// process.gina._swig). Server.js's initSwigEngine() populates the cache
|
|
58
|
+
// during bundle startup; controller.js is re-required on every request
|
|
59
|
+
// in dev mode via refreshCoreDependencies(), so this getter sees the
|
|
60
|
+
// already-loaded instance without re-running the resolver. Falls back to
|
|
61
|
+
// require('@rhinostone/swig') when no bundle has loaded yet (tests, etc).
|
|
62
|
+
var swig = lib.swigResolver.get();
|
|
57
63
|
const { type } = require('node:os');
|
|
58
64
|
var SwigFilters = lib.SwigFilters;
|
|
59
65
|
var statusCodes = requireJSON( _( getPath('gina').core + '/status.codes') );
|
|
@@ -1037,12 +1043,38 @@ function SuperController(options) {
|
|
|
1037
1043
|
if (_hints) self.setEarlyHints(_hints);
|
|
1038
1044
|
}
|
|
1039
1045
|
|
|
1046
|
+
// Dispatch to the render delegate matching the bundle's configured
|
|
1047
|
+
// template engine. `settings.json > render.engine` defaults to "swig"
|
|
1048
|
+
// so existing bundles see zero change; "nunjucks" routes through
|
|
1049
|
+
// controller.render-nunjucks.js (MVP — see that file for the list of
|
|
1050
|
+
// deferred features relative to render-swig). The render-nunjucks
|
|
1051
|
+
// delegate fetches the nunjucks module itself via
|
|
1052
|
+
// `lib.nunjucksResolver.get()`, so the `swig` / `SwigFilters` deps
|
|
1053
|
+
// passed below are harmless when unused.
|
|
1054
|
+
var _engine = 'swig';
|
|
1055
|
+
try {
|
|
1056
|
+
var _settings = local.options
|
|
1057
|
+
&& local.options.conf
|
|
1058
|
+
&& local.options.conf.content
|
|
1059
|
+
&& local.options.conf.content.settings;
|
|
1060
|
+
if (_settings && _settings.render && _settings.render.engine) {
|
|
1061
|
+
_engine = _settings.render.engine;
|
|
1062
|
+
}
|
|
1063
|
+
} catch (e) { /* fall back to default 'swig' */ }
|
|
1064
|
+
|
|
1065
|
+
var _delegate = (_engine === 'nunjucks')
|
|
1066
|
+
? '/controller.render-nunjucks'
|
|
1067
|
+
: '/controller.render-swig';
|
|
1068
|
+
|
|
1040
1069
|
if (this.isCacheless() ) {
|
|
1041
1070
|
delete require.cache[require.resolve( _(__dirname + '/controller.render-v1', true))];
|
|
1042
1071
|
delete require.cache[require.resolve( _(__dirname + '/controller.render-swig', true))];
|
|
1072
|
+
try {
|
|
1073
|
+
delete require.cache[require.resolve( _(__dirname + '/controller.render-nunjucks', true))];
|
|
1074
|
+
} catch (e) { /* nunjucks delegate may not exist on older framework dirs */ }
|
|
1043
1075
|
}
|
|
1044
1076
|
|
|
1045
|
-
return require( _(__dirname +
|
|
1077
|
+
return require( _(__dirname + _delegate, true) )(userData, displayInspector, errOptions, {
|
|
1046
1078
|
self : self,
|
|
1047
1079
|
local : local,
|
|
1048
1080
|
getData : getData,
|
|
@@ -3196,30 +3228,64 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
3196
3228
|
client.setTimeout(0); // disable the default timeout to keep session active
|
|
3197
3229
|
|
|
3198
3230
|
client.on('error', (error) => {
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
3203
|
-
|
|
3204
|
-
|
|
3205
|
-
|
|
3206
|
-
|
|
3207
|
-
|
|
3208
|
-
|
|
3209
|
-
|
|
3210
|
-
|
|
3211
|
-
|
|
3212
|
-
error.
|
|
3213
|
-
error.message = 'Could not connect to [ ' + error.accessPoint + ' ].\nThe `'+port.split(/\@/)[0]+'` bundle is offline or unreachable.\n';
|
|
3231
|
+
// #H9 — the whole listener body is wrapped in try/catch so that a throw
|
|
3232
|
+
// from enhancement (undefined options.protocol/scheme), cache mutation,
|
|
3233
|
+
// or self.throwError cannot escape an 'error' event and become an
|
|
3234
|
+
// uncaughtException that crashes the bundle.
|
|
3235
|
+
try {
|
|
3236
|
+
if (_pingInterval) { clearInterval(_pingInterval); _pingInterval = null; }
|
|
3237
|
+
try { console.error( '`'+ (options && options[':path']) +'` : '+ (error && (error.stack || error.message) || error)); } catch (_logErr) {}
|
|
3238
|
+
try {
|
|
3239
|
+
cache.delete(sessKey);
|
|
3240
|
+
var _errIdx = self.serverInstance._http2Sessions.indexOf(sessKey);
|
|
3241
|
+
if (_errIdx !== -1) self.serverInstance._http2Sessions.splice(_errIdx, 1);
|
|
3242
|
+
_errIdx = null;
|
|
3243
|
+
} catch (_cleanupErr) {
|
|
3244
|
+
console.error('[HTTP2] Session cleanup failed in error handler: ' + (_cleanupErr.stack || _cleanupErr.message));
|
|
3214
3245
|
}
|
|
3246
|
+
if (
|
|
3247
|
+
error && (
|
|
3248
|
+
(typeof(error.cause) != 'undefined' && typeof(error.cause.code) != 'undefined' && /ECONNREFUSED|ECONNRESET/.test(error.cause.code))
|
|
3249
|
+
|| /ECONNREFUSED|ECONNRESET/.test(error.code)
|
|
3250
|
+
)
|
|
3251
|
+
) {
|
|
3252
|
+
// #H9 — safe-navigate the port lookup; callers sometimes pass a bare
|
|
3253
|
+
// hostname so options.protocol/options.scheme are undefined and the
|
|
3254
|
+
// original `ports[undefined][undefined.replace(...)]` chain threw a
|
|
3255
|
+
// TypeError from inside this error listener.
|
|
3256
|
+
try {
|
|
3257
|
+
var _ginaCtx = (typeof getContext === 'function') ? getContext('gina') : null;
|
|
3258
|
+
var _portsMap = (_ginaCtx && _ginaCtx.ports && options && options.protocol)
|
|
3259
|
+
? _ginaCtx.ports[options.protocol] : null;
|
|
3260
|
+
var _schemeKey = (options && options.scheme && typeof options.scheme.replace === 'function')
|
|
3261
|
+
? options.scheme.replace(/\:/, '') : null;
|
|
3262
|
+
var _schemeMap = (_portsMap && _schemeKey) ? _portsMap[_schemeKey] : null;
|
|
3263
|
+
var port = (_schemeMap && options) ? _schemeMap[options.port] : undefined;
|
|
3264
|
+
if ( typeof(port) != 'undefined' && port !== null ) {
|
|
3265
|
+
error.accessPoint = port;
|
|
3266
|
+
var _bundleName = (typeof port === 'string') ? port.split(/\@/)[0] : String(port);
|
|
3267
|
+
error.message = 'Could not connect to [ ' + error.accessPoint + ' ].\nThe `'+ _bundleName +'` bundle is offline or unreachable.\n';
|
|
3268
|
+
}
|
|
3269
|
+
} catch (_enhErr) {
|
|
3270
|
+
console.error('[HTTP2] Error while enhancing connect-error message: ' + (_enhErr.stack || _enhErr.message));
|
|
3271
|
+
}
|
|
3272
|
+
}
|
|
3273
|
+
// local.req/res may be null when the error fires outside a request context
|
|
3274
|
+
// (background socket event) — log and return instead of crashing
|
|
3275
|
+
if (!local.req || !local.res) {
|
|
3276
|
+
console.error('[HTTP2] Session error outside request context — cannot send error response.\n' + (error && (error.stack || error.message) || error));
|
|
3277
|
+
return;
|
|
3278
|
+
}
|
|
3279
|
+
try {
|
|
3280
|
+
self.throwError(error);
|
|
3281
|
+
} catch (_throwErr) {
|
|
3282
|
+
console.error('[HTTP2] self.throwError failed in error handler: ' + (_throwErr.stack || _throwErr.message));
|
|
3283
|
+
}
|
|
3284
|
+
} catch (_handlerErr) {
|
|
3285
|
+
// Last-resort swallow — throwing from an 'error' listener crashes the
|
|
3286
|
+
// process. Log and return so the session failure stays contained.
|
|
3287
|
+
try { console.error('[HTTP2] Uncaught failure inside error listener: ' + (_handlerErr.stack || _handlerErr.message)); } catch (_) {}
|
|
3215
3288
|
}
|
|
3216
|
-
// local.req/res may be null when the error fires outside a request context
|
|
3217
|
-
// (background socket event) — log and return instead of crashing
|
|
3218
|
-
if (!local.req || !local.res) {
|
|
3219
|
-
console.error('[HTTP2] Session error outside request context — cannot send error response.\n' + (error.stack || error.message));
|
|
3220
|
-
return;
|
|
3221
|
-
}
|
|
3222
|
-
self.throwError(error);
|
|
3223
3289
|
return;
|
|
3224
3290
|
});
|
|
3225
3291
|
|
|
@@ -278,14 +278,30 @@ module.exports = function renderJSON(jsonObj, deps) {
|
|
|
278
278
|
// The resolved redact config is exposed under `gina.inspectorRedact`
|
|
279
279
|
// so the standalone Inspector can mirror the same rules client-side.
|
|
280
280
|
var _jsonRedactConf = inspectorRedact.getConfig(local.options.conf);
|
|
281
|
+
// #INS8 — expose the standalone Inspector URL (null when unset).
|
|
282
|
+
var _jsonInspUrl = null;
|
|
283
|
+
try {
|
|
284
|
+
var _jsonConfSource = local.options.conf || {};
|
|
285
|
+
if (_jsonConfSource.content && _jsonConfSource.content.settings
|
|
286
|
+
&& _jsonConfSource.content.settings.inspector
|
|
287
|
+
&& _jsonConfSource.content.settings.inspector.url) {
|
|
288
|
+
_jsonInspUrl = _jsonConfSource.content.settings.inspector.url;
|
|
289
|
+
}
|
|
290
|
+
} catch (e) { /* leave null */ }
|
|
281
291
|
var __gdPayload = {
|
|
282
292
|
gina : { environment: _env, inspectorRedact: {
|
|
283
293
|
patterns : _jsonRedactConf.patterns,
|
|
284
294
|
types : _jsonRedactConf.types,
|
|
285
295
|
replacement : _jsonRedactConf.replacement
|
|
286
|
-
}},
|
|
296
|
+
}, inspectorUrl: _jsonInspUrl },
|
|
287
297
|
user : _gdUser
|
|
288
298
|
};
|
|
299
|
+
// #R7 — JSON renders do NOT write _lastGinaDataUnredacted. The
|
|
300
|
+
// Reveal UX unmasks the Data tab, which always shows the HTML
|
|
301
|
+
// render payload (sourced from window.opener.__ginaData). JSON
|
|
302
|
+
// polling endpoints would otherwise clobber the HTML snapshot
|
|
303
|
+
// with tiny session/ping payloads between page load and click.
|
|
304
|
+
// Only render-swig.js writes the unredacted slot.
|
|
289
305
|
__gdPayload = inspectorRedact.redact(__gdPayload, {
|
|
290
306
|
compiledPatterns : _jsonRedactConf.compiledPatterns,
|
|
291
307
|
replacement : _jsonRedactConf.replacement
|