pyric 0.0.1 → 0.1.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -1
- package/dist/app/index.d.ts +81 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +78 -0
- package/dist/app/index.js.map +1 -0
- package/dist/auth/index.d.ts +346 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +701 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/prod-backend.d.ts +39 -0
- package/dist/auth/prod-backend.d.ts.map +1 -0
- package/dist/auth/prod-backend.js +179 -0
- package/dist/auth/prod-backend.js.map +1 -0
- package/dist/auth/providers.d.ts +107 -0
- package/dist/auth/providers.d.ts.map +1 -0
- package/dist/auth/providers.js +138 -0
- package/dist/auth/providers.js.map +1 -0
- package/dist/auth/sandbox-backend.d.ts +769 -0
- package/dist/auth/sandbox-backend.d.ts.map +1 -0
- package/dist/auth/sandbox-backend.js +1598 -0
- package/dist/auth/sandbox-backend.js.map +1 -0
- package/dist/auth/target.d.ts +40 -0
- package/dist/auth/target.d.ts.map +1 -0
- package/dist/auth/target.js +28 -0
- package/dist/auth/target.js.map +1 -0
- package/dist/auth/types.d.ts +252 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +26 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/database/constraints/atoms.d.ts +29 -0
- package/dist/database/constraints/atoms.d.ts.map +1 -0
- package/dist/database/constraints/atoms.js +43 -0
- package/dist/database/constraints/atoms.js.map +1 -0
- package/dist/database/constraints/compose.d.ts +16 -0
- package/dist/database/constraints/compose.d.ts.map +1 -0
- package/dist/database/constraints/compose.js +15 -0
- package/dist/database/constraints/compose.js.map +1 -0
- package/dist/database/constraints/data.d.ts +30 -0
- package/dist/database/constraints/data.d.ts.map +1 -0
- package/dist/database/constraints/data.js +46 -0
- package/dist/database/constraints/data.js.map +1 -0
- package/dist/database/constraints/document.d.ts +42 -0
- package/dist/database/constraints/document.d.ts.map +1 -0
- package/dist/database/constraints/document.js +86 -0
- package/dist/database/constraints/document.js.map +1 -0
- package/dist/database/constraints/game.d.ts +30 -0
- package/dist/database/constraints/game.d.ts.map +1 -0
- package/dist/database/constraints/game.js +49 -0
- package/dist/database/constraints/game.js.map +1 -0
- package/dist/database/constraints/index.d.ts +12 -0
- package/dist/database/constraints/index.d.ts.map +1 -0
- package/dist/database/constraints/index.js +9 -0
- package/dist/database/constraints/index.js.map +1 -0
- package/dist/database/constraints/policies.d.ts +16 -0
- package/dist/database/constraints/policies.d.ts.map +1 -0
- package/dist/database/constraints/policies.js +17 -0
- package/dist/database/constraints/policies.js.map +1 -0
- package/dist/database/constraints/ruleset.d.ts +5 -0
- package/dist/database/constraints/ruleset.d.ts.map +1 -0
- package/dist/database/constraints/ruleset.js +132 -0
- package/dist/database/constraints/ruleset.js.map +1 -0
- package/dist/database/constraints/schema.d.ts +17 -0
- package/dist/database/constraints/schema.d.ts.map +1 -0
- package/dist/database/constraints/schema.js +74 -0
- package/dist/database/constraints/schema.js.map +1 -0
- package/dist/database/constraints/types.d.ts +22 -0
- package/dist/database/constraints/types.d.ts.map +1 -0
- package/dist/database/constraints/types.js +2 -0
- package/dist/database/constraints/types.js.map +1 -0
- package/dist/database/crawl/handler.d.ts +7 -0
- package/dist/database/crawl/handler.d.ts.map +1 -0
- package/dist/database/crawl/handler.js +91 -0
- package/dist/database/crawl/handler.js.map +1 -0
- package/dist/database/crawl/semaphore.d.ts +9 -0
- package/dist/database/crawl/semaphore.d.ts.map +1 -0
- package/dist/database/crawl/semaphore.js +27 -0
- package/dist/database/crawl/semaphore.js.map +1 -0
- package/dist/database/crawl/spec.d.ts +33 -0
- package/dist/database/crawl/spec.d.ts.map +1 -0
- package/dist/database/crawl/spec.js +12 -0
- package/dist/database/crawl/spec.js.map +1 -0
- package/dist/database/data/handler.d.ts +9 -0
- package/dist/database/data/handler.d.ts.map +1 -0
- package/dist/database/data/handler.js +96 -0
- package/dist/database/data/handler.js.map +1 -0
- package/dist/database/data/spec.d.ts +77 -0
- package/dist/database/data/spec.d.ts.map +1 -0
- package/dist/database/data/spec.js +17 -0
- package/dist/database/data/spec.js.map +1 -0
- package/dist/database/data/validated.d.ts +8 -0
- package/dist/database/data/validated.d.ts.map +1 -0
- package/dist/database/data/validated.js +99 -0
- package/dist/database/data/validated.js.map +1 -0
- package/dist/database/grammar/RtdbExpr.ohm +98 -0
- package/dist/database/grammar/RtdbExpr.ohm.generated.d.ts +2 -0
- package/dist/database/grammar/RtdbExpr.ohm.generated.d.ts.map +1 -0
- package/dist/database/grammar/RtdbExpr.ohm.generated.js +103 -0
- package/dist/database/grammar/RtdbExpr.ohm.generated.js.map +1 -0
- package/dist/database/grammar/RtdbExprParser.d.ts +5 -0
- package/dist/database/grammar/RtdbExprParser.d.ts.map +1 -0
- package/dist/database/grammar/RtdbExprParser.js +53 -0
- package/dist/database/grammar/RtdbExprParser.js.map +1 -0
- package/dist/database/grammar/linter.d.ts +3 -0
- package/dist/database/grammar/linter.d.ts.map +1 -0
- package/dist/database/grammar/linter.js +66 -0
- package/dist/database/grammar/linter.js.map +1 -0
- package/dist/database/grammar/simulator.d.ts +31 -0
- package/dist/database/grammar/simulator.d.ts.map +1 -0
- package/dist/database/grammar/simulator.js +255 -0
- package/dist/database/grammar/simulator.js.map +1 -0
- package/dist/database/grammar/validator.d.ts +3 -0
- package/dist/database/grammar/validator.d.ts.map +1 -0
- package/dist/database/grammar/validator.js +84 -0
- package/dist/database/grammar/validator.js.map +1 -0
- package/dist/database/host.d.ts +50 -0
- package/dist/database/host.d.ts.map +1 -0
- package/dist/database/host.js +41 -0
- package/dist/database/host.js.map +1 -0
- package/dist/database/index.d.ts +40 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +47 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/initialize-from-app.d.ts +28 -0
- package/dist/database/initialize-from-app.d.ts.map +1 -0
- package/dist/database/initialize-from-app.js +23 -0
- package/dist/database/initialize-from-app.js.map +1 -0
- package/dist/database/ir/handler.d.ts +6 -0
- package/dist/database/ir/handler.d.ts.map +1 -0
- package/dist/database/ir/handler.js +52 -0
- package/dist/database/ir/handler.js.map +1 -0
- package/dist/database/ir/spec.d.ts +25 -0
- package/dist/database/ir/spec.d.ts.map +1 -0
- package/dist/database/ir/spec.js +11 -0
- package/dist/database/ir/spec.js.map +1 -0
- package/dist/database/mapper.d.ts +9 -0
- package/dist/database/mapper.d.ts.map +1 -0
- package/dist/database/mapper.js +115 -0
- package/dist/database/mapper.js.map +1 -0
- package/dist/database/modular.d.ts +604 -0
- package/dist/database/modular.d.ts.map +1 -0
- package/dist/database/modular.js +1226 -0
- package/dist/database/modular.js.map +1 -0
- package/dist/database/replay.d.ts +33 -0
- package/dist/database/replay.d.ts.map +1 -0
- package/dist/database/replay.js +124 -0
- package/dist/database/replay.js.map +1 -0
- package/dist/database/resolver.d.ts +4 -0
- package/dist/database/resolver.d.ts.map +1 -0
- package/dist/database/resolver.js +66 -0
- package/dist/database/resolver.js.map +1 -0
- package/dist/database/sandbox/backend.d.ts +403 -0
- package/dist/database/sandbox/backend.d.ts.map +1 -0
- package/dist/database/sandbox/backend.js +1467 -0
- package/dist/database/sandbox/backend.js.map +1 -0
- package/dist/database/sandbox/data-tree.d.ts +123 -0
- package/dist/database/sandbox/data-tree.d.ts.map +1 -0
- package/dist/database/sandbox/data-tree.js +310 -0
- package/dist/database/sandbox/data-tree.js.map +1 -0
- package/dist/database/sandbox/normalize.d.ts +77 -0
- package/dist/database/sandbox/normalize.d.ts.map +1 -0
- package/dist/database/sandbox/normalize.js +165 -0
- package/dist/database/sandbox/normalize.js.map +1 -0
- package/dist/database/sandbox/push-id.d.ts +32 -0
- package/dist/database/sandbox/push-id.d.ts.map +1 -0
- package/dist/database/sandbox/push-id.js +82 -0
- package/dist/database/sandbox/push-id.js.map +1 -0
- package/dist/database/sandbox/query.d.ts +175 -0
- package/dist/database/sandbox/query.d.ts.map +1 -0
- package/dist/database/sandbox/query.js +269 -0
- package/dist/database/sandbox/query.js.map +1 -0
- package/dist/database/sandbox/rules-eval.d.ts +69 -0
- package/dist/database/sandbox/rules-eval.d.ts.map +1 -0
- package/dist/database/sandbox/rules-eval.js +124 -0
- package/dist/database/sandbox/rules-eval.js.map +1 -0
- package/dist/database/sandbox/sentinels.d.ts +71 -0
- package/dist/database/sandbox/sentinels.d.ts.map +1 -0
- package/dist/database/sandbox/sentinels.js +92 -0
- package/dist/database/sandbox/sentinels.js.map +1 -0
- package/dist/database/simulation/handler.d.ts +6 -0
- package/dist/database/simulation/handler.d.ts.map +1 -0
- package/dist/database/simulation/handler.js +236 -0
- package/dist/database/simulation/handler.js.map +1 -0
- package/dist/database/simulation/spec.d.ts +69 -0
- package/dist/database/simulation/spec.d.ts.map +1 -0
- package/dist/database/simulation/spec.js +25 -0
- package/dist/database/simulation/spec.js.map +1 -0
- package/dist/database/tools.d.ts +22 -0
- package/dist/database/tools.d.ts.map +1 -0
- package/dist/database/tools.js +272 -0
- package/dist/database/tools.js.map +1 -0
- package/dist/database/types.d.ts +210 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +26 -0
- package/dist/database/types.js.map +1 -0
- package/dist/database/write/handler.d.ts +7 -0
- package/dist/database/write/handler.d.ts.map +1 -0
- package/dist/database/write/handler.js +42 -0
- package/dist/database/write/handler.js.map +1 -0
- package/dist/database/write/spec.d.ts +18 -0
- package/dist/database/write/spec.d.ts.map +1 -0
- package/dist/database/write/spec.js +7 -0
- package/dist/database/write/spec.js.map +1 -0
- package/dist/firestore/index.d.ts +533 -0
- package/dist/firestore/index.d.ts.map +1 -0
- package/dist/firestore/index.js +1536 -0
- package/dist/firestore/index.js.map +1 -0
- package/dist/firestore/tools.d.ts +67 -0
- package/dist/firestore/tools.d.ts.map +1 -0
- package/dist/firestore/tools.js +318 -0
- package/dist/firestore/tools.js.map +1 -0
- package/dist/firestore-values/index.d.ts +63 -0
- package/dist/firestore-values/index.d.ts.map +1 -0
- package/dist/firestore-values/index.js +148 -0
- package/dist/firestore-values/index.js.map +1 -0
- package/dist/project-scope.d.ts +5 -0
- package/dist/project-scope.d.ts.map +1 -0
- package/dist/project-scope.js +2 -0
- package/dist/project-scope.js.map +1 -0
- package/dist/rules/extract.d.ts +28 -0
- package/dist/rules/extract.d.ts.map +1 -0
- package/dist/rules/extract.js +25 -0
- package/dist/rules/extract.js.map +1 -0
- package/dist/rules/generators/assembler.d.ts +19 -0
- package/dist/rules/generators/assembler.d.ts.map +1 -0
- package/dist/rules/generators/assembler.js +292 -0
- package/dist/rules/generators/assembler.js.map +1 -0
- package/dist/rules/generators/expressions.d.ts +52 -0
- package/dist/rules/generators/expressions.d.ts.map +1 -0
- package/dist/rules/generators/expressions.js +117 -0
- package/dist/rules/generators/expressions.js.map +1 -0
- package/dist/rules/generators/grid.d.ts +22 -0
- package/dist/rules/generators/grid.d.ts.map +1 -0
- package/dist/rules/generators/grid.js +52 -0
- package/dist/rules/generators/grid.js.map +1 -0
- package/dist/rules/grammar/FirestoreAST.d.ts +129 -0
- package/dist/rules/grammar/FirestoreAST.d.ts.map +1 -0
- package/dist/rules/grammar/FirestoreAST.js +3 -0
- package/dist/rules/grammar/FirestoreAST.js.map +1 -0
- package/dist/rules/grammar/FirestoreAssembler.d.ts +5 -0
- package/dist/rules/grammar/FirestoreAssembler.d.ts.map +1 -0
- package/dist/rules/grammar/FirestoreAssembler.js +158 -0
- package/dist/rules/grammar/FirestoreAssembler.js.map +1 -0
- package/dist/rules/grammar/FirestoreParser.d.ts +46 -0
- package/dist/rules/grammar/FirestoreParser.d.ts.map +1 -0
- package/dist/rules/grammar/FirestoreParser.js +409 -0
- package/dist/rules/grammar/FirestoreParser.js.map +1 -0
- package/dist/rules/grammar/FirestoreRules.ohm +229 -0
- package/dist/rules/grammar/FirestoreRules.ohm.generated.d.ts +2 -0
- package/dist/rules/grammar/FirestoreRules.ohm.generated.d.ts.map +1 -0
- package/dist/rules/grammar/FirestoreRules.ohm.generated.js +234 -0
- package/dist/rules/grammar/FirestoreRules.ohm.generated.js.map +1 -0
- package/dist/rules/grammar/FirestoreValidator.d.ts +10 -0
- package/dist/rules/grammar/FirestoreValidator.d.ts.map +1 -0
- package/dist/rules/grammar/FirestoreValidator.js +482 -0
- package/dist/rules/grammar/FirestoreValidator.js.map +1 -0
- package/dist/rules/index.d.ts +67 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +80 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/indexes/extract/annotation-collect.d.ts +42 -0
- package/dist/rules/indexes/extract/annotation-collect.d.ts.map +1 -0
- package/dist/rules/indexes/extract/annotation-collect.js +69 -0
- package/dist/rules/indexes/extract/annotation-collect.js.map +1 -0
- package/dist/rules/indexes/extract/annotations.d.ts +50 -0
- package/dist/rules/indexes/extract/annotations.d.ts.map +1 -0
- package/dist/rules/indexes/extract/annotations.js +144 -0
- package/dist/rules/indexes/extract/annotations.js.map +1 -0
- package/dist/rules/indexes/extract/ast.d.ts +54 -0
- package/dist/rules/indexes/extract/ast.d.ts.map +1 -0
- package/dist/rules/indexes/extract/ast.js +119 -0
- package/dist/rules/indexes/extract/ast.js.map +1 -0
- package/dist/rules/indexes/extract/classify.d.ts +41 -0
- package/dist/rules/indexes/extract/classify.d.ts.map +1 -0
- package/dist/rules/indexes/extract/classify.js +138 -0
- package/dist/rules/indexes/extract/classify.js.map +1 -0
- package/dist/rules/indexes/extract/composite.d.ts +38 -0
- package/dist/rules/indexes/extract/composite.d.ts.map +1 -0
- package/dist/rules/indexes/extract/composite.js +85 -0
- package/dist/rules/indexes/extract/composite.js.map +1 -0
- package/dist/rules/indexes/extract/dataflow.d.ts +45 -0
- package/dist/rules/indexes/extract/dataflow.d.ts.map +1 -0
- package/dist/rules/indexes/extract/dataflow.js +200 -0
- package/dist/rules/indexes/extract/dataflow.js.map +1 -0
- package/dist/rules/indexes/extract/enumerate.d.ts +41 -0
- package/dist/rules/indexes/extract/enumerate.d.ts.map +1 -0
- package/dist/rules/indexes/extract/enumerate.js +163 -0
- package/dist/rules/indexes/extract/enumerate.js.map +1 -0
- package/dist/rules/indexes/extract/extractor.d.ts +3 -0
- package/dist/rules/indexes/extract/extractor.d.ts.map +1 -0
- package/dist/rules/indexes/extract/extractor.js +274 -0
- package/dist/rules/indexes/extract/extractor.js.map +1 -0
- package/dist/rules/indexes/extract/types.d.ts +211 -0
- package/dist/rules/indexes/extract/types.d.ts.map +1 -0
- package/dist/rules/indexes/extract/types.js +14 -0
- package/dist/rules/indexes/extract/types.js.map +1 -0
- package/dist/rules/indexes/extractHandler.d.ts +16 -0
- package/dist/rules/indexes/extractHandler.d.ts.map +1 -0
- package/dist/rules/indexes/extractHandler.js +100 -0
- package/dist/rules/indexes/extractHandler.js.map +1 -0
- package/dist/rules/indexes/extractTool.d.ts +15 -0
- package/dist/rules/indexes/extractTool.d.ts.map +1 -0
- package/dist/rules/indexes/extractTool.js +55 -0
- package/dist/rules/indexes/extractTool.js.map +1 -0
- package/dist/rules/indexes/types.d.ts +71 -0
- package/dist/rules/indexes/types.d.ts.map +1 -0
- package/dist/rules/indexes/types.js +15 -0
- package/dist/rules/indexes/types.js.map +1 -0
- package/dist/rules/inspect/handler.d.ts +6 -0
- package/dist/rules/inspect/handler.d.ts.map +1 -0
- package/dist/rules/inspect/handler.js +144 -0
- package/dist/rules/inspect/handler.js.map +1 -0
- package/dist/rules/inspect/spec.d.ts +37 -0
- package/dist/rules/inspect/spec.d.ts.map +1 -0
- package/dist/rules/inspect/spec.js +2 -0
- package/dist/rules/inspect/spec.js.map +1 -0
- package/dist/rules/inspect/tools.d.ts +21 -0
- package/dist/rules/inspect/tools.d.ts.map +1 -0
- package/dist/rules/inspect/tools.js +21 -0
- package/dist/rules/inspect/tools.js.map +1 -0
- package/dist/rules/linter/ast-utils.d.ts +97 -0
- package/dist/rules/linter/ast-utils.d.ts.map +1 -0
- package/dist/rules/linter/ast-utils.js +491 -0
- package/dist/rules/linter/ast-utils.js.map +1 -0
- package/dist/rules/linter/hallucinations.d.ts +34 -0
- package/dist/rules/linter/hallucinations.d.ts.map +1 -0
- package/dist/rules/linter/hallucinations.js +334 -0
- package/dist/rules/linter/hallucinations.js.map +1 -0
- package/dist/rules/linter/linter.d.ts +84 -0
- package/dist/rules/linter/linter.d.ts.map +1 -0
- package/dist/rules/linter/linter.js +784 -0
- package/dist/rules/linter/linter.js.map +1 -0
- package/dist/rules/modules/resolver-browser.d.ts +41 -0
- package/dist/rules/modules/resolver-browser.d.ts.map +1 -0
- package/dist/rules/modules/resolver-browser.js +63 -0
- package/dist/rules/modules/resolver-browser.js.map +1 -0
- package/dist/rules/modules/resolver-core.d.ts +51 -0
- package/dist/rules/modules/resolver-core.d.ts.map +1 -0
- package/dist/rules/modules/resolver-core.js +338 -0
- package/dist/rules/modules/resolver-core.js.map +1 -0
- package/dist/rules/modules/resolver.d.ts +17 -0
- package/dist/rules/modules/resolver.d.ts.map +1 -0
- package/dist/rules/modules/resolver.js +49 -0
- package/dist/rules/modules/resolver.js.map +1 -0
- package/dist/rules/modules/stdlib/atomic.rules +52 -0
- package/dist/rules/modules/stdlib/atomic.test.json +152 -0
- package/dist/rules/modules/stdlib/auth.rules +7 -0
- package/dist/rules/modules/stdlib/auth.test.json +53 -0
- package/dist/rules/modules/stdlib/content.rules +50 -0
- package/dist/rules/modules/stdlib/content.test.json +238 -0
- package/dist/rules/modules/stdlib/counters.rules +41 -0
- package/dist/rules/modules/stdlib/counters.test.json +254 -0
- package/dist/rules/modules/stdlib/geometry.rules +43 -0
- package/dist/rules/modules/stdlib/geometry.test.json +200 -0
- package/dist/rules/modules/stdlib/joining.rules +49 -0
- package/dist/rules/modules/stdlib/joining.test.json +287 -0
- package/dist/rules/modules/stdlib/lifecycle.rules +51 -0
- package/dist/rules/modules/stdlib/lifecycle.test.json +288 -0
- package/dist/rules/modules/stdlib/lobby.rules +44 -0
- package/dist/rules/modules/stdlib/lobby.test.json +32 -0
- package/dist/rules/modules/stdlib/membership.rules +40 -0
- package/dist/rules/modules/stdlib/membership.test.json +107 -0
- package/dist/rules/modules/stdlib/spaces.rules +46 -0
- package/dist/rules/modules/stdlib/spaces.test.json +392 -0
- package/dist/rules/modules/stdlib/state.rules +28 -0
- package/dist/rules/modules/stdlib/state.test.json +55 -0
- package/dist/rules/modules/stdlib/timing.rules +20 -0
- package/dist/rules/modules/stdlib/timing.test.json +106 -0
- package/dist/rules/modules/stdlib/transitions.rules +34 -0
- package/dist/rules/modules/stdlib/transitions.test.json +86 -0
- package/dist/rules/modules/stdlib/turns.rules +27 -0
- package/dist/rules/modules/stdlib/turns.test.json +64 -0
- package/dist/rules/modules/stdlib/validation.rules +31 -0
- package/dist/rules/modules/stdlib/validation.test.json +184 -0
- package/dist/rules/modules/stdlib-content.d.ts +11 -0
- package/dist/rules/modules/stdlib-content.d.ts.map +1 -0
- package/dist/rules/modules/stdlib-content.js +590 -0
- package/dist/rules/modules/stdlib-content.js.map +1 -0
- package/dist/rules/node.d.ts +17 -0
- package/dist/rules/node.d.ts.map +1 -0
- package/dist/rules/node.js +21 -0
- package/dist/rules/node.js.map +1 -0
- package/dist/rules/rtdb.d.ts +28 -0
- package/dist/rules/rtdb.d.ts.map +1 -0
- package/dist/rules/rtdb.js +15 -0
- package/dist/rules/rtdb.js.map +1 -0
- package/dist/rules/simulator/evaluator.d.ts +179 -0
- package/dist/rules/simulator/evaluator.d.ts.map +1 -0
- package/dist/rules/simulator/evaluator.js +1221 -0
- package/dist/rules/simulator/evaluator.js.map +1 -0
- package/dist/rules/simulator/expression/eval-errors.d.ts +86 -0
- package/dist/rules/simulator/expression/eval-errors.d.ts.map +1 -0
- package/dist/rules/simulator/expression/eval-errors.js +68 -0
- package/dist/rules/simulator/expression/eval-errors.js.map +1 -0
- package/dist/rules/simulator/expression/evaluator.d.ts +43 -0
- package/dist/rules/simulator/expression/evaluator.d.ts.map +1 -0
- package/dist/rules/simulator/expression/evaluator.js +298 -0
- package/dist/rules/simulator/expression/evaluator.js.map +1 -0
- package/dist/rules/simulator/expression/lexer.d.ts +36 -0
- package/dist/rules/simulator/expression/lexer.d.ts.map +1 -0
- package/dist/rules/simulator/expression/lexer.js +318 -0
- package/dist/rules/simulator/expression/lexer.js.map +1 -0
- package/dist/rules/simulator/expression/parser.d.ts +39 -0
- package/dist/rules/simulator/expression/parser.d.ts.map +1 -0
- package/dist/rules/simulator/expression/parser.js +329 -0
- package/dist/rules/simulator/expression/parser.js.map +1 -0
- package/dist/rules/simulator/expression/types.d.ts +137 -0
- package/dist/rules/simulator/expression/types.d.ts.map +1 -0
- package/dist/rules/simulator/expression/types.js +90 -0
- package/dist/rules/simulator/expression/types.js.map +1 -0
- package/dist/rules/simulator/expression/walk-data.d.ts +52 -0
- package/dist/rules/simulator/expression/walk-data.d.ts.map +1 -0
- package/dist/rules/simulator/expression/walk-data.js +167 -0
- package/dist/rules/simulator/expression/walk-data.js.map +1 -0
- package/dist/rules/simulator/firestore-set.d.ts +25 -0
- package/dist/rules/simulator/firestore-set.d.ts.map +1 -0
- package/dist/rules/simulator/firestore-set.js +89 -0
- package/dist/rules/simulator/firestore-set.js.map +1 -0
- package/dist/rules/simulator/handler.d.ts +36 -0
- package/dist/rules/simulator/handler.d.ts.map +1 -0
- package/dist/rules/simulator/handler.js +583 -0
- package/dist/rules/simulator/handler.js.map +1 -0
- package/dist/rules/simulator/mapdiff.d.ts +29 -0
- package/dist/rules/simulator/mapdiff.d.ts.map +1 -0
- package/dist/rules/simulator/mapdiff.js +72 -0
- package/dist/rules/simulator/mapdiff.js.map +1 -0
- package/dist/rules/simulator/project-after-state.d.ts +33 -0
- package/dist/rules/simulator/project-after-state.d.ts.map +1 -0
- package/dist/rules/simulator/project-after-state.js +88 -0
- package/dist/rules/simulator/project-after-state.js.map +1 -0
- package/dist/rules/simulator/query-proof.d.ts +80 -0
- package/dist/rules/simulator/query-proof.d.ts.map +1 -0
- package/dist/rules/simulator/query-proof.js +142 -0
- package/dist/rules/simulator/query-proof.js.map +1 -0
- package/dist/rules/simulator/value-equality.d.ts +8 -0
- package/dist/rules/simulator/value-equality.d.ts.map +1 -0
- package/dist/rules/simulator/value-equality.js +40 -0
- package/dist/rules/simulator/value-equality.js.map +1 -0
- package/dist/rules/simulator/wrappers/base.d.ts +129 -0
- package/dist/rules/simulator/wrappers/base.d.ts.map +1 -0
- package/dist/rules/simulator/wrappers/base.js +90 -0
- package/dist/rules/simulator/wrappers/base.js.map +1 -0
- package/dist/rules/simulator/wrappers/bytes.d.ts +45 -0
- package/dist/rules/simulator/wrappers/bytes.d.ts.map +1 -0
- package/dist/rules/simulator/wrappers/bytes.js +130 -0
- package/dist/rules/simulator/wrappers/bytes.js.map +1 -0
- package/dist/rules/simulator/wrappers/duration.d.ts +76 -0
- package/dist/rules/simulator/wrappers/duration.d.ts.map +1 -0
- package/dist/rules/simulator/wrappers/duration.js +176 -0
- package/dist/rules/simulator/wrappers/duration.js.map +1 -0
- package/dist/rules/simulator/wrappers/float.d.ts +52 -0
- package/dist/rules/simulator/wrappers/float.d.ts.map +1 -0
- package/dist/rules/simulator/wrappers/float.js +88 -0
- package/dist/rules/simulator/wrappers/float.js.map +1 -0
- package/dist/rules/simulator/wrappers/latlng.d.ts +40 -0
- package/dist/rules/simulator/wrappers/latlng.d.ts.map +1 -0
- package/dist/rules/simulator/wrappers/latlng.js +100 -0
- package/dist/rules/simulator/wrappers/latlng.js.map +1 -0
- package/dist/rules/simulator/wrappers/path.d.ts +75 -0
- package/dist/rules/simulator/wrappers/path.d.ts.map +1 -0
- package/dist/rules/simulator/wrappers/path.js +158 -0
- package/dist/rules/simulator/wrappers/path.js.map +1 -0
- package/dist/rules/simulator/wrappers/reference.d.ts +82 -0
- package/dist/rules/simulator/wrappers/reference.d.ts.map +1 -0
- package/dist/rules/simulator/wrappers/reference.js +145 -0
- package/dist/rules/simulator/wrappers/reference.js.map +1 -0
- package/dist/rules/simulator/wrappers/timestamp.d.ts +86 -0
- package/dist/rules/simulator/wrappers/timestamp.d.ts.map +1 -0
- package/dist/rules/simulator/wrappers/timestamp.js +207 -0
- package/dist/rules/simulator/wrappers/timestamp.js.map +1 -0
- package/dist/rules/simulator/wrappers/vector.d.ts +43 -0
- package/dist/rules/simulator/wrappers/vector.d.ts.map +1 -0
- package/dist/rules/simulator/wrappers/vector.js +80 -0
- package/dist/rules/simulator/wrappers/vector.js.map +1 -0
- package/dist/rules/simulator-tools-impl.d.ts +64 -0
- package/dist/rules/simulator-tools-impl.d.ts.map +1 -0
- package/dist/rules/simulator-tools-impl.js +462 -0
- package/dist/rules/simulator-tools-impl.js.map +1 -0
- package/dist/rules/simulator.d.ts +20 -0
- package/dist/rules/simulator.d.ts.map +1 -0
- package/dist/rules/simulator.js +24 -0
- package/dist/rules/simulator.js.map +1 -0
- package/dist/rules/stdlib-modules.d.ts +73 -0
- package/dist/rules/stdlib-modules.d.ts.map +1 -0
- package/dist/rules/stdlib-modules.js +849 -0
- package/dist/rules/stdlib-modules.js.map +1 -0
- package/dist/rules/stdlib-tools.d.ts +19 -0
- package/dist/rules/stdlib-tools.d.ts.map +1 -0
- package/dist/rules/stdlib-tools.js +164 -0
- package/dist/rules/stdlib-tools.js.map +1 -0
- package/dist/rules/test/handler.d.ts +9 -0
- package/dist/rules/test/handler.d.ts.map +1 -0
- package/dist/rules/test/handler.js +124 -0
- package/dist/rules/test/handler.js.map +1 -0
- package/dist/rules/test/spec.d.ts +517 -0
- package/dist/rules/test/spec.d.ts.map +1 -0
- package/dist/rules/test/spec.js +227 -0
- package/dist/rules/test/spec.js.map +1 -0
- package/dist/rules/tools.d.ts +41 -0
- package/dist/rules/tools.d.ts.map +1 -0
- package/dist/rules/tools.js +124 -0
- package/dist/rules/tools.js.map +1 -0
- package/dist/rules/write/handler.d.ts +6 -0
- package/dist/rules/write/handler.d.ts.map +1 -0
- package/dist/rules/write/handler.js +126 -0
- package/dist/rules/write/handler.js.map +1 -0
- package/dist/rules/write/spec.d.ts +28 -0
- package/dist/rules/write/spec.d.ts.map +1 -0
- package/dist/rules/write/spec.js +2 -0
- package/dist/rules/write/spec.js.map +1 -0
- package/dist/sandbox/admin-compat.d.ts +20 -0
- package/dist/sandbox/admin-compat.d.ts.map +1 -0
- package/dist/sandbox/admin-compat.js +19 -0
- package/dist/sandbox/admin-compat.js.map +1 -0
- package/dist/sandbox/admin-firestore/error-translation.d.ts +86 -0
- package/dist/sandbox/admin-firestore/error-translation.d.ts.map +1 -0
- package/dist/sandbox/admin-firestore/error-translation.js +204 -0
- package/dist/sandbox/admin-firestore/error-translation.js.map +1 -0
- package/dist/sandbox/admin-firestore/index.d.ts +169 -0
- package/dist/sandbox/admin-firestore/index.d.ts.map +1 -0
- package/dist/sandbox/admin-firestore/index.js +456 -0
- package/dist/sandbox/admin-firestore/index.js.map +1 -0
- package/dist/sandbox/admin-firestore/remote.d.ts +97 -0
- package/dist/sandbox/admin-firestore/remote.d.ts.map +1 -0
- package/dist/sandbox/admin-firestore/remote.js +735 -0
- package/dist/sandbox/admin-firestore/remote.js.map +1 -0
- package/dist/sandbox/branches/index.d.ts +141 -0
- package/dist/sandbox/branches/index.d.ts.map +1 -0
- package/dist/sandbox/branches/index.js +327 -0
- package/dist/sandbox/branches/index.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/batch.d.ts +34 -0
- package/dist/sandbox/firestore/admin-compat/batch.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/batch.js +73 -0
- package/dist/sandbox/firestore/admin-compat/batch.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/doc-ref.d.ts +38 -0
- package/dist/sandbox/firestore/admin-compat/doc-ref.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/doc-ref.js +154 -0
- package/dist/sandbox/firestore/admin-compat/doc-ref.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/firestore.d.ts +45 -0
- package/dist/sandbox/firestore/admin-compat/firestore.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/firestore.js +114 -0
- package/dist/sandbox/firestore/admin-compat/firestore.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/index.d.ts +45 -0
- package/dist/sandbox/firestore/admin-compat/index.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/index.js +27 -0
- package/dist/sandbox/firestore/admin-compat/index.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/paths.d.ts +37 -0
- package/dist/sandbox/firestore/admin-compat/paths.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/paths.js +49 -0
- package/dist/sandbox/firestore/admin-compat/paths.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/query.d.ts +261 -0
- package/dist/sandbox/firestore/admin-compat/query.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/query.js +704 -0
- package/dist/sandbox/firestore/admin-compat/query.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/read-translation.d.ts +8 -0
- package/dist/sandbox/firestore/admin-compat/read-translation.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/read-translation.js +59 -0
- package/dist/sandbox/firestore/admin-compat/read-translation.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/snapshots.d.ts +39 -0
- package/dist/sandbox/firestore/admin-compat/snapshots.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/snapshots.js +50 -0
- package/dist/sandbox/firestore/admin-compat/snapshots.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/transaction.d.ts +35 -0
- package/dist/sandbox/firestore/admin-compat/transaction.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/transaction.js +88 -0
- package/dist/sandbox/firestore/admin-compat/transaction.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/types.d.ts +297 -0
- package/dist/sandbox/firestore/admin-compat/types.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/types.js +127 -0
- package/dist/sandbox/firestore/admin-compat/types.js.map +1 -0
- package/dist/sandbox/firestore/admin-compat/value-order.d.ts +49 -0
- package/dist/sandbox/firestore/admin-compat/value-order.d.ts.map +1 -0
- package/dist/sandbox/firestore/admin-compat/value-order.js +172 -0
- package/dist/sandbox/firestore/admin-compat/value-order.js.map +1 -0
- package/dist/sandbox/firestore/auto-id.d.ts +26 -0
- package/dist/sandbox/firestore/auto-id.d.ts.map +1 -0
- package/dist/sandbox/firestore/auto-id.js +36 -0
- package/dist/sandbox/firestore/auto-id.js.map +1 -0
- package/dist/sandbox/firestore/converters/bytes-geopoint.d.ts +48 -0
- package/dist/sandbox/firestore/converters/bytes-geopoint.d.ts.map +1 -0
- package/dist/sandbox/firestore/converters/bytes-geopoint.js +85 -0
- package/dist/sandbox/firestore/converters/bytes-geopoint.js.map +1 -0
- package/dist/sandbox/firestore/converters/fieldvalue.d.ts +69 -0
- package/dist/sandbox/firestore/converters/fieldvalue.d.ts.map +1 -0
- package/dist/sandbox/firestore/converters/fieldvalue.js +166 -0
- package/dist/sandbox/firestore/converters/fieldvalue.js.map +1 -0
- package/dist/sandbox/firestore/converters/reference.d.ts +31 -0
- package/dist/sandbox/firestore/converters/reference.d.ts.map +1 -0
- package/dist/sandbox/firestore/converters/reference.js +51 -0
- package/dist/sandbox/firestore/converters/reference.js.map +1 -0
- package/dist/sandbox/firestore/converters/timestamp.d.ts +32 -0
- package/dist/sandbox/firestore/converters/timestamp.d.ts.map +1 -0
- package/dist/sandbox/firestore/converters/timestamp.js +63 -0
- package/dist/sandbox/firestore/converters/timestamp.js.map +1 -0
- package/dist/sandbox/firestore/converters/user-timestamp.d.ts +46 -0
- package/dist/sandbox/firestore/converters/user-timestamp.d.ts.map +1 -0
- package/dist/sandbox/firestore/converters/user-timestamp.js +65 -0
- package/dist/sandbox/firestore/converters/user-timestamp.js.map +1 -0
- package/dist/sandbox/firestore/converters/vector.d.ts +24 -0
- package/dist/sandbox/firestore/converters/vector.d.ts.map +1 -0
- package/dist/sandbox/firestore/converters/vector.js +53 -0
- package/dist/sandbox/firestore/converters/vector.js.map +1 -0
- package/dist/sandbox/firestore/errors.d.ts +82 -0
- package/dist/sandbox/firestore/errors.d.ts.map +1 -0
- package/dist/sandbox/firestore/errors.js +54 -0
- package/dist/sandbox/firestore/errors.js.map +1 -0
- package/dist/sandbox/firestore/event-log.d.ts +99 -0
- package/dist/sandbox/firestore/event-log.d.ts.map +1 -0
- package/dist/sandbox/firestore/event-log.js +67 -0
- package/dist/sandbox/firestore/event-log.js.map +1 -0
- package/dist/sandbox/firestore/field-merge.d.ts +64 -0
- package/dist/sandbox/firestore/field-merge.d.ts.map +1 -0
- package/dist/sandbox/firestore/field-merge.js +221 -0
- package/dist/sandbox/firestore/field-merge.js.map +1 -0
- package/dist/sandbox/firestore/list-query-proof.d.ts +77 -0
- package/dist/sandbox/firestore/list-query-proof.d.ts.map +1 -0
- package/dist/sandbox/firestore/list-query-proof.js +170 -0
- package/dist/sandbox/firestore/list-query-proof.js.map +1 -0
- package/dist/sandbox/firestore/local-environment.d.ts +806 -0
- package/dist/sandbox/firestore/local-environment.d.ts.map +1 -0
- package/dist/sandbox/firestore/local-environment.js +3028 -0
- package/dist/sandbox/firestore/local-environment.js.map +1 -0
- package/dist/sandbox/firestore/local-state.d.ts +196 -0
- package/dist/sandbox/firestore/local-state.d.ts.map +1 -0
- package/dist/sandbox/firestore/local-state.js +413 -0
- package/dist/sandbox/firestore/local-state.js.map +1 -0
- package/dist/sandbox/firestore/overlay-backing.d.ts +44 -0
- package/dist/sandbox/firestore/overlay-backing.d.ts.map +1 -0
- package/dist/sandbox/firestore/overlay-backing.js +82 -0
- package/dist/sandbox/firestore/overlay-backing.js.map +1 -0
- package/dist/sandbox/firestore/sentinel-capture.d.ts +30 -0
- package/dist/sandbox/firestore/sentinel-capture.d.ts.map +1 -0
- package/dist/sandbox/firestore/sentinel-capture.js +61 -0
- package/dist/sandbox/firestore/sentinel-capture.js.map +1 -0
- package/dist/sandbox/firestore/snapshot-listeners.d.ts +284 -0
- package/dist/sandbox/firestore/snapshot-listeners.d.ts.map +1 -0
- package/dist/sandbox/firestore/snapshot-listeners.js +194 -0
- package/dist/sandbox/firestore/snapshot-listeners.js.map +1 -0
- package/dist/sandbox/firestore/topk.d.ts +12 -0
- package/dist/sandbox/firestore/topk.d.ts.map +1 -0
- package/dist/sandbox/firestore/topk.js +42 -0
- package/dist/sandbox/firestore/topk.js.map +1 -0
- package/dist/sandbox/firestore/transaction-merge.d.ts +55 -0
- package/dist/sandbox/firestore/transaction-merge.d.ts.map +1 -0
- package/dist/sandbox/firestore/transaction-merge.js +107 -0
- package/dist/sandbox/firestore/transaction-merge.js.map +1 -0
- package/dist/sandbox/firestore/transaction-types.d.ts +152 -0
- package/dist/sandbox/firestore/transaction-types.d.ts.map +1 -0
- package/dist/sandbox/firestore/transaction-types.js +10 -0
- package/dist/sandbox/firestore/transaction-types.js.map +1 -0
- package/dist/sandbox/firestore/transaction.d.ts +79 -0
- package/dist/sandbox/firestore/transaction.d.ts.map +1 -0
- package/dist/sandbox/firestore/transaction.js +95 -0
- package/dist/sandbox/firestore/transaction.js.map +1 -0
- package/dist/sandbox/firestore/value-equality.d.ts +2 -0
- package/dist/sandbox/firestore/value-equality.d.ts.map +1 -0
- package/dist/sandbox/firestore/value-equality.js +35 -0
- package/dist/sandbox/firestore/value-equality.js.map +1 -0
- package/dist/sandbox/firestore/value-resolver.d.ts +172 -0
- package/dist/sandbox/firestore/value-resolver.d.ts.map +1 -0
- package/dist/sandbox/firestore/value-resolver.js +221 -0
- package/dist/sandbox/firestore/value-resolver.js.map +1 -0
- package/dist/sandbox/firestore/wire-encoder.d.ts +14 -0
- package/dist/sandbox/firestore/wire-encoder.d.ts.map +1 -0
- package/dist/sandbox/firestore/wire-encoder.js +130 -0
- package/dist/sandbox/firestore/wire-encoder.js.map +1 -0
- package/dist/sandbox/index.d.ts +50 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +63 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/internal/index.d.ts +36 -0
- package/dist/sandbox/internal/index.d.ts.map +1 -0
- package/dist/sandbox/internal/index.js +72 -0
- package/dist/sandbox/internal/index.js.map +1 -0
- package/dist/sandbox/internal/sandbox-impl.d.ts +343 -0
- package/dist/sandbox/internal/sandbox-impl.d.ts.map +1 -0
- package/dist/sandbox/internal/sandbox-impl.js +718 -0
- package/dist/sandbox/internal/sandbox-impl.js.map +1 -0
- package/dist/sandbox/persistence/backends.d.ts +37 -0
- package/dist/sandbox/persistence/backends.d.ts.map +1 -0
- package/dist/sandbox/persistence/backends.js +202 -0
- package/dist/sandbox/persistence/backends.js.map +1 -0
- package/dist/sandbox/persistence/chunk-format.d.ts +58 -0
- package/dist/sandbox/persistence/chunk-format.d.ts.map +1 -0
- package/dist/sandbox/persistence/chunk-format.js +163 -0
- package/dist/sandbox/persistence/chunk-format.js.map +1 -0
- package/dist/sandbox/persistence/controller.d.ts +39 -0
- package/dist/sandbox/persistence/controller.d.ts.map +1 -0
- package/dist/sandbox/persistence/controller.js +605 -0
- package/dist/sandbox/persistence/controller.js.map +1 -0
- package/dist/sandbox/persistence/index.d.ts +13 -0
- package/dist/sandbox/persistence/index.d.ts.map +1 -0
- package/dist/sandbox/persistence/index.js +5 -0
- package/dist/sandbox/persistence/index.js.map +1 -0
- package/dist/sandbox/persistence/serialize.d.ts +53 -0
- package/dist/sandbox/persistence/serialize.d.ts.map +1 -0
- package/dist/sandbox/persistence/serialize.js +98 -0
- package/dist/sandbox/persistence/serialize.js.map +1 -0
- package/dist/sandbox/persistence/types.d.ts +118 -0
- package/dist/sandbox/persistence/types.d.ts.map +1 -0
- package/dist/sandbox/persistence/types.js +15 -0
- package/dist/sandbox/persistence/types.js.map +1 -0
- package/dist/sandbox/remote.d.ts +118 -0
- package/dist/sandbox/remote.d.ts.map +1 -0
- package/dist/sandbox/remote.js +60 -0
- package/dist/sandbox/remote.js.map +1 -0
- package/dist/sandbox/replay/index.d.ts +106 -0
- package/dist/sandbox/replay/index.d.ts.map +1 -0
- package/dist/sandbox/replay/index.js +246 -0
- package/dist/sandbox/replay/index.js.map +1 -0
- package/dist/sandbox/sandbox-context.d.ts +40 -0
- package/dist/sandbox/sandbox-context.d.ts.map +1 -0
- package/dist/sandbox/sandbox-context.js +72 -0
- package/dist/sandbox/sandbox-context.js.map +1 -0
- package/dist/sandbox/tab-sync/index.d.ts +120 -0
- package/dist/sandbox/tab-sync/index.d.ts.map +1 -0
- package/dist/sandbox/tab-sync/index.js +272 -0
- package/dist/sandbox/tab-sync/index.js.map +1 -0
- package/dist/sandbox/types.d.ts +1235 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/sandbox/types.js +46 -0
- package/dist/sandbox/types.js.map +1 -0
- package/dist/storage/admin/api.d.ts +206 -0
- package/dist/storage/admin/api.d.ts.map +1 -0
- package/dist/storage/admin/api.js +349 -0
- package/dist/storage/admin/api.js.map +1 -0
- package/dist/storage/admin/handler.d.ts +29 -0
- package/dist/storage/admin/handler.d.ts.map +1 -0
- package/dist/storage/admin/handler.js +82 -0
- package/dist/storage/admin/handler.js.map +1 -0
- package/dist/storage/admin/spec.d.ts +64 -0
- package/dist/storage/admin/spec.d.ts.map +1 -0
- package/dist/storage/admin/spec.js +8 -0
- package/dist/storage/admin/spec.js.map +1 -0
- package/dist/storage/admin/tools.d.ts +23 -0
- package/dist/storage/admin/tools.d.ts.map +1 -0
- package/dist/storage/admin/tools.js +90 -0
- package/dist/storage/admin/tools.js.map +1 -0
- package/dist/storage/download.d.ts +27 -0
- package/dist/storage/download.d.ts.map +1 -0
- package/dist/storage/download.js +136 -0
- package/dist/storage/download.js.map +1 -0
- package/dist/storage/enforce.d.ts +26 -0
- package/dist/storage/enforce.d.ts.map +1 -0
- package/dist/storage/enforce.js +16 -0
- package/dist/storage/enforce.js.map +1 -0
- package/dist/storage/errors.d.ts +46 -0
- package/dist/storage/errors.d.ts.map +1 -0
- package/dist/storage/errors.js +62 -0
- package/dist/storage/errors.js.map +1 -0
- package/dist/storage/index.d.ts +49 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +60 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/internal.d.ts +18 -0
- package/dist/storage/internal.d.ts.map +1 -0
- package/dist/storage/internal.js +18 -0
- package/dist/storage/internal.js.map +1 -0
- package/dist/storage/list.d.ts +17 -0
- package/dist/storage/list.d.ts.map +1 -0
- package/dist/storage/list.js +91 -0
- package/dist/storage/list.js.map +1 -0
- package/dist/storage/metadata.d.ts +86 -0
- package/dist/storage/metadata.d.ts.map +1 -0
- package/dist/storage/metadata.js +167 -0
- package/dist/storage/metadata.js.map +1 -0
- package/dist/storage/persistence.d.ts +134 -0
- package/dist/storage/persistence.d.ts.map +1 -0
- package/dist/storage/persistence.js +132 -0
- package/dist/storage/persistence.js.map +1 -0
- package/dist/storage/reference.d.ts +63 -0
- package/dist/storage/reference.d.ts.map +1 -0
- package/dist/storage/reference.js +156 -0
- package/dist/storage/reference.js.map +1 -0
- package/dist/storage/rules.d.ts +176 -0
- package/dist/storage/rules.d.ts.map +1 -0
- package/dist/storage/rules.js +621 -0
- package/dist/storage/rules.js.map +1 -0
- package/dist/storage/service.d.ts +139 -0
- package/dist/storage/service.d.ts.map +1 -0
- package/dist/storage/service.js +241 -0
- package/dist/storage/service.js.map +1 -0
- package/dist/storage/upload.d.ts +43 -0
- package/dist/storage/upload.d.ts.map +1 -0
- package/dist/storage/upload.js +235 -0
- package/dist/storage/upload.js.map +1 -0
- package/package.json +109 -3
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence controller — wires a `PersistenceBackend` into a
|
|
3
|
+
* `SandboxImpl`. Owns the debounced auto-flush, the `beforeunload`
|
|
4
|
+
* safety flush, and the restore-on-attach pass.
|
|
5
|
+
*
|
|
6
|
+
* Conceptually orthogonal to the sandbox: the sandbox doesn't know
|
|
7
|
+
* persistence exists until `enablePersistence` constructs a controller
|
|
8
|
+
* and hands it the live sandbox. Disposing the controller detaches
|
|
9
|
+
* every side effect and leaves the sandbox unchanged.
|
|
10
|
+
*/
|
|
11
|
+
import { SandboxImpl } from '../internal/sandbox-impl.js';
|
|
12
|
+
import { createIndexedDBBackend, createMemoryBackend } from './backends.js';
|
|
13
|
+
import { serializeToBuckets, deserializeFromBuckets, migrateV2ToRecords, } from './chunk-format.js';
|
|
14
|
+
const DEFAULT_FLUSH_INTERVAL_MS = 250;
|
|
15
|
+
/**
|
|
16
|
+
* Storage key for the persisted auth session uid. One key used across
|
|
17
|
+
* both `local` and `session` stores — the controller reads both (mode-
|
|
18
|
+
* agnostic load) and writes only one (based on the current mode). This
|
|
19
|
+
* mirrors how `pyric dev`'s `SessionStore` worked before the session
|
|
20
|
+
* logic moved here.
|
|
21
|
+
*
|
|
22
|
+
* Prefixed `pyric:sandbox:` so it's immediately grepable and doesn't
|
|
23
|
+
* collide with serve's `pyric:serve:` entries or app-level keys.
|
|
24
|
+
*/
|
|
25
|
+
const SESSION_STORAGE_KEY = 'pyric:sandbox:auth-session';
|
|
26
|
+
/**
|
|
27
|
+
* Stable 32-bit FNV-1a content hash of a bucket record, for detecting which
|
|
28
|
+
* buckets changed between flushes. A genuinely changed record almost never
|
|
29
|
+
* hashes equal to its prior content; in the astronomically rare event of a
|
|
30
|
+
* collision the bucket simply re-persists on its next change. Bucket key order
|
|
31
|
+
* is stable across flushes (snapshot iteration order), so an UNCHANGED bucket
|
|
32
|
+
* always hashes identically.
|
|
33
|
+
*/
|
|
34
|
+
function hashRecord(record) {
|
|
35
|
+
const s = JSON.stringify(record);
|
|
36
|
+
let h = 0x811c9dc5;
|
|
37
|
+
for (let i = 0; i < s.length; i++) {
|
|
38
|
+
h ^= s.charCodeAt(i);
|
|
39
|
+
h = Math.imul(h, 16777619) >>> 0;
|
|
40
|
+
}
|
|
41
|
+
return h;
|
|
42
|
+
}
|
|
43
|
+
/** Detect a storage-quota-exceeded error across environments (the DOMException
|
|
44
|
+
* name in browsers, a message fallback elsewhere). */
|
|
45
|
+
function isQuotaExceeded(e) {
|
|
46
|
+
if (e && typeof e === 'object') {
|
|
47
|
+
if (e.name === 'QuotaExceededError')
|
|
48
|
+
return true;
|
|
49
|
+
const msg = e.message;
|
|
50
|
+
if (typeof msg === 'string' && /quota/i.test(msg))
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
function pickBackend(options) {
|
|
56
|
+
if (options.injectedBackend)
|
|
57
|
+
return options.injectedBackend;
|
|
58
|
+
const requested = options.backend ?? 'indexedDB';
|
|
59
|
+
if (requested === 'memory')
|
|
60
|
+
return createMemoryBackend();
|
|
61
|
+
// `indexedDB` requested. In non-browser hosts we transparently fall
|
|
62
|
+
// back to memory so calling code paths can share an `enablePersistence`
|
|
63
|
+
// call across browser + test environments without branching.
|
|
64
|
+
if (typeof indexedDB === 'undefined')
|
|
65
|
+
return createMemoryBackend();
|
|
66
|
+
return createIndexedDBBackend();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Construct a controller, restore any prior snapshot, and wire the
|
|
70
|
+
* auto-flush subscription. Returns once restore has completed (callers
|
|
71
|
+
* can `await sandbox.enablePersistence(...)` and be sure the in-memory
|
|
72
|
+
* state reflects the persisted blob).
|
|
73
|
+
*
|
|
74
|
+
* Late service registration: services (e.g. auth) may register with the
|
|
75
|
+
* sandbox AFTER this call returns (the user calls `enablePersistence`
|
|
76
|
+
* then later `getAuth(sandbox)` which triggers `registerPersistableService`).
|
|
77
|
+
* We handle this in two parts:
|
|
78
|
+
* 1. `restore()` returns the raw `services` blob map so the controller
|
|
79
|
+
* can apply it to late-arriving services.
|
|
80
|
+
* 2. `setServiceRegistrationHook` fires on each registration — we
|
|
81
|
+
* immediately apply the saved blob data (if any) AND subscribe the
|
|
82
|
+
* service's change notifier for future flushes.
|
|
83
|
+
*/
|
|
84
|
+
export async function attachPersistence(sandbox, rawOptions) {
|
|
85
|
+
const options = {
|
|
86
|
+
...rawOptions,
|
|
87
|
+
flushIntervalMs: rawOptions.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS,
|
|
88
|
+
backend: rawOptions.backend ?? 'indexedDB',
|
|
89
|
+
};
|
|
90
|
+
const backend = pickBackend(options);
|
|
91
|
+
// Content hash of each persisted bucket, so a flush writes only the buckets
|
|
92
|
+
// whose content actually changed. restore() seeds it from the records it reads,
|
|
93
|
+
// so the just-restored state is not redundantly re-written on the first flush.
|
|
94
|
+
const lastHashes = new Map();
|
|
95
|
+
// `restore()` returns the raw services blob — the controller keeps this
|
|
96
|
+
// so late-registering services can still receive their saved state even
|
|
97
|
+
// though they weren't in the registry when `restore()` ran.
|
|
98
|
+
const restoredServices = await restore(sandbox, backend, options.key, lastHashes);
|
|
99
|
+
let pendingFlush = null;
|
|
100
|
+
let disposed = false;
|
|
101
|
+
// Track unsubscribers for service change-notification hooks so we can
|
|
102
|
+
// clean up in dispose(). Keyed by service name (not strictly needed,
|
|
103
|
+
// but makes debugging easier).
|
|
104
|
+
const serviceUnsubs = new Map();
|
|
105
|
+
// The actual flush. Reads CURRENT state each time it runs.
|
|
106
|
+
const realFlush = async () => {
|
|
107
|
+
if (disposed)
|
|
108
|
+
return;
|
|
109
|
+
// `sandbox.snapshot()` now includes `{ firestore, services }` — the
|
|
110
|
+
// services map is built live from the registry, so services registered
|
|
111
|
+
// after enablePersistence (late registration) are naturally included.
|
|
112
|
+
const snap = sandbox.snapshot();
|
|
113
|
+
const records = serializeToBuckets(snap.firestore, snap.services, Date.now());
|
|
114
|
+
// Incremental flush: write ONLY the buckets whose content changed since the
|
|
115
|
+
// last flush, and delete buckets that disappeared. Comparison is by content
|
|
116
|
+
// hash, so it is safe by construction: a changed bucket cannot hash equal to
|
|
117
|
+
// its prior content, so no write is ever skipped (no write-site dirty-set to
|
|
118
|
+
// keep in sync). Put changed buckets BEFORE deleting removed ones, and adopt
|
|
119
|
+
// the new hashes only AFTER both land, so a crash mid-flush never loses live
|
|
120
|
+
// data and the next flush simply retries against the unchanged hash state.
|
|
121
|
+
const changed = new Map();
|
|
122
|
+
const nextHashes = new Map();
|
|
123
|
+
for (const [id, rec] of records) {
|
|
124
|
+
const h = hashRecord(rec);
|
|
125
|
+
nextHashes.set(id, h);
|
|
126
|
+
if (lastHashes.get(id) !== h)
|
|
127
|
+
changed.set(id, rec);
|
|
128
|
+
}
|
|
129
|
+
const removed = [...lastHashes.keys()].filter((id) => !records.has(id));
|
|
130
|
+
if (changed.size > 0)
|
|
131
|
+
await backend.putRecords(options.key, changed);
|
|
132
|
+
if (removed.length > 0)
|
|
133
|
+
await backend.deleteRecords(options.key, removed);
|
|
134
|
+
lastHashes.clear();
|
|
135
|
+
for (const [id, h] of nextHashes)
|
|
136
|
+
lastHashes.set(id, h);
|
|
137
|
+
};
|
|
138
|
+
// Serialize flushes on a single chain so two never overlap. Without this, a
|
|
139
|
+
// newer flush that fails while an older one succeeds could adopt a stale
|
|
140
|
+
// snapshot's hashes and silently drop the newer write. Each run waits for the
|
|
141
|
+
// previous (success OR failure) and re-derives changes from current state.
|
|
142
|
+
let flushChain = Promise.resolve();
|
|
143
|
+
const flushNow = () => {
|
|
144
|
+
if (pendingFlush) {
|
|
145
|
+
clearTimeout(pendingFlush);
|
|
146
|
+
pendingFlush = null;
|
|
147
|
+
}
|
|
148
|
+
flushChain = flushChain.then(realFlush, realFlush);
|
|
149
|
+
return flushChain;
|
|
150
|
+
};
|
|
151
|
+
const scheduleFlush = () => {
|
|
152
|
+
if (disposed)
|
|
153
|
+
return;
|
|
154
|
+
if (pendingFlush)
|
|
155
|
+
return;
|
|
156
|
+
pendingFlush = setTimeout(() => {
|
|
157
|
+
pendingFlush = null;
|
|
158
|
+
void flushNow().catch((e) => {
|
|
159
|
+
if (isQuotaExceeded(e)) {
|
|
160
|
+
// Storage is full: retrying will not help until space is freed, so
|
|
161
|
+
// warn loudly instead of busy-looping. The unpersisted changes stay in
|
|
162
|
+
// memory; the next successful flush (after space frees) re-detects them.
|
|
163
|
+
console.warn('[sandbox/persistence] storage quota exceeded; recent changes are kept ' +
|
|
164
|
+
'in memory only. Free storage or reduce sandbox data to persist them.');
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
console.warn('[sandbox/persistence] auto-flush failed, will retry:', e);
|
|
168
|
+
// A failed flush did not adopt its hashes, so the change is still
|
|
169
|
+
// unpersisted. Re-arm rather than waiting for the next write event, so
|
|
170
|
+
// an idle-after-failure does not leave the change permanently in memory.
|
|
171
|
+
scheduleFlush();
|
|
172
|
+
});
|
|
173
|
+
}, options.flushIntervalMs);
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Wire up a service's optional change-notification hook. When a
|
|
177
|
+
* service provides `subscribe`, we call it here so auth-user edits
|
|
178
|
+
* trigger a debounced flush — not only the next Firestore write.
|
|
179
|
+
*/
|
|
180
|
+
const attachServiceSubscription = (name, hooks) => {
|
|
181
|
+
if (!hooks.subscribe || serviceUnsubs.has(name))
|
|
182
|
+
return;
|
|
183
|
+
const unsub = hooks.subscribe(() => {
|
|
184
|
+
scheduleFlush();
|
|
185
|
+
});
|
|
186
|
+
serviceUnsubs.set(name, unsub);
|
|
187
|
+
};
|
|
188
|
+
// ─── Session persistence setup ─────────────────────────────────────
|
|
189
|
+
//
|
|
190
|
+
// Session persistence is ONLY active when `options.sessionStorage` is
|
|
191
|
+
// provided. When omitted, the user DB still persists (Phase 1) but the
|
|
192
|
+
// CURRENT SESSION is not restored — no fake durability (Decision 2).
|
|
193
|
+
//
|
|
194
|
+
// The session controller reads/writes a single uid JSON blob to the
|
|
195
|
+
// appropriate web-storage slot based on the auth mode. It discovers
|
|
196
|
+
// the auth service's session hooks by scanning the service registry
|
|
197
|
+
// (and via the late-registration hook for services registered after
|
|
198
|
+
// enablePersistence). Only one session provider is supported today
|
|
199
|
+
// (auth); a second service would need to add its own hooks.
|
|
200
|
+
/** Unsubscribers for session-change hooks; cleared in dispose(). */
|
|
201
|
+
const sessionUnsubs = new Map();
|
|
202
|
+
/**
|
|
203
|
+
* Save the current session uid to the appropriate web-storage slot,
|
|
204
|
+
* or clear both slots on sign-out or NONE mode.
|
|
205
|
+
*
|
|
206
|
+
* Called on every session-change event (sign-in, sign-out, mode change).
|
|
207
|
+
* Reads the CURRENT mode and uid at call time so stale closures can't
|
|
208
|
+
* cause incorrect slot choices (important for mode-migration: a mode
|
|
209
|
+
* change fires a session-change event, and we read the already-updated
|
|
210
|
+
* mode here).
|
|
211
|
+
*/
|
|
212
|
+
const saveSession = (sessionHooks) => {
|
|
213
|
+
if (!options.sessionStorage)
|
|
214
|
+
return;
|
|
215
|
+
const { local, session } = options.sessionStorage;
|
|
216
|
+
const uid = sessionHooks.currentUid();
|
|
217
|
+
const mode = sessionHooks.mode();
|
|
218
|
+
if (uid === null || mode === 'NONE') {
|
|
219
|
+
// Signed out, or mode is NONE — clear both stores so no uid lingers
|
|
220
|
+
// across a sign-out or a mode downgrade to NONE.
|
|
221
|
+
local.removeItem(SESSION_STORAGE_KEY);
|
|
222
|
+
session.removeItem(SESSION_STORAGE_KEY);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
// A session lives in EXACTLY ONE store at any time — clear the other
|
|
226
|
+
// first, then write to the target. This prevents a stale entry in the
|
|
227
|
+
// other store from being picked up on a future reload with a different
|
|
228
|
+
// mode (which would look like the earlier mode's session resuming).
|
|
229
|
+
const payload = JSON.stringify({ uid });
|
|
230
|
+
if (mode === 'LOCAL') {
|
|
231
|
+
session.removeItem(SESSION_STORAGE_KEY); // clear the other slot
|
|
232
|
+
local.setItem(SESSION_STORAGE_KEY, payload);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
// SESSION
|
|
236
|
+
local.removeItem(SESSION_STORAGE_KEY); // clear the other slot
|
|
237
|
+
session.setItem(SESSION_STORAGE_KEY, payload);
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* Read back the stored uid from EITHER web-storage slot.
|
|
242
|
+
* Mode-agnostic: reads local then session (same order as serve's
|
|
243
|
+
* `SessionStore.load`). Returns null when nothing is stored or the
|
|
244
|
+
* blob is unparseable (corrupt bytes → silently drop).
|
|
245
|
+
*/
|
|
246
|
+
const loadStoredUid = () => {
|
|
247
|
+
if (!options.sessionStorage)
|
|
248
|
+
return null;
|
|
249
|
+
const { local, session } = options.sessionStorage;
|
|
250
|
+
for (const store of [local, session]) {
|
|
251
|
+
const raw = store.getItem(SESSION_STORAGE_KEY);
|
|
252
|
+
if (!raw)
|
|
253
|
+
continue;
|
|
254
|
+
try {
|
|
255
|
+
const parsed = JSON.parse(raw);
|
|
256
|
+
if (parsed && typeof parsed.uid === 'string')
|
|
257
|
+
return parsed.uid;
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// Corrupt value — remove it so it doesn't confuse a future load.
|
|
261
|
+
store.removeItem(SESSION_STORAGE_KEY);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return null;
|
|
265
|
+
};
|
|
266
|
+
/**
|
|
267
|
+
* Clear the stored session from BOTH web-storage slots. Used when a
|
|
268
|
+
* restore fails (user deleted / disabled between sessions) so the
|
|
269
|
+
* stale entry doesn't re-surface on the next reload.
|
|
270
|
+
*/
|
|
271
|
+
const clearStoredSession = () => {
|
|
272
|
+
if (!options.sessionStorage)
|
|
273
|
+
return;
|
|
274
|
+
options.sessionStorage.local.removeItem(SESSION_STORAGE_KEY);
|
|
275
|
+
options.sessionStorage.session.removeItem(SESSION_STORAGE_KEY);
|
|
276
|
+
};
|
|
277
|
+
/**
|
|
278
|
+
* Wire up the session-change subscription for a service that provides
|
|
279
|
+
* session hooks. On each fire, re-saves the session uid to the
|
|
280
|
+
* appropriate web-storage slot (handling mode changes transparently —
|
|
281
|
+
* mode changes emit a session-change event, so the controller picks up
|
|
282
|
+
* the new mode without a dedicated migration path).
|
|
283
|
+
*
|
|
284
|
+
* Guarded by `sessionUnsubs.has(name)` so it's idempotent; only the
|
|
285
|
+
* first registration per service name installs the subscription.
|
|
286
|
+
*/
|
|
287
|
+
const attachSessionSubscription = (name, hooks) => {
|
|
288
|
+
if (!options.sessionStorage)
|
|
289
|
+
return;
|
|
290
|
+
if (!hooks.session || sessionUnsubs.has(name))
|
|
291
|
+
return;
|
|
292
|
+
const sessionHooks = hooks.session;
|
|
293
|
+
const unsub = sessionHooks.subscribe(() => {
|
|
294
|
+
saveSession(sessionHooks);
|
|
295
|
+
});
|
|
296
|
+
sessionUnsubs.set(name, unsub);
|
|
297
|
+
};
|
|
298
|
+
// Wire up any services already in the registry at attach time
|
|
299
|
+
// (the case where the user called getAuth before enablePersistence).
|
|
300
|
+
if (sandbox instanceof SandboxImpl) {
|
|
301
|
+
for (const [name, hooks] of sandbox.getServiceRegistry()) {
|
|
302
|
+
attachServiceSubscription(name, hooks);
|
|
303
|
+
attachSessionSubscription(name, hooks);
|
|
304
|
+
}
|
|
305
|
+
// Install the late-registration hook so services that register
|
|
306
|
+
// AFTER this point (user calls enablePersistence then getAuth) are
|
|
307
|
+
// also subscribed and their changes flush promptly.
|
|
308
|
+
//
|
|
309
|
+
// Crucially: if there's a saved blob entry for this service name, we
|
|
310
|
+
// apply it now (late restore). Without this, a user who calls
|
|
311
|
+
// `enablePersistence` then `getAuth` would lose their saved users
|
|
312
|
+
// because `restore()` ran before auth was in the registry.
|
|
313
|
+
sandbox.setServiceRegistrationHook((name, hooks) => {
|
|
314
|
+
// Late restore: if the blob had data for this service and it
|
|
315
|
+
// wasn't applied during the initial restore pass (because the
|
|
316
|
+
// service wasn't registered then), apply it now. The user DB
|
|
317
|
+
// must be restored BEFORE the session restore below, so it
|
|
318
|
+
// resolves the uid to an existing record.
|
|
319
|
+
if (restoredServices !== null && name in restoredServices) {
|
|
320
|
+
try {
|
|
321
|
+
hooks.restore(restoredServices[name]);
|
|
322
|
+
}
|
|
323
|
+
catch (e) {
|
|
324
|
+
console.warn(`[sandbox/persistence] late-restore for service '${name}' failed:`, e);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// Late session restore: if a stored uid was found during attach
|
|
328
|
+
// but no service with session hooks was registered at that time
|
|
329
|
+
// (the common "reload" pattern where getAuth is called after
|
|
330
|
+
// enablePersistence), restore the session now that the service
|
|
331
|
+
// is available. The user DB restore above ran first, so the uid
|
|
332
|
+
// will resolve correctly.
|
|
333
|
+
if (pendingSessionUid !== null && hooks.session) {
|
|
334
|
+
tryRestoreSession(pendingSessionUid, hooks);
|
|
335
|
+
}
|
|
336
|
+
attachServiceSubscription(name, hooks);
|
|
337
|
+
attachSessionSubscription(name, hooks);
|
|
338
|
+
// Schedule a flush so the newly registered service's initial state
|
|
339
|
+
// is captured in the next blob — important for the early-registration
|
|
340
|
+
// case where the service had existing data before enablePersistence.
|
|
341
|
+
scheduleFlush();
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
// ─── Session restore ──────────────────────────────────────────────
|
|
345
|
+
//
|
|
346
|
+
// Restore the signed-in session AFTER the user DB / services have been
|
|
347
|
+
// restored (so the uid resolves to an existing record). We do this by
|
|
348
|
+
// reading the stored uid from web-storage and calling `session.restore`
|
|
349
|
+
// on each registered service that provides session hooks.
|
|
350
|
+
//
|
|
351
|
+
// The restore runs in TWO possible paths:
|
|
352
|
+
// 1. Early-registration (getAuth called BEFORE enablePersistence):
|
|
353
|
+
// the auth service is already in the registry when attachPersistence
|
|
354
|
+
// runs, so we can restore here synchronously.
|
|
355
|
+
// 2. Late-registration (getAuth called AFTER enablePersistence, the
|
|
356
|
+
// common "reload" pattern): the registry is empty here, so we store
|
|
357
|
+
// the pending uid in `pendingSessionUid` and restore when the auth
|
|
358
|
+
// service registers via the late-registration hook below.
|
|
359
|
+
//
|
|
360
|
+
// Both paths call `tryRestoreSession` which handles the
|
|
361
|
+
// user-not-found/user-disabled throw + session clear idiom.
|
|
362
|
+
//
|
|
363
|
+
// The session restore must happen AFTER the user DB is restored (so
|
|
364
|
+
// `restoreSession(uid)` can look up the uid), which is why path 2 hangs
|
|
365
|
+
// off the late-registration hook (that hook already applies the user DB
|
|
366
|
+
// restore first — `hooks.restore(restoredServices[name])` runs before
|
|
367
|
+
// we attempt the session).
|
|
368
|
+
/** Uid read from web-storage that still needs a session restore.
|
|
369
|
+
* Non-null only while a service with session hooks hasn't registered yet. */
|
|
370
|
+
let pendingSessionUid = null;
|
|
371
|
+
/** Attempt to restore the session for `uid` via `hooks.session`. On
|
|
372
|
+
* success, the session fires `onAuthStateChanged`. On
|
|
373
|
+
* user-not-found/user-disabled, clears the stored session and logs. */
|
|
374
|
+
const tryRestoreSession = (uid, hooks) => {
|
|
375
|
+
if (!hooks.session)
|
|
376
|
+
return;
|
|
377
|
+
try {
|
|
378
|
+
hooks.session.restore(uid);
|
|
379
|
+
// Session restored — clear the pending marker so we don't retry.
|
|
380
|
+
pendingSessionUid = null;
|
|
381
|
+
}
|
|
382
|
+
catch (e) {
|
|
383
|
+
// `restoreSession` throws `auth/user-not-found` or `auth/user-disabled`
|
|
384
|
+
// when the uid no longer exists or the account was disabled between
|
|
385
|
+
// sessions. Clear the stored session so this stale uid doesn't
|
|
386
|
+
// re-surface on the next reload. Log at warn level so developers
|
|
387
|
+
// see it in the console (matching serve's behavior for the same case).
|
|
388
|
+
console.warn(`[sandbox/persistence] session restore for uid '${uid}' failed — ` +
|
|
389
|
+
`clearing stored session:`, e);
|
|
390
|
+
clearStoredSession();
|
|
391
|
+
pendingSessionUid = null;
|
|
392
|
+
}
|
|
393
|
+
};
|
|
394
|
+
if (options.sessionStorage) {
|
|
395
|
+
const storedUid = loadStoredUid();
|
|
396
|
+
if (storedUid !== null) {
|
|
397
|
+
if (sandbox instanceof SandboxImpl) {
|
|
398
|
+
const registry = sandbox.getServiceRegistry();
|
|
399
|
+
let restored = false;
|
|
400
|
+
for (const [, hooks] of registry) {
|
|
401
|
+
if (!hooks.session)
|
|
402
|
+
continue;
|
|
403
|
+
tryRestoreSession(storedUid, hooks);
|
|
404
|
+
restored = true;
|
|
405
|
+
break; // only one session provider (auth) expected
|
|
406
|
+
}
|
|
407
|
+
if (!restored) {
|
|
408
|
+
// No service with session hooks in the registry yet — stash the uid
|
|
409
|
+
// so the late-registration hook can pick it up when auth registers.
|
|
410
|
+
pendingSessionUid = storedUid;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
const unsubscribe = sandbox.onEvent((event) => {
|
|
416
|
+
if (isPersistableEvent(event))
|
|
417
|
+
scheduleFlush();
|
|
418
|
+
});
|
|
419
|
+
const beforeUnload = () => {
|
|
420
|
+
// Run synchronously on `beforeunload` — the page is leaving and we
|
|
421
|
+
// can't await an async backend write. Memory backend is sync; the
|
|
422
|
+
// IndexedDB backend won't finish in time, but kicking the request
|
|
423
|
+
// off gives it a chance to land in the IndexedDB write queue
|
|
424
|
+
// before tab close. Best-effort; the debounced auto-flush is the
|
|
425
|
+
// primary safety net.
|
|
426
|
+
void flushNow().catch(() => {
|
|
427
|
+
/* swallow — page is leaving */
|
|
428
|
+
});
|
|
429
|
+
};
|
|
430
|
+
if (typeof window !== 'undefined') {
|
|
431
|
+
window.addEventListener('beforeunload', beforeUnload);
|
|
432
|
+
}
|
|
433
|
+
return {
|
|
434
|
+
options,
|
|
435
|
+
flush: flushNow,
|
|
436
|
+
async clear() {
|
|
437
|
+
if (pendingFlush) {
|
|
438
|
+
clearTimeout(pendingFlush);
|
|
439
|
+
pendingFlush = null;
|
|
440
|
+
}
|
|
441
|
+
await backend.clear(options.key);
|
|
442
|
+
// Reset the diff baseline: the backend is now empty, so the next flush
|
|
443
|
+
// must treat every bucket as changed and re-persist the full in-memory
|
|
444
|
+
// state (otherwise untouched buckets stay suppressed and are lost).
|
|
445
|
+
lastHashes.clear();
|
|
446
|
+
},
|
|
447
|
+
dispose() {
|
|
448
|
+
if (disposed)
|
|
449
|
+
return;
|
|
450
|
+
disposed = true;
|
|
451
|
+
if (pendingFlush) {
|
|
452
|
+
clearTimeout(pendingFlush);
|
|
453
|
+
pendingFlush = null;
|
|
454
|
+
}
|
|
455
|
+
unsubscribe();
|
|
456
|
+
// Detach service change-notification subscriptions.
|
|
457
|
+
for (const unsub of serviceUnsubs.values())
|
|
458
|
+
unsub();
|
|
459
|
+
serviceUnsubs.clear();
|
|
460
|
+
// Detach session-change subscriptions.
|
|
461
|
+
for (const unsub of sessionUnsubs.values())
|
|
462
|
+
unsub();
|
|
463
|
+
sessionUnsubs.clear();
|
|
464
|
+
// Detach the late-registration hook.
|
|
465
|
+
if (sandbox instanceof SandboxImpl) {
|
|
466
|
+
sandbox.setServiceRegistrationHook(null);
|
|
467
|
+
}
|
|
468
|
+
if (typeof window !== 'undefined') {
|
|
469
|
+
window.removeEventListener('beforeunload', beforeUnload);
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Read the persisted blob for `key` and hydrate every document into
|
|
476
|
+
* the sandbox via the admin write surface, then restore any registered
|
|
477
|
+
* service state from the `services` map.
|
|
478
|
+
*
|
|
479
|
+
* Returns the raw `services` blob map (or `null` if no blob existed)
|
|
480
|
+
* so the controller can apply it to services that register AFTER this
|
|
481
|
+
* call returns (the late-registration case).
|
|
482
|
+
*
|
|
483
|
+
* Restore order: Firestore first, then services. Auth users need to
|
|
484
|
+
* land after Firestore is ready, not before — matches the natural
|
|
485
|
+
* initialization order.
|
|
486
|
+
*
|
|
487
|
+
* Unreadable blobs (parse failure, schema mismatch) are QUARANTINED,
|
|
488
|
+
* not destroyed: the raw blob moves to `<key>:corrupt` and the live
|
|
489
|
+
* key is cleared so the next flush starts fresh. Silent data loss is
|
|
490
|
+
* the worst failure mode for a persistence layer — parking the bytes
|
|
491
|
+
* under a side key keeps a serialization bug debuggable after the
|
|
492
|
+
* fact. Each new corrupt blob overwrites the previous quarantine
|
|
493
|
+
* record (one forensic slot per key is enough).
|
|
494
|
+
*
|
|
495
|
+
* Listeners attached to the sandbox before restore will see each
|
|
496
|
+
* hydrated doc as a fresh notification — intentional. The natural
|
|
497
|
+
* place to call `enablePersistence` is right after `initializeSandbox`,
|
|
498
|
+
* before any listeners attach, so this rarely matters in practice.
|
|
499
|
+
*
|
|
500
|
+
* Each service restore is wrapped in try/catch — a failing service
|
|
501
|
+
* restore must not abort Firestore restore (the core data is more
|
|
502
|
+
* critical). A warning is logged but the sandbox stays usable.
|
|
503
|
+
*/
|
|
504
|
+
async function restore(sandbox, backend, key, lastHashes) {
|
|
505
|
+
let ids;
|
|
506
|
+
try {
|
|
507
|
+
ids = await backend.listRecords(key);
|
|
508
|
+
}
|
|
509
|
+
catch (e) {
|
|
510
|
+
console.warn('[sandbox/persistence] backend list failed:', e);
|
|
511
|
+
return null;
|
|
512
|
+
}
|
|
513
|
+
if (ids.length === 0)
|
|
514
|
+
return null;
|
|
515
|
+
const records = [];
|
|
516
|
+
for (const id of ids) {
|
|
517
|
+
try {
|
|
518
|
+
const rec = await backend.getRecord(key, id);
|
|
519
|
+
if (rec !== null)
|
|
520
|
+
records.push([id, rec]);
|
|
521
|
+
}
|
|
522
|
+
catch (e) {
|
|
523
|
+
console.warn(`[sandbox/persistence] failed to read persisted record '${id}':`, e);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
// C4 migrate-on-open: a legacy v2 record is the old single JSON blob (a
|
|
527
|
+
// string); v3 records are objects. Convert any v2 blob to v3 buckets in place,
|
|
528
|
+
// then delete the legacy record so the next open is pure v3.
|
|
529
|
+
const v3Records = [];
|
|
530
|
+
const legacyIds = [];
|
|
531
|
+
let migrated = null;
|
|
532
|
+
for (const [id, rec] of records) {
|
|
533
|
+
if (typeof rec === 'string') {
|
|
534
|
+
const m = migrateV2ToRecords(rec);
|
|
535
|
+
if (m) {
|
|
536
|
+
legacyIds.push(id);
|
|
537
|
+
migrated = m;
|
|
538
|
+
}
|
|
539
|
+
// a string that is not a recognizable v2 blob is unrecognized: skip it.
|
|
540
|
+
}
|
|
541
|
+
else {
|
|
542
|
+
v3Records.push([id, rec]);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
if (migrated) {
|
|
546
|
+
try {
|
|
547
|
+
await backend.putRecords(key, migrated);
|
|
548
|
+
if (legacyIds.length > 0)
|
|
549
|
+
await backend.deleteRecords(key, legacyIds);
|
|
550
|
+
}
|
|
551
|
+
catch (e) {
|
|
552
|
+
console.warn('[sandbox/persistence] v2 migration write failed:', e);
|
|
553
|
+
}
|
|
554
|
+
for (const [id, rec] of migrated)
|
|
555
|
+
v3Records.push([id, rec]);
|
|
556
|
+
}
|
|
557
|
+
// Seed the flush hash state from the effective v3 records, so the first flush
|
|
558
|
+
// does not redundantly re-write the just-restored (or just-migrated) buckets.
|
|
559
|
+
for (const [id, rec] of v3Records)
|
|
560
|
+
lastHashes.set(id, hashRecord(rec));
|
|
561
|
+
const parsed = deserializeFromBuckets(v3Records);
|
|
562
|
+
// 1. Restore Firestore documents first. These are the structural data
|
|
563
|
+
// that services (auth) may depend on being present.
|
|
564
|
+
for (const [path, data] of Object.entries(parsed.firestore)) {
|
|
565
|
+
sandbox.admin.setDocument(path, data);
|
|
566
|
+
}
|
|
567
|
+
// 2. Restore registered service state. Only services that are BOTH in
|
|
568
|
+
// the blob AND currently registered are restored here. Services not
|
|
569
|
+
// yet registered (late registration: enablePersistence before getAuth)
|
|
570
|
+
// receive their data when they register via the hook installed by
|
|
571
|
+
// attachPersistence. Each service restore is isolated so a broken
|
|
572
|
+
// service doesn't kill the entire restore.
|
|
573
|
+
if (sandbox instanceof SandboxImpl) {
|
|
574
|
+
const registry = sandbox.getServiceRegistry();
|
|
575
|
+
for (const [name, data] of Object.entries(parsed.services)) {
|
|
576
|
+
const svc = registry.get(name);
|
|
577
|
+
if (!svc)
|
|
578
|
+
continue; // not yet registered; will be applied via late-restore hook
|
|
579
|
+
try {
|
|
580
|
+
svc.restore(data);
|
|
581
|
+
}
|
|
582
|
+
catch (e) {
|
|
583
|
+
console.warn(`[sandbox/persistence] service '${name}' restore failed — ` +
|
|
584
|
+
`Firestore state is intact; auth users may need to be re-created:`, e);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
// Return the services blob so the controller can apply it to services
|
|
589
|
+
// that register after this call (the late-registration case).
|
|
590
|
+
return parsed.services;
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Which SandboxEvents move us toward a "dirty" state worth flushing?
|
|
594
|
+
*
|
|
595
|
+
* Writes (`kind: 'write'`) are the obvious ones. We also flush on
|
|
596
|
+
* `session_boundary` so a `reset()` snapshots the now-empty env — the
|
|
597
|
+
* persisted state then matches the in-memory state instead of holding
|
|
598
|
+
* stale pre-reset data.
|
|
599
|
+
*
|
|
600
|
+
* Read/listener events do not change state and don't trigger a flush.
|
|
601
|
+
*/
|
|
602
|
+
function isPersistableEvent(event) {
|
|
603
|
+
return event.kind === 'write' || event.kind === 'session_boundary';
|
|
604
|
+
}
|
|
605
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/sandbox/persistence/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence module barrel — public surface re-exported from the
|
|
3
|
+
* package root. Backends are exposed so hosts that need a custom
|
|
4
|
+
* adapter (filesystem, remote KV) can compose against the same
|
|
5
|
+
* contract.
|
|
6
|
+
*/
|
|
7
|
+
export type { PersistenceBackend, SandboxPersistenceOptions, WebStorageLike } from './types.js';
|
|
8
|
+
export { createIndexedDBBackend, createMemoryBackend, recordBackendOverBlob } from './backends.js';
|
|
9
|
+
export { serializeToBuckets, deserializeFromBuckets, bundleRecords, parseBundle } from './chunk-format.js';
|
|
10
|
+
export { PersistenceSchemaError, rehydrateDocValue } from './serialize.js';
|
|
11
|
+
export type { PersistenceController } from './controller.js';
|
|
12
|
+
export { attachPersistence } from './controller.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sandbox/persistence/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,YAAY,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createIndexedDBBackend, createMemoryBackend, recordBackendOverBlob } from './backends.js';
|
|
2
|
+
export { serializeToBuckets, deserializeFromBuckets, bundleRecords, parseBundle } from './chunk-format.js';
|
|
3
|
+
export { PersistenceSchemaError, rehydrateDocValue } from './serialize.js';
|
|
4
|
+
export { attachPersistence } from './controller.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sandbox/persistence/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|