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,583 @@
|
|
|
1
|
+
import { parseToAST } from '../grammar/FirestoreParser.js';
|
|
2
|
+
import { assembleExpression } from '../grammar/FirestoreAssembler.js';
|
|
3
|
+
import { evaluate, UnsupportedError, TraceRecorder } from './evaluator.js';
|
|
4
|
+
import { Timestamp } from './wrappers/timestamp.js';
|
|
5
|
+
import { Path } from './wrappers/path.js';
|
|
6
|
+
import { projectAfterState } from './project-after-state.js';
|
|
7
|
+
/**
|
|
8
|
+
* Collects per-block resolution attempts as `resolveMatch` walks the
|
|
9
|
+
* match-block tree. Optional — when absent, `resolveMatch` is unchanged.
|
|
10
|
+
* The handler instantiates one per test case and attaches the resulting
|
|
11
|
+
* `attempts` array to the corresponding `TestResult.pathResolution`.
|
|
12
|
+
*
|
|
13
|
+
* Records both successful matches (the winning block) and every block
|
|
14
|
+
* the resolver considered and rejected. Used by `debug_firestore_rules`
|
|
15
|
+
* to surface "near-miss" blocks in PATH_MISMATCH diagnoses — without
|
|
16
|
+
* this trace, the agent would have to manually walk the rule AST to
|
|
17
|
+
* figure out which block was closest to the failing path.
|
|
18
|
+
*/
|
|
19
|
+
class PathResolutionRecorder {
|
|
20
|
+
attempts = [];
|
|
21
|
+
push(entry) {
|
|
22
|
+
this.attempts.push(entry);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Render a block's `PathPattern` back to source form for the trace
|
|
26
|
+
* entry. Literal segments pass through; wildcards become `{name}`;
|
|
27
|
+
* recursive segments become `{name=**}`. Matches the shape the agent
|
|
28
|
+
* sees in the rules file. */
|
|
29
|
+
function renderBlockPath(block) {
|
|
30
|
+
const parts = block.path.segments.map(seg => {
|
|
31
|
+
if (seg.type === 'literal')
|
|
32
|
+
return seg.value;
|
|
33
|
+
if (seg.type === 'wildcard')
|
|
34
|
+
return `{${seg.name}}`;
|
|
35
|
+
return `{${seg.name}=**}`;
|
|
36
|
+
});
|
|
37
|
+
return '/' + parts.join('/');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Given a document path like "chess/game1", find the matching match block
|
|
41
|
+
* in the AST. Resolves wildcards and binds path variables.
|
|
42
|
+
*
|
|
43
|
+
* When `recorder` is supplied, every block the function considers
|
|
44
|
+
* (matched or not) is logged as a `PathResolutionEntry`. Tests +
|
|
45
|
+
* `debug_firestore_rules` rely on this trace; production callers can
|
|
46
|
+
* omit it and pay zero cost.
|
|
47
|
+
*/
|
|
48
|
+
function resolveMatch(block, pathSegments, parentFunctions, recorder) {
|
|
49
|
+
const allFunctions = [...parentFunctions, ...block.functions];
|
|
50
|
+
// Check if this block's path pattern matches the remaining segments
|
|
51
|
+
const pattern = block.path.segments;
|
|
52
|
+
const bindings = {};
|
|
53
|
+
let consumed = 0;
|
|
54
|
+
// Track WHY we stopped — needed for the resolution trace. Default
|
|
55
|
+
// 'literal-mismatch' is overwritten before the early-return paths
|
|
56
|
+
// that have a more specific reason.
|
|
57
|
+
let failureReason;
|
|
58
|
+
for (const seg of pattern) {
|
|
59
|
+
if (seg.type === 'literal') {
|
|
60
|
+
if (consumed >= pathSegments.length) {
|
|
61
|
+
// The block path has more segments than the request supplied
|
|
62
|
+
// — distinct from a literal-mismatch even though we technically
|
|
63
|
+
// ran out of input mid-loop. Flag it for the trace before the
|
|
64
|
+
// early-return below.
|
|
65
|
+
failureReason = 'request-shorter';
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
if (pathSegments[consumed] !== seg.value) {
|
|
69
|
+
failureReason = 'literal-mismatch';
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
consumed++;
|
|
73
|
+
}
|
|
74
|
+
else if (seg.type === 'wildcard') {
|
|
75
|
+
if (consumed >= pathSegments.length) {
|
|
76
|
+
failureReason = 'request-shorter';
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
bindings[seg.name] = pathSegments[consumed];
|
|
80
|
+
consumed++;
|
|
81
|
+
}
|
|
82
|
+
else if (seg.type === 'recursive') {
|
|
83
|
+
// {document=**} matches all remaining segments
|
|
84
|
+
bindings[seg.name] = pathSegments.slice(consumed).join('/');
|
|
85
|
+
consumed = pathSegments.length;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// If we exited the loop early with a failureReason set, this block
|
|
89
|
+
// didn't fully consume its own pattern — record + bail.
|
|
90
|
+
if (failureReason !== undefined) {
|
|
91
|
+
recorder?.push({
|
|
92
|
+
...(block.loc ? { line: block.loc.line } : {}),
|
|
93
|
+
blockPath: renderBlockPath(block),
|
|
94
|
+
matchedSegments: consumed,
|
|
95
|
+
totalSegments: pattern.length,
|
|
96
|
+
bindings,
|
|
97
|
+
matched: false,
|
|
98
|
+
reason: failureReason,
|
|
99
|
+
});
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const remaining = pathSegments.slice(consumed);
|
|
103
|
+
// If all segments consumed, this block matches directly
|
|
104
|
+
if (remaining.length === 0) {
|
|
105
|
+
recorder?.push({
|
|
106
|
+
...(block.loc ? { line: block.loc.line } : {}),
|
|
107
|
+
blockPath: renderBlockPath(block),
|
|
108
|
+
matchedSegments: consumed,
|
|
109
|
+
totalSegments: pattern.length,
|
|
110
|
+
bindings,
|
|
111
|
+
matched: true,
|
|
112
|
+
});
|
|
113
|
+
return { block, pathVariables: bindings, parentFunctions: allFunctions };
|
|
114
|
+
}
|
|
115
|
+
// Otherwise, try children
|
|
116
|
+
for (const child of block.children) {
|
|
117
|
+
const childResult = resolveMatch(child, remaining, allFunctions, recorder);
|
|
118
|
+
if (childResult) {
|
|
119
|
+
// Parent recorded as a successful "partial" match — the child
|
|
120
|
+
// completed the resolution. Record THIS block as matched too;
|
|
121
|
+
// bindings merge happens below.
|
|
122
|
+
recorder?.push({
|
|
123
|
+
...(block.loc ? { line: block.loc.line } : {}),
|
|
124
|
+
blockPath: renderBlockPath(block),
|
|
125
|
+
matchedSegments: consumed,
|
|
126
|
+
totalSegments: pattern.length,
|
|
127
|
+
bindings,
|
|
128
|
+
matched: true,
|
|
129
|
+
});
|
|
130
|
+
// Merge parent bindings
|
|
131
|
+
childResult.pathVariables = { ...bindings, ...childResult.pathVariables };
|
|
132
|
+
return childResult;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Block consumed its own segments but no child block covered the
|
|
136
|
+
// remaining request segments. Record + bail.
|
|
137
|
+
recorder?.push({
|
|
138
|
+
...(block.loc ? { line: block.loc.line } : {}),
|
|
139
|
+
blockPath: renderBlockPath(block),
|
|
140
|
+
matchedSegments: consumed,
|
|
141
|
+
totalSegments: pattern.length,
|
|
142
|
+
bindings,
|
|
143
|
+
matched: false,
|
|
144
|
+
reason: 'no-matching-child',
|
|
145
|
+
});
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
// ═══ Operation mapping ═══
|
|
149
|
+
function methodToOperations(method) {
|
|
150
|
+
switch (method) {
|
|
151
|
+
case 'get': return ['get', 'read'];
|
|
152
|
+
case 'list': return ['list', 'read'];
|
|
153
|
+
case 'create': return ['create', 'write'];
|
|
154
|
+
case 'update': return ['update', 'write'];
|
|
155
|
+
case 'delete': return ['delete', 'write'];
|
|
156
|
+
default: return [method];
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// ═══ Rule evaluation ═══
|
|
160
|
+
/**
|
|
161
|
+
* Evaluate all allow rules in a match block for a given operation.
|
|
162
|
+
* Uses OR semantics — if any matching rule allows, access is granted.
|
|
163
|
+
*
|
|
164
|
+
* Decision logic:
|
|
165
|
+
* - any rule ALLOW → ALLOW (short-circuit)
|
|
166
|
+
* - else if any rule threw UnsupportedError → UNSUPPORTED (sim abstains)
|
|
167
|
+
* - else → DENY
|
|
168
|
+
*
|
|
169
|
+
* Real evaluation errors (EvalError, type mismatches) are *not* lifted to
|
|
170
|
+
* UNSUPPORTED — they're caught and counted as deny, matching production's
|
|
171
|
+
* "runtime errors deny the request" behavior.
|
|
172
|
+
*/
|
|
173
|
+
function evaluateRules(block, operation, ctx) {
|
|
174
|
+
const ops = methodToOperations(operation);
|
|
175
|
+
const trace = [];
|
|
176
|
+
const notes = [];
|
|
177
|
+
// Find allow rules that match this operation
|
|
178
|
+
const matchingRules = [];
|
|
179
|
+
for (let i = 0; i < block.allows.length; i++) {
|
|
180
|
+
const rule = block.allows[i];
|
|
181
|
+
if (rule.operations.some(op => ops.includes(op))) {
|
|
182
|
+
matchingRules.push({ rule, index: i });
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (matchingRules.length === 0) {
|
|
186
|
+
notes.push(`No allow rules found for operation '${operation}'`);
|
|
187
|
+
return { decision: 'DENY', trace, notes };
|
|
188
|
+
}
|
|
189
|
+
// Evaluate each matching rule (OR semantics). Each rule gets its own
|
|
190
|
+
// TraceRecorder so the per-rule expressionTrace stays isolated even
|
|
191
|
+
// when multiple rules evaluate before a verdict lands. We attach via
|
|
192
|
+
// mutation+restore on the shared ctx — cheaper than cloning ctx for
|
|
193
|
+
// every rule and keeps wrappers' identity (Timestamp etc.) stable
|
|
194
|
+
// across the loop.
|
|
195
|
+
let sawUnsupported = false;
|
|
196
|
+
const priorRecorder = ctx.trace;
|
|
197
|
+
for (const { rule, index } of matchingRules) {
|
|
198
|
+
const entry = newEntry(rule, index);
|
|
199
|
+
const recorder = new TraceRecorder();
|
|
200
|
+
ctx.trace = recorder;
|
|
201
|
+
try {
|
|
202
|
+
const result = evaluate(rule.condition, ctx);
|
|
203
|
+
entry.expressionTrace = recorder.entries;
|
|
204
|
+
if (result) {
|
|
205
|
+
entry.verdict = 'ALLOW';
|
|
206
|
+
trace.push(entry);
|
|
207
|
+
ctx.trace = priorRecorder;
|
|
208
|
+
return { decision: 'ALLOW', trace, notes };
|
|
209
|
+
}
|
|
210
|
+
entry.verdict = 'DENY';
|
|
211
|
+
trace.push(entry);
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
entry.expressionTrace = recorder.entries;
|
|
215
|
+
if (e instanceof UnsupportedError) {
|
|
216
|
+
sawUnsupported = true;
|
|
217
|
+
entry.verdict = 'UNSUPPORTED';
|
|
218
|
+
entry.message = e.message;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
entry.verdict = 'ERROR';
|
|
222
|
+
entry.message = e instanceof Error ? e.message : String(e);
|
|
223
|
+
}
|
|
224
|
+
trace.push(entry);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
ctx.trace = priorRecorder;
|
|
228
|
+
// No rule allowed. If at least one rule abstained on a sim gap, escalate
|
|
229
|
+
// to UNSUPPORTED so the agent sees "sim couldn't decide" rather than a
|
|
230
|
+
// misleading DENY. If every failure was a real eval error, return DENY
|
|
231
|
+
// (production would also deny on runtime errors).
|
|
232
|
+
return { decision: sawUnsupported ? 'UNSUPPORTED' : 'DENY', trace, notes };
|
|
233
|
+
}
|
|
234
|
+
function newEntry(rule, index) {
|
|
235
|
+
const entry = {
|
|
236
|
+
ruleIndex: index,
|
|
237
|
+
operations: [...rule.operations],
|
|
238
|
+
verdict: 'DENY',
|
|
239
|
+
conditionText: assembleExpression(rule.condition),
|
|
240
|
+
};
|
|
241
|
+
if (rule.loc)
|
|
242
|
+
entry.line = rule.loc.line;
|
|
243
|
+
return entry;
|
|
244
|
+
}
|
|
245
|
+
// ═══ Build simulation context from TestCase ═══
|
|
246
|
+
// ═══ Server timestamp sentinel ═══
|
|
247
|
+
/** Sentinel value for FieldValue.serverTimestamp() in test data. */
|
|
248
|
+
export const SERVER_TIMESTAMP = { __type: 'serverTimestamp' };
|
|
249
|
+
function isServerTimestampSentinel(value) {
|
|
250
|
+
return typeof value === 'object' && value !== null
|
|
251
|
+
&& value.__type === 'serverTimestamp';
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Recursively replace serverTimestamp sentinels with the actual server time.
|
|
255
|
+
* Item 1.3: `serverTime` is now a Timestamp wrapper (was ISO string). The
|
|
256
|
+
* SAME instance is reused across every sentinel hit so `data.createdAt ==
|
|
257
|
+
* request.time` succeeds via rulesValuesEqual -> Timestamp.equals (field
|
|
258
|
+
* compare). Without instance reuse, two distinct Timestamp instances would
|
|
259
|
+
* still equate via field compare — but the single-instance invariant is
|
|
260
|
+
* documented here so future refactors don't break it accidentally.
|
|
261
|
+
*/
|
|
262
|
+
export function resolveServerTimestamps(data, serverTime) {
|
|
263
|
+
const resolved = {};
|
|
264
|
+
for (const [key, value] of Object.entries(data)) {
|
|
265
|
+
if (isServerTimestampSentinel(value)) {
|
|
266
|
+
resolved[key] = serverTime;
|
|
267
|
+
}
|
|
268
|
+
else if (isPlainObject(value)) {
|
|
269
|
+
// Only descend into plain objects ({} / Object.create(null)). After
|
|
270
|
+
// Item 1 the value tree may legitimately contain class instances
|
|
271
|
+
// (Timestamp, Bytes, LatLng, future DocumentReference) — walking
|
|
272
|
+
// them as maps would shred their prototype and break `is timestamp`,
|
|
273
|
+
// `is reference`, etc.
|
|
274
|
+
resolved[key] = resolveServerTimestamps(value, serverTime);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
resolved[key] = value;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return resolved;
|
|
281
|
+
}
|
|
282
|
+
function isPlainObject(value) {
|
|
283
|
+
if (value === null || typeof value !== 'object')
|
|
284
|
+
return false;
|
|
285
|
+
if (Array.isArray(value))
|
|
286
|
+
return false;
|
|
287
|
+
const proto = Object.getPrototypeOf(value);
|
|
288
|
+
return proto === Object.prototype || proto === null;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Populate `request.query` for `list` operations from the optional
|
|
292
|
+
* TestCase.query payload (REBUILD_PLAN.md Item 6 follow-up).
|
|
293
|
+
*
|
|
294
|
+
* Production's `request.query` exposes `limit / offset / orderBy` as
|
|
295
|
+
* always-present, NULLABLE fields on a `list` request — `request.query.limit
|
|
296
|
+
* == null` is the documented way to assert "no limit clause." So we ALWAYS
|
|
297
|
+
* expose the three keys (null when the test omits them) rather than omitting
|
|
298
|
+
* them; otherwise, after RULES-B2 (dotted-field access of a MISSING key
|
|
299
|
+
* errors), `request.query.limit` would error instead of reading null, breaking
|
|
300
|
+
* the legitimate `== null` guard. For non-list methods `request.query` is the
|
|
301
|
+
* empty map (the fields don't apply), matching production.
|
|
302
|
+
*/
|
|
303
|
+
function buildRequestQuery(tc) {
|
|
304
|
+
if (tc.method !== 'list')
|
|
305
|
+
return {};
|
|
306
|
+
return {
|
|
307
|
+
limit: tc.query?.limit ?? null,
|
|
308
|
+
offset: tc.query?.offset ?? null,
|
|
309
|
+
orderBy: tc.query?.orderBy ?? null,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
function buildContext(tc, functions, pathVariables, getDoc) {
|
|
313
|
+
const fnMap = new Map();
|
|
314
|
+
for (const fn of functions)
|
|
315
|
+
fnMap.set(fn.name, fn);
|
|
316
|
+
const mockDocs = new Map();
|
|
317
|
+
if (tc.functionMocks) {
|
|
318
|
+
for (const mock of tc.functionMocks) {
|
|
319
|
+
if (mock.function === 'get' && typeof mock.result === 'object' && mock.result !== null) {
|
|
320
|
+
mockDocs.set(mock.path, mock.result);
|
|
321
|
+
}
|
|
322
|
+
else if (mock.function === 'exists') {
|
|
323
|
+
if (mock.result === true)
|
|
324
|
+
mockDocs.set(mock.path, {});
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// request.time defaults to wallclock; tc.requestTime (Item 0.F) lets
|
|
329
|
+
// tests pin a deterministic value for date-gated rules. Item 1.3
|
|
330
|
+
// flipped the in-evaluator type from ISO string to Timestamp wrapper
|
|
331
|
+
// (REBUILD_PLAN Risk 1) — `tc.requestTime` stays an ISO string for
|
|
332
|
+
// backwards-compat with the prod Test API, parsed here.
|
|
333
|
+
const serverTime = tc.requestTime
|
|
334
|
+
? Timestamp.fromIsoString(tc.requestTime)
|
|
335
|
+
: Timestamp.fromMillis(Date.now());
|
|
336
|
+
// Item 6: build the full document path for request.path / __name__.
|
|
337
|
+
// tc.path arrives as a relative path like "users/alice"; the spec form
|
|
338
|
+
// is /databases/(default)/documents/<rel>. Strip a leading slash so we
|
|
339
|
+
// don't end up with a double slash.
|
|
340
|
+
const relPath = tc.path.startsWith('/') ? tc.path.slice(1) : tc.path;
|
|
341
|
+
const fullPathSegs = ['databases', '(default)', 'documents', ...relPath.split('/').filter(Boolean)];
|
|
342
|
+
// Pass pathVariables as bindings so `request.path.<name>` (where <name> is
|
|
343
|
+
// a wildcard from the matched rule, e.g. {uid}) returns the bound segment
|
|
344
|
+
// value instead of null. Without this, named-field access on request.path
|
|
345
|
+
// silently DENYs any rule that reads it.
|
|
346
|
+
const fullPath = new Path(fullPathSegs, pathVariables);
|
|
347
|
+
// resource.id = last segment of the relative path
|
|
348
|
+
const relSegs = relPath.split('/').filter(Boolean);
|
|
349
|
+
const docId = relSegs.length > 0 ? relSegs[relSegs.length - 1] : '';
|
|
350
|
+
// Item 7 — project the after-state.
|
|
351
|
+
//
|
|
352
|
+
// If tc.writeMode is set (Item 0.D), run projectAfterState to derive both
|
|
353
|
+
// request.resource.data and what getAfter() returns. Otherwise preserve
|
|
354
|
+
// legacy behavior where tc.data IS the after-state for create/update,
|
|
355
|
+
// tc.resource for read methods, and null for delete. The legacy fallback
|
|
356
|
+
// keeps every existing test passing while letting new tests opt into
|
|
357
|
+
// proper merge semantics.
|
|
358
|
+
const payload = tc.data ?? {};
|
|
359
|
+
const existing = tc.resource ?? null;
|
|
360
|
+
let afterState;
|
|
361
|
+
let existsAfter;
|
|
362
|
+
if (tc.writeMode) {
|
|
363
|
+
afterState = projectAfterState(tc.writeMode, existing, payload);
|
|
364
|
+
existsAfter = afterState !== null;
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
switch (tc.method) {
|
|
368
|
+
case 'create':
|
|
369
|
+
case 'update':
|
|
370
|
+
// RULES-B10: the prod-faithful update post-state is `existing` merged
|
|
371
|
+
// with the payload. That merge IS implemented and correct on the
|
|
372
|
+
// `writeMode: { kind: 'update' }` path above (`projectAfterState`),
|
|
373
|
+
// which agent-facing `simulate()` callers should use. The legacy
|
|
374
|
+
// no-writeMode default keeps `afterState = payload`: the sandbox
|
|
375
|
+
// LocalEnvironment path ALREADY pre-merges + pre-applies deleteField()
|
|
376
|
+
// and hands us the FULL post-write doc, so re-merging here would
|
|
377
|
+
// resurrect deleted keys (RULES-B10 step doc records this cross-track
|
|
378
|
+
// coupling — making merge the unconditional default needs a coordinated
|
|
379
|
+
// T2 change to have LocalEnvironment declare its writeMode).
|
|
380
|
+
afterState = payload;
|
|
381
|
+
existsAfter = true;
|
|
382
|
+
break;
|
|
383
|
+
case 'delete':
|
|
384
|
+
afterState = null;
|
|
385
|
+
existsAfter = false;
|
|
386
|
+
break;
|
|
387
|
+
case 'get':
|
|
388
|
+
case 'list':
|
|
389
|
+
default:
|
|
390
|
+
afterState = existing; // no write happens
|
|
391
|
+
existsAfter = existing !== null;
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
const projectedAfter = afterState !== null
|
|
396
|
+
? resolveServerTimestamps(afterState, serverTime)
|
|
397
|
+
: null;
|
|
398
|
+
// request.resource.data: for non-write methods (get/list) Firestore exposes
|
|
399
|
+
// null. For writes, it's the projected after-state. We keep the legacy
|
|
400
|
+
// shape (`{}` when tc.data is absent) for backwards-compat — the parity
|
|
401
|
+
// packs that exercise this surface explicitly set tc.data.
|
|
402
|
+
const reqResourceData = projectedAfter ?? {};
|
|
403
|
+
return {
|
|
404
|
+
request: {
|
|
405
|
+
auth: tc.auth ? { uid: tc.auth.uid, token: tc.auth.token ?? {} } : null,
|
|
406
|
+
resource: { data: reqResourceData },
|
|
407
|
+
method: tc.method,
|
|
408
|
+
path: fullPath, // Item 6: Path wrapper, full /databases/.../documents/... form
|
|
409
|
+
query: buildRequestQuery(tc),
|
|
410
|
+
time: serverTime,
|
|
411
|
+
},
|
|
412
|
+
resource: {
|
|
413
|
+
data: existing ?? {}, // NOT resolved — resource is pre-write, no sentinels
|
|
414
|
+
id: docId, // Item 6
|
|
415
|
+
__name__: fullPath, // Item 6
|
|
416
|
+
},
|
|
417
|
+
mockDocuments: mockDocs,
|
|
418
|
+
getDoc,
|
|
419
|
+
pathVariables,
|
|
420
|
+
functions: fnMap,
|
|
421
|
+
database: '(default)',
|
|
422
|
+
// Item 7 — projected post-write state for the request target.
|
|
423
|
+
// afterStatePath: full Path being written to (matches request.path)
|
|
424
|
+
// afterState: post-write doc data, or null when deleted
|
|
425
|
+
// existsAfter: false when method is delete (or projectAfterState → null)
|
|
426
|
+
afterStatePath: fullPath,
|
|
427
|
+
afterState: projectedAfter,
|
|
428
|
+
existsAfter,
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
// ═══ Main handler ═══
|
|
432
|
+
export class SimulateFirestoreRulesHandler {
|
|
433
|
+
/**
|
|
434
|
+
* Simulate Firestore rules evaluation locally.
|
|
435
|
+
* Same interface as TestFirestoreRulesHandler.execute().
|
|
436
|
+
*/
|
|
437
|
+
simulate(source, testCases, opts) {
|
|
438
|
+
// Parse rules. Give the empty-input case a distinct, actionable
|
|
439
|
+
// error — agents that see "Failed to parse rules source" otherwise
|
|
440
|
+
// hex-dump the rules file looking for invisible characters before
|
|
441
|
+
// realizing the source string is just empty (see
|
|
442
|
+
// CLAUDE_DEBUG_SESSION.md).
|
|
443
|
+
if (!source || source.trim().length === 0) {
|
|
444
|
+
return {
|
|
445
|
+
success: false,
|
|
446
|
+
error: {
|
|
447
|
+
code: 'PARSE_FAILED',
|
|
448
|
+
message: 'Empty rules source — call sandbox.setRules(rules) before operating, '
|
|
449
|
+
+ 'or initialize without rules to use the open-by-default ruleset. '
|
|
450
|
+
+ 'See pyric/sandbox docs.',
|
|
451
|
+
recoverable: true,
|
|
452
|
+
},
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
const ast = parseToAST(source);
|
|
456
|
+
if (!ast) {
|
|
457
|
+
return {
|
|
458
|
+
success: false,
|
|
459
|
+
error: { code: 'PARSE_FAILED', message: 'Failed to parse rules source', recoverable: true },
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
const results = [];
|
|
463
|
+
let passed = 0;
|
|
464
|
+
let failed = 0;
|
|
465
|
+
let unsupported = 0;
|
|
466
|
+
// Resolve any wildcards on the root match (typically just one for
|
|
467
|
+
// the database segment) and bind each to '(default)'. The root
|
|
468
|
+
// wildcard can be named anything in production — `database`, `db`,
|
|
469
|
+
// `dbId` are all valid — and `get(/databases/$(name)/...)` paths
|
|
470
|
+
// inside rules expect that exact name to resolve. Previously we
|
|
471
|
+
// hardcoded `database` only, so any other name silently became
|
|
472
|
+
// `undefined` inside path interpolation and broke every `get()` /
|
|
473
|
+
// `exists()` call.
|
|
474
|
+
//
|
|
475
|
+
// `database` stays seeded as a default so rules that don't use a
|
|
476
|
+
// wildcard on the root match (or that hardcode `$(database)` in a
|
|
477
|
+
// `get()` path) still work.
|
|
478
|
+
const rootBindings = { database: '(default)' };
|
|
479
|
+
for (const seg of ast.service.match.path.segments) {
|
|
480
|
+
if (seg.type === 'wildcard') {
|
|
481
|
+
rootBindings[seg.name] = '(default)';
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
for (const tc of testCases) {
|
|
485
|
+
// Resolve the match block for this path.
|
|
486
|
+
// The root match is /databases/{database}/documents — skip it,
|
|
487
|
+
// start matching from its children directly.
|
|
488
|
+
const pathSegments = tc.path.split('/').filter(Boolean);
|
|
489
|
+
const rootFunctions = ast.service.match.functions;
|
|
490
|
+
let match = null;
|
|
491
|
+
// Fresh recorder per test case so each `TestResult.pathResolution`
|
|
492
|
+
// captures only its own resolution attempts.
|
|
493
|
+
const pathRecorder = new PathResolutionRecorder();
|
|
494
|
+
for (const child of ast.service.match.children) {
|
|
495
|
+
match = resolveMatch(child, pathSegments, rootFunctions, pathRecorder);
|
|
496
|
+
if (match)
|
|
497
|
+
break;
|
|
498
|
+
}
|
|
499
|
+
// `list` targets a COLLECTION, but rules match blocks are document-
|
|
500
|
+
// level: real Firestore evaluates a query against the doc block with
|
|
501
|
+
// the document wildcard hypothetical (and `resource` undefined). When
|
|
502
|
+
// a collection path resolves no block directly, retry with a
|
|
503
|
+
// synthetic trailing document segment so `list menuItems` evaluates
|
|
504
|
+
// `match /menuItems/{id}` exactly like the emulator does. Doc-style
|
|
505
|
+
// list paths (`menuItems/any`) keep resolving on the first attempt,
|
|
506
|
+
// so existing call sites are unaffected. (RULES-LIST parity pack.)
|
|
507
|
+
let syntheticListDoc = false;
|
|
508
|
+
if (!match && tc.method === 'list') {
|
|
509
|
+
const widened = [...pathSegments, '__hypothetical_doc__'];
|
|
510
|
+
for (const child of ast.service.match.children) {
|
|
511
|
+
match = resolveMatch(child, widened, rootFunctions, pathRecorder);
|
|
512
|
+
if (match)
|
|
513
|
+
break;
|
|
514
|
+
}
|
|
515
|
+
if (match)
|
|
516
|
+
syntheticListDoc = true;
|
|
517
|
+
}
|
|
518
|
+
const pathResolution = {
|
|
519
|
+
requestPath: tc.path,
|
|
520
|
+
attempts: pathRecorder.attempts,
|
|
521
|
+
};
|
|
522
|
+
if (!match) {
|
|
523
|
+
// No match block at all → production default-DENY. Expectation
|
|
524
|
+
// 'DENY' agrees → PASSED; expectation 'ALLOW' disagrees → FAILED.
|
|
525
|
+
const state = tc.expectation === 'DENY' ? 'PASSED' : 'FAILED';
|
|
526
|
+
if (state === 'PASSED')
|
|
527
|
+
passed++;
|
|
528
|
+
else
|
|
529
|
+
failed++;
|
|
530
|
+
results.push({
|
|
531
|
+
description: tc.description,
|
|
532
|
+
expectation: tc.expectation,
|
|
533
|
+
state,
|
|
534
|
+
decision: 'DENY',
|
|
535
|
+
trace: [],
|
|
536
|
+
notes: [`No match block found for path '${tc.path}'`],
|
|
537
|
+
pathResolution,
|
|
538
|
+
});
|
|
539
|
+
continue;
|
|
540
|
+
}
|
|
541
|
+
// Build context — `rootBindings` carries the root-match wildcards
|
|
542
|
+
// (e.g. `db` or `database`) so `$(name)` interpolation inside
|
|
543
|
+
// get()/exists() paths resolves regardless of which name the
|
|
544
|
+
// ruleset chose. Child match bindings override on collision (a
|
|
545
|
+
// child rule that shadows the name wins inside that scope).
|
|
546
|
+
const allFunctions = [...match.parentFunctions, ...match.block.functions];
|
|
547
|
+
const pathVars = { ...rootBindings, ...match.pathVariables };
|
|
548
|
+
const ctx = buildContext(tc, allFunctions, pathVars, opts?.getDoc);
|
|
549
|
+
// Evaluate rules
|
|
550
|
+
const { decision, trace, notes } = evaluateRules(match.block, tc.method, ctx);
|
|
551
|
+
if (syntheticListDoc) {
|
|
552
|
+
notes.push(`list on collection path '${tc.path}' evaluated against the document-level match block (document wildcard hypothetical, resource undefined) — emulator-faithful`);
|
|
553
|
+
}
|
|
554
|
+
// Compare with expectation. UNSUPPORTED is its own terminal state —
|
|
555
|
+
// not PASSED (we didn't agree, we abstained) and not FAILED (the
|
|
556
|
+
// failure is on the simulator's side, not the rule's).
|
|
557
|
+
let state;
|
|
558
|
+
if (decision === 'UNSUPPORTED') {
|
|
559
|
+
state = 'UNSUPPORTED';
|
|
560
|
+
unsupported++;
|
|
561
|
+
}
|
|
562
|
+
else if (decision === tc.expectation) {
|
|
563
|
+
state = 'PASSED';
|
|
564
|
+
passed++;
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
state = 'FAILED';
|
|
568
|
+
failed++;
|
|
569
|
+
}
|
|
570
|
+
results.push({
|
|
571
|
+
description: tc.description,
|
|
572
|
+
expectation: tc.expectation,
|
|
573
|
+
state,
|
|
574
|
+
decision,
|
|
575
|
+
trace,
|
|
576
|
+
notes,
|
|
577
|
+
pathResolution,
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
return { success: true, data: { passed, failed, unsupported, results } };
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/rules/simulator/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MapDiff implementation for Firestore rules simulation.
|
|
3
|
+
*
|
|
4
|
+
* Implements request.resource.data.diff(resource.data) which returns
|
|
5
|
+
* a MapDiff object with methods for comparing two document states.
|
|
6
|
+
*
|
|
7
|
+
* Semantics derived from production Firestore behavior:
|
|
8
|
+
* - Only compares top-level keys (nested map diff is unreliable in production)
|
|
9
|
+
* - Values are compared with Firestore Rules value equality
|
|
10
|
+
* - Returns Set-like objects with hasOnly(), hasAll(), hasAny(), size()
|
|
11
|
+
*/
|
|
12
|
+
import { FirestoreSet } from './firestore-set.js';
|
|
13
|
+
export { FirestoreSet } from './firestore-set.js';
|
|
14
|
+
export declare class MapDiff {
|
|
15
|
+
private before;
|
|
16
|
+
private after;
|
|
17
|
+
constructor(before: Record<string, unknown>, after: Record<string, unknown>);
|
|
18
|
+
/** Keys present in `after` but not in `before`. */
|
|
19
|
+
addedKeys(): FirestoreSet;
|
|
20
|
+
/** Keys present in `before` but not in `after`. */
|
|
21
|
+
removedKeys(): FirestoreSet;
|
|
22
|
+
/** Keys present in both but with different values. */
|
|
23
|
+
changedKeys(): FirestoreSet;
|
|
24
|
+
/** Keys that were added, removed, or changed. Union of added + removed + changed. */
|
|
25
|
+
affectedKeys(): FirestoreSet;
|
|
26
|
+
/** Keys present in both with identical values. */
|
|
27
|
+
unchangedKeys(): FirestoreSet;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=mapdiff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapdiff.d.ts","sourceRoot":"","sources":["../../../src/rules/simulator/mapdiff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAA0B;gBAE3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK3E,mDAAmD;IACnD,SAAS,IAAI,YAAY;IAQzB,mDAAmD;IACnD,WAAW,IAAI,YAAY;IAQ3B,sDAAsD;IACtD,WAAW,IAAI,YAAY;IAU3B,qFAAqF;IACrF,YAAY,IAAI,YAAY;IAW5B,kDAAkD;IAClD,aAAa,IAAI,YAAY;CAS9B"}
|