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,19 @@
1
+ /**
2
+ * `pyric/sandbox/admin-compat` — chainable Admin-shaped Firestore
3
+ * wrapper backed by `LocalEnvironment`.
4
+ *
5
+ * This is the surface that mirrors `firebase-admin/firestore` (the
6
+ * Admin Node SDK) so test + agent code that's written against the
7
+ * chainable Admin shape — `db.collection('x').doc('y').get()` etc. —
8
+ * can run unmodified against the in-process sandbox.
9
+ *
10
+ * `pyric-admin` imports from here directly rather than reaching across
11
+ * packages for its substrate.
12
+ *
13
+ * Exported as a separate subpath (not via `/internal`) because the
14
+ * admin-compat surface has its own `DocumentData` / `Transaction` /
15
+ * etc. types that would collide with the local-environment exports
16
+ * already on `/internal`.
17
+ */
18
+ export * from './firestore/admin-compat/index.js';
19
+ //# sourceMappingURL=admin-compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-compat.js","sourceRoot":"","sources":["../../src/sandbox/admin-compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,cAAc,mCAAmC,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Translate compat-layer errors (`FirestoreCompatError`) into the
3
+ * sandbox layer's unified `SandboxError`, attaching whatever structured
4
+ * `denialContext` is recoverable from the underlying simulator output.
5
+ *
6
+ * Why a translation layer at all:
7
+ *
8
+ * The compat impl throws `FirestoreCompatError` because it has to
9
+ * look like an Admin SDK `FirestoreError` for the production-shaped
10
+ * surface to feel right. The sandbox layer wants one error class
11
+ * (`SandboxError`) covering every service so callers can write
12
+ * `if (err instanceof SandboxError && err.code === 'permission-
13
+ * denied') { ... }` regardless of which service produced the throw.
14
+ *
15
+ * The translation also stitches sandbox-known context (the active
16
+ * auth identity, sourced from `SandboxContext`) and best-effort
17
+ * recovered context (the underlying `debugMessages`, recovered from
18
+ * the error's stitched-together message) into `denialContext`.
19
+ *
20
+ * `denialContext.rule` (line + expression) is left undefined: the
21
+ * rules AST does not currently carry source positions, so neither line
22
+ * numbers nor the original expression string are reliably available
23
+ * after evaluation.
24
+ *
25
+ * The recursive `wrapWithErrorTranslation` Proxy applies translation
26
+ * uniformly across the Firestore handle and every object returned from
27
+ * its methods (DocumentRef, Query, WriteBatch, Transaction). It also
28
+ * stashes the owning {@link SandboxContext} on every wrapped value via
29
+ * the {@link CONTEXT_SYMBOL} hidden property — `onSnapshot` reads it
30
+ * back to capture the right auth at listener registration.
31
+ */
32
+ import type { SandboxContext } from 'pyric/sandbox';
33
+ /**
34
+ * Hidden property on every wrapped object that returns the
35
+ * `SandboxContext` that produced it. Used by `onSnapshot` to recover
36
+ * the right auth from a ref produced via `db.doc(path)` /
37
+ * `db.collection(path)` regardless of how many contexts share the
38
+ * underlying sandbox. Symbol so it never collides with a real property.
39
+ */
40
+ export declare const CONTEXT_SYMBOL: unique symbol;
41
+ /**
42
+ * Late-bound reference to the free `onSnapshot(ref, ...args)` function
43
+ * from `index.ts`. Synthesized into wrapped refs as a `.onSnapshot(...)`
44
+ * chainable method (see {@link wrapWithErrorTranslation}).
45
+ *
46
+ * Why late binding: the Proxy wrapper here is consumed from `index.ts`,
47
+ * and that's where the free `onSnapshot` is defined. Statically
48
+ * importing it back would create a circular module init order. The
49
+ * registration call lives at the bottom of `index.ts`, after
50
+ * `onSnapshot` is fully declared.
51
+ */
52
+ type OnSnapshotImpl = (ref: unknown, ...args: unknown[]) => () => void;
53
+ /**
54
+ * Register the free `onSnapshot` function so wrapped refs can synthesize
55
+ * a chainable `.onSnapshot(...)` method that delegates to it. Called
56
+ * once at module init from `index.ts`.
57
+ */
58
+ export declare function registerOnSnapshotImpl(fn: OnSnapshotImpl): void;
59
+ /**
60
+ * Convert a compat error into a `SandboxError` with attached
61
+ * `denialContext`. Non-compat errors fall through unchanged so callers
62
+ * still see (e.g.) a TypeError thrown from user code.
63
+ */
64
+ export declare function toSandboxError(err: unknown, ctx: SandboxContext): unknown;
65
+ /**
66
+ * Wrap an object so that every function call on it (and on its
67
+ * function-call returns) gets `try/catch` and `Promise.catch`
68
+ * translation through {@link toSandboxError}.
69
+ *
70
+ * Property reads that aren't functions pass through. Function returns
71
+ * that aren't objects pass through. Object returns are recursively
72
+ * wrapped — this is what makes `db.doc('x').get()` translate even
73
+ * though the wrapper only directly intercepts `db`'s own methods.
74
+ *
75
+ * Method-chaining identity (`b.set(x).update(y)`) is preserved through
76
+ * a per-call fresh proxy: each chain step returns a wrapped view of
77
+ * the underlying impl's `this`, which has the same delegate behavior.
78
+ *
79
+ * Every wrapped object also exposes `[CONTEXT_SYMBOL]` returning the
80
+ * owning {@link SandboxContext}; `onSnapshot` reads this to recover
81
+ * the right auth at registration regardless of how many contexts
82
+ * share the underlying sandbox.
83
+ */
84
+ export declare function wrapWithErrorTranslation<T extends object>(target: T, ctx: SandboxContext): T;
85
+ export {};
86
+ //# sourceMappingURL=error-translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-translation.d.ts","sourceRoot":"","sources":["../../../src/sandbox/admin-firestore/error-translation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOpD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,MAAwC,CAAC;AAE7E;;;;;;;;;;GAUG;AACH,KAAK,cAAc,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,IAAI,CAAC;AAGvE;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAE/D;AAsDD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAyBzE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,EACvD,MAAM,EAAE,CAAC,EACT,GAAG,EAAE,cAAc,GAClB,CAAC,CAqDH"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Translate compat-layer errors (`FirestoreCompatError`) into the
3
+ * sandbox layer's unified `SandboxError`, attaching whatever structured
4
+ * `denialContext` is recoverable from the underlying simulator output.
5
+ *
6
+ * Why a translation layer at all:
7
+ *
8
+ * The compat impl throws `FirestoreCompatError` because it has to
9
+ * look like an Admin SDK `FirestoreError` for the production-shaped
10
+ * surface to feel right. The sandbox layer wants one error class
11
+ * (`SandboxError`) covering every service so callers can write
12
+ * `if (err instanceof SandboxError && err.code === 'permission-
13
+ * denied') { ... }` regardless of which service produced the throw.
14
+ *
15
+ * The translation also stitches sandbox-known context (the active
16
+ * auth identity, sourced from `SandboxContext`) and best-effort
17
+ * recovered context (the underlying `debugMessages`, recovered from
18
+ * the error's stitched-together message) into `denialContext`.
19
+ *
20
+ * `denialContext.rule` (line + expression) is left undefined: the
21
+ * rules AST does not currently carry source positions, so neither line
22
+ * numbers nor the original expression string are reliably available
23
+ * after evaluation.
24
+ *
25
+ * The recursive `wrapWithErrorTranslation` Proxy applies translation
26
+ * uniformly across the Firestore handle and every object returned from
27
+ * its methods (DocumentRef, Query, WriteBatch, Transaction). It also
28
+ * stashes the owning {@link SandboxContext} on every wrapped value via
29
+ * the {@link CONTEXT_SYMBOL} hidden property — `onSnapshot` reads it
30
+ * back to capture the right auth at listener registration.
31
+ */
32
+ import { FirestoreCompatError } from 'pyric/sandbox/admin-compat';
33
+ import { SandboxError, } from 'pyric/sandbox';
34
+ /**
35
+ * Hidden property on every wrapped object that returns the
36
+ * `SandboxContext` that produced it. Used by `onSnapshot` to recover
37
+ * the right auth from a ref produced via `db.doc(path)` /
38
+ * `db.collection(path)` regardless of how many contexts share the
39
+ * underlying sandbox. Symbol so it never collides with a real property.
40
+ */
41
+ export const CONTEXT_SYMBOL = Symbol('pyric/sandbox/context');
42
+ let onSnapshotImpl = null;
43
+ /**
44
+ * Register the free `onSnapshot` function so wrapped refs can synthesize
45
+ * a chainable `.onSnapshot(...)` method that delegates to it. Called
46
+ * once at module init from `index.ts`.
47
+ */
48
+ export function registerOnSnapshotImpl(fn) {
49
+ onSnapshotImpl = fn;
50
+ }
51
+ /**
52
+ * Heuristic: the wrapped object is a Firestore ref
53
+ * (DocumentReference, CollectionReference, or chained Query). Used
54
+ * to gate the synthesized `.onSnapshot` shim so the method only
55
+ * appears on values where a chainable `.onSnapshot` actually makes
56
+ * sense.
57
+ *
58
+ * - `DocumentReference` exposes `path` publicly.
59
+ * - `CollectionReference` exposes `path` publicly.
60
+ * - Chained `Query` (the result of `.where()/.orderBy()/.limit()`)
61
+ * keeps `collectionPath` as a TypeScript-protected field on the
62
+ * underlying `QueryImpl`. Protected is a TS-only restriction; at
63
+ * runtime the field is readable, so the lookup matches.
64
+ *
65
+ * Snapshots, batches, transactions, and the Firestore handle itself
66
+ * carry neither, so the shim correctly skips them.
67
+ */
68
+ function isRefLike(obj) {
69
+ const o = obj;
70
+ return (typeof o.path === 'string' && o.path.length > 0)
71
+ || (typeof o.collectionPath === 'string' && o.collectionPath.length > 0);
72
+ }
73
+ /**
74
+ * Pull a list of denial reasons out of a compat-error message. Two
75
+ * formats produced by the underlying SDK are handled:
76
+ *
77
+ * 1. Stitched-multi — `"get denied: Rule #0 → deny; Simulated: DENY"`.
78
+ * Produced by the `throwFromDenial` fallback path when the
79
+ * simulator didn't attach a typed `error` (rare today; reserved
80
+ * for future use). Split after the first `": "` and on `"; "`.
81
+ *
82
+ * 2. Plain typed — `"get tickets/T-1 denied by rules"`. Produced
83
+ * when the simulator returns a typed `error` (`makeError(...)`).
84
+ * No structured sub-reasons; surface the whole message as a
85
+ * single-element list so callers get something machine-readable.
86
+ *
87
+ * The list is never empty for a non-empty error message, so callers
88
+ * don't need to special-case "no reasons available."
89
+ */
90
+ function recoverReasons(message) {
91
+ const trimmed = message.trim();
92
+ if (!trimmed)
93
+ return [];
94
+ const firstColon = trimmed.indexOf(': ');
95
+ if (firstColon !== -1) {
96
+ const tail = trimmed.slice(firstColon + 2).trim();
97
+ const parts = tail.split('; ').map(s => s.trim()).filter(s => s.length > 0);
98
+ if (parts.length > 0)
99
+ return parts;
100
+ }
101
+ return [trimmed];
102
+ }
103
+ /**
104
+ * Convert a compat error into a `SandboxError` with attached
105
+ * `denialContext`. Non-compat errors fall through unchanged so callers
106
+ * still see (e.g.) a TypeError thrown from user code.
107
+ */
108
+ export function toSandboxError(err, ctx) {
109
+ if (!(err instanceof FirestoreCompatError))
110
+ return err;
111
+ const code = err.code;
112
+ if (code !== 'permission-denied') {
113
+ return new SandboxError(code, err.message);
114
+ }
115
+ const denialContext = {
116
+ auth: ctx.auth,
117
+ reasons: recoverReasons(err.message),
118
+ };
119
+ const sim = err.simError;
120
+ if (sim?.request) {
121
+ const r = sim.request;
122
+ denialContext.request = {
123
+ method: r.method,
124
+ path: r.path,
125
+ ...(r.resourceData ? { resourceData: r.resourceData } : {}),
126
+ };
127
+ }
128
+ if (sim?.resource) {
129
+ denialContext.resource = { data: sim.resource.data, exists: sim.resource.exists };
130
+ }
131
+ return new SandboxError(code, err.message, denialContext);
132
+ }
133
+ /**
134
+ * Wrap an object so that every function call on it (and on its
135
+ * function-call returns) gets `try/catch` and `Promise.catch`
136
+ * translation through {@link toSandboxError}.
137
+ *
138
+ * Property reads that aren't functions pass through. Function returns
139
+ * that aren't objects pass through. Object returns are recursively
140
+ * wrapped — this is what makes `db.doc('x').get()` translate even
141
+ * though the wrapper only directly intercepts `db`'s own methods.
142
+ *
143
+ * Method-chaining identity (`b.set(x).update(y)`) is preserved through
144
+ * a per-call fresh proxy: each chain step returns a wrapped view of
145
+ * the underlying impl's `this`, which has the same delegate behavior.
146
+ *
147
+ * Every wrapped object also exposes `[CONTEXT_SYMBOL]` returning the
148
+ * owning {@link SandboxContext}; `onSnapshot` reads this to recover
149
+ * the right auth at registration regardless of how many contexts
150
+ * share the underlying sandbox.
151
+ */
152
+ export function wrapWithErrorTranslation(target, ctx) {
153
+ return new Proxy(target, {
154
+ get(t, prop, receiver) {
155
+ // Hidden context recovery — must come before any other property
156
+ // resolution. Symbol-keyed so it can't collide with real props.
157
+ if (prop === CONTEXT_SYMBOL)
158
+ return ctx;
159
+ // Synthesize a chainable `.onSnapshot(...)` method on every
160
+ // ref-shaped wrapped value. The underlying compat ref doesn't
161
+ // define this method (the package's canonical surface is the
162
+ // free `onSnapshot(ref, ...)` function); the shim is here so
163
+ // `db.collection(path).where(...).onSnapshot(cb)` style chains
164
+ // work too. Both forms route through the same listener.
165
+ //
166
+ // Gate: only when (a) the impl is registered, (b) the underlying
167
+ // doesn't already define `onSnapshot`, and (c) the underlying is
168
+ // ref-like — so we don't accidentally attach the method to
169
+ // snapshots, batches, transactions, the Firestore handle, etc.
170
+ if (prop === 'onSnapshot' &&
171
+ onSnapshotImpl !== null &&
172
+ !(prop in t) &&
173
+ isRefLike(t)) {
174
+ // Pass `receiver` (the Proxy) rather than `t` so the free
175
+ // `onSnapshot` reads CONTEXT_SYMBOL through the wrapper.
176
+ return (...args) => onSnapshotImpl(receiver, ...args);
177
+ }
178
+ const value = Reflect.get(t, prop, receiver);
179
+ if (typeof value !== 'function')
180
+ return value;
181
+ // Bind to the original `t` so internal `this` references inside
182
+ // the delegate stay coherent.
183
+ return function (...args) {
184
+ let result;
185
+ try {
186
+ result = value.apply(t, args);
187
+ }
188
+ catch (e) {
189
+ throw toSandboxError(e, ctx);
190
+ }
191
+ if (result instanceof Promise) {
192
+ return result
193
+ .then((v) => (v && typeof v === 'object' ? wrapWithErrorTranslation(v, ctx) : v))
194
+ .catch((e) => { throw toSandboxError(e, ctx); });
195
+ }
196
+ if (result && typeof result === 'object') {
197
+ return wrapWithErrorTranslation(result, ctx);
198
+ }
199
+ return result;
200
+ };
201
+ },
202
+ });
203
+ }
204
+ //# sourceMappingURL=error-translation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-translation.js","sourceRoot":"","sources":["../../../src/sandbox/admin-firestore/error-translation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * `pyric-admin` — Admin-SDK-shaped chainable Firestore adapter for
3
+ * the Pyric sandbox.
4
+ *
5
+ * `getFirestore(ctx)` returns a `SandboxFirestore` whose operations
6
+ * run under the context's auth identity and against the underlying
7
+ * `LocalEnvironment` of the context's sandbox. Idempotent — a second
8
+ * call with the same `SandboxContext` returns the same wrapper.
9
+ *
10
+ * Wraps the `pyric/sandbox/admin-compat` implementation.
11
+ * Per-operation methods construct a fresh delegate so a
12
+ * `sandbox.reset()` (which swaps the underlying environment) is
13
+ * picked up on the next operation. Refs returned from the wrapper
14
+ * (`DocumentReference`, `Query`) are bound to whichever environment
15
+ * was live when they were obtained — re-acquire them after reset to
16
+ * avoid stale-state confusion.
17
+ */
18
+ import type { CollectionReference, DocumentData, DocumentReference, Firestore, Query, SnapshotListenerOptions } from 'pyric/sandbox/admin-compat';
19
+ import type { LintResult } from 'pyric/rules';
20
+ import { type Sandbox, type SandboxContext } from 'pyric/sandbox';
21
+ export type { AuthState, Sandbox, SandboxContext, } from 'pyric/sandbox';
22
+ export { SandboxError } from 'pyric/sandbox';
23
+ export type { AggregateField, AggregateQuerySnapshot, AggregateSpec, Filter, CollectionReference, DocumentData, DocumentReference, DocumentSnapshot as AdminDocumentSnapshot, FieldValueSentinel, Firestore, OrderDirection, Query, QueryDocumentSnapshot as AdminQueryDocumentSnapshot, QuerySnapshot as AdminQuerySnapshot, SetOptions, Transaction, WhereFilterOp, WriteBatch, } from 'pyric/sandbox/admin-compat';
24
+ export type { LintResult, LintWarning, RulesMetrics } from 'pyric/rules';
25
+ export { FieldValue, Timestamp } from 'pyric/sandbox/admin-compat';
26
+ export type { LiveDocumentSnapshot as DocumentSnapshot, LiveQueryDocumentSnapshot as QueryDocumentSnapshot, LiveQuerySnapshot as QuerySnapshot, DocumentChange, DocumentChangeType, DocChangesOptions, SnapshotMetadata, } from 'pyric/sandbox/admin-compat';
27
+ /**
28
+ * Mirrors `firebase/firestore`'s `SnapshotListenOptions`. The
29
+ * `includeMetadataChanges` flag is accepted for API parity but has no
30
+ * observable effect in the sandbox: there's no offline cache and no
31
+ * pending-writes window, so `metadata.fromCache` and
32
+ * `metadata.hasPendingWrites` are always `false` (snapshot-listeners.ts section 6).
33
+ */
34
+ export type SnapshotListenOptions = SnapshotListenerOptions;
35
+ /**
36
+ * Internal channel for the modular `pyric/firestore` layer to mark a
37
+ * listener as live (identity follows `sandbox.currentUser`) vs frozen
38
+ * (`getFirestore(ctx)`, pinned identity). The chainable adapter sees only
39
+ * a `SandboxContext` per call and can't tell the two apart on its own — the
40
+ * live-vs-frozen distinction lives one layer up. The modular `onSnapshot`
41
+ * stamps this symbol onto the options object it forwards; {@link onSnapshot}
42
+ * here reads + strips it and threads the boolean into
43
+ * `LocalEnvironment.addSnapshotListener`'s `followsCurrentUser` parameter.
44
+ *
45
+ * Symbol-keyed (not a named field) so it never collides with a real
46
+ * `SnapshotListenOptions` field and never leaks to consumer code.
47
+ */
48
+ export declare const FOLLOWS_CURRENT_USER: unique symbol;
49
+ /**
50
+ * Returned from `onSnapshot`. Calling it deregisters the listener and
51
+ * stops further callback invocations. Idempotent.
52
+ */
53
+ export type Unsubscribe = () => void;
54
+ /**
55
+ * Observer form accepted by `onSnapshot`. Mirrors `firebase/firestore`'s
56
+ * `PartialObserver<T>` shape — any subset of the three handlers. `complete`
57
+ * is accepted for shape parity but never fires in the sandbox: the local
58
+ * listener stream has no terminal state.
59
+ */
60
+ export interface SnapshotObserver<T> {
61
+ next?: (snapshot: T) => void;
62
+ error?: (error: unknown) => void;
63
+ complete?: () => void;
64
+ }
65
+ /**
66
+ * Sandbox-extended Firestore handle. Adds three sandbox-only methods
67
+ * on top of the production-shaped {@link Firestore} surface:
68
+ *
69
+ * - {@link SandboxFirestore.setRules} — replace the active ruleset
70
+ * for subsequent operations.
71
+ * - {@link SandboxFirestore.seed} — replace stored documents with a
72
+ * fresh seed map (rules are preserved).
73
+ * - {@link SandboxFirestore.snapshot} — capture all stored documents
74
+ * as a path-keyed map.
75
+ *
76
+ * These have no production analog. They use sandbox vocabulary
77
+ * (`setRules`, `seed`, `snapshot`) deliberately so a reader can't
78
+ * confuse them with Firebase deployment semantics.
79
+ */
80
+ export interface SandboxFirestore extends Firestore {
81
+ /**
82
+ * Replace the active ruleset. Returns the lint result so callers can
83
+ * surface warnings; if the source has parse-level errors, the rules
84
+ * are not swapped (consistent with `LocalEnvironment.deployRules`).
85
+ */
86
+ setRules(rules: string): LintResult;
87
+ /**
88
+ * Replace stored documents with a new seed map. Active rules are
89
+ * preserved. Pass an empty `documents` map (or omit it) to clear
90
+ * state without touching rules.
91
+ */
92
+ seed(options?: {
93
+ documents?: Record<string, DocumentData>;
94
+ }): LintResult;
95
+ /**
96
+ * Capture every stored document as a `{ [path]: data }` map. Reads
97
+ * from the live state and is independent of rules.
98
+ */
99
+ snapshot(): Record<string, DocumentData>;
100
+ }
101
+ /**
102
+ * Resolve the Firestore service handle for a context. Idempotent —
103
+ * subsequent calls with the same context return the same wrapper.
104
+ *
105
+ * Requires a `SandboxContext`, never a bare `Sandbox`. Anonymous is
106
+ * `sandbox.withAuth(null)`, written explicitly — every call site
107
+ * states identity.
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * import { initializeSandbox } from 'pyric/sandbox';
112
+ * import { getFirestore } from 'pyric-admin/firestore';
113
+ *
114
+ * const sandbox = initializeSandbox();
115
+ * const db = getFirestore(sandbox.withAuth({ uid: 'alice' }));
116
+ * db.setRules(MY_RULES);
117
+ * db.seed({ documents: { 'tickets/T-1': { ... } } });
118
+ *
119
+ * // Different identity? Different context, same data.
120
+ * const dbAsBob = getFirestore(sandbox.withAuth({ uid: 'bob' }));
121
+ * ```
122
+ */
123
+ export declare function getFirestore(ctx: SandboxContext): SandboxFirestore;
124
+ /**
125
+ * Resolve a **rules-bypassing** Firestore handle for a context — the
126
+ * Pyric Studio admin lens (Gap #2). Same chainable `SandboxFirestore`
127
+ * surface as {@link getFirestore}, but every operation it issues (reads,
128
+ * writes, queries, batches, transactions) SKIPS security-rule evaluation
129
+ * and is treated as ALLOW. This is the modular/chainable-shaped sibling of
130
+ * the path-string `sandbox.admin.*` bypass — it reuses the exact same
131
+ * `LocalEnvironment` bypass execution path (`bypassRules` on the op),
132
+ * rather than reimplementing it.
133
+ *
134
+ * Storage preconditions still apply (a `create` on an existing doc still
135
+ * fails `already-exists`, matching real Firestore admin), and the same
136
+ * `request`/`write` events fire + listeners wake, so the change shows up
137
+ * live and on the traffic log (stamped as an admin-bypass read/write).
138
+ *
139
+ * Use for "edit anything as admin" surfaces (Studio F2). For rules-applied
140
+ * impersonation ("act as this user"), use `getFirestore(sandbox.withAuth({
141
+ * uid }))` instead — that path is unchanged.
142
+ *
143
+ * @example
144
+ * ```ts
145
+ * import { initializeSandbox } from 'pyric/sandbox';
146
+ * import { getFirestore, getAdminFirestore } from 'pyric-admin/firestore';
147
+ *
148
+ * const sandbox = initializeSandbox();
149
+ * getFirestore(sandbox.withAuth(null)).setRules('...deny everything...');
150
+ *
151
+ * // Denied under rules:
152
+ * await getFirestore(sandbox.withAuth({ uid: 'alice' }))
153
+ * .doc('locked/x').set({ a: 1 }); // throws permission-denied
154
+ *
155
+ * // Bypasses rules:
156
+ * await getAdminFirestore(sandbox).doc('locked/x').set({ a: 1 }); // ok
157
+ * ```
158
+ */
159
+ export declare function getAdminFirestore(ctx: SandboxContext): SandboxFirestore;
160
+ export declare function getAdminFirestore(sandbox: Sandbox): SandboxFirestore;
161
+ export declare function onSnapshot(reference: DocumentReference, observer: SnapshotObserver<import('pyric/sandbox/admin-compat').LiveDocumentSnapshot>): Unsubscribe;
162
+ export declare function onSnapshot(reference: DocumentReference, options: SnapshotListenOptions, observer: SnapshotObserver<import('pyric/sandbox/admin-compat').LiveDocumentSnapshot>): Unsubscribe;
163
+ export declare function onSnapshot(reference: DocumentReference, onNext: (snapshot: import('pyric/sandbox/admin-compat').LiveDocumentSnapshot) => void, onError?: (error: unknown) => void, onCompletion?: () => void): Unsubscribe;
164
+ export declare function onSnapshot(reference: DocumentReference, options: SnapshotListenOptions, onNext: (snapshot: import('pyric/sandbox/admin-compat').LiveDocumentSnapshot) => void, onError?: (error: unknown) => void, onCompletion?: () => void): Unsubscribe;
165
+ export declare function onSnapshot(reference: Query | CollectionReference, observer: SnapshotObserver<import('pyric/sandbox/admin-compat').LiveQuerySnapshot>): Unsubscribe;
166
+ export declare function onSnapshot(reference: Query | CollectionReference, options: SnapshotListenOptions, observer: SnapshotObserver<import('pyric/sandbox/admin-compat').LiveQuerySnapshot>): Unsubscribe;
167
+ export declare function onSnapshot(reference: Query | CollectionReference, onNext: (snapshot: import('pyric/sandbox/admin-compat').LiveQuerySnapshot) => void, onError?: (error: unknown) => void, onCompletion?: () => void): Unsubscribe;
168
+ export declare function onSnapshot(reference: Query | CollectionReference, options: SnapshotListenOptions, onNext: (snapshot: import('pyric/sandbox/admin-compat').LiveQuerySnapshot) => void, onError?: (error: unknown) => void, onCompletion?: () => void): Unsubscribe;
169
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sandbox/admin-firestore/index.ts"],"names":[],"mappings":"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"}