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 @@
|
|
|
1
|
+
{"version":3,"file":"sentinel-capture.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/sentinel-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,MAAM,GAAG,EAAE;IAC1D,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;IAEZ,SAAS,KAAK,CAAC,CAAU,EAAE,CAAS;QAClC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO;QACnE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,CAA4B,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,GAA4B;IAC1C,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,IAAI,CAAC,KAAK,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IACtD,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IAC1C,IAAI,CAAC,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IAC5C,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IAC9C,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapshot-listener types — Slices 1–3 of `onSnapshot`.
|
|
3
|
+
*
|
|
4
|
+
* Slice 1 added the registry; Slice 2 added Web-SDK-shaped snapshot
|
|
5
|
+
* types and the initial-fire wiring (in local-environment.ts); Slice 3
|
|
6
|
+
* adds change detection — recompute on writes, diff against the prior
|
|
7
|
+
* snapshot, suppress no-ops, fire surviving callbacks. See
|
|
8
|
+
* the design rationale for the slice plan and
|
|
9
|
+
* the design rationale for the production
|
|
10
|
+
* patterns these types are adapted from (firebase-js-sdk 4.14.1, section 3,
|
|
11
|
+
* section 4, section 5).
|
|
12
|
+
*/
|
|
13
|
+
import type { DocumentData } from './local-state.js';
|
|
14
|
+
import type { Operation } from './local-environment.js';
|
|
15
|
+
import type { QueryConstraints } from '../../rules/simulator/query-proof.js';
|
|
16
|
+
/**
|
|
17
|
+
* A query's `where` / `orderBy` / cursor / `limit` constraints as a
|
|
18
|
+
* pure row transformer (FS-B2). `addSnapshotListener` threads this in
|
|
19
|
+
* from the chainable `QueryImpl.snapshotConstraints()` so a filtered
|
|
20
|
+
* `onSnapshot(query(...))` delivers the same membership as a one-shot
|
|
21
|
+
* `getDocs(query(...))`. `undefined` means a bare collection listen
|
|
22
|
+
* (no constraints) — the whole rule-allowed collection is delivered.
|
|
23
|
+
*
|
|
24
|
+
* RULES-B11 — the applier also carries `structured`, the query's
|
|
25
|
+
* `where`/`limit`/`orderBy` as data (not just an opaque transformer), so
|
|
26
|
+
* `silentReadCollection` can run `evaluateQueryProof` against the matched
|
|
27
|
+
* `list` rule: an unprovable query is DENIED whole ("rules are not
|
|
28
|
+
* filters"), never silently filtered. Carried on the function object so
|
|
29
|
+
* existing call sites that just thread the applier through stay unchanged.
|
|
30
|
+
*/
|
|
31
|
+
export interface QueryConstraintApplier {
|
|
32
|
+
(rows: {
|
|
33
|
+
path: string;
|
|
34
|
+
data: DocumentData;
|
|
35
|
+
}[]): {
|
|
36
|
+
path: string;
|
|
37
|
+
data: DocumentData;
|
|
38
|
+
}[];
|
|
39
|
+
/** Structured constraints for the query-proof gate (RULES-B11). Absent on
|
|
40
|
+
* appliers built before the query carries any provable constraints. */
|
|
41
|
+
structured?: QueryConstraints;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* What a listener is watching. Query targets carry their `where` /
|
|
45
|
+
* `orderBy` / `limit` constraints via {@link SnapshotTarget.constraints}
|
|
46
|
+
* (FS-B2) so the listener delivers a filtered/ordered/limited view
|
|
47
|
+
* rather than the whole collection.
|
|
48
|
+
*/
|
|
49
|
+
export type SnapshotTarget = {
|
|
50
|
+
kind: 'doc';
|
|
51
|
+
path: string;
|
|
52
|
+
} | {
|
|
53
|
+
kind: 'query';
|
|
54
|
+
collection: string;
|
|
55
|
+
constraints?: QueryConstraintApplier;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Mirrors `SnapshotListenOptions` from the Web SDK. `source: 'cache'` has
|
|
59
|
+
* no analog in the sandbox (no offline cache) — accepted but treated as
|
|
60
|
+
* `'default'`.
|
|
61
|
+
*
|
|
62
|
+
* `includeMetadataChanges` is now observable (item 3 / COMPAT firestore#85):
|
|
63
|
+
* a local write echoes to every listener with `hasPendingWrites: true`, and
|
|
64
|
+
* `includeMetadataChanges` listeners additionally receive the server-ack
|
|
65
|
+
* fire (`hasPendingWrites: false`) that default listeners never see. See
|
|
66
|
+
* `LocalEnvironment.notifyDocListener` / `notifyQueryListener`. `fromCache`
|
|
67
|
+
* remains constant `false` — the sandbox has no offline cache to serve from.
|
|
68
|
+
*/
|
|
69
|
+
export interface SnapshotListenerOptions {
|
|
70
|
+
includeMetadataChanges?: boolean;
|
|
71
|
+
source?: 'default' | 'cache';
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Callback shape is a placeholder until Slice 2 introduces the public
|
|
75
|
+
* `QuerySnapshot` / `DocumentSnapshot` types. Typed as `unknown` here so
|
|
76
|
+
* Slice 1 does not lock in a snapshot shape that survey item section 4 says
|
|
77
|
+
* needs careful construction (lazy `docs`, cached `docChanges()`).
|
|
78
|
+
*/
|
|
79
|
+
export type SnapshotCallback = (snapshot: unknown) => void;
|
|
80
|
+
/**
|
|
81
|
+
* Stream errors. Per findings section 9, listener errors are stream-level —
|
|
82
|
+
* once delivered, the listener is silently terminated (no further
|
|
83
|
+
* snapshots). Slice 7 wires this end-to-end; the field exists in the
|
|
84
|
+
* record now so Slice 1 doesn't have to re-shape it later.
|
|
85
|
+
*/
|
|
86
|
+
export type SnapshotErrorCallback = (error: unknown) => void;
|
|
87
|
+
/**
|
|
88
|
+
* The fork's auth context at registration time — captured per
|
|
89
|
+
* `addSnapshotListener` call rather than re-read at notification time.
|
|
90
|
+
*
|
|
91
|
+
* Why per-listener capture (write-time filtering): when a write by bob
|
|
92
|
+
* triggers a fan-out, alice's listener must re-read under ALICE's auth,
|
|
93
|
+
* not bob's. Re-reading "whatever auth is current" would let one user's
|
|
94
|
+
* write leak through another user's listener. So each listener pins the
|
|
95
|
+
* auth it subscribed with for write-driven re-evaluation. KEEP THIS.
|
|
96
|
+
*
|
|
97
|
+
* Why it ALSO re-captures (live listeners only): production doesn't just
|
|
98
|
+
* read auth once at listen-establishment — it RE-ESTABLISHES the listen
|
|
99
|
+
* stream when the session's own auth changes (sign-out/sign-in), so an
|
|
100
|
+
* auth-gated listener gets a permission-denied on sign-out. Capturing
|
|
101
|
+
* once was therefore INCOMPLETE. Live (`followsCurrentUser`) listeners
|
|
102
|
+
* re-capture their `auth` when the sandbox's `currentUser` changes (see
|
|
103
|
+
* {@link followsCurrentUser} + `LocalEnvironment.reevaluateLiveListeners`),
|
|
104
|
+
* matching that re-establishment. Frozen-ctx listeners
|
|
105
|
+
* (`followsCurrentUser === false`) stay pinned by design — that's the
|
|
106
|
+
* admin/testing use case where identity is chosen explicitly per handle.
|
|
107
|
+
*/
|
|
108
|
+
export type ListenerAuth = Operation['auth'];
|
|
109
|
+
export interface ListenerRecord {
|
|
110
|
+
/** Stable id used to look up the record on unsubscribe. */
|
|
111
|
+
id: string;
|
|
112
|
+
target: SnapshotTarget;
|
|
113
|
+
callback: SnapshotCallback;
|
|
114
|
+
errorCallback?: SnapshotErrorCallback;
|
|
115
|
+
/** Captured at registration; see {@link ListenerAuth}. */
|
|
116
|
+
auth: ListenerAuth;
|
|
117
|
+
/**
|
|
118
|
+
* `true` when this listener was registered through a `sandbox-live`
|
|
119
|
+
* Firestore handle (`getFirestore(sandbox)`), whose identity follows
|
|
120
|
+
* `sandbox.currentUser`. Such listeners re-capture their `auth` and
|
|
121
|
+
* re-evaluate when `currentUser` changes — matching production, which
|
|
122
|
+
* re-establishes the listen stream on a session auth change (an
|
|
123
|
+
* auth-gated listener loses access on sign-out). `false` for
|
|
124
|
+
* frozen-ctx listeners (`getFirestore(ctx)`), which stay pinned to the
|
|
125
|
+
* identity chosen at handle-construction time (admin/testing path).
|
|
126
|
+
*/
|
|
127
|
+
followsCurrentUser: boolean;
|
|
128
|
+
options: SnapshotListenerOptions;
|
|
129
|
+
/**
|
|
130
|
+
* Last snapshot delivered to the callback. Slice 2 populates this on
|
|
131
|
+
* the initial fire; Slice 3 uses {@link currentDocData} /
|
|
132
|
+
* {@link currentDocs} as the diff baseline (raw data is cheaper than
|
|
133
|
+
* unwrapping the snapshot accessor on every write).
|
|
134
|
+
*/
|
|
135
|
+
currentSnapshot: unknown;
|
|
136
|
+
/**
|
|
137
|
+
* Diff baseline for `kind: 'doc'` listeners. `null` means the doc
|
|
138
|
+
* does not exist; `undefined` means no snapshot has fired yet.
|
|
139
|
+
* Slice 3 reads this to detect modified-vs-no-op fires.
|
|
140
|
+
*/
|
|
141
|
+
currentDocData?: DocumentData | null;
|
|
142
|
+
/**
|
|
143
|
+
* Diff baseline for `kind: 'query'` listeners. The previous list of
|
|
144
|
+
* docs the listener saw, in the same order Slice 2's
|
|
145
|
+
* `silentReadCollection` returns them (path-ordered). Slice 3 passes
|
|
146
|
+
* this to `buildQuerySnapshot` so `oldIndex` and the `removed`
|
|
147
|
+
* change list are computed against the right baseline.
|
|
148
|
+
*/
|
|
149
|
+
currentDocs?: {
|
|
150
|
+
path: string;
|
|
151
|
+
data: DocumentData;
|
|
152
|
+
}[];
|
|
153
|
+
/**
|
|
154
|
+
* Set when an error has been delivered. Per findings section 9 — once true,
|
|
155
|
+
* the dispatch loop must skip this record. Slice 7 wires the flip.
|
|
156
|
+
*/
|
|
157
|
+
errored: boolean;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Mirrors `firebase/firestore`'s `SnapshotMetadata`. `fromCache` is always
|
|
161
|
+
* `false` (the sandbox has no offline cache). `hasPendingWrites` transitions
|
|
162
|
+
* (item 3): a local write's optimistic echo carries `true`, and the server
|
|
163
|
+
* ack carries `false` — so `includeMetadataChanges` has an observable effect
|
|
164
|
+
* matching prod (COMPAT firestore#85).
|
|
165
|
+
*/
|
|
166
|
+
export interface SnapshotMetadata {
|
|
167
|
+
readonly hasPendingWrites: boolean;
|
|
168
|
+
readonly fromCache: false;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Minimal `DocumentReference` shape exposed on snapshots — `id` and
|
|
172
|
+
* `path` are all the production type guarantees for read-side use. The
|
|
173
|
+
* Web SDK adapter (Slice 4) supplies a richer ref to its own callers;
|
|
174
|
+
* this interface is the contract this module promises.
|
|
175
|
+
*/
|
|
176
|
+
export interface SnapshotDocRef {
|
|
177
|
+
readonly id: string;
|
|
178
|
+
readonly path: string;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Minimal `Query` shape exposed on `QuerySnapshot.query` — production
|
|
182
|
+
* exposes the original `Query` object. For our purposes the listener's
|
|
183
|
+
* `SnapshotTarget` is enough handle for round-tripping.
|
|
184
|
+
*/
|
|
185
|
+
export interface SnapshotQueryRef {
|
|
186
|
+
readonly path: string;
|
|
187
|
+
}
|
|
188
|
+
export type DocumentChangeType = 'added' | 'modified' | 'removed';
|
|
189
|
+
export interface DocumentSnapshot {
|
|
190
|
+
readonly id: string;
|
|
191
|
+
readonly ref: SnapshotDocRef;
|
|
192
|
+
readonly metadata: SnapshotMetadata;
|
|
193
|
+
exists(): boolean;
|
|
194
|
+
data(): DocumentData | undefined;
|
|
195
|
+
/**
|
|
196
|
+
* Field accessor mirroring `firebase/firestore`'s `DocumentSnapshot.get(fieldPath)`.
|
|
197
|
+
* Dotted paths supported. Missing intermediate keys yield `undefined`
|
|
198
|
+
* — production behavior; agents commonly chain optional reads.
|
|
199
|
+
*/
|
|
200
|
+
get(fieldPath: string): unknown;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Production narrows `data()` to non-undefined here. We follow suit so
|
|
204
|
+
* that agent code calling `snap.data().foo` doesn't need a guard for
|
|
205
|
+
* the items inside a `QuerySnapshot.docs` array.
|
|
206
|
+
*/
|
|
207
|
+
export interface QueryDocumentSnapshot extends DocumentSnapshot {
|
|
208
|
+
data(): DocumentData;
|
|
209
|
+
}
|
|
210
|
+
export interface DocumentChange {
|
|
211
|
+
readonly type: DocumentChangeType;
|
|
212
|
+
readonly doc: QueryDocumentSnapshot;
|
|
213
|
+
/** -1 for `added`. */
|
|
214
|
+
readonly oldIndex: number;
|
|
215
|
+
/** -1 for `removed`. */
|
|
216
|
+
readonly newIndex: number;
|
|
217
|
+
}
|
|
218
|
+
/** Options for `QuerySnapshot.docChanges`. Mirrors Web SDK shape. */
|
|
219
|
+
export interface DocChangesOptions {
|
|
220
|
+
includeMetadataChanges?: boolean;
|
|
221
|
+
}
|
|
222
|
+
export interface QuerySnapshot {
|
|
223
|
+
readonly query: SnapshotQueryRef;
|
|
224
|
+
readonly metadata: SnapshotMetadata;
|
|
225
|
+
readonly size: number;
|
|
226
|
+
readonly empty: boolean;
|
|
227
|
+
readonly docs: QueryDocumentSnapshot[];
|
|
228
|
+
forEach(callback: (snap: QueryDocumentSnapshot) => void): void;
|
|
229
|
+
/**
|
|
230
|
+
* Per findings section 4: cached by `includeMetadataChanges` value; throws if
|
|
231
|
+
* called with `true` when the listener did not subscribe with
|
|
232
|
+
* `includeMetadataChanges: true`. The Slice 2 implementation produces
|
|
233
|
+
* "all docs added" on the first fire — Slice 3 supplies real diffs.
|
|
234
|
+
*/
|
|
235
|
+
docChanges(options?: DocChangesOptions): DocumentChange[];
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Settled metadata — `hasPendingWrites: false`. Used for the initial fire,
|
|
239
|
+
* the server-ack fire (item 3), and every re-eval that reflects a durable
|
|
240
|
+
* server read (rules redeploy, live-listener auth change). Shared frozen
|
|
241
|
+
* instance to save allocations on the common settled path.
|
|
242
|
+
*/
|
|
243
|
+
export declare const SANDBOX_METADATA: SnapshotMetadata;
|
|
244
|
+
/**
|
|
245
|
+
* Pending metadata — `hasPendingWrites: true`. Stamped on the local write
|
|
246
|
+
* echo (item 3): the optimistic fire a write produces before the (sandbox-
|
|
247
|
+
* synchronous) server ack. Mirrors prod, where a `setDoc` echoes locally
|
|
248
|
+
* with `hasPendingWrites: true`. COMPAT firestore#85.
|
|
249
|
+
*/
|
|
250
|
+
export declare const SANDBOX_METADATA_PENDING: SnapshotMetadata;
|
|
251
|
+
/**
|
|
252
|
+
* Build a Web-SDK-shaped `DocumentSnapshot` for a single doc path.
|
|
253
|
+
* `data === null` indicates the doc does not exist (`exists() === false`,
|
|
254
|
+
* `data() === undefined`).
|
|
255
|
+
*/
|
|
256
|
+
export declare function buildDocumentSnapshot(path: string, data: DocumentData | null, metadata?: SnapshotMetadata): DocumentSnapshot;
|
|
257
|
+
/**
|
|
258
|
+
* Build a Web-SDK-shaped `QuerySnapshot`.
|
|
259
|
+
*
|
|
260
|
+
* `docList` carries the docs in their query-order (the caller is
|
|
261
|
+
* responsible for ordering — for Slice 2 the order is whatever
|
|
262
|
+
* `LocalState.list` returns, which is a path-ordered scan).
|
|
263
|
+
*
|
|
264
|
+
* `prevDocs` is the previous snapshot's docs, used to compute
|
|
265
|
+
* `oldIndex`. Pass `undefined` for an initial snapshot — every doc
|
|
266
|
+
* surfaces as `added` with `oldIndex === -1`. Slice 3 will pass the
|
|
267
|
+
* previous list to compute `modified` / `removed` entries.
|
|
268
|
+
*
|
|
269
|
+
* The returned `docChanges()` is cached by `includeMetadataChanges`
|
|
270
|
+
* and throws on flag-mismatch when the listener didn't subscribe with
|
|
271
|
+
* the option (per findings section 4) — that throw is wired by passing
|
|
272
|
+
* `excludesMetadataChanges: !options.includeMetadataChanges` from the
|
|
273
|
+
* listener record, which Slice 3 hooks into the dispatch path.
|
|
274
|
+
*/
|
|
275
|
+
export declare function buildQuerySnapshot(query: SnapshotQueryRef, docList: {
|
|
276
|
+
path: string;
|
|
277
|
+
data: DocumentData;
|
|
278
|
+
}[], options: {
|
|
279
|
+
excludesMetadataChanges: boolean;
|
|
280
|
+
}, prevDocs?: {
|
|
281
|
+
path: string;
|
|
282
|
+
data: DocumentData;
|
|
283
|
+
}[], metadata?: SnapshotMetadata): QuerySnapshot;
|
|
284
|
+
//# sourceMappingURL=snapshot-listeners.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-listeners.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/snapshot-listeners.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
// FS-B10 — translate the listener read path so `snap.data()` exposes the
|
|
2
|
+
// SAME compat-shaped values (`Timestamp` `{seconds, nanoseconds}`, `Bytes`,
|
|
3
|
+
// `GeoPoint`) a one-shot `getDoc`/`getDocs` returns. Without this the
|
|
4
|
+
// listener leaked the rules-internal `Timestamp` (`{seconds, nanos}`, with a
|
|
5
|
+
// `typeName` field and no `nanoseconds`). `read-translation.ts` carries no
|
|
6
|
+
// admin-compat-surface dependency, so importing it here is cycle-free.
|
|
7
|
+
import { translateReadData } from './admin-compat/read-translation.js';
|
|
8
|
+
// ─── Snapshot constants ──────────────────────────────────────────────
|
|
9
|
+
/**
|
|
10
|
+
* Settled metadata — `hasPendingWrites: false`. Used for the initial fire,
|
|
11
|
+
* the server-ack fire (item 3), and every re-eval that reflects a durable
|
|
12
|
+
* server read (rules redeploy, live-listener auth change). Shared frozen
|
|
13
|
+
* instance to save allocations on the common settled path.
|
|
14
|
+
*/
|
|
15
|
+
export const SANDBOX_METADATA = Object.freeze({
|
|
16
|
+
hasPendingWrites: false,
|
|
17
|
+
fromCache: false,
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* Pending metadata — `hasPendingWrites: true`. Stamped on the local write
|
|
21
|
+
* echo (item 3): the optimistic fire a write produces before the (sandbox-
|
|
22
|
+
* synchronous) server ack. Mirrors prod, where a `setDoc` echoes locally
|
|
23
|
+
* with `hasPendingWrites: true`. COMPAT firestore#85.
|
|
24
|
+
*/
|
|
25
|
+
export const SANDBOX_METADATA_PENDING = Object.freeze({
|
|
26
|
+
hasPendingWrites: true,
|
|
27
|
+
fromCache: false,
|
|
28
|
+
});
|
|
29
|
+
// ─── Snapshot construction helpers ───────────────────────────────────
|
|
30
|
+
/**
|
|
31
|
+
* Walk a dotted path against a data tree. Returns `undefined` on any
|
|
32
|
+
* missing intermediate or non-object node — matching production's
|
|
33
|
+
* forgiving accessor (Web SDK `DocumentSnapshot.get`).
|
|
34
|
+
*/
|
|
35
|
+
function getByPath(data, fieldPath) {
|
|
36
|
+
if (data === undefined)
|
|
37
|
+
return undefined;
|
|
38
|
+
const parts = fieldPath.split('.');
|
|
39
|
+
let cur = data;
|
|
40
|
+
for (const p of parts) {
|
|
41
|
+
if (cur === null || cur === undefined || typeof cur !== 'object')
|
|
42
|
+
return undefined;
|
|
43
|
+
cur = cur[p];
|
|
44
|
+
}
|
|
45
|
+
return cur;
|
|
46
|
+
}
|
|
47
|
+
function lastSegment(path) {
|
|
48
|
+
const i = path.lastIndexOf('/');
|
|
49
|
+
return i === -1 ? path : path.slice(i + 1);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Build a Web-SDK-shaped `DocumentSnapshot` for a single doc path.
|
|
53
|
+
* `data === null` indicates the doc does not exist (`exists() === false`,
|
|
54
|
+
* `data() === undefined`).
|
|
55
|
+
*/
|
|
56
|
+
export function buildDocumentSnapshot(path, data, metadata = SANDBOX_METADATA) {
|
|
57
|
+
const ref = { id: lastSegment(path), path };
|
|
58
|
+
const exists = data !== null;
|
|
59
|
+
// FS-B10 — translate to the same compat shape `getDoc` returns, so a
|
|
60
|
+
// listener's `snap.data().createdAt` is a `{seconds, nanoseconds}`
|
|
61
|
+
// Timestamp, not the rules-internal `{seconds, nanos}` wrapper.
|
|
62
|
+
const translated = exists ? translateReadData(data) : undefined;
|
|
63
|
+
return {
|
|
64
|
+
id: ref.id,
|
|
65
|
+
ref,
|
|
66
|
+
metadata,
|
|
67
|
+
exists: () => exists,
|
|
68
|
+
data: () => translated,
|
|
69
|
+
get: (fieldPath) => getByPath(translated, fieldPath),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function buildQueryDocumentSnapshot(path, data, metadata = SANDBOX_METADATA) {
|
|
73
|
+
const ref = { id: lastSegment(path), path };
|
|
74
|
+
// FS-B10 — same read-path translation as the single-doc + getDocs paths.
|
|
75
|
+
const translated = translateReadData(data);
|
|
76
|
+
return {
|
|
77
|
+
id: ref.id,
|
|
78
|
+
ref,
|
|
79
|
+
metadata,
|
|
80
|
+
exists: () => true,
|
|
81
|
+
data: () => translated,
|
|
82
|
+
get: (fieldPath) => getByPath(translated, fieldPath),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Build a Web-SDK-shaped `QuerySnapshot`.
|
|
87
|
+
*
|
|
88
|
+
* `docList` carries the docs in their query-order (the caller is
|
|
89
|
+
* responsible for ordering — for Slice 2 the order is whatever
|
|
90
|
+
* `LocalState.list` returns, which is a path-ordered scan).
|
|
91
|
+
*
|
|
92
|
+
* `prevDocs` is the previous snapshot's docs, used to compute
|
|
93
|
+
* `oldIndex`. Pass `undefined` for an initial snapshot — every doc
|
|
94
|
+
* surfaces as `added` with `oldIndex === -1`. Slice 3 will pass the
|
|
95
|
+
* previous list to compute `modified` / `removed` entries.
|
|
96
|
+
*
|
|
97
|
+
* The returned `docChanges()` is cached by `includeMetadataChanges`
|
|
98
|
+
* and throws on flag-mismatch when the listener didn't subscribe with
|
|
99
|
+
* the option (per findings section 4) — that throw is wired by passing
|
|
100
|
+
* `excludesMetadataChanges: !options.includeMetadataChanges` from the
|
|
101
|
+
* listener record, which Slice 3 hooks into the dispatch path.
|
|
102
|
+
*/
|
|
103
|
+
export function buildQuerySnapshot(query, docList, options, prevDocs, metadata = SANDBOX_METADATA) {
|
|
104
|
+
const docs = docList.map((d) => buildQueryDocumentSnapshot(d.path, d.data, metadata));
|
|
105
|
+
// Pre-compute the no-metadata-change view (Slice 2 semantics):
|
|
106
|
+
// initial fire → every current doc is `added`. Slice 3 will replace
|
|
107
|
+
// this with proper diffing against `prevDocs`.
|
|
108
|
+
const baseChanges = prevDocs
|
|
109
|
+
? computeChanges(prevDocs, docList, docs, metadata)
|
|
110
|
+
: docs.map((doc, newIndex) => ({ type: 'added', doc, oldIndex: -1, newIndex }));
|
|
111
|
+
let cachedNoMetaChanges = null;
|
|
112
|
+
let cachedWithMetaChanges = null;
|
|
113
|
+
return {
|
|
114
|
+
query,
|
|
115
|
+
metadata,
|
|
116
|
+
size: docs.length,
|
|
117
|
+
empty: docs.length === 0,
|
|
118
|
+
docs,
|
|
119
|
+
forEach(cb) {
|
|
120
|
+
for (const d of docs)
|
|
121
|
+
cb(d);
|
|
122
|
+
},
|
|
123
|
+
docChanges(opts) {
|
|
124
|
+
const wantMeta = !!opts?.includeMetadataChanges;
|
|
125
|
+
if (wantMeta && options.excludesMetadataChanges) {
|
|
126
|
+
// Production throws `FirestoreError(invalid-argument)` here. We
|
|
127
|
+
// throw a plain Error in the simulator core; the Web SDK adapter
|
|
128
|
+
// (Slice 4) re-tags this into a `FirestoreError` shape so agent
|
|
129
|
+
// code can pattern-match on `.code`.
|
|
130
|
+
throw new Error('To include metadata changes with your document changes, you must also pass ' +
|
|
131
|
+
'{ includeMetadataChanges: true } to onSnapshot().');
|
|
132
|
+
}
|
|
133
|
+
// Sandbox metadata never transitions (findings section 6) so the two
|
|
134
|
+
// cached arrays are identical in practice — keeping the cache key
|
|
135
|
+
// separate matches production's contract verbatim and lets us add
|
|
136
|
+
// distinct semantics later without breaking call sites.
|
|
137
|
+
if (wantMeta) {
|
|
138
|
+
if (!cachedWithMetaChanges)
|
|
139
|
+
cachedWithMetaChanges = baseChanges.slice();
|
|
140
|
+
return cachedWithMetaChanges;
|
|
141
|
+
}
|
|
142
|
+
if (!cachedNoMetaChanges)
|
|
143
|
+
cachedNoMetaChanges = baseChanges.slice();
|
|
144
|
+
return cachedNoMetaChanges;
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Diff `prev` against `curr` to produce `DocumentChange[]`. Slice 3
|
|
150
|
+
* uses this from the notification path; Slice 2 only invokes it when
|
|
151
|
+
* `prevDocs` is supplied (i.e. never on the initial fire).
|
|
152
|
+
*
|
|
153
|
+
* `oldIndex`/`newIndex` follow production's contract (-1 for added /
|
|
154
|
+
* removed). Comparison uses path identity for membership and a shallow
|
|
155
|
+
* `JSON.stringify` for "modified" detection — good enough for the
|
|
156
|
+
* sandbox's data shapes (all `DocumentData` values are JSON-serialisable
|
|
157
|
+
* after sentinel resolution). A deep-equal helper can land in Slice 3
|
|
158
|
+
* if a probe surfaces a divergence.
|
|
159
|
+
*/
|
|
160
|
+
function computeChanges(prev, curr, currSnaps, metadata = SANDBOX_METADATA) {
|
|
161
|
+
const prevIndex = new Map();
|
|
162
|
+
prev.forEach((d, i) => prevIndex.set(d.path, i));
|
|
163
|
+
const currIndex = new Map();
|
|
164
|
+
curr.forEach((d, i) => currIndex.set(d.path, i));
|
|
165
|
+
const out = [];
|
|
166
|
+
// Removed (in prev, not in curr) — keep `oldIndex` from prev.
|
|
167
|
+
for (let i = 0; i < prev.length; i++) {
|
|
168
|
+
const p = prev[i];
|
|
169
|
+
if (!currIndex.has(p.path)) {
|
|
170
|
+
out.push({
|
|
171
|
+
type: 'removed',
|
|
172
|
+
doc: buildQueryDocumentSnapshot(p.path, p.data, metadata),
|
|
173
|
+
oldIndex: i,
|
|
174
|
+
newIndex: -1,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Added or modified (every curr entry).
|
|
179
|
+
for (let i = 0; i < curr.length; i++) {
|
|
180
|
+
const c = curr[i];
|
|
181
|
+
const oldI = prevIndex.get(c.path);
|
|
182
|
+
if (oldI === undefined) {
|
|
183
|
+
out.push({ type: 'added', doc: currSnaps[i], oldIndex: -1, newIndex: i });
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
const prevData = prev[oldI].data;
|
|
187
|
+
if (JSON.stringify(prevData) !== JSON.stringify(c.data)) {
|
|
188
|
+
out.push({ type: 'modified', doc: currSnaps[i], oldIndex: oldI, newIndex: i });
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return out;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=snapshot-listeners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-listeners.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/snapshot-listeners.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* topK: the k smallest items by `cmp`, in ascending order, WITHOUT sorting the
|
|
3
|
+
* whole input. Equivalent to `[...items].sort(cmp).slice(0, k)` when `cmp` is a
|
|
4
|
+
* total order (no ties), which the query engine guarantees since its
|
|
5
|
+
* normalized orderBy ends with the unique `__name__` key. Used by `limit`
|
|
6
|
+
* queries (no full sort) and, later, by `findNearest`'s vector top-k.
|
|
7
|
+
*
|
|
8
|
+
* Maintains a bounded ascending buffer of size <= k via binary insertion: O(n
|
|
9
|
+
* log k) comparisons and O(k) extra space, vs the full sort's O(n log n) + O(n).
|
|
10
|
+
*/
|
|
11
|
+
export declare function topK<T>(items: Iterable<T>, k: number, cmp: (a: T, b: T) => number): T[];
|
|
12
|
+
//# sourceMappingURL=topk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topk.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/topk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,CAAC,EAAE,CAcvF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* topK: the k smallest items by `cmp`, in ascending order, WITHOUT sorting the
|
|
3
|
+
* whole input. Equivalent to `[...items].sort(cmp).slice(0, k)` when `cmp` is a
|
|
4
|
+
* total order (no ties), which the query engine guarantees since its
|
|
5
|
+
* normalized orderBy ends with the unique `__name__` key. Used by `limit`
|
|
6
|
+
* queries (no full sort) and, later, by `findNearest`'s vector top-k.
|
|
7
|
+
*
|
|
8
|
+
* Maintains a bounded ascending buffer of size <= k via binary insertion: O(n
|
|
9
|
+
* log k) comparisons and O(k) extra space, vs the full sort's O(n log n) + O(n).
|
|
10
|
+
*/
|
|
11
|
+
export function topK(items, k, cmp) {
|
|
12
|
+
if (k <= 0)
|
|
13
|
+
return [];
|
|
14
|
+
const top = [];
|
|
15
|
+
for (const item of items) {
|
|
16
|
+
if (top.length < k) {
|
|
17
|
+
insertSorted(top, item, cmp);
|
|
18
|
+
}
|
|
19
|
+
else if (cmp(item, top[top.length - 1]) < 0) {
|
|
20
|
+
// `item` ranks ahead of the current k-th: evict the largest, insert this.
|
|
21
|
+
top.pop();
|
|
22
|
+
insertSorted(top, item, cmp);
|
|
23
|
+
}
|
|
24
|
+
// else: item is no smaller than the k-th best, so it cannot make the cut.
|
|
25
|
+
}
|
|
26
|
+
return top;
|
|
27
|
+
}
|
|
28
|
+
/** Insert `item` into the ascending array `arr` at its sorted position. Ties
|
|
29
|
+
* (cmp === 0) land AFTER equal elements, preserving input order among equals. */
|
|
30
|
+
function insertSorted(arr, item, cmp) {
|
|
31
|
+
let lo = 0;
|
|
32
|
+
let hi = arr.length;
|
|
33
|
+
while (lo < hi) {
|
|
34
|
+
const mid = (lo + hi) >> 1;
|
|
35
|
+
if (cmp(item, arr[mid]) < 0)
|
|
36
|
+
hi = mid;
|
|
37
|
+
else
|
|
38
|
+
lo = mid + 1;
|
|
39
|
+
}
|
|
40
|
+
arr.splice(lo, 0, item);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=topk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topk.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/topk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,UAAU,IAAI,CAAI,KAAkB,EAAE,CAAS,EAAE,GAA2B;IAChF,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,0EAA0E;YAC1E,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,0EAA0E;IAC5E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;kFACkF;AAClF,SAAS,YAAY,CAAI,GAAQ,EAAE,IAAO,EAAE,GAA2B;IACrE,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IACpB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAE,CAAC,GAAG,CAAC;YAAE,EAAE,GAAG,GAAG,CAAC;;YAClC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Item 1.3 — Same-path queued-write collapse.
|
|
3
|
+
*
|
|
4
|
+
* `TransactionContext` queues writes append-only (Item 1.2). Before
|
|
5
|
+
* commit, ops at the same path collapse into a single operation so the
|
|
6
|
+
* existing `LocalState.applyBatch` can run rules-eval + apply atomically
|
|
7
|
+
* without per-call divergence.
|
|
8
|
+
*
|
|
9
|
+
* Probe 0.D verified `update + update` merges fields (last-wins per
|
|
10
|
+
* field, earlier-but-non-overlapping fields preserved). The other
|
|
11
|
+
* combinations are extrapolated from Admin SDK semantics:
|
|
12
|
+
*
|
|
13
|
+
* set + set → second `set` wins (overwrite semantics).
|
|
14
|
+
* set + update → `set` with `{ ...set.data, ...update.data }`.
|
|
15
|
+
* set + delete → `delete` wins (the set never observable).
|
|
16
|
+
* create + update → `create` with `{ ...create.data, ...update.data }`.
|
|
17
|
+
* create + set → `set` wins (set overwrites, semantically a
|
|
18
|
+
* fresh create-or-replace).
|
|
19
|
+
* create + delete → `delete` wins (final state is gone).
|
|
20
|
+
* update + update → ✅ probed: merged data.
|
|
21
|
+
* update + set → `set` wins (set replaces entirely).
|
|
22
|
+
* update + delete → `delete` wins.
|
|
23
|
+
* delete + ANYTHING → THROW. Probe didn't cover; safer to error
|
|
24
|
+
* than guess. Decisions Log: "delete + write
|
|
25
|
+
* merge unprobed; v1 throws ambiguous".
|
|
26
|
+
*
|
|
27
|
+
* Output is `LocalState.BatchOperation[]` directly — that's what the
|
|
28
|
+
* commit path (Item 2) feeds into `applyBatch`. Same-path entries
|
|
29
|
+
* collapse into one entry; different paths preserve order of first
|
|
30
|
+
* appearance (insertion order in the path map).
|
|
31
|
+
*/
|
|
32
|
+
import type { BatchOperation } from './local-state.js';
|
|
33
|
+
import type { QueuedWrite } from './transaction-types.js';
|
|
34
|
+
/**
|
|
35
|
+
* Thrown when the queue contains a `delete` followed by another write
|
|
36
|
+
* at the same path. The combination is unprobed; v1 errors instead of
|
|
37
|
+
* guessing. The wrapper in the commit path (Item 2) translates this
|
|
38
|
+
* to a `FirestoreSimError { code: 'failed-precondition' }` with a
|
|
39
|
+
* message naming the unprobed combo.
|
|
40
|
+
*/
|
|
41
|
+
export declare class AmbiguousPostDeleteWriteError extends Error {
|
|
42
|
+
readonly path: string;
|
|
43
|
+
readonly secondMethod: string;
|
|
44
|
+
constructor(path: string, secondMethod: string);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Collapse the per-path queue into one `BatchOperation` per path.
|
|
48
|
+
*
|
|
49
|
+
* - Iterates writes in queue order.
|
|
50
|
+
* - For each path, maintains the "effective op" (method + accumulated
|
|
51
|
+
* data) and folds in subsequent writes per the table above.
|
|
52
|
+
* - Throws `AmbiguousPostDeleteWriteError` on `delete + anything`.
|
|
53
|
+
*/
|
|
54
|
+
export declare function mergeQueuedWrites(writes: readonly QueuedWrite[]): BatchOperation[];
|
|
55
|
+
//# sourceMappingURL=transaction-merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-merge.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/transaction-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;GAMG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAClB,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;CAW/C;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,EAAE,CAoBlF"}
|