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 @@
1
+ {"version":3,"file":"sentinel-capture.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/sentinel-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,MAAM,GAAG,EAAE;IAC1D,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;IAEZ,SAAS,KAAK,CAAC,CAAU,EAAE,CAAS;QAClC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO;QACnE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,CAA4B,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,GAA4B;IAC1C,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,IAAI,CAAC,KAAK,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IACtD,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IAC1C,IAAI,CAAC,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IAC5C,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IAC9C,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Snapshot-listener types — Slices 1–3 of `onSnapshot`.
3
+ *
4
+ * Slice 1 added the registry; Slice 2 added Web-SDK-shaped snapshot
5
+ * types and the initial-fire wiring (in local-environment.ts); Slice 3
6
+ * adds change detection — recompute on writes, diff against the prior
7
+ * snapshot, suppress no-ops, fire surviving callbacks. See
8
+ * the design rationale for the slice plan and
9
+ * the design rationale for the production
10
+ * patterns these types are adapted from (firebase-js-sdk 4.14.1, section 3,
11
+ * section 4, section 5).
12
+ */
13
+ import type { DocumentData } from './local-state.js';
14
+ import type { Operation } from './local-environment.js';
15
+ import type { QueryConstraints } from '../../rules/simulator/query-proof.js';
16
+ /**
17
+ * A query's `where` / `orderBy` / cursor / `limit` constraints as a
18
+ * pure row transformer (FS-B2). `addSnapshotListener` threads this in
19
+ * from the chainable `QueryImpl.snapshotConstraints()` so a filtered
20
+ * `onSnapshot(query(...))` delivers the same membership as a one-shot
21
+ * `getDocs(query(...))`. `undefined` means a bare collection listen
22
+ * (no constraints) — the whole rule-allowed collection is delivered.
23
+ *
24
+ * RULES-B11 — the applier also carries `structured`, the query's
25
+ * `where`/`limit`/`orderBy` as data (not just an opaque transformer), so
26
+ * `silentReadCollection` can run `evaluateQueryProof` against the matched
27
+ * `list` rule: an unprovable query is DENIED whole ("rules are not
28
+ * filters"), never silently filtered. Carried on the function object so
29
+ * existing call sites that just thread the applier through stay unchanged.
30
+ */
31
+ export interface QueryConstraintApplier {
32
+ (rows: {
33
+ path: string;
34
+ data: DocumentData;
35
+ }[]): {
36
+ path: string;
37
+ data: DocumentData;
38
+ }[];
39
+ /** Structured constraints for the query-proof gate (RULES-B11). Absent on
40
+ * appliers built before the query carries any provable constraints. */
41
+ structured?: QueryConstraints;
42
+ }
43
+ /**
44
+ * What a listener is watching. Query targets carry their `where` /
45
+ * `orderBy` / `limit` constraints via {@link SnapshotTarget.constraints}
46
+ * (FS-B2) so the listener delivers a filtered/ordered/limited view
47
+ * rather than the whole collection.
48
+ */
49
+ export type SnapshotTarget = {
50
+ kind: 'doc';
51
+ path: string;
52
+ } | {
53
+ kind: 'query';
54
+ collection: string;
55
+ constraints?: QueryConstraintApplier;
56
+ };
57
+ /**
58
+ * Mirrors `SnapshotListenOptions` from the Web SDK. `source: 'cache'` has
59
+ * no analog in the sandbox (no offline cache) — accepted but treated as
60
+ * `'default'`.
61
+ *
62
+ * `includeMetadataChanges` is now observable (item 3 / COMPAT firestore#85):
63
+ * a local write echoes to every listener with `hasPendingWrites: true`, and
64
+ * `includeMetadataChanges` listeners additionally receive the server-ack
65
+ * fire (`hasPendingWrites: false`) that default listeners never see. See
66
+ * `LocalEnvironment.notifyDocListener` / `notifyQueryListener`. `fromCache`
67
+ * remains constant `false` — the sandbox has no offline cache to serve from.
68
+ */
69
+ export interface SnapshotListenerOptions {
70
+ includeMetadataChanges?: boolean;
71
+ source?: 'default' | 'cache';
72
+ }
73
+ /**
74
+ * Callback shape is a placeholder until Slice 2 introduces the public
75
+ * `QuerySnapshot` / `DocumentSnapshot` types. Typed as `unknown` here so
76
+ * Slice 1 does not lock in a snapshot shape that survey item section 4 says
77
+ * needs careful construction (lazy `docs`, cached `docChanges()`).
78
+ */
79
+ export type SnapshotCallback = (snapshot: unknown) => void;
80
+ /**
81
+ * Stream errors. Per findings section 9, listener errors are stream-level —
82
+ * once delivered, the listener is silently terminated (no further
83
+ * snapshots). Slice 7 wires this end-to-end; the field exists in the
84
+ * record now so Slice 1 doesn't have to re-shape it later.
85
+ */
86
+ export type SnapshotErrorCallback = (error: unknown) => void;
87
+ /**
88
+ * The fork's auth context at registration time — captured per
89
+ * `addSnapshotListener` call rather than re-read at notification time.
90
+ *
91
+ * Why per-listener capture (write-time filtering): when a write by bob
92
+ * triggers a fan-out, alice's listener must re-read under ALICE's auth,
93
+ * not bob's. Re-reading "whatever auth is current" would let one user's
94
+ * write leak through another user's listener. So each listener pins the
95
+ * auth it subscribed with for write-driven re-evaluation. KEEP THIS.
96
+ *
97
+ * Why it ALSO re-captures (live listeners only): production doesn't just
98
+ * read auth once at listen-establishment — it RE-ESTABLISHES the listen
99
+ * stream when the session's own auth changes (sign-out/sign-in), so an
100
+ * auth-gated listener gets a permission-denied on sign-out. Capturing
101
+ * once was therefore INCOMPLETE. Live (`followsCurrentUser`) listeners
102
+ * re-capture their `auth` when the sandbox's `currentUser` changes (see
103
+ * {@link followsCurrentUser} + `LocalEnvironment.reevaluateLiveListeners`),
104
+ * matching that re-establishment. Frozen-ctx listeners
105
+ * (`followsCurrentUser === false`) stay pinned by design — that's the
106
+ * admin/testing use case where identity is chosen explicitly per handle.
107
+ */
108
+ export type ListenerAuth = Operation['auth'];
109
+ export interface ListenerRecord {
110
+ /** Stable id used to look up the record on unsubscribe. */
111
+ id: string;
112
+ target: SnapshotTarget;
113
+ callback: SnapshotCallback;
114
+ errorCallback?: SnapshotErrorCallback;
115
+ /** Captured at registration; see {@link ListenerAuth}. */
116
+ auth: ListenerAuth;
117
+ /**
118
+ * `true` when this listener was registered through a `sandbox-live`
119
+ * Firestore handle (`getFirestore(sandbox)`), whose identity follows
120
+ * `sandbox.currentUser`. Such listeners re-capture their `auth` and
121
+ * re-evaluate when `currentUser` changes — matching production, which
122
+ * re-establishes the listen stream on a session auth change (an
123
+ * auth-gated listener loses access on sign-out). `false` for
124
+ * frozen-ctx listeners (`getFirestore(ctx)`), which stay pinned to the
125
+ * identity chosen at handle-construction time (admin/testing path).
126
+ */
127
+ followsCurrentUser: boolean;
128
+ options: SnapshotListenerOptions;
129
+ /**
130
+ * Last snapshot delivered to the callback. Slice 2 populates this on
131
+ * the initial fire; Slice 3 uses {@link currentDocData} /
132
+ * {@link currentDocs} as the diff baseline (raw data is cheaper than
133
+ * unwrapping the snapshot accessor on every write).
134
+ */
135
+ currentSnapshot: unknown;
136
+ /**
137
+ * Diff baseline for `kind: 'doc'` listeners. `null` means the doc
138
+ * does not exist; `undefined` means no snapshot has fired yet.
139
+ * Slice 3 reads this to detect modified-vs-no-op fires.
140
+ */
141
+ currentDocData?: DocumentData | null;
142
+ /**
143
+ * Diff baseline for `kind: 'query'` listeners. The previous list of
144
+ * docs the listener saw, in the same order Slice 2's
145
+ * `silentReadCollection` returns them (path-ordered). Slice 3 passes
146
+ * this to `buildQuerySnapshot` so `oldIndex` and the `removed`
147
+ * change list are computed against the right baseline.
148
+ */
149
+ currentDocs?: {
150
+ path: string;
151
+ data: DocumentData;
152
+ }[];
153
+ /**
154
+ * Set when an error has been delivered. Per findings section 9 — once true,
155
+ * the dispatch loop must skip this record. Slice 7 wires the flip.
156
+ */
157
+ errored: boolean;
158
+ }
159
+ /**
160
+ * Mirrors `firebase/firestore`'s `SnapshotMetadata`. `fromCache` is always
161
+ * `false` (the sandbox has no offline cache). `hasPendingWrites` transitions
162
+ * (item 3): a local write's optimistic echo carries `true`, and the server
163
+ * ack carries `false` — so `includeMetadataChanges` has an observable effect
164
+ * matching prod (COMPAT firestore#85).
165
+ */
166
+ export interface SnapshotMetadata {
167
+ readonly hasPendingWrites: boolean;
168
+ readonly fromCache: false;
169
+ }
170
+ /**
171
+ * Minimal `DocumentReference` shape exposed on snapshots — `id` and
172
+ * `path` are all the production type guarantees for read-side use. The
173
+ * Web SDK adapter (Slice 4) supplies a richer ref to its own callers;
174
+ * this interface is the contract this module promises.
175
+ */
176
+ export interface SnapshotDocRef {
177
+ readonly id: string;
178
+ readonly path: string;
179
+ }
180
+ /**
181
+ * Minimal `Query` shape exposed on `QuerySnapshot.query` — production
182
+ * exposes the original `Query` object. For our purposes the listener's
183
+ * `SnapshotTarget` is enough handle for round-tripping.
184
+ */
185
+ export interface SnapshotQueryRef {
186
+ readonly path: string;
187
+ }
188
+ export type DocumentChangeType = 'added' | 'modified' | 'removed';
189
+ export interface DocumentSnapshot {
190
+ readonly id: string;
191
+ readonly ref: SnapshotDocRef;
192
+ readonly metadata: SnapshotMetadata;
193
+ exists(): boolean;
194
+ data(): DocumentData | undefined;
195
+ /**
196
+ * Field accessor mirroring `firebase/firestore`'s `DocumentSnapshot.get(fieldPath)`.
197
+ * Dotted paths supported. Missing intermediate keys yield `undefined`
198
+ * — production behavior; agents commonly chain optional reads.
199
+ */
200
+ get(fieldPath: string): unknown;
201
+ }
202
+ /**
203
+ * Production narrows `data()` to non-undefined here. We follow suit so
204
+ * that agent code calling `snap.data().foo` doesn't need a guard for
205
+ * the items inside a `QuerySnapshot.docs` array.
206
+ */
207
+ export interface QueryDocumentSnapshot extends DocumentSnapshot {
208
+ data(): DocumentData;
209
+ }
210
+ export interface DocumentChange {
211
+ readonly type: DocumentChangeType;
212
+ readonly doc: QueryDocumentSnapshot;
213
+ /** -1 for `added`. */
214
+ readonly oldIndex: number;
215
+ /** -1 for `removed`. */
216
+ readonly newIndex: number;
217
+ }
218
+ /** Options for `QuerySnapshot.docChanges`. Mirrors Web SDK shape. */
219
+ export interface DocChangesOptions {
220
+ includeMetadataChanges?: boolean;
221
+ }
222
+ export interface QuerySnapshot {
223
+ readonly query: SnapshotQueryRef;
224
+ readonly metadata: SnapshotMetadata;
225
+ readonly size: number;
226
+ readonly empty: boolean;
227
+ readonly docs: QueryDocumentSnapshot[];
228
+ forEach(callback: (snap: QueryDocumentSnapshot) => void): void;
229
+ /**
230
+ * Per findings section 4: cached by `includeMetadataChanges` value; throws if
231
+ * called with `true` when the listener did not subscribe with
232
+ * `includeMetadataChanges: true`. The Slice 2 implementation produces
233
+ * "all docs added" on the first fire — Slice 3 supplies real diffs.
234
+ */
235
+ docChanges(options?: DocChangesOptions): DocumentChange[];
236
+ }
237
+ /**
238
+ * Settled metadata — `hasPendingWrites: false`. Used for the initial fire,
239
+ * the server-ack fire (item 3), and every re-eval that reflects a durable
240
+ * server read (rules redeploy, live-listener auth change). Shared frozen
241
+ * instance to save allocations on the common settled path.
242
+ */
243
+ export declare const SANDBOX_METADATA: SnapshotMetadata;
244
+ /**
245
+ * Pending metadata — `hasPendingWrites: true`. Stamped on the local write
246
+ * echo (item 3): the optimistic fire a write produces before the (sandbox-
247
+ * synchronous) server ack. Mirrors prod, where a `setDoc` echoes locally
248
+ * with `hasPendingWrites: true`. COMPAT firestore#85.
249
+ */
250
+ export declare const SANDBOX_METADATA_PENDING: SnapshotMetadata;
251
+ /**
252
+ * Build a Web-SDK-shaped `DocumentSnapshot` for a single doc path.
253
+ * `data === null` indicates the doc does not exist (`exists() === false`,
254
+ * `data() === undefined`).
255
+ */
256
+ export declare function buildDocumentSnapshot(path: string, data: DocumentData | null, metadata?: SnapshotMetadata): DocumentSnapshot;
257
+ /**
258
+ * Build a Web-SDK-shaped `QuerySnapshot`.
259
+ *
260
+ * `docList` carries the docs in their query-order (the caller is
261
+ * responsible for ordering — for Slice 2 the order is whatever
262
+ * `LocalState.list` returns, which is a path-ordered scan).
263
+ *
264
+ * `prevDocs` is the previous snapshot's docs, used to compute
265
+ * `oldIndex`. Pass `undefined` for an initial snapshot — every doc
266
+ * surfaces as `added` with `oldIndex === -1`. Slice 3 will pass the
267
+ * previous list to compute `modified` / `removed` entries.
268
+ *
269
+ * The returned `docChanges()` is cached by `includeMetadataChanges`
270
+ * and throws on flag-mismatch when the listener didn't subscribe with
271
+ * the option (per findings section 4) — that throw is wired by passing
272
+ * `excludesMetadataChanges: !options.includeMetadataChanges` from the
273
+ * listener record, which Slice 3 hooks into the dispatch path.
274
+ */
275
+ export declare function buildQuerySnapshot(query: SnapshotQueryRef, docList: {
276
+ path: string;
277
+ data: DocumentData;
278
+ }[], options: {
279
+ excludesMetadataChanges: boolean;
280
+ }, prevDocs?: {
281
+ path: string;
282
+ data: DocumentData;
283
+ }[], metadata?: SnapshotMetadata): QuerySnapshot;
284
+ //# sourceMappingURL=snapshot-listeners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-listeners.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/snapshot-listeners.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,194 @@
1
+ // FS-B10 — translate the listener read path so `snap.data()` exposes the
2
+ // SAME compat-shaped values (`Timestamp` `{seconds, nanoseconds}`, `Bytes`,
3
+ // `GeoPoint`) a one-shot `getDoc`/`getDocs` returns. Without this the
4
+ // listener leaked the rules-internal `Timestamp` (`{seconds, nanos}`, with a
5
+ // `typeName` field and no `nanoseconds`). `read-translation.ts` carries no
6
+ // admin-compat-surface dependency, so importing it here is cycle-free.
7
+ import { translateReadData } from './admin-compat/read-translation.js';
8
+ // ─── Snapshot constants ──────────────────────────────────────────────
9
+ /**
10
+ * Settled metadata — `hasPendingWrites: false`. Used for the initial fire,
11
+ * the server-ack fire (item 3), and every re-eval that reflects a durable
12
+ * server read (rules redeploy, live-listener auth change). Shared frozen
13
+ * instance to save allocations on the common settled path.
14
+ */
15
+ export const SANDBOX_METADATA = Object.freeze({
16
+ hasPendingWrites: false,
17
+ fromCache: false,
18
+ });
19
+ /**
20
+ * Pending metadata — `hasPendingWrites: true`. Stamped on the local write
21
+ * echo (item 3): the optimistic fire a write produces before the (sandbox-
22
+ * synchronous) server ack. Mirrors prod, where a `setDoc` echoes locally
23
+ * with `hasPendingWrites: true`. COMPAT firestore#85.
24
+ */
25
+ export const SANDBOX_METADATA_PENDING = Object.freeze({
26
+ hasPendingWrites: true,
27
+ fromCache: false,
28
+ });
29
+ // ─── Snapshot construction helpers ───────────────────────────────────
30
+ /**
31
+ * Walk a dotted path against a data tree. Returns `undefined` on any
32
+ * missing intermediate or non-object node — matching production's
33
+ * forgiving accessor (Web SDK `DocumentSnapshot.get`).
34
+ */
35
+ function getByPath(data, fieldPath) {
36
+ if (data === undefined)
37
+ return undefined;
38
+ const parts = fieldPath.split('.');
39
+ let cur = data;
40
+ for (const p of parts) {
41
+ if (cur === null || cur === undefined || typeof cur !== 'object')
42
+ return undefined;
43
+ cur = cur[p];
44
+ }
45
+ return cur;
46
+ }
47
+ function lastSegment(path) {
48
+ const i = path.lastIndexOf('/');
49
+ return i === -1 ? path : path.slice(i + 1);
50
+ }
51
+ /**
52
+ * Build a Web-SDK-shaped `DocumentSnapshot` for a single doc path.
53
+ * `data === null` indicates the doc does not exist (`exists() === false`,
54
+ * `data() === undefined`).
55
+ */
56
+ export function buildDocumentSnapshot(path, data, metadata = SANDBOX_METADATA) {
57
+ const ref = { id: lastSegment(path), path };
58
+ const exists = data !== null;
59
+ // FS-B10 — translate to the same compat shape `getDoc` returns, so a
60
+ // listener's `snap.data().createdAt` is a `{seconds, nanoseconds}`
61
+ // Timestamp, not the rules-internal `{seconds, nanos}` wrapper.
62
+ const translated = exists ? translateReadData(data) : undefined;
63
+ return {
64
+ id: ref.id,
65
+ ref,
66
+ metadata,
67
+ exists: () => exists,
68
+ data: () => translated,
69
+ get: (fieldPath) => getByPath(translated, fieldPath),
70
+ };
71
+ }
72
+ function buildQueryDocumentSnapshot(path, data, metadata = SANDBOX_METADATA) {
73
+ const ref = { id: lastSegment(path), path };
74
+ // FS-B10 — same read-path translation as the single-doc + getDocs paths.
75
+ const translated = translateReadData(data);
76
+ return {
77
+ id: ref.id,
78
+ ref,
79
+ metadata,
80
+ exists: () => true,
81
+ data: () => translated,
82
+ get: (fieldPath) => getByPath(translated, fieldPath),
83
+ };
84
+ }
85
+ /**
86
+ * Build a Web-SDK-shaped `QuerySnapshot`.
87
+ *
88
+ * `docList` carries the docs in their query-order (the caller is
89
+ * responsible for ordering — for Slice 2 the order is whatever
90
+ * `LocalState.list` returns, which is a path-ordered scan).
91
+ *
92
+ * `prevDocs` is the previous snapshot's docs, used to compute
93
+ * `oldIndex`. Pass `undefined` for an initial snapshot — every doc
94
+ * surfaces as `added` with `oldIndex === -1`. Slice 3 will pass the
95
+ * previous list to compute `modified` / `removed` entries.
96
+ *
97
+ * The returned `docChanges()` is cached by `includeMetadataChanges`
98
+ * and throws on flag-mismatch when the listener didn't subscribe with
99
+ * the option (per findings section 4) — that throw is wired by passing
100
+ * `excludesMetadataChanges: !options.includeMetadataChanges` from the
101
+ * listener record, which Slice 3 hooks into the dispatch path.
102
+ */
103
+ export function buildQuerySnapshot(query, docList, options, prevDocs, metadata = SANDBOX_METADATA) {
104
+ const docs = docList.map((d) => buildQueryDocumentSnapshot(d.path, d.data, metadata));
105
+ // Pre-compute the no-metadata-change view (Slice 2 semantics):
106
+ // initial fire → every current doc is `added`. Slice 3 will replace
107
+ // this with proper diffing against `prevDocs`.
108
+ const baseChanges = prevDocs
109
+ ? computeChanges(prevDocs, docList, docs, metadata)
110
+ : docs.map((doc, newIndex) => ({ type: 'added', doc, oldIndex: -1, newIndex }));
111
+ let cachedNoMetaChanges = null;
112
+ let cachedWithMetaChanges = null;
113
+ return {
114
+ query,
115
+ metadata,
116
+ size: docs.length,
117
+ empty: docs.length === 0,
118
+ docs,
119
+ forEach(cb) {
120
+ for (const d of docs)
121
+ cb(d);
122
+ },
123
+ docChanges(opts) {
124
+ const wantMeta = !!opts?.includeMetadataChanges;
125
+ if (wantMeta && options.excludesMetadataChanges) {
126
+ // Production throws `FirestoreError(invalid-argument)` here. We
127
+ // throw a plain Error in the simulator core; the Web SDK adapter
128
+ // (Slice 4) re-tags this into a `FirestoreError` shape so agent
129
+ // code can pattern-match on `.code`.
130
+ throw new Error('To include metadata changes with your document changes, you must also pass ' +
131
+ '{ includeMetadataChanges: true } to onSnapshot().');
132
+ }
133
+ // Sandbox metadata never transitions (findings section 6) so the two
134
+ // cached arrays are identical in practice — keeping the cache key
135
+ // separate matches production's contract verbatim and lets us add
136
+ // distinct semantics later without breaking call sites.
137
+ if (wantMeta) {
138
+ if (!cachedWithMetaChanges)
139
+ cachedWithMetaChanges = baseChanges.slice();
140
+ return cachedWithMetaChanges;
141
+ }
142
+ if (!cachedNoMetaChanges)
143
+ cachedNoMetaChanges = baseChanges.slice();
144
+ return cachedNoMetaChanges;
145
+ },
146
+ };
147
+ }
148
+ /**
149
+ * Diff `prev` against `curr` to produce `DocumentChange[]`. Slice 3
150
+ * uses this from the notification path; Slice 2 only invokes it when
151
+ * `prevDocs` is supplied (i.e. never on the initial fire).
152
+ *
153
+ * `oldIndex`/`newIndex` follow production's contract (-1 for added /
154
+ * removed). Comparison uses path identity for membership and a shallow
155
+ * `JSON.stringify` for "modified" detection — good enough for the
156
+ * sandbox's data shapes (all `DocumentData` values are JSON-serialisable
157
+ * after sentinel resolution). A deep-equal helper can land in Slice 3
158
+ * if a probe surfaces a divergence.
159
+ */
160
+ function computeChanges(prev, curr, currSnaps, metadata = SANDBOX_METADATA) {
161
+ const prevIndex = new Map();
162
+ prev.forEach((d, i) => prevIndex.set(d.path, i));
163
+ const currIndex = new Map();
164
+ curr.forEach((d, i) => currIndex.set(d.path, i));
165
+ const out = [];
166
+ // Removed (in prev, not in curr) — keep `oldIndex` from prev.
167
+ for (let i = 0; i < prev.length; i++) {
168
+ const p = prev[i];
169
+ if (!currIndex.has(p.path)) {
170
+ out.push({
171
+ type: 'removed',
172
+ doc: buildQueryDocumentSnapshot(p.path, p.data, metadata),
173
+ oldIndex: i,
174
+ newIndex: -1,
175
+ });
176
+ }
177
+ }
178
+ // Added or modified (every curr entry).
179
+ for (let i = 0; i < curr.length; i++) {
180
+ const c = curr[i];
181
+ const oldI = prevIndex.get(c.path);
182
+ if (oldI === undefined) {
183
+ out.push({ type: 'added', doc: currSnaps[i], oldIndex: -1, newIndex: i });
184
+ }
185
+ else {
186
+ const prevData = prev[oldI].data;
187
+ if (JSON.stringify(prevData) !== JSON.stringify(c.data)) {
188
+ out.push({ type: 'modified', doc: currSnaps[i], oldIndex: oldI, newIndex: i });
189
+ }
190
+ }
191
+ }
192
+ return out;
193
+ }
194
+ //# sourceMappingURL=snapshot-listeners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-listeners.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/snapshot-listeners.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * topK: the k smallest items by `cmp`, in ascending order, WITHOUT sorting the
3
+ * whole input. Equivalent to `[...items].sort(cmp).slice(0, k)` when `cmp` is a
4
+ * total order (no ties), which the query engine guarantees since its
5
+ * normalized orderBy ends with the unique `__name__` key. Used by `limit`
6
+ * queries (no full sort) and, later, by `findNearest`'s vector top-k.
7
+ *
8
+ * Maintains a bounded ascending buffer of size <= k via binary insertion: O(n
9
+ * log k) comparisons and O(k) extra space, vs the full sort's O(n log n) + O(n).
10
+ */
11
+ export declare function topK<T>(items: Iterable<T>, k: number, cmp: (a: T, b: T) => number): T[];
12
+ //# sourceMappingURL=topk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topk.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/topk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,CAAC,EAAE,CAcvF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * topK: the k smallest items by `cmp`, in ascending order, WITHOUT sorting the
3
+ * whole input. Equivalent to `[...items].sort(cmp).slice(0, k)` when `cmp` is a
4
+ * total order (no ties), which the query engine guarantees since its
5
+ * normalized orderBy ends with the unique `__name__` key. Used by `limit`
6
+ * queries (no full sort) and, later, by `findNearest`'s vector top-k.
7
+ *
8
+ * Maintains a bounded ascending buffer of size <= k via binary insertion: O(n
9
+ * log k) comparisons and O(k) extra space, vs the full sort's O(n log n) + O(n).
10
+ */
11
+ export function topK(items, k, cmp) {
12
+ if (k <= 0)
13
+ return [];
14
+ const top = [];
15
+ for (const item of items) {
16
+ if (top.length < k) {
17
+ insertSorted(top, item, cmp);
18
+ }
19
+ else if (cmp(item, top[top.length - 1]) < 0) {
20
+ // `item` ranks ahead of the current k-th: evict the largest, insert this.
21
+ top.pop();
22
+ insertSorted(top, item, cmp);
23
+ }
24
+ // else: item is no smaller than the k-th best, so it cannot make the cut.
25
+ }
26
+ return top;
27
+ }
28
+ /** Insert `item` into the ascending array `arr` at its sorted position. Ties
29
+ * (cmp === 0) land AFTER equal elements, preserving input order among equals. */
30
+ function insertSorted(arr, item, cmp) {
31
+ let lo = 0;
32
+ let hi = arr.length;
33
+ while (lo < hi) {
34
+ const mid = (lo + hi) >> 1;
35
+ if (cmp(item, arr[mid]) < 0)
36
+ hi = mid;
37
+ else
38
+ lo = mid + 1;
39
+ }
40
+ arr.splice(lo, 0, item);
41
+ }
42
+ //# sourceMappingURL=topk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topk.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/topk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,UAAU,IAAI,CAAI,KAAkB,EAAE,CAAS,EAAE,GAA2B;IAChF,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,0EAA0E;YAC1E,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,0EAA0E;IAC5E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;kFACkF;AAClF,SAAS,YAAY,CAAI,GAAQ,EAAE,IAAO,EAAE,GAA2B;IACrE,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IACpB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAE,CAAC,GAAG,CAAC;YAAE,EAAE,GAAG,GAAG,CAAC;;YAClC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Item 1.3 — Same-path queued-write collapse.
3
+ *
4
+ * `TransactionContext` queues writes append-only (Item 1.2). Before
5
+ * commit, ops at the same path collapse into a single operation so the
6
+ * existing `LocalState.applyBatch` can run rules-eval + apply atomically
7
+ * without per-call divergence.
8
+ *
9
+ * Probe 0.D verified `update + update` merges fields (last-wins per
10
+ * field, earlier-but-non-overlapping fields preserved). The other
11
+ * combinations are extrapolated from Admin SDK semantics:
12
+ *
13
+ * set + set → second `set` wins (overwrite semantics).
14
+ * set + update → `set` with `{ ...set.data, ...update.data }`.
15
+ * set + delete → `delete` wins (the set never observable).
16
+ * create + update → `create` with `{ ...create.data, ...update.data }`.
17
+ * create + set → `set` wins (set overwrites, semantically a
18
+ * fresh create-or-replace).
19
+ * create + delete → `delete` wins (final state is gone).
20
+ * update + update → ✅ probed: merged data.
21
+ * update + set → `set` wins (set replaces entirely).
22
+ * update + delete → `delete` wins.
23
+ * delete + ANYTHING → THROW. Probe didn't cover; safer to error
24
+ * than guess. Decisions Log: "delete + write
25
+ * merge unprobed; v1 throws ambiguous".
26
+ *
27
+ * Output is `LocalState.BatchOperation[]` directly — that's what the
28
+ * commit path (Item 2) feeds into `applyBatch`. Same-path entries
29
+ * collapse into one entry; different paths preserve order of first
30
+ * appearance (insertion order in the path map).
31
+ */
32
+ import type { BatchOperation } from './local-state.js';
33
+ import type { QueuedWrite } from './transaction-types.js';
34
+ /**
35
+ * Thrown when the queue contains a `delete` followed by another write
36
+ * at the same path. The combination is unprobed; v1 errors instead of
37
+ * guessing. The wrapper in the commit path (Item 2) translates this
38
+ * to a `FirestoreSimError { code: 'failed-precondition' }` with a
39
+ * message naming the unprobed combo.
40
+ */
41
+ export declare class AmbiguousPostDeleteWriteError extends Error {
42
+ readonly path: string;
43
+ readonly secondMethod: string;
44
+ constructor(path: string, secondMethod: string);
45
+ }
46
+ /**
47
+ * Collapse the per-path queue into one `BatchOperation` per path.
48
+ *
49
+ * - Iterates writes in queue order.
50
+ * - For each path, maintains the "effective op" (method + accumulated
51
+ * data) and folds in subsequent writes per the table above.
52
+ * - Throws `AmbiguousPostDeleteWriteError` on `delete + anything`.
53
+ */
54
+ export declare function mergeQueuedWrites(writes: readonly QueuedWrite[]): BatchOperation[];
55
+ //# sourceMappingURL=transaction-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-merge.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/transaction-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;GAMG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAClB,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;CAW/C;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,EAAE,CAoBlF"}