pyric 0.0.1 → 0.1.0-alpha.8
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 +138 -2
- package/README.md.orig +54 -0
- 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 +110 -3
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Item 6 — typed error codes for `LocalEnvironment` results.
|
|
3
|
+
*
|
|
4
|
+
* The simulator previously surfaced denials as `allowed: false` plus an
|
|
5
|
+
* unstructured `debugMessages: string[]`. Agents had to grep the string
|
|
6
|
+
* to tell "rule denied" apart from "doc didn't exist" apart from "the
|
|
7
|
+
* sentinel was rejected", which is exactly the affordance Firestore's
|
|
8
|
+
* `FirestoreError.code` gives them in production.
|
|
9
|
+
*
|
|
10
|
+
* The codes here are the canonical set the firebase-admin SDK throws
|
|
11
|
+
* (a subset of gRPC status names). They're string-literal values so
|
|
12
|
+
* downstream consumers can switch on them without importing an enum.
|
|
13
|
+
*
|
|
14
|
+
* Mapping the simulator emits today (Item 6 first cut):
|
|
15
|
+
* - rule denied → 'permission-denied'
|
|
16
|
+
* - update of missing doc → 'not-found'
|
|
17
|
+
* - create of existing doc → 'already-exists'
|
|
18
|
+
* - sentinel-resolution failure → 'invalid-argument'
|
|
19
|
+
* (admin SDK also throws this for malformed FieldValue use; see
|
|
20
|
+
* the increment converter's "prior is not numeric" path)
|
|
21
|
+
*
|
|
22
|
+
* Codes defined-but-unused today (`failed-precondition`,
|
|
23
|
+
* `unauthenticated`) are reserved so adding their wiring later is a
|
|
24
|
+
* pure callsite change, no error-set churn.
|
|
25
|
+
*/
|
|
26
|
+
export declare const FIRESTORE_ERROR_CODES: readonly ["permission-denied", "not-found", "already-exists", "failed-precondition", "invalid-argument", "unauthenticated", "unimplemented"];
|
|
27
|
+
export type FirestoreErrorCode = typeof FIRESTORE_ERROR_CODES[number];
|
|
28
|
+
/**
|
|
29
|
+
* Eval-time request shape, populated on `permission-denied` so callers
|
|
30
|
+
* can inspect exactly what the rule saw — `request.auth`, the operation
|
|
31
|
+
* method+path, and (for writes) the resolved `request.resource.data`.
|
|
32
|
+
*
|
|
33
|
+
* Sentinels in `resourceData` are resolved (e.g., `serverTimestamp()` →
|
|
34
|
+
* Timestamp), matching what the rule actually evaluated against.
|
|
35
|
+
*/
|
|
36
|
+
export interface FirestoreEvalRequest {
|
|
37
|
+
method: 'get' | 'list' | 'create' | 'update' | 'delete';
|
|
38
|
+
path: string;
|
|
39
|
+
auth: {
|
|
40
|
+
uid: string;
|
|
41
|
+
token?: Record<string, unknown>;
|
|
42
|
+
} | null;
|
|
43
|
+
/** `request.resource.data` after sentinel resolution. Absent for reads. */
|
|
44
|
+
resourceData?: Record<string, unknown>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Eval-time existing-document state, populated on `permission-denied`
|
|
48
|
+
* for doc operations so callers can see what `resource.data` evaluated
|
|
49
|
+
* to. `null` data with `exists: false` mirrors how Firestore rules see
|
|
50
|
+
* an absent document (resource itself is null).
|
|
51
|
+
*/
|
|
52
|
+
export interface FirestoreEvalResource {
|
|
53
|
+
data: Record<string, unknown> | null;
|
|
54
|
+
exists: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface FirestoreSimError {
|
|
57
|
+
code: FirestoreErrorCode;
|
|
58
|
+
message: string;
|
|
59
|
+
/**
|
|
60
|
+
* Eval-time request shape — populated for `permission-denied` so
|
|
61
|
+
* callers don't have to re-derive `request.auth` / `request.resource`
|
|
62
|
+
* from out-of-band state. Absent for non-denial codes.
|
|
63
|
+
*/
|
|
64
|
+
request?: FirestoreEvalRequest;
|
|
65
|
+
/**
|
|
66
|
+
* Eval-time existing doc — populated for `permission-denied` on
|
|
67
|
+
* single-doc operations. Absent for collection ops (`list`) and
|
|
68
|
+
* non-denial codes.
|
|
69
|
+
*/
|
|
70
|
+
resource?: FirestoreEvalResource;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Build a structured error record. The optional `extras` carries
|
|
74
|
+
* eval-time context that downstream layers (admin-compat, sandbox,
|
|
75
|
+
* playground) surface so a denial reads like a debugger frame instead
|
|
76
|
+
* of an opaque "denied by rules".
|
|
77
|
+
*/
|
|
78
|
+
export declare function makeError(code: FirestoreErrorCode, message: string, extras?: {
|
|
79
|
+
request?: FirestoreEvalRequest;
|
|
80
|
+
resource?: FirestoreEvalResource;
|
|
81
|
+
}): FirestoreSimError;
|
|
82
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,eAAO,MAAM,qBAAqB,8IAaxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAEtE;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9D,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAA;CAAE,GAC5E,iBAAiB,CAKnB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Item 6 — typed error codes for `LocalEnvironment` results.
|
|
3
|
+
*
|
|
4
|
+
* The simulator previously surfaced denials as `allowed: false` plus an
|
|
5
|
+
* unstructured `debugMessages: string[]`. Agents had to grep the string
|
|
6
|
+
* to tell "rule denied" apart from "doc didn't exist" apart from "the
|
|
7
|
+
* sentinel was rejected", which is exactly the affordance Firestore's
|
|
8
|
+
* `FirestoreError.code` gives them in production.
|
|
9
|
+
*
|
|
10
|
+
* The codes here are the canonical set the firebase-admin SDK throws
|
|
11
|
+
* (a subset of gRPC status names). They're string-literal values so
|
|
12
|
+
* downstream consumers can switch on them without importing an enum.
|
|
13
|
+
*
|
|
14
|
+
* Mapping the simulator emits today (Item 6 first cut):
|
|
15
|
+
* - rule denied → 'permission-denied'
|
|
16
|
+
* - update of missing doc → 'not-found'
|
|
17
|
+
* - create of existing doc → 'already-exists'
|
|
18
|
+
* - sentinel-resolution failure → 'invalid-argument'
|
|
19
|
+
* (admin SDK also throws this for malformed FieldValue use; see
|
|
20
|
+
* the increment converter's "prior is not numeric" path)
|
|
21
|
+
*
|
|
22
|
+
* Codes defined-but-unused today (`failed-precondition`,
|
|
23
|
+
* `unauthenticated`) are reserved so adding their wiring later is a
|
|
24
|
+
* pure callsite change, no error-set churn.
|
|
25
|
+
*/
|
|
26
|
+
export const FIRESTORE_ERROR_CODES = [
|
|
27
|
+
'permission-denied',
|
|
28
|
+
'not-found',
|
|
29
|
+
'already-exists',
|
|
30
|
+
'failed-precondition',
|
|
31
|
+
'invalid-argument',
|
|
32
|
+
'unauthenticated',
|
|
33
|
+
// 'unimplemented' is the gRPC status the real Admin SDK throws for
|
|
34
|
+
// surfaces it doesn't implement. The admin-compat wrapper uses it for
|
|
35
|
+
// (a) slice-1-stub methods that aren't wired yet, and (b) typed-value
|
|
36
|
+
// inputs (GeoPoint/Bytes/Vector/DocumentReference) the simulator
|
|
37
|
+
// doesn't yet accept — both lit up incrementally as parity work lands.
|
|
38
|
+
'unimplemented',
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* Build a structured error record. The optional `extras` carries
|
|
42
|
+
* eval-time context that downstream layers (admin-compat, sandbox,
|
|
43
|
+
* playground) surface so a denial reads like a debugger frame instead
|
|
44
|
+
* of an opaque "denied by rules".
|
|
45
|
+
*/
|
|
46
|
+
export function makeError(code, message, extras) {
|
|
47
|
+
const out = { code, message };
|
|
48
|
+
if (extras?.request)
|
|
49
|
+
out.request = extras.request;
|
|
50
|
+
if (extras?.resource)
|
|
51
|
+
out.resource = extras.resource;
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,mBAAmB;IACnB,WAAW;IACX,gBAAgB;IAChB,qBAAqB;IACrB,kBAAkB;IAClB,iBAAiB;IACjB,mEAAmE;IACnE,sEAAsE;IACtE,sEAAsE;IACtE,iEAAiE;IACjE,uEAAuE;IACvE,eAAe;CACP,CAAC;AAgDX;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACvB,IAAwB,EACxB,OAAe,EACf,MAA6E;IAE7E,MAAM,GAAG,GAAsB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACjD,IAAI,MAAM,EAAE,OAAO;QAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAClD,IAAI,MAAM,EAAE,QAAQ;QAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACrD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Log — append-only audit trail for the local environment.
|
|
3
|
+
*
|
|
4
|
+
* Every operation (allowed or denied) is recorded. Undo is implemented
|
|
5
|
+
* via state snapshots — no need to replay events.
|
|
6
|
+
*/
|
|
7
|
+
import type { DocumentData } from './local-state.js';
|
|
8
|
+
export interface AgentEvent {
|
|
9
|
+
id: number;
|
|
10
|
+
timestamp: string;
|
|
11
|
+
type: 'single' | 'batch' | 'transaction';
|
|
12
|
+
method: string;
|
|
13
|
+
path: string;
|
|
14
|
+
auth: {
|
|
15
|
+
uid: string;
|
|
16
|
+
} | null;
|
|
17
|
+
allowed: boolean;
|
|
18
|
+
/** For writes: the data that was written */
|
|
19
|
+
data?: DocumentData;
|
|
20
|
+
/** For batch/transaction: individual operations */
|
|
21
|
+
operations?: Array<{
|
|
22
|
+
method: string;
|
|
23
|
+
path: string;
|
|
24
|
+
data?: DocumentData;
|
|
25
|
+
allowed: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* For transactions: the read-set captured by tx.get / tx.getAll inside
|
|
29
|
+
* the callback. Surfaced for diagnostic value (production doesn't
|
|
30
|
+
* expose this, but agents debugging "why did my tx commit nothing"
|
|
31
|
+
* benefit from seeing what the callback saw).
|
|
32
|
+
*/
|
|
33
|
+
reads?: Array<{
|
|
34
|
+
path: string;
|
|
35
|
+
data: DocumentData | null;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* For transactions: true iff the callback threw (read-after-write
|
|
39
|
+
* violation, ambiguous post-delete, or any user error). Aborted
|
|
40
|
+
* transactions are NOT undoable — they had no effect, popping them as
|
|
41
|
+
* undoable would skip a real prior write.
|
|
42
|
+
*/
|
|
43
|
+
aborted?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* For transactions: the error that aborted the callback (when
|
|
46
|
+
* `aborted: true`). Recorded for forensic value; the original Error
|
|
47
|
+
* is also re-thrown synchronously to the caller (probe 0.G —
|
|
48
|
+
* exceptions propagate unchanged).
|
|
49
|
+
*/
|
|
50
|
+
error?: {
|
|
51
|
+
name: string;
|
|
52
|
+
message: string;
|
|
53
|
+
code?: string;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Prior state of the AFFECTED paths only, captured before this event, for
|
|
57
|
+
* undo (single-write + batch). `null` means the doc did not exist (undo
|
|
58
|
+
* deletes it). Replaces the whole-keyspace {@link snapshot} for the common
|
|
59
|
+
* write paths so the undo stack is O(affected) not O(keyspace).
|
|
60
|
+
*/
|
|
61
|
+
priorDocs?: Record<string, DocumentData | null>;
|
|
62
|
+
/**
|
|
63
|
+
* Whole-keyspace snapshot BEFORE this event (for undo). Still used by
|
|
64
|
+
* transactions, whose affected paths aren't known until the callback runs.
|
|
65
|
+
*/
|
|
66
|
+
snapshot?: Record<string, DocumentData>;
|
|
67
|
+
/** Debug messages from rules evaluation */
|
|
68
|
+
debugMessages: string[];
|
|
69
|
+
}
|
|
70
|
+
export declare class EventLog {
|
|
71
|
+
private events;
|
|
72
|
+
private nextId;
|
|
73
|
+
private undoneEvents;
|
|
74
|
+
/** Append an event. Clears redo stack unless preserveRedo is true. */
|
|
75
|
+
append(event: Omit<AgentEvent, 'id' | 'timestamp'>, preserveRedo?: boolean): AgentEvent;
|
|
76
|
+
/** Get all events. */
|
|
77
|
+
getEvents(): AgentEvent[];
|
|
78
|
+
/** Get write events only (create, update, delete, set — not reads). */
|
|
79
|
+
getWriteEvents(): AgentEvent[];
|
|
80
|
+
/** Get the last write event (for undo). */
|
|
81
|
+
lastWriteEvent(): AgentEvent | null;
|
|
82
|
+
/**
|
|
83
|
+
* Pop the last write event for undo. Pushes to redo stack.
|
|
84
|
+
*
|
|
85
|
+
* Aborted transactions are skipped — they had no effect on state, so
|
|
86
|
+
* popping one as if it were undoable would silently leave a real
|
|
87
|
+
* prior write in place while the agent thinks it has been reverted.
|
|
88
|
+
* Aborted events stay in the log for forensic value (`getEvents()`
|
|
89
|
+
* still returns them) but do not enter the undo stack.
|
|
90
|
+
*/
|
|
91
|
+
popLastWrite(): AgentEvent | null;
|
|
92
|
+
/** Get the last undone event (for redo). */
|
|
93
|
+
popLastUndo(): AgentEvent | null;
|
|
94
|
+
/** Total event count. */
|
|
95
|
+
size(): number;
|
|
96
|
+
/** Clear all events. */
|
|
97
|
+
clear(): void;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=event-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-log.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/event-log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,mDAAmD;IACnD,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,YAAY,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;IACH;;;;;OAKG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC3D;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,2CAA2C;IAC3C,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,YAAY,CAAoB;IAExC,sEAAsE;IACtE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,EAAE,YAAY,UAAQ,GAAG,UAAU;IAWrF,sBAAsB;IACtB,SAAS,IAAI,UAAU,EAAE;IAIzB,uEAAuE;IACvE,cAAc,IAAI,UAAU,EAAE;IAI9B,2CAA2C;IAC3C,cAAc,IAAI,UAAU,GAAG,IAAI;IAKnC;;;;;;;;OAQG;IACH,YAAY,IAAI,UAAU,GAAG,IAAI;IAajC,4CAA4C;IAC5C,WAAW,IAAI,UAAU,GAAG,IAAI;IAIhC,yBAAyB;IACzB,IAAI,IAAI,MAAM;IAId,wBAAwB;IACxB,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export class EventLog {
|
|
2
|
+
events = [];
|
|
3
|
+
nextId = 1;
|
|
4
|
+
undoneEvents = [];
|
|
5
|
+
/** Append an event. Clears redo stack unless preserveRedo is true. */
|
|
6
|
+
append(event, preserveRedo = false) {
|
|
7
|
+
const full = {
|
|
8
|
+
...event,
|
|
9
|
+
id: this.nextId++,
|
|
10
|
+
timestamp: new Date().toISOString(),
|
|
11
|
+
};
|
|
12
|
+
this.events.push(full);
|
|
13
|
+
if (!preserveRedo)
|
|
14
|
+
this.undoneEvents = [];
|
|
15
|
+
return full;
|
|
16
|
+
}
|
|
17
|
+
/** Get all events. */
|
|
18
|
+
getEvents() {
|
|
19
|
+
return [...this.events];
|
|
20
|
+
}
|
|
21
|
+
/** Get write events only (create, update, delete, set — not reads). */
|
|
22
|
+
getWriteEvents() {
|
|
23
|
+
return this.events.filter(e => e.allowed && e.method !== 'get' && e.method !== 'list');
|
|
24
|
+
}
|
|
25
|
+
/** Get the last write event (for undo). */
|
|
26
|
+
lastWriteEvent() {
|
|
27
|
+
const writes = this.getWriteEvents();
|
|
28
|
+
return writes.length > 0 ? writes[writes.length - 1] : null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Pop the last write event for undo. Pushes to redo stack.
|
|
32
|
+
*
|
|
33
|
+
* Aborted transactions are skipped — they had no effect on state, so
|
|
34
|
+
* popping one as if it were undoable would silently leave a real
|
|
35
|
+
* prior write in place while the agent thinks it has been reverted.
|
|
36
|
+
* Aborted events stay in the log for forensic value (`getEvents()`
|
|
37
|
+
* still returns them) but do not enter the undo stack.
|
|
38
|
+
*/
|
|
39
|
+
popLastWrite() {
|
|
40
|
+
for (let i = this.events.length - 1; i >= 0; i--) {
|
|
41
|
+
const e = this.events[i];
|
|
42
|
+
if (e.aborted)
|
|
43
|
+
continue;
|
|
44
|
+
if (e.allowed && e.method !== 'get' && e.method !== 'list') {
|
|
45
|
+
this.events.splice(i, 1);
|
|
46
|
+
this.undoneEvents.push(e);
|
|
47
|
+
return e;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
/** Get the last undone event (for redo). */
|
|
53
|
+
popLastUndo() {
|
|
54
|
+
return this.undoneEvents.pop() ?? null;
|
|
55
|
+
}
|
|
56
|
+
/** Total event count. */
|
|
57
|
+
size() {
|
|
58
|
+
return this.events.length;
|
|
59
|
+
}
|
|
60
|
+
/** Clear all events. */
|
|
61
|
+
clear() {
|
|
62
|
+
this.events = [];
|
|
63
|
+
this.undoneEvents = [];
|
|
64
|
+
this.nextId = 1;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=event-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-log.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/event-log.ts"],"names":[],"mappings":"AA8DA,MAAM,OAAO,QAAQ;IACX,MAAM,GAAiB,EAAE,CAAC;IAC1B,MAAM,GAAG,CAAC,CAAC;IACX,YAAY,GAAiB,EAAE,CAAC;IAExC,sEAAsE;IACtE,MAAM,CAAC,KAA2C,EAAE,YAAY,GAAG,KAAK;QACtE,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB;IACtB,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,uEAAuE;IACvE,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACzF,CAAC;IAED,2CAA2C;IAC3C,cAAc;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED;;;;;;;;OAQG;IACH,YAAY;QACV,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC,OAAO;gBAAE,SAAS;YACxB,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1B,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IAC5C,WAAW;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,yBAAyB;IACzB,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,wBAAwB;IACxB,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field-path merge engine (FS-B5 + FS-B6).
|
|
3
|
+
*
|
|
4
|
+
* Firestore's `updateDoc` and `setDoc(..., {merge})` are not shallow
|
|
5
|
+
* object spreads. They build a *field mask* of leaf paths and set each
|
|
6
|
+
* leaf into the existing document, creating intermediate maps as needed
|
|
7
|
+
* and preserving sibling fields. This mirrors
|
|
8
|
+
* `clones/firebase-js-sdk/packages/firestore/src/model/object_value.ts`
|
|
9
|
+
* (`ObjectValue.set` / `getFieldsMap`) and `lite-api/user_data_reader.ts`
|
|
10
|
+
* (`parseUpdateData` — every top-level `updateDoc` key is parsed as a
|
|
11
|
+
* dot-separated FieldPath; `parseSetData` with `merge` extracts the mask
|
|
12
|
+
* from the data's nested maps).
|
|
13
|
+
*
|
|
14
|
+
* Two entry points feed the same leaf-set engine:
|
|
15
|
+
*
|
|
16
|
+
* - {@link applyUpdate} — `updateDoc(data)`. Each TOP-LEVEL key is a
|
|
17
|
+
* dot-separated FieldPath, so `{'a.b': 2}` sets leaf `a.b` (preserving
|
|
18
|
+
* `a.c`). A nested *map value* (`{a: {b: 2}}`) is a single-segment
|
|
19
|
+
* path `a` whose value is the whole map — it REPLACES `a` wholesale,
|
|
20
|
+
* matching prod (`updateDoc` does not deep-merge map values; only
|
|
21
|
+
* dot-paths reach into a map). `DELETE_MARKER` leaves delete the leaf.
|
|
22
|
+
*
|
|
23
|
+
* - {@link applyMerge} — `setDoc(data, {merge:true})` /
|
|
24
|
+
* `{mergeFields}`. The mask is every leaf path reachable by walking
|
|
25
|
+
* the data's nested plain maps, so `{a:{b:2}}` sets leaf `a.b`
|
|
26
|
+
* (preserving `a.c`) — i.e. maps DEEP-merge. `mergeFields` restricts
|
|
27
|
+
* the mask to the listed (dot-separated) field paths.
|
|
28
|
+
*
|
|
29
|
+
* Both operate on a freshly cloned copy of `existing` and never mutate
|
|
30
|
+
* the input. The resolved write tree is expected to have already run
|
|
31
|
+
* through the value-resolver (sentinels resolved, deleteField → marker).
|
|
32
|
+
*/
|
|
33
|
+
import { type DocumentData } from './value-resolver.js';
|
|
34
|
+
/**
|
|
35
|
+
* `updateDoc` semantics — top-level keys are dot-separated FieldPaths.
|
|
36
|
+
* `resolved` is the value-resolved write tree (its keys may contain dots;
|
|
37
|
+
* `DELETE_MARKER` leaves mean deleteField()). Returns the merged doc.
|
|
38
|
+
*/
|
|
39
|
+
export declare function applyUpdate(existing: DocumentData, resolved: DocumentData): DocumentData;
|
|
40
|
+
/**
|
|
41
|
+
* FS-B13 — thrown when a `deleteField()` sentinel appears below the top
|
|
42
|
+
* level of an `updateDoc` (or anywhere in a non-merge `set`). The write
|
|
43
|
+
* layer maps this to an `invalid-argument` FirestoreError.
|
|
44
|
+
*/
|
|
45
|
+
export declare class DeleteFieldNestedError extends Error {
|
|
46
|
+
constructor();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* FS-B13 — validate an `updateDoc` payload: a `deleteField()` (DELETE_MARKER)
|
|
50
|
+
* is legal only as a whole top-level value or via a dot-path key (the
|
|
51
|
+
* top-level entry value === DELETE_MARKER). Nested inside a map literal it
|
|
52
|
+
* throws {@link DeleteFieldNestedError}. Called pre-rules in
|
|
53
|
+
* `LocalEnvironment.execute` so the denial reads like prod's parse-time
|
|
54
|
+
* `invalid-argument`.
|
|
55
|
+
*/
|
|
56
|
+
export declare function assertNoNestedDeleteField(resolved: DocumentData): void;
|
|
57
|
+
/**
|
|
58
|
+
* `setDoc(merge:true)` semantics — recursively extract the leaf-path mask
|
|
59
|
+
* from `resolved` (nested maps deep-merge), then set each leaf. When
|
|
60
|
+
* `mergeFields` is supplied, only those (dot-separated) top-level field
|
|
61
|
+
* paths are written; everything else in `resolved` is ignored.
|
|
62
|
+
*/
|
|
63
|
+
export declare function applyMerge(existing: DocumentData, resolved: DocumentData, mergeFields?: readonly string[]): DocumentData;
|
|
64
|
+
//# sourceMappingURL=field-merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-merge.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/field-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AA0E7B;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,GACrB,YAAY,CAcd;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAYD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAMtE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAC9B,YAAY,CAoBd"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field-path merge engine (FS-B5 + FS-B6).
|
|
3
|
+
*
|
|
4
|
+
* Firestore's `updateDoc` and `setDoc(..., {merge})` are not shallow
|
|
5
|
+
* object spreads. They build a *field mask* of leaf paths and set each
|
|
6
|
+
* leaf into the existing document, creating intermediate maps as needed
|
|
7
|
+
* and preserving sibling fields. This mirrors
|
|
8
|
+
* `clones/firebase-js-sdk/packages/firestore/src/model/object_value.ts`
|
|
9
|
+
* (`ObjectValue.set` / `getFieldsMap`) and `lite-api/user_data_reader.ts`
|
|
10
|
+
* (`parseUpdateData` — every top-level `updateDoc` key is parsed as a
|
|
11
|
+
* dot-separated FieldPath; `parseSetData` with `merge` extracts the mask
|
|
12
|
+
* from the data's nested maps).
|
|
13
|
+
*
|
|
14
|
+
* Two entry points feed the same leaf-set engine:
|
|
15
|
+
*
|
|
16
|
+
* - {@link applyUpdate} — `updateDoc(data)`. Each TOP-LEVEL key is a
|
|
17
|
+
* dot-separated FieldPath, so `{'a.b': 2}` sets leaf `a.b` (preserving
|
|
18
|
+
* `a.c`). A nested *map value* (`{a: {b: 2}}`) is a single-segment
|
|
19
|
+
* path `a` whose value is the whole map — it REPLACES `a` wholesale,
|
|
20
|
+
* matching prod (`updateDoc` does not deep-merge map values; only
|
|
21
|
+
* dot-paths reach into a map). `DELETE_MARKER` leaves delete the leaf.
|
|
22
|
+
*
|
|
23
|
+
* - {@link applyMerge} — `setDoc(data, {merge:true})` /
|
|
24
|
+
* `{mergeFields}`. The mask is every leaf path reachable by walking
|
|
25
|
+
* the data's nested plain maps, so `{a:{b:2}}` sets leaf `a.b`
|
|
26
|
+
* (preserving `a.c`) — i.e. maps DEEP-merge. `mergeFields` restricts
|
|
27
|
+
* the mask to the listed (dot-separated) field paths.
|
|
28
|
+
*
|
|
29
|
+
* Both operate on a freshly cloned copy of `existing` and never mutate
|
|
30
|
+
* the input. The resolved write tree is expected to have already run
|
|
31
|
+
* through the value-resolver (sentinels resolved, deleteField → marker).
|
|
32
|
+
*/
|
|
33
|
+
import { DELETE_MARKER, isPlainObject, stripMarkers, } from './value-resolver.js';
|
|
34
|
+
/** Split a dot-separated FieldPath string into segments. */
|
|
35
|
+
function splitPath(key) {
|
|
36
|
+
return key.split('.');
|
|
37
|
+
}
|
|
38
|
+
/** Field-path segments that must never be walked or written. The merge
|
|
39
|
+
* engine sets leaves into plain JS objects, and `isPlainObject` treats
|
|
40
|
+
* `Object.prototype` (its `proto === null` branch) as plain — so a
|
|
41
|
+
* segment named `__proto__` (or, defence-in-depth, `constructor`/
|
|
42
|
+
* `prototype`) would let a rule-permitted `updateDoc`/`setDoc(merge)`
|
|
43
|
+
* walk into and pollute the shared prototype process-wide. Field names
|
|
44
|
+
* arrive via JSON transports that preserve `__proto__` as a genuine own
|
|
45
|
+
* key, so this is reachable with ordinary data. These are not valid
|
|
46
|
+
* Firestore field-path segments, so rejecting them is sandbox-only
|
|
47
|
+
* safety, not a parity regression. */
|
|
48
|
+
const UNSAFE_SEGMENTS = new Set(['__proto__', 'prototype', 'constructor']);
|
|
49
|
+
function assertSafeSegment(seg) {
|
|
50
|
+
if (UNSAFE_SEGMENTS.has(seg)) {
|
|
51
|
+
throw new Error(`Invalid field-path segment '${seg}': the keys __proto__, prototype, ` +
|
|
52
|
+
'and constructor are reserved and cannot appear in a field path.');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** Deep clone a plain document tree, leaving class instances by reference
|
|
56
|
+
* (Timestamp, Bytes, etc. are immutable wrappers — safe to share). */
|
|
57
|
+
function cloneDoc(data) {
|
|
58
|
+
const out = {};
|
|
59
|
+
for (const [k, v] of Object.entries(data)) {
|
|
60
|
+
out[k] = cloneValue(v);
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
function cloneValue(v) {
|
|
65
|
+
if (Array.isArray(v))
|
|
66
|
+
return v.map(cloneValue);
|
|
67
|
+
if (isPlainObject(v))
|
|
68
|
+
return cloneDoc(v);
|
|
69
|
+
return v;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Navigate to the parent map of `segments`, creating (or replacing
|
|
73
|
+
* non-map intermediates with) plain maps along the way, then set or
|
|
74
|
+
* delete the leaf. Mirrors `ObjectValue.getFieldsMap` + `applyChanges`.
|
|
75
|
+
*/
|
|
76
|
+
function setLeaf(root, segments, value) {
|
|
77
|
+
let cursor = root;
|
|
78
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
79
|
+
const seg = segments[i];
|
|
80
|
+
assertSafeSegment(seg);
|
|
81
|
+
// Own-property read only: bare `cursor[seg]` would resolve an
|
|
82
|
+
// unvalidated `__proto__` segment to the shared object prototype
|
|
83
|
+
// (which `isPlainObject` accepts as a walkable map).
|
|
84
|
+
const next = Object.hasOwn(cursor, seg) ? cursor[seg] : undefined;
|
|
85
|
+
if (!isPlainObject(next)) {
|
|
86
|
+
// Intermediate is missing or not a map — prod creates a fresh map
|
|
87
|
+
// (the old value at this path is shadowed by the deeper write).
|
|
88
|
+
cursor[seg] = {};
|
|
89
|
+
}
|
|
90
|
+
cursor = cursor[seg];
|
|
91
|
+
}
|
|
92
|
+
const leaf = segments[segments.length - 1];
|
|
93
|
+
assertSafeSegment(leaf);
|
|
94
|
+
if (value === DELETE_MARKER) {
|
|
95
|
+
delete cursor[leaf];
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
cursor[leaf] = stripMarkers(value);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* `updateDoc` semantics — top-level keys are dot-separated FieldPaths.
|
|
103
|
+
* `resolved` is the value-resolved write tree (its keys may contain dots;
|
|
104
|
+
* `DELETE_MARKER` leaves mean deleteField()). Returns the merged doc.
|
|
105
|
+
*/
|
|
106
|
+
export function applyUpdate(existing, resolved) {
|
|
107
|
+
const out = cloneDoc(existing);
|
|
108
|
+
for (const [key, value] of Object.entries(resolved)) {
|
|
109
|
+
// FS-B13 — `deleteField()` may only appear at the top level of an update
|
|
110
|
+
// (as a whole field value or via a dot-path key). Nested inside a map
|
|
111
|
+
// literal it is invalid; prod throws `invalid-argument` rather than
|
|
112
|
+
// silently destroying the sibling data. Mirrors
|
|
113
|
+
// `clones/.../lite-api/user_data_reader.ts:DeleteFieldValueImpl`.
|
|
114
|
+
if (value !== DELETE_MARKER && containsDeleteMarker(value)) {
|
|
115
|
+
throw new DeleteFieldNestedError();
|
|
116
|
+
}
|
|
117
|
+
setLeaf(out, splitPath(key), value);
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* FS-B13 — thrown when a `deleteField()` sentinel appears below the top
|
|
123
|
+
* level of an `updateDoc` (or anywhere in a non-merge `set`). The write
|
|
124
|
+
* layer maps this to an `invalid-argument` FirestoreError.
|
|
125
|
+
*/
|
|
126
|
+
export class DeleteFieldNestedError extends Error {
|
|
127
|
+
constructor() {
|
|
128
|
+
super('FieldValue.delete() can only appear at the top level of your update data');
|
|
129
|
+
this.name = 'DeleteFieldNestedError';
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** True when `value` contains a {@link DELETE_MARKER} anywhere in its tree. */
|
|
133
|
+
function containsDeleteMarker(value) {
|
|
134
|
+
if (value === DELETE_MARKER)
|
|
135
|
+
return true;
|
|
136
|
+
if (Array.isArray(value))
|
|
137
|
+
return value.some(containsDeleteMarker);
|
|
138
|
+
if (isPlainObject(value)) {
|
|
139
|
+
return Object.values(value).some(containsDeleteMarker);
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* FS-B13 — validate an `updateDoc` payload: a `deleteField()` (DELETE_MARKER)
|
|
145
|
+
* is legal only as a whole top-level value or via a dot-path key (the
|
|
146
|
+
* top-level entry value === DELETE_MARKER). Nested inside a map literal it
|
|
147
|
+
* throws {@link DeleteFieldNestedError}. Called pre-rules in
|
|
148
|
+
* `LocalEnvironment.execute` so the denial reads like prod's parse-time
|
|
149
|
+
* `invalid-argument`.
|
|
150
|
+
*/
|
|
151
|
+
export function assertNoNestedDeleteField(resolved) {
|
|
152
|
+
for (const value of Object.values(resolved)) {
|
|
153
|
+
if (value !== DELETE_MARKER && containsDeleteMarker(value)) {
|
|
154
|
+
throw new DeleteFieldNestedError();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* `setDoc(merge:true)` semantics — recursively extract the leaf-path mask
|
|
160
|
+
* from `resolved` (nested maps deep-merge), then set each leaf. When
|
|
161
|
+
* `mergeFields` is supplied, only those (dot-separated) top-level field
|
|
162
|
+
* paths are written; everything else in `resolved` is ignored.
|
|
163
|
+
*/
|
|
164
|
+
export function applyMerge(existing, resolved, mergeFields) {
|
|
165
|
+
const out = cloneDoc(existing);
|
|
166
|
+
const mask = [];
|
|
167
|
+
if (mergeFields !== undefined) {
|
|
168
|
+
// Restrict to the listed field paths. Each is a dot-separated path
|
|
169
|
+
// into `resolved`; read the value at that path (skip absent ones).
|
|
170
|
+
for (const field of mergeFields) {
|
|
171
|
+
const segments = splitPath(field);
|
|
172
|
+
const value = readPath(resolved, segments);
|
|
173
|
+
if (value !== ABSENT)
|
|
174
|
+
mask.push({ segments, value });
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
collectLeaves(resolved, [], mask);
|
|
179
|
+
}
|
|
180
|
+
for (const { segments, value } of mask) {
|
|
181
|
+
setLeaf(out, segments, value);
|
|
182
|
+
}
|
|
183
|
+
return out;
|
|
184
|
+
}
|
|
185
|
+
const ABSENT = Symbol('field-merge:ABSENT');
|
|
186
|
+
/** Read the value at a segment path, or ABSENT if any segment is missing. */
|
|
187
|
+
function readPath(data, segments) {
|
|
188
|
+
let cursor = data;
|
|
189
|
+
for (const seg of segments) {
|
|
190
|
+
// `Object.hasOwn` (not `seg in cursor`) so an unvalidated `__proto__`
|
|
191
|
+
// segment can't follow the inherited chain into `Object.prototype`.
|
|
192
|
+
if (!isPlainObject(cursor) || !Object.hasOwn(cursor, seg))
|
|
193
|
+
return ABSENT;
|
|
194
|
+
cursor = cursor[seg];
|
|
195
|
+
}
|
|
196
|
+
return cursor;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Walk `data` collecting every leaf path. A leaf is a non-map value (or
|
|
200
|
+
* an empty map — prod preserves an empty map as a set leaf). `DELETE_MARKER`
|
|
201
|
+
* leaves are collected too so a merge can carry deleteField().
|
|
202
|
+
*/
|
|
203
|
+
function collectLeaves(data, prefix, out) {
|
|
204
|
+
const keys = Object.keys(data);
|
|
205
|
+
if (keys.length === 0 && prefix.length > 0) {
|
|
206
|
+
// Empty map at a nested path — set it as an empty-map leaf.
|
|
207
|
+
out.push({ segments: prefix, value: {} });
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
for (const key of keys) {
|
|
211
|
+
const value = data[key];
|
|
212
|
+
const segments = [...prefix, key];
|
|
213
|
+
if (isPlainObject(value) && value !== DELETE_MARKER) {
|
|
214
|
+
collectLeaves(value, segments, out);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
out.push({ segments, value });
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=field-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-merge.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/field-merge.ts"],"names":[],"mappings":"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"}
|