@pyric/cli 0.1.0-alpha.20 → 0.1.0-alpha.22
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 +64 -89
- package/dist/assurance/.generated/conformance-verdicts.d.ts +238 -1
- package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
- package/dist/assurance/.generated/conformance-verdicts.js +238 -1
- package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
- package/dist/bridge/client/dispatch.d.ts +25 -19
- package/dist/bridge/client/dispatch.d.ts.map +1 -1
- package/dist/bridge/client/dispatch.js +41 -48
- package/dist/bridge/client/dispatch.js.map +1 -1
- package/dist/bridge/client/tool-family-factories.d.ts +26 -0
- package/dist/bridge/client/tool-family-factories.d.ts.map +1 -0
- package/dist/bridge/client/tool-family-factories.js +10 -0
- package/dist/bridge/client/tool-family-factories.js.map +1 -0
- package/dist/bridge/server/mcp-contract.d.ts +7 -6
- package/dist/bridge/server/mcp-contract.d.ts.map +1 -1
- package/dist/bridge/server/mcp-contract.js +9 -48
- package/dist/bridge/server/mcp-contract.js.map +1 -1
- package/dist/bridge/server/peer.d.ts +11 -1
- package/dist/bridge/server/peer.d.ts.map +1 -1
- package/dist/bridge/server/peer.js +22 -1
- package/dist/bridge/server/peer.js.map +1 -1
- package/dist/bridge/server/tool-family-factories.d.ts +30 -0
- package/dist/bridge/server/tool-family-factories.d.ts.map +1 -0
- package/dist/bridge/server/tool-family-factories.js +22 -0
- package/dist/bridge/server/tool-family-factories.js.map +1 -0
- package/dist/bridge/server/tool-metadata.d.ts +17 -18
- package/dist/bridge/server/tool-metadata.d.ts.map +1 -1
- package/dist/bridge/server/tool-metadata.js +24 -59
- package/dist/bridge/server/tool-metadata.js.map +1 -1
- package/dist/bridge/tool-families.d.ts +48 -0
- package/dist/bridge/tool-families.d.ts.map +1 -0
- package/dist/bridge/tool-families.generated.d.ts +32 -0
- package/dist/bridge/tool-families.generated.d.ts.map +1 -0
- package/dist/bridge/tool-families.generated.js +15 -0
- package/dist/bridge/tool-families.generated.js.map +1 -0
- package/dist/bridge/tool-families.js +51 -0
- package/dist/bridge/tool-families.js.map +1 -0
- package/dist/bridge/tool-family-records/conformance.d.ts +7 -0
- package/dist/bridge/tool-family-records/conformance.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/conformance.js +6 -0
- package/dist/bridge/tool-family-records/conformance.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-data.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-data.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-data.js +15 -0
- package/dist/bridge/tool-family-records/firestore-data.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-inspect.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-inspect.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-inspect.js +6 -0
- package/dist/bridge/tool-family-records/firestore-inspect.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-rules.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-rules.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-rules.js +15 -0
- package/dist/bridge/tool-family-records/firestore-rules.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-simulator.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-simulator.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-simulator.js +16 -0
- package/dist/bridge/tool-family-records/firestore-simulator.js.map +1 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.d.ts +7 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.js +6 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.js.map +1 -0
- package/dist/bundler/externals.d.ts +37 -0
- package/dist/bundler/externals.d.ts.map +1 -0
- package/dist/bundler/externals.js +52 -0
- package/dist/bundler/externals.js.map +1 -0
- package/dist/bundler/index.d.ts +17 -0
- package/dist/bundler/index.d.ts.map +1 -0
- package/dist/bundler/index.js +17 -0
- package/dist/bundler/index.js.map +1 -0
- package/dist/cli/inlined-sdk-scanner.d.ts +6 -0
- package/dist/cli/inlined-sdk-scanner.d.ts.map +1 -0
- package/dist/cli/inlined-sdk-scanner.js +82 -0
- package/dist/cli/inlined-sdk-scanner.js.map +1 -0
- package/dist/cli/sandbox-interlock.d.ts +97 -0
- package/dist/cli/sandbox-interlock.d.ts.map +1 -0
- package/dist/cli/sandbox-interlock.js +112 -0
- package/dist/cli/sandbox-interlock.js.map +1 -0
- package/dist/cli/sandbox-runner.d.ts +20 -12
- package/dist/cli/sandbox-runner.d.ts.map +1 -1
- package/dist/cli/sandbox-runner.js +24 -21
- package/dist/cli/sandbox-runner.js.map +1 -1
- package/dist/cli/serve.d.ts +6 -10
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +57 -77
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/unsupported-runtime.d.ts +27 -0
- package/dist/cli/unsupported-runtime.d.ts.map +1 -0
- package/dist/cli/unsupported-runtime.js +63 -0
- package/dist/cli/unsupported-runtime.js.map +1 -0
- package/dist/conformance/.generated/can-i-use-browser.d.ts +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 +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/functions-rtdb/child.d.ts +37 -0
- package/dist/functions-rtdb/child.d.ts.map +1 -1
- package/dist/functions-rtdb/child.js +90 -21
- package/dist/functions-rtdb/child.js.map +1 -1
- package/dist/functions-rtdb/development-runtime.d.ts +3 -0
- package/dist/functions-rtdb/development-runtime.d.ts.map +1 -1
- package/dist/functions-rtdb/development-runtime.js +1 -0
- package/dist/functions-rtdb/development-runtime.js.map +1 -1
- package/dist/google-endpoints.d.ts +67 -0
- package/dist/google-endpoints.d.ts.map +1 -0
- package/dist/google-endpoints.js +119 -0
- package/dist/google-endpoints.js.map +1 -0
- package/dist/next/runtime-env.d.ts.map +1 -1
- package/dist/next/runtime-env.js +5 -0
- package/dist/next/runtime-env.js.map +1 -1
- package/dist/next/with-pyric.d.ts +1 -1
- package/dist/next/with-pyric.js +1 -1
- package/dist/register/beacon.d.ts +69 -0
- package/dist/register/beacon.d.ts.map +1 -0
- package/dist/register/beacon.js +199 -0
- package/dist/register/beacon.js.map +1 -0
- package/dist/register/index.d.ts.map +1 -1
- package/dist/register/index.js +65 -6
- package/dist/register/index.js.map +1 -1
- package/dist/register/net-guard.d.ts +110 -0
- package/dist/register/net-guard.d.ts.map +1 -0
- package/dist/register/net-guard.js +462 -0
- package/dist/register/net-guard.js.map +1 -0
- package/dist/serve/ai-diagnostics-relay.d.ts +63 -0
- package/dist/serve/ai-diagnostics-relay.d.ts.map +1 -0
- package/dist/serve/ai-diagnostics-relay.js +125 -0
- package/dist/serve/ai-diagnostics-relay.js.map +1 -0
- package/dist/serve/ai-proxy.d.ts +92 -0
- package/dist/serve/ai-proxy.d.ts.map +1 -0
- package/dist/serve/ai-proxy.js +269 -0
- package/dist/serve/ai-proxy.js.map +1 -0
- package/dist/serve/ai-status.d.ts +44 -0
- package/dist/serve/ai-status.d.ts.map +1 -0
- package/dist/serve/ai-status.js +77 -0
- package/dist/serve/ai-status.js.map +1 -0
- package/dist/serve/ai-terminal-blocks.d.ts +97 -0
- package/dist/serve/ai-terminal-blocks.d.ts.map +1 -0
- package/dist/serve/ai-terminal-blocks.js +128 -0
- package/dist/serve/ai-terminal-blocks.js.map +1 -0
- package/dist/serve/ai-terminal-text.d.ts +36 -0
- package/dist/serve/ai-terminal-text.d.ts.map +1 -0
- package/dist/serve/ai-terminal-text.js +48 -0
- package/dist/serve/ai-terminal-text.js.map +1 -0
- package/dist/serve/beacon-route.d.ts +53 -0
- package/dist/serve/beacon-route.d.ts.map +1 -0
- package/dist/serve/beacon-route.js +101 -0
- package/dist/serve/beacon-route.js.map +1 -0
- package/dist/serve/entries/active-auth-registry.d.ts +16 -0
- package/dist/serve/entries/active-auth-registry.d.ts.map +1 -0
- package/dist/serve/entries/active-auth-registry.js +48 -0
- package/dist/serve/entries/active-auth-registry.js.map +1 -0
- package/dist/serve/entries/active-auth.d.ts +18 -0
- package/dist/serve/entries/active-auth.d.ts.map +1 -0
- package/dist/serve/entries/active-auth.js +84 -0
- package/dist/serve/entries/active-auth.js.map +1 -0
- package/dist/serve/entries/auth-helper-core.d.ts +1 -0
- package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
- package/dist/serve/entries/auth-helper-core.js +4 -0
- package/dist/serve/entries/auth-helper-core.js.map +1 -1
- package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -1
- package/dist/serve/entries/auth-helper-dom.js +28 -2
- package/dist/serve/entries/auth-helper-dom.js.map +1 -1
- package/dist/serve/entries/auth.d.ts.map +1 -1
- package/dist/serve/entries/auth.js +8 -0
- package/dist/serve/entries/auth.js.map +1 -1
- package/dist/serve/entries/bridge-url.d.ts +1 -1
- package/dist/serve/entries/bridge-url.js +1 -1
- package/dist/serve/entries/init.d.ts.map +1 -1
- package/dist/serve/entries/init.js +70 -4
- package/dist/serve/entries/init.js.map +1 -1
- package/dist/serve/entries/runtime.d.ts.map +1 -1
- package/dist/serve/entries/runtime.js +9 -0
- package/dist/serve/entries/runtime.js.map +1 -1
- package/dist/serve/namespace.d.ts +14 -5
- package/dist/serve/namespace.d.ts.map +1 -1
- package/dist/serve/namespace.js +57 -124
- package/dist/serve/namespace.js.map +1 -1
- package/dist/serve/runtime/chip-config.d.ts.map +1 -1
- package/dist/serve/runtime/chip-config.js +16 -2
- package/dist/serve/runtime/chip-config.js.map +1 -1
- package/dist/serve/runtime/chip-dialog.d.ts +18 -0
- package/dist/serve/runtime/chip-dialog.d.ts.map +1 -0
- package/dist/serve/runtime/chip-dialog.js +315 -0
- package/dist/serve/runtime/chip-dialog.js.map +1 -0
- package/dist/serve/runtime/chip-install.d.ts +2 -0
- package/dist/serve/runtime/chip-install.d.ts.map +1 -1
- package/dist/serve/runtime/chip-install.js +9 -4
- package/dist/serve/runtime/chip-install.js.map +1 -1
- package/dist/serve/runtime/chip-user-search.d.ts +16 -0
- package/dist/serve/runtime/chip-user-search.d.ts.map +1 -0
- package/dist/serve/runtime/chip-user-search.js +354 -0
- package/dist/serve/runtime/chip-user-search.js.map +1 -0
- package/dist/serve/runtime/chip.d.ts +10 -0
- package/dist/serve/runtime/chip.d.ts.map +1 -1
- package/dist/serve/runtime/chip.js +118 -15
- package/dist/serve/runtime/chip.js.map +1 -1
- package/dist/serve/runtime/identity.d.ts +17 -0
- package/dist/serve/runtime/identity.d.ts.map +1 -0
- package/dist/serve/runtime/identity.js +10 -0
- package/dist/serve/runtime/identity.js.map +1 -0
- package/dist/serve/sandbox-session.d.ts +7 -0
- package/dist/serve/sandbox-session.d.ts.map +1 -1
- package/dist/serve/sandbox-session.js +2 -0
- package/dist/serve/sandbox-session.js.map +1 -1
- package/dist/serve/site-ui/_astro/{RulesCodeEditor.XtDmHOlN.js → RulesCodeEditor.DsTAsKIa.js} +1 -1
- package/dist/serve/site-ui/_astro/app.CMmTxyhL.js +1 -0
- package/dist/serve/site-ui/_astro/app.DhALsVii.js +115 -0
- package/dist/serve/site-ui/_astro/{chess-showcase.B72XYeoh.js → chess-showcase.Bn_pP6UJ.js} +2 -2
- package/dist/serve/site-ui/_astro/{example-runtime.C25_lx6Z.js → example-runtime.CXopTGv7.js} +1 -1
- package/dist/serve/site-ui/_astro/sandbox-controls.rOuZTOUG.js +510 -0
- package/dist/serve/site-ui/_astro/{seed.Co0yUJY5.js → seed.lywYbXZ0.js} +2 -2
- package/dist/serve/site-ui/_astro/writes.BsPBG3dp.js +653 -0
- package/dist/serve/site-ui/auth/index.html +1 -1
- 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 +1 -1
- package/dist/serve/site-ui/docs/api-reference/index.html +8 -1
- package/dist/serve/site-ui/docs/api-reference.md +7 -0
- package/dist/serve/site-ui/docs/app-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/auth-compat/index.html +3 -3
- package/dist/serve/site-ui/docs/auth-compat.md +2 -2
- package/dist/serve/site-ui/docs/build/ai-logic/index.html +6 -1
- package/dist/serve/site-ui/docs/build/ai-logic.md +6 -0
- package/dist/serve/site-ui/docs/build/authentication/index.html +2 -2
- package/dist/serve/site-ui/docs/build/authentication.md +1 -1
- package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +4 -2
- package/dist/serve/site-ui/docs/build/cloud-firestore.md +4 -0
- 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 +14 -2
- package/dist/serve/site-ui/docs/conformance-scores.md +13 -1
- package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/database-compat/index.html +44 -44
- package/dist/serve/site-ui/docs/database-compat.md +43 -43
- package/dist/serve/site-ui/docs/examples/chess/index.html +1 -1
- package/dist/serve/site-ui/docs/examples/index.html +1 -1
- package/dist/serve/site-ui/docs/firestore-compat/index.html +4 -4
- package/dist/serve/site-ui/docs/firestore-compat.md +3 -3
- package/dist/serve/site-ui/docs/firestore-flutter-compat/index.html +319 -0
- package/dist/serve/site-ui/docs/firestore-flutter-compat.md +344 -0
- package/dist/serve/site-ui/docs/firestore-kotlin-compat/index.html +319 -0
- package/dist/serve/site-ui/docs/firestore-kotlin-compat.md +344 -0
- package/dist/serve/site-ui/docs/firestore-swift-compat/index.html +490 -0
- package/dist/serve/site-ui/docs/firestore-swift-compat.md +517 -0
- package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/backend-bundlers/index.html +105 -0
- package/dist/serve/site-ui/docs/get-started/backend-bundlers.md +165 -0
- package/dist/serve/site-ui/docs/get-started/flutter/index.html +98 -0
- package/dist/serve/site-ui/docs/get-started/flutter.md +105 -0
- 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 +1 -1
- package/dist/serve/site-ui/docs/get-started/start-building/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/vite/index.html +1 -1
- package/dist/serve/site-ui/docs/index.json +3211 -1471
- package/dist/serve/site-ui/docs/messaging-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +4 -3
- package/dist/serve/site-ui/docs/observe/resolve-runtime-status.md +3 -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/observe/switch-and-impersonate-identities/index.html +110 -0
- package/dist/serve/site-ui/docs/observe/switch-and-impersonate-identities.md +134 -0
- package/dist/serve/site-ui/docs/overview/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +1 -1
- 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 +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-messaging-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +1 -1
- 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-analytics-reference-api/index.html +124 -0
- package/dist/serve/site-ui/docs/pyric-analytics-reference-api.md +287 -0
- package/dist/serve/site-ui/docs/pyric-app-check-reference-api/index.html +87 -0
- package/dist/serve/site-ui/docs/pyric-app-check-reference-api.md +199 -0
- 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 +6 -2
- package/dist/serve/site-ui/docs/pyric-auth-reference-api.md +2 -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 +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api.md +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-bundler-reference-api/index.html +56 -0
- package/dist/serve/site-ui/docs/pyric-cli-bundler-reference-api.md +72 -0
- package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +4 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api.md +3 -0
- 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 +4 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api.md +3 -0
- 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 +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-next-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api/index.html +1 -1
- 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 +34 -9
- package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api.md +16 -8
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +133 -93
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api.md +61 -1
- package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api.md +2 -2
- package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-database-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-firestore-lite-reference-api/index.html +559 -0
- package/dist/serve/site-ui/docs/pyric-firestore-lite-reference-api.md +1240 -0
- package/dist/serve/site-ui/docs/pyric-firestore-reference-api/index.html +40 -11
- package/dist/serve/site-ui/docs/pyric-firestore-reference-api.md +18 -8
- package/dist/serve/site-ui/docs/pyric-functions-reference-api/index.html +67 -0
- package/dist/serve/site-ui/docs/pyric-functions-reference-api.md +149 -0
- 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-performance-reference-api/index.html +35 -0
- package/dist/serve/site-ui/docs/pyric-performance-reference-api.md +69 -0
- package/dist/serve/site-ui/docs/pyric-remote-config-reference-api/index.html +132 -0
- package/dist/serve/site-ui/docs/pyric-remote-config-reference-api.md +307 -0
- package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +52 -17
- package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api.md +48 -9
- 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 +239 -49
- package/dist/serve/site-ui/docs/pyric-sandbox-reference-api.md +148 -31
- package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +22 -4
- package/dist/serve/site-ui/docs/pyric-storage-reference-api.md +25 -3
- package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +26 -96
- package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api.md +20 -51
- 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 +2 -2
- package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api.md +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 +2 -2
- package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api/index.html +124 -26
- package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api.md +58 -5
- 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 +4 -5
- package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api.md +3 -4
- 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/reference/cli/index.html +6 -3
- package/dist/serve/site-ui/docs/reference/cli.md +8 -2
- package/dist/serve/site-ui/docs/rules-compat/index.html +10 -2
- package/dist/serve/site-ui/docs/rules-compat.md +9 -1
- 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 +13 -13
- package/dist/serve/site-ui/docs/storage-compat.md +12 -12
- 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/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/firestore/index.html +1 -1
- package/dist/serve/site-ui/llms.txt +13 -0
- package/dist/serve/site-ui/rtdb/index.html +1 -1
- package/dist/serve/site-ui/settings/index.html +1 -1
- package/dist/serve/site-ui/storage/index.html +1 -1
- package/dist/serve/site-ui/studio/index.html +1 -1
- package/dist/serve/site-ui/traffic/index.html +1 -1
- package/dist/serve/studio/disk-workspace.d.ts.map +1 -1
- package/dist/serve/studio/disk-workspace.js +64 -2
- package/dist/serve/studio/disk-workspace.js.map +1 -1
- package/dist/serve/vite-plugin.d.ts +7 -7
- package/dist/serve/vite-plugin.js +1 -1
- package/dist/serve/vite-plugin.js.map +1 -1
- package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
- package/dist/serve/vite-sandbox-generation.js +12 -0
- package/dist/serve/vite-sandbox-generation.js.map +1 -1
- package/dist/serve/worker/client/auth.js +1 -2
- package/dist/serve/worker/client/auth.js.map +1 -1
- package/dist/serve/worker/client/core.d.ts +21 -1
- package/dist/serve/worker/client/core.d.ts.map +1 -1
- package/dist/serve/worker/client/core.js +79 -3
- package/dist/serve/worker/client/core.js.map +1 -1
- package/dist/serve/worker/client.d.ts +1 -1
- package/dist/serve/worker/client.d.ts.map +1 -1
- package/dist/serve/worker/client.js +1 -1
- package/dist/serve/worker/client.js.map +1 -1
- package/dist/serve/worker/context-resolver.d.ts +30 -0
- package/dist/serve/worker/context-resolver.d.ts.map +1 -0
- package/dist/serve/worker/context-resolver.js +44 -0
- package/dist/serve/worker/context-resolver.js.map +1 -0
- package/dist/serve/worker/entry.js +23 -19
- package/dist/serve/worker/entry.js.map +1 -1
- package/dist/serve/worker/host/core.d.ts +1 -0
- package/dist/serve/worker/host/core.d.ts.map +1 -1
- package/dist/serve/worker/host/core.js +12 -6
- package/dist/serve/worker/host/core.js.map +1 -1
- package/dist/serve/worker/host/storage.js +2 -2
- package/dist/serve/worker/host-auth.js +1 -2
- package/dist/serve/worker/host-auth.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 +2 -2
- package/dist/serve/worker/index.js.map +1 -1
- package/dist/serve/worker/port-lifecycle.d.ts +18 -0
- package/dist/serve/worker/port-lifecycle.d.ts.map +1 -0
- package/dist/serve/worker/port-lifecycle.js +28 -0
- package/dist/serve/worker/port-lifecycle.js.map +1 -0
- package/dist/serve/worker/serve-init.d.ts.map +1 -1
- package/dist/serve/worker/serve-init.js +8 -2
- package/dist/serve/worker/serve-init.js.map +1 -1
- package/dist/verify/fixture.d.ts +1 -1
- package/package.json +16 -5
- package/src/assurance/.generated/conformance-verdicts.ts +238 -1
- package/src/bridge/client/dispatch.ts +52 -56
- package/src/bridge/client/tool-family-factories.ts +34 -0
- package/src/bridge/server/mcp-contract.ts +15 -59
- package/src/bridge/server/peer.ts +24 -1
- package/src/bridge/server/tool-family-factories.ts +40 -0
- package/src/bridge/server/tool-metadata.ts +29 -61
- package/src/bridge/tool-families.generated.ts +17 -0
- package/src/bridge/tool-families.ts +87 -0
- package/src/bridge/tool-family-records/conformance.ts +6 -0
- package/src/bridge/tool-family-records/firestore-data.ts +15 -0
- package/src/bridge/tool-family-records/firestore-inspect.ts +6 -0
- package/src/bridge/tool-family-records/firestore-rules.ts +15 -0
- package/src/bridge/tool-family-records/firestore-simulator.ts +16 -0
- package/src/bridge/tool-family-records/rtdb-inspection.ts +6 -0
- package/src/bundler/externals.ts +55 -0
- package/src/bundler/index.ts +21 -0
- package/src/cli/cli.test.ts +0 -44
- package/src/cli/inlined-sdk-scanner.ts +77 -0
- package/src/cli/sandbox-interlock.ts +167 -0
- package/src/cli/sandbox-runner.ts +37 -26
- package/src/cli/serve.ts +68 -69
- package/src/cli/unsupported-runtime.ts +68 -0
- package/src/conformance/.generated/can-i-use-browser.ts +2 -2
- package/src/conformance/.generated/can-i-use.ts +2 -2
- package/src/conformance/.generated/conformance-docs.ts +1 -1
- package/src/functions-rtdb/child.ts +115 -21
- package/src/functions-rtdb/development-runtime.ts +4 -0
- package/src/google-endpoints.ts +155 -0
- package/src/next/runtime-env.ts +5 -0
- package/src/next/with-pyric.ts +1 -1
- package/src/register/beacon.ts +232 -0
- package/src/register/index.ts +68 -6
- package/src/register/net-guard.ts +567 -0
- package/src/serve/ai-diagnostics-relay.ts +243 -0
- package/src/serve/ai-proxy.ts +327 -0
- package/src/serve/ai-status.ts +109 -0
- package/src/serve/ai-terminal-blocks.ts +210 -0
- package/src/serve/ai-terminal-text.ts +52 -0
- package/src/serve/beacon-route.ts +141 -0
- package/src/serve/entries/active-auth-registry.ts +56 -0
- package/src/serve/entries/active-auth.ts +100 -0
- package/src/serve/entries/auth-helper-core.ts +5 -0
- package/src/serve/entries/auth-helper-dom.ts +26 -2
- package/src/serve/entries/auth.ts +8 -0
- package/src/serve/entries/bridge-url.ts +1 -1
- package/src/serve/entries/init.ts +78 -3
- package/src/serve/entries/runtime.ts +10 -0
- package/src/serve/namespace.ts +73 -140
- package/src/serve/runtime/chip-config.ts +16 -2
- package/src/serve/runtime/chip-dialog.ts +366 -0
- package/src/serve/runtime/chip-install.ts +10 -4
- package/src/serve/runtime/chip-user-search.ts +391 -0
- package/src/serve/runtime/chip.ts +140 -15
- package/src/serve/runtime/identity.ts +26 -0
- package/src/serve/sandbox-session.ts +9 -0
- package/src/serve/studio/disk-workspace.ts +76 -2
- package/src/serve/vite-plugin.ts +8 -8
- package/src/serve/vite-sandbox-generation.ts +15 -0
- package/src/serve/worker/client/auth.ts +1 -1
- package/src/serve/worker/client/core.ts +80 -3
- package/src/serve/worker/client.ts +1 -1
- package/src/serve/worker/context-resolver.ts +60 -0
- package/src/serve/worker/entry.ts +22 -18
- package/src/serve/worker/host/core.ts +9 -7
- package/src/serve/worker/host/storage.ts +2 -2
- package/src/serve/worker/host-auth.ts +1 -1
- package/src/serve/worker/index.ts +4 -1
- package/src/serve/worker/port-lifecycle.ts +45 -0
- package/src/serve/worker/serve-init.ts +9 -2
- package/src/verify/fixture.ts +1 -1
- package/dist/serve/site-ui/_astro/app.B52xr-DK.js +0 -1
- package/dist/serve/site-ui/_astro/app.DWBraPUw.js +0 -12
- package/dist/serve/site-ui/_astro/sandbox-controls.DEpnKg-O.js +0 -1169
- package/dist/serve/site-ui/_astro/writes.rpjrFzmu.js +0 -102
package/README.md
CHANGED
|
@@ -2,50 +2,39 @@
|
|
|
2
2
|
<img src="https://pyric.dev/pyric-logo.svg" alt="Pyric" width="180" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
<h1 align="center">A
|
|
5
|
+
<h1 align="center">A Firebase that runs inside your app</h1>
|
|
6
6
|
|
|
7
|
-
<p align="center">Keep the same <code>firebase/*</code> code.
|
|
7
|
+
<p align="center">Keep the same <code>firebase/*</code> code. During <code>vite dev</code> those imports resolve to a local backend running in the page. A production build ships the real Firebase SDK, unchanged.</p>
|
|
8
8
|
|
|
9
9
|
<p align="center"><a href="https://pyric.dev">pyric.dev</a></p>
|
|
10
10
|
|
|
11
11
|
<br />
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Application code stays canonical Firebase:
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
npx plugins add davideast/pyric
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Antigravity CLI and OpenCode use the standalone skill installer:
|
|
15
|
+
```ts
|
|
16
|
+
// src/firebase.ts
|
|
17
|
+
import { initializeApp } from 'firebase/app';
|
|
18
|
+
import { getAuth } from 'firebase/auth';
|
|
19
|
+
import { getFirestore } from 'firebase/firestore';
|
|
26
20
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
const app = initializeApp({
|
|
22
|
+
apiKey: import.meta.env.VITE_FIREBASE_API_KEY,
|
|
23
|
+
authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN,
|
|
24
|
+
projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID,
|
|
25
|
+
});
|
|
30
26
|
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
export const auth = getAuth(app);
|
|
28
|
+
export const db = getFirestore(app);
|
|
33
29
|
```
|
|
34
30
|
|
|
35
|
-
|
|
31
|
+
Run the Vite development server and supported Firebase imports resolve to a browser-local backend: Auth, Firestore with Security Rules, persistence in IndexedDB, one SharedWorker backend shared by every tab on the dev origin. Run a normal production build and those imports resolve to Firebase again. The application source does not branch between the two, and the local mirror never connects to a production project.
|
|
36
32
|
|
|
37
|
-
|
|
38
|
-
|---|---|
|
|
39
|
-
| Codex | `$pyric` |
|
|
40
|
-
| Claude Code | `/pyric:pyric` |
|
|
41
|
-
| Antigravity CLI | `/pyric` |
|
|
42
|
-
| OpenCode | `/pyric` |
|
|
33
|
+
Coding agents get the same backend. A [skill](#start-with-a-coding-agent) sets up the sandbox end to end (`npx plugins add davideast/pyric`, then `/pyric`), and an opt-in MCP bridge lets an agent seed, inspect, and change the backend the app is already running against. `can-i-use` answers what conforms to real Firebase before the agent builds on it.
|
|
43
34
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
The skill chooses the project launcher, starts one local sandbox bridge, opens the application, and confirms that the browser sandbox is connected.
|
|
35
|
+
<img width="1512" height="947" alt="Pyric Studio showing local data, requests, authentication state, and Security Rules verdicts" src="https://github.com/user-attachments/assets/cb4a219c-c5f0-4fb7-8904-996416c0a79c" />
|
|
47
36
|
|
|
48
|
-
##
|
|
37
|
+
## Create a new app
|
|
49
38
|
|
|
50
39
|
Create a Vite application with canonical Firebase imports, Firestore rules, and the Pyric development plugin already configured:
|
|
51
40
|
|
|
@@ -82,70 +71,69 @@ Start the normal development server:
|
|
|
82
71
|
npm run dev
|
|
83
72
|
```
|
|
84
73
|
|
|
85
|
-
During `vite dev`, the plugin swaps supported `firebase/*` modules at resolution time.
|
|
86
|
-
|
|
87
|
-
Pyric Studio is available on the Vite origin at `/__pyric/ui/studio`. It opens the same backend used by the application.
|
|
74
|
+
During `vite dev`, the plugin swaps supported `firebase/*` modules at resolution time. Pyric Studio is available on the Vite origin at `/__pyric/ui/studio`. It opens the same backend used by the application.
|
|
88
75
|
|
|
89
76
|
For a static application or a Node process, `pyric sandbox` provides the same development-only package swap without the Vite plugin. The [CLI reference](packages/site-docs/src/content/reference/cli.md) documents those paths and every command.
|
|
90
77
|
|
|
91
|
-
##
|
|
92
|
-
|
|
93
|
-
Application code continues to import Firebase:
|
|
94
|
-
|
|
95
|
-
```ts
|
|
96
|
-
// src/firebase.ts
|
|
97
|
-
import { initializeApp } from 'firebase/app';
|
|
98
|
-
import { getAuth } from 'firebase/auth';
|
|
99
|
-
import { getFirestore } from 'firebase/firestore';
|
|
78
|
+
## Start with a coding agent
|
|
100
79
|
|
|
101
|
-
|
|
102
|
-
apiKey: import.meta.env.VITE_FIREBASE_API_KEY,
|
|
103
|
-
authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN,
|
|
104
|
-
projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID,
|
|
105
|
-
});
|
|
80
|
+
Install the Pyric plugin:
|
|
106
81
|
|
|
107
|
-
|
|
108
|
-
|
|
82
|
+
```bash
|
|
83
|
+
npx plugins add davideast/pyric
|
|
109
84
|
```
|
|
110
85
|
|
|
111
|
-
|
|
86
|
+
Antigravity CLI and OpenCode use the standalone skill installer:
|
|
112
87
|
|
|
113
|
-
|
|
88
|
+
```bash
|
|
89
|
+
# Antigravity CLI
|
|
90
|
+
npx skills add https://github.com/davideast/pyric/tree/main/pyric-plugin/skills/pyric --agent antigravity-cli
|
|
114
91
|
|
|
115
|
-
|
|
92
|
+
# OpenCode
|
|
93
|
+
npx skills add https://github.com/davideast/pyric/tree/main/pyric-plugin/skills/pyric --agent opencode
|
|
94
|
+
```
|
|
116
95
|
|
|
117
|
-
|
|
96
|
+
Then invoke the skill:
|
|
118
97
|
|
|
119
|
-
|
|
98
|
+
| Agent | Enter |
|
|
99
|
+
|---|---|
|
|
100
|
+
| Codex | `$pyric` |
|
|
101
|
+
| Claude Code | `/pyric:pyric` |
|
|
102
|
+
| Antigravity CLI | `/pyric` |
|
|
103
|
+
| OpenCode | `/pyric` |
|
|
120
104
|
|
|
121
|
-
The
|
|
105
|
+
The leading `$` or `/` is part of the command.
|
|
122
106
|
|
|
123
|
-
|
|
107
|
+
The skill chooses the project launcher, starts one local sandbox bridge, opens the application, and confirms that the browser sandbox is connected.
|
|
108
|
+
|
|
109
|
+
An agent can also work through the MCP bridge directly. It keeps writing the same Firebase code while inspecting and changing the backend the application is already using. Agent access is opt-in:
|
|
124
110
|
|
|
125
111
|
```ts
|
|
126
112
|
pyric({
|
|
127
|
-
|
|
128
|
-
seed: 'seed.json',
|
|
113
|
+
bridge: true
|
|
129
114
|
});
|
|
130
115
|
```
|
|
131
116
|
|
|
132
|
-
|
|
117
|
+
The bridge mounts on the Vite development origin and routes agent operations to the same SharedWorker backend used by the application and Studio. This protects the local workflow, not an independently credentialed process. A coding agent with production Firebase credentials or deployment access can still affect production outside Pyric.
|
|
118
|
+
|
|
119
|
+
## Monitor the local environment in Pyric Studio
|
|
120
|
+
|
|
121
|
+
Pyric Studio shows local data, requests, authentication state, Security Rules verdicts, and denied operations. Open `/__pyric/ui/studio` on the development server and reproduce the failure. A denied request includes the path and verdict needed to correct the rule or the application code.
|
|
133
122
|
|
|
134
|
-
|
|
123
|
+
The Vite plugin discovers the Firestore rules path from `firebase.json`, or falls back to `firestore.rules`. Saving that file replaces the active local ruleset without a production deploy. A parse failure leaves the last valid ruleset active and reports the error in the development server.
|
|
135
124
|
|
|
136
|
-
|
|
125
|
+
State and test identities stay browser-local by default. Add `persist: true` to write a committable `.pyric/state/state.json`, or use `seed` to start from a known scenario:
|
|
137
126
|
|
|
138
127
|
```ts
|
|
139
|
-
pyric({
|
|
140
|
-
|
|
128
|
+
pyric({
|
|
129
|
+
persist: true,
|
|
130
|
+
seed: 'seed.json',
|
|
141
131
|
});
|
|
142
132
|
```
|
|
143
133
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
This protects the local workflow, not an independently credentialed process. A coding agent with production Firebase credentials or deployment access can still affect production outside Pyric.
|
|
134
|
+
See [persistence and multi-tab behavior](packages/site-docs/src/content/observe/shape-your-data.md) for reset and seed precedence.
|
|
147
135
|
|
|
148
|
-
## Verify the rules against production
|
|
136
|
+
## Verify the rules against production
|
|
149
137
|
|
|
150
138
|
Development sessions capture Firestore and Realtime Database operations in `.pyric/last-session.json` by default. Replay those requests against candidate rules before deployment:
|
|
151
139
|
|
|
@@ -153,7 +141,7 @@ Development sessions capture Firestore and Realtime Database operations in `.pyr
|
|
|
153
141
|
npx pyric verify
|
|
154
142
|
```
|
|
155
143
|
|
|
156
|
-
The default engine runs locally. The optional Firestore Rules Test API engine sends derived rule cases to Google's hosted evaluator when production-authority verification is needed. It verifies rules and does not deploy them. See [verify against a captured session](packages/
|
|
144
|
+
The default engine runs locally. The optional Firestore Rules Test API engine sends derived rule cases to Google's hosted evaluator when production-authority verification is needed. It verifies rules and does not deploy them. See [verify against a captured session](packages/site-docs/src/content/ship/ship-to-production.md).
|
|
157
145
|
|
|
158
146
|
## Ship the same application code
|
|
159
147
|
|
|
@@ -165,37 +153,24 @@ npm run build
|
|
|
165
153
|
|
|
166
154
|
The built application contains the real Firebase SDK and uses the Firebase configuration already present in the source. Deploy the build, rules, and indexes with `firebase-tools` or the Firebase Console. Pyric has no production deployment path.
|
|
167
155
|
|
|
156
|
+
The mirrored data services do not connect to a production Firebase project. Local writes cannot delete production data or create Firebase usage charges, and local rules changes do not deploy. Pyric owns the development sandbox and verification workflow. Firebase owns production, with `firebase-tools` or the Firebase Console handling deployment.
|
|
157
|
+
|
|
158
|
+
Normal Auth, Firestore, Realtime Database, Storage, Messaging, and Firebase AI Logic usage still belongs in the [Firebase documentation](https://firebase.google.com/docs). Pyric documents the parts that differ locally, including supported behavior, Security Rules, persistence, inspection, verification, and known gaps. See [use the Vite plugin](packages/site-docs/src/content/get-started/vite.md) for the complete plugin contract.
|
|
159
|
+
|
|
168
160
|
## Check what Pyric mirrors
|
|
169
161
|
|
|
170
162
|
Pyric is an independent implementation of observable Firebase behavior. Conformance evidence records what has been compared with Firebase and keeps five outcomes distinct: conforms, documented divergence, bug, unsupported, and unverified. The evidence is a floor, not a claim that every Firebase behavior has been measured.
|
|
171
163
|
|
|
172
|
-
Ask about a developer-facing feature
|
|
164
|
+
Ask about a developer-facing feature:
|
|
173
165
|
|
|
174
166
|
```bash
|
|
175
167
|
npx pyric can-i-use getAfter
|
|
176
168
|
npx pyric can-i-use firestore-rules/request.query --json
|
|
177
169
|
```
|
|
178
170
|
|
|
179
|
-
The result reports availability, Firebase fidelity, and assurance eligibility as separate axes. Exact names succeed;
|
|
180
|
-
|
|
181
|
-
Documentation and other Node consumers can bind the same feature name to the
|
|
182
|
-
published import that exposes it, without maintaining a second surface map:
|
|
183
|
-
|
|
184
|
-
```ts
|
|
185
|
-
import { canIUse, canIUseImport } from '@pyric/cli/conformance';
|
|
186
|
-
|
|
187
|
-
const result = canIUse('getDownloadURL', { importPath: 'pyric/storage' });
|
|
188
|
-
const evidence = canIUseImport('pyric/storage');
|
|
189
|
-
const evidencePage = evidence && `/docs/${evidence.evidenceSlug}/`;
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
Each support result carries only census-proven `importPaths`; registry ownership
|
|
193
|
-
cannot invent package exports. `canIUseImport()` supplies the separate canonical
|
|
194
|
-
import-to-evidence join used by generated API documentation. An unrelated
|
|
195
|
-
import path returns no exact match rather than borrowing another surface's trust
|
|
196
|
-
claim.
|
|
171
|
+
The result reports availability, Firebase fidelity, and assurance eligibility as separate axes. Exact names succeed; fuzzy input prints labeled suggestions and exits nonzero instead of presenting a guess as a trust answer.
|
|
197
172
|
|
|
198
|
-
Read the generated [conformance scores](https://pyric.dev/docs/conformance-scores/) and the service matrices in the site's Conformance section. They are built from the same canonical registry used by assurance and `canIUse
|
|
173
|
+
Read the generated [conformance scores](https://pyric.dev/docs/conformance-scores/) and the service matrices in the site's Conformance section. They are built from the same canonical registry used by assurance and `canIUse`. Node consumers can query the same registry through [`@pyric/cli/conformance`](packages/site-docs/src/content/reference/cli.md). The [versioning and compatibility policy](packages/site-docs/src/content/trust/versioning-and-compatibility.md) explains the release boundary.
|
|
199
174
|
|
|
200
175
|
## Stability
|
|
201
176
|
|
|
@@ -212,4 +187,4 @@ bun run test
|
|
|
212
187
|
bun run compat:check
|
|
213
188
|
```
|
|
214
189
|
|
|
215
|
-
See [
|
|
190
|
+
See [CONTEXT.md](CONTEXT.md) and [AGENTS.md](AGENTS.md) before changing the codebase.
|
|
@@ -393,6 +393,136 @@ export declare const CONFORMANCE_VERDICTS: {
|
|
|
393
393
|
readonly "firestore#97": "supported";
|
|
394
394
|
readonly "firestore#98": "supported";
|
|
395
395
|
readonly "firestore#99": "supported";
|
|
396
|
+
readonly "firestore-flutter#1": "supported";
|
|
397
|
+
readonly "firestore-flutter#10": "qualified";
|
|
398
|
+
readonly "firestore-flutter#11": "supported";
|
|
399
|
+
readonly "firestore-flutter#12": "qualified";
|
|
400
|
+
readonly "firestore-flutter#13": "qualified";
|
|
401
|
+
readonly "firestore-flutter#14": "supported";
|
|
402
|
+
readonly "firestore-flutter#15": "supported";
|
|
403
|
+
readonly "firestore-flutter#16": "supported";
|
|
404
|
+
readonly "firestore-flutter#17": "supported";
|
|
405
|
+
readonly "firestore-flutter#18": "supported";
|
|
406
|
+
readonly "firestore-flutter#19": "supported";
|
|
407
|
+
readonly "firestore-flutter#2": "supported";
|
|
408
|
+
readonly "firestore-flutter#20": "supported";
|
|
409
|
+
readonly "firestore-flutter#21": "supported";
|
|
410
|
+
readonly "firestore-flutter#22": "supported";
|
|
411
|
+
readonly "firestore-flutter#23": "supported";
|
|
412
|
+
readonly "firestore-flutter#24": "supported";
|
|
413
|
+
readonly "firestore-flutter#25": "supported";
|
|
414
|
+
readonly "firestore-flutter#26": "supported";
|
|
415
|
+
readonly "firestore-flutter#27": "supported";
|
|
416
|
+
readonly "firestore-flutter#28": "supported";
|
|
417
|
+
readonly "firestore-flutter#29": "supported";
|
|
418
|
+
readonly "firestore-flutter#3": "supported";
|
|
419
|
+
readonly "firestore-flutter#30": "supported";
|
|
420
|
+
readonly "firestore-flutter#31": "supported";
|
|
421
|
+
readonly "firestore-flutter#32": "supported";
|
|
422
|
+
readonly "firestore-flutter#33": "supported";
|
|
423
|
+
readonly "firestore-flutter#34": "supported";
|
|
424
|
+
readonly "firestore-flutter#35": "supported";
|
|
425
|
+
readonly "firestore-flutter#36": "supported";
|
|
426
|
+
readonly "firestore-flutter#37": "supported";
|
|
427
|
+
readonly "firestore-flutter#38": "supported";
|
|
428
|
+
readonly "firestore-flutter#39": "supported";
|
|
429
|
+
readonly "firestore-flutter#4": "supported";
|
|
430
|
+
readonly "firestore-flutter#40": "supported";
|
|
431
|
+
readonly "firestore-flutter#41": "supported";
|
|
432
|
+
readonly "firestore-flutter#42": "supported";
|
|
433
|
+
readonly "firestore-flutter#43": "supported";
|
|
434
|
+
readonly "firestore-flutter#44": "supported";
|
|
435
|
+
readonly "firestore-flutter#45": "supported";
|
|
436
|
+
readonly "firestore-flutter#46": "supported";
|
|
437
|
+
readonly "firestore-flutter#47": "supported";
|
|
438
|
+
readonly "firestore-flutter#48": "supported";
|
|
439
|
+
readonly "firestore-flutter#49": "supported";
|
|
440
|
+
readonly "firestore-flutter#5": "supported";
|
|
441
|
+
readonly "firestore-flutter#50": "supported";
|
|
442
|
+
readonly "firestore-flutter#51": "supported";
|
|
443
|
+
readonly "firestore-flutter#52": "supported";
|
|
444
|
+
readonly "firestore-flutter#53": "qualified";
|
|
445
|
+
readonly "firestore-flutter#54": "supported";
|
|
446
|
+
readonly "firestore-flutter#55": "supported";
|
|
447
|
+
readonly "firestore-flutter#56": "supported";
|
|
448
|
+
readonly "firestore-flutter#57": "supported";
|
|
449
|
+
readonly "firestore-flutter#58": "supported";
|
|
450
|
+
readonly "firestore-flutter#59": "supported";
|
|
451
|
+
readonly "firestore-flutter#6": "supported";
|
|
452
|
+
readonly "firestore-flutter#60": "supported";
|
|
453
|
+
readonly "firestore-flutter#61": "supported";
|
|
454
|
+
readonly "firestore-flutter#62": "supported";
|
|
455
|
+
readonly "firestore-flutter#63": "supported";
|
|
456
|
+
readonly "firestore-flutter#64": "supported";
|
|
457
|
+
readonly "firestore-flutter#65": "supported";
|
|
458
|
+
readonly "firestore-flutter#7": "supported";
|
|
459
|
+
readonly "firestore-flutter#8": "supported";
|
|
460
|
+
readonly "firestore-flutter#9": "qualified";
|
|
461
|
+
readonly "firestore-kotlin#1": "supported";
|
|
462
|
+
readonly "firestore-kotlin#10": "qualified";
|
|
463
|
+
readonly "firestore-kotlin#11": "supported";
|
|
464
|
+
readonly "firestore-kotlin#12": "qualified";
|
|
465
|
+
readonly "firestore-kotlin#13": "qualified";
|
|
466
|
+
readonly "firestore-kotlin#14": "supported";
|
|
467
|
+
readonly "firestore-kotlin#15": "supported";
|
|
468
|
+
readonly "firestore-kotlin#16": "supported";
|
|
469
|
+
readonly "firestore-kotlin#17": "supported";
|
|
470
|
+
readonly "firestore-kotlin#18": "supported";
|
|
471
|
+
readonly "firestore-kotlin#19": "supported";
|
|
472
|
+
readonly "firestore-kotlin#2": "supported";
|
|
473
|
+
readonly "firestore-kotlin#20": "supported";
|
|
474
|
+
readonly "firestore-kotlin#21": "supported";
|
|
475
|
+
readonly "firestore-kotlin#22": "supported";
|
|
476
|
+
readonly "firestore-kotlin#23": "supported";
|
|
477
|
+
readonly "firestore-kotlin#24": "supported";
|
|
478
|
+
readonly "firestore-kotlin#25": "supported";
|
|
479
|
+
readonly "firestore-kotlin#26": "supported";
|
|
480
|
+
readonly "firestore-kotlin#27": "supported";
|
|
481
|
+
readonly "firestore-kotlin#28": "supported";
|
|
482
|
+
readonly "firestore-kotlin#29": "supported";
|
|
483
|
+
readonly "firestore-kotlin#3": "supported";
|
|
484
|
+
readonly "firestore-kotlin#30": "supported";
|
|
485
|
+
readonly "firestore-kotlin#31": "supported";
|
|
486
|
+
readonly "firestore-kotlin#32": "supported";
|
|
487
|
+
readonly "firestore-kotlin#33": "supported";
|
|
488
|
+
readonly "firestore-kotlin#34": "supported";
|
|
489
|
+
readonly "firestore-kotlin#35": "supported";
|
|
490
|
+
readonly "firestore-kotlin#36": "supported";
|
|
491
|
+
readonly "firestore-kotlin#37": "supported";
|
|
492
|
+
readonly "firestore-kotlin#38": "supported";
|
|
493
|
+
readonly "firestore-kotlin#39": "supported";
|
|
494
|
+
readonly "firestore-kotlin#4": "supported";
|
|
495
|
+
readonly "firestore-kotlin#40": "supported";
|
|
496
|
+
readonly "firestore-kotlin#41": "supported";
|
|
497
|
+
readonly "firestore-kotlin#42": "supported";
|
|
498
|
+
readonly "firestore-kotlin#43": "supported";
|
|
499
|
+
readonly "firestore-kotlin#44": "supported";
|
|
500
|
+
readonly "firestore-kotlin#45": "supported";
|
|
501
|
+
readonly "firestore-kotlin#46": "supported";
|
|
502
|
+
readonly "firestore-kotlin#47": "supported";
|
|
503
|
+
readonly "firestore-kotlin#48": "supported";
|
|
504
|
+
readonly "firestore-kotlin#49": "supported";
|
|
505
|
+
readonly "firestore-kotlin#5": "supported";
|
|
506
|
+
readonly "firestore-kotlin#50": "supported";
|
|
507
|
+
readonly "firestore-kotlin#51": "supported";
|
|
508
|
+
readonly "firestore-kotlin#52": "supported";
|
|
509
|
+
readonly "firestore-kotlin#53": "qualified";
|
|
510
|
+
readonly "firestore-kotlin#54": "supported";
|
|
511
|
+
readonly "firestore-kotlin#55": "supported";
|
|
512
|
+
readonly "firestore-kotlin#56": "supported";
|
|
513
|
+
readonly "firestore-kotlin#57": "supported";
|
|
514
|
+
readonly "firestore-kotlin#58": "supported";
|
|
515
|
+
readonly "firestore-kotlin#59": "supported";
|
|
516
|
+
readonly "firestore-kotlin#6": "supported";
|
|
517
|
+
readonly "firestore-kotlin#60": "supported";
|
|
518
|
+
readonly "firestore-kotlin#61": "supported";
|
|
519
|
+
readonly "firestore-kotlin#62": "supported";
|
|
520
|
+
readonly "firestore-kotlin#63": "supported";
|
|
521
|
+
readonly "firestore-kotlin#64": "supported";
|
|
522
|
+
readonly "firestore-kotlin#65": "supported";
|
|
523
|
+
readonly "firestore-kotlin#7": "supported";
|
|
524
|
+
readonly "firestore-kotlin#8": "supported";
|
|
525
|
+
readonly "firestore-kotlin#9": "qualified";
|
|
396
526
|
readonly "firestore-rules#160": "supported";
|
|
397
527
|
readonly "firestore-rules#161": "supported";
|
|
398
528
|
readonly "firestore-rules#162": "supported";
|
|
@@ -425,6 +555,111 @@ export declare const CONFORMANCE_VERDICTS: {
|
|
|
425
555
|
readonly "firestore-rules#189": "supported";
|
|
426
556
|
readonly "firestore-rules#190": "supported";
|
|
427
557
|
readonly "firestore-rules#191": "supported";
|
|
558
|
+
readonly "firestore-swift#1": "supported";
|
|
559
|
+
readonly "firestore-swift#10": "supported";
|
|
560
|
+
readonly "firestore-swift#100": "supported";
|
|
561
|
+
readonly "firestore-swift#101": "supported";
|
|
562
|
+
readonly "firestore-swift#102": "supported";
|
|
563
|
+
readonly "firestore-swift#103": "qualified";
|
|
564
|
+
readonly "firestore-swift#104": "qualified";
|
|
565
|
+
readonly "firestore-swift#105": "qualified";
|
|
566
|
+
readonly "firestore-swift#11": "supported";
|
|
567
|
+
readonly "firestore-swift#12": "supported";
|
|
568
|
+
readonly "firestore-swift#13": "supported";
|
|
569
|
+
readonly "firestore-swift#14": "supported";
|
|
570
|
+
readonly "firestore-swift#15": "qualified";
|
|
571
|
+
readonly "firestore-swift#16": "qualified";
|
|
572
|
+
readonly "firestore-swift#17": "supported";
|
|
573
|
+
readonly "firestore-swift#18": "qualified";
|
|
574
|
+
readonly "firestore-swift#19": "qualified";
|
|
575
|
+
readonly "firestore-swift#2": "supported";
|
|
576
|
+
readonly "firestore-swift#20": "qualified";
|
|
577
|
+
readonly "firestore-swift#21": "qualified";
|
|
578
|
+
readonly "firestore-swift#22": "supported";
|
|
579
|
+
readonly "firestore-swift#23": "supported";
|
|
580
|
+
readonly "firestore-swift#24": "supported";
|
|
581
|
+
readonly "firestore-swift#25": "supported";
|
|
582
|
+
readonly "firestore-swift#26": "supported";
|
|
583
|
+
readonly "firestore-swift#27": "supported";
|
|
584
|
+
readonly "firestore-swift#28": "supported";
|
|
585
|
+
readonly "firestore-swift#29": "supported";
|
|
586
|
+
readonly "firestore-swift#3": "supported";
|
|
587
|
+
readonly "firestore-swift#30": "supported";
|
|
588
|
+
readonly "firestore-swift#31": "supported";
|
|
589
|
+
readonly "firestore-swift#32": "supported";
|
|
590
|
+
readonly "firestore-swift#33": "supported";
|
|
591
|
+
readonly "firestore-swift#34": "supported";
|
|
592
|
+
readonly "firestore-swift#35": "supported";
|
|
593
|
+
readonly "firestore-swift#36": "supported";
|
|
594
|
+
readonly "firestore-swift#37": "supported";
|
|
595
|
+
readonly "firestore-swift#38": "supported";
|
|
596
|
+
readonly "firestore-swift#39": "supported";
|
|
597
|
+
readonly "firestore-swift#4": "supported";
|
|
598
|
+
readonly "firestore-swift#40": "supported";
|
|
599
|
+
readonly "firestore-swift#41": "supported";
|
|
600
|
+
readonly "firestore-swift#42": "supported";
|
|
601
|
+
readonly "firestore-swift#43": "supported";
|
|
602
|
+
readonly "firestore-swift#44": "supported";
|
|
603
|
+
readonly "firestore-swift#45": "supported";
|
|
604
|
+
readonly "firestore-swift#46": "supported";
|
|
605
|
+
readonly "firestore-swift#47": "supported";
|
|
606
|
+
readonly "firestore-swift#48": "supported";
|
|
607
|
+
readonly "firestore-swift#49": "supported";
|
|
608
|
+
readonly "firestore-swift#5": "supported";
|
|
609
|
+
readonly "firestore-swift#50": "supported";
|
|
610
|
+
readonly "firestore-swift#51": "supported";
|
|
611
|
+
readonly "firestore-swift#52": "supported";
|
|
612
|
+
readonly "firestore-swift#53": "supported";
|
|
613
|
+
readonly "firestore-swift#54": "supported";
|
|
614
|
+
readonly "firestore-swift#55": "supported";
|
|
615
|
+
readonly "firestore-swift#56": "supported";
|
|
616
|
+
readonly "firestore-swift#57": "supported";
|
|
617
|
+
readonly "firestore-swift#58": "supported";
|
|
618
|
+
readonly "firestore-swift#59": "supported";
|
|
619
|
+
readonly "firestore-swift#6": "supported";
|
|
620
|
+
readonly "firestore-swift#60": "supported";
|
|
621
|
+
readonly "firestore-swift#61": "supported";
|
|
622
|
+
readonly "firestore-swift#62": "supported";
|
|
623
|
+
readonly "firestore-swift#63": "supported";
|
|
624
|
+
readonly "firestore-swift#64": "supported";
|
|
625
|
+
readonly "firestore-swift#65": "supported";
|
|
626
|
+
readonly "firestore-swift#66": "supported";
|
|
627
|
+
readonly "firestore-swift#67": "supported";
|
|
628
|
+
readonly "firestore-swift#68": "supported";
|
|
629
|
+
readonly "firestore-swift#69": "supported";
|
|
630
|
+
readonly "firestore-swift#7": "supported";
|
|
631
|
+
readonly "firestore-swift#70": "supported";
|
|
632
|
+
readonly "firestore-swift#71": "supported";
|
|
633
|
+
readonly "firestore-swift#72": "supported";
|
|
634
|
+
readonly "firestore-swift#73": "supported";
|
|
635
|
+
readonly "firestore-swift#74": "supported";
|
|
636
|
+
readonly "firestore-swift#75": "supported";
|
|
637
|
+
readonly "firestore-swift#76": "supported";
|
|
638
|
+
readonly "firestore-swift#77": "supported";
|
|
639
|
+
readonly "firestore-swift#78": "supported";
|
|
640
|
+
readonly "firestore-swift#79": "supported";
|
|
641
|
+
readonly "firestore-swift#8": "supported";
|
|
642
|
+
readonly "firestore-swift#80": "supported";
|
|
643
|
+
readonly "firestore-swift#81": "supported";
|
|
644
|
+
readonly "firestore-swift#82": "supported";
|
|
645
|
+
readonly "firestore-swift#83": "supported";
|
|
646
|
+
readonly "firestore-swift#84": "supported";
|
|
647
|
+
readonly "firestore-swift#85": "supported";
|
|
648
|
+
readonly "firestore-swift#86": "supported";
|
|
649
|
+
readonly "firestore-swift#87": "supported";
|
|
650
|
+
readonly "firestore-swift#88": "supported";
|
|
651
|
+
readonly "firestore-swift#89": "supported";
|
|
652
|
+
readonly "firestore-swift#9": "supported";
|
|
653
|
+
readonly "firestore-swift#90": "supported";
|
|
654
|
+
readonly "firestore-swift#91": "supported";
|
|
655
|
+
readonly "firestore-swift#92": "supported";
|
|
656
|
+
readonly "firestore-swift#93": "supported";
|
|
657
|
+
readonly "firestore-swift#94": "supported";
|
|
658
|
+
readonly "firestore-swift#95": "supported";
|
|
659
|
+
readonly "firestore-swift#96": "supported";
|
|
660
|
+
readonly "firestore-swift#97": "supported";
|
|
661
|
+
readonly "firestore-swift#98": "supported";
|
|
662
|
+
readonly "firestore-swift#99": "supported";
|
|
428
663
|
readonly "firestore.binding.path-variable": "supported";
|
|
429
664
|
readonly "firestore.binding.request": "supported";
|
|
430
665
|
readonly "firestore.binding.request.auth": "supported";
|
|
@@ -446,7 +681,7 @@ export declare const CONFORMANCE_VERDICTS: {
|
|
|
446
681
|
readonly "firestore.function.cast.int": "supported";
|
|
447
682
|
readonly "firestore.function.cast.path": "supported";
|
|
448
683
|
readonly "firestore.function.cast.string": "supported";
|
|
449
|
-
readonly "firestore.function.debug": "
|
|
684
|
+
readonly "firestore.function.debug": "supported";
|
|
450
685
|
readonly "firestore.function.duration.abs": "supported";
|
|
451
686
|
readonly "firestore.function.duration.time": "supported";
|
|
452
687
|
readonly "firestore.function.duration.value": "supported";
|
|
@@ -1061,6 +1296,8 @@ export declare const CONFORMANCE_VERDICTS: {
|
|
|
1061
1296
|
readonly "storage-rules#130": "supported";
|
|
1062
1297
|
readonly "storage-rules#131": "supported";
|
|
1063
1298
|
readonly "storage-rules#132": "supported";
|
|
1299
|
+
readonly "storage-rules#133": "supported";
|
|
1300
|
+
readonly "storage-rules#134": "supported";
|
|
1064
1301
|
readonly "storage-rules#94": "supported";
|
|
1065
1302
|
readonly "storage-rules#95": "supported";
|
|
1066
1303
|
readonly "storage-rules#96": "supported";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance-verdicts.d.ts","sourceRoot":"","sources":["../../../src/assurance/.generated/conformance-verdicts.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;AAE3E,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"conformance-verdicts.d.ts","sourceRoot":"","sources":["../../../src/assurance/.generated/conformance-verdicts.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;AAE3E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA81CgC,CAAC"}
|