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,62 @@
1
+ /**
2
+ * `StorageError` — the sandbox's analog of `firebase/storage`'s
3
+ * `StorageError`. Every sandbox operation that fails throws one of
4
+ * these so `err.code === 'storage/...'` branching works identically
5
+ * against the sandbox and a real bucket (ST-B1).
6
+ *
7
+ * Shape parity with upstream (`clones/firebase-js-sdk/packages/
8
+ * storage/src/implementation/error.ts`):
9
+ * - `.code` is the prefixed form `storage/<code>` (e.g.
10
+ * `storage/object-not-found`).
11
+ * - the message embeds the prefixed code so the substring-matching
12
+ * probes (`toThrow(/object-not-found/)`) and `err.code` reads
13
+ * agree.
14
+ *
15
+ * Intentional divergence (documented in COMPAT row 105): upstream's
16
+ * `StorageError extends FirebaseError` and reports `name:
17
+ * 'FirebaseError'` with a `"Firebase Storage: … (storage/…)"`
18
+ * message. The sandbox keeps a plain `Error` subclass — same as
19
+ * `SandboxError` for Firestore — so the `.code` contract is faithful
20
+ * while the message wording stays sandbox-flavored. The
21
+ * `storage/<code>` prefix is what consumer code branches on.
22
+ */
23
+ /** Prefix an unprefixed code with `storage/` — matches upstream. */
24
+ export function prependCode(code) {
25
+ return `storage/${code}`;
26
+ }
27
+ /**
28
+ * Storage error carrying a prefixed `storage/<code>` on `.code`.
29
+ * Drop-in for `err.code === 'storage/object-not-found'` branching.
30
+ */
31
+ export class StorageError extends Error {
32
+ /** Prefixed code, e.g. `storage/object-not-found`. */
33
+ code;
34
+ constructor(code, message) {
35
+ const prefixed = prependCode(code);
36
+ // The prefixed code is embedded so substring probes and `.code`
37
+ // reads see the same value.
38
+ super(`${prefixed}: ${message}`);
39
+ this.name = 'StorageError';
40
+ this.code = prefixed;
41
+ // Mirror upstream's prototype pin so `instanceof StorageError`
42
+ // survives the transpile-to-ES5-class-extends pattern.
43
+ Object.setPrototypeOf(this, StorageError.prototype);
44
+ }
45
+ }
46
+ // ─── Factory helpers (mirror upstream's error.ts free functions) ────
47
+ export function objectNotFound(path) {
48
+ return new StorageError('object-not-found', `no object at "${path}".`);
49
+ }
50
+ export function unauthorized(method, path, detail) {
51
+ return new StorageError('unauthorized', `${method} "${path}" denied by rules${detail}.`);
52
+ }
53
+ export function quotaExceeded(path, size, max) {
54
+ return new StorageError('quota-exceeded', `object at "${path}" is ${size} bytes, exceeds maxDownloadSizeBytes ${max}.`);
55
+ }
56
+ export function invalidRootOperation(op) {
57
+ return new StorageError('invalid-root-operation', `${op} cannot operate on the root reference.`);
58
+ }
59
+ export function invalidFormat(format, message) {
60
+ return new StorageError('invalid-format', `string does not match format "${format}": ${message}`);
61
+ }
62
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/storage/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAkBH,oEAAoE;AACpE,MAAM,UAAU,WAAW,CAAC,IAAsB;IAChD,OAAO,WAAW,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,sDAAsD;IAC7C,IAAI,CAAgC;IAE7C,YAAY,IAAsB,EAAE,OAAe;QACjD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,gEAAgE;QAChE,4BAA4B;QAC5B,KAAK,CAAC,GAAG,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,+DAA+D;QAC/D,uDAAuD;QACvD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACF;AAED,uEAAuE;AAEvE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,YAAY,CAAC,kBAAkB,EAAE,iBAAiB,IAAI,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAY,EAAE,MAAc;IACvE,OAAO,IAAI,YAAY,CACrB,cAAc,EACd,GAAG,MAAM,KAAK,IAAI,oBAAoB,MAAM,GAAG,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAAY,EAAE,GAAW;IACnE,OAAO,IAAI,YAAY,CACrB,gBAAgB,EAChB,cAAc,IAAI,QAAQ,IAAI,wCAAwC,GAAG,GAAG,CAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC7C,OAAO,IAAI,YAAY,CACrB,wBAAwB,EACxB,GAAG,EAAE,wCAAwC,CAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAAe;IAC3D,OAAO,IAAI,YAAY,CAAC,gBAAgB,EAAE,iCAAiC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;AACpG,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * `pyric/storage` — Firebase Storage adapter for the Pyric sandbox.
3
+ *
4
+ * Sibling-package layout mirrors Firebase:
5
+ * `firebase/app` ↔ `firebase/storage`
6
+ * `pyric/sandbox` ↔ `pyric/storage`
7
+ *
8
+ * Public surface lands incrementally through the slices in
9
+ * the design rationale:
10
+ *
11
+ * - Slice 4: `getStorage`, `FirebaseStorage`
12
+ * - Slice 5 (here): `ref`, `uploadBytes`, `uploadString`,
13
+ * `getBytes`, `getBlob`, `deleteObject`, `StorageReference`,
14
+ * `SettableMetadata`, `FullMetadata`, `UploadResult`
15
+ * - Slice 6: `getMetadata`, `updateMetadata`
16
+ * - Slice 7: `listAll`, `ListResult`
17
+ * - Slice 8: rules support via `getStorage(ctx, { rules })`
18
+ * - Slice 9: end-to-end session-archive demo + README
19
+ *
20
+ * Out of scope for the v1 scope (see README): `getDownloadURL`,
21
+ * paginated `list`, `uploadBytesResumable`, Admin SDK shape,
22
+ * Storage emulator parity, image transformations, Cloud Functions
23
+ * triggers.
24
+ */
25
+ import type { FirebaseStorage } from './service.js';
26
+ import { type PyricApp } from 'pyric/app';
27
+ export { getStorageSandbox, getStorageProd, TARGET_SYMBOL } from './service.js';
28
+ export type { FirebaseStorage, StorageOptions, ProdStorageOptions, Target, SandboxTarget, ProdTarget } from './service.js';
29
+ export declare function getStorage(app: PyricApp): FirebaseStorage;
30
+ export { StorageError } from './errors.js';
31
+ export type { StorageErrorCode } from './errors.js';
32
+ export { ref } from './reference.js';
33
+ export type { StorageReference } from './reference.js';
34
+ export { uploadBytes, uploadString } from './upload.js';
35
+ export type { StringFormat } from './upload.js';
36
+ export { getBytes, getBlob, deleteObject } from './download.js';
37
+ export { getMetadata, updateMetadata } from './metadata.js';
38
+ export type { SettableMetadata, FullMetadata, UploadResult } from './metadata.js';
39
+ export { listAll } from './list.js';
40
+ export type { ListResult } from './list.js';
41
+ export { parseStorageRules, evaluateStorageRules } from './rules.js';
42
+ export type { StorageRules, StorageMethod, StorageAuth, StorageRequest, StorageResource, EvaluationInput, EvaluationResult, } from './rules.js';
43
+ export { provisionStorage, getStorageServiceState, enableStorageService, getDefaultLocation, finalizeDefaultLocation, listFirebaseBuckets, addFirebaseToBucket, deployStorageRules, getBucketCors, setBucketCors, defaultPlaygroundCors, StorageProvisioningError, } from './admin/api.js';
44
+ export type { ServiceEnableState, FirebaseStorageBucket, ProvisionStorageOptions, ProvisionStorageResult, CorsRule, } from './admin/api.js';
45
+ export { InspectStorageHandler, ProvisionStorageHandler } from './admin/handler.js';
46
+ export { createStorageAdminTools } from './admin/tools.js';
47
+ export type { StorageAdminToolDeps } from './admin/tools.js';
48
+ export type { ProvisionStorageInput, ProvisionStorageOutcome, ProvisionStorageErrorCode, InspectStorageResult, } from './admin/spec.js';
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAa3H,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,eAAe,CAIzD;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACrE,YAAY,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAOpB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,QAAQ,GACT,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EACV,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * `pyric/storage` — Firebase Storage adapter for the Pyric sandbox.
3
+ *
4
+ * Sibling-package layout mirrors Firebase:
5
+ * `firebase/app` ↔ `firebase/storage`
6
+ * `pyric/sandbox` ↔ `pyric/storage`
7
+ *
8
+ * Public surface lands incrementally through the slices in
9
+ * the design rationale:
10
+ *
11
+ * - Slice 4: `getStorage`, `FirebaseStorage`
12
+ * - Slice 5 (here): `ref`, `uploadBytes`, `uploadString`,
13
+ * `getBytes`, `getBlob`, `deleteObject`, `StorageReference`,
14
+ * `SettableMetadata`, `FullMetadata`, `UploadResult`
15
+ * - Slice 6: `getMetadata`, `updateMetadata`
16
+ * - Slice 7: `listAll`, `ListResult`
17
+ * - Slice 8: rules support via `getStorage(ctx, { rules })`
18
+ * - Slice 9: end-to-end session-archive demo + README
19
+ *
20
+ * Out of scope for the v1 scope (see README): `getDownloadURL`,
21
+ * paginated `list`, `uploadBytesResumable`, Admin SDK shape,
22
+ * Storage emulator parity, image transformations, Cloud Functions
23
+ * triggers.
24
+ */
25
+ import { getStorageSandbox, getStorageProd } from './service.js';
26
+ // Phase 3 unified app handle. Adapter dispatch reads `APP_TARGET` and
27
+ // routes to the existing direct-handle path (sandbox vs prod).
28
+ import { APP_TARGET } from 'pyric/app';
29
+ export { getStorageSandbox, getStorageProd, TARGET_SYMBOL } from './service.js';
30
+ // ─── Phase 3 unified getStorage(PyricApp) dispatch ───────────────────
31
+ //
32
+ // `getStorageSandbox(sandbox)` and `getStorageProd(app)` stay as the
33
+ // direct-handle entry points (per the design rationale's
34
+ // split-factory shape). The unified `getStorage(app: PyricApp)` reads
35
+ // the brand on the `pyric/app` handle and forwards to the matching
36
+ // direct-handle factory. Storage takes optional per-backend options
37
+ // (sandbox: bucket/dbName/rules; prod: bucket) that the unified
38
+ // signature can't express without coupling — so this surface is the
39
+ // no-options entry. Callers that need options keep using the direct
40
+ // `getStorageSandbox` / `getStorageProd` factories.
41
+ export function getStorage(app) {
42
+ return app[APP_TARGET] === 'sandbox'
43
+ ? getStorageSandbox(app.sandbox)
44
+ : getStorageProd(app.firebaseApp);
45
+ }
46
+ export { StorageError } from './errors.js';
47
+ export { ref } from './reference.js';
48
+ export { uploadBytes, uploadString } from './upload.js';
49
+ export { getBytes, getBlob, deleteObject } from './download.js';
50
+ export { getMetadata, updateMetadata } from './metadata.js';
51
+ export { listAll } from './list.js';
52
+ export { parseStorageRules, evaluateStorageRules } from './rules.js';
53
+ // ─── Admin / control-plane surface ───────────────────────────────────
54
+ // Firebase Storage provisioning + status. The pure-fetch `api.ts`
55
+ // layer (browser + Node compatible), the `ProjectScope`-shaped
56
+ // handlers, and the agent-tool factory.
57
+ export { provisionStorage, getStorageServiceState, enableStorageService, getDefaultLocation, finalizeDefaultLocation, listFirebaseBuckets, addFirebaseToBucket, deployStorageRules, getBucketCors, setBucketCors, defaultPlaygroundCors, StorageProvisioningError, } from './admin/api.js';
58
+ export { InspectStorageHandler, ProvisionStorageHandler } from './admin/handler.js';
59
+ export { createStorageAdminTools } from './admin/tools.js';
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGjE,sEAAsE;AACtE,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhF,wEAAwE;AACxE,EAAE;AACF,qEAAqE;AACrE,yDAAyD;AACzD,sEAAsE;AACtE,mEAAmE;AACnE,oEAAoE;AACpE,gEAAgE;AAChE,oEAAoE;AACpE,oEAAoE;AACpE,oDAAoD;AACpD,MAAM,UAAU,UAAU,CAAC,GAAa;IACtC,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS;QAClC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;QAChC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACtC,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGrC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAWrE,wEAAwE;AACxE,kEAAkE;AAClE,+DAA+D;AAC/D,wCAAwC;AAExC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AASxB,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `pyric/storage/internal` — host-only admin plane for the sandbox
3
+ * storage backend.
4
+ *
5
+ * The public `pyric/storage` surface is deliberately rules-honest:
6
+ * every operation on a handle from `getStorageSandbox` evaluates the
7
+ * configured storage rules against the handle's context identity.
8
+ * Hosts that must serve firebase-admin semantics (the SharedWorker
9
+ * host resolving `actAs: { mode: 'admin' }` storage ops for
10
+ * `pyric-admin`'s remote dispatch arm, Pyric Studio's admin lens)
11
+ * need a rules-BYPASS handle onto the SAME per-sandbox store.
12
+ *
13
+ * This subpath exists so that bypass never leaks onto the public
14
+ * modular surface — mirroring how `pyric/sandbox/internal` carries
15
+ * the sandbox's host-only seams.
16
+ */
17
+ export { getAdminStorageSandbox } from './service.js';
18
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/storage/internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `pyric/storage/internal` — host-only admin plane for the sandbox
3
+ * storage backend.
4
+ *
5
+ * The public `pyric/storage` surface is deliberately rules-honest:
6
+ * every operation on a handle from `getStorageSandbox` evaluates the
7
+ * configured storage rules against the handle's context identity.
8
+ * Hosts that must serve firebase-admin semantics (the SharedWorker
9
+ * host resolving `actAs: { mode: 'admin' }` storage ops for
10
+ * `pyric-admin`'s remote dispatch arm, Pyric Studio's admin lens)
11
+ * need a rules-BYPASS handle onto the SAME per-sandbox store.
12
+ *
13
+ * This subpath exists so that bypass never leaks onto the public
14
+ * modular surface — mirroring how `pyric/sandbox/internal` carries
15
+ * the sandbox's host-only seams.
16
+ */
17
+ export { getAdminStorageSandbox } from './service.js';
18
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/storage/internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type StorageReference } from './reference.js';
2
+ /**
3
+ * Mirrors `firebase/storage`'s `ListResult`. `nextPageToken` is
4
+ * `undefined` for `listAll`; pagination via `list()` is deferred.
5
+ */
6
+ export interface ListResult {
7
+ items: StorageReference[];
8
+ prefixes: StorageReference[];
9
+ nextPageToken?: string;
10
+ }
11
+ /**
12
+ * Enumerate every immediate child item + sub-prefix under `refIn`.
13
+ * Works on the root reference too — pass `ref(storage)` to scan the
14
+ * whole bucket.
15
+ */
16
+ export declare function listAll(refIn: StorageReference): Promise<ListResult>;
17
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/storage/list.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIrE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAyD1E"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * List operations — `listAll` only. Paginated `list(ref, options)`
3
+ * is deferred per the implementation scope (Section 6 of the survey); the
4
+ * `ListResult` shape keeps `nextPageToken` optional so consumer
5
+ * code that handles pagination doesn't have to special-case the
6
+ * sandbox.
7
+ *
8
+ * Algorithm:
9
+ * 1. Compute `scanPrefix`. Empty fullPath → `''` (entire bucket).
10
+ * Non-empty fullPath → `fullPath + '/'` so descendants match
11
+ * but the ref itself doesn't.
12
+ * 2. `listByPrefix(scanPrefix)` returns every metadata record
13
+ * under the prefix, sorted by IDB key order (i.e. by path).
14
+ * 3. For each record, compute the path RELATIVE to scanPrefix.
15
+ * A relative path with no `'/'` is a direct child file — push
16
+ * it to `items`. A relative path with `'/'` denotes a
17
+ * sub-folder; the first segment becomes a synthetic prefix
18
+ * reference (deduped — many files can share one folder).
19
+ * 4. Sort prefixes by path for deterministic output. Items are
20
+ * already sorted by virtue of the IDB scan.
21
+ *
22
+ * Survey alignment (Section 6): the JS SDK's `prefixes` carries
23
+ * folder-like references for ANY path with descendants; we match
24
+ * that semantic exactly.
25
+ */
26
+ import * as fb from 'firebase/storage';
27
+ import { fbRefOf, ref } from './reference.js';
28
+ import { getStorageService, targetOf } from './service.js';
29
+ import { enforceRules } from './enforce.js';
30
+ /**
31
+ * Enumerate every immediate child item + sub-prefix under `refIn`.
32
+ * Works on the root reference too — pass `ref(storage)` to scan the
33
+ * whole bucket.
34
+ */
35
+ export async function listAll(refIn) {
36
+ const storage = refIn.storage;
37
+ const target = targetOf(storage);
38
+ if (target.kind === 'prod') {
39
+ const result = await fb.listAll(fbRefOf(refIn));
40
+ return {
41
+ items: result.items.map((it) => ref(storage, it.fullPath)),
42
+ prefixes: result.prefixes.map((p) => ref(storage, p.fullPath)),
43
+ };
44
+ }
45
+ const service = await getStorageService(storage);
46
+ // ST-B2: enforce rules on the listed prefix. Firebase Storage's
47
+ // `read` permission governs both download AND list, so a `listAll`
48
+ // requires `read` on the scanned ref's path. Prefixes have no
49
+ // backing object, so `resource` is null (a list of an unauthorized
50
+ // tree throws `storage/unauthorized`, same as a denied read). When
51
+ // no rules are configured this is a no-op (open-by-default).
52
+ enforceRules(service, {
53
+ request: {
54
+ auth: target.context.auth,
55
+ method: 'read',
56
+ path: refIn.fullPath,
57
+ },
58
+ resource: null,
59
+ }, target);
60
+ const scanPrefix = refIn.fullPath === '' ? '' : `${refIn.fullPath}/`;
61
+ const records = await service.backend.listByPrefix(scanPrefix);
62
+ const items = [];
63
+ const seenPrefixes = new Set();
64
+ const prefixes = [];
65
+ for (const md of records) {
66
+ if (!md.fullPath.startsWith(scanPrefix))
67
+ continue; // defensive
68
+ const relative = md.fullPath.slice(scanPrefix.length);
69
+ if (relative === '')
70
+ continue;
71
+ const slashIdx = relative.indexOf('/');
72
+ if (slashIdx === -1) {
73
+ // Direct child file.
74
+ items.push(ref(storage, md.fullPath));
75
+ }
76
+ else {
77
+ const folderName = relative.slice(0, slashIdx);
78
+ const folderPath = `${scanPrefix}${folderName}`;
79
+ if (!seenPrefixes.has(folderPath)) {
80
+ seenPrefixes.add(folderPath);
81
+ prefixes.push(ref(storage, folderPath));
82
+ }
83
+ }
84
+ }
85
+ // IDB key order already sorts items; prefixes are first-appearance
86
+ // order, sort for determinism so consumer code can rely on a stable
87
+ // shape.
88
+ prefixes.sort((a, b) => (a.fullPath < b.fullPath ? -1 : a.fullPath > b.fullPath ? 1 : 0));
89
+ return { items, prefixes };
90
+ }
91
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/storage/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { StoredMetadata } from './persistence.js';
2
+ import { type StorageReference } from './reference.js';
3
+ /**
4
+ * Client-settable fields. Passed to `uploadBytes` /
5
+ * `uploadString` / `updateMetadata`. Every field is optional — the
6
+ * upload pipeline fills any unsupplied client fields with sane
7
+ * defaults (e.g. `contentType` falls back to `application/octet-stream`).
8
+ */
9
+ export interface SettableMetadata {
10
+ contentType?: string;
11
+ cacheControl?: string;
12
+ contentDisposition?: string;
13
+ contentEncoding?: string;
14
+ contentLanguage?: string;
15
+ customMetadata?: {
16
+ [key: string]: string;
17
+ };
18
+ }
19
+ /**
20
+ * Server-set + client-settable fields read back from
21
+ * `uploadBytes` / `getMetadata` / `updateMetadata`. Server-set
22
+ * fields (`bucket`, `fullPath`, `name`, `generation`,
23
+ * `metageneration`, `timeCreated`, `updated`, `size`) are populated
24
+ * by the upload pipeline; client-settable fields round-trip from
25
+ * `SettableMetadata`.
26
+ */
27
+ export interface FullMetadata extends SettableMetadata {
28
+ bucket: string;
29
+ fullPath: string;
30
+ name: string;
31
+ generation: string;
32
+ metageneration: string;
33
+ timeCreated: string;
34
+ updated: string;
35
+ size: number;
36
+ md5Hash?: string;
37
+ }
38
+ /** Return shape of `uploadBytes` / `uploadString`. */
39
+ export interface UploadResult {
40
+ metadata: FullMetadata;
41
+ ref: StorageReference;
42
+ }
43
+ /**
44
+ * Project a `StoredMetadata` (persistence-layer shape) onto the
45
+ * public `FullMetadata`. Currently a 1:1 cast — the shapes match —
46
+ * but kept as a function so future divergence (e.g. lazy `ref`
47
+ * computation) has a single seam.
48
+ */
49
+ export declare function toFullMetadata(stored: StoredMetadata): FullMetadata;
50
+ /**
51
+ * Apply a `SettableMetadata` patch onto an existing
52
+ * `StoredMetadata`, replacing only the client-settable fields. The
53
+ * server-set fields (`bucket`, `fullPath`, `name`, `generation`,
54
+ * `timeCreated`, `size`, `md5Hash`) are preserved. `metageneration`
55
+ * is bumped, and `updated` is refreshed to the call moment — both
56
+ * are server-tracked but driven by client-initiated changes.
57
+ *
58
+ * Used by `updateMetadata` in Slice 6. Defined here in Slice 5 so
59
+ * the types stay close to the rest of the metadata model.
60
+ */
61
+ export declare function applyMetadataPatch(base: StoredMetadata, patch: SettableMetadata, now?: Date): StoredMetadata;
62
+ /** Bump a base-10 numeric string by 1; `'5'` → `'6'`. */
63
+ export declare function bump(value: string): string;
64
+ /**
65
+ * Read the full metadata record at `ref`. Throws when no object
66
+ * exists at the path (`storage/object-not-found`).
67
+ *
68
+ * Mirrors `firebase/storage`'s `getMetadata`. Returns the same
69
+ * `FullMetadata` shape `uploadBytes` produced — server-set fields
70
+ * pinned at upload time, client-settable fields whatever the latest
71
+ * write left them as.
72
+ */
73
+ export declare function getMetadata(ref: StorageReference): Promise<FullMetadata>;
74
+ /**
75
+ * Update the client-settable metadata at `ref`. Server-set fields
76
+ * (`bucket`, `fullPath`, `name`, `generation`, `timeCreated`,
77
+ * `size`, `md5Hash`) are preserved; `metageneration` bumps and
78
+ * `updated` refreshes. The blob is untouched.
79
+ *
80
+ * Pass `undefined` for a field to leave the previous value in
81
+ * place. To explicitly clear a field, the JS SDK accepts `null` —
82
+ * we don't model that in the v1 scope to keep the patch logic simple.
83
+ * Documented for Slice 9's deferred-features section.
84
+ */
85
+ export declare function updateMetadata(ref: StorageReference, patch: SettableMetadata): Promise<FullMetadata>;
86
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/storage/metadata.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAW,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,EAAE,gBAAgB,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAEnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,gBAAgB,EACvB,GAAG,GAAE,IAAiB,GACrB,cAAc,CAchB;AAED,yDAAyD;AACzD,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1C;AAID;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqB9E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,YAAY,CAAC,CAsDvB"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Metadata types + helpers.
3
+ *
4
+ * Type definitions land in Slice 5 (used by `uploadBytes` for its
5
+ * `SettableMetadata` argument and `UploadResult.metadata` return);
6
+ * the public `getMetadata` / `updateMetadata` operations land in
7
+ * Slice 6 on the back of these same types.
8
+ *
9
+ * The shapes mirror `firebase/storage`'s `FullMetadata` and
10
+ * `SettableMetadata` (survey Section 5) so consumer code typechecks
11
+ * against either implementation. Two intentional differences:
12
+ *
13
+ * - `ref` is omitted from `FullMetadata`. The JS SDK populates it
14
+ * lazily; we don't need that machinery for the v1 scope.
15
+ * - `downloadTokens` is omitted. `getDownloadURL` is deferred (no
16
+ * browser-renderable URLs in the v1 scope).
17
+ */
18
+ import * as fb from 'firebase/storage';
19
+ import { emitSandboxEvent, makeServiceMutationEvent } from 'pyric/sandbox/internal';
20
+ import { getStorageService, targetOf } from './service.js';
21
+ import { enforceRules } from './enforce.js';
22
+ import { resourceFromStored, requestResourceFor } from './rules.js';
23
+ import { objectNotFound, invalidRootOperation } from './errors.js';
24
+ import { fbRefOf } from './reference.js';
25
+ /**
26
+ * Project a `StoredMetadata` (persistence-layer shape) onto the
27
+ * public `FullMetadata`. Currently a 1:1 cast — the shapes match —
28
+ * but kept as a function so future divergence (e.g. lazy `ref`
29
+ * computation) has a single seam.
30
+ */
31
+ export function toFullMetadata(stored) {
32
+ return { ...stored };
33
+ }
34
+ /**
35
+ * Apply a `SettableMetadata` patch onto an existing
36
+ * `StoredMetadata`, replacing only the client-settable fields. The
37
+ * server-set fields (`bucket`, `fullPath`, `name`, `generation`,
38
+ * `timeCreated`, `size`, `md5Hash`) are preserved. `metageneration`
39
+ * is bumped, and `updated` is refreshed to the call moment — both
40
+ * are server-tracked but driven by client-initiated changes.
41
+ *
42
+ * Used by `updateMetadata` in Slice 6. Defined here in Slice 5 so
43
+ * the types stay close to the rest of the metadata model.
44
+ */
45
+ export function applyMetadataPatch(base, patch, now = new Date()) {
46
+ return {
47
+ ...base,
48
+ // Client-settable fields are REPLACED wholesale per Firebase
49
+ // semantics; passing `undefined` removes the field.
50
+ contentType: patch.contentType ?? base.contentType,
51
+ cacheControl: patch.cacheControl ?? base.cacheControl,
52
+ contentDisposition: patch.contentDisposition ?? base.contentDisposition,
53
+ contentEncoding: patch.contentEncoding ?? base.contentEncoding,
54
+ contentLanguage: patch.contentLanguage ?? base.contentLanguage,
55
+ customMetadata: patch.customMetadata ?? base.customMetadata,
56
+ metageneration: bump(base.metageneration),
57
+ updated: now.toISOString(),
58
+ };
59
+ }
60
+ /** Bump a base-10 numeric string by 1; `'5'` → `'6'`. */
61
+ export function bump(value) {
62
+ const parsed = Number.parseInt(value, 10);
63
+ if (!Number.isFinite(parsed))
64
+ return '1';
65
+ return String(parsed + 1);
66
+ }
67
+ // ─── Public operations (Slice 6) ───────────────────────────────────
68
+ /**
69
+ * Read the full metadata record at `ref`. Throws when no object
70
+ * exists at the path (`storage/object-not-found`).
71
+ *
72
+ * Mirrors `firebase/storage`'s `getMetadata`. Returns the same
73
+ * `FullMetadata` shape `uploadBytes` produced — server-set fields
74
+ * pinned at upload time, client-settable fields whatever the latest
75
+ * write left them as.
76
+ */
77
+ export async function getMetadata(ref) {
78
+ guardNonRoot(ref, 'getMetadata');
79
+ const target = targetOf(ref.storage);
80
+ if (target.kind === 'prod') {
81
+ const result = await fb.getMetadata(fbRefOf(ref));
82
+ return result;
83
+ }
84
+ const service = await getStorageService(ref.storage);
85
+ const stored = await service.backend.getMetadata(ref.fullPath);
86
+ enforceRules(service, {
87
+ request: {
88
+ auth: target.context.auth,
89
+ method: 'read',
90
+ path: ref.fullPath,
91
+ },
92
+ resource: resourceFromStored(stored),
93
+ }, target);
94
+ if (!stored) {
95
+ throw objectNotFound(ref.fullPath);
96
+ }
97
+ return toFullMetadata(stored);
98
+ }
99
+ /**
100
+ * Update the client-settable metadata at `ref`. Server-set fields
101
+ * (`bucket`, `fullPath`, `name`, `generation`, `timeCreated`,
102
+ * `size`, `md5Hash`) are preserved; `metageneration` bumps and
103
+ * `updated` refreshes. The blob is untouched.
104
+ *
105
+ * Pass `undefined` for a field to leave the previous value in
106
+ * place. To explicitly clear a field, the JS SDK accepts `null` —
107
+ * we don't model that in the v1 scope to keep the patch logic simple.
108
+ * Documented for Slice 9's deferred-features section.
109
+ */
110
+ export async function updateMetadata(ref, patch) {
111
+ guardNonRoot(ref, 'updateMetadata');
112
+ const target = targetOf(ref.storage);
113
+ if (target.kind === 'prod') {
114
+ const result = await fb.updateMetadata(fbRefOf(ref), patch);
115
+ return result;
116
+ }
117
+ const service = await getStorageService(ref.storage);
118
+ const existing = await service.backend.getMetadata(ref.fullPath);
119
+ enforceRules(service, {
120
+ request: {
121
+ auth: target.context.auth,
122
+ method: 'write',
123
+ path: ref.fullPath,
124
+ // The patched view drives `request.resource` for size /
125
+ // contentType / metadata rule checks. Custom metadata is
126
+ // REPLACED wholesale on a patch (see `applyMetadataPatch`), so
127
+ // the about-to-write `request.resource.metadata` is the patch's
128
+ // custom metadata when supplied, else the existing value.
129
+ resource: existing
130
+ ? requestResourceFor({
131
+ size: existing.size,
132
+ contentType: patch.contentType ?? existing.contentType,
133
+ customMetadata: patch.customMetadata ?? existing.customMetadata,
134
+ })
135
+ : undefined,
136
+ },
137
+ resource: resourceFromStored(existing),
138
+ }, target);
139
+ if (!existing) {
140
+ throw objectNotFound(ref.fullPath);
141
+ }
142
+ const next = applyMetadataPatch(existing, patch);
143
+ await service.backend.putMetadata(ref.fullPath, next);
144
+ if (target.kind === 'sandbox') {
145
+ try {
146
+ emitSandboxEvent(target.sandbox, makeServiceMutationEvent({
147
+ service: 'storage',
148
+ op: 'metadata_update',
149
+ path: ref.fullPath,
150
+ auth: target.context.auth,
151
+ before: existing,
152
+ after: next,
153
+ detail: { bucket: ref.bucket },
154
+ }), { service: 'storage' });
155
+ }
156
+ catch {
157
+ // Observational — never let event emission break a metadata update.
158
+ }
159
+ }
160
+ return toFullMetadata(next);
161
+ }
162
+ function guardNonRoot(ref, op) {
163
+ if (ref.fullPath === '') {
164
+ throw invalidRootOperation(op);
165
+ }
166
+ }
167
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/storage/metadata.ts"],"names":[],"mappings":"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"}