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.
Files changed (786) hide show
  1. package/README.md +52 -1
  2. package/dist/app/index.d.ts +81 -0
  3. package/dist/app/index.d.ts.map +1 -0
  4. package/dist/app/index.js +78 -0
  5. package/dist/app/index.js.map +1 -0
  6. package/dist/auth/index.d.ts +346 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +701 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/prod-backend.d.ts +39 -0
  11. package/dist/auth/prod-backend.d.ts.map +1 -0
  12. package/dist/auth/prod-backend.js +179 -0
  13. package/dist/auth/prod-backend.js.map +1 -0
  14. package/dist/auth/providers.d.ts +107 -0
  15. package/dist/auth/providers.d.ts.map +1 -0
  16. package/dist/auth/providers.js +138 -0
  17. package/dist/auth/providers.js.map +1 -0
  18. package/dist/auth/sandbox-backend.d.ts +769 -0
  19. package/dist/auth/sandbox-backend.d.ts.map +1 -0
  20. package/dist/auth/sandbox-backend.js +1598 -0
  21. package/dist/auth/sandbox-backend.js.map +1 -0
  22. package/dist/auth/target.d.ts +40 -0
  23. package/dist/auth/target.d.ts.map +1 -0
  24. package/dist/auth/target.js +28 -0
  25. package/dist/auth/target.js.map +1 -0
  26. package/dist/auth/types.d.ts +252 -0
  27. package/dist/auth/types.d.ts.map +1 -0
  28. package/dist/auth/types.js +26 -0
  29. package/dist/auth/types.js.map +1 -0
  30. package/dist/database/constraints/atoms.d.ts +29 -0
  31. package/dist/database/constraints/atoms.d.ts.map +1 -0
  32. package/dist/database/constraints/atoms.js +43 -0
  33. package/dist/database/constraints/atoms.js.map +1 -0
  34. package/dist/database/constraints/compose.d.ts +16 -0
  35. package/dist/database/constraints/compose.d.ts.map +1 -0
  36. package/dist/database/constraints/compose.js +15 -0
  37. package/dist/database/constraints/compose.js.map +1 -0
  38. package/dist/database/constraints/data.d.ts +30 -0
  39. package/dist/database/constraints/data.d.ts.map +1 -0
  40. package/dist/database/constraints/data.js +46 -0
  41. package/dist/database/constraints/data.js.map +1 -0
  42. package/dist/database/constraints/document.d.ts +42 -0
  43. package/dist/database/constraints/document.d.ts.map +1 -0
  44. package/dist/database/constraints/document.js +86 -0
  45. package/dist/database/constraints/document.js.map +1 -0
  46. package/dist/database/constraints/game.d.ts +30 -0
  47. package/dist/database/constraints/game.d.ts.map +1 -0
  48. package/dist/database/constraints/game.js +49 -0
  49. package/dist/database/constraints/game.js.map +1 -0
  50. package/dist/database/constraints/index.d.ts +12 -0
  51. package/dist/database/constraints/index.d.ts.map +1 -0
  52. package/dist/database/constraints/index.js +9 -0
  53. package/dist/database/constraints/index.js.map +1 -0
  54. package/dist/database/constraints/policies.d.ts +16 -0
  55. package/dist/database/constraints/policies.d.ts.map +1 -0
  56. package/dist/database/constraints/policies.js +17 -0
  57. package/dist/database/constraints/policies.js.map +1 -0
  58. package/dist/database/constraints/ruleset.d.ts +5 -0
  59. package/dist/database/constraints/ruleset.d.ts.map +1 -0
  60. package/dist/database/constraints/ruleset.js +132 -0
  61. package/dist/database/constraints/ruleset.js.map +1 -0
  62. package/dist/database/constraints/schema.d.ts +17 -0
  63. package/dist/database/constraints/schema.d.ts.map +1 -0
  64. package/dist/database/constraints/schema.js +74 -0
  65. package/dist/database/constraints/schema.js.map +1 -0
  66. package/dist/database/constraints/types.d.ts +22 -0
  67. package/dist/database/constraints/types.d.ts.map +1 -0
  68. package/dist/database/constraints/types.js +2 -0
  69. package/dist/database/constraints/types.js.map +1 -0
  70. package/dist/database/crawl/handler.d.ts +7 -0
  71. package/dist/database/crawl/handler.d.ts.map +1 -0
  72. package/dist/database/crawl/handler.js +91 -0
  73. package/dist/database/crawl/handler.js.map +1 -0
  74. package/dist/database/crawl/semaphore.d.ts +9 -0
  75. package/dist/database/crawl/semaphore.d.ts.map +1 -0
  76. package/dist/database/crawl/semaphore.js +27 -0
  77. package/dist/database/crawl/semaphore.js.map +1 -0
  78. package/dist/database/crawl/spec.d.ts +33 -0
  79. package/dist/database/crawl/spec.d.ts.map +1 -0
  80. package/dist/database/crawl/spec.js +12 -0
  81. package/dist/database/crawl/spec.js.map +1 -0
  82. package/dist/database/data/handler.d.ts +9 -0
  83. package/dist/database/data/handler.d.ts.map +1 -0
  84. package/dist/database/data/handler.js +96 -0
  85. package/dist/database/data/handler.js.map +1 -0
  86. package/dist/database/data/spec.d.ts +77 -0
  87. package/dist/database/data/spec.d.ts.map +1 -0
  88. package/dist/database/data/spec.js +17 -0
  89. package/dist/database/data/spec.js.map +1 -0
  90. package/dist/database/data/validated.d.ts +8 -0
  91. package/dist/database/data/validated.d.ts.map +1 -0
  92. package/dist/database/data/validated.js +99 -0
  93. package/dist/database/data/validated.js.map +1 -0
  94. package/dist/database/grammar/RtdbExpr.ohm +98 -0
  95. package/dist/database/grammar/RtdbExpr.ohm.generated.d.ts +2 -0
  96. package/dist/database/grammar/RtdbExpr.ohm.generated.d.ts.map +1 -0
  97. package/dist/database/grammar/RtdbExpr.ohm.generated.js +103 -0
  98. package/dist/database/grammar/RtdbExpr.ohm.generated.js.map +1 -0
  99. package/dist/database/grammar/RtdbExprParser.d.ts +5 -0
  100. package/dist/database/grammar/RtdbExprParser.d.ts.map +1 -0
  101. package/dist/database/grammar/RtdbExprParser.js +53 -0
  102. package/dist/database/grammar/RtdbExprParser.js.map +1 -0
  103. package/dist/database/grammar/linter.d.ts +3 -0
  104. package/dist/database/grammar/linter.d.ts.map +1 -0
  105. package/dist/database/grammar/linter.js +66 -0
  106. package/dist/database/grammar/linter.js.map +1 -0
  107. package/dist/database/grammar/simulator.d.ts +31 -0
  108. package/dist/database/grammar/simulator.d.ts.map +1 -0
  109. package/dist/database/grammar/simulator.js +255 -0
  110. package/dist/database/grammar/simulator.js.map +1 -0
  111. package/dist/database/grammar/validator.d.ts +3 -0
  112. package/dist/database/grammar/validator.d.ts.map +1 -0
  113. package/dist/database/grammar/validator.js +84 -0
  114. package/dist/database/grammar/validator.js.map +1 -0
  115. package/dist/database/host.d.ts +50 -0
  116. package/dist/database/host.d.ts.map +1 -0
  117. package/dist/database/host.js +41 -0
  118. package/dist/database/host.js.map +1 -0
  119. package/dist/database/index.d.ts +40 -0
  120. package/dist/database/index.d.ts.map +1 -0
  121. package/dist/database/index.js +47 -0
  122. package/dist/database/index.js.map +1 -0
  123. package/dist/database/initialize-from-app.d.ts +28 -0
  124. package/dist/database/initialize-from-app.d.ts.map +1 -0
  125. package/dist/database/initialize-from-app.js +23 -0
  126. package/dist/database/initialize-from-app.js.map +1 -0
  127. package/dist/database/ir/handler.d.ts +6 -0
  128. package/dist/database/ir/handler.d.ts.map +1 -0
  129. package/dist/database/ir/handler.js +52 -0
  130. package/dist/database/ir/handler.js.map +1 -0
  131. package/dist/database/ir/spec.d.ts +25 -0
  132. package/dist/database/ir/spec.d.ts.map +1 -0
  133. package/dist/database/ir/spec.js +11 -0
  134. package/dist/database/ir/spec.js.map +1 -0
  135. package/dist/database/mapper.d.ts +9 -0
  136. package/dist/database/mapper.d.ts.map +1 -0
  137. package/dist/database/mapper.js +115 -0
  138. package/dist/database/mapper.js.map +1 -0
  139. package/dist/database/modular.d.ts +604 -0
  140. package/dist/database/modular.d.ts.map +1 -0
  141. package/dist/database/modular.js +1226 -0
  142. package/dist/database/modular.js.map +1 -0
  143. package/dist/database/replay.d.ts +33 -0
  144. package/dist/database/replay.d.ts.map +1 -0
  145. package/dist/database/replay.js +124 -0
  146. package/dist/database/replay.js.map +1 -0
  147. package/dist/database/resolver.d.ts +4 -0
  148. package/dist/database/resolver.d.ts.map +1 -0
  149. package/dist/database/resolver.js +66 -0
  150. package/dist/database/resolver.js.map +1 -0
  151. package/dist/database/sandbox/backend.d.ts +403 -0
  152. package/dist/database/sandbox/backend.d.ts.map +1 -0
  153. package/dist/database/sandbox/backend.js +1467 -0
  154. package/dist/database/sandbox/backend.js.map +1 -0
  155. package/dist/database/sandbox/data-tree.d.ts +123 -0
  156. package/dist/database/sandbox/data-tree.d.ts.map +1 -0
  157. package/dist/database/sandbox/data-tree.js +310 -0
  158. package/dist/database/sandbox/data-tree.js.map +1 -0
  159. package/dist/database/sandbox/normalize.d.ts +77 -0
  160. package/dist/database/sandbox/normalize.d.ts.map +1 -0
  161. package/dist/database/sandbox/normalize.js +165 -0
  162. package/dist/database/sandbox/normalize.js.map +1 -0
  163. package/dist/database/sandbox/push-id.d.ts +32 -0
  164. package/dist/database/sandbox/push-id.d.ts.map +1 -0
  165. package/dist/database/sandbox/push-id.js +82 -0
  166. package/dist/database/sandbox/push-id.js.map +1 -0
  167. package/dist/database/sandbox/query.d.ts +175 -0
  168. package/dist/database/sandbox/query.d.ts.map +1 -0
  169. package/dist/database/sandbox/query.js +269 -0
  170. package/dist/database/sandbox/query.js.map +1 -0
  171. package/dist/database/sandbox/rules-eval.d.ts +69 -0
  172. package/dist/database/sandbox/rules-eval.d.ts.map +1 -0
  173. package/dist/database/sandbox/rules-eval.js +124 -0
  174. package/dist/database/sandbox/rules-eval.js.map +1 -0
  175. package/dist/database/sandbox/sentinels.d.ts +71 -0
  176. package/dist/database/sandbox/sentinels.d.ts.map +1 -0
  177. package/dist/database/sandbox/sentinels.js +92 -0
  178. package/dist/database/sandbox/sentinels.js.map +1 -0
  179. package/dist/database/simulation/handler.d.ts +6 -0
  180. package/dist/database/simulation/handler.d.ts.map +1 -0
  181. package/dist/database/simulation/handler.js +236 -0
  182. package/dist/database/simulation/handler.js.map +1 -0
  183. package/dist/database/simulation/spec.d.ts +69 -0
  184. package/dist/database/simulation/spec.d.ts.map +1 -0
  185. package/dist/database/simulation/spec.js +25 -0
  186. package/dist/database/simulation/spec.js.map +1 -0
  187. package/dist/database/tools.d.ts +22 -0
  188. package/dist/database/tools.d.ts.map +1 -0
  189. package/dist/database/tools.js +272 -0
  190. package/dist/database/tools.js.map +1 -0
  191. package/dist/database/types.d.ts +210 -0
  192. package/dist/database/types.d.ts.map +1 -0
  193. package/dist/database/types.js +26 -0
  194. package/dist/database/types.js.map +1 -0
  195. package/dist/database/write/handler.d.ts +7 -0
  196. package/dist/database/write/handler.d.ts.map +1 -0
  197. package/dist/database/write/handler.js +42 -0
  198. package/dist/database/write/handler.js.map +1 -0
  199. package/dist/database/write/spec.d.ts +18 -0
  200. package/dist/database/write/spec.d.ts.map +1 -0
  201. package/dist/database/write/spec.js +7 -0
  202. package/dist/database/write/spec.js.map +1 -0
  203. package/dist/firestore/index.d.ts +533 -0
  204. package/dist/firestore/index.d.ts.map +1 -0
  205. package/dist/firestore/index.js +1536 -0
  206. package/dist/firestore/index.js.map +1 -0
  207. package/dist/firestore/tools.d.ts +67 -0
  208. package/dist/firestore/tools.d.ts.map +1 -0
  209. package/dist/firestore/tools.js +318 -0
  210. package/dist/firestore/tools.js.map +1 -0
  211. package/dist/firestore-values/index.d.ts +63 -0
  212. package/dist/firestore-values/index.d.ts.map +1 -0
  213. package/dist/firestore-values/index.js +148 -0
  214. package/dist/firestore-values/index.js.map +1 -0
  215. package/dist/project-scope.d.ts +5 -0
  216. package/dist/project-scope.d.ts.map +1 -0
  217. package/dist/project-scope.js +2 -0
  218. package/dist/project-scope.js.map +1 -0
  219. package/dist/rules/extract.d.ts +28 -0
  220. package/dist/rules/extract.d.ts.map +1 -0
  221. package/dist/rules/extract.js +25 -0
  222. package/dist/rules/extract.js.map +1 -0
  223. package/dist/rules/generators/assembler.d.ts +19 -0
  224. package/dist/rules/generators/assembler.d.ts.map +1 -0
  225. package/dist/rules/generators/assembler.js +292 -0
  226. package/dist/rules/generators/assembler.js.map +1 -0
  227. package/dist/rules/generators/expressions.d.ts +52 -0
  228. package/dist/rules/generators/expressions.d.ts.map +1 -0
  229. package/dist/rules/generators/expressions.js +117 -0
  230. package/dist/rules/generators/expressions.js.map +1 -0
  231. package/dist/rules/generators/grid.d.ts +22 -0
  232. package/dist/rules/generators/grid.d.ts.map +1 -0
  233. package/dist/rules/generators/grid.js +52 -0
  234. package/dist/rules/generators/grid.js.map +1 -0
  235. package/dist/rules/grammar/FirestoreAST.d.ts +129 -0
  236. package/dist/rules/grammar/FirestoreAST.d.ts.map +1 -0
  237. package/dist/rules/grammar/FirestoreAST.js +3 -0
  238. package/dist/rules/grammar/FirestoreAST.js.map +1 -0
  239. package/dist/rules/grammar/FirestoreAssembler.d.ts +5 -0
  240. package/dist/rules/grammar/FirestoreAssembler.d.ts.map +1 -0
  241. package/dist/rules/grammar/FirestoreAssembler.js +158 -0
  242. package/dist/rules/grammar/FirestoreAssembler.js.map +1 -0
  243. package/dist/rules/grammar/FirestoreParser.d.ts +46 -0
  244. package/dist/rules/grammar/FirestoreParser.d.ts.map +1 -0
  245. package/dist/rules/grammar/FirestoreParser.js +409 -0
  246. package/dist/rules/grammar/FirestoreParser.js.map +1 -0
  247. package/dist/rules/grammar/FirestoreRules.ohm +229 -0
  248. package/dist/rules/grammar/FirestoreRules.ohm.generated.d.ts +2 -0
  249. package/dist/rules/grammar/FirestoreRules.ohm.generated.d.ts.map +1 -0
  250. package/dist/rules/grammar/FirestoreRules.ohm.generated.js +234 -0
  251. package/dist/rules/grammar/FirestoreRules.ohm.generated.js.map +1 -0
  252. package/dist/rules/grammar/FirestoreValidator.d.ts +10 -0
  253. package/dist/rules/grammar/FirestoreValidator.d.ts.map +1 -0
  254. package/dist/rules/grammar/FirestoreValidator.js +482 -0
  255. package/dist/rules/grammar/FirestoreValidator.js.map +1 -0
  256. package/dist/rules/index.d.ts +67 -0
  257. package/dist/rules/index.d.ts.map +1 -0
  258. package/dist/rules/index.js +80 -0
  259. package/dist/rules/index.js.map +1 -0
  260. package/dist/rules/indexes/extract/annotation-collect.d.ts +42 -0
  261. package/dist/rules/indexes/extract/annotation-collect.d.ts.map +1 -0
  262. package/dist/rules/indexes/extract/annotation-collect.js +69 -0
  263. package/dist/rules/indexes/extract/annotation-collect.js.map +1 -0
  264. package/dist/rules/indexes/extract/annotations.d.ts +50 -0
  265. package/dist/rules/indexes/extract/annotations.d.ts.map +1 -0
  266. package/dist/rules/indexes/extract/annotations.js +144 -0
  267. package/dist/rules/indexes/extract/annotations.js.map +1 -0
  268. package/dist/rules/indexes/extract/ast.d.ts +54 -0
  269. package/dist/rules/indexes/extract/ast.d.ts.map +1 -0
  270. package/dist/rules/indexes/extract/ast.js +119 -0
  271. package/dist/rules/indexes/extract/ast.js.map +1 -0
  272. package/dist/rules/indexes/extract/classify.d.ts +41 -0
  273. package/dist/rules/indexes/extract/classify.d.ts.map +1 -0
  274. package/dist/rules/indexes/extract/classify.js +138 -0
  275. package/dist/rules/indexes/extract/classify.js.map +1 -0
  276. package/dist/rules/indexes/extract/composite.d.ts +38 -0
  277. package/dist/rules/indexes/extract/composite.d.ts.map +1 -0
  278. package/dist/rules/indexes/extract/composite.js +85 -0
  279. package/dist/rules/indexes/extract/composite.js.map +1 -0
  280. package/dist/rules/indexes/extract/dataflow.d.ts +45 -0
  281. package/dist/rules/indexes/extract/dataflow.d.ts.map +1 -0
  282. package/dist/rules/indexes/extract/dataflow.js +200 -0
  283. package/dist/rules/indexes/extract/dataflow.js.map +1 -0
  284. package/dist/rules/indexes/extract/enumerate.d.ts +41 -0
  285. package/dist/rules/indexes/extract/enumerate.d.ts.map +1 -0
  286. package/dist/rules/indexes/extract/enumerate.js +163 -0
  287. package/dist/rules/indexes/extract/enumerate.js.map +1 -0
  288. package/dist/rules/indexes/extract/extractor.d.ts +3 -0
  289. package/dist/rules/indexes/extract/extractor.d.ts.map +1 -0
  290. package/dist/rules/indexes/extract/extractor.js +274 -0
  291. package/dist/rules/indexes/extract/extractor.js.map +1 -0
  292. package/dist/rules/indexes/extract/types.d.ts +211 -0
  293. package/dist/rules/indexes/extract/types.d.ts.map +1 -0
  294. package/dist/rules/indexes/extract/types.js +14 -0
  295. package/dist/rules/indexes/extract/types.js.map +1 -0
  296. package/dist/rules/indexes/extractHandler.d.ts +16 -0
  297. package/dist/rules/indexes/extractHandler.d.ts.map +1 -0
  298. package/dist/rules/indexes/extractHandler.js +100 -0
  299. package/dist/rules/indexes/extractHandler.js.map +1 -0
  300. package/dist/rules/indexes/extractTool.d.ts +15 -0
  301. package/dist/rules/indexes/extractTool.d.ts.map +1 -0
  302. package/dist/rules/indexes/extractTool.js +55 -0
  303. package/dist/rules/indexes/extractTool.js.map +1 -0
  304. package/dist/rules/indexes/types.d.ts +71 -0
  305. package/dist/rules/indexes/types.d.ts.map +1 -0
  306. package/dist/rules/indexes/types.js +15 -0
  307. package/dist/rules/indexes/types.js.map +1 -0
  308. package/dist/rules/inspect/handler.d.ts +6 -0
  309. package/dist/rules/inspect/handler.d.ts.map +1 -0
  310. package/dist/rules/inspect/handler.js +144 -0
  311. package/dist/rules/inspect/handler.js.map +1 -0
  312. package/dist/rules/inspect/spec.d.ts +37 -0
  313. package/dist/rules/inspect/spec.d.ts.map +1 -0
  314. package/dist/rules/inspect/spec.js +2 -0
  315. package/dist/rules/inspect/spec.js.map +1 -0
  316. package/dist/rules/inspect/tools.d.ts +21 -0
  317. package/dist/rules/inspect/tools.d.ts.map +1 -0
  318. package/dist/rules/inspect/tools.js +21 -0
  319. package/dist/rules/inspect/tools.js.map +1 -0
  320. package/dist/rules/linter/ast-utils.d.ts +97 -0
  321. package/dist/rules/linter/ast-utils.d.ts.map +1 -0
  322. package/dist/rules/linter/ast-utils.js +491 -0
  323. package/dist/rules/linter/ast-utils.js.map +1 -0
  324. package/dist/rules/linter/hallucinations.d.ts +34 -0
  325. package/dist/rules/linter/hallucinations.d.ts.map +1 -0
  326. package/dist/rules/linter/hallucinations.js +334 -0
  327. package/dist/rules/linter/hallucinations.js.map +1 -0
  328. package/dist/rules/linter/linter.d.ts +84 -0
  329. package/dist/rules/linter/linter.d.ts.map +1 -0
  330. package/dist/rules/linter/linter.js +784 -0
  331. package/dist/rules/linter/linter.js.map +1 -0
  332. package/dist/rules/modules/resolver-browser.d.ts +41 -0
  333. package/dist/rules/modules/resolver-browser.d.ts.map +1 -0
  334. package/dist/rules/modules/resolver-browser.js +63 -0
  335. package/dist/rules/modules/resolver-browser.js.map +1 -0
  336. package/dist/rules/modules/resolver-core.d.ts +51 -0
  337. package/dist/rules/modules/resolver-core.d.ts.map +1 -0
  338. package/dist/rules/modules/resolver-core.js +338 -0
  339. package/dist/rules/modules/resolver-core.js.map +1 -0
  340. package/dist/rules/modules/resolver.d.ts +17 -0
  341. package/dist/rules/modules/resolver.d.ts.map +1 -0
  342. package/dist/rules/modules/resolver.js +49 -0
  343. package/dist/rules/modules/resolver.js.map +1 -0
  344. package/dist/rules/modules/stdlib/atomic.rules +52 -0
  345. package/dist/rules/modules/stdlib/atomic.test.json +152 -0
  346. package/dist/rules/modules/stdlib/auth.rules +7 -0
  347. package/dist/rules/modules/stdlib/auth.test.json +53 -0
  348. package/dist/rules/modules/stdlib/content.rules +50 -0
  349. package/dist/rules/modules/stdlib/content.test.json +238 -0
  350. package/dist/rules/modules/stdlib/counters.rules +41 -0
  351. package/dist/rules/modules/stdlib/counters.test.json +254 -0
  352. package/dist/rules/modules/stdlib/geometry.rules +43 -0
  353. package/dist/rules/modules/stdlib/geometry.test.json +200 -0
  354. package/dist/rules/modules/stdlib/joining.rules +49 -0
  355. package/dist/rules/modules/stdlib/joining.test.json +287 -0
  356. package/dist/rules/modules/stdlib/lifecycle.rules +51 -0
  357. package/dist/rules/modules/stdlib/lifecycle.test.json +288 -0
  358. package/dist/rules/modules/stdlib/lobby.rules +44 -0
  359. package/dist/rules/modules/stdlib/lobby.test.json +32 -0
  360. package/dist/rules/modules/stdlib/membership.rules +40 -0
  361. package/dist/rules/modules/stdlib/membership.test.json +107 -0
  362. package/dist/rules/modules/stdlib/spaces.rules +46 -0
  363. package/dist/rules/modules/stdlib/spaces.test.json +392 -0
  364. package/dist/rules/modules/stdlib/state.rules +28 -0
  365. package/dist/rules/modules/stdlib/state.test.json +55 -0
  366. package/dist/rules/modules/stdlib/timing.rules +20 -0
  367. package/dist/rules/modules/stdlib/timing.test.json +106 -0
  368. package/dist/rules/modules/stdlib/transitions.rules +34 -0
  369. package/dist/rules/modules/stdlib/transitions.test.json +86 -0
  370. package/dist/rules/modules/stdlib/turns.rules +27 -0
  371. package/dist/rules/modules/stdlib/turns.test.json +64 -0
  372. package/dist/rules/modules/stdlib/validation.rules +31 -0
  373. package/dist/rules/modules/stdlib/validation.test.json +184 -0
  374. package/dist/rules/modules/stdlib-content.d.ts +11 -0
  375. package/dist/rules/modules/stdlib-content.d.ts.map +1 -0
  376. package/dist/rules/modules/stdlib-content.js +590 -0
  377. package/dist/rules/modules/stdlib-content.js.map +1 -0
  378. package/dist/rules/node.d.ts +17 -0
  379. package/dist/rules/node.d.ts.map +1 -0
  380. package/dist/rules/node.js +21 -0
  381. package/dist/rules/node.js.map +1 -0
  382. package/dist/rules/rtdb.d.ts +28 -0
  383. package/dist/rules/rtdb.d.ts.map +1 -0
  384. package/dist/rules/rtdb.js +15 -0
  385. package/dist/rules/rtdb.js.map +1 -0
  386. package/dist/rules/simulator/evaluator.d.ts +179 -0
  387. package/dist/rules/simulator/evaluator.d.ts.map +1 -0
  388. package/dist/rules/simulator/evaluator.js +1221 -0
  389. package/dist/rules/simulator/evaluator.js.map +1 -0
  390. package/dist/rules/simulator/expression/eval-errors.d.ts +86 -0
  391. package/dist/rules/simulator/expression/eval-errors.d.ts.map +1 -0
  392. package/dist/rules/simulator/expression/eval-errors.js +68 -0
  393. package/dist/rules/simulator/expression/eval-errors.js.map +1 -0
  394. package/dist/rules/simulator/expression/evaluator.d.ts +43 -0
  395. package/dist/rules/simulator/expression/evaluator.d.ts.map +1 -0
  396. package/dist/rules/simulator/expression/evaluator.js +298 -0
  397. package/dist/rules/simulator/expression/evaluator.js.map +1 -0
  398. package/dist/rules/simulator/expression/lexer.d.ts +36 -0
  399. package/dist/rules/simulator/expression/lexer.d.ts.map +1 -0
  400. package/dist/rules/simulator/expression/lexer.js +318 -0
  401. package/dist/rules/simulator/expression/lexer.js.map +1 -0
  402. package/dist/rules/simulator/expression/parser.d.ts +39 -0
  403. package/dist/rules/simulator/expression/parser.d.ts.map +1 -0
  404. package/dist/rules/simulator/expression/parser.js +329 -0
  405. package/dist/rules/simulator/expression/parser.js.map +1 -0
  406. package/dist/rules/simulator/expression/types.d.ts +137 -0
  407. package/dist/rules/simulator/expression/types.d.ts.map +1 -0
  408. package/dist/rules/simulator/expression/types.js +90 -0
  409. package/dist/rules/simulator/expression/types.js.map +1 -0
  410. package/dist/rules/simulator/expression/walk-data.d.ts +52 -0
  411. package/dist/rules/simulator/expression/walk-data.d.ts.map +1 -0
  412. package/dist/rules/simulator/expression/walk-data.js +167 -0
  413. package/dist/rules/simulator/expression/walk-data.js.map +1 -0
  414. package/dist/rules/simulator/firestore-set.d.ts +25 -0
  415. package/dist/rules/simulator/firestore-set.d.ts.map +1 -0
  416. package/dist/rules/simulator/firestore-set.js +89 -0
  417. package/dist/rules/simulator/firestore-set.js.map +1 -0
  418. package/dist/rules/simulator/handler.d.ts +36 -0
  419. package/dist/rules/simulator/handler.d.ts.map +1 -0
  420. package/dist/rules/simulator/handler.js +583 -0
  421. package/dist/rules/simulator/handler.js.map +1 -0
  422. package/dist/rules/simulator/mapdiff.d.ts +29 -0
  423. package/dist/rules/simulator/mapdiff.d.ts.map +1 -0
  424. package/dist/rules/simulator/mapdiff.js +72 -0
  425. package/dist/rules/simulator/mapdiff.js.map +1 -0
  426. package/dist/rules/simulator/project-after-state.d.ts +33 -0
  427. package/dist/rules/simulator/project-after-state.d.ts.map +1 -0
  428. package/dist/rules/simulator/project-after-state.js +88 -0
  429. package/dist/rules/simulator/project-after-state.js.map +1 -0
  430. package/dist/rules/simulator/query-proof.d.ts +80 -0
  431. package/dist/rules/simulator/query-proof.d.ts.map +1 -0
  432. package/dist/rules/simulator/query-proof.js +142 -0
  433. package/dist/rules/simulator/query-proof.js.map +1 -0
  434. package/dist/rules/simulator/value-equality.d.ts +8 -0
  435. package/dist/rules/simulator/value-equality.d.ts.map +1 -0
  436. package/dist/rules/simulator/value-equality.js +40 -0
  437. package/dist/rules/simulator/value-equality.js.map +1 -0
  438. package/dist/rules/simulator/wrappers/base.d.ts +129 -0
  439. package/dist/rules/simulator/wrappers/base.d.ts.map +1 -0
  440. package/dist/rules/simulator/wrappers/base.js +90 -0
  441. package/dist/rules/simulator/wrappers/base.js.map +1 -0
  442. package/dist/rules/simulator/wrappers/bytes.d.ts +45 -0
  443. package/dist/rules/simulator/wrappers/bytes.d.ts.map +1 -0
  444. package/dist/rules/simulator/wrappers/bytes.js +130 -0
  445. package/dist/rules/simulator/wrappers/bytes.js.map +1 -0
  446. package/dist/rules/simulator/wrappers/duration.d.ts +76 -0
  447. package/dist/rules/simulator/wrappers/duration.d.ts.map +1 -0
  448. package/dist/rules/simulator/wrappers/duration.js +176 -0
  449. package/dist/rules/simulator/wrappers/duration.js.map +1 -0
  450. package/dist/rules/simulator/wrappers/float.d.ts +52 -0
  451. package/dist/rules/simulator/wrappers/float.d.ts.map +1 -0
  452. package/dist/rules/simulator/wrappers/float.js +88 -0
  453. package/dist/rules/simulator/wrappers/float.js.map +1 -0
  454. package/dist/rules/simulator/wrappers/latlng.d.ts +40 -0
  455. package/dist/rules/simulator/wrappers/latlng.d.ts.map +1 -0
  456. package/dist/rules/simulator/wrappers/latlng.js +100 -0
  457. package/dist/rules/simulator/wrappers/latlng.js.map +1 -0
  458. package/dist/rules/simulator/wrappers/path.d.ts +75 -0
  459. package/dist/rules/simulator/wrappers/path.d.ts.map +1 -0
  460. package/dist/rules/simulator/wrappers/path.js +158 -0
  461. package/dist/rules/simulator/wrappers/path.js.map +1 -0
  462. package/dist/rules/simulator/wrappers/reference.d.ts +82 -0
  463. package/dist/rules/simulator/wrappers/reference.d.ts.map +1 -0
  464. package/dist/rules/simulator/wrappers/reference.js +145 -0
  465. package/dist/rules/simulator/wrappers/reference.js.map +1 -0
  466. package/dist/rules/simulator/wrappers/timestamp.d.ts +86 -0
  467. package/dist/rules/simulator/wrappers/timestamp.d.ts.map +1 -0
  468. package/dist/rules/simulator/wrappers/timestamp.js +207 -0
  469. package/dist/rules/simulator/wrappers/timestamp.js.map +1 -0
  470. package/dist/rules/simulator/wrappers/vector.d.ts +43 -0
  471. package/dist/rules/simulator/wrappers/vector.d.ts.map +1 -0
  472. package/dist/rules/simulator/wrappers/vector.js +80 -0
  473. package/dist/rules/simulator/wrappers/vector.js.map +1 -0
  474. package/dist/rules/simulator-tools-impl.d.ts +64 -0
  475. package/dist/rules/simulator-tools-impl.d.ts.map +1 -0
  476. package/dist/rules/simulator-tools-impl.js +462 -0
  477. package/dist/rules/simulator-tools-impl.js.map +1 -0
  478. package/dist/rules/simulator.d.ts +20 -0
  479. package/dist/rules/simulator.d.ts.map +1 -0
  480. package/dist/rules/simulator.js +24 -0
  481. package/dist/rules/simulator.js.map +1 -0
  482. package/dist/rules/stdlib-modules.d.ts +73 -0
  483. package/dist/rules/stdlib-modules.d.ts.map +1 -0
  484. package/dist/rules/stdlib-modules.js +849 -0
  485. package/dist/rules/stdlib-modules.js.map +1 -0
  486. package/dist/rules/stdlib-tools.d.ts +19 -0
  487. package/dist/rules/stdlib-tools.d.ts.map +1 -0
  488. package/dist/rules/stdlib-tools.js +164 -0
  489. package/dist/rules/stdlib-tools.js.map +1 -0
  490. package/dist/rules/test/handler.d.ts +9 -0
  491. package/dist/rules/test/handler.d.ts.map +1 -0
  492. package/dist/rules/test/handler.js +124 -0
  493. package/dist/rules/test/handler.js.map +1 -0
  494. package/dist/rules/test/spec.d.ts +517 -0
  495. package/dist/rules/test/spec.d.ts.map +1 -0
  496. package/dist/rules/test/spec.js +227 -0
  497. package/dist/rules/test/spec.js.map +1 -0
  498. package/dist/rules/tools.d.ts +41 -0
  499. package/dist/rules/tools.d.ts.map +1 -0
  500. package/dist/rules/tools.js +124 -0
  501. package/dist/rules/tools.js.map +1 -0
  502. package/dist/rules/write/handler.d.ts +6 -0
  503. package/dist/rules/write/handler.d.ts.map +1 -0
  504. package/dist/rules/write/handler.js +126 -0
  505. package/dist/rules/write/handler.js.map +1 -0
  506. package/dist/rules/write/spec.d.ts +28 -0
  507. package/dist/rules/write/spec.d.ts.map +1 -0
  508. package/dist/rules/write/spec.js +2 -0
  509. package/dist/rules/write/spec.js.map +1 -0
  510. package/dist/sandbox/admin-compat.d.ts +20 -0
  511. package/dist/sandbox/admin-compat.d.ts.map +1 -0
  512. package/dist/sandbox/admin-compat.js +19 -0
  513. package/dist/sandbox/admin-compat.js.map +1 -0
  514. package/dist/sandbox/admin-firestore/error-translation.d.ts +86 -0
  515. package/dist/sandbox/admin-firestore/error-translation.d.ts.map +1 -0
  516. package/dist/sandbox/admin-firestore/error-translation.js +204 -0
  517. package/dist/sandbox/admin-firestore/error-translation.js.map +1 -0
  518. package/dist/sandbox/admin-firestore/index.d.ts +169 -0
  519. package/dist/sandbox/admin-firestore/index.d.ts.map +1 -0
  520. package/dist/sandbox/admin-firestore/index.js +456 -0
  521. package/dist/sandbox/admin-firestore/index.js.map +1 -0
  522. package/dist/sandbox/admin-firestore/remote.d.ts +97 -0
  523. package/dist/sandbox/admin-firestore/remote.d.ts.map +1 -0
  524. package/dist/sandbox/admin-firestore/remote.js +735 -0
  525. package/dist/sandbox/admin-firestore/remote.js.map +1 -0
  526. package/dist/sandbox/branches/index.d.ts +141 -0
  527. package/dist/sandbox/branches/index.d.ts.map +1 -0
  528. package/dist/sandbox/branches/index.js +327 -0
  529. package/dist/sandbox/branches/index.js.map +1 -0
  530. package/dist/sandbox/firestore/admin-compat/batch.d.ts +34 -0
  531. package/dist/sandbox/firestore/admin-compat/batch.d.ts.map +1 -0
  532. package/dist/sandbox/firestore/admin-compat/batch.js +73 -0
  533. package/dist/sandbox/firestore/admin-compat/batch.js.map +1 -0
  534. package/dist/sandbox/firestore/admin-compat/doc-ref.d.ts +38 -0
  535. package/dist/sandbox/firestore/admin-compat/doc-ref.d.ts.map +1 -0
  536. package/dist/sandbox/firestore/admin-compat/doc-ref.js +154 -0
  537. package/dist/sandbox/firestore/admin-compat/doc-ref.js.map +1 -0
  538. package/dist/sandbox/firestore/admin-compat/firestore.d.ts +45 -0
  539. package/dist/sandbox/firestore/admin-compat/firestore.d.ts.map +1 -0
  540. package/dist/sandbox/firestore/admin-compat/firestore.js +114 -0
  541. package/dist/sandbox/firestore/admin-compat/firestore.js.map +1 -0
  542. package/dist/sandbox/firestore/admin-compat/index.d.ts +45 -0
  543. package/dist/sandbox/firestore/admin-compat/index.d.ts.map +1 -0
  544. package/dist/sandbox/firestore/admin-compat/index.js +27 -0
  545. package/dist/sandbox/firestore/admin-compat/index.js.map +1 -0
  546. package/dist/sandbox/firestore/admin-compat/paths.d.ts +37 -0
  547. package/dist/sandbox/firestore/admin-compat/paths.d.ts.map +1 -0
  548. package/dist/sandbox/firestore/admin-compat/paths.js +49 -0
  549. package/dist/sandbox/firestore/admin-compat/paths.js.map +1 -0
  550. package/dist/sandbox/firestore/admin-compat/query.d.ts +261 -0
  551. package/dist/sandbox/firestore/admin-compat/query.d.ts.map +1 -0
  552. package/dist/sandbox/firestore/admin-compat/query.js +704 -0
  553. package/dist/sandbox/firestore/admin-compat/query.js.map +1 -0
  554. package/dist/sandbox/firestore/admin-compat/read-translation.d.ts +8 -0
  555. package/dist/sandbox/firestore/admin-compat/read-translation.d.ts.map +1 -0
  556. package/dist/sandbox/firestore/admin-compat/read-translation.js +59 -0
  557. package/dist/sandbox/firestore/admin-compat/read-translation.js.map +1 -0
  558. package/dist/sandbox/firestore/admin-compat/snapshots.d.ts +39 -0
  559. package/dist/sandbox/firestore/admin-compat/snapshots.d.ts.map +1 -0
  560. package/dist/sandbox/firestore/admin-compat/snapshots.js +50 -0
  561. package/dist/sandbox/firestore/admin-compat/snapshots.js.map +1 -0
  562. package/dist/sandbox/firestore/admin-compat/transaction.d.ts +35 -0
  563. package/dist/sandbox/firestore/admin-compat/transaction.d.ts.map +1 -0
  564. package/dist/sandbox/firestore/admin-compat/transaction.js +88 -0
  565. package/dist/sandbox/firestore/admin-compat/transaction.js.map +1 -0
  566. package/dist/sandbox/firestore/admin-compat/types.d.ts +297 -0
  567. package/dist/sandbox/firestore/admin-compat/types.d.ts.map +1 -0
  568. package/dist/sandbox/firestore/admin-compat/types.js +127 -0
  569. package/dist/sandbox/firestore/admin-compat/types.js.map +1 -0
  570. package/dist/sandbox/firestore/admin-compat/value-order.d.ts +49 -0
  571. package/dist/sandbox/firestore/admin-compat/value-order.d.ts.map +1 -0
  572. package/dist/sandbox/firestore/admin-compat/value-order.js +172 -0
  573. package/dist/sandbox/firestore/admin-compat/value-order.js.map +1 -0
  574. package/dist/sandbox/firestore/auto-id.d.ts +26 -0
  575. package/dist/sandbox/firestore/auto-id.d.ts.map +1 -0
  576. package/dist/sandbox/firestore/auto-id.js +36 -0
  577. package/dist/sandbox/firestore/auto-id.js.map +1 -0
  578. package/dist/sandbox/firestore/converters/bytes-geopoint.d.ts +48 -0
  579. package/dist/sandbox/firestore/converters/bytes-geopoint.d.ts.map +1 -0
  580. package/dist/sandbox/firestore/converters/bytes-geopoint.js +85 -0
  581. package/dist/sandbox/firestore/converters/bytes-geopoint.js.map +1 -0
  582. package/dist/sandbox/firestore/converters/fieldvalue.d.ts +69 -0
  583. package/dist/sandbox/firestore/converters/fieldvalue.d.ts.map +1 -0
  584. package/dist/sandbox/firestore/converters/fieldvalue.js +166 -0
  585. package/dist/sandbox/firestore/converters/fieldvalue.js.map +1 -0
  586. package/dist/sandbox/firestore/converters/reference.d.ts +31 -0
  587. package/dist/sandbox/firestore/converters/reference.d.ts.map +1 -0
  588. package/dist/sandbox/firestore/converters/reference.js +51 -0
  589. package/dist/sandbox/firestore/converters/reference.js.map +1 -0
  590. package/dist/sandbox/firestore/converters/timestamp.d.ts +32 -0
  591. package/dist/sandbox/firestore/converters/timestamp.d.ts.map +1 -0
  592. package/dist/sandbox/firestore/converters/timestamp.js +63 -0
  593. package/dist/sandbox/firestore/converters/timestamp.js.map +1 -0
  594. package/dist/sandbox/firestore/converters/user-timestamp.d.ts +46 -0
  595. package/dist/sandbox/firestore/converters/user-timestamp.d.ts.map +1 -0
  596. package/dist/sandbox/firestore/converters/user-timestamp.js +65 -0
  597. package/dist/sandbox/firestore/converters/user-timestamp.js.map +1 -0
  598. package/dist/sandbox/firestore/converters/vector.d.ts +24 -0
  599. package/dist/sandbox/firestore/converters/vector.d.ts.map +1 -0
  600. package/dist/sandbox/firestore/converters/vector.js +53 -0
  601. package/dist/sandbox/firestore/converters/vector.js.map +1 -0
  602. package/dist/sandbox/firestore/errors.d.ts +82 -0
  603. package/dist/sandbox/firestore/errors.d.ts.map +1 -0
  604. package/dist/sandbox/firestore/errors.js +54 -0
  605. package/dist/sandbox/firestore/errors.js.map +1 -0
  606. package/dist/sandbox/firestore/event-log.d.ts +99 -0
  607. package/dist/sandbox/firestore/event-log.d.ts.map +1 -0
  608. package/dist/sandbox/firestore/event-log.js +67 -0
  609. package/dist/sandbox/firestore/event-log.js.map +1 -0
  610. package/dist/sandbox/firestore/field-merge.d.ts +64 -0
  611. package/dist/sandbox/firestore/field-merge.d.ts.map +1 -0
  612. package/dist/sandbox/firestore/field-merge.js +221 -0
  613. package/dist/sandbox/firestore/field-merge.js.map +1 -0
  614. package/dist/sandbox/firestore/list-query-proof.d.ts +77 -0
  615. package/dist/sandbox/firestore/list-query-proof.d.ts.map +1 -0
  616. package/dist/sandbox/firestore/list-query-proof.js +170 -0
  617. package/dist/sandbox/firestore/list-query-proof.js.map +1 -0
  618. package/dist/sandbox/firestore/local-environment.d.ts +806 -0
  619. package/dist/sandbox/firestore/local-environment.d.ts.map +1 -0
  620. package/dist/sandbox/firestore/local-environment.js +3028 -0
  621. package/dist/sandbox/firestore/local-environment.js.map +1 -0
  622. package/dist/sandbox/firestore/local-state.d.ts +196 -0
  623. package/dist/sandbox/firestore/local-state.d.ts.map +1 -0
  624. package/dist/sandbox/firestore/local-state.js +413 -0
  625. package/dist/sandbox/firestore/local-state.js.map +1 -0
  626. package/dist/sandbox/firestore/overlay-backing.d.ts +44 -0
  627. package/dist/sandbox/firestore/overlay-backing.d.ts.map +1 -0
  628. package/dist/sandbox/firestore/overlay-backing.js +82 -0
  629. package/dist/sandbox/firestore/overlay-backing.js.map +1 -0
  630. package/dist/sandbox/firestore/sentinel-capture.d.ts +30 -0
  631. package/dist/sandbox/firestore/sentinel-capture.d.ts.map +1 -0
  632. package/dist/sandbox/firestore/sentinel-capture.js +61 -0
  633. package/dist/sandbox/firestore/sentinel-capture.js.map +1 -0
  634. package/dist/sandbox/firestore/snapshot-listeners.d.ts +284 -0
  635. package/dist/sandbox/firestore/snapshot-listeners.d.ts.map +1 -0
  636. package/dist/sandbox/firestore/snapshot-listeners.js +194 -0
  637. package/dist/sandbox/firestore/snapshot-listeners.js.map +1 -0
  638. package/dist/sandbox/firestore/topk.d.ts +12 -0
  639. package/dist/sandbox/firestore/topk.d.ts.map +1 -0
  640. package/dist/sandbox/firestore/topk.js +42 -0
  641. package/dist/sandbox/firestore/topk.js.map +1 -0
  642. package/dist/sandbox/firestore/transaction-merge.d.ts +55 -0
  643. package/dist/sandbox/firestore/transaction-merge.d.ts.map +1 -0
  644. package/dist/sandbox/firestore/transaction-merge.js +107 -0
  645. package/dist/sandbox/firestore/transaction-merge.js.map +1 -0
  646. package/dist/sandbox/firestore/transaction-types.d.ts +152 -0
  647. package/dist/sandbox/firestore/transaction-types.d.ts.map +1 -0
  648. package/dist/sandbox/firestore/transaction-types.js +10 -0
  649. package/dist/sandbox/firestore/transaction-types.js.map +1 -0
  650. package/dist/sandbox/firestore/transaction.d.ts +79 -0
  651. package/dist/sandbox/firestore/transaction.d.ts.map +1 -0
  652. package/dist/sandbox/firestore/transaction.js +95 -0
  653. package/dist/sandbox/firestore/transaction.js.map +1 -0
  654. package/dist/sandbox/firestore/value-equality.d.ts +2 -0
  655. package/dist/sandbox/firestore/value-equality.d.ts.map +1 -0
  656. package/dist/sandbox/firestore/value-equality.js +35 -0
  657. package/dist/sandbox/firestore/value-equality.js.map +1 -0
  658. package/dist/sandbox/firestore/value-resolver.d.ts +172 -0
  659. package/dist/sandbox/firestore/value-resolver.d.ts.map +1 -0
  660. package/dist/sandbox/firestore/value-resolver.js +221 -0
  661. package/dist/sandbox/firestore/value-resolver.js.map +1 -0
  662. package/dist/sandbox/firestore/wire-encoder.d.ts +14 -0
  663. package/dist/sandbox/firestore/wire-encoder.d.ts.map +1 -0
  664. package/dist/sandbox/firestore/wire-encoder.js +130 -0
  665. package/dist/sandbox/firestore/wire-encoder.js.map +1 -0
  666. package/dist/sandbox/index.d.ts +50 -0
  667. package/dist/sandbox/index.d.ts.map +1 -0
  668. package/dist/sandbox/index.js +63 -0
  669. package/dist/sandbox/index.js.map +1 -0
  670. package/dist/sandbox/internal/index.d.ts +36 -0
  671. package/dist/sandbox/internal/index.d.ts.map +1 -0
  672. package/dist/sandbox/internal/index.js +72 -0
  673. package/dist/sandbox/internal/index.js.map +1 -0
  674. package/dist/sandbox/internal/sandbox-impl.d.ts +343 -0
  675. package/dist/sandbox/internal/sandbox-impl.d.ts.map +1 -0
  676. package/dist/sandbox/internal/sandbox-impl.js +718 -0
  677. package/dist/sandbox/internal/sandbox-impl.js.map +1 -0
  678. package/dist/sandbox/persistence/backends.d.ts +37 -0
  679. package/dist/sandbox/persistence/backends.d.ts.map +1 -0
  680. package/dist/sandbox/persistence/backends.js +202 -0
  681. package/dist/sandbox/persistence/backends.js.map +1 -0
  682. package/dist/sandbox/persistence/chunk-format.d.ts +58 -0
  683. package/dist/sandbox/persistence/chunk-format.d.ts.map +1 -0
  684. package/dist/sandbox/persistence/chunk-format.js +163 -0
  685. package/dist/sandbox/persistence/chunk-format.js.map +1 -0
  686. package/dist/sandbox/persistence/controller.d.ts +39 -0
  687. package/dist/sandbox/persistence/controller.d.ts.map +1 -0
  688. package/dist/sandbox/persistence/controller.js +605 -0
  689. package/dist/sandbox/persistence/controller.js.map +1 -0
  690. package/dist/sandbox/persistence/index.d.ts +13 -0
  691. package/dist/sandbox/persistence/index.d.ts.map +1 -0
  692. package/dist/sandbox/persistence/index.js +5 -0
  693. package/dist/sandbox/persistence/index.js.map +1 -0
  694. package/dist/sandbox/persistence/serialize.d.ts +53 -0
  695. package/dist/sandbox/persistence/serialize.d.ts.map +1 -0
  696. package/dist/sandbox/persistence/serialize.js +98 -0
  697. package/dist/sandbox/persistence/serialize.js.map +1 -0
  698. package/dist/sandbox/persistence/types.d.ts +118 -0
  699. package/dist/sandbox/persistence/types.d.ts.map +1 -0
  700. package/dist/sandbox/persistence/types.js +15 -0
  701. package/dist/sandbox/persistence/types.js.map +1 -0
  702. package/dist/sandbox/remote.d.ts +118 -0
  703. package/dist/sandbox/remote.d.ts.map +1 -0
  704. package/dist/sandbox/remote.js +60 -0
  705. package/dist/sandbox/remote.js.map +1 -0
  706. package/dist/sandbox/replay/index.d.ts +106 -0
  707. package/dist/sandbox/replay/index.d.ts.map +1 -0
  708. package/dist/sandbox/replay/index.js +246 -0
  709. package/dist/sandbox/replay/index.js.map +1 -0
  710. package/dist/sandbox/sandbox-context.d.ts +40 -0
  711. package/dist/sandbox/sandbox-context.d.ts.map +1 -0
  712. package/dist/sandbox/sandbox-context.js +72 -0
  713. package/dist/sandbox/sandbox-context.js.map +1 -0
  714. package/dist/sandbox/tab-sync/index.d.ts +120 -0
  715. package/dist/sandbox/tab-sync/index.d.ts.map +1 -0
  716. package/dist/sandbox/tab-sync/index.js +272 -0
  717. package/dist/sandbox/tab-sync/index.js.map +1 -0
  718. package/dist/sandbox/types.d.ts +1235 -0
  719. package/dist/sandbox/types.d.ts.map +1 -0
  720. package/dist/sandbox/types.js +46 -0
  721. package/dist/sandbox/types.js.map +1 -0
  722. package/dist/storage/admin/api.d.ts +206 -0
  723. package/dist/storage/admin/api.d.ts.map +1 -0
  724. package/dist/storage/admin/api.js +349 -0
  725. package/dist/storage/admin/api.js.map +1 -0
  726. package/dist/storage/admin/handler.d.ts +29 -0
  727. package/dist/storage/admin/handler.d.ts.map +1 -0
  728. package/dist/storage/admin/handler.js +82 -0
  729. package/dist/storage/admin/handler.js.map +1 -0
  730. package/dist/storage/admin/spec.d.ts +64 -0
  731. package/dist/storage/admin/spec.d.ts.map +1 -0
  732. package/dist/storage/admin/spec.js +8 -0
  733. package/dist/storage/admin/spec.js.map +1 -0
  734. package/dist/storage/admin/tools.d.ts +23 -0
  735. package/dist/storage/admin/tools.d.ts.map +1 -0
  736. package/dist/storage/admin/tools.js +90 -0
  737. package/dist/storage/admin/tools.js.map +1 -0
  738. package/dist/storage/download.d.ts +27 -0
  739. package/dist/storage/download.d.ts.map +1 -0
  740. package/dist/storage/download.js +136 -0
  741. package/dist/storage/download.js.map +1 -0
  742. package/dist/storage/enforce.d.ts +26 -0
  743. package/dist/storage/enforce.d.ts.map +1 -0
  744. package/dist/storage/enforce.js +16 -0
  745. package/dist/storage/enforce.js.map +1 -0
  746. package/dist/storage/errors.d.ts +46 -0
  747. package/dist/storage/errors.d.ts.map +1 -0
  748. package/dist/storage/errors.js +62 -0
  749. package/dist/storage/errors.js.map +1 -0
  750. package/dist/storage/index.d.ts +49 -0
  751. package/dist/storage/index.d.ts.map +1 -0
  752. package/dist/storage/index.js +60 -0
  753. package/dist/storage/index.js.map +1 -0
  754. package/dist/storage/internal.d.ts +18 -0
  755. package/dist/storage/internal.d.ts.map +1 -0
  756. package/dist/storage/internal.js +18 -0
  757. package/dist/storage/internal.js.map +1 -0
  758. package/dist/storage/list.d.ts +17 -0
  759. package/dist/storage/list.d.ts.map +1 -0
  760. package/dist/storage/list.js +91 -0
  761. package/dist/storage/list.js.map +1 -0
  762. package/dist/storage/metadata.d.ts +86 -0
  763. package/dist/storage/metadata.d.ts.map +1 -0
  764. package/dist/storage/metadata.js +167 -0
  765. package/dist/storage/metadata.js.map +1 -0
  766. package/dist/storage/persistence.d.ts +134 -0
  767. package/dist/storage/persistence.d.ts.map +1 -0
  768. package/dist/storage/persistence.js +132 -0
  769. package/dist/storage/persistence.js.map +1 -0
  770. package/dist/storage/reference.d.ts +63 -0
  771. package/dist/storage/reference.d.ts.map +1 -0
  772. package/dist/storage/reference.js +156 -0
  773. package/dist/storage/reference.js.map +1 -0
  774. package/dist/storage/rules.d.ts +176 -0
  775. package/dist/storage/rules.d.ts.map +1 -0
  776. package/dist/storage/rules.js +621 -0
  777. package/dist/storage/rules.js.map +1 -0
  778. package/dist/storage/service.d.ts +139 -0
  779. package/dist/storage/service.d.ts.map +1 -0
  780. package/dist/storage/service.js +241 -0
  781. package/dist/storage/service.js.map +1 -0
  782. package/dist/storage/upload.d.ts +43 -0
  783. package/dist/storage/upload.d.ts.map +1 -0
  784. package/dist/storage/upload.js +235 -0
  785. package/dist/storage/upload.js.map +1 -0
  786. 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"}