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,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrapper class contract for Firestore Rules value types — see
|
|
3
|
+
* REBUILD_PLAN.md Item 0.B + Item 1.
|
|
4
|
+
*
|
|
5
|
+
* Why an abstract base instead of duck typing: the evaluator dispatches
|
|
6
|
+
* through six different code paths (rulesValuesEqual, memberAccess,
|
|
7
|
+
* bracketAccess, evaluateMethodCall, evaluateBinaryOp, isExpr, inExpr).
|
|
8
|
+
* Without a single base class, every new wrapper would have to be
|
|
9
|
+
* registered at six sites — and forgetting one is the exact failure mode
|
|
10
|
+
* 0.B is designed to prevent ("two `Timestamp` instances wrapping the
|
|
11
|
+
* same millis weren't `===`, so `request.time == otherTime` always
|
|
12
|
+
* denied in sim"). With this base class, every wrapper inherits all six
|
|
13
|
+
* dispatch hooks for free.
|
|
14
|
+
*
|
|
15
|
+
* Concrete subclasses (Timestamp, Duration, Bytes, LatLng) land in
|
|
16
|
+
* Item 1.1–1.4. Path lands in Item 5. This file is intentionally
|
|
17
|
+
* dead code until 1.1 — landing it first makes each wrapper sub-task
|
|
18
|
+
* a "fill in the blanks" exercise instead of a structural change.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Sentinel returned by `binaryOp` / `callMethod` when the wrapper does
|
|
22
|
+
* not handle the requested operation/method. The evaluator interprets
|
|
23
|
+
* NO_OP as "fall through" — for `binaryOp` that means try the generic
|
|
24
|
+
* numeric path; for `callMethod` it means throw `UnsupportedError`.
|
|
25
|
+
*
|
|
26
|
+
* `Symbol.for` (registered symbol) survives module duplication that
|
|
27
|
+
* can happen across bun + esbuild + node test runners — `===` checks
|
|
28
|
+
* stay reliable even if `base.ts` is loaded under two different module
|
|
29
|
+
* specifiers.
|
|
30
|
+
*/
|
|
31
|
+
export const NO_OP = Symbol.for('pyric.RulesValue.NO_OP');
|
|
32
|
+
export class RulesValue {
|
|
33
|
+
/**
|
|
34
|
+
* Property access for `x.field` and `x[field]`. Default returns null
|
|
35
|
+
* (no such field) — the same shape Firestore rules use for missing
|
|
36
|
+
* map keys, so denial behavior is consistent.
|
|
37
|
+
*
|
|
38
|
+
* Wrappers override only for named properties they expose. Methods
|
|
39
|
+
* are NOT exposed via `field` — `x.size` evaluates the property to
|
|
40
|
+
* `null`, and `x.size()` goes through `callMethod` instead.
|
|
41
|
+
*/
|
|
42
|
+
field(_name) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Method dispatch for `x.method(args)`. Default returns NO_OP — the
|
|
47
|
+
* evaluator turns NO_OP into `UnsupportedError`, which the handler
|
|
48
|
+
* maps to TestResult.state = 'UNSUPPORTED' (Item 0.A). That gives
|
|
49
|
+
* agents a clear "sim gap" signal rather than a silent DENY when a
|
|
50
|
+
* wrapper hasn't implemented a method yet.
|
|
51
|
+
*
|
|
52
|
+
* Wrappers override with a switch on `method` and dispatch to their
|
|
53
|
+
* own private methods. The dispatch table is intentionally not a
|
|
54
|
+
* `Record<string, Function>` — keeping it as a switch lets each
|
|
55
|
+
* wrapper apply its own arg validation and return-type promises
|
|
56
|
+
* inline rather than forcing a uniform signature.
|
|
57
|
+
*/
|
|
58
|
+
callMethod(_method, _args) {
|
|
59
|
+
return NO_OP;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Cross-type binary operator dispatch. Default returns NO_OP — the
|
|
63
|
+
* evaluator falls through to generic numeric ops via `valueOf()`.
|
|
64
|
+
*
|
|
65
|
+
* Wrappers override for the operators they support. The 0.B
|
|
66
|
+
* "Required dispatch changes" table specifies the cross-type
|
|
67
|
+
* arithmetic each wrapper claims:
|
|
68
|
+
* Timestamp + Duration → Timestamp
|
|
69
|
+
* Timestamp - Timestamp → Duration
|
|
70
|
+
* Timestamp - Duration → Timestamp
|
|
71
|
+
* Duration ± Duration → Duration
|
|
72
|
+
* Bytes < <= > >= Bytes → lexicographic byte compare
|
|
73
|
+
*
|
|
74
|
+
* `==` and `!=` do NOT route through this hook — they go through
|
|
75
|
+
* `rulesValuesEqual` which calls `equals()`. This split keeps the
|
|
76
|
+
* "is this the same value?" question separate from "what does
|
|
77
|
+
* `lhs OP rhs` evaluate to?".
|
|
78
|
+
*
|
|
79
|
+
* Dispatch is left-operand-only. For commutative ops where the
|
|
80
|
+
* right operand is a wrapper but the left isn't (e.g. `1 + duration`),
|
|
81
|
+
* the wrapper is responsible for handling reversed arguments via
|
|
82
|
+
* its own `binaryOp` when called from the right — the evaluator
|
|
83
|
+
* detects this by re-dispatching when `lv` isn't a wrapper but
|
|
84
|
+
* `rv` is, for the symmetric ops `==`, `!=`, `+`, `*`.
|
|
85
|
+
*/
|
|
86
|
+
binaryOp(_op, _other) {
|
|
87
|
+
return NO_OP;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/rules/simulator/wrappers/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,KAAK,GAAkB,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAU,CAAC;AAGlF,MAAM,OAAgB,UAAU;IAkD9B;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAa;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,OAAe,EAAE,KAAgB;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,QAAQ,CAAC,GAAW,EAAE,MAAe;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bytes wrapper — Item 5.3 of REBUILD_PLAN.md.
|
|
3
|
+
*
|
|
4
|
+
* Per type table:
|
|
5
|
+
* size() → Integer byte count
|
|
6
|
+
* toBase64() → String Base64url per RFC 4648 (URL-safe, no padding)
|
|
7
|
+
* toHexString() → String lowercase hex
|
|
8
|
+
*
|
|
9
|
+
* Per 0.B per-wrapper table:
|
|
10
|
+
* typeName: 'bytes'
|
|
11
|
+
* valueOf: data.length (byte count)
|
|
12
|
+
* toString: base64url encoding (round-trips with hashing.* receipts)
|
|
13
|
+
* equals: byte-by-byte
|
|
14
|
+
* binaryOp: lexicographic compare for < <= > >=
|
|
15
|
+
*
|
|
16
|
+
* Bytes was deferred from Item 1 because it has no JSON-test-data
|
|
17
|
+
* sentinel form — it only enters the evaluator via String.toUtf8() and
|
|
18
|
+
* hashing.*, both of which land in this same item (5.3). Landing the
|
|
19
|
+
* wrapper now means the constructors immediately have a real type to
|
|
20
|
+
* return.
|
|
21
|
+
*/
|
|
22
|
+
import { RulesValue, type NoOp } from './base.js';
|
|
23
|
+
export declare class Bytes extends RulesValue {
|
|
24
|
+
readonly typeName = "bytes";
|
|
25
|
+
/** Raw byte data. Held as Uint8Array for predictable ordering and length. */
|
|
26
|
+
readonly data: Uint8Array;
|
|
27
|
+
constructor(data: Uint8Array);
|
|
28
|
+
/** Construct from a UTF-8 string. */
|
|
29
|
+
static fromUtf8(s: string): Bytes;
|
|
30
|
+
/** Construct from a hex string (e.g. 'deadbeef'). */
|
|
31
|
+
static fromHex(hex: string): Bytes;
|
|
32
|
+
/** Byte count — exposed via callMethod('size'). Also drives valueOf(). */
|
|
33
|
+
size(): number;
|
|
34
|
+
/** Base64url per RFC 4648 (URL-safe, no padding). */
|
|
35
|
+
toBase64(): string;
|
|
36
|
+
/** Lowercase hex. */
|
|
37
|
+
toHexString(): string;
|
|
38
|
+
valueOf(): number;
|
|
39
|
+
toString(): string;
|
|
40
|
+
toJSON(): unknown;
|
|
41
|
+
equals(other: unknown): boolean;
|
|
42
|
+
callMethod(method: string, _args: unknown[]): unknown | NoOp;
|
|
43
|
+
binaryOp(op: string, other: unknown): unknown | NoOp;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=bytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../../../src/rules/simulator/wrappers/bytes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,UAAU,EAAS,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAkCzD,qBAAa,KAAM,SAAQ,UAAU;IACnC,QAAQ,CAAC,QAAQ,WAAW;IAE5B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;gBAEd,IAAI,EAAE,UAAU;IAK5B,qCAAqC;IACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK;IAIjC,qDAAqD;IACrD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK;IAWlC,0EAA0E;IAC1E,IAAI,IAAI,MAAM;IAId,qDAAqD;IACrD,QAAQ,IAAI,MAAM;IAIlB,qBAAqB;IACrB,WAAW,IAAI,MAAM;IAMrB,OAAO,IAAI,MAAM;IAIjB,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,OAAO;IAIjB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAS/B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI;IAS5D,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;CAWrD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bytes wrapper — Item 5.3 of REBUILD_PLAN.md.
|
|
3
|
+
*
|
|
4
|
+
* Per type table:
|
|
5
|
+
* size() → Integer byte count
|
|
6
|
+
* toBase64() → String Base64url per RFC 4648 (URL-safe, no padding)
|
|
7
|
+
* toHexString() → String lowercase hex
|
|
8
|
+
*
|
|
9
|
+
* Per 0.B per-wrapper table:
|
|
10
|
+
* typeName: 'bytes'
|
|
11
|
+
* valueOf: data.length (byte count)
|
|
12
|
+
* toString: base64url encoding (round-trips with hashing.* receipts)
|
|
13
|
+
* equals: byte-by-byte
|
|
14
|
+
* binaryOp: lexicographic compare for < <= > >=
|
|
15
|
+
*
|
|
16
|
+
* Bytes was deferred from Item 1 because it has no JSON-test-data
|
|
17
|
+
* sentinel form — it only enters the evaluator via String.toUtf8() and
|
|
18
|
+
* hashing.*, both of which land in this same item (5.3). Landing the
|
|
19
|
+
* wrapper now means the constructors immediately have a real type to
|
|
20
|
+
* return.
|
|
21
|
+
*/
|
|
22
|
+
import { RulesValue, NO_OP } from './base.js';
|
|
23
|
+
// Base64url + hex encoders. Browser-safe — no Buffer, no node:crypto.
|
|
24
|
+
// Behavior pinned by bytes.test.ts to match the previous Buffer-based
|
|
25
|
+
// output across UTF-8 / arbitrary-byte / empty fixtures.
|
|
26
|
+
const HEX = '0123456789abcdef';
|
|
27
|
+
function toHex(bytes) {
|
|
28
|
+
let out = '';
|
|
29
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
30
|
+
const b = bytes[i];
|
|
31
|
+
out += HEX[b >>> 4] + HEX[b & 0x0f];
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
function toBase64Url(bytes) {
|
|
36
|
+
// btoa exists in browsers and Node 16+; we encode the byte string
|
|
37
|
+
// through it, then map the standard alphabet to URL-safe (- _) and
|
|
38
|
+
// strip padding per RFC 4648 section 5.
|
|
39
|
+
let bin = '';
|
|
40
|
+
for (let i = 0; i < bytes.length; i++)
|
|
41
|
+
bin += String.fromCharCode(bytes[i]);
|
|
42
|
+
const std = btoa(bin);
|
|
43
|
+
return std.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
44
|
+
}
|
|
45
|
+
function lexicographicCompare(a, b) {
|
|
46
|
+
const len = Math.min(a.length, b.length);
|
|
47
|
+
for (let i = 0; i < len; i++) {
|
|
48
|
+
if (a[i] !== b[i])
|
|
49
|
+
return a[i] < b[i] ? -1 : 1;
|
|
50
|
+
}
|
|
51
|
+
return a.length === b.length ? 0 : (a.length < b.length ? -1 : 1);
|
|
52
|
+
}
|
|
53
|
+
export class Bytes extends RulesValue {
|
|
54
|
+
typeName = 'bytes';
|
|
55
|
+
/** Raw byte data. Held as Uint8Array for predictable ordering and length. */
|
|
56
|
+
data;
|
|
57
|
+
constructor(data) {
|
|
58
|
+
super();
|
|
59
|
+
this.data = data;
|
|
60
|
+
}
|
|
61
|
+
/** Construct from a UTF-8 string. */
|
|
62
|
+
static fromUtf8(s) {
|
|
63
|
+
return new Bytes(new TextEncoder().encode(s));
|
|
64
|
+
}
|
|
65
|
+
/** Construct from a hex string (e.g. 'deadbeef'). */
|
|
66
|
+
static fromHex(hex) {
|
|
67
|
+
if (hex.length % 2 !== 0) {
|
|
68
|
+
throw new Error(`Invalid hex string length: ${hex.length}`);
|
|
69
|
+
}
|
|
70
|
+
const out = new Uint8Array(hex.length / 2);
|
|
71
|
+
for (let i = 0; i < out.length; i++) {
|
|
72
|
+
out[i] = parseInt(hex.substr(i * 2, 2), 16);
|
|
73
|
+
}
|
|
74
|
+
return new Bytes(out);
|
|
75
|
+
}
|
|
76
|
+
/** Byte count — exposed via callMethod('size'). Also drives valueOf(). */
|
|
77
|
+
size() {
|
|
78
|
+
return this.data.length;
|
|
79
|
+
}
|
|
80
|
+
/** Base64url per RFC 4648 (URL-safe, no padding). */
|
|
81
|
+
toBase64() {
|
|
82
|
+
return toBase64Url(this.data);
|
|
83
|
+
}
|
|
84
|
+
/** Lowercase hex. */
|
|
85
|
+
toHexString() {
|
|
86
|
+
return toHex(this.data);
|
|
87
|
+
}
|
|
88
|
+
// ─── RulesValue contract ─────────────────────────────────────────────
|
|
89
|
+
valueOf() {
|
|
90
|
+
return this.data.length;
|
|
91
|
+
}
|
|
92
|
+
toString() {
|
|
93
|
+
return this.toBase64();
|
|
94
|
+
}
|
|
95
|
+
toJSON() {
|
|
96
|
+
return { __type: 'bytes', base64: this.toBase64() };
|
|
97
|
+
}
|
|
98
|
+
equals(other) {
|
|
99
|
+
if (!(other instanceof Bytes))
|
|
100
|
+
return false;
|
|
101
|
+
if (this.data.length !== other.data.length)
|
|
102
|
+
return false;
|
|
103
|
+
for (let i = 0; i < this.data.length; i++) {
|
|
104
|
+
if (this.data[i] !== other.data[i])
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
callMethod(method, _args) {
|
|
110
|
+
switch (method) {
|
|
111
|
+
case 'size': return this.size();
|
|
112
|
+
case 'toBase64': return this.toBase64();
|
|
113
|
+
case 'toHexString': return this.toHexString();
|
|
114
|
+
}
|
|
115
|
+
return NO_OP;
|
|
116
|
+
}
|
|
117
|
+
binaryOp(op, other) {
|
|
118
|
+
if (!(other instanceof Bytes))
|
|
119
|
+
return NO_OP;
|
|
120
|
+
const cmp = lexicographicCompare(this.data, other.data);
|
|
121
|
+
switch (op) {
|
|
122
|
+
case '<': return cmp < 0;
|
|
123
|
+
case '<=': return cmp <= 0;
|
|
124
|
+
case '>': return cmp > 0;
|
|
125
|
+
case '>=': return cmp >= 0;
|
|
126
|
+
}
|
|
127
|
+
return NO_OP;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=bytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../../../src/rules/simulator/wrappers/bytes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Duration wrapper for Firestore Rules `duration` type — Item 1.2.
|
|
3
|
+
*
|
|
4
|
+
* Closes the entire `Duration` type gap from REBUILD_PLAN.md (was
|
|
5
|
+
* "❌ entire type" in the Reference Inventory) and the `duration.abs`
|
|
6
|
+
* namespace gap.
|
|
7
|
+
*
|
|
8
|
+
* Reference surface (from REBUILD_PLAN.md "Reference Inventory"):
|
|
9
|
+
* - seconds() → Integer (signed, [-315_576_000_000, +315_576_000_000])
|
|
10
|
+
* - nanos() → Integer (signed, [-999_999_999, +999_999_999])
|
|
11
|
+
* - Operators: ==, !=, <, <=, >, >=, Duration ± Duration → Duration
|
|
12
|
+
*
|
|
13
|
+
* Construction (all flip atomically per REBUILD_PLAN Risk 3):
|
|
14
|
+
* - duration.value(magnitude, unit) unit ∈ w|d|h|m|s|ms|ns
|
|
15
|
+
* - duration.time(h, m, s, ns)
|
|
16
|
+
* - duration.abs(d)
|
|
17
|
+
*
|
|
18
|
+
* Internal storage per 0.C: plain `{ seconds, nanos }` Numbers, *not*
|
|
19
|
+
* a single millis number — the millis path silently truncates
|
|
20
|
+
* sub-millisecond precision. Comparison and arithmetic go through
|
|
21
|
+
* field-wise math; valueOf() exists only for legacy `as number` sites
|
|
22
|
+
* that don't route through binaryOp.
|
|
23
|
+
*
|
|
24
|
+
* Canonical form: same sign for `seconds` and `nanos`, with
|
|
25
|
+
* `|nanos| < 1_000_000_000`. This matches Google's protobuf Duration
|
|
26
|
+
* canonical form so `equals()` is a straight field compare without
|
|
27
|
+
* normalizing on every call.
|
|
28
|
+
*/
|
|
29
|
+
import { RulesValue, type NoOp } from './base.js';
|
|
30
|
+
export declare class Duration extends RulesValue {
|
|
31
|
+
readonly typeName = "duration";
|
|
32
|
+
readonly seconds: number;
|
|
33
|
+
readonly nanos: number;
|
|
34
|
+
constructor(seconds: number, nanos: number);
|
|
35
|
+
/**
|
|
36
|
+
* `duration.value(magnitude, unit)` — magnitude is Integer per spec.
|
|
37
|
+
* For `ms` and `ns` we route through integer math so a magnitude of
|
|
38
|
+
* `2500` ns doesn't become `2.5e-6` seconds (float artifact); for
|
|
39
|
+
* larger units the seconds-per-unit factor is exact.
|
|
40
|
+
*/
|
|
41
|
+
static fromValue(magnitude: number, unit: string): Duration;
|
|
42
|
+
/** `duration.time(h, m, s, ns)`. */
|
|
43
|
+
static fromTime(h: number, m: number, s: number, ns: number): Duration;
|
|
44
|
+
/**
|
|
45
|
+
* `duration.abs(d)`. Because canonical form forces same sign for
|
|
46
|
+
* both fields, we can safely take `Math.abs` of each independently
|
|
47
|
+
* — there's no field-pair like `(1, -500_000_000)` to worry about.
|
|
48
|
+
*/
|
|
49
|
+
static abs(d: Duration): Duration;
|
|
50
|
+
/**
|
|
51
|
+
* Millisecond approximation. Used only by legacy `as number` sites
|
|
52
|
+
* that bypass binaryOp; comparison/arithmetic go through binaryOp's
|
|
53
|
+
* field-wise path so sub-ms precision survives. See REBUILD_PLAN 0.C.
|
|
54
|
+
*/
|
|
55
|
+
valueOf(): number;
|
|
56
|
+
/**
|
|
57
|
+
* `${signedSeconds}.${absNanos}s` with 9-digit zero-padded fractional.
|
|
58
|
+
* Negative durations carry a single leading minus on the integer part
|
|
59
|
+
* — `Number(toString(d))` does not need to round-trip (no parser
|
|
60
|
+
* support for duration literals); this format mirrors protobuf's
|
|
61
|
+
* canonical text form for debugging readability.
|
|
62
|
+
*/
|
|
63
|
+
toString(): string;
|
|
64
|
+
toJSON(): unknown;
|
|
65
|
+
equals(other: unknown): boolean;
|
|
66
|
+
callMethod(method: string, _args: unknown[]): unknown | NoOp;
|
|
67
|
+
/**
|
|
68
|
+
* Duration ± Duration → Duration; Duration cmp Duration via field
|
|
69
|
+
* compare. Cross-type with Timestamp lands in 1.3. NO_OP for any
|
|
70
|
+
* other operand pair so the evaluator's Risk 2 guard surfaces
|
|
71
|
+
* `duration + 1` etc. as a real type error, not silent NaN.
|
|
72
|
+
*/
|
|
73
|
+
binaryOp(op: string, other: unknown): unknown | NoOp;
|
|
74
|
+
private compareTo;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=duration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../../../src/rules/simulator/wrappers/duration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,UAAU,EAAS,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAmCzD,qBAAa,QAAS,SAAQ,UAAU;IACtC,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAO1C;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAmB3D,oCAAoC;IACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ;IAItE;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAIjC;;;;OAIG;IACH,OAAO,IAAI,MAAM;IAIjB;;;;;;OAMG;IACH,QAAQ,IAAI,MAAM;IAOlB,MAAM,IAAI,OAAO;IAIjB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAQ/B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI;IAW5D;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;IAoBpD,OAAO,CAAC,SAAS;CAIlB"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Duration wrapper for Firestore Rules `duration` type — Item 1.2.
|
|
3
|
+
*
|
|
4
|
+
* Closes the entire `Duration` type gap from REBUILD_PLAN.md (was
|
|
5
|
+
* "❌ entire type" in the Reference Inventory) and the `duration.abs`
|
|
6
|
+
* namespace gap.
|
|
7
|
+
*
|
|
8
|
+
* Reference surface (from REBUILD_PLAN.md "Reference Inventory"):
|
|
9
|
+
* - seconds() → Integer (signed, [-315_576_000_000, +315_576_000_000])
|
|
10
|
+
* - nanos() → Integer (signed, [-999_999_999, +999_999_999])
|
|
11
|
+
* - Operators: ==, !=, <, <=, >, >=, Duration ± Duration → Duration
|
|
12
|
+
*
|
|
13
|
+
* Construction (all flip atomically per REBUILD_PLAN Risk 3):
|
|
14
|
+
* - duration.value(magnitude, unit) unit ∈ w|d|h|m|s|ms|ns
|
|
15
|
+
* - duration.time(h, m, s, ns)
|
|
16
|
+
* - duration.abs(d)
|
|
17
|
+
*
|
|
18
|
+
* Internal storage per 0.C: plain `{ seconds, nanos }` Numbers, *not*
|
|
19
|
+
* a single millis number — the millis path silently truncates
|
|
20
|
+
* sub-millisecond precision. Comparison and arithmetic go through
|
|
21
|
+
* field-wise math; valueOf() exists only for legacy `as number` sites
|
|
22
|
+
* that don't route through binaryOp.
|
|
23
|
+
*
|
|
24
|
+
* Canonical form: same sign for `seconds` and `nanos`, with
|
|
25
|
+
* `|nanos| < 1_000_000_000`. This matches Google's protobuf Duration
|
|
26
|
+
* canonical form so `equals()` is a straight field compare without
|
|
27
|
+
* normalizing on every call.
|
|
28
|
+
*/
|
|
29
|
+
import { RulesValue, NO_OP } from './base.js';
|
|
30
|
+
const NANOS_PER_SECOND = 1_000_000_000;
|
|
31
|
+
const SECONDS_PER_UNIT = {
|
|
32
|
+
w: 7 * 24 * 60 * 60,
|
|
33
|
+
d: 24 * 60 * 60,
|
|
34
|
+
h: 60 * 60,
|
|
35
|
+
m: 60,
|
|
36
|
+
s: 1,
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Roll over-/under-flow nanos into seconds and force same sign for both
|
|
40
|
+
* fields. Two normalization passes:
|
|
41
|
+
* 1. Carry whole seconds out of nanos.
|
|
42
|
+
* 2. Reconcile sign mismatch between seconds and nanos.
|
|
43
|
+
*
|
|
44
|
+
* Without step 2, `(1, -500_000_000)` would survive as a non-canonical
|
|
45
|
+
* form, breaking `equals()` against the equivalent `(0, 500_000_000)`
|
|
46
|
+
* produced by a different construction path.
|
|
47
|
+
*/
|
|
48
|
+
function normalize(seconds, nanos) {
|
|
49
|
+
let s = seconds + Math.trunc(nanos / NANOS_PER_SECOND);
|
|
50
|
+
let n = nanos % NANOS_PER_SECOND;
|
|
51
|
+
if (s > 0 && n < 0) {
|
|
52
|
+
s -= 1;
|
|
53
|
+
n += NANOS_PER_SECOND;
|
|
54
|
+
}
|
|
55
|
+
else if (s < 0 && n > 0) {
|
|
56
|
+
s += 1;
|
|
57
|
+
n -= NANOS_PER_SECOND;
|
|
58
|
+
}
|
|
59
|
+
return { seconds: s, nanos: n };
|
|
60
|
+
}
|
|
61
|
+
export class Duration extends RulesValue {
|
|
62
|
+
typeName = 'duration';
|
|
63
|
+
seconds;
|
|
64
|
+
nanos;
|
|
65
|
+
constructor(seconds, nanos) {
|
|
66
|
+
super();
|
|
67
|
+
const norm = normalize(seconds, nanos);
|
|
68
|
+
this.seconds = norm.seconds;
|
|
69
|
+
this.nanos = norm.nanos;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* `duration.value(magnitude, unit)` — magnitude is Integer per spec.
|
|
73
|
+
* For `ms` and `ns` we route through integer math so a magnitude of
|
|
74
|
+
* `2500` ns doesn't become `2.5e-6` seconds (float artifact); for
|
|
75
|
+
* larger units the seconds-per-unit factor is exact.
|
|
76
|
+
*/
|
|
77
|
+
static fromValue(magnitude, unit) {
|
|
78
|
+
if (unit in SECONDS_PER_UNIT) {
|
|
79
|
+
return new Duration(magnitude * SECONDS_PER_UNIT[unit], 0);
|
|
80
|
+
}
|
|
81
|
+
if (unit === 'ms') {
|
|
82
|
+
const wholeSec = Math.trunc(magnitude / 1000);
|
|
83
|
+
const remainderMs = magnitude - wholeSec * 1000;
|
|
84
|
+
return new Duration(wholeSec, remainderMs * 1_000_000);
|
|
85
|
+
}
|
|
86
|
+
if (unit === 'ns') {
|
|
87
|
+
const wholeSec = Math.trunc(magnitude / NANOS_PER_SECOND);
|
|
88
|
+
const remainderNs = magnitude - wholeSec * NANOS_PER_SECOND;
|
|
89
|
+
return new Duration(wholeSec, remainderNs);
|
|
90
|
+
}
|
|
91
|
+
throw new Error(`Unknown duration unit '${unit}' (expected one of: w, d, h, m, s, ms, ns)`);
|
|
92
|
+
}
|
|
93
|
+
/** `duration.time(h, m, s, ns)`. */
|
|
94
|
+
static fromTime(h, m, s, ns) {
|
|
95
|
+
return new Duration(h * 3600 + m * 60 + s, ns);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* `duration.abs(d)`. Because canonical form forces same sign for
|
|
99
|
+
* both fields, we can safely take `Math.abs` of each independently
|
|
100
|
+
* — there's no field-pair like `(1, -500_000_000)` to worry about.
|
|
101
|
+
*/
|
|
102
|
+
static abs(d) {
|
|
103
|
+
return new Duration(Math.abs(d.seconds), Math.abs(d.nanos));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Millisecond approximation. Used only by legacy `as number` sites
|
|
107
|
+
* that bypass binaryOp; comparison/arithmetic go through binaryOp's
|
|
108
|
+
* field-wise path so sub-ms precision survives. See REBUILD_PLAN 0.C.
|
|
109
|
+
*/
|
|
110
|
+
valueOf() {
|
|
111
|
+
return this.seconds * 1000 + Math.round(this.nanos / 1e6);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* `${signedSeconds}.${absNanos}s` with 9-digit zero-padded fractional.
|
|
115
|
+
* Negative durations carry a single leading minus on the integer part
|
|
116
|
+
* — `Number(toString(d))` does not need to round-trip (no parser
|
|
117
|
+
* support for duration literals); this format mirrors protobuf's
|
|
118
|
+
* canonical text form for debugging readability.
|
|
119
|
+
*/
|
|
120
|
+
toString() {
|
|
121
|
+
const negative = this.seconds < 0 || this.nanos < 0;
|
|
122
|
+
const absSec = Math.abs(this.seconds);
|
|
123
|
+
const absNanos = Math.abs(this.nanos);
|
|
124
|
+
return `${negative ? '-' : ''}${absSec}.${absNanos.toString().padStart(9, '0')}s`;
|
|
125
|
+
}
|
|
126
|
+
toJSON() {
|
|
127
|
+
return { __type: 'duration', seconds: this.seconds, nanos: this.nanos };
|
|
128
|
+
}
|
|
129
|
+
equals(other) {
|
|
130
|
+
return (other instanceof Duration &&
|
|
131
|
+
this.seconds === other.seconds &&
|
|
132
|
+
this.nanos === other.nanos);
|
|
133
|
+
}
|
|
134
|
+
callMethod(method, _args) {
|
|
135
|
+
switch (method) {
|
|
136
|
+
case 'seconds':
|
|
137
|
+
return this.seconds;
|
|
138
|
+
case 'nanos':
|
|
139
|
+
return this.nanos;
|
|
140
|
+
default:
|
|
141
|
+
return NO_OP;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Duration ± Duration → Duration; Duration cmp Duration via field
|
|
146
|
+
* compare. Cross-type with Timestamp lands in 1.3. NO_OP for any
|
|
147
|
+
* other operand pair so the evaluator's Risk 2 guard surfaces
|
|
148
|
+
* `duration + 1` etc. as a real type error, not silent NaN.
|
|
149
|
+
*/
|
|
150
|
+
binaryOp(op, other) {
|
|
151
|
+
if (!(other instanceof Duration))
|
|
152
|
+
return NO_OP;
|
|
153
|
+
switch (op) {
|
|
154
|
+
case '+':
|
|
155
|
+
return new Duration(this.seconds + other.seconds, this.nanos + other.nanos);
|
|
156
|
+
case '-':
|
|
157
|
+
return new Duration(this.seconds - other.seconds, this.nanos - other.nanos);
|
|
158
|
+
case '<':
|
|
159
|
+
return this.compareTo(other) < 0;
|
|
160
|
+
case '<=':
|
|
161
|
+
return this.compareTo(other) <= 0;
|
|
162
|
+
case '>':
|
|
163
|
+
return this.compareTo(other) > 0;
|
|
164
|
+
case '>=':
|
|
165
|
+
return this.compareTo(other) >= 0;
|
|
166
|
+
default:
|
|
167
|
+
return NO_OP;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
compareTo(other) {
|
|
171
|
+
if (this.seconds !== other.seconds)
|
|
172
|
+
return this.seconds - other.seconds;
|
|
173
|
+
return this.nanos - other.nanos;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=duration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.js","sourceRoot":"","sources":["../../../../src/rules/simulator/wrappers/duration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RULES-B5 — int/float type distinction in the rules value model.
|
|
3
|
+
*
|
|
4
|
+
* Firestore Security Rules (CEL) has two distinct numeric types, `int`
|
|
5
|
+
* (INT64) and `float` (FLOAT64). The JS host has only one `number`, so
|
|
6
|
+
* `1` and `1.0` are indistinguishable at the host level — which is why
|
|
7
|
+
* the pre-fix evaluator reported `1.5 is int` → true and `1 is float` →
|
|
8
|
+
* true, and did float division for `10 / 4` (→ 2.5, where prod truncates
|
|
9
|
+
* int÷int to 2). See findings-ledger RULES-B5.
|
|
10
|
+
*
|
|
11
|
+
* The fix tags FLOAT values with this lightweight wrapper while bare JS
|
|
12
|
+
* `number` continues to mean `int`. Why wrap floats (not ints): integers
|
|
13
|
+
* are overwhelmingly the common case in rules data (counts, sizes, list
|
|
14
|
+
* indices, `request.time` millis), and every existing `typeof x ===
|
|
15
|
+
* 'number'` site already treats a bare number as an int — so wrapping the
|
|
16
|
+
* rarer float keeps the blast radius small. The evaluator unwraps floats
|
|
17
|
+
* at arithmetic/comparison boundaries via `numericValue()` and re-tags
|
|
18
|
+
* the result when either operand was a float.
|
|
19
|
+
*
|
|
20
|
+
* `is float` ↔ `value instanceof RulesFloat`; `is int` ↔ bare number.
|
|
21
|
+
* `string()` of a float keeps its decimal (`string(1.0)` → "1.0").
|
|
22
|
+
*
|
|
23
|
+
* Doc/oracle: https://firebase.google.com/docs/reference/rules/rules.Float
|
|
24
|
+
* (distinct Float type) + the CEL int/float division spec (int÷int
|
|
25
|
+
* truncates, int÷0 errors, float÷0 → NaN).
|
|
26
|
+
*/
|
|
27
|
+
import { RulesValue, type NoOp } from './base.js';
|
|
28
|
+
export declare class RulesFloat extends RulesValue {
|
|
29
|
+
readonly typeName = "float";
|
|
30
|
+
readonly value: number;
|
|
31
|
+
constructor(value: number);
|
|
32
|
+
/** Numeric coercion — float arithmetic unwraps to this raw double. */
|
|
33
|
+
valueOf(): number;
|
|
34
|
+
/**
|
|
35
|
+
* `string()` of a float keeps a decimal point so the int/float
|
|
36
|
+
* distinction survives the cast: `string(1.0)` → "1.0", not "1".
|
|
37
|
+
* Non-integral floats stringify naturally (`string(1.5)` → "1.5").
|
|
38
|
+
*/
|
|
39
|
+
toString(): string;
|
|
40
|
+
toJSON(): unknown;
|
|
41
|
+
equals(other: unknown): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Float participates in arithmetic/comparison against bare-number ints
|
|
44
|
+
* and other floats. A float operand always yields a float result (CEL
|
|
45
|
+
* has no int÷float→int narrowing); division by zero is FLOAT division so
|
|
46
|
+
* it produces NaN (caller decides storeability) rather than erroring the
|
|
47
|
+
* way int÷0 does. NO_OP for any non-numeric operand so the evaluator's
|
|
48
|
+
* type-mismatch guard surfaces e.g. `1.5 + 'a'` as a real error.
|
|
49
|
+
*/
|
|
50
|
+
binaryOp(op: string, other: unknown): unknown | NoOp;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=float.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"float.d.ts","sourceRoot":"","sources":["../../../../src/rules/simulator/wrappers/float.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,UAAU,EAAS,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAEzD,qBAAa,UAAW,SAAQ,UAAU;IACxC,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,KAAK,EAAE,MAAM;IAKzB,sEAAsE;IACtE,OAAO,IAAI,MAAM;IAIjB;;;;OAIG;IACH,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,OAAO;IAIjB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAQ/B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI;CAoBrD"}
|