pyric 0.0.1 → 0.1.0-alpha.8

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 (787) hide show
  1. package/README.md +138 -2
  2. package/README.md.orig +54 -0
  3. package/dist/app/index.d.ts +81 -0
  4. package/dist/app/index.d.ts.map +1 -0
  5. package/dist/app/index.js +78 -0
  6. package/dist/app/index.js.map +1 -0
  7. package/dist/auth/index.d.ts +346 -0
  8. package/dist/auth/index.d.ts.map +1 -0
  9. package/dist/auth/index.js +701 -0
  10. package/dist/auth/index.js.map +1 -0
  11. package/dist/auth/prod-backend.d.ts +39 -0
  12. package/dist/auth/prod-backend.d.ts.map +1 -0
  13. package/dist/auth/prod-backend.js +179 -0
  14. package/dist/auth/prod-backend.js.map +1 -0
  15. package/dist/auth/providers.d.ts +107 -0
  16. package/dist/auth/providers.d.ts.map +1 -0
  17. package/dist/auth/providers.js +138 -0
  18. package/dist/auth/providers.js.map +1 -0
  19. package/dist/auth/sandbox-backend.d.ts +769 -0
  20. package/dist/auth/sandbox-backend.d.ts.map +1 -0
  21. package/dist/auth/sandbox-backend.js +1598 -0
  22. package/dist/auth/sandbox-backend.js.map +1 -0
  23. package/dist/auth/target.d.ts +40 -0
  24. package/dist/auth/target.d.ts.map +1 -0
  25. package/dist/auth/target.js +28 -0
  26. package/dist/auth/target.js.map +1 -0
  27. package/dist/auth/types.d.ts +252 -0
  28. package/dist/auth/types.d.ts.map +1 -0
  29. package/dist/auth/types.js +26 -0
  30. package/dist/auth/types.js.map +1 -0
  31. package/dist/database/constraints/atoms.d.ts +29 -0
  32. package/dist/database/constraints/atoms.d.ts.map +1 -0
  33. package/dist/database/constraints/atoms.js +43 -0
  34. package/dist/database/constraints/atoms.js.map +1 -0
  35. package/dist/database/constraints/compose.d.ts +16 -0
  36. package/dist/database/constraints/compose.d.ts.map +1 -0
  37. package/dist/database/constraints/compose.js +15 -0
  38. package/dist/database/constraints/compose.js.map +1 -0
  39. package/dist/database/constraints/data.d.ts +30 -0
  40. package/dist/database/constraints/data.d.ts.map +1 -0
  41. package/dist/database/constraints/data.js +46 -0
  42. package/dist/database/constraints/data.js.map +1 -0
  43. package/dist/database/constraints/document.d.ts +42 -0
  44. package/dist/database/constraints/document.d.ts.map +1 -0
  45. package/dist/database/constraints/document.js +86 -0
  46. package/dist/database/constraints/document.js.map +1 -0
  47. package/dist/database/constraints/game.d.ts +30 -0
  48. package/dist/database/constraints/game.d.ts.map +1 -0
  49. package/dist/database/constraints/game.js +49 -0
  50. package/dist/database/constraints/game.js.map +1 -0
  51. package/dist/database/constraints/index.d.ts +12 -0
  52. package/dist/database/constraints/index.d.ts.map +1 -0
  53. package/dist/database/constraints/index.js +9 -0
  54. package/dist/database/constraints/index.js.map +1 -0
  55. package/dist/database/constraints/policies.d.ts +16 -0
  56. package/dist/database/constraints/policies.d.ts.map +1 -0
  57. package/dist/database/constraints/policies.js +17 -0
  58. package/dist/database/constraints/policies.js.map +1 -0
  59. package/dist/database/constraints/ruleset.d.ts +5 -0
  60. package/dist/database/constraints/ruleset.d.ts.map +1 -0
  61. package/dist/database/constraints/ruleset.js +132 -0
  62. package/dist/database/constraints/ruleset.js.map +1 -0
  63. package/dist/database/constraints/schema.d.ts +17 -0
  64. package/dist/database/constraints/schema.d.ts.map +1 -0
  65. package/dist/database/constraints/schema.js +74 -0
  66. package/dist/database/constraints/schema.js.map +1 -0
  67. package/dist/database/constraints/types.d.ts +22 -0
  68. package/dist/database/constraints/types.d.ts.map +1 -0
  69. package/dist/database/constraints/types.js +2 -0
  70. package/dist/database/constraints/types.js.map +1 -0
  71. package/dist/database/crawl/handler.d.ts +7 -0
  72. package/dist/database/crawl/handler.d.ts.map +1 -0
  73. package/dist/database/crawl/handler.js +91 -0
  74. package/dist/database/crawl/handler.js.map +1 -0
  75. package/dist/database/crawl/semaphore.d.ts +9 -0
  76. package/dist/database/crawl/semaphore.d.ts.map +1 -0
  77. package/dist/database/crawl/semaphore.js +27 -0
  78. package/dist/database/crawl/semaphore.js.map +1 -0
  79. package/dist/database/crawl/spec.d.ts +33 -0
  80. package/dist/database/crawl/spec.d.ts.map +1 -0
  81. package/dist/database/crawl/spec.js +12 -0
  82. package/dist/database/crawl/spec.js.map +1 -0
  83. package/dist/database/data/handler.d.ts +9 -0
  84. package/dist/database/data/handler.d.ts.map +1 -0
  85. package/dist/database/data/handler.js +96 -0
  86. package/dist/database/data/handler.js.map +1 -0
  87. package/dist/database/data/spec.d.ts +77 -0
  88. package/dist/database/data/spec.d.ts.map +1 -0
  89. package/dist/database/data/spec.js +17 -0
  90. package/dist/database/data/spec.js.map +1 -0
  91. package/dist/database/data/validated.d.ts +8 -0
  92. package/dist/database/data/validated.d.ts.map +1 -0
  93. package/dist/database/data/validated.js +99 -0
  94. package/dist/database/data/validated.js.map +1 -0
  95. package/dist/database/grammar/RtdbExpr.ohm +98 -0
  96. package/dist/database/grammar/RtdbExpr.ohm.generated.d.ts +2 -0
  97. package/dist/database/grammar/RtdbExpr.ohm.generated.d.ts.map +1 -0
  98. package/dist/database/grammar/RtdbExpr.ohm.generated.js +103 -0
  99. package/dist/database/grammar/RtdbExpr.ohm.generated.js.map +1 -0
  100. package/dist/database/grammar/RtdbExprParser.d.ts +5 -0
  101. package/dist/database/grammar/RtdbExprParser.d.ts.map +1 -0
  102. package/dist/database/grammar/RtdbExprParser.js +53 -0
  103. package/dist/database/grammar/RtdbExprParser.js.map +1 -0
  104. package/dist/database/grammar/linter.d.ts +3 -0
  105. package/dist/database/grammar/linter.d.ts.map +1 -0
  106. package/dist/database/grammar/linter.js +66 -0
  107. package/dist/database/grammar/linter.js.map +1 -0
  108. package/dist/database/grammar/simulator.d.ts +31 -0
  109. package/dist/database/grammar/simulator.d.ts.map +1 -0
  110. package/dist/database/grammar/simulator.js +255 -0
  111. package/dist/database/grammar/simulator.js.map +1 -0
  112. package/dist/database/grammar/validator.d.ts +3 -0
  113. package/dist/database/grammar/validator.d.ts.map +1 -0
  114. package/dist/database/grammar/validator.js +84 -0
  115. package/dist/database/grammar/validator.js.map +1 -0
  116. package/dist/database/host.d.ts +50 -0
  117. package/dist/database/host.d.ts.map +1 -0
  118. package/dist/database/host.js +41 -0
  119. package/dist/database/host.js.map +1 -0
  120. package/dist/database/index.d.ts +40 -0
  121. package/dist/database/index.d.ts.map +1 -0
  122. package/dist/database/index.js +47 -0
  123. package/dist/database/index.js.map +1 -0
  124. package/dist/database/initialize-from-app.d.ts +28 -0
  125. package/dist/database/initialize-from-app.d.ts.map +1 -0
  126. package/dist/database/initialize-from-app.js +23 -0
  127. package/dist/database/initialize-from-app.js.map +1 -0
  128. package/dist/database/ir/handler.d.ts +6 -0
  129. package/dist/database/ir/handler.d.ts.map +1 -0
  130. package/dist/database/ir/handler.js +52 -0
  131. package/dist/database/ir/handler.js.map +1 -0
  132. package/dist/database/ir/spec.d.ts +25 -0
  133. package/dist/database/ir/spec.d.ts.map +1 -0
  134. package/dist/database/ir/spec.js +11 -0
  135. package/dist/database/ir/spec.js.map +1 -0
  136. package/dist/database/mapper.d.ts +9 -0
  137. package/dist/database/mapper.d.ts.map +1 -0
  138. package/dist/database/mapper.js +115 -0
  139. package/dist/database/mapper.js.map +1 -0
  140. package/dist/database/modular.d.ts +604 -0
  141. package/dist/database/modular.d.ts.map +1 -0
  142. package/dist/database/modular.js +1226 -0
  143. package/dist/database/modular.js.map +1 -0
  144. package/dist/database/replay.d.ts +33 -0
  145. package/dist/database/replay.d.ts.map +1 -0
  146. package/dist/database/replay.js +124 -0
  147. package/dist/database/replay.js.map +1 -0
  148. package/dist/database/resolver.d.ts +4 -0
  149. package/dist/database/resolver.d.ts.map +1 -0
  150. package/dist/database/resolver.js +66 -0
  151. package/dist/database/resolver.js.map +1 -0
  152. package/dist/database/sandbox/backend.d.ts +403 -0
  153. package/dist/database/sandbox/backend.d.ts.map +1 -0
  154. package/dist/database/sandbox/backend.js +1467 -0
  155. package/dist/database/sandbox/backend.js.map +1 -0
  156. package/dist/database/sandbox/data-tree.d.ts +123 -0
  157. package/dist/database/sandbox/data-tree.d.ts.map +1 -0
  158. package/dist/database/sandbox/data-tree.js +310 -0
  159. package/dist/database/sandbox/data-tree.js.map +1 -0
  160. package/dist/database/sandbox/normalize.d.ts +77 -0
  161. package/dist/database/sandbox/normalize.d.ts.map +1 -0
  162. package/dist/database/sandbox/normalize.js +165 -0
  163. package/dist/database/sandbox/normalize.js.map +1 -0
  164. package/dist/database/sandbox/push-id.d.ts +32 -0
  165. package/dist/database/sandbox/push-id.d.ts.map +1 -0
  166. package/dist/database/sandbox/push-id.js +82 -0
  167. package/dist/database/sandbox/push-id.js.map +1 -0
  168. package/dist/database/sandbox/query.d.ts +175 -0
  169. package/dist/database/sandbox/query.d.ts.map +1 -0
  170. package/dist/database/sandbox/query.js +269 -0
  171. package/dist/database/sandbox/query.js.map +1 -0
  172. package/dist/database/sandbox/rules-eval.d.ts +69 -0
  173. package/dist/database/sandbox/rules-eval.d.ts.map +1 -0
  174. package/dist/database/sandbox/rules-eval.js +124 -0
  175. package/dist/database/sandbox/rules-eval.js.map +1 -0
  176. package/dist/database/sandbox/sentinels.d.ts +71 -0
  177. package/dist/database/sandbox/sentinels.d.ts.map +1 -0
  178. package/dist/database/sandbox/sentinels.js +92 -0
  179. package/dist/database/sandbox/sentinels.js.map +1 -0
  180. package/dist/database/simulation/handler.d.ts +6 -0
  181. package/dist/database/simulation/handler.d.ts.map +1 -0
  182. package/dist/database/simulation/handler.js +236 -0
  183. package/dist/database/simulation/handler.js.map +1 -0
  184. package/dist/database/simulation/spec.d.ts +69 -0
  185. package/dist/database/simulation/spec.d.ts.map +1 -0
  186. package/dist/database/simulation/spec.js +25 -0
  187. package/dist/database/simulation/spec.js.map +1 -0
  188. package/dist/database/tools.d.ts +22 -0
  189. package/dist/database/tools.d.ts.map +1 -0
  190. package/dist/database/tools.js +272 -0
  191. package/dist/database/tools.js.map +1 -0
  192. package/dist/database/types.d.ts +210 -0
  193. package/dist/database/types.d.ts.map +1 -0
  194. package/dist/database/types.js +26 -0
  195. package/dist/database/types.js.map +1 -0
  196. package/dist/database/write/handler.d.ts +7 -0
  197. package/dist/database/write/handler.d.ts.map +1 -0
  198. package/dist/database/write/handler.js +42 -0
  199. package/dist/database/write/handler.js.map +1 -0
  200. package/dist/database/write/spec.d.ts +18 -0
  201. package/dist/database/write/spec.d.ts.map +1 -0
  202. package/dist/database/write/spec.js +7 -0
  203. package/dist/database/write/spec.js.map +1 -0
  204. package/dist/firestore/index.d.ts +533 -0
  205. package/dist/firestore/index.d.ts.map +1 -0
  206. package/dist/firestore/index.js +1536 -0
  207. package/dist/firestore/index.js.map +1 -0
  208. package/dist/firestore/tools.d.ts +67 -0
  209. package/dist/firestore/tools.d.ts.map +1 -0
  210. package/dist/firestore/tools.js +318 -0
  211. package/dist/firestore/tools.js.map +1 -0
  212. package/dist/firestore-values/index.d.ts +63 -0
  213. package/dist/firestore-values/index.d.ts.map +1 -0
  214. package/dist/firestore-values/index.js +148 -0
  215. package/dist/firestore-values/index.js.map +1 -0
  216. package/dist/project-scope.d.ts +5 -0
  217. package/dist/project-scope.d.ts.map +1 -0
  218. package/dist/project-scope.js +2 -0
  219. package/dist/project-scope.js.map +1 -0
  220. package/dist/rules/extract.d.ts +28 -0
  221. package/dist/rules/extract.d.ts.map +1 -0
  222. package/dist/rules/extract.js +25 -0
  223. package/dist/rules/extract.js.map +1 -0
  224. package/dist/rules/generators/assembler.d.ts +19 -0
  225. package/dist/rules/generators/assembler.d.ts.map +1 -0
  226. package/dist/rules/generators/assembler.js +292 -0
  227. package/dist/rules/generators/assembler.js.map +1 -0
  228. package/dist/rules/generators/expressions.d.ts +52 -0
  229. package/dist/rules/generators/expressions.d.ts.map +1 -0
  230. package/dist/rules/generators/expressions.js +117 -0
  231. package/dist/rules/generators/expressions.js.map +1 -0
  232. package/dist/rules/generators/grid.d.ts +22 -0
  233. package/dist/rules/generators/grid.d.ts.map +1 -0
  234. package/dist/rules/generators/grid.js +52 -0
  235. package/dist/rules/generators/grid.js.map +1 -0
  236. package/dist/rules/grammar/FirestoreAST.d.ts +129 -0
  237. package/dist/rules/grammar/FirestoreAST.d.ts.map +1 -0
  238. package/dist/rules/grammar/FirestoreAST.js +3 -0
  239. package/dist/rules/grammar/FirestoreAST.js.map +1 -0
  240. package/dist/rules/grammar/FirestoreAssembler.d.ts +5 -0
  241. package/dist/rules/grammar/FirestoreAssembler.d.ts.map +1 -0
  242. package/dist/rules/grammar/FirestoreAssembler.js +158 -0
  243. package/dist/rules/grammar/FirestoreAssembler.js.map +1 -0
  244. package/dist/rules/grammar/FirestoreParser.d.ts +46 -0
  245. package/dist/rules/grammar/FirestoreParser.d.ts.map +1 -0
  246. package/dist/rules/grammar/FirestoreParser.js +409 -0
  247. package/dist/rules/grammar/FirestoreParser.js.map +1 -0
  248. package/dist/rules/grammar/FirestoreRules.ohm +229 -0
  249. package/dist/rules/grammar/FirestoreRules.ohm.generated.d.ts +2 -0
  250. package/dist/rules/grammar/FirestoreRules.ohm.generated.d.ts.map +1 -0
  251. package/dist/rules/grammar/FirestoreRules.ohm.generated.js +234 -0
  252. package/dist/rules/grammar/FirestoreRules.ohm.generated.js.map +1 -0
  253. package/dist/rules/grammar/FirestoreValidator.d.ts +10 -0
  254. package/dist/rules/grammar/FirestoreValidator.d.ts.map +1 -0
  255. package/dist/rules/grammar/FirestoreValidator.js +482 -0
  256. package/dist/rules/grammar/FirestoreValidator.js.map +1 -0
  257. package/dist/rules/index.d.ts +67 -0
  258. package/dist/rules/index.d.ts.map +1 -0
  259. package/dist/rules/index.js +80 -0
  260. package/dist/rules/index.js.map +1 -0
  261. package/dist/rules/indexes/extract/annotation-collect.d.ts +42 -0
  262. package/dist/rules/indexes/extract/annotation-collect.d.ts.map +1 -0
  263. package/dist/rules/indexes/extract/annotation-collect.js +69 -0
  264. package/dist/rules/indexes/extract/annotation-collect.js.map +1 -0
  265. package/dist/rules/indexes/extract/annotations.d.ts +50 -0
  266. package/dist/rules/indexes/extract/annotations.d.ts.map +1 -0
  267. package/dist/rules/indexes/extract/annotations.js +144 -0
  268. package/dist/rules/indexes/extract/annotations.js.map +1 -0
  269. package/dist/rules/indexes/extract/ast.d.ts +54 -0
  270. package/dist/rules/indexes/extract/ast.d.ts.map +1 -0
  271. package/dist/rules/indexes/extract/ast.js +119 -0
  272. package/dist/rules/indexes/extract/ast.js.map +1 -0
  273. package/dist/rules/indexes/extract/classify.d.ts +41 -0
  274. package/dist/rules/indexes/extract/classify.d.ts.map +1 -0
  275. package/dist/rules/indexes/extract/classify.js +138 -0
  276. package/dist/rules/indexes/extract/classify.js.map +1 -0
  277. package/dist/rules/indexes/extract/composite.d.ts +38 -0
  278. package/dist/rules/indexes/extract/composite.d.ts.map +1 -0
  279. package/dist/rules/indexes/extract/composite.js +85 -0
  280. package/dist/rules/indexes/extract/composite.js.map +1 -0
  281. package/dist/rules/indexes/extract/dataflow.d.ts +45 -0
  282. package/dist/rules/indexes/extract/dataflow.d.ts.map +1 -0
  283. package/dist/rules/indexes/extract/dataflow.js +200 -0
  284. package/dist/rules/indexes/extract/dataflow.js.map +1 -0
  285. package/dist/rules/indexes/extract/enumerate.d.ts +41 -0
  286. package/dist/rules/indexes/extract/enumerate.d.ts.map +1 -0
  287. package/dist/rules/indexes/extract/enumerate.js +163 -0
  288. package/dist/rules/indexes/extract/enumerate.js.map +1 -0
  289. package/dist/rules/indexes/extract/extractor.d.ts +3 -0
  290. package/dist/rules/indexes/extract/extractor.d.ts.map +1 -0
  291. package/dist/rules/indexes/extract/extractor.js +274 -0
  292. package/dist/rules/indexes/extract/extractor.js.map +1 -0
  293. package/dist/rules/indexes/extract/types.d.ts +211 -0
  294. package/dist/rules/indexes/extract/types.d.ts.map +1 -0
  295. package/dist/rules/indexes/extract/types.js +14 -0
  296. package/dist/rules/indexes/extract/types.js.map +1 -0
  297. package/dist/rules/indexes/extractHandler.d.ts +16 -0
  298. package/dist/rules/indexes/extractHandler.d.ts.map +1 -0
  299. package/dist/rules/indexes/extractHandler.js +100 -0
  300. package/dist/rules/indexes/extractHandler.js.map +1 -0
  301. package/dist/rules/indexes/extractTool.d.ts +15 -0
  302. package/dist/rules/indexes/extractTool.d.ts.map +1 -0
  303. package/dist/rules/indexes/extractTool.js +55 -0
  304. package/dist/rules/indexes/extractTool.js.map +1 -0
  305. package/dist/rules/indexes/types.d.ts +71 -0
  306. package/dist/rules/indexes/types.d.ts.map +1 -0
  307. package/dist/rules/indexes/types.js +15 -0
  308. package/dist/rules/indexes/types.js.map +1 -0
  309. package/dist/rules/inspect/handler.d.ts +6 -0
  310. package/dist/rules/inspect/handler.d.ts.map +1 -0
  311. package/dist/rules/inspect/handler.js +144 -0
  312. package/dist/rules/inspect/handler.js.map +1 -0
  313. package/dist/rules/inspect/spec.d.ts +37 -0
  314. package/dist/rules/inspect/spec.d.ts.map +1 -0
  315. package/dist/rules/inspect/spec.js +2 -0
  316. package/dist/rules/inspect/spec.js.map +1 -0
  317. package/dist/rules/inspect/tools.d.ts +21 -0
  318. package/dist/rules/inspect/tools.d.ts.map +1 -0
  319. package/dist/rules/inspect/tools.js +21 -0
  320. package/dist/rules/inspect/tools.js.map +1 -0
  321. package/dist/rules/linter/ast-utils.d.ts +97 -0
  322. package/dist/rules/linter/ast-utils.d.ts.map +1 -0
  323. package/dist/rules/linter/ast-utils.js +491 -0
  324. package/dist/rules/linter/ast-utils.js.map +1 -0
  325. package/dist/rules/linter/hallucinations.d.ts +34 -0
  326. package/dist/rules/linter/hallucinations.d.ts.map +1 -0
  327. package/dist/rules/linter/hallucinations.js +334 -0
  328. package/dist/rules/linter/hallucinations.js.map +1 -0
  329. package/dist/rules/linter/linter.d.ts +84 -0
  330. package/dist/rules/linter/linter.d.ts.map +1 -0
  331. package/dist/rules/linter/linter.js +784 -0
  332. package/dist/rules/linter/linter.js.map +1 -0
  333. package/dist/rules/modules/resolver-browser.d.ts +41 -0
  334. package/dist/rules/modules/resolver-browser.d.ts.map +1 -0
  335. package/dist/rules/modules/resolver-browser.js +63 -0
  336. package/dist/rules/modules/resolver-browser.js.map +1 -0
  337. package/dist/rules/modules/resolver-core.d.ts +51 -0
  338. package/dist/rules/modules/resolver-core.d.ts.map +1 -0
  339. package/dist/rules/modules/resolver-core.js +338 -0
  340. package/dist/rules/modules/resolver-core.js.map +1 -0
  341. package/dist/rules/modules/resolver.d.ts +17 -0
  342. package/dist/rules/modules/resolver.d.ts.map +1 -0
  343. package/dist/rules/modules/resolver.js +49 -0
  344. package/dist/rules/modules/resolver.js.map +1 -0
  345. package/dist/rules/modules/stdlib/atomic.rules +52 -0
  346. package/dist/rules/modules/stdlib/atomic.test.json +152 -0
  347. package/dist/rules/modules/stdlib/auth.rules +7 -0
  348. package/dist/rules/modules/stdlib/auth.test.json +53 -0
  349. package/dist/rules/modules/stdlib/content.rules +50 -0
  350. package/dist/rules/modules/stdlib/content.test.json +238 -0
  351. package/dist/rules/modules/stdlib/counters.rules +41 -0
  352. package/dist/rules/modules/stdlib/counters.test.json +254 -0
  353. package/dist/rules/modules/stdlib/geometry.rules +43 -0
  354. package/dist/rules/modules/stdlib/geometry.test.json +200 -0
  355. package/dist/rules/modules/stdlib/joining.rules +49 -0
  356. package/dist/rules/modules/stdlib/joining.test.json +287 -0
  357. package/dist/rules/modules/stdlib/lifecycle.rules +51 -0
  358. package/dist/rules/modules/stdlib/lifecycle.test.json +288 -0
  359. package/dist/rules/modules/stdlib/lobby.rules +44 -0
  360. package/dist/rules/modules/stdlib/lobby.test.json +32 -0
  361. package/dist/rules/modules/stdlib/membership.rules +40 -0
  362. package/dist/rules/modules/stdlib/membership.test.json +107 -0
  363. package/dist/rules/modules/stdlib/spaces.rules +46 -0
  364. package/dist/rules/modules/stdlib/spaces.test.json +392 -0
  365. package/dist/rules/modules/stdlib/state.rules +28 -0
  366. package/dist/rules/modules/stdlib/state.test.json +55 -0
  367. package/dist/rules/modules/stdlib/timing.rules +20 -0
  368. package/dist/rules/modules/stdlib/timing.test.json +106 -0
  369. package/dist/rules/modules/stdlib/transitions.rules +34 -0
  370. package/dist/rules/modules/stdlib/transitions.test.json +86 -0
  371. package/dist/rules/modules/stdlib/turns.rules +27 -0
  372. package/dist/rules/modules/stdlib/turns.test.json +64 -0
  373. package/dist/rules/modules/stdlib/validation.rules +31 -0
  374. package/dist/rules/modules/stdlib/validation.test.json +184 -0
  375. package/dist/rules/modules/stdlib-content.d.ts +11 -0
  376. package/dist/rules/modules/stdlib-content.d.ts.map +1 -0
  377. package/dist/rules/modules/stdlib-content.js +590 -0
  378. package/dist/rules/modules/stdlib-content.js.map +1 -0
  379. package/dist/rules/node.d.ts +17 -0
  380. package/dist/rules/node.d.ts.map +1 -0
  381. package/dist/rules/node.js +21 -0
  382. package/dist/rules/node.js.map +1 -0
  383. package/dist/rules/rtdb.d.ts +28 -0
  384. package/dist/rules/rtdb.d.ts.map +1 -0
  385. package/dist/rules/rtdb.js +15 -0
  386. package/dist/rules/rtdb.js.map +1 -0
  387. package/dist/rules/simulator/evaluator.d.ts +179 -0
  388. package/dist/rules/simulator/evaluator.d.ts.map +1 -0
  389. package/dist/rules/simulator/evaluator.js +1221 -0
  390. package/dist/rules/simulator/evaluator.js.map +1 -0
  391. package/dist/rules/simulator/expression/eval-errors.d.ts +86 -0
  392. package/dist/rules/simulator/expression/eval-errors.d.ts.map +1 -0
  393. package/dist/rules/simulator/expression/eval-errors.js +68 -0
  394. package/dist/rules/simulator/expression/eval-errors.js.map +1 -0
  395. package/dist/rules/simulator/expression/evaluator.d.ts +43 -0
  396. package/dist/rules/simulator/expression/evaluator.d.ts.map +1 -0
  397. package/dist/rules/simulator/expression/evaluator.js +298 -0
  398. package/dist/rules/simulator/expression/evaluator.js.map +1 -0
  399. package/dist/rules/simulator/expression/lexer.d.ts +36 -0
  400. package/dist/rules/simulator/expression/lexer.d.ts.map +1 -0
  401. package/dist/rules/simulator/expression/lexer.js +318 -0
  402. package/dist/rules/simulator/expression/lexer.js.map +1 -0
  403. package/dist/rules/simulator/expression/parser.d.ts +39 -0
  404. package/dist/rules/simulator/expression/parser.d.ts.map +1 -0
  405. package/dist/rules/simulator/expression/parser.js +329 -0
  406. package/dist/rules/simulator/expression/parser.js.map +1 -0
  407. package/dist/rules/simulator/expression/types.d.ts +137 -0
  408. package/dist/rules/simulator/expression/types.d.ts.map +1 -0
  409. package/dist/rules/simulator/expression/types.js +90 -0
  410. package/dist/rules/simulator/expression/types.js.map +1 -0
  411. package/dist/rules/simulator/expression/walk-data.d.ts +52 -0
  412. package/dist/rules/simulator/expression/walk-data.d.ts.map +1 -0
  413. package/dist/rules/simulator/expression/walk-data.js +167 -0
  414. package/dist/rules/simulator/expression/walk-data.js.map +1 -0
  415. package/dist/rules/simulator/firestore-set.d.ts +25 -0
  416. package/dist/rules/simulator/firestore-set.d.ts.map +1 -0
  417. package/dist/rules/simulator/firestore-set.js +89 -0
  418. package/dist/rules/simulator/firestore-set.js.map +1 -0
  419. package/dist/rules/simulator/handler.d.ts +36 -0
  420. package/dist/rules/simulator/handler.d.ts.map +1 -0
  421. package/dist/rules/simulator/handler.js +583 -0
  422. package/dist/rules/simulator/handler.js.map +1 -0
  423. package/dist/rules/simulator/mapdiff.d.ts +29 -0
  424. package/dist/rules/simulator/mapdiff.d.ts.map +1 -0
  425. package/dist/rules/simulator/mapdiff.js +72 -0
  426. package/dist/rules/simulator/mapdiff.js.map +1 -0
  427. package/dist/rules/simulator/project-after-state.d.ts +33 -0
  428. package/dist/rules/simulator/project-after-state.d.ts.map +1 -0
  429. package/dist/rules/simulator/project-after-state.js +88 -0
  430. package/dist/rules/simulator/project-after-state.js.map +1 -0
  431. package/dist/rules/simulator/query-proof.d.ts +80 -0
  432. package/dist/rules/simulator/query-proof.d.ts.map +1 -0
  433. package/dist/rules/simulator/query-proof.js +142 -0
  434. package/dist/rules/simulator/query-proof.js.map +1 -0
  435. package/dist/rules/simulator/value-equality.d.ts +8 -0
  436. package/dist/rules/simulator/value-equality.d.ts.map +1 -0
  437. package/dist/rules/simulator/value-equality.js +40 -0
  438. package/dist/rules/simulator/value-equality.js.map +1 -0
  439. package/dist/rules/simulator/wrappers/base.d.ts +129 -0
  440. package/dist/rules/simulator/wrappers/base.d.ts.map +1 -0
  441. package/dist/rules/simulator/wrappers/base.js +90 -0
  442. package/dist/rules/simulator/wrappers/base.js.map +1 -0
  443. package/dist/rules/simulator/wrappers/bytes.d.ts +45 -0
  444. package/dist/rules/simulator/wrappers/bytes.d.ts.map +1 -0
  445. package/dist/rules/simulator/wrappers/bytes.js +130 -0
  446. package/dist/rules/simulator/wrappers/bytes.js.map +1 -0
  447. package/dist/rules/simulator/wrappers/duration.d.ts +76 -0
  448. package/dist/rules/simulator/wrappers/duration.d.ts.map +1 -0
  449. package/dist/rules/simulator/wrappers/duration.js +176 -0
  450. package/dist/rules/simulator/wrappers/duration.js.map +1 -0
  451. package/dist/rules/simulator/wrappers/float.d.ts +52 -0
  452. package/dist/rules/simulator/wrappers/float.d.ts.map +1 -0
  453. package/dist/rules/simulator/wrappers/float.js +88 -0
  454. package/dist/rules/simulator/wrappers/float.js.map +1 -0
  455. package/dist/rules/simulator/wrappers/latlng.d.ts +40 -0
  456. package/dist/rules/simulator/wrappers/latlng.d.ts.map +1 -0
  457. package/dist/rules/simulator/wrappers/latlng.js +100 -0
  458. package/dist/rules/simulator/wrappers/latlng.js.map +1 -0
  459. package/dist/rules/simulator/wrappers/path.d.ts +75 -0
  460. package/dist/rules/simulator/wrappers/path.d.ts.map +1 -0
  461. package/dist/rules/simulator/wrappers/path.js +158 -0
  462. package/dist/rules/simulator/wrappers/path.js.map +1 -0
  463. package/dist/rules/simulator/wrappers/reference.d.ts +82 -0
  464. package/dist/rules/simulator/wrappers/reference.d.ts.map +1 -0
  465. package/dist/rules/simulator/wrappers/reference.js +145 -0
  466. package/dist/rules/simulator/wrappers/reference.js.map +1 -0
  467. package/dist/rules/simulator/wrappers/timestamp.d.ts +86 -0
  468. package/dist/rules/simulator/wrappers/timestamp.d.ts.map +1 -0
  469. package/dist/rules/simulator/wrappers/timestamp.js +207 -0
  470. package/dist/rules/simulator/wrappers/timestamp.js.map +1 -0
  471. package/dist/rules/simulator/wrappers/vector.d.ts +43 -0
  472. package/dist/rules/simulator/wrappers/vector.d.ts.map +1 -0
  473. package/dist/rules/simulator/wrappers/vector.js +80 -0
  474. package/dist/rules/simulator/wrappers/vector.js.map +1 -0
  475. package/dist/rules/simulator-tools-impl.d.ts +64 -0
  476. package/dist/rules/simulator-tools-impl.d.ts.map +1 -0
  477. package/dist/rules/simulator-tools-impl.js +462 -0
  478. package/dist/rules/simulator-tools-impl.js.map +1 -0
  479. package/dist/rules/simulator.d.ts +20 -0
  480. package/dist/rules/simulator.d.ts.map +1 -0
  481. package/dist/rules/simulator.js +24 -0
  482. package/dist/rules/simulator.js.map +1 -0
  483. package/dist/rules/stdlib-modules.d.ts +73 -0
  484. package/dist/rules/stdlib-modules.d.ts.map +1 -0
  485. package/dist/rules/stdlib-modules.js +849 -0
  486. package/dist/rules/stdlib-modules.js.map +1 -0
  487. package/dist/rules/stdlib-tools.d.ts +19 -0
  488. package/dist/rules/stdlib-tools.d.ts.map +1 -0
  489. package/dist/rules/stdlib-tools.js +164 -0
  490. package/dist/rules/stdlib-tools.js.map +1 -0
  491. package/dist/rules/test/handler.d.ts +9 -0
  492. package/dist/rules/test/handler.d.ts.map +1 -0
  493. package/dist/rules/test/handler.js +124 -0
  494. package/dist/rules/test/handler.js.map +1 -0
  495. package/dist/rules/test/spec.d.ts +517 -0
  496. package/dist/rules/test/spec.d.ts.map +1 -0
  497. package/dist/rules/test/spec.js +227 -0
  498. package/dist/rules/test/spec.js.map +1 -0
  499. package/dist/rules/tools.d.ts +41 -0
  500. package/dist/rules/tools.d.ts.map +1 -0
  501. package/dist/rules/tools.js +124 -0
  502. package/dist/rules/tools.js.map +1 -0
  503. package/dist/rules/write/handler.d.ts +6 -0
  504. package/dist/rules/write/handler.d.ts.map +1 -0
  505. package/dist/rules/write/handler.js +126 -0
  506. package/dist/rules/write/handler.js.map +1 -0
  507. package/dist/rules/write/spec.d.ts +28 -0
  508. package/dist/rules/write/spec.d.ts.map +1 -0
  509. package/dist/rules/write/spec.js +2 -0
  510. package/dist/rules/write/spec.js.map +1 -0
  511. package/dist/sandbox/admin-compat.d.ts +20 -0
  512. package/dist/sandbox/admin-compat.d.ts.map +1 -0
  513. package/dist/sandbox/admin-compat.js +19 -0
  514. package/dist/sandbox/admin-compat.js.map +1 -0
  515. package/dist/sandbox/admin-firestore/error-translation.d.ts +86 -0
  516. package/dist/sandbox/admin-firestore/error-translation.d.ts.map +1 -0
  517. package/dist/sandbox/admin-firestore/error-translation.js +204 -0
  518. package/dist/sandbox/admin-firestore/error-translation.js.map +1 -0
  519. package/dist/sandbox/admin-firestore/index.d.ts +169 -0
  520. package/dist/sandbox/admin-firestore/index.d.ts.map +1 -0
  521. package/dist/sandbox/admin-firestore/index.js +456 -0
  522. package/dist/sandbox/admin-firestore/index.js.map +1 -0
  523. package/dist/sandbox/admin-firestore/remote.d.ts +97 -0
  524. package/dist/sandbox/admin-firestore/remote.d.ts.map +1 -0
  525. package/dist/sandbox/admin-firestore/remote.js +735 -0
  526. package/dist/sandbox/admin-firestore/remote.js.map +1 -0
  527. package/dist/sandbox/branches/index.d.ts +141 -0
  528. package/dist/sandbox/branches/index.d.ts.map +1 -0
  529. package/dist/sandbox/branches/index.js +327 -0
  530. package/dist/sandbox/branches/index.js.map +1 -0
  531. package/dist/sandbox/firestore/admin-compat/batch.d.ts +34 -0
  532. package/dist/sandbox/firestore/admin-compat/batch.d.ts.map +1 -0
  533. package/dist/sandbox/firestore/admin-compat/batch.js +73 -0
  534. package/dist/sandbox/firestore/admin-compat/batch.js.map +1 -0
  535. package/dist/sandbox/firestore/admin-compat/doc-ref.d.ts +38 -0
  536. package/dist/sandbox/firestore/admin-compat/doc-ref.d.ts.map +1 -0
  537. package/dist/sandbox/firestore/admin-compat/doc-ref.js +154 -0
  538. package/dist/sandbox/firestore/admin-compat/doc-ref.js.map +1 -0
  539. package/dist/sandbox/firestore/admin-compat/firestore.d.ts +45 -0
  540. package/dist/sandbox/firestore/admin-compat/firestore.d.ts.map +1 -0
  541. package/dist/sandbox/firestore/admin-compat/firestore.js +114 -0
  542. package/dist/sandbox/firestore/admin-compat/firestore.js.map +1 -0
  543. package/dist/sandbox/firestore/admin-compat/index.d.ts +45 -0
  544. package/dist/sandbox/firestore/admin-compat/index.d.ts.map +1 -0
  545. package/dist/sandbox/firestore/admin-compat/index.js +27 -0
  546. package/dist/sandbox/firestore/admin-compat/index.js.map +1 -0
  547. package/dist/sandbox/firestore/admin-compat/paths.d.ts +37 -0
  548. package/dist/sandbox/firestore/admin-compat/paths.d.ts.map +1 -0
  549. package/dist/sandbox/firestore/admin-compat/paths.js +49 -0
  550. package/dist/sandbox/firestore/admin-compat/paths.js.map +1 -0
  551. package/dist/sandbox/firestore/admin-compat/query.d.ts +261 -0
  552. package/dist/sandbox/firestore/admin-compat/query.d.ts.map +1 -0
  553. package/dist/sandbox/firestore/admin-compat/query.js +704 -0
  554. package/dist/sandbox/firestore/admin-compat/query.js.map +1 -0
  555. package/dist/sandbox/firestore/admin-compat/read-translation.d.ts +8 -0
  556. package/dist/sandbox/firestore/admin-compat/read-translation.d.ts.map +1 -0
  557. package/dist/sandbox/firestore/admin-compat/read-translation.js +59 -0
  558. package/dist/sandbox/firestore/admin-compat/read-translation.js.map +1 -0
  559. package/dist/sandbox/firestore/admin-compat/snapshots.d.ts +39 -0
  560. package/dist/sandbox/firestore/admin-compat/snapshots.d.ts.map +1 -0
  561. package/dist/sandbox/firestore/admin-compat/snapshots.js +50 -0
  562. package/dist/sandbox/firestore/admin-compat/snapshots.js.map +1 -0
  563. package/dist/sandbox/firestore/admin-compat/transaction.d.ts +35 -0
  564. package/dist/sandbox/firestore/admin-compat/transaction.d.ts.map +1 -0
  565. package/dist/sandbox/firestore/admin-compat/transaction.js +88 -0
  566. package/dist/sandbox/firestore/admin-compat/transaction.js.map +1 -0
  567. package/dist/sandbox/firestore/admin-compat/types.d.ts +297 -0
  568. package/dist/sandbox/firestore/admin-compat/types.d.ts.map +1 -0
  569. package/dist/sandbox/firestore/admin-compat/types.js +127 -0
  570. package/dist/sandbox/firestore/admin-compat/types.js.map +1 -0
  571. package/dist/sandbox/firestore/admin-compat/value-order.d.ts +49 -0
  572. package/dist/sandbox/firestore/admin-compat/value-order.d.ts.map +1 -0
  573. package/dist/sandbox/firestore/admin-compat/value-order.js +172 -0
  574. package/dist/sandbox/firestore/admin-compat/value-order.js.map +1 -0
  575. package/dist/sandbox/firestore/auto-id.d.ts +26 -0
  576. package/dist/sandbox/firestore/auto-id.d.ts.map +1 -0
  577. package/dist/sandbox/firestore/auto-id.js +36 -0
  578. package/dist/sandbox/firestore/auto-id.js.map +1 -0
  579. package/dist/sandbox/firestore/converters/bytes-geopoint.d.ts +48 -0
  580. package/dist/sandbox/firestore/converters/bytes-geopoint.d.ts.map +1 -0
  581. package/dist/sandbox/firestore/converters/bytes-geopoint.js +85 -0
  582. package/dist/sandbox/firestore/converters/bytes-geopoint.js.map +1 -0
  583. package/dist/sandbox/firestore/converters/fieldvalue.d.ts +69 -0
  584. package/dist/sandbox/firestore/converters/fieldvalue.d.ts.map +1 -0
  585. package/dist/sandbox/firestore/converters/fieldvalue.js +166 -0
  586. package/dist/sandbox/firestore/converters/fieldvalue.js.map +1 -0
  587. package/dist/sandbox/firestore/converters/reference.d.ts +31 -0
  588. package/dist/sandbox/firestore/converters/reference.d.ts.map +1 -0
  589. package/dist/sandbox/firestore/converters/reference.js +51 -0
  590. package/dist/sandbox/firestore/converters/reference.js.map +1 -0
  591. package/dist/sandbox/firestore/converters/timestamp.d.ts +32 -0
  592. package/dist/sandbox/firestore/converters/timestamp.d.ts.map +1 -0
  593. package/dist/sandbox/firestore/converters/timestamp.js +63 -0
  594. package/dist/sandbox/firestore/converters/timestamp.js.map +1 -0
  595. package/dist/sandbox/firestore/converters/user-timestamp.d.ts +46 -0
  596. package/dist/sandbox/firestore/converters/user-timestamp.d.ts.map +1 -0
  597. package/dist/sandbox/firestore/converters/user-timestamp.js +65 -0
  598. package/dist/sandbox/firestore/converters/user-timestamp.js.map +1 -0
  599. package/dist/sandbox/firestore/converters/vector.d.ts +24 -0
  600. package/dist/sandbox/firestore/converters/vector.d.ts.map +1 -0
  601. package/dist/sandbox/firestore/converters/vector.js +53 -0
  602. package/dist/sandbox/firestore/converters/vector.js.map +1 -0
  603. package/dist/sandbox/firestore/errors.d.ts +82 -0
  604. package/dist/sandbox/firestore/errors.d.ts.map +1 -0
  605. package/dist/sandbox/firestore/errors.js +54 -0
  606. package/dist/sandbox/firestore/errors.js.map +1 -0
  607. package/dist/sandbox/firestore/event-log.d.ts +99 -0
  608. package/dist/sandbox/firestore/event-log.d.ts.map +1 -0
  609. package/dist/sandbox/firestore/event-log.js +67 -0
  610. package/dist/sandbox/firestore/event-log.js.map +1 -0
  611. package/dist/sandbox/firestore/field-merge.d.ts +64 -0
  612. package/dist/sandbox/firestore/field-merge.d.ts.map +1 -0
  613. package/dist/sandbox/firestore/field-merge.js +221 -0
  614. package/dist/sandbox/firestore/field-merge.js.map +1 -0
  615. package/dist/sandbox/firestore/list-query-proof.d.ts +77 -0
  616. package/dist/sandbox/firestore/list-query-proof.d.ts.map +1 -0
  617. package/dist/sandbox/firestore/list-query-proof.js +170 -0
  618. package/dist/sandbox/firestore/list-query-proof.js.map +1 -0
  619. package/dist/sandbox/firestore/local-environment.d.ts +806 -0
  620. package/dist/sandbox/firestore/local-environment.d.ts.map +1 -0
  621. package/dist/sandbox/firestore/local-environment.js +3028 -0
  622. package/dist/sandbox/firestore/local-environment.js.map +1 -0
  623. package/dist/sandbox/firestore/local-state.d.ts +196 -0
  624. package/dist/sandbox/firestore/local-state.d.ts.map +1 -0
  625. package/dist/sandbox/firestore/local-state.js +413 -0
  626. package/dist/sandbox/firestore/local-state.js.map +1 -0
  627. package/dist/sandbox/firestore/overlay-backing.d.ts +44 -0
  628. package/dist/sandbox/firestore/overlay-backing.d.ts.map +1 -0
  629. package/dist/sandbox/firestore/overlay-backing.js +82 -0
  630. package/dist/sandbox/firestore/overlay-backing.js.map +1 -0
  631. package/dist/sandbox/firestore/sentinel-capture.d.ts +30 -0
  632. package/dist/sandbox/firestore/sentinel-capture.d.ts.map +1 -0
  633. package/dist/sandbox/firestore/sentinel-capture.js +61 -0
  634. package/dist/sandbox/firestore/sentinel-capture.js.map +1 -0
  635. package/dist/sandbox/firestore/snapshot-listeners.d.ts +284 -0
  636. package/dist/sandbox/firestore/snapshot-listeners.d.ts.map +1 -0
  637. package/dist/sandbox/firestore/snapshot-listeners.js +194 -0
  638. package/dist/sandbox/firestore/snapshot-listeners.js.map +1 -0
  639. package/dist/sandbox/firestore/topk.d.ts +12 -0
  640. package/dist/sandbox/firestore/topk.d.ts.map +1 -0
  641. package/dist/sandbox/firestore/topk.js +42 -0
  642. package/dist/sandbox/firestore/topk.js.map +1 -0
  643. package/dist/sandbox/firestore/transaction-merge.d.ts +55 -0
  644. package/dist/sandbox/firestore/transaction-merge.d.ts.map +1 -0
  645. package/dist/sandbox/firestore/transaction-merge.js +107 -0
  646. package/dist/sandbox/firestore/transaction-merge.js.map +1 -0
  647. package/dist/sandbox/firestore/transaction-types.d.ts +152 -0
  648. package/dist/sandbox/firestore/transaction-types.d.ts.map +1 -0
  649. package/dist/sandbox/firestore/transaction-types.js +10 -0
  650. package/dist/sandbox/firestore/transaction-types.js.map +1 -0
  651. package/dist/sandbox/firestore/transaction.d.ts +79 -0
  652. package/dist/sandbox/firestore/transaction.d.ts.map +1 -0
  653. package/dist/sandbox/firestore/transaction.js +95 -0
  654. package/dist/sandbox/firestore/transaction.js.map +1 -0
  655. package/dist/sandbox/firestore/value-equality.d.ts +2 -0
  656. package/dist/sandbox/firestore/value-equality.d.ts.map +1 -0
  657. package/dist/sandbox/firestore/value-equality.js +35 -0
  658. package/dist/sandbox/firestore/value-equality.js.map +1 -0
  659. package/dist/sandbox/firestore/value-resolver.d.ts +172 -0
  660. package/dist/sandbox/firestore/value-resolver.d.ts.map +1 -0
  661. package/dist/sandbox/firestore/value-resolver.js +221 -0
  662. package/dist/sandbox/firestore/value-resolver.js.map +1 -0
  663. package/dist/sandbox/firestore/wire-encoder.d.ts +14 -0
  664. package/dist/sandbox/firestore/wire-encoder.d.ts.map +1 -0
  665. package/dist/sandbox/firestore/wire-encoder.js +130 -0
  666. package/dist/sandbox/firestore/wire-encoder.js.map +1 -0
  667. package/dist/sandbox/index.d.ts +50 -0
  668. package/dist/sandbox/index.d.ts.map +1 -0
  669. package/dist/sandbox/index.js +63 -0
  670. package/dist/sandbox/index.js.map +1 -0
  671. package/dist/sandbox/internal/index.d.ts +36 -0
  672. package/dist/sandbox/internal/index.d.ts.map +1 -0
  673. package/dist/sandbox/internal/index.js +72 -0
  674. package/dist/sandbox/internal/index.js.map +1 -0
  675. package/dist/sandbox/internal/sandbox-impl.d.ts +343 -0
  676. package/dist/sandbox/internal/sandbox-impl.d.ts.map +1 -0
  677. package/dist/sandbox/internal/sandbox-impl.js +718 -0
  678. package/dist/sandbox/internal/sandbox-impl.js.map +1 -0
  679. package/dist/sandbox/persistence/backends.d.ts +37 -0
  680. package/dist/sandbox/persistence/backends.d.ts.map +1 -0
  681. package/dist/sandbox/persistence/backends.js +202 -0
  682. package/dist/sandbox/persistence/backends.js.map +1 -0
  683. package/dist/sandbox/persistence/chunk-format.d.ts +58 -0
  684. package/dist/sandbox/persistence/chunk-format.d.ts.map +1 -0
  685. package/dist/sandbox/persistence/chunk-format.js +163 -0
  686. package/dist/sandbox/persistence/chunk-format.js.map +1 -0
  687. package/dist/sandbox/persistence/controller.d.ts +39 -0
  688. package/dist/sandbox/persistence/controller.d.ts.map +1 -0
  689. package/dist/sandbox/persistence/controller.js +605 -0
  690. package/dist/sandbox/persistence/controller.js.map +1 -0
  691. package/dist/sandbox/persistence/index.d.ts +13 -0
  692. package/dist/sandbox/persistence/index.d.ts.map +1 -0
  693. package/dist/sandbox/persistence/index.js +5 -0
  694. package/dist/sandbox/persistence/index.js.map +1 -0
  695. package/dist/sandbox/persistence/serialize.d.ts +53 -0
  696. package/dist/sandbox/persistence/serialize.d.ts.map +1 -0
  697. package/dist/sandbox/persistence/serialize.js +98 -0
  698. package/dist/sandbox/persistence/serialize.js.map +1 -0
  699. package/dist/sandbox/persistence/types.d.ts +118 -0
  700. package/dist/sandbox/persistence/types.d.ts.map +1 -0
  701. package/dist/sandbox/persistence/types.js +15 -0
  702. package/dist/sandbox/persistence/types.js.map +1 -0
  703. package/dist/sandbox/remote.d.ts +118 -0
  704. package/dist/sandbox/remote.d.ts.map +1 -0
  705. package/dist/sandbox/remote.js +60 -0
  706. package/dist/sandbox/remote.js.map +1 -0
  707. package/dist/sandbox/replay/index.d.ts +106 -0
  708. package/dist/sandbox/replay/index.d.ts.map +1 -0
  709. package/dist/sandbox/replay/index.js +246 -0
  710. package/dist/sandbox/replay/index.js.map +1 -0
  711. package/dist/sandbox/sandbox-context.d.ts +40 -0
  712. package/dist/sandbox/sandbox-context.d.ts.map +1 -0
  713. package/dist/sandbox/sandbox-context.js +72 -0
  714. package/dist/sandbox/sandbox-context.js.map +1 -0
  715. package/dist/sandbox/tab-sync/index.d.ts +120 -0
  716. package/dist/sandbox/tab-sync/index.d.ts.map +1 -0
  717. package/dist/sandbox/tab-sync/index.js +272 -0
  718. package/dist/sandbox/tab-sync/index.js.map +1 -0
  719. package/dist/sandbox/types.d.ts +1235 -0
  720. package/dist/sandbox/types.d.ts.map +1 -0
  721. package/dist/sandbox/types.js +46 -0
  722. package/dist/sandbox/types.js.map +1 -0
  723. package/dist/storage/admin/api.d.ts +206 -0
  724. package/dist/storage/admin/api.d.ts.map +1 -0
  725. package/dist/storage/admin/api.js +349 -0
  726. package/dist/storage/admin/api.js.map +1 -0
  727. package/dist/storage/admin/handler.d.ts +29 -0
  728. package/dist/storage/admin/handler.d.ts.map +1 -0
  729. package/dist/storage/admin/handler.js +82 -0
  730. package/dist/storage/admin/handler.js.map +1 -0
  731. package/dist/storage/admin/spec.d.ts +64 -0
  732. package/dist/storage/admin/spec.d.ts.map +1 -0
  733. package/dist/storage/admin/spec.js +8 -0
  734. package/dist/storage/admin/spec.js.map +1 -0
  735. package/dist/storage/admin/tools.d.ts +23 -0
  736. package/dist/storage/admin/tools.d.ts.map +1 -0
  737. package/dist/storage/admin/tools.js +90 -0
  738. package/dist/storage/admin/tools.js.map +1 -0
  739. package/dist/storage/download.d.ts +27 -0
  740. package/dist/storage/download.d.ts.map +1 -0
  741. package/dist/storage/download.js +136 -0
  742. package/dist/storage/download.js.map +1 -0
  743. package/dist/storage/enforce.d.ts +26 -0
  744. package/dist/storage/enforce.d.ts.map +1 -0
  745. package/dist/storage/enforce.js +16 -0
  746. package/dist/storage/enforce.js.map +1 -0
  747. package/dist/storage/errors.d.ts +46 -0
  748. package/dist/storage/errors.d.ts.map +1 -0
  749. package/dist/storage/errors.js +62 -0
  750. package/dist/storage/errors.js.map +1 -0
  751. package/dist/storage/index.d.ts +49 -0
  752. package/dist/storage/index.d.ts.map +1 -0
  753. package/dist/storage/index.js +60 -0
  754. package/dist/storage/index.js.map +1 -0
  755. package/dist/storage/internal.d.ts +18 -0
  756. package/dist/storage/internal.d.ts.map +1 -0
  757. package/dist/storage/internal.js +18 -0
  758. package/dist/storage/internal.js.map +1 -0
  759. package/dist/storage/list.d.ts +17 -0
  760. package/dist/storage/list.d.ts.map +1 -0
  761. package/dist/storage/list.js +91 -0
  762. package/dist/storage/list.js.map +1 -0
  763. package/dist/storage/metadata.d.ts +86 -0
  764. package/dist/storage/metadata.d.ts.map +1 -0
  765. package/dist/storage/metadata.js +167 -0
  766. package/dist/storage/metadata.js.map +1 -0
  767. package/dist/storage/persistence.d.ts +134 -0
  768. package/dist/storage/persistence.d.ts.map +1 -0
  769. package/dist/storage/persistence.js +132 -0
  770. package/dist/storage/persistence.js.map +1 -0
  771. package/dist/storage/reference.d.ts +63 -0
  772. package/dist/storage/reference.d.ts.map +1 -0
  773. package/dist/storage/reference.js +156 -0
  774. package/dist/storage/reference.js.map +1 -0
  775. package/dist/storage/rules.d.ts +176 -0
  776. package/dist/storage/rules.d.ts.map +1 -0
  777. package/dist/storage/rules.js +621 -0
  778. package/dist/storage/rules.js.map +1 -0
  779. package/dist/storage/service.d.ts +139 -0
  780. package/dist/storage/service.d.ts.map +1 -0
  781. package/dist/storage/service.js +241 -0
  782. package/dist/storage/service.js.map +1 -0
  783. package/dist/storage/upload.d.ts +43 -0
  784. package/dist/storage/upload.d.ts.map +1 -0
  785. package/dist/storage/upload.js +235 -0
  786. package/dist/storage/upload.js.map +1 -0
  787. package/package.json +110 -3
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Item 6 — typed error codes for `LocalEnvironment` results.
3
+ *
4
+ * The simulator previously surfaced denials as `allowed: false` plus an
5
+ * unstructured `debugMessages: string[]`. Agents had to grep the string
6
+ * to tell "rule denied" apart from "doc didn't exist" apart from "the
7
+ * sentinel was rejected", which is exactly the affordance Firestore's
8
+ * `FirestoreError.code` gives them in production.
9
+ *
10
+ * The codes here are the canonical set the firebase-admin SDK throws
11
+ * (a subset of gRPC status names). They're string-literal values so
12
+ * downstream consumers can switch on them without importing an enum.
13
+ *
14
+ * Mapping the simulator emits today (Item 6 first cut):
15
+ * - rule denied → 'permission-denied'
16
+ * - update of missing doc → 'not-found'
17
+ * - create of existing doc → 'already-exists'
18
+ * - sentinel-resolution failure → 'invalid-argument'
19
+ * (admin SDK also throws this for malformed FieldValue use; see
20
+ * the increment converter's "prior is not numeric" path)
21
+ *
22
+ * Codes defined-but-unused today (`failed-precondition`,
23
+ * `unauthenticated`) are reserved so adding their wiring later is a
24
+ * pure callsite change, no error-set churn.
25
+ */
26
+ export declare const FIRESTORE_ERROR_CODES: readonly ["permission-denied", "not-found", "already-exists", "failed-precondition", "invalid-argument", "unauthenticated", "unimplemented"];
27
+ export type FirestoreErrorCode = typeof FIRESTORE_ERROR_CODES[number];
28
+ /**
29
+ * Eval-time request shape, populated on `permission-denied` so callers
30
+ * can inspect exactly what the rule saw — `request.auth`, the operation
31
+ * method+path, and (for writes) the resolved `request.resource.data`.
32
+ *
33
+ * Sentinels in `resourceData` are resolved (e.g., `serverTimestamp()` →
34
+ * Timestamp), matching what the rule actually evaluated against.
35
+ */
36
+ export interface FirestoreEvalRequest {
37
+ method: 'get' | 'list' | 'create' | 'update' | 'delete';
38
+ path: string;
39
+ auth: {
40
+ uid: string;
41
+ token?: Record<string, unknown>;
42
+ } | null;
43
+ /** `request.resource.data` after sentinel resolution. Absent for reads. */
44
+ resourceData?: Record<string, unknown>;
45
+ }
46
+ /**
47
+ * Eval-time existing-document state, populated on `permission-denied`
48
+ * for doc operations so callers can see what `resource.data` evaluated
49
+ * to. `null` data with `exists: false` mirrors how Firestore rules see
50
+ * an absent document (resource itself is null).
51
+ */
52
+ export interface FirestoreEvalResource {
53
+ data: Record<string, unknown> | null;
54
+ exists: boolean;
55
+ }
56
+ export interface FirestoreSimError {
57
+ code: FirestoreErrorCode;
58
+ message: string;
59
+ /**
60
+ * Eval-time request shape — populated for `permission-denied` so
61
+ * callers don't have to re-derive `request.auth` / `request.resource`
62
+ * from out-of-band state. Absent for non-denial codes.
63
+ */
64
+ request?: FirestoreEvalRequest;
65
+ /**
66
+ * Eval-time existing doc — populated for `permission-denied` on
67
+ * single-doc operations. Absent for collection ops (`list`) and
68
+ * non-denial codes.
69
+ */
70
+ resource?: FirestoreEvalResource;
71
+ }
72
+ /**
73
+ * Build a structured error record. The optional `extras` carries
74
+ * eval-time context that downstream layers (admin-compat, sandbox,
75
+ * playground) surface so a denial reads like a debugger frame instead
76
+ * of an opaque "denied by rules".
77
+ */
78
+ export declare function makeError(code: FirestoreErrorCode, message: string, extras?: {
79
+ request?: FirestoreEvalRequest;
80
+ resource?: FirestoreEvalResource;
81
+ }): FirestoreSimError;
82
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,eAAO,MAAM,qBAAqB,8IAaxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAEtE;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9D,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAA;CAAE,GAC5E,iBAAiB,CAKnB"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Item 6 — typed error codes for `LocalEnvironment` results.
3
+ *
4
+ * The simulator previously surfaced denials as `allowed: false` plus an
5
+ * unstructured `debugMessages: string[]`. Agents had to grep the string
6
+ * to tell "rule denied" apart from "doc didn't exist" apart from "the
7
+ * sentinel was rejected", which is exactly the affordance Firestore's
8
+ * `FirestoreError.code` gives them in production.
9
+ *
10
+ * The codes here are the canonical set the firebase-admin SDK throws
11
+ * (a subset of gRPC status names). They're string-literal values so
12
+ * downstream consumers can switch on them without importing an enum.
13
+ *
14
+ * Mapping the simulator emits today (Item 6 first cut):
15
+ * - rule denied → 'permission-denied'
16
+ * - update of missing doc → 'not-found'
17
+ * - create of existing doc → 'already-exists'
18
+ * - sentinel-resolution failure → 'invalid-argument'
19
+ * (admin SDK also throws this for malformed FieldValue use; see
20
+ * the increment converter's "prior is not numeric" path)
21
+ *
22
+ * Codes defined-but-unused today (`failed-precondition`,
23
+ * `unauthenticated`) are reserved so adding their wiring later is a
24
+ * pure callsite change, no error-set churn.
25
+ */
26
+ export const FIRESTORE_ERROR_CODES = [
27
+ 'permission-denied',
28
+ 'not-found',
29
+ 'already-exists',
30
+ 'failed-precondition',
31
+ 'invalid-argument',
32
+ 'unauthenticated',
33
+ // 'unimplemented' is the gRPC status the real Admin SDK throws for
34
+ // surfaces it doesn't implement. The admin-compat wrapper uses it for
35
+ // (a) slice-1-stub methods that aren't wired yet, and (b) typed-value
36
+ // inputs (GeoPoint/Bytes/Vector/DocumentReference) the simulator
37
+ // doesn't yet accept — both lit up incrementally as parity work lands.
38
+ 'unimplemented',
39
+ ];
40
+ /**
41
+ * Build a structured error record. The optional `extras` carries
42
+ * eval-time context that downstream layers (admin-compat, sandbox,
43
+ * playground) surface so a denial reads like a debugger frame instead
44
+ * of an opaque "denied by rules".
45
+ */
46
+ export function makeError(code, message, extras) {
47
+ const out = { code, message };
48
+ if (extras?.request)
49
+ out.request = extras.request;
50
+ if (extras?.resource)
51
+ out.resource = extras.resource;
52
+ return out;
53
+ }
54
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,mBAAmB;IACnB,WAAW;IACX,gBAAgB;IAChB,qBAAqB;IACrB,kBAAkB;IAClB,iBAAiB;IACjB,mEAAmE;IACnE,sEAAsE;IACtE,sEAAsE;IACtE,iEAAiE;IACjE,uEAAuE;IACvE,eAAe;CACP,CAAC;AAgDX;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACvB,IAAwB,EACxB,OAAe,EACf,MAA6E;IAE7E,MAAM,GAAG,GAAsB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACjD,IAAI,MAAM,EAAE,OAAO;QAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAClD,IAAI,MAAM,EAAE,QAAQ;QAAE,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACrD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Event Log — append-only audit trail for the local environment.
3
+ *
4
+ * Every operation (allowed or denied) is recorded. Undo is implemented
5
+ * via state snapshots — no need to replay events.
6
+ */
7
+ import type { DocumentData } from './local-state.js';
8
+ export interface AgentEvent {
9
+ id: number;
10
+ timestamp: string;
11
+ type: 'single' | 'batch' | 'transaction';
12
+ method: string;
13
+ path: string;
14
+ auth: {
15
+ uid: string;
16
+ } | null;
17
+ allowed: boolean;
18
+ /** For writes: the data that was written */
19
+ data?: DocumentData;
20
+ /** For batch/transaction: individual operations */
21
+ operations?: Array<{
22
+ method: string;
23
+ path: string;
24
+ data?: DocumentData;
25
+ allowed: boolean;
26
+ }>;
27
+ /**
28
+ * For transactions: the read-set captured by tx.get / tx.getAll inside
29
+ * the callback. Surfaced for diagnostic value (production doesn't
30
+ * expose this, but agents debugging "why did my tx commit nothing"
31
+ * benefit from seeing what the callback saw).
32
+ */
33
+ reads?: Array<{
34
+ path: string;
35
+ data: DocumentData | null;
36
+ }>;
37
+ /**
38
+ * For transactions: true iff the callback threw (read-after-write
39
+ * violation, ambiguous post-delete, or any user error). Aborted
40
+ * transactions are NOT undoable — they had no effect, popping them as
41
+ * undoable would skip a real prior write.
42
+ */
43
+ aborted?: boolean;
44
+ /**
45
+ * For transactions: the error that aborted the callback (when
46
+ * `aborted: true`). Recorded for forensic value; the original Error
47
+ * is also re-thrown synchronously to the caller (probe 0.G —
48
+ * exceptions propagate unchanged).
49
+ */
50
+ error?: {
51
+ name: string;
52
+ message: string;
53
+ code?: string;
54
+ };
55
+ /**
56
+ * Prior state of the AFFECTED paths only, captured before this event, for
57
+ * undo (single-write + batch). `null` means the doc did not exist (undo
58
+ * deletes it). Replaces the whole-keyspace {@link snapshot} for the common
59
+ * write paths so the undo stack is O(affected) not O(keyspace).
60
+ */
61
+ priorDocs?: Record<string, DocumentData | null>;
62
+ /**
63
+ * Whole-keyspace snapshot BEFORE this event (for undo). Still used by
64
+ * transactions, whose affected paths aren't known until the callback runs.
65
+ */
66
+ snapshot?: Record<string, DocumentData>;
67
+ /** Debug messages from rules evaluation */
68
+ debugMessages: string[];
69
+ }
70
+ export declare class EventLog {
71
+ private events;
72
+ private nextId;
73
+ private undoneEvents;
74
+ /** Append an event. Clears redo stack unless preserveRedo is true. */
75
+ append(event: Omit<AgentEvent, 'id' | 'timestamp'>, preserveRedo?: boolean): AgentEvent;
76
+ /** Get all events. */
77
+ getEvents(): AgentEvent[];
78
+ /** Get write events only (create, update, delete, set — not reads). */
79
+ getWriteEvents(): AgentEvent[];
80
+ /** Get the last write event (for undo). */
81
+ lastWriteEvent(): AgentEvent | null;
82
+ /**
83
+ * Pop the last write event for undo. Pushes to redo stack.
84
+ *
85
+ * Aborted transactions are skipped — they had no effect on state, so
86
+ * popping one as if it were undoable would silently leave a real
87
+ * prior write in place while the agent thinks it has been reverted.
88
+ * Aborted events stay in the log for forensic value (`getEvents()`
89
+ * still returns them) but do not enter the undo stack.
90
+ */
91
+ popLastWrite(): AgentEvent | null;
92
+ /** Get the last undone event (for redo). */
93
+ popLastUndo(): AgentEvent | null;
94
+ /** Total event count. */
95
+ size(): number;
96
+ /** Clear all events. */
97
+ clear(): void;
98
+ }
99
+ //# sourceMappingURL=event-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-log.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/event-log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,mDAAmD;IACnD,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,YAAY,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;IACH;;;;;OAKG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC3D;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,2CAA2C;IAC3C,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,YAAY,CAAoB;IAExC,sEAAsE;IACtE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,EAAE,YAAY,UAAQ,GAAG,UAAU;IAWrF,sBAAsB;IACtB,SAAS,IAAI,UAAU,EAAE;IAIzB,uEAAuE;IACvE,cAAc,IAAI,UAAU,EAAE;IAI9B,2CAA2C;IAC3C,cAAc,IAAI,UAAU,GAAG,IAAI;IAKnC;;;;;;;;OAQG;IACH,YAAY,IAAI,UAAU,GAAG,IAAI;IAajC,4CAA4C;IAC5C,WAAW,IAAI,UAAU,GAAG,IAAI;IAIhC,yBAAyB;IACzB,IAAI,IAAI,MAAM;IAId,wBAAwB;IACxB,KAAK,IAAI,IAAI;CAKd"}
@@ -0,0 +1,67 @@
1
+ export class EventLog {
2
+ events = [];
3
+ nextId = 1;
4
+ undoneEvents = [];
5
+ /** Append an event. Clears redo stack unless preserveRedo is true. */
6
+ append(event, preserveRedo = false) {
7
+ const full = {
8
+ ...event,
9
+ id: this.nextId++,
10
+ timestamp: new Date().toISOString(),
11
+ };
12
+ this.events.push(full);
13
+ if (!preserveRedo)
14
+ this.undoneEvents = [];
15
+ return full;
16
+ }
17
+ /** Get all events. */
18
+ getEvents() {
19
+ return [...this.events];
20
+ }
21
+ /** Get write events only (create, update, delete, set — not reads). */
22
+ getWriteEvents() {
23
+ return this.events.filter(e => e.allowed && e.method !== 'get' && e.method !== 'list');
24
+ }
25
+ /** Get the last write event (for undo). */
26
+ lastWriteEvent() {
27
+ const writes = this.getWriteEvents();
28
+ return writes.length > 0 ? writes[writes.length - 1] : null;
29
+ }
30
+ /**
31
+ * Pop the last write event for undo. Pushes to redo stack.
32
+ *
33
+ * Aborted transactions are skipped — they had no effect on state, so
34
+ * popping one as if it were undoable would silently leave a real
35
+ * prior write in place while the agent thinks it has been reverted.
36
+ * Aborted events stay in the log for forensic value (`getEvents()`
37
+ * still returns them) but do not enter the undo stack.
38
+ */
39
+ popLastWrite() {
40
+ for (let i = this.events.length - 1; i >= 0; i--) {
41
+ const e = this.events[i];
42
+ if (e.aborted)
43
+ continue;
44
+ if (e.allowed && e.method !== 'get' && e.method !== 'list') {
45
+ this.events.splice(i, 1);
46
+ this.undoneEvents.push(e);
47
+ return e;
48
+ }
49
+ }
50
+ return null;
51
+ }
52
+ /** Get the last undone event (for redo). */
53
+ popLastUndo() {
54
+ return this.undoneEvents.pop() ?? null;
55
+ }
56
+ /** Total event count. */
57
+ size() {
58
+ return this.events.length;
59
+ }
60
+ /** Clear all events. */
61
+ clear() {
62
+ this.events = [];
63
+ this.undoneEvents = [];
64
+ this.nextId = 1;
65
+ }
66
+ }
67
+ //# sourceMappingURL=event-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-log.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/event-log.ts"],"names":[],"mappings":"AA8DA,MAAM,OAAO,QAAQ;IACX,MAAM,GAAiB,EAAE,CAAC;IAC1B,MAAM,GAAG,CAAC,CAAC;IACX,YAAY,GAAiB,EAAE,CAAC;IAExC,sEAAsE;IACtE,MAAM,CAAC,KAA2C,EAAE,YAAY,GAAG,KAAK;QACtE,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB;IACtB,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,uEAAuE;IACvE,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACzF,CAAC;IAED,2CAA2C;IAC3C,cAAc;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED;;;;;;;;OAQG;IACH,YAAY;QACV,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC,OAAO;gBAAE,SAAS;YACxB,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1B,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IAC5C,WAAW;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,yBAAyB;IACzB,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,wBAAwB;IACxB,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Field-path merge engine (FS-B5 + FS-B6).
3
+ *
4
+ * Firestore's `updateDoc` and `setDoc(..., {merge})` are not shallow
5
+ * object spreads. They build a *field mask* of leaf paths and set each
6
+ * leaf into the existing document, creating intermediate maps as needed
7
+ * and preserving sibling fields. This mirrors
8
+ * `clones/firebase-js-sdk/packages/firestore/src/model/object_value.ts`
9
+ * (`ObjectValue.set` / `getFieldsMap`) and `lite-api/user_data_reader.ts`
10
+ * (`parseUpdateData` — every top-level `updateDoc` key is parsed as a
11
+ * dot-separated FieldPath; `parseSetData` with `merge` extracts the mask
12
+ * from the data's nested maps).
13
+ *
14
+ * Two entry points feed the same leaf-set engine:
15
+ *
16
+ * - {@link applyUpdate} — `updateDoc(data)`. Each TOP-LEVEL key is a
17
+ * dot-separated FieldPath, so `{'a.b': 2}` sets leaf `a.b` (preserving
18
+ * `a.c`). A nested *map value* (`{a: {b: 2}}`) is a single-segment
19
+ * path `a` whose value is the whole map — it REPLACES `a` wholesale,
20
+ * matching prod (`updateDoc` does not deep-merge map values; only
21
+ * dot-paths reach into a map). `DELETE_MARKER` leaves delete the leaf.
22
+ *
23
+ * - {@link applyMerge} — `setDoc(data, {merge:true})` /
24
+ * `{mergeFields}`. The mask is every leaf path reachable by walking
25
+ * the data's nested plain maps, so `{a:{b:2}}` sets leaf `a.b`
26
+ * (preserving `a.c`) — i.e. maps DEEP-merge. `mergeFields` restricts
27
+ * the mask to the listed (dot-separated) field paths.
28
+ *
29
+ * Both operate on a freshly cloned copy of `existing` and never mutate
30
+ * the input. The resolved write tree is expected to have already run
31
+ * through the value-resolver (sentinels resolved, deleteField → marker).
32
+ */
33
+ import { type DocumentData } from './value-resolver.js';
34
+ /**
35
+ * `updateDoc` semantics — top-level keys are dot-separated FieldPaths.
36
+ * `resolved` is the value-resolved write tree (its keys may contain dots;
37
+ * `DELETE_MARKER` leaves mean deleteField()). Returns the merged doc.
38
+ */
39
+ export declare function applyUpdate(existing: DocumentData, resolved: DocumentData): DocumentData;
40
+ /**
41
+ * FS-B13 — thrown when a `deleteField()` sentinel appears below the top
42
+ * level of an `updateDoc` (or anywhere in a non-merge `set`). The write
43
+ * layer maps this to an `invalid-argument` FirestoreError.
44
+ */
45
+ export declare class DeleteFieldNestedError extends Error {
46
+ constructor();
47
+ }
48
+ /**
49
+ * FS-B13 — validate an `updateDoc` payload: a `deleteField()` (DELETE_MARKER)
50
+ * is legal only as a whole top-level value or via a dot-path key (the
51
+ * top-level entry value === DELETE_MARKER). Nested inside a map literal it
52
+ * throws {@link DeleteFieldNestedError}. Called pre-rules in
53
+ * `LocalEnvironment.execute` so the denial reads like prod's parse-time
54
+ * `invalid-argument`.
55
+ */
56
+ export declare function assertNoNestedDeleteField(resolved: DocumentData): void;
57
+ /**
58
+ * `setDoc(merge:true)` semantics — recursively extract the leaf-path mask
59
+ * from `resolved` (nested maps deep-merge), then set each leaf. When
60
+ * `mergeFields` is supplied, only those (dot-separated) top-level field
61
+ * paths are written; everything else in `resolved` is ignored.
62
+ */
63
+ export declare function applyMerge(existing: DocumentData, resolved: DocumentData, mergeFields?: readonly string[]): DocumentData;
64
+ //# sourceMappingURL=field-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-merge.d.ts","sourceRoot":"","sources":["../../../src/sandbox/firestore/field-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AA0E7B;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,GACrB,YAAY,CAcd;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAYD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAMtE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAC9B,YAAY,CAoBd"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Field-path merge engine (FS-B5 + FS-B6).
3
+ *
4
+ * Firestore's `updateDoc` and `setDoc(..., {merge})` are not shallow
5
+ * object spreads. They build a *field mask* of leaf paths and set each
6
+ * leaf into the existing document, creating intermediate maps as needed
7
+ * and preserving sibling fields. This mirrors
8
+ * `clones/firebase-js-sdk/packages/firestore/src/model/object_value.ts`
9
+ * (`ObjectValue.set` / `getFieldsMap`) and `lite-api/user_data_reader.ts`
10
+ * (`parseUpdateData` — every top-level `updateDoc` key is parsed as a
11
+ * dot-separated FieldPath; `parseSetData` with `merge` extracts the mask
12
+ * from the data's nested maps).
13
+ *
14
+ * Two entry points feed the same leaf-set engine:
15
+ *
16
+ * - {@link applyUpdate} — `updateDoc(data)`. Each TOP-LEVEL key is a
17
+ * dot-separated FieldPath, so `{'a.b': 2}` sets leaf `a.b` (preserving
18
+ * `a.c`). A nested *map value* (`{a: {b: 2}}`) is a single-segment
19
+ * path `a` whose value is the whole map — it REPLACES `a` wholesale,
20
+ * matching prod (`updateDoc` does not deep-merge map values; only
21
+ * dot-paths reach into a map). `DELETE_MARKER` leaves delete the leaf.
22
+ *
23
+ * - {@link applyMerge} — `setDoc(data, {merge:true})` /
24
+ * `{mergeFields}`. The mask is every leaf path reachable by walking
25
+ * the data's nested plain maps, so `{a:{b:2}}` sets leaf `a.b`
26
+ * (preserving `a.c`) — i.e. maps DEEP-merge. `mergeFields` restricts
27
+ * the mask to the listed (dot-separated) field paths.
28
+ *
29
+ * Both operate on a freshly cloned copy of `existing` and never mutate
30
+ * the input. The resolved write tree is expected to have already run
31
+ * through the value-resolver (sentinels resolved, deleteField → marker).
32
+ */
33
+ import { DELETE_MARKER, isPlainObject, stripMarkers, } from './value-resolver.js';
34
+ /** Split a dot-separated FieldPath string into segments. */
35
+ function splitPath(key) {
36
+ return key.split('.');
37
+ }
38
+ /** Field-path segments that must never be walked or written. The merge
39
+ * engine sets leaves into plain JS objects, and `isPlainObject` treats
40
+ * `Object.prototype` (its `proto === null` branch) as plain — so a
41
+ * segment named `__proto__` (or, defence-in-depth, `constructor`/
42
+ * `prototype`) would let a rule-permitted `updateDoc`/`setDoc(merge)`
43
+ * walk into and pollute the shared prototype process-wide. Field names
44
+ * arrive via JSON transports that preserve `__proto__` as a genuine own
45
+ * key, so this is reachable with ordinary data. These are not valid
46
+ * Firestore field-path segments, so rejecting them is sandbox-only
47
+ * safety, not a parity regression. */
48
+ const UNSAFE_SEGMENTS = new Set(['__proto__', 'prototype', 'constructor']);
49
+ function assertSafeSegment(seg) {
50
+ if (UNSAFE_SEGMENTS.has(seg)) {
51
+ throw new Error(`Invalid field-path segment '${seg}': the keys __proto__, prototype, ` +
52
+ 'and constructor are reserved and cannot appear in a field path.');
53
+ }
54
+ }
55
+ /** Deep clone a plain document tree, leaving class instances by reference
56
+ * (Timestamp, Bytes, etc. are immutable wrappers — safe to share). */
57
+ function cloneDoc(data) {
58
+ const out = {};
59
+ for (const [k, v] of Object.entries(data)) {
60
+ out[k] = cloneValue(v);
61
+ }
62
+ return out;
63
+ }
64
+ function cloneValue(v) {
65
+ if (Array.isArray(v))
66
+ return v.map(cloneValue);
67
+ if (isPlainObject(v))
68
+ return cloneDoc(v);
69
+ return v;
70
+ }
71
+ /**
72
+ * Navigate to the parent map of `segments`, creating (or replacing
73
+ * non-map intermediates with) plain maps along the way, then set or
74
+ * delete the leaf. Mirrors `ObjectValue.getFieldsMap` + `applyChanges`.
75
+ */
76
+ function setLeaf(root, segments, value) {
77
+ let cursor = root;
78
+ for (let i = 0; i < segments.length - 1; i++) {
79
+ const seg = segments[i];
80
+ assertSafeSegment(seg);
81
+ // Own-property read only: bare `cursor[seg]` would resolve an
82
+ // unvalidated `__proto__` segment to the shared object prototype
83
+ // (which `isPlainObject` accepts as a walkable map).
84
+ const next = Object.hasOwn(cursor, seg) ? cursor[seg] : undefined;
85
+ if (!isPlainObject(next)) {
86
+ // Intermediate is missing or not a map — prod creates a fresh map
87
+ // (the old value at this path is shadowed by the deeper write).
88
+ cursor[seg] = {};
89
+ }
90
+ cursor = cursor[seg];
91
+ }
92
+ const leaf = segments[segments.length - 1];
93
+ assertSafeSegment(leaf);
94
+ if (value === DELETE_MARKER) {
95
+ delete cursor[leaf];
96
+ }
97
+ else {
98
+ cursor[leaf] = stripMarkers(value);
99
+ }
100
+ }
101
+ /**
102
+ * `updateDoc` semantics — top-level keys are dot-separated FieldPaths.
103
+ * `resolved` is the value-resolved write tree (its keys may contain dots;
104
+ * `DELETE_MARKER` leaves mean deleteField()). Returns the merged doc.
105
+ */
106
+ export function applyUpdate(existing, resolved) {
107
+ const out = cloneDoc(existing);
108
+ for (const [key, value] of Object.entries(resolved)) {
109
+ // FS-B13 — `deleteField()` may only appear at the top level of an update
110
+ // (as a whole field value or via a dot-path key). Nested inside a map
111
+ // literal it is invalid; prod throws `invalid-argument` rather than
112
+ // silently destroying the sibling data. Mirrors
113
+ // `clones/.../lite-api/user_data_reader.ts:DeleteFieldValueImpl`.
114
+ if (value !== DELETE_MARKER && containsDeleteMarker(value)) {
115
+ throw new DeleteFieldNestedError();
116
+ }
117
+ setLeaf(out, splitPath(key), value);
118
+ }
119
+ return out;
120
+ }
121
+ /**
122
+ * FS-B13 — thrown when a `deleteField()` sentinel appears below the top
123
+ * level of an `updateDoc` (or anywhere in a non-merge `set`). The write
124
+ * layer maps this to an `invalid-argument` FirestoreError.
125
+ */
126
+ export class DeleteFieldNestedError extends Error {
127
+ constructor() {
128
+ super('FieldValue.delete() can only appear at the top level of your update data');
129
+ this.name = 'DeleteFieldNestedError';
130
+ }
131
+ }
132
+ /** True when `value` contains a {@link DELETE_MARKER} anywhere in its tree. */
133
+ function containsDeleteMarker(value) {
134
+ if (value === DELETE_MARKER)
135
+ return true;
136
+ if (Array.isArray(value))
137
+ return value.some(containsDeleteMarker);
138
+ if (isPlainObject(value)) {
139
+ return Object.values(value).some(containsDeleteMarker);
140
+ }
141
+ return false;
142
+ }
143
+ /**
144
+ * FS-B13 — validate an `updateDoc` payload: a `deleteField()` (DELETE_MARKER)
145
+ * is legal only as a whole top-level value or via a dot-path key (the
146
+ * top-level entry value === DELETE_MARKER). Nested inside a map literal it
147
+ * throws {@link DeleteFieldNestedError}. Called pre-rules in
148
+ * `LocalEnvironment.execute` so the denial reads like prod's parse-time
149
+ * `invalid-argument`.
150
+ */
151
+ export function assertNoNestedDeleteField(resolved) {
152
+ for (const value of Object.values(resolved)) {
153
+ if (value !== DELETE_MARKER && containsDeleteMarker(value)) {
154
+ throw new DeleteFieldNestedError();
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * `setDoc(merge:true)` semantics — recursively extract the leaf-path mask
160
+ * from `resolved` (nested maps deep-merge), then set each leaf. When
161
+ * `mergeFields` is supplied, only those (dot-separated) top-level field
162
+ * paths are written; everything else in `resolved` is ignored.
163
+ */
164
+ export function applyMerge(existing, resolved, mergeFields) {
165
+ const out = cloneDoc(existing);
166
+ const mask = [];
167
+ if (mergeFields !== undefined) {
168
+ // Restrict to the listed field paths. Each is a dot-separated path
169
+ // into `resolved`; read the value at that path (skip absent ones).
170
+ for (const field of mergeFields) {
171
+ const segments = splitPath(field);
172
+ const value = readPath(resolved, segments);
173
+ if (value !== ABSENT)
174
+ mask.push({ segments, value });
175
+ }
176
+ }
177
+ else {
178
+ collectLeaves(resolved, [], mask);
179
+ }
180
+ for (const { segments, value } of mask) {
181
+ setLeaf(out, segments, value);
182
+ }
183
+ return out;
184
+ }
185
+ const ABSENT = Symbol('field-merge:ABSENT');
186
+ /** Read the value at a segment path, or ABSENT if any segment is missing. */
187
+ function readPath(data, segments) {
188
+ let cursor = data;
189
+ for (const seg of segments) {
190
+ // `Object.hasOwn` (not `seg in cursor`) so an unvalidated `__proto__`
191
+ // segment can't follow the inherited chain into `Object.prototype`.
192
+ if (!isPlainObject(cursor) || !Object.hasOwn(cursor, seg))
193
+ return ABSENT;
194
+ cursor = cursor[seg];
195
+ }
196
+ return cursor;
197
+ }
198
+ /**
199
+ * Walk `data` collecting every leaf path. A leaf is a non-map value (or
200
+ * an empty map — prod preserves an empty map as a set leaf). `DELETE_MARKER`
201
+ * leaves are collected too so a merge can carry deleteField().
202
+ */
203
+ function collectLeaves(data, prefix, out) {
204
+ const keys = Object.keys(data);
205
+ if (keys.length === 0 && prefix.length > 0) {
206
+ // Empty map at a nested path — set it as an empty-map leaf.
207
+ out.push({ segments: prefix, value: {} });
208
+ return;
209
+ }
210
+ for (const key of keys) {
211
+ const value = data[key];
212
+ const segments = [...prefix, key];
213
+ if (isPlainObject(value) && value !== DELETE_MARKER) {
214
+ collectLeaves(value, segments, out);
215
+ }
216
+ else {
217
+ out.push({ segments, value });
218
+ }
219
+ }
220
+ }
221
+ //# sourceMappingURL=field-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-merge.js","sourceRoot":"","sources":["../../../src/sandbox/firestore/field-merge.ts"],"names":[],"mappings":"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"}