pyric 0.0.1 → 0.1.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (786) hide show
  1. package/README.md +52 -1
  2. package/dist/app/index.d.ts +81 -0
  3. package/dist/app/index.d.ts.map +1 -0
  4. package/dist/app/index.js +78 -0
  5. package/dist/app/index.js.map +1 -0
  6. package/dist/auth/index.d.ts +346 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +701 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/prod-backend.d.ts +39 -0
  11. package/dist/auth/prod-backend.d.ts.map +1 -0
  12. package/dist/auth/prod-backend.js +179 -0
  13. package/dist/auth/prod-backend.js.map +1 -0
  14. package/dist/auth/providers.d.ts +107 -0
  15. package/dist/auth/providers.d.ts.map +1 -0
  16. package/dist/auth/providers.js +138 -0
  17. package/dist/auth/providers.js.map +1 -0
  18. package/dist/auth/sandbox-backend.d.ts +769 -0
  19. package/dist/auth/sandbox-backend.d.ts.map +1 -0
  20. package/dist/auth/sandbox-backend.js +1598 -0
  21. package/dist/auth/sandbox-backend.js.map +1 -0
  22. package/dist/auth/target.d.ts +40 -0
  23. package/dist/auth/target.d.ts.map +1 -0
  24. package/dist/auth/target.js +28 -0
  25. package/dist/auth/target.js.map +1 -0
  26. package/dist/auth/types.d.ts +252 -0
  27. package/dist/auth/types.d.ts.map +1 -0
  28. package/dist/auth/types.js +26 -0
  29. package/dist/auth/types.js.map +1 -0
  30. package/dist/database/constraints/atoms.d.ts +29 -0
  31. package/dist/database/constraints/atoms.d.ts.map +1 -0
  32. package/dist/database/constraints/atoms.js +43 -0
  33. package/dist/database/constraints/atoms.js.map +1 -0
  34. package/dist/database/constraints/compose.d.ts +16 -0
  35. package/dist/database/constraints/compose.d.ts.map +1 -0
  36. package/dist/database/constraints/compose.js +15 -0
  37. package/dist/database/constraints/compose.js.map +1 -0
  38. package/dist/database/constraints/data.d.ts +30 -0
  39. package/dist/database/constraints/data.d.ts.map +1 -0
  40. package/dist/database/constraints/data.js +46 -0
  41. package/dist/database/constraints/data.js.map +1 -0
  42. package/dist/database/constraints/document.d.ts +42 -0
  43. package/dist/database/constraints/document.d.ts.map +1 -0
  44. package/dist/database/constraints/document.js +86 -0
  45. package/dist/database/constraints/document.js.map +1 -0
  46. package/dist/database/constraints/game.d.ts +30 -0
  47. package/dist/database/constraints/game.d.ts.map +1 -0
  48. package/dist/database/constraints/game.js +49 -0
  49. package/dist/database/constraints/game.js.map +1 -0
  50. package/dist/database/constraints/index.d.ts +12 -0
  51. package/dist/database/constraints/index.d.ts.map +1 -0
  52. package/dist/database/constraints/index.js +9 -0
  53. package/dist/database/constraints/index.js.map +1 -0
  54. package/dist/database/constraints/policies.d.ts +16 -0
  55. package/dist/database/constraints/policies.d.ts.map +1 -0
  56. package/dist/database/constraints/policies.js +17 -0
  57. package/dist/database/constraints/policies.js.map +1 -0
  58. package/dist/database/constraints/ruleset.d.ts +5 -0
  59. package/dist/database/constraints/ruleset.d.ts.map +1 -0
  60. package/dist/database/constraints/ruleset.js +132 -0
  61. package/dist/database/constraints/ruleset.js.map +1 -0
  62. package/dist/database/constraints/schema.d.ts +17 -0
  63. package/dist/database/constraints/schema.d.ts.map +1 -0
  64. package/dist/database/constraints/schema.js +74 -0
  65. package/dist/database/constraints/schema.js.map +1 -0
  66. package/dist/database/constraints/types.d.ts +22 -0
  67. package/dist/database/constraints/types.d.ts.map +1 -0
  68. package/dist/database/constraints/types.js +2 -0
  69. package/dist/database/constraints/types.js.map +1 -0
  70. package/dist/database/crawl/handler.d.ts +7 -0
  71. package/dist/database/crawl/handler.d.ts.map +1 -0
  72. package/dist/database/crawl/handler.js +91 -0
  73. package/dist/database/crawl/handler.js.map +1 -0
  74. package/dist/database/crawl/semaphore.d.ts +9 -0
  75. package/dist/database/crawl/semaphore.d.ts.map +1 -0
  76. package/dist/database/crawl/semaphore.js +27 -0
  77. package/dist/database/crawl/semaphore.js.map +1 -0
  78. package/dist/database/crawl/spec.d.ts +33 -0
  79. package/dist/database/crawl/spec.d.ts.map +1 -0
  80. package/dist/database/crawl/spec.js +12 -0
  81. package/dist/database/crawl/spec.js.map +1 -0
  82. package/dist/database/data/handler.d.ts +9 -0
  83. package/dist/database/data/handler.d.ts.map +1 -0
  84. package/dist/database/data/handler.js +96 -0
  85. package/dist/database/data/handler.js.map +1 -0
  86. package/dist/database/data/spec.d.ts +77 -0
  87. package/dist/database/data/spec.d.ts.map +1 -0
  88. package/dist/database/data/spec.js +17 -0
  89. package/dist/database/data/spec.js.map +1 -0
  90. package/dist/database/data/validated.d.ts +8 -0
  91. package/dist/database/data/validated.d.ts.map +1 -0
  92. package/dist/database/data/validated.js +99 -0
  93. package/dist/database/data/validated.js.map +1 -0
  94. package/dist/database/grammar/RtdbExpr.ohm +98 -0
  95. package/dist/database/grammar/RtdbExpr.ohm.generated.d.ts +2 -0
  96. package/dist/database/grammar/RtdbExpr.ohm.generated.d.ts.map +1 -0
  97. package/dist/database/grammar/RtdbExpr.ohm.generated.js +103 -0
  98. package/dist/database/grammar/RtdbExpr.ohm.generated.js.map +1 -0
  99. package/dist/database/grammar/RtdbExprParser.d.ts +5 -0
  100. package/dist/database/grammar/RtdbExprParser.d.ts.map +1 -0
  101. package/dist/database/grammar/RtdbExprParser.js +53 -0
  102. package/dist/database/grammar/RtdbExprParser.js.map +1 -0
  103. package/dist/database/grammar/linter.d.ts +3 -0
  104. package/dist/database/grammar/linter.d.ts.map +1 -0
  105. package/dist/database/grammar/linter.js +66 -0
  106. package/dist/database/grammar/linter.js.map +1 -0
  107. package/dist/database/grammar/simulator.d.ts +31 -0
  108. package/dist/database/grammar/simulator.d.ts.map +1 -0
  109. package/dist/database/grammar/simulator.js +255 -0
  110. package/dist/database/grammar/simulator.js.map +1 -0
  111. package/dist/database/grammar/validator.d.ts +3 -0
  112. package/dist/database/grammar/validator.d.ts.map +1 -0
  113. package/dist/database/grammar/validator.js +84 -0
  114. package/dist/database/grammar/validator.js.map +1 -0
  115. package/dist/database/host.d.ts +50 -0
  116. package/dist/database/host.d.ts.map +1 -0
  117. package/dist/database/host.js +41 -0
  118. package/dist/database/host.js.map +1 -0
  119. package/dist/database/index.d.ts +40 -0
  120. package/dist/database/index.d.ts.map +1 -0
  121. package/dist/database/index.js +47 -0
  122. package/dist/database/index.js.map +1 -0
  123. package/dist/database/initialize-from-app.d.ts +28 -0
  124. package/dist/database/initialize-from-app.d.ts.map +1 -0
  125. package/dist/database/initialize-from-app.js +23 -0
  126. package/dist/database/initialize-from-app.js.map +1 -0
  127. package/dist/database/ir/handler.d.ts +6 -0
  128. package/dist/database/ir/handler.d.ts.map +1 -0
  129. package/dist/database/ir/handler.js +52 -0
  130. package/dist/database/ir/handler.js.map +1 -0
  131. package/dist/database/ir/spec.d.ts +25 -0
  132. package/dist/database/ir/spec.d.ts.map +1 -0
  133. package/dist/database/ir/spec.js +11 -0
  134. package/dist/database/ir/spec.js.map +1 -0
  135. package/dist/database/mapper.d.ts +9 -0
  136. package/dist/database/mapper.d.ts.map +1 -0
  137. package/dist/database/mapper.js +115 -0
  138. package/dist/database/mapper.js.map +1 -0
  139. package/dist/database/modular.d.ts +604 -0
  140. package/dist/database/modular.d.ts.map +1 -0
  141. package/dist/database/modular.js +1226 -0
  142. package/dist/database/modular.js.map +1 -0
  143. package/dist/database/replay.d.ts +33 -0
  144. package/dist/database/replay.d.ts.map +1 -0
  145. package/dist/database/replay.js +124 -0
  146. package/dist/database/replay.js.map +1 -0
  147. package/dist/database/resolver.d.ts +4 -0
  148. package/dist/database/resolver.d.ts.map +1 -0
  149. package/dist/database/resolver.js +66 -0
  150. package/dist/database/resolver.js.map +1 -0
  151. package/dist/database/sandbox/backend.d.ts +403 -0
  152. package/dist/database/sandbox/backend.d.ts.map +1 -0
  153. package/dist/database/sandbox/backend.js +1467 -0
  154. package/dist/database/sandbox/backend.js.map +1 -0
  155. package/dist/database/sandbox/data-tree.d.ts +123 -0
  156. package/dist/database/sandbox/data-tree.d.ts.map +1 -0
  157. package/dist/database/sandbox/data-tree.js +310 -0
  158. package/dist/database/sandbox/data-tree.js.map +1 -0
  159. package/dist/database/sandbox/normalize.d.ts +77 -0
  160. package/dist/database/sandbox/normalize.d.ts.map +1 -0
  161. package/dist/database/sandbox/normalize.js +165 -0
  162. package/dist/database/sandbox/normalize.js.map +1 -0
  163. package/dist/database/sandbox/push-id.d.ts +32 -0
  164. package/dist/database/sandbox/push-id.d.ts.map +1 -0
  165. package/dist/database/sandbox/push-id.js +82 -0
  166. package/dist/database/sandbox/push-id.js.map +1 -0
  167. package/dist/database/sandbox/query.d.ts +175 -0
  168. package/dist/database/sandbox/query.d.ts.map +1 -0
  169. package/dist/database/sandbox/query.js +269 -0
  170. package/dist/database/sandbox/query.js.map +1 -0
  171. package/dist/database/sandbox/rules-eval.d.ts +69 -0
  172. package/dist/database/sandbox/rules-eval.d.ts.map +1 -0
  173. package/dist/database/sandbox/rules-eval.js +124 -0
  174. package/dist/database/sandbox/rules-eval.js.map +1 -0
  175. package/dist/database/sandbox/sentinels.d.ts +71 -0
  176. package/dist/database/sandbox/sentinels.d.ts.map +1 -0
  177. package/dist/database/sandbox/sentinels.js +92 -0
  178. package/dist/database/sandbox/sentinels.js.map +1 -0
  179. package/dist/database/simulation/handler.d.ts +6 -0
  180. package/dist/database/simulation/handler.d.ts.map +1 -0
  181. package/dist/database/simulation/handler.js +236 -0
  182. package/dist/database/simulation/handler.js.map +1 -0
  183. package/dist/database/simulation/spec.d.ts +69 -0
  184. package/dist/database/simulation/spec.d.ts.map +1 -0
  185. package/dist/database/simulation/spec.js +25 -0
  186. package/dist/database/simulation/spec.js.map +1 -0
  187. package/dist/database/tools.d.ts +22 -0
  188. package/dist/database/tools.d.ts.map +1 -0
  189. package/dist/database/tools.js +272 -0
  190. package/dist/database/tools.js.map +1 -0
  191. package/dist/database/types.d.ts +210 -0
  192. package/dist/database/types.d.ts.map +1 -0
  193. package/dist/database/types.js +26 -0
  194. package/dist/database/types.js.map +1 -0
  195. package/dist/database/write/handler.d.ts +7 -0
  196. package/dist/database/write/handler.d.ts.map +1 -0
  197. package/dist/database/write/handler.js +42 -0
  198. package/dist/database/write/handler.js.map +1 -0
  199. package/dist/database/write/spec.d.ts +18 -0
  200. package/dist/database/write/spec.d.ts.map +1 -0
  201. package/dist/database/write/spec.js +7 -0
  202. package/dist/database/write/spec.js.map +1 -0
  203. package/dist/firestore/index.d.ts +533 -0
  204. package/dist/firestore/index.d.ts.map +1 -0
  205. package/dist/firestore/index.js +1536 -0
  206. package/dist/firestore/index.js.map +1 -0
  207. package/dist/firestore/tools.d.ts +67 -0
  208. package/dist/firestore/tools.d.ts.map +1 -0
  209. package/dist/firestore/tools.js +318 -0
  210. package/dist/firestore/tools.js.map +1 -0
  211. package/dist/firestore-values/index.d.ts +63 -0
  212. package/dist/firestore-values/index.d.ts.map +1 -0
  213. package/dist/firestore-values/index.js +148 -0
  214. package/dist/firestore-values/index.js.map +1 -0
  215. package/dist/project-scope.d.ts +5 -0
  216. package/dist/project-scope.d.ts.map +1 -0
  217. package/dist/project-scope.js +2 -0
  218. package/dist/project-scope.js.map +1 -0
  219. package/dist/rules/extract.d.ts +28 -0
  220. package/dist/rules/extract.d.ts.map +1 -0
  221. package/dist/rules/extract.js +25 -0
  222. package/dist/rules/extract.js.map +1 -0
  223. package/dist/rules/generators/assembler.d.ts +19 -0
  224. package/dist/rules/generators/assembler.d.ts.map +1 -0
  225. package/dist/rules/generators/assembler.js +292 -0
  226. package/dist/rules/generators/assembler.js.map +1 -0
  227. package/dist/rules/generators/expressions.d.ts +52 -0
  228. package/dist/rules/generators/expressions.d.ts.map +1 -0
  229. package/dist/rules/generators/expressions.js +117 -0
  230. package/dist/rules/generators/expressions.js.map +1 -0
  231. package/dist/rules/generators/grid.d.ts +22 -0
  232. package/dist/rules/generators/grid.d.ts.map +1 -0
  233. package/dist/rules/generators/grid.js +52 -0
  234. package/dist/rules/generators/grid.js.map +1 -0
  235. package/dist/rules/grammar/FirestoreAST.d.ts +129 -0
  236. package/dist/rules/grammar/FirestoreAST.d.ts.map +1 -0
  237. package/dist/rules/grammar/FirestoreAST.js +3 -0
  238. package/dist/rules/grammar/FirestoreAST.js.map +1 -0
  239. package/dist/rules/grammar/FirestoreAssembler.d.ts +5 -0
  240. package/dist/rules/grammar/FirestoreAssembler.d.ts.map +1 -0
  241. package/dist/rules/grammar/FirestoreAssembler.js +158 -0
  242. package/dist/rules/grammar/FirestoreAssembler.js.map +1 -0
  243. package/dist/rules/grammar/FirestoreParser.d.ts +46 -0
  244. package/dist/rules/grammar/FirestoreParser.d.ts.map +1 -0
  245. package/dist/rules/grammar/FirestoreParser.js +409 -0
  246. package/dist/rules/grammar/FirestoreParser.js.map +1 -0
  247. package/dist/rules/grammar/FirestoreRules.ohm +229 -0
  248. package/dist/rules/grammar/FirestoreRules.ohm.generated.d.ts +2 -0
  249. package/dist/rules/grammar/FirestoreRules.ohm.generated.d.ts.map +1 -0
  250. package/dist/rules/grammar/FirestoreRules.ohm.generated.js +234 -0
  251. package/dist/rules/grammar/FirestoreRules.ohm.generated.js.map +1 -0
  252. package/dist/rules/grammar/FirestoreValidator.d.ts +10 -0
  253. package/dist/rules/grammar/FirestoreValidator.d.ts.map +1 -0
  254. package/dist/rules/grammar/FirestoreValidator.js +482 -0
  255. package/dist/rules/grammar/FirestoreValidator.js.map +1 -0
  256. package/dist/rules/index.d.ts +67 -0
  257. package/dist/rules/index.d.ts.map +1 -0
  258. package/dist/rules/index.js +80 -0
  259. package/dist/rules/index.js.map +1 -0
  260. package/dist/rules/indexes/extract/annotation-collect.d.ts +42 -0
  261. package/dist/rules/indexes/extract/annotation-collect.d.ts.map +1 -0
  262. package/dist/rules/indexes/extract/annotation-collect.js +69 -0
  263. package/dist/rules/indexes/extract/annotation-collect.js.map +1 -0
  264. package/dist/rules/indexes/extract/annotations.d.ts +50 -0
  265. package/dist/rules/indexes/extract/annotations.d.ts.map +1 -0
  266. package/dist/rules/indexes/extract/annotations.js +144 -0
  267. package/dist/rules/indexes/extract/annotations.js.map +1 -0
  268. package/dist/rules/indexes/extract/ast.d.ts +54 -0
  269. package/dist/rules/indexes/extract/ast.d.ts.map +1 -0
  270. package/dist/rules/indexes/extract/ast.js +119 -0
  271. package/dist/rules/indexes/extract/ast.js.map +1 -0
  272. package/dist/rules/indexes/extract/classify.d.ts +41 -0
  273. package/dist/rules/indexes/extract/classify.d.ts.map +1 -0
  274. package/dist/rules/indexes/extract/classify.js +138 -0
  275. package/dist/rules/indexes/extract/classify.js.map +1 -0
  276. package/dist/rules/indexes/extract/composite.d.ts +38 -0
  277. package/dist/rules/indexes/extract/composite.d.ts.map +1 -0
  278. package/dist/rules/indexes/extract/composite.js +85 -0
  279. package/dist/rules/indexes/extract/composite.js.map +1 -0
  280. package/dist/rules/indexes/extract/dataflow.d.ts +45 -0
  281. package/dist/rules/indexes/extract/dataflow.d.ts.map +1 -0
  282. package/dist/rules/indexes/extract/dataflow.js +200 -0
  283. package/dist/rules/indexes/extract/dataflow.js.map +1 -0
  284. package/dist/rules/indexes/extract/enumerate.d.ts +41 -0
  285. package/dist/rules/indexes/extract/enumerate.d.ts.map +1 -0
  286. package/dist/rules/indexes/extract/enumerate.js +163 -0
  287. package/dist/rules/indexes/extract/enumerate.js.map +1 -0
  288. package/dist/rules/indexes/extract/extractor.d.ts +3 -0
  289. package/dist/rules/indexes/extract/extractor.d.ts.map +1 -0
  290. package/dist/rules/indexes/extract/extractor.js +274 -0
  291. package/dist/rules/indexes/extract/extractor.js.map +1 -0
  292. package/dist/rules/indexes/extract/types.d.ts +211 -0
  293. package/dist/rules/indexes/extract/types.d.ts.map +1 -0
  294. package/dist/rules/indexes/extract/types.js +14 -0
  295. package/dist/rules/indexes/extract/types.js.map +1 -0
  296. package/dist/rules/indexes/extractHandler.d.ts +16 -0
  297. package/dist/rules/indexes/extractHandler.d.ts.map +1 -0
  298. package/dist/rules/indexes/extractHandler.js +100 -0
  299. package/dist/rules/indexes/extractHandler.js.map +1 -0
  300. package/dist/rules/indexes/extractTool.d.ts +15 -0
  301. package/dist/rules/indexes/extractTool.d.ts.map +1 -0
  302. package/dist/rules/indexes/extractTool.js +55 -0
  303. package/dist/rules/indexes/extractTool.js.map +1 -0
  304. package/dist/rules/indexes/types.d.ts +71 -0
  305. package/dist/rules/indexes/types.d.ts.map +1 -0
  306. package/dist/rules/indexes/types.js +15 -0
  307. package/dist/rules/indexes/types.js.map +1 -0
  308. package/dist/rules/inspect/handler.d.ts +6 -0
  309. package/dist/rules/inspect/handler.d.ts.map +1 -0
  310. package/dist/rules/inspect/handler.js +144 -0
  311. package/dist/rules/inspect/handler.js.map +1 -0
  312. package/dist/rules/inspect/spec.d.ts +37 -0
  313. package/dist/rules/inspect/spec.d.ts.map +1 -0
  314. package/dist/rules/inspect/spec.js +2 -0
  315. package/dist/rules/inspect/spec.js.map +1 -0
  316. package/dist/rules/inspect/tools.d.ts +21 -0
  317. package/dist/rules/inspect/tools.d.ts.map +1 -0
  318. package/dist/rules/inspect/tools.js +21 -0
  319. package/dist/rules/inspect/tools.js.map +1 -0
  320. package/dist/rules/linter/ast-utils.d.ts +97 -0
  321. package/dist/rules/linter/ast-utils.d.ts.map +1 -0
  322. package/dist/rules/linter/ast-utils.js +491 -0
  323. package/dist/rules/linter/ast-utils.js.map +1 -0
  324. package/dist/rules/linter/hallucinations.d.ts +34 -0
  325. package/dist/rules/linter/hallucinations.d.ts.map +1 -0
  326. package/dist/rules/linter/hallucinations.js +334 -0
  327. package/dist/rules/linter/hallucinations.js.map +1 -0
  328. package/dist/rules/linter/linter.d.ts +84 -0
  329. package/dist/rules/linter/linter.d.ts.map +1 -0
  330. package/dist/rules/linter/linter.js +784 -0
  331. package/dist/rules/linter/linter.js.map +1 -0
  332. package/dist/rules/modules/resolver-browser.d.ts +41 -0
  333. package/dist/rules/modules/resolver-browser.d.ts.map +1 -0
  334. package/dist/rules/modules/resolver-browser.js +63 -0
  335. package/dist/rules/modules/resolver-browser.js.map +1 -0
  336. package/dist/rules/modules/resolver-core.d.ts +51 -0
  337. package/dist/rules/modules/resolver-core.d.ts.map +1 -0
  338. package/dist/rules/modules/resolver-core.js +338 -0
  339. package/dist/rules/modules/resolver-core.js.map +1 -0
  340. package/dist/rules/modules/resolver.d.ts +17 -0
  341. package/dist/rules/modules/resolver.d.ts.map +1 -0
  342. package/dist/rules/modules/resolver.js +49 -0
  343. package/dist/rules/modules/resolver.js.map +1 -0
  344. package/dist/rules/modules/stdlib/atomic.rules +52 -0
  345. package/dist/rules/modules/stdlib/atomic.test.json +152 -0
  346. package/dist/rules/modules/stdlib/auth.rules +7 -0
  347. package/dist/rules/modules/stdlib/auth.test.json +53 -0
  348. package/dist/rules/modules/stdlib/content.rules +50 -0
  349. package/dist/rules/modules/stdlib/content.test.json +238 -0
  350. package/dist/rules/modules/stdlib/counters.rules +41 -0
  351. package/dist/rules/modules/stdlib/counters.test.json +254 -0
  352. package/dist/rules/modules/stdlib/geometry.rules +43 -0
  353. package/dist/rules/modules/stdlib/geometry.test.json +200 -0
  354. package/dist/rules/modules/stdlib/joining.rules +49 -0
  355. package/dist/rules/modules/stdlib/joining.test.json +287 -0
  356. package/dist/rules/modules/stdlib/lifecycle.rules +51 -0
  357. package/dist/rules/modules/stdlib/lifecycle.test.json +288 -0
  358. package/dist/rules/modules/stdlib/lobby.rules +44 -0
  359. package/dist/rules/modules/stdlib/lobby.test.json +32 -0
  360. package/dist/rules/modules/stdlib/membership.rules +40 -0
  361. package/dist/rules/modules/stdlib/membership.test.json +107 -0
  362. package/dist/rules/modules/stdlib/spaces.rules +46 -0
  363. package/dist/rules/modules/stdlib/spaces.test.json +392 -0
  364. package/dist/rules/modules/stdlib/state.rules +28 -0
  365. package/dist/rules/modules/stdlib/state.test.json +55 -0
  366. package/dist/rules/modules/stdlib/timing.rules +20 -0
  367. package/dist/rules/modules/stdlib/timing.test.json +106 -0
  368. package/dist/rules/modules/stdlib/transitions.rules +34 -0
  369. package/dist/rules/modules/stdlib/transitions.test.json +86 -0
  370. package/dist/rules/modules/stdlib/turns.rules +27 -0
  371. package/dist/rules/modules/stdlib/turns.test.json +64 -0
  372. package/dist/rules/modules/stdlib/validation.rules +31 -0
  373. package/dist/rules/modules/stdlib/validation.test.json +184 -0
  374. package/dist/rules/modules/stdlib-content.d.ts +11 -0
  375. package/dist/rules/modules/stdlib-content.d.ts.map +1 -0
  376. package/dist/rules/modules/stdlib-content.js +590 -0
  377. package/dist/rules/modules/stdlib-content.js.map +1 -0
  378. package/dist/rules/node.d.ts +17 -0
  379. package/dist/rules/node.d.ts.map +1 -0
  380. package/dist/rules/node.js +21 -0
  381. package/dist/rules/node.js.map +1 -0
  382. package/dist/rules/rtdb.d.ts +28 -0
  383. package/dist/rules/rtdb.d.ts.map +1 -0
  384. package/dist/rules/rtdb.js +15 -0
  385. package/dist/rules/rtdb.js.map +1 -0
  386. package/dist/rules/simulator/evaluator.d.ts +179 -0
  387. package/dist/rules/simulator/evaluator.d.ts.map +1 -0
  388. package/dist/rules/simulator/evaluator.js +1221 -0
  389. package/dist/rules/simulator/evaluator.js.map +1 -0
  390. package/dist/rules/simulator/expression/eval-errors.d.ts +86 -0
  391. package/dist/rules/simulator/expression/eval-errors.d.ts.map +1 -0
  392. package/dist/rules/simulator/expression/eval-errors.js +68 -0
  393. package/dist/rules/simulator/expression/eval-errors.js.map +1 -0
  394. package/dist/rules/simulator/expression/evaluator.d.ts +43 -0
  395. package/dist/rules/simulator/expression/evaluator.d.ts.map +1 -0
  396. package/dist/rules/simulator/expression/evaluator.js +298 -0
  397. package/dist/rules/simulator/expression/evaluator.js.map +1 -0
  398. package/dist/rules/simulator/expression/lexer.d.ts +36 -0
  399. package/dist/rules/simulator/expression/lexer.d.ts.map +1 -0
  400. package/dist/rules/simulator/expression/lexer.js +318 -0
  401. package/dist/rules/simulator/expression/lexer.js.map +1 -0
  402. package/dist/rules/simulator/expression/parser.d.ts +39 -0
  403. package/dist/rules/simulator/expression/parser.d.ts.map +1 -0
  404. package/dist/rules/simulator/expression/parser.js +329 -0
  405. package/dist/rules/simulator/expression/parser.js.map +1 -0
  406. package/dist/rules/simulator/expression/types.d.ts +137 -0
  407. package/dist/rules/simulator/expression/types.d.ts.map +1 -0
  408. package/dist/rules/simulator/expression/types.js +90 -0
  409. package/dist/rules/simulator/expression/types.js.map +1 -0
  410. package/dist/rules/simulator/expression/walk-data.d.ts +52 -0
  411. package/dist/rules/simulator/expression/walk-data.d.ts.map +1 -0
  412. package/dist/rules/simulator/expression/walk-data.js +167 -0
  413. package/dist/rules/simulator/expression/walk-data.js.map +1 -0
  414. package/dist/rules/simulator/firestore-set.d.ts +25 -0
  415. package/dist/rules/simulator/firestore-set.d.ts.map +1 -0
  416. package/dist/rules/simulator/firestore-set.js +89 -0
  417. package/dist/rules/simulator/firestore-set.js.map +1 -0
  418. package/dist/rules/simulator/handler.d.ts +36 -0
  419. package/dist/rules/simulator/handler.d.ts.map +1 -0
  420. package/dist/rules/simulator/handler.js +583 -0
  421. package/dist/rules/simulator/handler.js.map +1 -0
  422. package/dist/rules/simulator/mapdiff.d.ts +29 -0
  423. package/dist/rules/simulator/mapdiff.d.ts.map +1 -0
  424. package/dist/rules/simulator/mapdiff.js +72 -0
  425. package/dist/rules/simulator/mapdiff.js.map +1 -0
  426. package/dist/rules/simulator/project-after-state.d.ts +33 -0
  427. package/dist/rules/simulator/project-after-state.d.ts.map +1 -0
  428. package/dist/rules/simulator/project-after-state.js +88 -0
  429. package/dist/rules/simulator/project-after-state.js.map +1 -0
  430. package/dist/rules/simulator/query-proof.d.ts +80 -0
  431. package/dist/rules/simulator/query-proof.d.ts.map +1 -0
  432. package/dist/rules/simulator/query-proof.js +142 -0
  433. package/dist/rules/simulator/query-proof.js.map +1 -0
  434. package/dist/rules/simulator/value-equality.d.ts +8 -0
  435. package/dist/rules/simulator/value-equality.d.ts.map +1 -0
  436. package/dist/rules/simulator/value-equality.js +40 -0
  437. package/dist/rules/simulator/value-equality.js.map +1 -0
  438. package/dist/rules/simulator/wrappers/base.d.ts +129 -0
  439. package/dist/rules/simulator/wrappers/base.d.ts.map +1 -0
  440. package/dist/rules/simulator/wrappers/base.js +90 -0
  441. package/dist/rules/simulator/wrappers/base.js.map +1 -0
  442. package/dist/rules/simulator/wrappers/bytes.d.ts +45 -0
  443. package/dist/rules/simulator/wrappers/bytes.d.ts.map +1 -0
  444. package/dist/rules/simulator/wrappers/bytes.js +130 -0
  445. package/dist/rules/simulator/wrappers/bytes.js.map +1 -0
  446. package/dist/rules/simulator/wrappers/duration.d.ts +76 -0
  447. package/dist/rules/simulator/wrappers/duration.d.ts.map +1 -0
  448. package/dist/rules/simulator/wrappers/duration.js +176 -0
  449. package/dist/rules/simulator/wrappers/duration.js.map +1 -0
  450. package/dist/rules/simulator/wrappers/float.d.ts +52 -0
  451. package/dist/rules/simulator/wrappers/float.d.ts.map +1 -0
  452. package/dist/rules/simulator/wrappers/float.js +88 -0
  453. package/dist/rules/simulator/wrappers/float.js.map +1 -0
  454. package/dist/rules/simulator/wrappers/latlng.d.ts +40 -0
  455. package/dist/rules/simulator/wrappers/latlng.d.ts.map +1 -0
  456. package/dist/rules/simulator/wrappers/latlng.js +100 -0
  457. package/dist/rules/simulator/wrappers/latlng.js.map +1 -0
  458. package/dist/rules/simulator/wrappers/path.d.ts +75 -0
  459. package/dist/rules/simulator/wrappers/path.d.ts.map +1 -0
  460. package/dist/rules/simulator/wrappers/path.js +158 -0
  461. package/dist/rules/simulator/wrappers/path.js.map +1 -0
  462. package/dist/rules/simulator/wrappers/reference.d.ts +82 -0
  463. package/dist/rules/simulator/wrappers/reference.d.ts.map +1 -0
  464. package/dist/rules/simulator/wrappers/reference.js +145 -0
  465. package/dist/rules/simulator/wrappers/reference.js.map +1 -0
  466. package/dist/rules/simulator/wrappers/timestamp.d.ts +86 -0
  467. package/dist/rules/simulator/wrappers/timestamp.d.ts.map +1 -0
  468. package/dist/rules/simulator/wrappers/timestamp.js +207 -0
  469. package/dist/rules/simulator/wrappers/timestamp.js.map +1 -0
  470. package/dist/rules/simulator/wrappers/vector.d.ts +43 -0
  471. package/dist/rules/simulator/wrappers/vector.d.ts.map +1 -0
  472. package/dist/rules/simulator/wrappers/vector.js +80 -0
  473. package/dist/rules/simulator/wrappers/vector.js.map +1 -0
  474. package/dist/rules/simulator-tools-impl.d.ts +64 -0
  475. package/dist/rules/simulator-tools-impl.d.ts.map +1 -0
  476. package/dist/rules/simulator-tools-impl.js +462 -0
  477. package/dist/rules/simulator-tools-impl.js.map +1 -0
  478. package/dist/rules/simulator.d.ts +20 -0
  479. package/dist/rules/simulator.d.ts.map +1 -0
  480. package/dist/rules/simulator.js +24 -0
  481. package/dist/rules/simulator.js.map +1 -0
  482. package/dist/rules/stdlib-modules.d.ts +73 -0
  483. package/dist/rules/stdlib-modules.d.ts.map +1 -0
  484. package/dist/rules/stdlib-modules.js +849 -0
  485. package/dist/rules/stdlib-modules.js.map +1 -0
  486. package/dist/rules/stdlib-tools.d.ts +19 -0
  487. package/dist/rules/stdlib-tools.d.ts.map +1 -0
  488. package/dist/rules/stdlib-tools.js +164 -0
  489. package/dist/rules/stdlib-tools.js.map +1 -0
  490. package/dist/rules/test/handler.d.ts +9 -0
  491. package/dist/rules/test/handler.d.ts.map +1 -0
  492. package/dist/rules/test/handler.js +124 -0
  493. package/dist/rules/test/handler.js.map +1 -0
  494. package/dist/rules/test/spec.d.ts +517 -0
  495. package/dist/rules/test/spec.d.ts.map +1 -0
  496. package/dist/rules/test/spec.js +227 -0
  497. package/dist/rules/test/spec.js.map +1 -0
  498. package/dist/rules/tools.d.ts +41 -0
  499. package/dist/rules/tools.d.ts.map +1 -0
  500. package/dist/rules/tools.js +124 -0
  501. package/dist/rules/tools.js.map +1 -0
  502. package/dist/rules/write/handler.d.ts +6 -0
  503. package/dist/rules/write/handler.d.ts.map +1 -0
  504. package/dist/rules/write/handler.js +126 -0
  505. package/dist/rules/write/handler.js.map +1 -0
  506. package/dist/rules/write/spec.d.ts +28 -0
  507. package/dist/rules/write/spec.d.ts.map +1 -0
  508. package/dist/rules/write/spec.js +2 -0
  509. package/dist/rules/write/spec.js.map +1 -0
  510. package/dist/sandbox/admin-compat.d.ts +20 -0
  511. package/dist/sandbox/admin-compat.d.ts.map +1 -0
  512. package/dist/sandbox/admin-compat.js +19 -0
  513. package/dist/sandbox/admin-compat.js.map +1 -0
  514. package/dist/sandbox/admin-firestore/error-translation.d.ts +86 -0
  515. package/dist/sandbox/admin-firestore/error-translation.d.ts.map +1 -0
  516. package/dist/sandbox/admin-firestore/error-translation.js +204 -0
  517. package/dist/sandbox/admin-firestore/error-translation.js.map +1 -0
  518. package/dist/sandbox/admin-firestore/index.d.ts +169 -0
  519. package/dist/sandbox/admin-firestore/index.d.ts.map +1 -0
  520. package/dist/sandbox/admin-firestore/index.js +456 -0
  521. package/dist/sandbox/admin-firestore/index.js.map +1 -0
  522. package/dist/sandbox/admin-firestore/remote.d.ts +97 -0
  523. package/dist/sandbox/admin-firestore/remote.d.ts.map +1 -0
  524. package/dist/sandbox/admin-firestore/remote.js +735 -0
  525. package/dist/sandbox/admin-firestore/remote.js.map +1 -0
  526. package/dist/sandbox/branches/index.d.ts +141 -0
  527. package/dist/sandbox/branches/index.d.ts.map +1 -0
  528. package/dist/sandbox/branches/index.js +327 -0
  529. package/dist/sandbox/branches/index.js.map +1 -0
  530. package/dist/sandbox/firestore/admin-compat/batch.d.ts +34 -0
  531. package/dist/sandbox/firestore/admin-compat/batch.d.ts.map +1 -0
  532. package/dist/sandbox/firestore/admin-compat/batch.js +73 -0
  533. package/dist/sandbox/firestore/admin-compat/batch.js.map +1 -0
  534. package/dist/sandbox/firestore/admin-compat/doc-ref.d.ts +38 -0
  535. package/dist/sandbox/firestore/admin-compat/doc-ref.d.ts.map +1 -0
  536. package/dist/sandbox/firestore/admin-compat/doc-ref.js +154 -0
  537. package/dist/sandbox/firestore/admin-compat/doc-ref.js.map +1 -0
  538. package/dist/sandbox/firestore/admin-compat/firestore.d.ts +45 -0
  539. package/dist/sandbox/firestore/admin-compat/firestore.d.ts.map +1 -0
  540. package/dist/sandbox/firestore/admin-compat/firestore.js +114 -0
  541. package/dist/sandbox/firestore/admin-compat/firestore.js.map +1 -0
  542. package/dist/sandbox/firestore/admin-compat/index.d.ts +45 -0
  543. package/dist/sandbox/firestore/admin-compat/index.d.ts.map +1 -0
  544. package/dist/sandbox/firestore/admin-compat/index.js +27 -0
  545. package/dist/sandbox/firestore/admin-compat/index.js.map +1 -0
  546. package/dist/sandbox/firestore/admin-compat/paths.d.ts +37 -0
  547. package/dist/sandbox/firestore/admin-compat/paths.d.ts.map +1 -0
  548. package/dist/sandbox/firestore/admin-compat/paths.js +49 -0
  549. package/dist/sandbox/firestore/admin-compat/paths.js.map +1 -0
  550. package/dist/sandbox/firestore/admin-compat/query.d.ts +261 -0
  551. package/dist/sandbox/firestore/admin-compat/query.d.ts.map +1 -0
  552. package/dist/sandbox/firestore/admin-compat/query.js +704 -0
  553. package/dist/sandbox/firestore/admin-compat/query.js.map +1 -0
  554. package/dist/sandbox/firestore/admin-compat/read-translation.d.ts +8 -0
  555. package/dist/sandbox/firestore/admin-compat/read-translation.d.ts.map +1 -0
  556. package/dist/sandbox/firestore/admin-compat/read-translation.js +59 -0
  557. package/dist/sandbox/firestore/admin-compat/read-translation.js.map +1 -0
  558. package/dist/sandbox/firestore/admin-compat/snapshots.d.ts +39 -0
  559. package/dist/sandbox/firestore/admin-compat/snapshots.d.ts.map +1 -0
  560. package/dist/sandbox/firestore/admin-compat/snapshots.js +50 -0
  561. package/dist/sandbox/firestore/admin-compat/snapshots.js.map +1 -0
  562. package/dist/sandbox/firestore/admin-compat/transaction.d.ts +35 -0
  563. package/dist/sandbox/firestore/admin-compat/transaction.d.ts.map +1 -0
  564. package/dist/sandbox/firestore/admin-compat/transaction.js +88 -0
  565. package/dist/sandbox/firestore/admin-compat/transaction.js.map +1 -0
  566. package/dist/sandbox/firestore/admin-compat/types.d.ts +297 -0
  567. package/dist/sandbox/firestore/admin-compat/types.d.ts.map +1 -0
  568. package/dist/sandbox/firestore/admin-compat/types.js +127 -0
  569. package/dist/sandbox/firestore/admin-compat/types.js.map +1 -0
  570. package/dist/sandbox/firestore/admin-compat/value-order.d.ts +49 -0
  571. package/dist/sandbox/firestore/admin-compat/value-order.d.ts.map +1 -0
  572. package/dist/sandbox/firestore/admin-compat/value-order.js +172 -0
  573. package/dist/sandbox/firestore/admin-compat/value-order.js.map +1 -0
  574. package/dist/sandbox/firestore/auto-id.d.ts +26 -0
  575. package/dist/sandbox/firestore/auto-id.d.ts.map +1 -0
  576. package/dist/sandbox/firestore/auto-id.js +36 -0
  577. package/dist/sandbox/firestore/auto-id.js.map +1 -0
  578. package/dist/sandbox/firestore/converters/bytes-geopoint.d.ts +48 -0
  579. package/dist/sandbox/firestore/converters/bytes-geopoint.d.ts.map +1 -0
  580. package/dist/sandbox/firestore/converters/bytes-geopoint.js +85 -0
  581. package/dist/sandbox/firestore/converters/bytes-geopoint.js.map +1 -0
  582. package/dist/sandbox/firestore/converters/fieldvalue.d.ts +69 -0
  583. package/dist/sandbox/firestore/converters/fieldvalue.d.ts.map +1 -0
  584. package/dist/sandbox/firestore/converters/fieldvalue.js +166 -0
  585. package/dist/sandbox/firestore/converters/fieldvalue.js.map +1 -0
  586. package/dist/sandbox/firestore/converters/reference.d.ts +31 -0
  587. package/dist/sandbox/firestore/converters/reference.d.ts.map +1 -0
  588. package/dist/sandbox/firestore/converters/reference.js +51 -0
  589. package/dist/sandbox/firestore/converters/reference.js.map +1 -0
  590. package/dist/sandbox/firestore/converters/timestamp.d.ts +32 -0
  591. package/dist/sandbox/firestore/converters/timestamp.d.ts.map +1 -0
  592. package/dist/sandbox/firestore/converters/timestamp.js +63 -0
  593. package/dist/sandbox/firestore/converters/timestamp.js.map +1 -0
  594. package/dist/sandbox/firestore/converters/user-timestamp.d.ts +46 -0
  595. package/dist/sandbox/firestore/converters/user-timestamp.d.ts.map +1 -0
  596. package/dist/sandbox/firestore/converters/user-timestamp.js +65 -0
  597. package/dist/sandbox/firestore/converters/user-timestamp.js.map +1 -0
  598. package/dist/sandbox/firestore/converters/vector.d.ts +24 -0
  599. package/dist/sandbox/firestore/converters/vector.d.ts.map +1 -0
  600. package/dist/sandbox/firestore/converters/vector.js +53 -0
  601. package/dist/sandbox/firestore/converters/vector.js.map +1 -0
  602. package/dist/sandbox/firestore/errors.d.ts +82 -0
  603. package/dist/sandbox/firestore/errors.d.ts.map +1 -0
  604. package/dist/sandbox/firestore/errors.js +54 -0
  605. package/dist/sandbox/firestore/errors.js.map +1 -0
  606. package/dist/sandbox/firestore/event-log.d.ts +99 -0
  607. package/dist/sandbox/firestore/event-log.d.ts.map +1 -0
  608. package/dist/sandbox/firestore/event-log.js +67 -0
  609. package/dist/sandbox/firestore/event-log.js.map +1 -0
  610. package/dist/sandbox/firestore/field-merge.d.ts +64 -0
  611. package/dist/sandbox/firestore/field-merge.d.ts.map +1 -0
  612. package/dist/sandbox/firestore/field-merge.js +221 -0
  613. package/dist/sandbox/firestore/field-merge.js.map +1 -0
  614. package/dist/sandbox/firestore/list-query-proof.d.ts +77 -0
  615. package/dist/sandbox/firestore/list-query-proof.d.ts.map +1 -0
  616. package/dist/sandbox/firestore/list-query-proof.js +170 -0
  617. package/dist/sandbox/firestore/list-query-proof.js.map +1 -0
  618. package/dist/sandbox/firestore/local-environment.d.ts +806 -0
  619. package/dist/sandbox/firestore/local-environment.d.ts.map +1 -0
  620. package/dist/sandbox/firestore/local-environment.js +3028 -0
  621. package/dist/sandbox/firestore/local-environment.js.map +1 -0
  622. package/dist/sandbox/firestore/local-state.d.ts +196 -0
  623. package/dist/sandbox/firestore/local-state.d.ts.map +1 -0
  624. package/dist/sandbox/firestore/local-state.js +413 -0
  625. package/dist/sandbox/firestore/local-state.js.map +1 -0
  626. package/dist/sandbox/firestore/overlay-backing.d.ts +44 -0
  627. package/dist/sandbox/firestore/overlay-backing.d.ts.map +1 -0
  628. package/dist/sandbox/firestore/overlay-backing.js +82 -0
  629. package/dist/sandbox/firestore/overlay-backing.js.map +1 -0
  630. package/dist/sandbox/firestore/sentinel-capture.d.ts +30 -0
  631. package/dist/sandbox/firestore/sentinel-capture.d.ts.map +1 -0
  632. package/dist/sandbox/firestore/sentinel-capture.js +61 -0
  633. package/dist/sandbox/firestore/sentinel-capture.js.map +1 -0
  634. package/dist/sandbox/firestore/snapshot-listeners.d.ts +284 -0
  635. package/dist/sandbox/firestore/snapshot-listeners.d.ts.map +1 -0
  636. package/dist/sandbox/firestore/snapshot-listeners.js +194 -0
  637. package/dist/sandbox/firestore/snapshot-listeners.js.map +1 -0
  638. package/dist/sandbox/firestore/topk.d.ts +12 -0
  639. package/dist/sandbox/firestore/topk.d.ts.map +1 -0
  640. package/dist/sandbox/firestore/topk.js +42 -0
  641. package/dist/sandbox/firestore/topk.js.map +1 -0
  642. package/dist/sandbox/firestore/transaction-merge.d.ts +55 -0
  643. package/dist/sandbox/firestore/transaction-merge.d.ts.map +1 -0
  644. package/dist/sandbox/firestore/transaction-merge.js +107 -0
  645. package/dist/sandbox/firestore/transaction-merge.js.map +1 -0
  646. package/dist/sandbox/firestore/transaction-types.d.ts +152 -0
  647. package/dist/sandbox/firestore/transaction-types.d.ts.map +1 -0
  648. package/dist/sandbox/firestore/transaction-types.js +10 -0
  649. package/dist/sandbox/firestore/transaction-types.js.map +1 -0
  650. package/dist/sandbox/firestore/transaction.d.ts +79 -0
  651. package/dist/sandbox/firestore/transaction.d.ts.map +1 -0
  652. package/dist/sandbox/firestore/transaction.js +95 -0
  653. package/dist/sandbox/firestore/transaction.js.map +1 -0
  654. package/dist/sandbox/firestore/value-equality.d.ts +2 -0
  655. package/dist/sandbox/firestore/value-equality.d.ts.map +1 -0
  656. package/dist/sandbox/firestore/value-equality.js +35 -0
  657. package/dist/sandbox/firestore/value-equality.js.map +1 -0
  658. package/dist/sandbox/firestore/value-resolver.d.ts +172 -0
  659. package/dist/sandbox/firestore/value-resolver.d.ts.map +1 -0
  660. package/dist/sandbox/firestore/value-resolver.js +221 -0
  661. package/dist/sandbox/firestore/value-resolver.js.map +1 -0
  662. package/dist/sandbox/firestore/wire-encoder.d.ts +14 -0
  663. package/dist/sandbox/firestore/wire-encoder.d.ts.map +1 -0
  664. package/dist/sandbox/firestore/wire-encoder.js +130 -0
  665. package/dist/sandbox/firestore/wire-encoder.js.map +1 -0
  666. package/dist/sandbox/index.d.ts +50 -0
  667. package/dist/sandbox/index.d.ts.map +1 -0
  668. package/dist/sandbox/index.js +63 -0
  669. package/dist/sandbox/index.js.map +1 -0
  670. package/dist/sandbox/internal/index.d.ts +36 -0
  671. package/dist/sandbox/internal/index.d.ts.map +1 -0
  672. package/dist/sandbox/internal/index.js +72 -0
  673. package/dist/sandbox/internal/index.js.map +1 -0
  674. package/dist/sandbox/internal/sandbox-impl.d.ts +343 -0
  675. package/dist/sandbox/internal/sandbox-impl.d.ts.map +1 -0
  676. package/dist/sandbox/internal/sandbox-impl.js +718 -0
  677. package/dist/sandbox/internal/sandbox-impl.js.map +1 -0
  678. package/dist/sandbox/persistence/backends.d.ts +37 -0
  679. package/dist/sandbox/persistence/backends.d.ts.map +1 -0
  680. package/dist/sandbox/persistence/backends.js +202 -0
  681. package/dist/sandbox/persistence/backends.js.map +1 -0
  682. package/dist/sandbox/persistence/chunk-format.d.ts +58 -0
  683. package/dist/sandbox/persistence/chunk-format.d.ts.map +1 -0
  684. package/dist/sandbox/persistence/chunk-format.js +163 -0
  685. package/dist/sandbox/persistence/chunk-format.js.map +1 -0
  686. package/dist/sandbox/persistence/controller.d.ts +39 -0
  687. package/dist/sandbox/persistence/controller.d.ts.map +1 -0
  688. package/dist/sandbox/persistence/controller.js +605 -0
  689. package/dist/sandbox/persistence/controller.js.map +1 -0
  690. package/dist/sandbox/persistence/index.d.ts +13 -0
  691. package/dist/sandbox/persistence/index.d.ts.map +1 -0
  692. package/dist/sandbox/persistence/index.js +5 -0
  693. package/dist/sandbox/persistence/index.js.map +1 -0
  694. package/dist/sandbox/persistence/serialize.d.ts +53 -0
  695. package/dist/sandbox/persistence/serialize.d.ts.map +1 -0
  696. package/dist/sandbox/persistence/serialize.js +98 -0
  697. package/dist/sandbox/persistence/serialize.js.map +1 -0
  698. package/dist/sandbox/persistence/types.d.ts +118 -0
  699. package/dist/sandbox/persistence/types.d.ts.map +1 -0
  700. package/dist/sandbox/persistence/types.js +15 -0
  701. package/dist/sandbox/persistence/types.js.map +1 -0
  702. package/dist/sandbox/remote.d.ts +118 -0
  703. package/dist/sandbox/remote.d.ts.map +1 -0
  704. package/dist/sandbox/remote.js +60 -0
  705. package/dist/sandbox/remote.js.map +1 -0
  706. package/dist/sandbox/replay/index.d.ts +106 -0
  707. package/dist/sandbox/replay/index.d.ts.map +1 -0
  708. package/dist/sandbox/replay/index.js +246 -0
  709. package/dist/sandbox/replay/index.js.map +1 -0
  710. package/dist/sandbox/sandbox-context.d.ts +40 -0
  711. package/dist/sandbox/sandbox-context.d.ts.map +1 -0
  712. package/dist/sandbox/sandbox-context.js +72 -0
  713. package/dist/sandbox/sandbox-context.js.map +1 -0
  714. package/dist/sandbox/tab-sync/index.d.ts +120 -0
  715. package/dist/sandbox/tab-sync/index.d.ts.map +1 -0
  716. package/dist/sandbox/tab-sync/index.js +272 -0
  717. package/dist/sandbox/tab-sync/index.js.map +1 -0
  718. package/dist/sandbox/types.d.ts +1235 -0
  719. package/dist/sandbox/types.d.ts.map +1 -0
  720. package/dist/sandbox/types.js +46 -0
  721. package/dist/sandbox/types.js.map +1 -0
  722. package/dist/storage/admin/api.d.ts +206 -0
  723. package/dist/storage/admin/api.d.ts.map +1 -0
  724. package/dist/storage/admin/api.js +349 -0
  725. package/dist/storage/admin/api.js.map +1 -0
  726. package/dist/storage/admin/handler.d.ts +29 -0
  727. package/dist/storage/admin/handler.d.ts.map +1 -0
  728. package/dist/storage/admin/handler.js +82 -0
  729. package/dist/storage/admin/handler.js.map +1 -0
  730. package/dist/storage/admin/spec.d.ts +64 -0
  731. package/dist/storage/admin/spec.d.ts.map +1 -0
  732. package/dist/storage/admin/spec.js +8 -0
  733. package/dist/storage/admin/spec.js.map +1 -0
  734. package/dist/storage/admin/tools.d.ts +23 -0
  735. package/dist/storage/admin/tools.d.ts.map +1 -0
  736. package/dist/storage/admin/tools.js +90 -0
  737. package/dist/storage/admin/tools.js.map +1 -0
  738. package/dist/storage/download.d.ts +27 -0
  739. package/dist/storage/download.d.ts.map +1 -0
  740. package/dist/storage/download.js +136 -0
  741. package/dist/storage/download.js.map +1 -0
  742. package/dist/storage/enforce.d.ts +26 -0
  743. package/dist/storage/enforce.d.ts.map +1 -0
  744. package/dist/storage/enforce.js +16 -0
  745. package/dist/storage/enforce.js.map +1 -0
  746. package/dist/storage/errors.d.ts +46 -0
  747. package/dist/storage/errors.d.ts.map +1 -0
  748. package/dist/storage/errors.js +62 -0
  749. package/dist/storage/errors.js.map +1 -0
  750. package/dist/storage/index.d.ts +49 -0
  751. package/dist/storage/index.d.ts.map +1 -0
  752. package/dist/storage/index.js +60 -0
  753. package/dist/storage/index.js.map +1 -0
  754. package/dist/storage/internal.d.ts +18 -0
  755. package/dist/storage/internal.d.ts.map +1 -0
  756. package/dist/storage/internal.js +18 -0
  757. package/dist/storage/internal.js.map +1 -0
  758. package/dist/storage/list.d.ts +17 -0
  759. package/dist/storage/list.d.ts.map +1 -0
  760. package/dist/storage/list.js +91 -0
  761. package/dist/storage/list.js.map +1 -0
  762. package/dist/storage/metadata.d.ts +86 -0
  763. package/dist/storage/metadata.d.ts.map +1 -0
  764. package/dist/storage/metadata.js +167 -0
  765. package/dist/storage/metadata.js.map +1 -0
  766. package/dist/storage/persistence.d.ts +134 -0
  767. package/dist/storage/persistence.d.ts.map +1 -0
  768. package/dist/storage/persistence.js +132 -0
  769. package/dist/storage/persistence.js.map +1 -0
  770. package/dist/storage/reference.d.ts +63 -0
  771. package/dist/storage/reference.d.ts.map +1 -0
  772. package/dist/storage/reference.js +156 -0
  773. package/dist/storage/reference.js.map +1 -0
  774. package/dist/storage/rules.d.ts +176 -0
  775. package/dist/storage/rules.d.ts.map +1 -0
  776. package/dist/storage/rules.js +621 -0
  777. package/dist/storage/rules.js.map +1 -0
  778. package/dist/storage/service.d.ts +139 -0
  779. package/dist/storage/service.d.ts.map +1 -0
  780. package/dist/storage/service.js +241 -0
  781. package/dist/storage/service.js.map +1 -0
  782. package/dist/storage/upload.d.ts +43 -0
  783. package/dist/storage/upload.d.ts.map +1 -0
  784. package/dist/storage/upload.js +235 -0
  785. package/dist/storage/upload.js.map +1 -0
  786. package/package.json +109 -3
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Firestore value codec — the marker-based serialize/rehydrate of
3
+ * Firestore special scalar types (Timestamp, Bytes, LatLng/GeoPoint,
4
+ * Duration, Reference, Path, Vector).
5
+ *
6
+ * WHY THIS MODULE EXISTS (and why it is a LEAF)
7
+ * ---------------------------------------------
8
+ * Two very different consumers need this codec:
9
+ *
10
+ * 1. The sandbox persistence serializer (`sandbox/persistence/serialize.ts`)
11
+ * — server-side, already pulls the whole engine, doesn't care about size.
12
+ * 2. The SharedWorker CLIENT (`pyric-tools/.../worker/client.ts` via
13
+ * `protocol.ts`) — runs in EVERY page that opens a serve session. It only
14
+ * needs to reconstruct Timestamp/Bytes/LatLng instances from the JSON
15
+ * markers the worker host wrote; it must NOT drag the rules engine,
16
+ * simulator, parser, or sandbox into the per-page bundle.
17
+ *
18
+ * Importing the wrapper CLASSES from the `pyric/rules` BARREL would execute the
19
+ * entire rules index (parser + linter + simulator + evaluator → ~10 MB). The
20
+ * wrapper modules themselves are leaf — each depends only on `wrappers/base.js`
21
+ * which has zero imports — so this codec imports them by their DIRECT leaf
22
+ * paths. The result: importing this module pulls ONLY the seven small wrapper
23
+ * classes + their `base.js`, nothing heavy.
24
+ *
25
+ * Real types, not structural stand-ins: because the wrapper constructors are
26
+ * already leaf-cheap, the codec reconstructs the SAME real `Timestamp`/`Bytes`/
27
+ * `LatLng`/etc. classes the in-page (`pyric/firestore`) path yields. This keeps
28
+ * `instanceof` checks and method calls (`.toDate()`, `.toMillis()`, byte
29
+ * access, `.lat`/`.lng`) identical on both sides of the MessagePort and in IDB
30
+ * persistence — there is ONE codec, not two that can drift.
31
+ *
32
+ * Marker formats handled (must stay in sync with each wrapper's `toJSON()`):
33
+ *
34
+ * 1. `pyric/rules` wrapper markers (from `Timestamp.toJSON()` etc.):
35
+ * { __type: 'timestamp', seconds, nanos } → Timestamp
36
+ * { __type: 'bytes', base64 } → Bytes (base64url)
37
+ * { __type: 'latlng', lat, lng } → LatLng
38
+ * { __type: 'duration', seconds, nanos } → Duration
39
+ * { __type: 'reference', path } → Reference
40
+ * { __type: 'path', segments } → Path
41
+ * { __type__: '__vector__', value } → Vector
42
+ *
43
+ * 2. `firebase/firestore` SDK markers (from fb.Timestamp.toJSON() etc.),
44
+ * produced when `pyric/firestore`'s `getDoc` returns `firebase/firestore`
45
+ * class instances that are then serialized via JSON.stringify:
46
+ * { type: 'firestore/timestamp/1.0', seconds, nanoseconds } → Timestamp
47
+ * { type: 'firestore/bytes/1.0', bytes } → Bytes (std b64)
48
+ * { type: 'firestore/geoPoint/1.0', latitude, longitude } → LatLng
49
+ *
50
+ * Unknown `__type`/`type` values pass through as plain objects rather than
51
+ * throwing — the rest of the doc still restores cleanly.
52
+ */
53
+ // Direct leaf imports — NOT the `pyric/rules` barrel. Each of these modules
54
+ // depends only on `./base.js` (no imports), so this stays engine-free.
55
+ import { Bytes } from '../rules/simulator/wrappers/bytes.js';
56
+ import { Duration } from '../rules/simulator/wrappers/duration.js';
57
+ import { LatLng } from '../rules/simulator/wrappers/latlng.js';
58
+ import { Path } from '../rules/simulator/wrappers/path.js';
59
+ import { Reference } from '../rules/simulator/wrappers/reference.js';
60
+ import { Timestamp } from '../rules/simulator/wrappers/timestamp.js';
61
+ import { Vector } from '../rules/simulator/wrappers/vector.js';
62
+ /**
63
+ * Decode a base64url string (`-`/`_` alphabet, no padding) back into a
64
+ * Uint8Array. Mirrors the encode path in `Bytes.toBase64` (RFC 4648 section 5).
65
+ */
66
+ function base64UrlDecode(s) {
67
+ const std = s.replace(/-/g, '+').replace(/_/g, '/');
68
+ const pad = std.length % 4 === 0 ? '' : '='.repeat(4 - (std.length % 4));
69
+ const bin = atob(std + pad);
70
+ const out = new Uint8Array(bin.length);
71
+ for (let i = 0; i < bin.length; i++)
72
+ out[i] = bin.charCodeAt(i);
73
+ return out;
74
+ }
75
+ /**
76
+ * Decode a standard base64 string (`+`/`/` alphabet, possibly `=`-padded)
77
+ * back to a Uint8Array. Used for `firebase/firestore` Bytes which encode in
78
+ * standard base64 (unlike pyric/rules Bytes which use base64url).
79
+ */
80
+ function base64StdDecode(s) {
81
+ const bin = atob(s);
82
+ const out = new Uint8Array(bin.length);
83
+ for (let i = 0; i < bin.length; i++)
84
+ out[i] = bin.charCodeAt(i);
85
+ return out;
86
+ }
87
+ /**
88
+ * Walk a parsed JSON tree and re-wrap any marker shape back into its real
89
+ * wrapper-class instance. Visits arrays and plain objects recursively. Plain
90
+ * values (and plain objects without a recognized discriminator) pass through.
91
+ *
92
+ * This is the canonical rehydrate used by BOTH the sandbox persistence
93
+ * serializer and the SharedWorker wire protocol, so the IDB format and the
94
+ * MessagePort wire format are guaranteed identical.
95
+ */
96
+ export function rehydrateDocValue(value) {
97
+ if (value === null || typeof value !== 'object')
98
+ return value;
99
+ if (Array.isArray(value))
100
+ return value.map(rehydrateDocValue);
101
+ const obj = value;
102
+ if (obj.__type__ === '__vector__' && Array.isArray(obj.value)) {
103
+ return new Vector(obj.value);
104
+ }
105
+ // pyric/rules wrapper marker form (used for IDB persistence + wire).
106
+ if (typeof obj.__type === 'string') {
107
+ switch (obj.__type) {
108
+ case 'timestamp':
109
+ return new Timestamp(obj.seconds, obj.nanos);
110
+ case 'bytes':
111
+ return new Bytes(base64UrlDecode(obj.base64));
112
+ case 'latlng':
113
+ return new LatLng(obj.lat, obj.lng);
114
+ case 'duration':
115
+ return new Duration(obj.seconds, obj.nanos);
116
+ case 'reference':
117
+ return new Reference(obj.path);
118
+ case 'path':
119
+ return new Path(obj.segments);
120
+ }
121
+ }
122
+ // firebase/firestore SDK marker form (produced when pyric/firestore's
123
+ // getDoc returns fb-SDK class instances and JSON.stringify is called).
124
+ if (typeof obj.type === 'string') {
125
+ switch (obj.type) {
126
+ case 'firestore/timestamp/1.0': {
127
+ // fb.Timestamp.toJSON() emits { type, seconds, nanoseconds }.
128
+ // The rules Timestamp uses nanos (not nanoseconds) — same value.
129
+ const seconds = obj.seconds;
130
+ const nanoseconds = obj.nanoseconds;
131
+ return new Timestamp(seconds, nanoseconds);
132
+ }
133
+ case 'firestore/bytes/1.0': {
134
+ // fb.Bytes.toJSON() emits { type, bytes } where bytes is standard base64.
135
+ return new Bytes(base64StdDecode(obj.bytes));
136
+ }
137
+ case 'firestore/geoPoint/1.0': {
138
+ // fb.GeoPoint.toJSON() emits { latitude, longitude, type }.
139
+ return new LatLng(obj.latitude, obj.longitude);
140
+ }
141
+ }
142
+ }
143
+ const out = {};
144
+ for (const [k, v] of Object.entries(obj))
145
+ out[k] = rehydrateDocValue(v);
146
+ return out;
147
+ }
148
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/firestore-values/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface ProjectScope {
2
+ readonly projectId: string;
3
+ resolveToken(): Promise<string>;
4
+ }
5
+ //# sourceMappingURL=project-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scope.d.ts","sourceRoot":"","sources":["../src/project-scope.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=project-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-scope.js","sourceRoot":"","sources":["../src/project-scope.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `pyric/rules/extract`: composite-index extractor entry.
3
+ *
4
+ * The extractor statically analyzes JS/TS source (via the TypeScript compiler)
5
+ * for the modular Firestore client's `query(collection(...), where(...),
6
+ * orderBy(...))` pattern. The TS compiler is large (~10MB) and optimizer-
7
+ * hostile, so it lives on its OWN subpath rather than the `pyric/rules` root
8
+ * barrel.
9
+ *
10
+ * Why a subpath and not the root: every app that imports `firebase/firestore`
11
+ * reaches `pyric/rules` (via `pyric/firestore`), and Vite's dep optimizer
12
+ * bundles a bare-specifier dep WHOLESALE, so it cannot tree-shake an entry's
13
+ * exports, and it follows dynamic imports; a root re-export (static OR
14
+ * lazy) drags the whole TS compiler into every browser bundle and trips the
15
+ * optimizer. Keeping the extractor here means `pyric/rules` stays compiler-free
16
+ * for apps that never extract; browser callers that DO extract (the playground)
17
+ * and Node callers (the MCP) opt in by importing `pyric/rules/extract`.
18
+ *
19
+ * (The erasable extractor TYPES stay re-exported from the root barrel too, since
20
+ * type-only exports compile away and never reach a bundle.)
21
+ */
22
+ export { extractIndexes } from './indexes/extract/extractor.js';
23
+ export { ExtractFirestoreIndexesHandler } from './indexes/extractHandler.js';
24
+ export { createFirestoreExtractTool } from './indexes/extractTool.js';
25
+ export type { ExtractIndexesOptions } from './indexes/extractHandler.js';
26
+ export type { ExtractResult, ExtractionWarning, ExtractionSignal, ExtractOptions, QueryShape, Filter as IndexFilter, Order as IndexOrder, Fragment as IndexFragment, QueryBaseDecl, AnnotationApplied, } from './indexes/extract/types.js';
27
+ export type { ApiScope, ArrayConfig, Density, Index, IndexField, IndexFieldOrder, IndexOperation, IndexState, IndexesConfig, IndexesConfigEntry, QueryScope, VectorConfig, } from './indexes/types.js';
28
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/rules/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,MAAM,IAAI,WAAW,EACrB,KAAK,IAAI,UAAU,EACnB,QAAQ,IAAI,aAAa,EACzB,aAAa,EACb,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,KAAK,EACL,UAAU,EACV,eAAe,EACf,cAAc,EACd,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,YAAY,GACb,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `pyric/rules/extract`: composite-index extractor entry.
3
+ *
4
+ * The extractor statically analyzes JS/TS source (via the TypeScript compiler)
5
+ * for the modular Firestore client's `query(collection(...), where(...),
6
+ * orderBy(...))` pattern. The TS compiler is large (~10MB) and optimizer-
7
+ * hostile, so it lives on its OWN subpath rather than the `pyric/rules` root
8
+ * barrel.
9
+ *
10
+ * Why a subpath and not the root: every app that imports `firebase/firestore`
11
+ * reaches `pyric/rules` (via `pyric/firestore`), and Vite's dep optimizer
12
+ * bundles a bare-specifier dep WHOLESALE, so it cannot tree-shake an entry's
13
+ * exports, and it follows dynamic imports; a root re-export (static OR
14
+ * lazy) drags the whole TS compiler into every browser bundle and trips the
15
+ * optimizer. Keeping the extractor here means `pyric/rules` stays compiler-free
16
+ * for apps that never extract; browser callers that DO extract (the playground)
17
+ * and Node callers (the MCP) opt in by importing `pyric/rules/extract`.
18
+ *
19
+ * (The erasable extractor TYPES stay re-exported from the root barrel too, since
20
+ * type-only exports compile away and never reach a bundle.)
21
+ */
22
+ export { extractIndexes } from './indexes/extract/extractor.js';
23
+ export { ExtractFirestoreIndexesHandler } from './indexes/extractHandler.js';
24
+ export { createFirestoreExtractTool } from './indexes/extractTool.js';
25
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/rules/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Assembles a complete Firestore security rules file for a grid-based game.
3
+ *
4
+ * Optimization levels (applied automatically based on board size):
5
+ * - Small boards (≤42 cells): nested board map, static enumeration, single win function
6
+ * - Medium boards (43-121 cells): flat layout, dynamic access, MapDiff, directional win split
7
+ *
8
+ * Uses the stdlib convention: host/guest/currentTurn/status.
9
+ */
10
+ import type { GridConfig } from './grid.js';
11
+ export interface GameConfig {
12
+ collection: string;
13
+ grid: GridConfig;
14
+ winLineCount: number;
15
+ hasGravity: boolean;
16
+ hasLobby: boolean;
17
+ }
18
+ export declare function assembleGameRules(config: GameConfig): string;
19
+ //# sourceMappingURL=assembler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assembler.d.ts","sourceRoot":"","sources":["../../../src/rules/generators/assembler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAW5C,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AA0BD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAW5D"}
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Assembles a complete Firestore security rules file for a grid-based game.
3
+ *
4
+ * Optimization levels (applied automatically based on board size):
5
+ * - Small boards (≤42 cells): nested board map, static enumeration, single win function
6
+ * - Medium boards (43-121 cells): flat layout, dynamic access, MapDiff, directional win split
7
+ *
8
+ * Uses the stdlib convention: host/guest/currentTurn/status.
9
+ */
10
+ import { generateWinLines } from './grid.js';
11
+ import { winCheckExpr, splitWinLinesByDirection, gravityExpr, cellEmptyExpr, boardIntegrityExpr, placementExpr, } from './expressions.js';
12
+ const SMALL_BOARD_THRESHOLD = 42;
13
+ /** A single Firestore path segment we are willing to interpolate into a
14
+ * `match /<collection>/{gameId}` block. Deliberately stricter than
15
+ * Firestore's own collection-id rules: alphanumerics, dash, underscore,
16
+ * 1–64 chars. Anything else (slashes, braces, whitespace, newlines) could
17
+ * break out of the match block and inject arbitrary rules, so we reject it
18
+ * rather than escape it. */
19
+ const COLLECTION_SEGMENT = /^[A-Za-z0-9_-]{1,64}$/;
20
+ /** Validate a caller-supplied collection name before it is interpolated into
21
+ * generated rules source. Throws on anything that isn't a plain path
22
+ * segment — every caller of the public `pyric/rules` generator is safe by
23
+ * default, no escaping required at the call site. */
24
+ function assertSafeCollection(collection) {
25
+ if (typeof collection !== 'string' || !COLLECTION_SEGMENT.test(collection)) {
26
+ throw new Error(`assembleGameRules: invalid collection ${JSON.stringify(collection)} — ` +
27
+ `must match ${COLLECTION_SEGMENT} (a single Firestore path segment: ` +
28
+ `letters, digits, "-" or "_", 1–64 chars). Rejected to prevent rules injection.`);
29
+ }
30
+ }
31
+ export function assembleGameRules(config) {
32
+ const { grid, winLineCount, hasGravity, hasLobby, collection } = config;
33
+ assertSafeCollection(collection);
34
+ const totalCells = grid.cols * grid.rows;
35
+ const lines = generateWinLines(grid.cols, grid.rows, winLineCount);
36
+ const useOptimized = totalCells > SMALL_BOARD_THRESHOLD;
37
+ if (useOptimized) {
38
+ return assembleOptimized(config, lines);
39
+ }
40
+ return assembleClassic(config, lines);
41
+ }
42
+ // ---- Classic: nested board map, static enumeration ----
43
+ function assembleClassic(config, lines) {
44
+ const { grid, hasGravity, hasLobby, collection } = config;
45
+ const totalCells = grid.cols * grid.rows;
46
+ const placementChecks = [`(${placementExpr(grid)})`];
47
+ if (hasGravity) {
48
+ placementChecks.unshift(`(${gravityExpr(grid)})`);
49
+ }
50
+ else {
51
+ placementChecks.unshift(`(${cellEmptyExpr(grid)})`);
52
+ }
53
+ const validMoveBody = placementChecks.join('\n && ');
54
+ const integrityBody = boardIntegrityExpr(grid);
55
+ const commonMove = `request.auth != null
56
+ && resource.data.status == 'playing'
57
+ && (
58
+ (resource.data.currentTurn == 'host' && request.auth.uid == resource.data.host)
59
+ || (resource.data.currentTurn == 'guest' && request.auth.uid == resource.data.guest)
60
+ )
61
+ && (
62
+ (resource.data.currentTurn == 'host' && request.resource.data.currentTurn == 'guest')
63
+ || (resource.data.currentTurn == 'guest' && request.resource.data.currentTurn == 'host')
64
+ )
65
+ && request.resource.data.moveCount == resource.data.moveCount + 1
66
+ && request.resource.data.host == resource.data.host
67
+ && request.resource.data.guest == resource.data.guest`;
68
+ const locChecks = `&& request.resource.data.lastCol >= 0 && request.resource.data.lastCol <= ${grid.cols - 1}
69
+ && request.resource.data.lastRow >= 0 && request.resource.data.lastRow <= ${grid.rows - 1}`;
70
+ return `rules_version = '2';
71
+ service cloud.firestore {
72
+ match /databases/{database}/documents {
73
+
74
+ function hasWonHost(b) {
75
+ return ${winCheckExpr('host', lines, grid)};
76
+ }
77
+
78
+ function hasWonGuest(b) {
79
+ return ${winCheckExpr('guest', lines, grid)};
80
+ }
81
+
82
+ function validMove(nc, nr, mark, b, ob) {
83
+ return ${validMoveBody};
84
+ }
85
+
86
+ function boardOk(nc, nr, b, ob) {
87
+ return ${integrityBody};
88
+ }
89
+
90
+ match /${collection}/{gameId} {
91
+ allow read: if request.auth != null;
92
+ ${lobbyRules(hasLobby)}
93
+ // --- Normal move (game continues) ---
94
+ allow update: if ${commonMove}
95
+ ${locChecks}
96
+ && request.resource.data.status == 'playing'
97
+ && request.resource.data.winner == ''
98
+ && validMove(
99
+ request.resource.data.lastCol,
100
+ request.resource.data.lastRow,
101
+ resource.data.currentTurn,
102
+ request.resource.data.board,
103
+ resource.data.board
104
+ )${totalCells <= SMALL_BOARD_THRESHOLD ? `
105
+ && boardOk(
106
+ request.resource.data.lastCol,
107
+ request.resource.data.lastRow,
108
+ request.resource.data.board,
109
+ resource.data.board
110
+ )` : ''};
111
+
112
+ // --- Winning move (host) ---
113
+ allow update: if ${commonMove}
114
+ ${locChecks}
115
+ && request.resource.data.status == 'won'
116
+ && request.resource.data.winner == 'host'
117
+ && hasWonHost(request.resource.data.board);
118
+
119
+ // --- Winning move (guest) ---
120
+ allow update: if ${commonMove}
121
+ ${locChecks}
122
+ && request.resource.data.status == 'won'
123
+ && request.resource.data.winner == 'guest'
124
+ && hasWonGuest(request.resource.data.board);
125
+
126
+ // --- Draw ---
127
+ allow update: if ${commonMove}
128
+ && request.resource.data.moveCount == ${totalCells}
129
+ && request.resource.data.status == 'draw'
130
+ && request.resource.data.winner == '';
131
+ }
132
+ }
133
+ }
134
+ `;
135
+ }
136
+ // ---- Optimized: flat layout, dynamic access, MapDiff, directional win split ----
137
+ function assembleOptimized(config, lines) {
138
+ const { grid, hasGravity, hasLobby, collection } = config;
139
+ const totalCells = grid.cols * grid.rows;
140
+ const dirs = splitWinLinesByDirection(lines, grid.cols);
141
+ function dirWinFn(name, mark, dirLines) {
142
+ if (dirLines.length === 0)
143
+ return ` function ${name}(b) { return false; }`;
144
+ return ` function ${name}(b) {
145
+ return ${winCheckExpr(mark, dirLines, grid)};
146
+ }`;
147
+ }
148
+ const winFunctions = [
149
+ dirWinFn('wonHH', 'host', dirs.horizontal),
150
+ dirWinFn('wonHV', 'host', dirs.vertical),
151
+ dirWinFn('wonHD1', 'host', dirs.diagUp),
152
+ dirWinFn('wonHD2', 'host', dirs.diagDown),
153
+ dirWinFn('wonGH', 'guest', dirs.horizontal),
154
+ dirWinFn('wonGV', 'guest', dirs.vertical),
155
+ dirWinFn('wonGD1', 'guest', dirs.diagUp),
156
+ dirWinFn('wonGD2', 'guest', dirs.diagDown),
157
+ ].join('\n\n');
158
+ const commonMove = `request.auth != null
159
+ && resource.data.status == 'playing'
160
+ && (
161
+ (resource.data.currentTurn == 'host' && request.auth.uid == resource.data.host)
162
+ || (resource.data.currentTurn == 'guest' && request.auth.uid == resource.data.guest)
163
+ )
164
+ && (
165
+ (resource.data.currentTurn == 'host' && request.resource.data.currentTurn == 'guest')
166
+ || (resource.data.currentTurn == 'guest' && request.resource.data.currentTurn == 'host')
167
+ )
168
+ && request.resource.data.moveCount == resource.data.moveCount + 1
169
+ && request.resource.data.host == resource.data.host
170
+ && request.resource.data.guest == resource.data.guest`;
171
+ // Dynamic cell validation + MapDiff integrity
172
+ const dynamicPlacement = `&& resource.data[request.resource.data.lastMove] == ''
173
+ && request.resource.data[request.resource.data.lastMove] == resource.data.currentTurn
174
+ && request.resource.data.diff(resource.data).affectedKeys().hasOnly(
175
+ ['lastMove', 'currentTurn', 'moveCount', request.resource.data.lastMove]
176
+ )`;
177
+ const dynamicWinPlacement = `&& resource.data[request.resource.data.lastMove] == ''
178
+ && request.resource.data[request.resource.data.lastMove] == resource.data.currentTurn`;
179
+ return `rules_version = '2';
180
+ service cloud.firestore {
181
+ match /databases/{database}/documents {
182
+
183
+ ${winFunctions}
184
+
185
+ match /${collection}/{gameId} {
186
+ allow read: if request.auth != null;
187
+ ${lobbyRulesOptimized(hasLobby)}
188
+ // --- Normal move (flat layout + MapDiff integrity) ---
189
+ allow update: if ${commonMove}
190
+ ${dynamicPlacement}
191
+ && request.resource.data.status == 'playing'
192
+ && request.resource.data.winner == '';
193
+
194
+ // --- Winning move (host) ---
195
+ allow update: if ${commonMove}
196
+ ${dynamicWinPlacement}
197
+ && request.resource.data.status == 'won'
198
+ && request.resource.data.winner == 'host'
199
+ && (wonHH(request.resource.data) || wonHV(request.resource.data) || wonHD1(request.resource.data) || wonHD2(request.resource.data));
200
+
201
+ // --- Winning move (guest) ---
202
+ allow update: if ${commonMove}
203
+ ${dynamicWinPlacement}
204
+ && request.resource.data.status == 'won'
205
+ && request.resource.data.winner == 'guest'
206
+ && (wonGH(request.resource.data) || wonGV(request.resource.data) || wonGD1(request.resource.data) || wonGD2(request.resource.data));
207
+
208
+ // --- Draw ---
209
+ allow update: if ${commonMove}
210
+ && request.resource.data.moveCount == ${totalCells}
211
+ && request.resource.data.status == 'draw'
212
+ && request.resource.data.winner == '';
213
+ }
214
+ }
215
+ }
216
+ `;
217
+ }
218
+ // ---- Lobby rules ----
219
+ function lobbyRules(hasLobby) {
220
+ if (!hasLobby)
221
+ return `
222
+ allow create: if request.auth != null
223
+ && request.resource.data.host == request.auth.uid
224
+ && request.resource.data.currentTurn == 'host'
225
+ && request.resource.data.status == 'playing'
226
+ && request.resource.data.winner == ''
227
+ && request.resource.data.moveCount == 0;
228
+ `;
229
+ return `
230
+ allow create: if request.auth != null
231
+ && request.resource.data.host == request.auth.uid
232
+ && request.resource.data.guest == ''
233
+ && request.resource.data.currentTurn == 'host'
234
+ && request.resource.data.status == 'waiting'
235
+ && request.resource.data.winner == ''
236
+ && request.resource.data.moveCount == 0
237
+ && request.resource.data.lastCol == -1
238
+ && request.resource.data.lastRow == -1;
239
+
240
+ allow update: if request.auth != null
241
+ && resource.data.status == 'waiting'
242
+ && request.resource.data.status == 'playing'
243
+ && resource.data.guest == ''
244
+ && request.resource.data.guest == request.auth.uid
245
+ && request.auth.uid != resource.data.host
246
+ && request.resource.data.host == resource.data.host
247
+ && request.resource.data.currentTurn == resource.data.currentTurn
248
+ && request.resource.data.winner == resource.data.winner
249
+ && request.resource.data.moveCount == resource.data.moveCount
250
+ && request.resource.data.lastCol == resource.data.lastCol
251
+ && request.resource.data.lastRow == resource.data.lastRow
252
+ && request.resource.data.board == resource.data.board;
253
+
254
+ allow delete: if request.auth != null
255
+ && resource.data.status == 'waiting'
256
+ && request.auth.uid == resource.data.host;
257
+ `;
258
+ }
259
+ function lobbyRulesOptimized(hasLobby) {
260
+ if (!hasLobby)
261
+ return `
262
+ allow create: if request.auth != null
263
+ && request.resource.data.host == request.auth.uid
264
+ && request.resource.data.currentTurn == 'host'
265
+ && request.resource.data.status == 'playing'
266
+ && request.resource.data.winner == ''
267
+ && request.resource.data.moveCount == 0;
268
+ `;
269
+ return `
270
+ allow create: if request.auth != null
271
+ && request.resource.data.host == request.auth.uid
272
+ && request.resource.data.guest == ''
273
+ && request.resource.data.currentTurn == 'host'
274
+ && request.resource.data.status == 'waiting'
275
+ && request.resource.data.winner == ''
276
+ && request.resource.data.moveCount == 0
277
+ && request.resource.data.lastMove == '';
278
+
279
+ allow update: if request.auth != null
280
+ && resource.data.status == 'waiting'
281
+ && request.resource.data.status == 'playing'
282
+ && resource.data.guest == ''
283
+ && request.resource.data.guest == request.auth.uid
284
+ && request.auth.uid != resource.data.host
285
+ && request.resource.data.diff(resource.data).affectedKeys().hasOnly(['guest', 'status']);
286
+
287
+ allow delete: if request.auth != null
288
+ && resource.data.status == 'waiting'
289
+ && request.auth.uid == resource.data.host;
290
+ `;
291
+ }
292
+ //# sourceMappingURL=assembler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assembler.js","sourceRoot":"","sources":["../../../src/rules/generators/assembler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAU1B,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC;;;;;6BAK6B;AAC7B,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAEnD;;;sDAGsD;AACtD,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CACb,yCAAyC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK;YACtE,cAAc,kBAAkB,qCAAqC;YACrE,gFAAgF,CACnF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACxE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACzC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,UAAU,GAAG,qBAAqB,CAAC;IAExD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,0DAA0D;AAC1D,SAAS,eAAe,CAAC,MAAkB,EAAE,KAAiB;IAC5D,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAEzC,MAAM,eAAe,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,UAAU,EAAE,CAAC;QACf,eAAe,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG;;;;;;;;;;;;8DAYyC,CAAC;IAE7D,MAAM,SAAS,GAAG,6EAA6E,IAAI,CAAC,IAAI,GAAG,CAAC;oFAC1B,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;IAElG,OAAO;;;;;eAKM,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;;;;eAIjC,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;;;;eAIlC,aAAa;;;;eAIb,aAAa;;;aAGf,UAAU;;EAErB,UAAU,CAAC,QAAQ,CAAC;;yBAEG,UAAU;UACzB,SAAS;;;;;;;;;aASN,UAAU,IAAI,qBAAqB,CAAC,CAAC,CAAC;;;;;;YAMvC,CAAC,CAAC,CAAC,EAAE;;;yBAGQ,UAAU;UACzB,SAAS;;;;;;yBAMM,UAAU;UACzB,SAAS;;;;;;yBAMM,UAAU;gDACa,UAAU;;;;;;CAMzD,CAAC;AACF,CAAC;AAED,mFAAmF;AACnF,SAAS,iBAAiB,CAAC,MAAkB,EAAE,KAAiB;IAC9D,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACzC,MAAM,IAAI,GAAG,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAExD,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAY,EAAE,QAAoB;QAChE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,gBAAgB,IAAI,uBAAuB,CAAC;QAC9E,OAAO,gBAAgB,IAAI;eAChB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;MAC3C,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;QAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;QACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;QACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;QAC3C,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;QACzC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;QACxC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;KAC3C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEf,MAAM,UAAU,GAAG;;;;;;;;;;;;8DAYyC,CAAC;IAE7D,8CAA8C;IAC9C,MAAM,gBAAgB,GAAG;;;;YAIf,CAAC;IAEX,MAAM,mBAAmB,GAAG;8FACgE,CAAC;IAE7F,OAAO;;;;EAIP,YAAY;;aAED,UAAU;;EAErB,mBAAmB,CAAC,QAAQ,CAAC;;yBAEN,UAAU;UACzB,gBAAgB;;;;;yBAKD,UAAU;UACzB,mBAAmB;;;;;;yBAMJ,UAAU;UACzB,mBAAmB;;;;;;yBAMJ,UAAU;gDACa,UAAU;;;;;;CAMzD,CAAC;AACF,CAAC;AAED,wBAAwB;AACxB,SAAS,UAAU,CAAC,QAAiB;IACnC,IAAI,CAAC,QAAQ;QAAE,OAAO;;;;;;;CAOvB,CAAC;IACA,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BR,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAiB;IAC5C,IAAI,CAAC,QAAQ;QAAE,OAAO;;;;;;;CAOvB,CAAC;IACA,OAAO;;;;;;;;;;;;;;;;;;;;;CAqBR,CAAC;AACF,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Firestore rules expression generators for grid-based games.
3
+ *
4
+ * Each function returns a string that is a valid Firestore rules boolean expression.
5
+ * The expressions use parameter names (b, ob, nc, nr, mark) that must match
6
+ * the function signatures in the generated rules.
7
+ */
8
+ import type { GridConfig } from './grid.js';
9
+ /**
10
+ * Win detection: OR of all winning lines for a specific mark.
11
+ * Uses `b` as the board parameter name.
12
+ *
13
+ * Example output: (b.c0r0 == 'R' && b.c1r0 == 'R' && b.c2r0 == 'R' && b.c3r0 == 'R') || ...
14
+ */
15
+ export declare function winCheckExpr(mark: string, lines: number[][], grid: GridConfig): string;
16
+ /**
17
+ * Split win lines by direction for per-direction functions.
18
+ * Returns { horizontal, vertical, diagUp, diagDown }.
19
+ */
20
+ export declare function splitWinLinesByDirection(lines: number[][], cols: number): {
21
+ horizontal: number[][];
22
+ vertical: number[][];
23
+ diagUp: number[][];
24
+ diagDown: number[][];
25
+ };
26
+ /**
27
+ * Gravity: per-column lowest-empty-row check.
28
+ * Uses `nc` (new col), `nr` (new row), `ob` (old board) as parameter names.
29
+ *
30
+ * For each column: if nc == col, verify nr is the lowest empty row.
31
+ */
32
+ export declare function gravityExpr(grid: GridConfig): string;
33
+ /**
34
+ * Board integrity: verify all non-move cells are unchanged.
35
+ * Uses `nc`, `nr`, `b` (new board), `ob` (old board) as parameter names.
36
+ *
37
+ * For each cell: either it's the move cell OR old == new.
38
+ */
39
+ export declare function boardIntegrityExpr(grid: GridConfig): string;
40
+ /**
41
+ * Cell-was-empty check: verify the cell at (nc, nr) was empty before the move.
42
+ * Uses `nc`, `nr`, `ob` (old board) as parameter names.
43
+ * For gravity games this is redundant (gravity already checks ob.cell == ''),
44
+ * but for non-gravity games it prevents overwriting occupied cells.
45
+ */
46
+ export declare function cellEmptyExpr(grid: GridConfig): string;
47
+ /**
48
+ * Placement: verify the cell at (nc, nr) has the correct mark.
49
+ * Uses `nc`, `nr`, `mark`, `b` (new board) as parameter names.
50
+ */
51
+ export declare function placementExpr(grid: GridConfig): string;
52
+ //# sourceMappingURL=expressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../src/rules/generators/expressions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG5C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAQtF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EAAE,EAAE,EACjB,IAAI,EAAE,MAAM,GACX;IAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAA;CAAE,CAkB5F;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAepD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAW3D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAQtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAQtD"}