@pyric/cli 0.1.0-alpha.15 → 0.1.0-alpha.17
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/README.md +13 -9
- package/dist/assurance/.generated/conformance-verdicts.d.ts +80 -72
- package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
- package/dist/assurance/.generated/conformance-verdicts.js +80 -72
- package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
- package/dist/bridge/client/dispatch.js +1 -1
- package/dist/bridge/client/dispatch.js.map +1 -1
- package/dist/cli/database-rules.d.ts.map +1 -1
- package/dist/cli/database-rules.js +6 -4
- package/dist/cli/database-rules.js.map +1 -1
- package/dist/cli/dev-runner.d.ts +9 -0
- package/dist/cli/dev-runner.d.ts.map +1 -1
- package/dist/cli/dev-runner.js +18 -0
- package/dist/cli/dev-runner.js.map +1 -1
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +61 -6
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/verify.js +2 -2
- package/dist/cli/verify.js.map +1 -1
- package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use-browser.js +1 -1
- package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
- package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use.js +1 -1
- package/dist/conformance/.generated/can-i-use.js.map +1 -1
- package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
- package/dist/conformance/.generated/conformance-docs.js +1 -1
- package/dist/conformance/.generated/conformance-docs.js.map +1 -1
- package/dist/next/client-aliases.d.ts +11 -0
- package/dist/next/client-aliases.d.ts.map +1 -0
- package/dist/next/client-aliases.js +38 -0
- package/dist/next/client-aliases.js.map +1 -0
- package/dist/next/dev-rewrites.d.ts +9 -0
- package/dist/next/dev-rewrites.d.ts.map +1 -0
- package/dist/next/dev-rewrites.js +53 -0
- package/dist/next/dev-rewrites.js.map +1 -0
- package/dist/next/guard.d.ts +15 -0
- package/dist/next/guard.d.ts.map +1 -0
- package/dist/next/guard.js +52 -0
- package/dist/next/guard.js.map +1 -0
- package/dist/next/index.d.ts +12 -0
- package/dist/next/index.d.ts.map +1 -0
- package/dist/next/index.js +11 -0
- package/dist/next/index.js.map +1 -0
- package/dist/next/runtime-env.d.ts +7 -0
- package/dist/next/runtime-env.d.ts.map +1 -0
- package/dist/next/runtime-env.js +13 -0
- package/dist/next/runtime-env.js.map +1 -0
- package/dist/next/server-external-packages.d.ts +10 -0
- package/dist/next/server-external-packages.d.ts.map +1 -0
- package/dist/next/server-external-packages.js +34 -0
- package/dist/next/server-external-packages.js.map +1 -0
- package/dist/next/target-url.d.ts +11 -0
- package/dist/next/target-url.d.ts.map +1 -0
- package/dist/next/target-url.js +36 -0
- package/dist/next/target-url.js.map +1 -0
- package/dist/next/turbopack-config.d.ts +9 -0
- package/dist/next/turbopack-config.d.ts.map +1 -0
- package/dist/next/turbopack-config.js +39 -0
- package/dist/next/turbopack-config.js.map +1 -0
- package/dist/next/types.d.ts +40 -0
- package/dist/next/types.d.ts.map +1 -0
- package/dist/next/types.js +5 -0
- package/dist/next/types.js.map +1 -0
- package/dist/next/webpack-config.d.ts +11 -0
- package/dist/next/webpack-config.d.ts.map +1 -0
- package/dist/next/webpack-config.js +51 -0
- package/dist/next/webpack-config.js.map +1 -0
- package/dist/next/with-pyric.d.ts +22 -0
- package/dist/next/with-pyric.d.ts.map +1 -0
- package/dist/next/with-pyric.js +49 -0
- package/dist/next/with-pyric.js.map +1 -0
- package/dist/register/app-bridge.d.ts +9 -0
- package/dist/register/app-bridge.d.ts.map +1 -0
- package/dist/register/app-bridge.js +56 -0
- package/dist/register/app-bridge.js.map +1 -0
- package/dist/register/hooks.d.ts.map +1 -1
- package/dist/register/hooks.js +6 -1
- package/dist/register/hooks.js.map +1 -1
- package/dist/register/index.js +1 -1
- package/dist/register/index.js.map +1 -1
- package/dist/register/mapping.d.ts +3 -1
- package/dist/register/mapping.d.ts.map +1 -1
- package/dist/register/mapping.js +41 -5
- package/dist/register/mapping.js.map +1 -1
- package/dist/rtdb/rules-json.d.ts +12 -0
- package/dist/rtdb/rules-json.d.ts.map +1 -1
- package/dist/rtdb/rules-json.js +98 -0
- package/dist/rtdb/rules-json.js.map +1 -1
- package/dist/serve/bundler.d.ts.map +1 -1
- package/dist/serve/bundler.js +2 -0
- package/dist/serve/bundler.js.map +1 -1
- package/dist/serve/discovery.d.ts +4 -4
- package/dist/serve/discovery.d.ts.map +1 -1
- package/dist/serve/discovery.js +59 -38
- package/dist/serve/discovery.js.map +1 -1
- package/dist/serve/entries/app-ai-passthrough.d.ts +8 -0
- package/dist/serve/entries/app-ai-passthrough.d.ts.map +1 -0
- package/dist/serve/entries/app-ai-passthrough.js +59 -0
- package/dist/serve/entries/app-ai-passthrough.js.map +1 -0
- package/dist/serve/entries/auth-helper-core.d.ts +9 -0
- package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
- package/dist/serve/entries/auth-helper-core.js +37 -8
- package/dist/serve/entries/auth-helper-core.js.map +1 -1
- package/dist/serve/entries/auth.d.ts +1 -0
- package/dist/serve/entries/auth.d.ts.map +1 -1
- package/dist/serve/entries/auth.js +7 -4
- package/dist/serve/entries/auth.js.map +1 -1
- package/dist/serve/entries/bridge-url.d.ts.map +1 -1
- package/dist/serve/entries/bridge-url.js +7 -2
- package/dist/serve/entries/bridge-url.js.map +1 -1
- package/dist/serve/entries/database.d.ts +1 -0
- package/dist/serve/entries/database.d.ts.map +1 -1
- package/dist/serve/entries/database.js +1 -0
- package/dist/serve/entries/database.js.map +1 -1
- package/dist/serve/entries/firestore.d.ts +1 -0
- package/dist/serve/entries/firestore.d.ts.map +1 -1
- package/dist/serve/entries/firestore.js +1 -0
- package/dist/serve/entries/firestore.js.map +1 -1
- package/dist/serve/entries/init.d.ts.map +1 -1
- package/dist/serve/entries/init.js +4 -2
- package/dist/serve/entries/init.js.map +1 -1
- package/dist/serve/entries/runtime.js +23 -0
- package/dist/serve/entries/runtime.js.map +1 -1
- package/dist/serve/entries/storage.d.ts +2 -0
- package/dist/serve/entries/storage.d.ts.map +1 -1
- package/dist/serve/entries/storage.js +9 -2
- package/dist/serve/entries/storage.js.map +1 -1
- package/dist/serve/html-injection.d.ts +3 -1
- package/dist/serve/html-injection.d.ts.map +1 -1
- package/dist/serve/html-injection.js +27 -1
- package/dist/serve/html-injection.js.map +1 -1
- package/dist/serve/rules.js +2 -2
- package/dist/serve/rules.js.map +1 -1
- package/dist/serve/runtime/chip-config.d.ts +1 -1
- package/dist/serve/runtime/chip-config.d.ts.map +1 -1
- package/dist/serve/runtime/chip-config.js +16 -8
- package/dist/serve/runtime/chip-config.js.map +1 -1
- package/dist/serve/sandbox-session.d.ts +1 -0
- package/dist/serve/sandbox-session.d.ts.map +1 -1
- package/dist/serve/sandbox-session.js +30 -2
- package/dist/serve/sandbox-session.js.map +1 -1
- package/dist/serve/site-ui/_astro/_studio_.B6b_G1ev.css +1 -0
- package/dist/serve/site-ui/_astro/app.bnmVTkIY.js +11 -0
- package/dist/serve/site-ui/_astro/app.t6u-adB_.js +1 -0
- package/dist/serve/site-ui/_astro/{chess-showcase.DzPO6kz0.js → chess-showcase.kC8dXLKY.js} +1 -1
- package/dist/serve/site-ui/_astro/{example-runtime.CM0H02rx.js → example-runtime.D79PnoSk.js} +1 -1
- package/dist/serve/site-ui/_astro/index.DzVde04M.js +1 -0
- package/dist/serve/site-ui/_astro/reads.BYBRLbsE.js +1 -0
- package/dist/serve/site-ui/_astro/sandbox-controls.C9Aaazt8.js +1252 -0
- package/dist/serve/site-ui/_astro/{seed.BCn5DhHS.js → seed.DANAIyRw.js} +1 -1
- package/dist/serve/site-ui/auth/index.html +2 -2
- package/dist/serve/site-ui/docs/_rhythm/index.html +1 -1
- package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +1 -1
- package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +1 -1
- package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +1 -1
- package/dist/serve/site-ui/docs/ai-compat/index.html +85 -85
- package/dist/serve/site-ui/docs/ai-compat.md +84 -84
- package/dist/serve/site-ui/docs/api-reference/index.html +3 -1
- package/dist/serve/site-ui/docs/api-reference.md +2 -0
- package/dist/serve/site-ui/docs/app-compat/index.html +28 -28
- package/dist/serve/site-ui/docs/app-compat.md +27 -27
- package/dist/serve/site-ui/docs/auth-compat/index.html +122 -122
- package/dist/serve/site-ui/docs/auth-compat.md +121 -121
- package/dist/serve/site-ui/docs/build/ai-logic/index.html +1 -1
- package/dist/serve/site-ui/docs/build/authentication/index.html +1 -1
- package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +1 -1
- package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +1 -1
- package/dist/serve/site-ui/docs/build/cloud-storage/index.html +1 -1
- package/dist/serve/site-ui/docs/build/realtime-database/index.html +1 -1
- package/dist/serve/site-ui/docs/conformance-scores/index.html +4 -4
- package/dist/serve/site-ui/docs/conformance-scores.md +3 -3
- package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +6 -6
- package/dist/serve/site-ui/docs/create-pyric-reference-api.md +5 -5
- package/dist/serve/site-ui/docs/database-compat/index.html +200 -448
- package/dist/serve/site-ui/docs/database-compat.md +198 -461
- package/dist/serve/site-ui/docs/examples/chess/index.html +2 -2
- package/dist/serve/site-ui/docs/examples/index.html +1 -1
- package/dist/serve/site-ui/docs/firestore-compat/index.html +186 -195
- package/dist/serve/site-ui/docs/firestore-compat.md +184 -195
- package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +15 -15
- package/dist/serve/site-ui/docs/functions-rtdb-compat.md +14 -14
- package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/nextjs/index.html +57 -0
- package/dist/serve/site-ui/docs/get-started/nextjs.md +86 -0
- package/dist/serve/site-ui/docs/get-started/start-building/index.html +25 -8
- package/dist/serve/site-ui/docs/get-started/start-building.md +34 -5
- package/dist/serve/site-ui/docs/get-started/vite/index.html +26 -0
- package/dist/serve/site-ui/docs/get-started/vite.md +45 -0
- package/dist/serve/site-ui/docs/index.json +668 -103
- package/dist/serve/site-ui/docs/messaging-compat/index.html +56 -56
- package/dist/serve/site-ui/docs/messaging-compat.md +55 -55
- package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +1 -1
- package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +1 -1
- package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +1 -1
- package/dist/serve/site-ui/docs/overview/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +39 -13
- package/dist/serve/site-ui/docs/pyric-admin-app-reference-api.md +28 -2
- package/dist/serve/site-ui/docs/pyric-admin-auth-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-database-reference-api/index.html +38 -6
- package/dist/serve/site-ui/docs/pyric-admin-database-reference-api.md +43 -0
- package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api/index.html +9 -1
- package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api.md +8 -0
- package/dist/serve/site-ui/docs/pyric-admin-messaging-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +27 -4
- package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api.md +23 -0
- package/dist/serve/site-ui/docs/pyric-ai-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-auth-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-auth-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-assurance-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-discover-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +123 -0
- package/dist/serve/site-ui/docs/pyric-cli-next-reference-api.md +99 -0
- package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api/index.html +127 -0
- package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api.md +174 -0
- package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +570 -326
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api.md +198 -6
- package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-firestore-reference-api/index.html +2971 -627
- package/dist/serve/site-ui/docs/pyric-firestore-reference-api.md +2873 -517
- package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +43 -3
- package/dist/serve/site-ui/docs/pyric-rules-reference-api.md +8 -0
- package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +26 -2
- package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api.md +24 -0
- package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-sandbox-reference-api/index.html +77 -9
- package/dist/serve/site-ui/docs/pyric-sandbox-reference-api.md +28 -13
- package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +240 -63
- package/dist/serve/site-ui/docs/pyric-storage-reference-api.md +164 -5
- package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-events-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-rtdb-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-rules-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api/index.html +2 -1
- package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api.md +1 -0
- package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-traffic-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/rules-compat/index.html +87 -79
- package/dist/serve/site-ui/docs/rules-compat.md +86 -78
- package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +1 -1
- package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +1 -1
- package/dist/serve/site-ui/docs/ship/test-in-node/index.html +1 -1
- package/dist/serve/site-ui/docs/storage-compat/index.html +119 -125
- package/dist/serve/site-ui/docs/storage-compat.md +118 -124
- package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +1 -1
- package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +1 -1
- package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +1 -1
- package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +1 -1
- package/dist/serve/site-ui/docs/tutorial/index.html +1 -1
- package/dist/serve/site-ui/examples/chess/index.html +1 -1
- package/dist/serve/site-ui/examples/firestore-first-write/index.html +1 -1
- package/dist/serve/site-ui/firestore/index.html +2 -2
- package/dist/serve/site-ui/index.html +2 -2
- package/dist/serve/site-ui/llms.txt +6 -2
- package/dist/serve/site-ui/rtdb/index.html +2 -2
- package/dist/serve/site-ui/settings/index.html +2 -2
- package/dist/serve/site-ui/storage/index.html +2 -2
- package/dist/serve/site-ui/traffic/index.html +2 -2
- package/dist/serve/vite-ai-config.d.ts +4 -1
- package/dist/serve/vite-ai-config.d.ts.map +1 -1
- package/dist/serve/vite-ai-config.js +83 -19
- package/dist/serve/vite-ai-config.js.map +1 -1
- package/dist/serve/vite-generation-rules-watch.d.ts.map +1 -1
- package/dist/serve/vite-generation-rules-watch.js +61 -14
- package/dist/serve/vite-generation-rules-watch.js.map +1 -1
- package/dist/serve/vite-module-swap.d.ts +4 -1
- package/dist/serve/vite-module-swap.d.ts.map +1 -1
- package/dist/serve/vite-module-swap.js +106 -21
- package/dist/serve/vite-module-swap.js.map +1 -1
- package/dist/serve/vite-plugin.d.ts.map +1 -1
- package/dist/serve/vite-plugin.js +45 -5
- package/dist/serve/vite-plugin.js.map +1 -1
- package/dist/serve/vite-sandbox-generation.js +1 -1
- package/dist/serve/vite-sandbox-generation.js.map +1 -1
- package/dist/serve/worker/client/resumable.d.ts +30 -0
- package/dist/serve/worker/client/resumable.d.ts.map +1 -0
- package/dist/serve/worker/client/resumable.js +416 -0
- package/dist/serve/worker/client/resumable.js.map +1 -0
- package/dist/serve/worker/client/rtdb-references.d.ts.map +1 -1
- package/dist/serve/worker/client/rtdb-references.js +4 -1
- package/dist/serve/worker/client/rtdb-references.js.map +1 -1
- package/dist/serve/worker/client/storage.d.ts +16 -2
- package/dist/serve/worker/client/storage.d.ts.map +1 -1
- package/dist/serve/worker/client/storage.js +57 -6
- package/dist/serve/worker/client/storage.js.map +1 -1
- package/dist/serve/worker/host/rules.d.ts.map +1 -1
- package/dist/serve/worker/host/rules.js +2 -1
- package/dist/serve/worker/host/rules.js.map +1 -1
- package/dist/serve/worker/index.d.ts +1 -1
- package/dist/serve/worker/index.d.ts.map +1 -1
- package/dist/serve/worker/index.js +1 -1
- package/dist/serve/worker/index.js.map +1 -1
- package/dist/serve/worker/serve-init.d.ts.map +1 -1
- package/dist/serve/worker/serve-init.js +31 -0
- package/dist/serve/worker/serve-init.js.map +1 -1
- package/package.json +15 -4
- package/src/assurance/.generated/conformance-verdicts.ts +80 -72
- package/src/bridge/client/dispatch.ts +1 -1
- package/src/cli/cli.test.ts +14 -0
- package/src/cli/database-rules.ts +6 -4
- package/src/cli/dev-runner.ts +21 -0
- package/src/cli/serve.ts +62 -5
- package/src/cli/verify.ts +2 -2
- package/src/conformance/.generated/can-i-use-browser.ts +1 -1
- package/src/conformance/.generated/can-i-use.ts +1 -1
- package/src/conformance/.generated/conformance-docs.ts +1 -1
- package/src/next/client-aliases.ts +39 -0
- package/src/next/dev-rewrites.ts +77 -0
- package/src/next/guard.ts +61 -0
- package/src/next/index.ts +16 -0
- package/src/next/runtime-env.ts +18 -0
- package/src/next/server-external-packages.ts +43 -0
- package/src/next/target-url.ts +46 -0
- package/src/next/turbopack-config.ts +54 -0
- package/src/next/types.ts +47 -0
- package/src/next/webpack-config.ts +71 -0
- package/src/next/with-pyric.ts +58 -0
- package/src/register/app-bridge.ts +79 -0
- package/src/register/hooks.ts +6 -1
- package/src/register/index.ts +1 -1
- package/src/register/mapping.ts +50 -4
- package/src/rtdb/rules-json.ts +110 -0
- package/src/serve/bundler.ts +2 -0
- package/src/serve/discovery.ts +65 -44
- package/src/serve/entries/app-ai-passthrough.ts +83 -0
- package/src/serve/entries/auth-helper-core.ts +44 -8
- package/src/serve/entries/auth.ts +9 -4
- package/src/serve/entries/bridge-url.ts +9 -2
- package/src/serve/entries/database.ts +1 -0
- package/src/serve/entries/firestore.ts +1 -0
- package/src/serve/entries/init.ts +5 -2
- package/src/serve/entries/runtime.ts +25 -0
- package/src/serve/entries/storage.ts +12 -1
- package/src/serve/html-injection.ts +26 -1
- package/src/serve/rules.ts +2 -2
- package/src/serve/runtime/chip-config.ts +19 -6
- package/src/serve/sandbox-session.ts +31 -2
- package/src/serve/vite-ai-config.ts +86 -19
- package/src/serve/vite-generation-rules-watch.ts +67 -15
- package/src/serve/vite-module-swap.ts +121 -21
- package/src/serve/vite-plugin.ts +44 -6
- package/src/serve/vite-sandbox-generation.ts +1 -1
- package/src/serve/worker/client/resumable.ts +506 -0
- package/src/serve/worker/client/rtdb-references.ts +4 -1
- package/src/serve/worker/client/storage.ts +77 -7
- package/src/serve/worker/host/rules.ts +2 -1
- package/src/serve/worker/index.ts +4 -0
- package/src/serve/worker/serve-init.ts +30 -0
- package/dist/serve/site-ui/_astro/_studio_.BtYpqe1A.css +0 -1
- package/dist/serve/site-ui/_astro/app.BnMC0ywl.js +0 -109
- package/dist/serve/site-ui/_astro/app.DVXXR-WI.js +0 -1
- package/dist/serve/site-ui/_astro/index.B4Kh80he.js +0 -1
- package/dist/serve/site-ui/_astro/reads.D1exkX1-.js +0 -1
- package/dist/serve/site-ui/_astro/sandbox-controls.BqMePr5V.js +0 -1153
|
@@ -289,7 +289,13 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
289
289
|
"firestore#149": "qualified",
|
|
290
290
|
"firestore#15": "supported",
|
|
291
291
|
"firestore#150": "supported",
|
|
292
|
+
"firestore#151": "supported",
|
|
292
293
|
"firestore#152": "supported",
|
|
294
|
+
"firestore#153": "supported",
|
|
295
|
+
"firestore#154": "supported",
|
|
296
|
+
"firestore#155": "supported",
|
|
297
|
+
"firestore#156": "supported",
|
|
298
|
+
"firestore#157": "supported",
|
|
293
299
|
"firestore#16": "supported",
|
|
294
300
|
"firestore#17": "supported",
|
|
295
301
|
"firestore#18": "supported",
|
|
@@ -421,6 +427,8 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
421
427
|
"firestore-rules#187": "supported",
|
|
422
428
|
"firestore-rules#188": "supported",
|
|
423
429
|
"firestore-rules#189": "supported",
|
|
430
|
+
"firestore-rules#190": "supported",
|
|
431
|
+
"firestore-rules#191": "supported",
|
|
424
432
|
"firestore.binding.path-variable": "supported",
|
|
425
433
|
"firestore.binding.request": "supported",
|
|
426
434
|
"firestore.binding.request.auth": "supported",
|
|
@@ -437,7 +445,7 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
437
445
|
"firestore.binding.resource.__name__": "supported",
|
|
438
446
|
"firestore.binding.resource.data": "supported",
|
|
439
447
|
"firestore.binding.resource.id": "supported",
|
|
440
|
-
"firestore.function.cast.bool": "
|
|
448
|
+
"firestore.function.cast.bool": "supported",
|
|
441
449
|
"firestore.function.cast.float": "supported",
|
|
442
450
|
"firestore.function.cast.int": "supported",
|
|
443
451
|
"firestore.function.cast.path": "supported",
|
|
@@ -458,7 +466,7 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
458
466
|
"firestore.function.math.abs": "supported",
|
|
459
467
|
"firestore.function.math.ceil": "supported",
|
|
460
468
|
"firestore.function.math.floor": "supported",
|
|
461
|
-
"firestore.function.math.isInfinite": "
|
|
469
|
+
"firestore.function.math.isInfinite": "supported",
|
|
462
470
|
"firestore.function.math.isNaN": "supported",
|
|
463
471
|
"firestore.function.math.pow": "supported",
|
|
464
472
|
"firestore.function.math.round": "supported",
|
|
@@ -483,9 +491,9 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
483
491
|
"firestore.method.list.toSet": "supported",
|
|
484
492
|
"firestore.method.map.diff": "supported",
|
|
485
493
|
"firestore.method.map.get": "supported",
|
|
486
|
-
"firestore.method.map.hasAll": "
|
|
487
|
-
"firestore.method.map.hasAny": "
|
|
488
|
-
"firestore.method.map.hasOnly": "
|
|
494
|
+
"firestore.method.map.hasAll": "supported",
|
|
495
|
+
"firestore.method.map.hasAny": "supported",
|
|
496
|
+
"firestore.method.map.hasOnly": "supported",
|
|
489
497
|
"firestore.method.map.keys": "supported",
|
|
490
498
|
"firestore.method.map.size": "supported",
|
|
491
499
|
"firestore.method.map.values": "supported",
|
|
@@ -875,62 +883,62 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
875
883
|
"rtdb-rules#7": "supported",
|
|
876
884
|
"rtdb-rules#8": "supported",
|
|
877
885
|
"rtdb-rules#9": "supported",
|
|
878
|
-
"rtdb.binding.auth": "
|
|
879
|
-
"rtdb.binding.auth.token": "
|
|
880
|
-
"rtdb.binding.auth.uid": "
|
|
881
|
-
"rtdb.binding.data": "
|
|
882
|
-
"rtdb.binding.newData": "
|
|
883
|
-
"rtdb.binding.now": "
|
|
884
|
-
"rtdb.binding.path-variable": "
|
|
885
|
-
"rtdb.binding.root": "
|
|
886
|
-
"rtdb.method.snapshot.child": "
|
|
887
|
-
"rtdb.method.snapshot.exists": "
|
|
888
|
-
"rtdb.method.snapshot.getPriority": "
|
|
889
|
-
"rtdb.method.snapshot.hasChild": "
|
|
890
|
-
"rtdb.method.snapshot.hasChildren": "
|
|
891
|
-
"rtdb.method.snapshot.isBoolean": "
|
|
892
|
-
"rtdb.method.snapshot.isNumber": "
|
|
893
|
-
"rtdb.method.snapshot.isString": "
|
|
894
|
-
"rtdb.method.snapshot.parent": "
|
|
895
|
-
"rtdb.method.snapshot.val": "
|
|
896
|
-
"rtdb.method.string.beginsWith": "
|
|
897
|
-
"rtdb.method.string.contains": "
|
|
898
|
-
"rtdb.method.string.endsWith": "
|
|
899
|
-
"rtdb.method.string.length": "
|
|
900
|
-
"rtdb.method.string.matches": "
|
|
901
|
-
"rtdb.method.string.replace": "
|
|
902
|
-
"rtdb.method.string.toLowerCase": "
|
|
903
|
-
"rtdb.method.string.toUpperCase": "
|
|
904
|
-
"rtdb.operator.add": "
|
|
905
|
-
"rtdb.operator.and": "
|
|
906
|
-
"rtdb.operator.div": "
|
|
907
|
-
"rtdb.operator.gt": "
|
|
908
|
-
"rtdb.operator.gte": "
|
|
909
|
-
"rtdb.operator.index": "
|
|
910
|
-
"rtdb.operator.looseEq": "
|
|
911
|
-
"rtdb.operator.looseNeq": "
|
|
912
|
-
"rtdb.operator.lt": "
|
|
913
|
-
"rtdb.operator.lte": "
|
|
914
|
-
"rtdb.operator.member": "
|
|
915
|
-
"rtdb.operator.mod": "
|
|
916
|
-
"rtdb.operator.mul": "
|
|
917
|
-
"rtdb.operator.neg": "
|
|
918
|
-
"rtdb.operator.not": "
|
|
919
|
-
"rtdb.operator.or": "
|
|
920
|
-
"rtdb.operator.strictEq": "
|
|
921
|
-
"rtdb.operator.strictNeq": "
|
|
922
|
-
"rtdb.operator.sub": "
|
|
923
|
-
"rtdb.operator.ternary": "
|
|
924
|
-
"rtdb.rule-kind.indexOn": "
|
|
925
|
-
"rtdb.rule-kind.location-wildcard": "
|
|
926
|
-
"rtdb.rule-kind.read": "
|
|
927
|
-
"rtdb.rule-kind.validate": "
|
|
928
|
-
"rtdb.rule-kind.write": "
|
|
886
|
+
"rtdb.binding.auth": "supported",
|
|
887
|
+
"rtdb.binding.auth.token": "supported",
|
|
888
|
+
"rtdb.binding.auth.uid": "supported",
|
|
889
|
+
"rtdb.binding.data": "supported",
|
|
890
|
+
"rtdb.binding.newData": "supported",
|
|
891
|
+
"rtdb.binding.now": "supported",
|
|
892
|
+
"rtdb.binding.path-variable": "supported",
|
|
893
|
+
"rtdb.binding.root": "supported",
|
|
894
|
+
"rtdb.method.snapshot.child": "supported",
|
|
895
|
+
"rtdb.method.snapshot.exists": "supported",
|
|
896
|
+
"rtdb.method.snapshot.getPriority": "supported",
|
|
897
|
+
"rtdb.method.snapshot.hasChild": "supported",
|
|
898
|
+
"rtdb.method.snapshot.hasChildren": "supported",
|
|
899
|
+
"rtdb.method.snapshot.isBoolean": "supported",
|
|
900
|
+
"rtdb.method.snapshot.isNumber": "supported",
|
|
901
|
+
"rtdb.method.snapshot.isString": "supported",
|
|
902
|
+
"rtdb.method.snapshot.parent": "supported",
|
|
903
|
+
"rtdb.method.snapshot.val": "supported",
|
|
904
|
+
"rtdb.method.string.beginsWith": "supported",
|
|
905
|
+
"rtdb.method.string.contains": "supported",
|
|
906
|
+
"rtdb.method.string.endsWith": "supported",
|
|
907
|
+
"rtdb.method.string.length": "supported",
|
|
908
|
+
"rtdb.method.string.matches": "supported",
|
|
909
|
+
"rtdb.method.string.replace": "supported",
|
|
910
|
+
"rtdb.method.string.toLowerCase": "supported",
|
|
911
|
+
"rtdb.method.string.toUpperCase": "supported",
|
|
912
|
+
"rtdb.operator.add": "supported",
|
|
913
|
+
"rtdb.operator.and": "supported",
|
|
914
|
+
"rtdb.operator.div": "supported",
|
|
915
|
+
"rtdb.operator.gt": "supported",
|
|
916
|
+
"rtdb.operator.gte": "supported",
|
|
917
|
+
"rtdb.operator.index": "supported",
|
|
918
|
+
"rtdb.operator.looseEq": "supported",
|
|
919
|
+
"rtdb.operator.looseNeq": "supported",
|
|
920
|
+
"rtdb.operator.lt": "supported",
|
|
921
|
+
"rtdb.operator.lte": "supported",
|
|
922
|
+
"rtdb.operator.member": "supported",
|
|
923
|
+
"rtdb.operator.mod": "supported",
|
|
924
|
+
"rtdb.operator.mul": "supported",
|
|
925
|
+
"rtdb.operator.neg": "supported",
|
|
926
|
+
"rtdb.operator.not": "supported",
|
|
927
|
+
"rtdb.operator.or": "supported",
|
|
928
|
+
"rtdb.operator.strictEq": "supported",
|
|
929
|
+
"rtdb.operator.strictNeq": "supported",
|
|
930
|
+
"rtdb.operator.sub": "supported",
|
|
931
|
+
"rtdb.operator.ternary": "supported",
|
|
932
|
+
"rtdb.rule-kind.indexOn": "supported",
|
|
933
|
+
"rtdb.rule-kind.location-wildcard": "supported",
|
|
934
|
+
"rtdb.rule-kind.read": "supported",
|
|
935
|
+
"rtdb.rule-kind.validate": "supported",
|
|
936
|
+
"rtdb.rule-kind.write": "supported",
|
|
929
937
|
"rtdb.semantic.deny-by-default": "qualified",
|
|
930
|
-
"rtdb.semantic.read-cascade": "
|
|
931
|
-
"rtdb.semantic.regex-literal": "
|
|
932
|
-
"rtdb.semantic.validate-non-cascade": "
|
|
933
|
-
"rtdb.semantic.write-cascade": "
|
|
938
|
+
"rtdb.semantic.read-cascade": "supported",
|
|
939
|
+
"rtdb.semantic.regex-literal": "supported",
|
|
940
|
+
"rtdb.semantic.validate-non-cascade": "supported",
|
|
941
|
+
"rtdb.semantic.write-cascade": "supported",
|
|
934
942
|
"storage#1": "supported",
|
|
935
943
|
"storage#10": "supported",
|
|
936
944
|
"storage#105": "supported",
|
|
@@ -977,12 +985,12 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
977
985
|
"storage#44": "supported",
|
|
978
986
|
"storage#45": "supported",
|
|
979
987
|
"storage#46": "supported",
|
|
980
|
-
"storage#47": "
|
|
981
|
-
"storage#48": "
|
|
982
|
-
"storage#49": "
|
|
988
|
+
"storage#47": "qualified",
|
|
989
|
+
"storage#48": "qualified",
|
|
990
|
+
"storage#49": "qualified",
|
|
983
991
|
"storage#4a": "supported",
|
|
984
992
|
"storage#5": "supported",
|
|
985
|
-
"storage#50": "
|
|
993
|
+
"storage#50": "qualified",
|
|
986
994
|
"storage#51": "qualified",
|
|
987
995
|
"storage#52": "supported",
|
|
988
996
|
"storage#53": "supported",
|
|
@@ -1093,30 +1101,30 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
1093
1101
|
"storage.method.map.get": "supported",
|
|
1094
1102
|
"storage.method.map.keys": "supported",
|
|
1095
1103
|
"storage.method.set.hasAll": "supported",
|
|
1096
|
-
"storage.method.size": "
|
|
1104
|
+
"storage.method.size": "supported",
|
|
1097
1105
|
"storage.method.string.matches": "supported",
|
|
1098
|
-
"storage.method.string.split": "
|
|
1106
|
+
"storage.method.string.split": "supported",
|
|
1099
1107
|
"storage.operator.add": "supported",
|
|
1100
1108
|
"storage.operator.and": "supported",
|
|
1101
1109
|
"storage.operator.div": "supported",
|
|
1102
1110
|
"storage.operator.eq": "supported",
|
|
1103
1111
|
"storage.operator.gt": "supported",
|
|
1104
1112
|
"storage.operator.gte": "supported",
|
|
1105
|
-
"storage.operator.in": "
|
|
1113
|
+
"storage.operator.in": "supported",
|
|
1106
1114
|
"storage.operator.index": "supported",
|
|
1107
|
-
"storage.operator.is": "
|
|
1115
|
+
"storage.operator.is": "supported",
|
|
1108
1116
|
"storage.operator.lt": "supported",
|
|
1109
1117
|
"storage.operator.lte": "supported",
|
|
1110
1118
|
"storage.operator.member": "supported",
|
|
1111
|
-
"storage.operator.mod": "
|
|
1119
|
+
"storage.operator.mod": "supported",
|
|
1112
1120
|
"storage.operator.mul": "supported",
|
|
1113
1121
|
"storage.operator.neq": "supported",
|
|
1114
1122
|
"storage.operator.not": "supported",
|
|
1115
1123
|
"storage.operator.or": "supported",
|
|
1116
|
-
"storage.operator.slice": "
|
|
1124
|
+
"storage.operator.slice": "supported",
|
|
1117
1125
|
"storage.operator.sub": "supported",
|
|
1118
|
-
"storage.operator.ternary": "
|
|
1119
|
-
"storage.operator.unary-minus": "
|
|
1126
|
+
"storage.operator.ternary": "supported",
|
|
1127
|
+
"storage.operator.unary-minus": "supported",
|
|
1120
1128
|
"storage.rule-kind.allow-create": "supported",
|
|
1121
1129
|
"storage.rule-kind.allow-delete": "supported",
|
|
1122
1130
|
"storage.rule-kind.allow-get": "supported",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* pinned by `test/bridge/tool-parity.test.ts`.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { createFirestoreSimulatorTools } from 'pyric/rules/internal
|
|
18
|
+
import { createFirestoreSimulatorTools } from 'pyric/rules/internal';
|
|
19
19
|
import {
|
|
20
20
|
createFirestoreDataTools,
|
|
21
21
|
createFirestoreInspectTools,
|
package/src/cli/cli.test.ts
CHANGED
|
@@ -490,4 +490,18 @@ describe('scanForInlinedFirebase', () => {
|
|
|
490
490
|
);
|
|
491
491
|
expect(scanForInlinedFirebase(dir)).toEqual([]);
|
|
492
492
|
});
|
|
493
|
+
|
|
494
|
+
it('ignores hidden frameworks and build cache directories like .next and .git', async () => {
|
|
495
|
+
const { scanForInlinedFirebase } = await import('./serve.js');
|
|
496
|
+
const { mkdtempSync, mkdirSync, writeFileSync } = await import('node:fs');
|
|
497
|
+
const { tmpdir } = await import('node:os');
|
|
498
|
+
const { join } = await import('node:path');
|
|
499
|
+
const dir = mkdtempSync(join(tmpdir(), 'pyric-inline-ignore-'));
|
|
500
|
+
mkdirSync(join(dir, '.next'));
|
|
501
|
+
writeFileSync(
|
|
502
|
+
join(dir, '.next', 'bundle.js'),
|
|
503
|
+
'fetch("https://identitytoolkit.googleapis.com/v1/projects?key="+k)',
|
|
504
|
+
);
|
|
505
|
+
expect(scanForInlinedFirebase(dir)).toEqual([]);
|
|
506
|
+
});
|
|
493
507
|
});
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
loadRtdbRulesDocument,
|
|
20
20
|
type LoadRtdbRulesDocumentResult,
|
|
21
21
|
} from '../rtdb/load-rules-document.js';
|
|
22
|
+
import { stripJsonComments } from '../rtdb/rules-json.js';
|
|
22
23
|
|
|
23
24
|
export interface DatabaseRulesDeps {
|
|
24
25
|
readFile?: typeof readFile;
|
|
@@ -53,7 +54,7 @@ function defaultReadStdin(): Promise<string> {
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
function parseRulesJson(raw: string): CompiledRtdbRules {
|
|
56
|
-
return compileRtdbRules(JSON.parse(raw));
|
|
57
|
+
return compileRtdbRules(JSON.parse(stripJsonComments(raw)));
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
function collectFindings(node: RtdbNode, kind: 'errors' | 'warnings'): RuleFinding[] {
|
|
@@ -215,7 +216,8 @@ export async function runDatabaseRulesSimulate(
|
|
|
215
216
|
rulesJson = payload.rulesJson ?? payload.rules;
|
|
216
217
|
} else if (payload.rulesPath) {
|
|
217
218
|
try {
|
|
218
|
-
|
|
219
|
+
const rawContent = await readFileFn(resolvePath(deps.cwd ?? process.cwd(), payload.rulesPath), 'utf-8');
|
|
220
|
+
rulesJson = JSON.parse(stripJsonComments(rawContent));
|
|
219
221
|
} catch (e) {
|
|
220
222
|
err.write(`pyric database rules simulate: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
221
223
|
return 1;
|
|
@@ -227,7 +229,7 @@ export async function runDatabaseRulesSimulate(
|
|
|
227
229
|
return 1;
|
|
228
230
|
}
|
|
229
231
|
try {
|
|
230
|
-
rulesJson = JSON.parse(file.raw);
|
|
232
|
+
rulesJson = JSON.parse(stripJsonComments(file.raw));
|
|
231
233
|
} catch (e) {
|
|
232
234
|
err.write(`pyric database rules simulate: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
233
235
|
return 2;
|
|
@@ -247,7 +249,7 @@ export async function runDatabaseRulesSimulate(
|
|
|
247
249
|
return 1;
|
|
248
250
|
}
|
|
249
251
|
try {
|
|
250
|
-
rulesJson = JSON.parse(file.raw);
|
|
252
|
+
rulesJson = JSON.parse(stripJsonComments(file.raw));
|
|
251
253
|
} catch (e) {
|
|
252
254
|
err.write(`pyric database rules simulate: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
253
255
|
return 2;
|
package/src/cli/dev-runner.ts
CHANGED
|
@@ -163,6 +163,27 @@ export function buildChildEnv(
|
|
|
163
163
|
};
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
+
/**
|
|
167
|
+
* Format copy-pasteable POSIX export statements for host-only startup.
|
|
168
|
+
* Grouped in a cleanly formatted console block for easy selection and copying
|
|
169
|
+
* into a separate terminal (for example, when running Next.js independently).
|
|
170
|
+
*/
|
|
171
|
+
export function formatStartupEnvExport(opts: { serveUrl: string; registerUrl: string }): string {
|
|
172
|
+
const pyricSandbox = `remote:${opts.serveUrl}`;
|
|
173
|
+
const nodeOptions = `--import ${opts.registerUrl}`;
|
|
174
|
+
const line1 = `export PYRIC_SANDBOX="${pyricSandbox}"`;
|
|
175
|
+
const line2 = `export NODE_OPTIONS="${nodeOptions}"`;
|
|
176
|
+
const divider = '─'.repeat(Math.max(line1.length, line2.length) + 4);
|
|
177
|
+
return (
|
|
178
|
+
'\n' +
|
|
179
|
+
' To run external commands against this sandbox, paste in another terminal:\n' +
|
|
180
|
+
` ${divider}\n` +
|
|
181
|
+
` ${line1}\n` +
|
|
182
|
+
` ${line2}\n` +
|
|
183
|
+
` ${divider}\n`
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
166
187
|
// ─── Line prefixing (pure core) ────────────────────────────────────────────
|
|
167
188
|
|
|
168
189
|
/**
|
package/src/cli/serve.ts
CHANGED
|
@@ -31,6 +31,7 @@ import { openBrowser, shouldAutoOpen } from '../serve/open-browser.js';
|
|
|
31
31
|
import {
|
|
32
32
|
buildChildEnv,
|
|
33
33
|
detectPackageManager,
|
|
34
|
+
formatStartupEnvExport,
|
|
34
35
|
readDevScript,
|
|
35
36
|
registerModuleUrl,
|
|
36
37
|
resolveDevChild,
|
|
@@ -404,6 +405,47 @@ export async function startServe(opts: {
|
|
|
404
405
|
watcher.close();
|
|
405
406
|
});
|
|
406
407
|
}
|
|
408
|
+
const dbRulesSourcePath = session.summary.rules.database.sourcePath;
|
|
409
|
+
const isWatchEnabled = opts.watch !== false;
|
|
410
|
+
const hasDbRulesPath = dbRulesSourcePath !== null;
|
|
411
|
+
const watchingDb = isWatchEnabled && hasDbRulesPath;
|
|
412
|
+
if (watchingDb) {
|
|
413
|
+
let debounceDb: ReturnType<typeof setTimeout> | null = null;
|
|
414
|
+
const dbWatcher = watchFile(dbRulesSourcePath as string, () => {
|
|
415
|
+
const hasDebounceDb = debounceDb !== null;
|
|
416
|
+
if (hasDebounceDb) {
|
|
417
|
+
clearTimeout(debounceDb as ReturnType<typeof setTimeout>);
|
|
418
|
+
}
|
|
419
|
+
debounceDb = setTimeout(() => {
|
|
420
|
+
void session.reloadDatabaseRules().then((result) => {
|
|
421
|
+
const isReloaded = result.kind === 'reloaded';
|
|
422
|
+
if (isReloaded) {
|
|
423
|
+
logger.note(` ↻ rtdb rules reloaded (hash ${result.rulesHash}) → ${result.clients} page(s)`);
|
|
424
|
+
} else {
|
|
425
|
+
const isRejected = result.kind === 'rejected';
|
|
426
|
+
if (isRejected) {
|
|
427
|
+
logger.note(` ⚠ rtdb rules NOT reloaded (last-good stays live): ${result.error.message}`);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
}, 150);
|
|
432
|
+
});
|
|
433
|
+
dbWatcher.on('error', (error) => {
|
|
434
|
+
const isErrorInstance = error instanceof Error;
|
|
435
|
+
let errorMsg = String(error);
|
|
436
|
+
if (isErrorInstance) {
|
|
437
|
+
errorMsg = (error as Error).message;
|
|
438
|
+
}
|
|
439
|
+
logger.note(` ⚠ rtdb rules watcher failed (hot reload off): ${errorMsg}`);
|
|
440
|
+
});
|
|
441
|
+
handle.server.once('close', () => {
|
|
442
|
+
const hasDebounceDb = debounceDb !== null;
|
|
443
|
+
if (hasDebounceDb) {
|
|
444
|
+
clearTimeout(debounceDb as ReturnType<typeof setTimeout>);
|
|
445
|
+
}
|
|
446
|
+
dbWatcher.close();
|
|
447
|
+
});
|
|
448
|
+
}
|
|
407
449
|
|
|
408
450
|
logger.info(`=== Serving from '${opts.cwd}'...`);
|
|
409
451
|
logger.info('');
|
|
@@ -476,7 +518,12 @@ export async function startServe(opts: {
|
|
|
476
518
|
if (session.summary.capturePath) {
|
|
477
519
|
logger.info(`✔ capture session → ${session.summary.capturePath} (run \`pyric verify\` to replay it)`);
|
|
478
520
|
}
|
|
479
|
-
if (watching)
|
|
521
|
+
if (watching) {
|
|
522
|
+
logger.info(`✔ watch hot-reloading ${rulesSourcePath} over /__pyric/events`);
|
|
523
|
+
}
|
|
524
|
+
if (watchingDb) {
|
|
525
|
+
logger.info(`✔ watch hot-reloading ${dbRulesSourcePath} over /__pyric/events`);
|
|
526
|
+
}
|
|
480
527
|
// Browser-honesty: the sandbox is browser-resident — firestore/auth and
|
|
481
528
|
// persistence run IN the served page. With no page open, data ops silently
|
|
482
529
|
// no-op. This warning (paired with auto-open in runServe) is the fix for the
|
|
@@ -570,7 +617,8 @@ export async function runServe(parsed: ParsedArgs): Promise<number> {
|
|
|
570
617
|
|
|
571
618
|
const json = Boolean(parsed.flags.get('json'));
|
|
572
619
|
|
|
573
|
-
const
|
|
620
|
+
const explicitUi = Boolean(parsed.flags.get('ui'));
|
|
621
|
+
const uiOn = !parsed.flags.get('no-ui');
|
|
574
622
|
|
|
575
623
|
// Resolve the child plan BEFORE the server starts: a planned child implies
|
|
576
624
|
// the bridge (see bridgeEnabledFor) — the child's injected PYRIC_SANDBOX
|
|
@@ -661,8 +709,9 @@ export async function runServe(parsed: ParsedArgs): Promise<number> {
|
|
|
661
709
|
env: process.env,
|
|
662
710
|
});
|
|
663
711
|
if (opened) {
|
|
664
|
-
//
|
|
665
|
-
|
|
712
|
+
// When explicit --ui is passed, open Studio directly; otherwise open the served page.
|
|
713
|
+
const targetUrl = explicitUi && runtime.uiUrl !== null ? runtime.uiUrl : runtime.handle.url;
|
|
714
|
+
void openBrowser(targetUrl);
|
|
666
715
|
}
|
|
667
716
|
|
|
668
717
|
let devChild: DevChildHandle | null = null;
|
|
@@ -800,6 +849,13 @@ export async function runServe(parsed: ParsedArgs): Promise<number> {
|
|
|
800
849
|
registerUrl: registerModuleUrl(),
|
|
801
850
|
}),
|
|
802
851
|
});
|
|
852
|
+
} else if (!json) {
|
|
853
|
+
process.stdout.write(
|
|
854
|
+
formatStartupEnvExport({
|
|
855
|
+
serveUrl: runtime.handle.url,
|
|
856
|
+
registerUrl: registerModuleUrl(),
|
|
857
|
+
}),
|
|
858
|
+
);
|
|
803
859
|
}
|
|
804
860
|
|
|
805
861
|
return await new Promise<number>((resolveExit) => {
|
|
@@ -886,7 +942,8 @@ export function scanForInlinedFirebase(dir: string): string[] {
|
|
|
886
942
|
if (st.isDirectory()) {
|
|
887
943
|
// The pyric namespace itself never lands in hosting.public, but a
|
|
888
944
|
// node_modules inside a served dir would be a scan-cost trap.
|
|
889
|
-
|
|
945
|
+
// Dot-directories (.next, .git, .pyric) are internal caches and must be ignored.
|
|
946
|
+
if (name === 'node_modules' || name.startsWith('.')) continue;
|
|
890
947
|
walk(p, r, depth + 1);
|
|
891
948
|
} else if (/\.(js|mjs)$/.test(name)) {
|
|
892
949
|
scanned++;
|
package/src/cli/verify.ts
CHANGED
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
import { readFirebaseJson, type FirebaseJson } from './firebase-json.js';
|
|
19
19
|
import type { FlagValue, ParsedArgs } from './parse-args.js';
|
|
20
20
|
import { resolveScope } from './scope.js';
|
|
21
|
-
import { parseRtdbRulesJson } from '../rtdb/rules-json.js';
|
|
21
|
+
import { parseRtdbRulesJson, stripJsonComments } from '../rtdb/rules-json.js';
|
|
22
22
|
|
|
23
23
|
export type Fixture = PyricVerifyFixture;
|
|
24
24
|
|
|
@@ -358,7 +358,7 @@ async function readFirebaseJsonOrNull(cwd: string): Promise<FirebaseJson | null>
|
|
|
358
358
|
function parseRtdbRulesFile(path: string): { rules: Record<string, unknown> } {
|
|
359
359
|
let parsed: unknown;
|
|
360
360
|
try {
|
|
361
|
-
parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
361
|
+
parsed = JSON.parse(stripJsonComments(readFileSync(path, 'utf8')));
|
|
362
362
|
} catch (e) {
|
|
363
363
|
throw new Error(`failed to parse RTDB rules JSON at ${path}: ${messageOf(e)}`);
|
|
364
364
|
}
|