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,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `classifyQueryCall` — given a `query(...)` call expression, decide whether
|
|
3
|
+
* it's an INIT (`query(collection(db, "X"), ...)`) or a WRAP
|
|
4
|
+
* (`query(q, ...constraints)`), and produce the fragments contributed by
|
|
5
|
+
* the call's constraint arguments.
|
|
6
|
+
*
|
|
7
|
+
* One call may produce multiple fragments — `query(q, where(...), orderBy(...))`
|
|
8
|
+
* yields a `where` and an `orderBy` fragment. Callers wrap each fragment
|
|
9
|
+
* with branch context (branchId/clauseId/skippable) before storing.
|
|
10
|
+
*/
|
|
11
|
+
import ts from 'typescript';
|
|
12
|
+
import { getCalleeName, strLit } from './ast.js';
|
|
13
|
+
/**
|
|
14
|
+
* Resolve a `collection(db, "a", id?, "b"?, ...)` or
|
|
15
|
+
* `collectionGroup(db, "name")` call into its (possibly composite) path.
|
|
16
|
+
*
|
|
17
|
+
* For modular `collection(db, ...segments)`:
|
|
18
|
+
* - 2-arg form returns the literal path (or null).
|
|
19
|
+
* - 3+ arg form stitches literal segments and replaces dynamic ones with
|
|
20
|
+
* `{*}`. The result still pins the **last segment** as the collection
|
|
21
|
+
* group, which is the only piece an index spec needs.
|
|
22
|
+
*
|
|
23
|
+
* Returns `null` when the first segment isn't a literal — in that case
|
|
24
|
+
* we have no statically resolvable path at all.
|
|
25
|
+
*/
|
|
26
|
+
function resolveCollectionPath(call) {
|
|
27
|
+
// First arg is `db`; segments start at index 1.
|
|
28
|
+
if (call.arguments.length < 2)
|
|
29
|
+
return null;
|
|
30
|
+
const segs = [];
|
|
31
|
+
for (let i = 1; i < call.arguments.length; i++) {
|
|
32
|
+
const lit = strLit(call.arguments[i]);
|
|
33
|
+
if (lit !== null)
|
|
34
|
+
segs.push(lit);
|
|
35
|
+
else
|
|
36
|
+
segs.push('{*}');
|
|
37
|
+
}
|
|
38
|
+
// If the very first segment is dynamic, we can't say anything useful.
|
|
39
|
+
if (segs[0] === '{*}')
|
|
40
|
+
return null;
|
|
41
|
+
return segs.join('/');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Process a single constraint call (`where`, `orderBy`, `limit`) and emit
|
|
45
|
+
* one or more fragments. Splits the dynamic-direction `orderBy(field, dir)`
|
|
46
|
+
* case into two fragments (asc + desc) so over-shoot is preferred to
|
|
47
|
+
* silent under-shoot.
|
|
48
|
+
*/
|
|
49
|
+
function classifyConstraint(call) {
|
|
50
|
+
const cn = getCalleeName(call);
|
|
51
|
+
const args = call.arguments;
|
|
52
|
+
if (cn === 'where') {
|
|
53
|
+
const field = args[0] ? strLit(args[0]) : null;
|
|
54
|
+
const op = args[1] ? strLit(args[1]) : null;
|
|
55
|
+
if (field && op)
|
|
56
|
+
return [{ kind: 'where', filter: { field, op } }];
|
|
57
|
+
return [{ kind: 'unknown' }];
|
|
58
|
+
}
|
|
59
|
+
if (cn === 'orderBy') {
|
|
60
|
+
const field = args[0] ? strLit(args[0]) : null;
|
|
61
|
+
if (!field)
|
|
62
|
+
return [{ kind: 'unknown' }];
|
|
63
|
+
if (args.length === 1) {
|
|
64
|
+
// Default direction is asc.
|
|
65
|
+
return [{ kind: 'orderBy', order: { field, direction: 'asc' } }];
|
|
66
|
+
}
|
|
67
|
+
const dirLit = args[1] ? strLit(args[1]) : null;
|
|
68
|
+
if (dirLit === 'asc' || dirLit === 'desc') {
|
|
69
|
+
return [{ kind: 'orderBy', order: { field, direction: dirLit } }];
|
|
70
|
+
}
|
|
71
|
+
// Dynamic direction — emit both. Better to over-index than under-index;
|
|
72
|
+
// the agent layer can prune via @firestore-mutex if it knows better.
|
|
73
|
+
return [
|
|
74
|
+
{ kind: 'orderBy', order: { field, direction: 'asc' } },
|
|
75
|
+
{ kind: 'orderBy', order: { field, direction: 'desc' } },
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
if (cn === 'limit') {
|
|
79
|
+
const n = args[0];
|
|
80
|
+
if (n && ts.isNumericLiteral(n)) {
|
|
81
|
+
return [{ kind: 'limit', limit: Number(n.text) }];
|
|
82
|
+
}
|
|
83
|
+
return [{ kind: 'unknown' }];
|
|
84
|
+
}
|
|
85
|
+
// Anything else — `startAt`, `endBefore`, custom helpers — count as
|
|
86
|
+
// unknown for now. The composite-index detector treats unknown as a
|
|
87
|
+
// pass-through (no constraint contribution).
|
|
88
|
+
return [{ kind: 'unknown' }];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Classify a `query(...)` call. Caller is expected to have already
|
|
92
|
+
* confirmed `getCalleeName(call) === 'query'`.
|
|
93
|
+
*
|
|
94
|
+
* `varName` is the local that the chain is being built on (typically `q`).
|
|
95
|
+
* Used to recognize the WRAP shape `query(q, ...)`.
|
|
96
|
+
*/
|
|
97
|
+
export function classifyQueryCall(call, varName) {
|
|
98
|
+
const args = call.arguments;
|
|
99
|
+
if (args.length === 0)
|
|
100
|
+
return { isInit: false, fragments: [] };
|
|
101
|
+
const first = args[0];
|
|
102
|
+
let isInit = false;
|
|
103
|
+
let collectionPath = undefined;
|
|
104
|
+
let isCollectionGroup = false;
|
|
105
|
+
if (ts.isCallExpression(first)) {
|
|
106
|
+
const cname = getCalleeName(first);
|
|
107
|
+
if (cname === 'collection' || cname === 'collectionGroup') {
|
|
108
|
+
isInit = true;
|
|
109
|
+
isCollectionGroup = cname === 'collectionGroup';
|
|
110
|
+
if (cname === 'collectionGroup') {
|
|
111
|
+
// collectionGroup(db, "name")
|
|
112
|
+
collectionPath = first.arguments[1] ? strLit(first.arguments[1]) : null;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
collectionPath = resolveCollectionPath(first);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (ts.isIdentifier(first) && first.text === varName) {
|
|
120
|
+
// WRAP: query(q, ...constraints)
|
|
121
|
+
isInit = false;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// First arg is something else — different variable, expression, etc.
|
|
125
|
+
// Treat as unknown, no fragments.
|
|
126
|
+
return { isInit: false, fragments: [{ kind: 'unknown' }] };
|
|
127
|
+
}
|
|
128
|
+
// Process the rest as constraints.
|
|
129
|
+
const fragments = [];
|
|
130
|
+
for (let i = 1; i < args.length; i++) {
|
|
131
|
+
const a = args[i];
|
|
132
|
+
if (!ts.isCallExpression(a))
|
|
133
|
+
continue;
|
|
134
|
+
fragments.push(...classifyConstraint(a));
|
|
135
|
+
}
|
|
136
|
+
return { isInit, collectionPath, isCollectionGroup, fragments };
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../../src/rules/indexes/extract/classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composite-index detection + QueryShape → IndexesConfigEntry mapping.
|
|
3
|
+
*
|
|
4
|
+
* Firestore's actual index-required rules are nuanced; this is a
|
|
5
|
+
* conservative approximation that matches the cases the agent layer
|
|
6
|
+
* needs to pre-seed:
|
|
7
|
+
*
|
|
8
|
+
* - 0 filters and ≤ 1 orderBy → single-field, no composite needed.
|
|
9
|
+
* - 1 equality filter and 0 orderBy → single-field.
|
|
10
|
+
* - 1 equality filter + 1 orderBy on the same field → single-field.
|
|
11
|
+
* - 2+ equality filters → composite.
|
|
12
|
+
* - Equality filter + orderBy on a different field → composite.
|
|
13
|
+
* - Range/inequality filter + orderBy on a different field → composite.
|
|
14
|
+
* - array-contains is treated like equality for composite purposes.
|
|
15
|
+
*
|
|
16
|
+
* Vector indexes are not handled here — they have their own creation
|
|
17
|
+
* surface that goes through the same deploy handler but with a
|
|
18
|
+
* `vectorConfig` field on each indexed field.
|
|
19
|
+
*/
|
|
20
|
+
import type { QueryShape } from './types.js';
|
|
21
|
+
import type { IndexesConfigEntry } from '../types.js';
|
|
22
|
+
export declare function needsCompositeIndex(s: QueryShape): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Map a QueryShape to a Firestore index-spec entry. The output drops
|
|
25
|
+
* directly into `firestore.indexes.json`'s `indexes[]`.
|
|
26
|
+
*
|
|
27
|
+
* Field ordering rule: equality filters first (Firestore's docs put them
|
|
28
|
+
* before range/orderBy), then range filters, then orderBy fields. Within
|
|
29
|
+
* each group we preserve source order so the agent can correlate the
|
|
30
|
+
* extracted index with the source query.
|
|
31
|
+
*/
|
|
32
|
+
export declare function shapeToIndexEntry(s: QueryShape): IndexesConfigEntry;
|
|
33
|
+
/**
|
|
34
|
+
* Stable string key for an index entry — used by the orchestrator to
|
|
35
|
+
* dedupe across multiple shapes that map to the same index.
|
|
36
|
+
*/
|
|
37
|
+
export declare function indexEntryKey(e: IndexesConfigEntry): string;
|
|
38
|
+
//# sourceMappingURL=composite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../../../src/rules/indexes/extract/composite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAQvE,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CA0B1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,GAAG,kBAAkB,CAqCnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAG3D"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const EQ_LIKE = new Set(['==', 'in', 'array-contains', 'array-contains-any']);
|
|
2
|
+
function isEqualityLike(f) {
|
|
3
|
+
return EQ_LIKE.has(f.op);
|
|
4
|
+
}
|
|
5
|
+
export function needsCompositeIndex(s) {
|
|
6
|
+
const eq = s.filters.filter(isEqualityLike);
|
|
7
|
+
const range = s.filters.filter(f => !isEqualityLike(f));
|
|
8
|
+
// Trivially no composite — too few constraints.
|
|
9
|
+
if (s.filters.length === 0 && s.orders.length <= 1)
|
|
10
|
+
return false;
|
|
11
|
+
if (s.filters.length === 1 && s.orders.length === 0)
|
|
12
|
+
return false;
|
|
13
|
+
// 2+ filters of any kind → composite.
|
|
14
|
+
if (s.filters.length >= 2)
|
|
15
|
+
return true;
|
|
16
|
+
// Equality + orderBy: composite iff orderBy is on a different field.
|
|
17
|
+
if (eq.length >= 1 && s.orders.length >= 1) {
|
|
18
|
+
const orderField = s.orders[0].field;
|
|
19
|
+
if (!eq.some(f => f.field === orderField))
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
// Range + orderBy on a different field → composite.
|
|
23
|
+
if (range.length >= 1 && s.orders.length >= 1) {
|
|
24
|
+
if (range[0].field !== s.orders[0].field)
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
// 2+ orderBys → composite (Firestore needs an index for each ordering combo).
|
|
28
|
+
if (s.orders.length >= 2)
|
|
29
|
+
return true;
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Map a QueryShape to a Firestore index-spec entry. The output drops
|
|
34
|
+
* directly into `firestore.indexes.json`'s `indexes[]`.
|
|
35
|
+
*
|
|
36
|
+
* Field ordering rule: equality filters first (Firestore's docs put them
|
|
37
|
+
* before range/orderBy), then range filters, then orderBy fields. Within
|
|
38
|
+
* each group we preserve source order so the agent can correlate the
|
|
39
|
+
* extracted index with the source query.
|
|
40
|
+
*/
|
|
41
|
+
export function shapeToIndexEntry(s) {
|
|
42
|
+
const fields = [];
|
|
43
|
+
// Equality filters → ASCENDING.
|
|
44
|
+
for (const f of s.filters) {
|
|
45
|
+
if (isEqualityLike(f)) {
|
|
46
|
+
fields.push({ fieldPath: f.field, order: 'ASCENDING' });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Range filters → ASCENDING.
|
|
50
|
+
for (const f of s.filters) {
|
|
51
|
+
if (!isEqualityLike(f)) {
|
|
52
|
+
fields.push({ fieldPath: f.field, order: 'ASCENDING' });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// OrderBy fields — direction matters; only include fields not already in.
|
|
56
|
+
for (const o of s.orders) {
|
|
57
|
+
const existing = fields.findIndex(x => x.fieldPath === o.field);
|
|
58
|
+
if (existing >= 0) {
|
|
59
|
+
// The orderBy direction wins over a default-ascending entry from
|
|
60
|
+
// the filter loop — Firestore's index requires the orderBy
|
|
61
|
+
// direction to match.
|
|
62
|
+
fields[existing] = { fieldPath: o.field, order: o.direction === 'desc' ? 'DESCENDING' : 'ASCENDING' };
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
fields.push({ fieldPath: o.field, order: o.direction === 'desc' ? 'DESCENDING' : 'ASCENDING' });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Last segment of the path is the collectionGroup (subcollection
|
|
69
|
+
// queries pin the group to the leaf segment).
|
|
70
|
+
const collectionGroup = s.collectionPath.split('/').pop() || s.collectionPath;
|
|
71
|
+
return {
|
|
72
|
+
collectionGroup,
|
|
73
|
+
queryScope: s.isCollectionGroup ? 'COLLECTION_GROUP' : 'COLLECTION',
|
|
74
|
+
fields,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Stable string key for an index entry — used by the orchestrator to
|
|
79
|
+
* dedupe across multiple shapes that map to the same index.
|
|
80
|
+
*/
|
|
81
|
+
export function indexEntryKey(e) {
|
|
82
|
+
const fields = e.fields.map(f => `${f.fieldPath}:${f.order ?? 'ASCENDING'}`).join(',');
|
|
83
|
+
return `${e.queryScope}|${e.collectionGroup}|${fields}`;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=composite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite.js","sourceRoot":"","sources":["../../../../src/rules/indexes/extract/composite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `scanFunctionBody` — intra-procedural walker that finds every assignment
|
|
3
|
+
* to a chain variable (typically `q`) inside a function body, classifies
|
|
4
|
+
* each assignment's RHS via `classifyQueryCall`, and stamps each emitted
|
|
5
|
+
* fragment with branch context (branchId/clauseId/skippable).
|
|
6
|
+
*
|
|
7
|
+
* Branch context lets the enumerator (next module) correctly model
|
|
8
|
+
* mutually exclusive clauses and skippable optional `if (cond)` blocks.
|
|
9
|
+
*
|
|
10
|
+
* Scope:
|
|
11
|
+
* - Variable bindings tracked at function scope only.
|
|
12
|
+
* - if/else-if/else chains supported. switch / try / nested function
|
|
13
|
+
* bodies are walked but their branches are NOT enumerated separately
|
|
14
|
+
* (treated as unconditional within the enclosing scope).
|
|
15
|
+
* - Optional inter-procedural following (Layer 2.5): callers may pass a
|
|
16
|
+
* `CallResolver` to recursively inline a same-file wrapper that takes
|
|
17
|
+
* the chain variable as a parameter and returns a modified chain.
|
|
18
|
+
* Single-level only, root-context only, identifier-arg only.
|
|
19
|
+
*/
|
|
20
|
+
import ts from 'typescript';
|
|
21
|
+
import type { QueryBaseDecl } from './types.js';
|
|
22
|
+
/**
|
|
23
|
+
* Result returned by a `CallResolver` when it knows how to inline a call.
|
|
24
|
+
*
|
|
25
|
+
* `body` is the wrapper function's body node — the recursion runs
|
|
26
|
+
* `scanFunctionBody`'s inner walker over it, treating `chainParamName` as
|
|
27
|
+
* the wrapper's chain variable.
|
|
28
|
+
*/
|
|
29
|
+
export interface ResolvedCall {
|
|
30
|
+
body: ts.Node;
|
|
31
|
+
chainParamName: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Optional callback that lets the walker follow chain-var-passing calls
|
|
35
|
+
* into other functions in the same source file (Layer 2.5).
|
|
36
|
+
*
|
|
37
|
+
* Receives the called function's name and the position of the chain
|
|
38
|
+
* variable in the argument list. Returns the wrapper's body and the
|
|
39
|
+
* parameter name corresponding to that argument, or `null` if the call
|
|
40
|
+
* shouldn't be followed (unknown function, wrong arity, parameter not an
|
|
41
|
+
* identifier, etc.).
|
|
42
|
+
*/
|
|
43
|
+
export type CallResolver = (functionName: string, chainArgIndex: number) => ResolvedCall | null;
|
|
44
|
+
export declare function scanFunctionBody(body: ts.Node, varName: string, callResolver?: CallResolver): QueryBaseDecl;
|
|
45
|
+
//# sourceMappingURL=dataflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataflow.d.ts","sourceRoot":"","sources":["../../../../src/rules/indexes/extract/dataflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,KAAK,EAAY,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;AAmDhG,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,YAAY,GAC1B,aAAa,CA4Jf"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `scanFunctionBody` — intra-procedural walker that finds every assignment
|
|
3
|
+
* to a chain variable (typically `q`) inside a function body, classifies
|
|
4
|
+
* each assignment's RHS via `classifyQueryCall`, and stamps each emitted
|
|
5
|
+
* fragment with branch context (branchId/clauseId/skippable).
|
|
6
|
+
*
|
|
7
|
+
* Branch context lets the enumerator (next module) correctly model
|
|
8
|
+
* mutually exclusive clauses and skippable optional `if (cond)` blocks.
|
|
9
|
+
*
|
|
10
|
+
* Scope:
|
|
11
|
+
* - Variable bindings tracked at function scope only.
|
|
12
|
+
* - if/else-if/else chains supported. switch / try / nested function
|
|
13
|
+
* bodies are walked but their branches are NOT enumerated separately
|
|
14
|
+
* (treated as unconditional within the enclosing scope).
|
|
15
|
+
* - Optional inter-procedural following (Layer 2.5): callers may pass a
|
|
16
|
+
* `CallResolver` to recursively inline a same-file wrapper that takes
|
|
17
|
+
* the chain variable as a parameter and returns a modified chain.
|
|
18
|
+
* Single-level only, root-context only, identifier-arg only.
|
|
19
|
+
*/
|
|
20
|
+
import ts from 'typescript';
|
|
21
|
+
import { getCalleeName } from './ast.js';
|
|
22
|
+
import { classifyQueryCall } from './classify.js';
|
|
23
|
+
const ROOT_CTX = { branchId: null, clauseId: null, skippable: false };
|
|
24
|
+
/**
|
|
25
|
+
* Decide whether an `if`-chain has a final `else` (so one branch always
|
|
26
|
+
* runs) or not (so all branches are individually skippable).
|
|
27
|
+
*/
|
|
28
|
+
function ifChainHasFinalElse(node) {
|
|
29
|
+
let cur = node;
|
|
30
|
+
while (cur) {
|
|
31
|
+
if (!cur.elseStatement)
|
|
32
|
+
return false;
|
|
33
|
+
if (ts.isIfStatement(cur.elseStatement)) {
|
|
34
|
+
cur = cur.elseStatement;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return true; // final else block
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Apply branch context to a classified fragment, producing the final
|
|
44
|
+
* `Fragment` shape with branchId/clauseId/skippable populated.
|
|
45
|
+
*
|
|
46
|
+
* INIT contributions are NOT emitted as fragments — they're recorded on
|
|
47
|
+
* the QueryBaseDecl directly. Only constraint fragments flow through.
|
|
48
|
+
*/
|
|
49
|
+
function attachContext(frag, ctx) {
|
|
50
|
+
return {
|
|
51
|
+
kind: frag.kind,
|
|
52
|
+
filter: frag.filter,
|
|
53
|
+
order: frag.order,
|
|
54
|
+
limit: frag.limit,
|
|
55
|
+
branchId: ctx.branchId,
|
|
56
|
+
clauseId: ctx.clauseId,
|
|
57
|
+
skippable: ctx.skippable,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export function scanFunctionBody(body, varName, callResolver) {
|
|
61
|
+
const decl = {
|
|
62
|
+
varName,
|
|
63
|
+
collectionPath: null,
|
|
64
|
+
isCollectionGroup: false,
|
|
65
|
+
fragments: [],
|
|
66
|
+
};
|
|
67
|
+
const scan = { nextBranchId: 1 };
|
|
68
|
+
/**
|
|
69
|
+
* Try to inline a non-`query` call that receives the current chain
|
|
70
|
+
* variable as an argument. Returns true when the call was recognized
|
|
71
|
+
* (whether or not it actually inlined — a recognized-but-skipped call
|
|
72
|
+
* still yields a warning and shouldn't be re-tried elsewhere).
|
|
73
|
+
*
|
|
74
|
+
* Hard limits per Layer 2.5 design:
|
|
75
|
+
* - Single-level only (depth 0 inlines once; depth ≥ 1 short-circuits
|
|
76
|
+
* with `inter-proc-recursion` warning).
|
|
77
|
+
* - Root context only — calls inside `if`-branches surface
|
|
78
|
+
* `inter-proc-nested` and skip inlining.
|
|
79
|
+
* - Chain variable must appear as a bare identifier in the args.
|
|
80
|
+
*/
|
|
81
|
+
function tryInlineCall(call, chainVar, ctx, depth) {
|
|
82
|
+
if (!callResolver)
|
|
83
|
+
return false;
|
|
84
|
+
const fnName = getCalleeName(call);
|
|
85
|
+
if (!fnName || fnName === 'query')
|
|
86
|
+
return false;
|
|
87
|
+
let chainArgIndex = -1;
|
|
88
|
+
for (let i = 0; i < call.arguments.length; i++) {
|
|
89
|
+
const a = call.arguments[i];
|
|
90
|
+
if (ts.isIdentifier(a) && a.text === chainVar) {
|
|
91
|
+
chainArgIndex = i;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (chainArgIndex === -1)
|
|
96
|
+
return false;
|
|
97
|
+
if (depth >= 1) {
|
|
98
|
+
pushInterProcWarning('inter-proc-recursion', fnName, `Skipped follow into '${fnName}': single-level inter-procedural only.`);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
if (ctx.branchId !== null) {
|
|
102
|
+
pushInterProcWarning('inter-proc-nested', fnName, `Skipped follow into '${fnName}': call site is inside a branch.`);
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
const resolved = callResolver(fnName, chainArgIndex);
|
|
106
|
+
if (!resolved)
|
|
107
|
+
return false;
|
|
108
|
+
walkBody(resolved.body, resolved.chainParamName, depth + 1);
|
|
109
|
+
decl.inlinedFunctions = decl.inlinedFunctions ?? [];
|
|
110
|
+
if (!decl.inlinedFunctions.includes(fnName))
|
|
111
|
+
decl.inlinedFunctions.push(fnName);
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
function pushInterProcWarning(code, functionName, message) {
|
|
115
|
+
decl.interProcWarnings = decl.interProcWarnings ?? [];
|
|
116
|
+
decl.interProcWarnings.push({ code, functionName, message });
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Walk a function body looking for assignments to `chainVar`. The same
|
|
120
|
+
* `decl` and `scan.nextBranchId` are shared across recursive calls so
|
|
121
|
+
* branch IDs across caller + wrapper stay distinct.
|
|
122
|
+
*/
|
|
123
|
+
function walkBody(targetBody, chainVar, depth) {
|
|
124
|
+
function processAssignmentRHS(rhs, ctx) {
|
|
125
|
+
if (!ts.isCallExpression(rhs))
|
|
126
|
+
return;
|
|
127
|
+
if (getCalleeName(rhs) === 'query') {
|
|
128
|
+
const r = classifyQueryCall(rhs, chainVar);
|
|
129
|
+
if (r.isInit) {
|
|
130
|
+
// The first INIT we see wins. Subsequent re-INITs would mean
|
|
131
|
+
// the chain restarts — rare in real code, ignored for v1.
|
|
132
|
+
if (decl.collectionPath === null) {
|
|
133
|
+
decl.collectionPath = r.collectionPath ?? null;
|
|
134
|
+
decl.isCollectionGroup = r.isCollectionGroup ?? false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
for (const f of r.fragments) {
|
|
138
|
+
decl.fragments.push(attachContext(f, ctx));
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
// Not a `query(...)` call — try the inter-procedural follower.
|
|
143
|
+
tryInlineCall(rhs, chainVar, ctx, depth);
|
|
144
|
+
}
|
|
145
|
+
function visit(node, ctx) {
|
|
146
|
+
// 1. Variable declaration: `let q = query(...)` or `let q = wrapper(q,...)`
|
|
147
|
+
if (ts.isVariableStatement(node)) {
|
|
148
|
+
for (const d of node.declarationList.declarations) {
|
|
149
|
+
if (ts.isIdentifier(d.name) && d.name.text === chainVar && d.initializer) {
|
|
150
|
+
processAssignmentRHS(d.initializer, ctx);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// 2. Assignment: `q = query(q, ...)` or `q = wrapper(q, ...)`
|
|
155
|
+
if (ts.isExpressionStatement(node)
|
|
156
|
+
&& ts.isBinaryExpression(node.expression)
|
|
157
|
+
&& node.expression.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
|
|
158
|
+
const lhs = node.expression.left;
|
|
159
|
+
if (ts.isIdentifier(lhs) && lhs.text === chainVar) {
|
|
160
|
+
processAssignmentRHS(node.expression.right, ctx);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// 3. if/else chain: open a new branchId, walk each clause separately.
|
|
164
|
+
if (ts.isIfStatement(node)) {
|
|
165
|
+
const branchId = scan.nextBranchId++;
|
|
166
|
+
const skippable = !ifChainHasFinalElse(node);
|
|
167
|
+
let clauseIdx = 0;
|
|
168
|
+
let walker = node;
|
|
169
|
+
while (walker) {
|
|
170
|
+
if (ts.isIfStatement(walker)) {
|
|
171
|
+
visit(walker.thenStatement, { branchId, clauseId: clauseIdx, skippable });
|
|
172
|
+
if (walker.elseStatement && !ts.isIfStatement(walker.elseStatement)) {
|
|
173
|
+
// final else
|
|
174
|
+
clauseIdx += 1;
|
|
175
|
+
visit(walker.elseStatement, { branchId, clauseId: clauseIdx, skippable });
|
|
176
|
+
walker = undefined;
|
|
177
|
+
}
|
|
178
|
+
else if (walker.elseStatement && ts.isIfStatement(walker.elseStatement)) {
|
|
179
|
+
clauseIdx += 1;
|
|
180
|
+
walker = walker.elseStatement;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
walker = undefined;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
walker = undefined;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return; // handled — don't recurse into the if's children again
|
|
191
|
+
}
|
|
192
|
+
// Default: recurse into children with the current ctx.
|
|
193
|
+
ts.forEachChild(node, (n) => visit(n, ctx));
|
|
194
|
+
}
|
|
195
|
+
visit(targetBody, ROOT_CTX);
|
|
196
|
+
}
|
|
197
|
+
walkBody(body, varName, 0);
|
|
198
|
+
return decl;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=dataflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataflow.js","sourceRoot":"","sources":["../../../../src/rules/indexes/extract/dataflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `enumerateShapes` — turn a `QueryBaseDecl` (base + branched fragments)
|
|
3
|
+
* into the finite set of `QueryShape`s the source may issue at runtime.
|
|
4
|
+
*
|
|
5
|
+
* Algorithm:
|
|
6
|
+
* 1. Group fragments by branchId (null = unconditional).
|
|
7
|
+
* 2. For each branch, the choices are: each clause's fragment-list,
|
|
8
|
+
* plus an empty-choice if the branch is skippable.
|
|
9
|
+
* 3. Cartesian product across branches.
|
|
10
|
+
* 4. Each combo includes all unconditional fragments.
|
|
11
|
+
* 5. Dedupe shapes by stable key.
|
|
12
|
+
*/
|
|
13
|
+
import type { Annotations, QueryBaseDecl, QueryShape } from './types.js';
|
|
14
|
+
export declare function enumerateShapes(decl: QueryBaseDecl): QueryShape[];
|
|
15
|
+
/**
|
|
16
|
+
* Result of applying `@firestore-mutex` and `@firestore-required` to a
|
|
17
|
+
* shape list. Counts let the caller surface how many shapes each
|
|
18
|
+
* annotation pruned via `AnnotationApplied`.
|
|
19
|
+
*/
|
|
20
|
+
export interface PruneResult {
|
|
21
|
+
shapes: QueryShape[];
|
|
22
|
+
prunedByMutex: number;
|
|
23
|
+
prunedByRequired: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Apply mutex + required annotations to an enumerated shape list.
|
|
27
|
+
*
|
|
28
|
+
* - Mutex: a shape is dropped if any mutex group has ≥2 of its fields
|
|
29
|
+
* present in the shape's filters or orderBy. (One field from a group
|
|
30
|
+
* is fine — the constraint is "at most one".)
|
|
31
|
+
* - Required: a shape is dropped if it doesn't contain every field in
|
|
32
|
+
* `annotations.required` somewhere in filters or orderBy.
|
|
33
|
+
*
|
|
34
|
+
* `@firestore-budget` is **not** applied here — that's a soft cap
|
|
35
|
+
* surfaced as a warning at the orchestrator level, not a prune.
|
|
36
|
+
*
|
|
37
|
+
* No-op when `annotations` is `undefined`, empty mutexGroups, and empty
|
|
38
|
+
* required — returns the input shapes with zero prune counts.
|
|
39
|
+
*/
|
|
40
|
+
export declare function pruneByAnnotations(shapes: QueryShape[], annotations: Annotations | undefined): PruneResult;
|
|
41
|
+
//# sourceMappingURL=enumerate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enumerate.d.ts","sourceRoot":"","sources":["../../../../src/rules/indexes/extract/enumerate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,WAAW,EAA2B,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAoBlG,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,UAAU,EAAE,CAuFjE;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAAE,EACpB,WAAW,EAAE,WAAW,GAAG,SAAS,GACnC,WAAW,CA2Cb"}
|