@pyric/cli 0.1.0-alpha.14 → 0.1.0-alpha.15

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 (599) hide show
  1. package/dist/assurance/.generated/conformance-verdicts.d.ts +120 -75
  2. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
  3. package/dist/assurance/.generated/conformance-verdicts.js +120 -75
  4. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
  5. package/dist/cli/serve.d.ts +1 -1
  6. package/dist/cli/serve.d.ts.map +1 -1
  7. package/dist/cli/serve.js +207 -284
  8. package/dist/cli/serve.js.map +1 -1
  9. package/dist/cli/service-command-records/database-rules-generate.d.ts +4 -0
  10. package/dist/cli/service-command-records/database-rules-generate.d.ts.map +1 -0
  11. package/dist/cli/service-command-records/database-rules-generate.js +3 -0
  12. package/dist/cli/service-command-records/database-rules-generate.js.map +1 -0
  13. package/dist/cli/service-command-records/database-rules-lint.d.ts +4 -0
  14. package/dist/cli/service-command-records/database-rules-lint.d.ts.map +1 -0
  15. package/dist/cli/service-command-records/database-rules-lint.js +3 -0
  16. package/dist/cli/service-command-records/database-rules-lint.js.map +1 -0
  17. package/dist/cli/service-command-records/database-rules-simulate.d.ts +4 -0
  18. package/dist/cli/service-command-records/database-rules-simulate.d.ts.map +1 -0
  19. package/dist/cli/service-command-records/database-rules-simulate.js +3 -0
  20. package/dist/cli/service-command-records/database-rules-simulate.js.map +1 -0
  21. package/dist/cli/service-command-records/database-rules-validate.d.ts +4 -0
  22. package/dist/cli/service-command-records/database-rules-validate.d.ts.map +1 -0
  23. package/dist/cli/service-command-records/database-rules-validate.js +3 -0
  24. package/dist/cli/service-command-records/database-rules-validate.js.map +1 -0
  25. package/dist/cli/service-command-records/firestore-indexes-generate.d.ts +4 -0
  26. package/dist/cli/service-command-records/firestore-indexes-generate.d.ts.map +1 -0
  27. package/dist/cli/service-command-records/firestore-indexes-generate.js +3 -0
  28. package/dist/cli/service-command-records/firestore-indexes-generate.js.map +1 -0
  29. package/dist/cli/service-command-records/firestore-rules-lint.d.ts +4 -0
  30. package/dist/cli/service-command-records/firestore-rules-lint.d.ts.map +1 -0
  31. package/dist/cli/service-command-records/firestore-rules-lint.js +3 -0
  32. package/dist/cli/service-command-records/firestore-rules-lint.js.map +1 -0
  33. package/dist/cli/service-command-records/firestore-rules-resolve.d.ts +4 -0
  34. package/dist/cli/service-command-records/firestore-rules-resolve.d.ts.map +1 -0
  35. package/dist/cli/service-command-records/firestore-rules-resolve.js +3 -0
  36. package/dist/cli/service-command-records/firestore-rules-resolve.js.map +1 -0
  37. package/dist/cli/service-command-records/firestore-rules-simulate.d.ts +4 -0
  38. package/dist/cli/service-command-records/firestore-rules-simulate.d.ts.map +1 -0
  39. package/dist/cli/service-command-records/firestore-rules-simulate.js +3 -0
  40. package/dist/cli/service-command-records/firestore-rules-simulate.js.map +1 -0
  41. package/dist/cli/service-command-records/firestore-rules-validate.d.ts +4 -0
  42. package/dist/cli/service-command-records/firestore-rules-validate.d.ts.map +1 -0
  43. package/dist/cli/service-command-records/firestore-rules-validate.js +3 -0
  44. package/dist/cli/service-command-records/firestore-rules-validate.js.map +1 -0
  45. package/dist/cli/service-command-records/storage-rules-lint.d.ts +4 -0
  46. package/dist/cli/service-command-records/storage-rules-lint.d.ts.map +1 -0
  47. package/dist/cli/service-command-records/storage-rules-lint.js +3 -0
  48. package/dist/cli/service-command-records/storage-rules-lint.js.map +1 -0
  49. package/dist/cli/service-command-records/storage-rules-simulate.d.ts +4 -0
  50. package/dist/cli/service-command-records/storage-rules-simulate.d.ts.map +1 -0
  51. package/dist/cli/service-command-records/storage-rules-simulate.js +3 -0
  52. package/dist/cli/service-command-records/storage-rules-simulate.js.map +1 -0
  53. package/dist/cli/service-commands.d.ts +7 -0
  54. package/dist/cli/service-commands.d.ts.map +1 -1
  55. package/dist/cli/service-commands.generated.d.ts +35 -0
  56. package/dist/cli/service-commands.generated.d.ts.map +1 -0
  57. package/dist/cli/service-commands.generated.js +25 -0
  58. package/dist/cli/service-commands.generated.js.map +1 -0
  59. package/dist/cli/service-commands.js +23 -40
  60. package/dist/cli/service-commands.js.map +1 -1
  61. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
  62. package/dist/conformance/.generated/can-i-use-browser.js +1 -1
  63. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
  64. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
  65. package/dist/conformance/.generated/can-i-use.js +1 -1
  66. package/dist/conformance/.generated/can-i-use.js.map +1 -1
  67. package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
  68. package/dist/conformance/.generated/conformance-docs.js +1 -1
  69. package/dist/conformance/.generated/conformance-docs.js.map +1 -1
  70. package/dist/functions-rtdb/development-runtime.d.ts +63 -0
  71. package/dist/functions-rtdb/development-runtime.d.ts.map +1 -0
  72. package/dist/functions-rtdb/development-runtime.js +244 -0
  73. package/dist/functions-rtdb/development-runtime.js.map +1 -0
  74. package/dist/serve/bridge-mount.d.ts +32 -2
  75. package/dist/serve/bridge-mount.d.ts.map +1 -1
  76. package/dist/serve/bridge-mount.js +232 -18
  77. package/dist/serve/bridge-mount.js.map +1 -1
  78. package/dist/serve/bundler.d.ts +2 -18
  79. package/dist/serve/bundler.d.ts.map +1 -1
  80. package/dist/serve/bundler.js +7 -35
  81. package/dist/serve/bundler.js.map +1 -1
  82. package/dist/serve/entries/app-client.d.ts.map +1 -1
  83. package/dist/serve/entries/app-client.js +5 -5
  84. package/dist/serve/entries/app-client.js.map +1 -1
  85. package/dist/serve/entries/auth-helper-core.d.ts +23 -6
  86. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
  87. package/dist/serve/entries/auth-helper-core.js +55 -24
  88. package/dist/serve/entries/auth-helper-core.js.map +1 -1
  89. package/dist/serve/entries/database.d.ts +28 -0
  90. package/dist/serve/entries/database.d.ts.map +1 -1
  91. package/dist/serve/entries/database.js +95 -26
  92. package/dist/serve/entries/database.js.map +1 -1
  93. package/dist/serve/entries/init.d.ts.map +1 -1
  94. package/dist/serve/entries/init.js +21 -12
  95. package/dist/serve/entries/init.js.map +1 -1
  96. package/dist/serve/html-injection.d.ts +5 -0
  97. package/dist/serve/html-injection.d.ts.map +1 -0
  98. package/dist/serve/html-injection.js +59 -0
  99. package/dist/serve/html-injection.js.map +1 -0
  100. package/dist/serve/namespace.d.ts +6 -22
  101. package/dist/serve/namespace.d.ts.map +1 -1
  102. package/dist/serve/namespace.js +23 -145
  103. package/dist/serve/namespace.js.map +1 -1
  104. package/dist/serve/runtime/worker-replacement.d.ts +1 -2
  105. package/dist/serve/runtime/worker-replacement.d.ts.map +1 -1
  106. package/dist/serve/sandbox-session.d.ts +78 -0
  107. package/dist/serve/sandbox-session.d.ts.map +1 -0
  108. package/dist/serve/sandbox-session.js +171 -0
  109. package/dist/serve/sandbox-session.js.map +1 -0
  110. package/dist/serve/server.d.ts +5 -2
  111. package/dist/serve/server.d.ts.map +1 -1
  112. package/dist/serve/server.js +21 -5
  113. package/dist/serve/server.js.map +1 -1
  114. package/dist/serve/site-tree.d.ts +8 -0
  115. package/dist/serve/site-tree.d.ts.map +1 -0
  116. package/dist/serve/site-tree.js +113 -0
  117. package/dist/serve/site-tree.js.map +1 -0
  118. package/dist/serve/site-ui/_astro/RulesCodeEditor.CzwHdCi9.js +23 -0
  119. package/dist/serve/site-ui/_astro/_example_.jevZ7OdV.css +1 -0
  120. package/dist/serve/site-ui/_astro/_slug_.BoKXYrnu.css +1 -0
  121. package/dist/serve/site-ui/_astro/_studio_.BtYpqe1A.css +1 -0
  122. package/dist/serve/site-ui/_astro/app.BnMC0ywl.js +109 -0
  123. package/dist/serve/site-ui/_astro/app.BsFsMjn0.css +1 -0
  124. package/dist/serve/site-ui/_astro/app.DVXXR-WI.js +1 -0
  125. package/dist/serve/site-ui/_astro/chess-showcase.DzPO6kz0.js +1 -0
  126. package/dist/serve/site-ui/_astro/chess-source-explorer.C5k9c5yK.js +1 -0
  127. package/dist/serve/site-ui/_astro/chess-v2.CFHmd3UL.js +354 -0
  128. package/dist/serve/site-ui/_astro/client.D2ORs4B-.js +25 -0
  129. package/dist/serve/site-ui/_astro/example-runtime.CM0H02rx.js +291 -0
  130. package/dist/serve/site-ui/_astro/index.B4Kh80he.js +1 -0
  131. package/dist/serve/site-ui/_astro/index.DBy5LfQW.js +9 -0
  132. package/dist/serve/site-ui/_astro/index.DNyk7q8W.js +9 -0
  133. package/dist/serve/site-ui/_astro/jsx-runtime.D_zvdyIk.js +9 -0
  134. package/dist/serve/site-ui/_astro/reads.D1exkX1-.js +1 -0
  135. package/dist/serve/site-ui/_astro/sandbox-controls.BqMePr5V.js +1153 -0
  136. package/dist/serve/site-ui/_astro/seed.BCn5DhHS.js +20 -0
  137. package/dist/serve/site-ui/auth/index.html +11 -0
  138. package/dist/serve/site-ui/docs/_rhythm/index.html +100 -0
  139. package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +43 -0
  140. package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +26 -0
  141. package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +70 -0
  142. package/dist/serve/{docs-ui → site-ui}/docs/ai-compat/index.html +3 -3
  143. package/dist/serve/site-ui/docs/api-reference/index.html +68 -0
  144. package/dist/serve/{docs-ui → site-ui}/docs/app-compat/index.html +3 -3
  145. package/dist/serve/{docs-ui → site-ui}/docs/auth-compat/index.html +3 -3
  146. package/dist/serve/site-ui/docs/build/ai-logic/index.html +64 -0
  147. package/dist/serve/site-ui/docs/build/authentication/index.html +66 -0
  148. package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +84 -0
  149. package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +71 -0
  150. package/dist/serve/site-ui/docs/build/cloud-storage/index.html +66 -0
  151. package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-storage.md +2 -2
  152. package/dist/serve/site-ui/docs/build/realtime-database/index.html +67 -0
  153. package/dist/serve/site-ui/docs/conformance-scores/index.html +50 -0
  154. package/dist/serve/{docs-ui → site-ui}/docs/conformance-scores.md +3 -3
  155. package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +531 -0
  156. package/dist/serve/{docs-ui → site-ui}/docs/database-compat/index.html +211 -168
  157. package/dist/serve/{docs-ui → site-ui}/docs/database-compat.md +208 -170
  158. package/dist/serve/site-ui/docs/examples/chess/index.html +384 -0
  159. package/dist/serve/site-ui/docs/examples/chess.md +57 -0
  160. package/dist/serve/site-ui/docs/examples/index.html +3 -0
  161. package/dist/serve/site-ui/docs/examples.md +4 -0
  162. package/dist/serve/{docs-ui → site-ui}/docs/firestore-compat/index.html +55 -91
  163. package/dist/serve/{docs-ui → site-ui}/docs/firestore-compat.md +52 -88
  164. package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +73 -0
  165. package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +29 -0
  166. package/dist/serve/site-ui/docs/get-started/start-building/index.html +33 -0
  167. package/dist/serve/{docs-ui → site-ui}/docs/index.json +595 -26
  168. package/dist/serve/site-ui/docs/messaging-compat/index.html +324 -0
  169. package/dist/serve/{docs-ui → site-ui}/docs/messaging-compat.md +71 -1
  170. package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +28 -0
  171. package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +74 -0
  172. package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +45 -0
  173. package/dist/serve/site-ui/docs/overview/index.html +17 -0
  174. package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +186 -0
  175. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-auth-reference-api/index.html +4 -4
  176. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-database-reference-api/index.html +4 -4
  177. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-firestore-reference-api/index.html +318 -202
  178. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-firestore-reference-api.md +154 -27
  179. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-messaging-reference-api/index.html +5 -5
  180. package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +318 -0
  181. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-reference-api/index.html +5 -5
  182. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +160 -0
  183. package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +425 -0
  184. package/dist/serve/{docs-ui → site-ui}/docs/pyric-auth-reference-api/index.html +5 -5
  185. package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +60 -0
  186. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-reference-api/index.html +4 -4
  187. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-client-reference-api/index.html +4 -4
  188. package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +507 -0
  189. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +258 -0
  190. package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +51 -0
  191. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +308 -0
  192. package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +68 -0
  193. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-discover-reference-api/index.html +4 -4
  194. package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +11 -0
  195. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-remote-reference-api/index.html +4 -4
  196. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-serve-worker-reference-api/index.html +1186 -1384
  197. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-serve-worker-reference-api.md +817 -1291
  198. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-verify-reference-api/index.html +4 -4
  199. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +126 -0
  200. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-vite-reference-api.md +1 -1
  201. package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +2641 -0
  202. package/dist/serve/{docs-ui → site-ui}/docs/pyric-database-reference-api.md +1055 -158
  203. package/dist/serve/{docs-ui → site-ui}/docs/pyric-firestore-reference-api/index.html +311 -249
  204. package/dist/serve/{docs-ui → site-ui}/docs/pyric-firestore-reference-api.md +72 -54
  205. package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +509 -0
  206. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +182 -0
  207. package/dist/serve/{docs-ui → site-ui}/docs/pyric-rules-reference-api/index.html +7 -26
  208. package/dist/serve/{docs-ui → site-ui}/docs/pyric-rules-reference-api.md +13 -23
  209. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +121 -0
  210. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +203 -0
  211. package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-reference-api/index.html +26 -5
  212. package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-reference-api.md +22 -22
  213. package/dist/serve/{docs-ui → site-ui}/docs/pyric-storage-reference-api/index.html +5 -15
  214. package/dist/serve/{docs-ui → site-ui}/docs/pyric-storage-reference-api.md +0 -13
  215. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +639 -0
  216. package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +100 -0
  217. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-reference-api/index.html +4 -4
  218. package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +24 -0
  219. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-reference-api/index.html +4 -4
  220. package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +136 -0
  221. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-reference-api/index.html +7 -7
  222. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-reference-api.md +4 -4
  223. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-primitives-reference-api/index.html +4 -4
  224. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rtdb-reference-api/index.html +4 -4
  225. package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +16 -0
  226. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-reference-api/index.html +4 -4
  227. package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +176 -0
  228. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-reference-api/index.html +10 -11
  229. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-reference-api.md +7 -8
  230. package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +188 -0
  231. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-reference-api/index.html +4 -4
  232. package/dist/serve/{docs-ui → site-ui}/docs/rules-compat/index.html +87 -57
  233. package/dist/serve/{docs-ui → site-ui}/docs/rules-compat.md +84 -54
  234. package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +51 -0
  235. package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +106 -0
  236. package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +41 -0
  237. package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +67 -0
  238. package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +159 -0
  239. package/dist/serve/{docs-ui → site-ui}/docs/secure/rules-standard-library.md +2 -2
  240. package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +47 -0
  241. package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +95 -0
  242. package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +82 -0
  243. package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +37 -0
  244. package/dist/serve/site-ui/docs/ship/test-in-node/index.html +75 -0
  245. package/dist/serve/{docs-ui → site-ui}/docs/storage-compat/index.html +8 -8
  246. package/dist/serve/{docs-ui → site-ui}/docs/storage-compat.md +5 -5
  247. package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +132 -0
  248. package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +861 -0
  249. package/dist/serve/site-ui/docs/trust/rules-standard-library.md +344 -0
  250. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +582 -0
  251. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research.md +448 -0
  252. package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +14 -0
  253. package/dist/serve/{docs-ui → site-ui}/docs/tutorial/index.html +4 -4
  254. package/dist/serve/{docs-ui → site-ui}/docs/tutorial.md +1 -1
  255. package/dist/serve/site-ui/examples/chess/index.html +2 -0
  256. package/dist/serve/site-ui/examples/firestore-first-write/index.html +2 -0
  257. package/dist/serve/site-ui/firestore/index.html +11 -0
  258. package/dist/serve/site-ui/index.html +11 -0
  259. package/dist/serve/{docs-ui → site-ui}/llms.txt +6 -2
  260. package/dist/serve/site-ui/rtdb/index.html +11 -0
  261. package/dist/serve/site-ui/settings/index.html +11 -0
  262. package/dist/serve/site-ui/storage/index.html +11 -0
  263. package/dist/serve/site-ui/studio-routes.json +1 -0
  264. package/dist/serve/site-ui/traffic/index.html +11 -0
  265. package/dist/serve/standalone-assets.d.ts +4 -10
  266. package/dist/serve/standalone-assets.d.ts.map +1 -1
  267. package/dist/serve/standalone-assets.js +8 -21
  268. package/dist/serve/standalone-assets.js.map +1 -1
  269. package/dist/serve/vite-functions-development.d.ts +29 -0
  270. package/dist/serve/vite-functions-development.d.ts.map +1 -0
  271. package/dist/serve/vite-functions-development.js +150 -0
  272. package/dist/serve/vite-functions-development.js.map +1 -0
  273. package/dist/serve/vite-generation-bridge.d.ts +17 -0
  274. package/dist/serve/vite-generation-bridge.d.ts.map +1 -0
  275. package/dist/serve/vite-generation-bridge.js +47 -0
  276. package/dist/serve/vite-generation-bridge.js.map +1 -0
  277. package/dist/serve/vite-generation-functions.d.ts +35 -0
  278. package/dist/serve/vite-generation-functions.d.ts.map +1 -0
  279. package/dist/serve/vite-generation-functions.js +46 -0
  280. package/dist/serve/vite-generation-functions.js.map +1 -0
  281. package/dist/serve/vite-generation-middleware.d.ts +10 -0
  282. package/dist/serve/vite-generation-middleware.d.ts.map +1 -0
  283. package/dist/serve/vite-generation-middleware.js +40 -0
  284. package/dist/serve/vite-generation-middleware.js.map +1 -0
  285. package/dist/serve/vite-generation-rules-watch.d.ts +8 -0
  286. package/dist/serve/vite-generation-rules-watch.d.ts.map +1 -0
  287. package/dist/serve/vite-generation-rules-watch.js +33 -0
  288. package/dist/serve/vite-generation-rules-watch.js.map +1 -0
  289. package/dist/serve/vite-module-swap.d.ts +16 -0
  290. package/dist/serve/vite-module-swap.d.ts.map +1 -0
  291. package/dist/serve/vite-module-swap.js +96 -0
  292. package/dist/serve/vite-module-swap.js.map +1 -0
  293. package/dist/serve/vite-page-runtime.d.ts +29 -0
  294. package/dist/serve/vite-page-runtime.d.ts.map +1 -0
  295. package/dist/serve/vite-page-runtime.js +71 -0
  296. package/dist/serve/vite-page-runtime.js.map +1 -0
  297. package/dist/serve/vite-plugin.d.ts +44 -4
  298. package/dist/serve/vite-plugin.d.ts.map +1 -1
  299. package/dist/serve/vite-plugin.js +62 -864
  300. package/dist/serve/vite-plugin.js.map +1 -1
  301. package/dist/serve/vite-sandbox-generation.d.ts +57 -0
  302. package/dist/serve/vite-sandbox-generation.d.ts.map +1 -0
  303. package/dist/serve/vite-sandbox-generation.js +178 -0
  304. package/dist/serve/vite-sandbox-generation.js.map +1 -0
  305. package/dist/serve/worker/client/disconnect.d.ts.map +1 -1
  306. package/dist/serve/worker/client/disconnect.js +2 -0
  307. package/dist/serve/worker/client/disconnect.js.map +1 -1
  308. package/dist/serve/worker/client/handles.d.ts +5 -0
  309. package/dist/serve/worker/client/handles.d.ts.map +1 -1
  310. package/dist/serve/worker/client/handles.js.map +1 -1
  311. package/dist/serve/worker/client/pagehide.d.ts +13 -0
  312. package/dist/serve/worker/client/pagehide.d.ts.map +1 -0
  313. package/dist/serve/worker/client/pagehide.js +19 -0
  314. package/dist/serve/worker/client/pagehide.js.map +1 -0
  315. package/dist/serve/worker/client/rtdb-admin.d.ts +8 -0
  316. package/dist/serve/worker/client/rtdb-admin.d.ts.map +1 -0
  317. package/dist/serve/worker/client/rtdb-admin.js +39 -0
  318. package/dist/serve/worker/client/rtdb-admin.js.map +1 -0
  319. package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts +15 -0
  320. package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts.map +1 -0
  321. package/dist/serve/worker/client/rtdb-connection-lifecycle.js +45 -0
  322. package/dist/serve/worker/client/rtdb-connection-lifecycle.js.map +1 -0
  323. package/dist/serve/worker/client/rtdb-controls.d.ts +6 -0
  324. package/dist/serve/worker/client/rtdb-controls.d.ts.map +1 -0
  325. package/dist/serve/worker/client/rtdb-controls.js +8 -0
  326. package/dist/serve/worker/client/rtdb-controls.js.map +1 -0
  327. package/dist/serve/worker/client/rtdb-listeners.d.ts +24 -0
  328. package/dist/serve/worker/client/rtdb-listeners.d.ts.map +1 -0
  329. package/dist/serve/worker/client/rtdb-listeners.js +262 -0
  330. package/dist/serve/worker/client/rtdb-listeners.js.map +1 -0
  331. package/dist/serve/worker/client/rtdb-reads.d.ts +4 -0
  332. package/dist/serve/worker/client/rtdb-reads.d.ts.map +1 -0
  333. package/dist/serve/worker/client/rtdb-reads.js +11 -0
  334. package/dist/serve/worker/client/rtdb-reads.js.map +1 -0
  335. package/dist/serve/worker/client/rtdb-references.d.ts +19 -0
  336. package/dist/serve/worker/client/rtdb-references.d.ts.map +1 -0
  337. package/dist/serve/worker/client/rtdb-references.js +63 -0
  338. package/dist/serve/worker/client/rtdb-references.js.map +1 -0
  339. package/dist/serve/worker/client/rtdb-snapshots.d.ts +20 -0
  340. package/dist/serve/worker/client/rtdb-snapshots.d.ts.map +1 -0
  341. package/dist/serve/worker/client/rtdb-snapshots.js +64 -0
  342. package/dist/serve/worker/client/rtdb-snapshots.js.map +1 -0
  343. package/dist/serve/worker/client/rtdb-transactions.d.ts +14 -0
  344. package/dist/serve/worker/client/rtdb-transactions.d.ts.map +1 -0
  345. package/dist/serve/worker/client/rtdb-transactions.js +34 -0
  346. package/dist/serve/worker/client/rtdb-transactions.js.map +1 -0
  347. package/dist/serve/worker/client/rtdb-writes.d.ts +8 -0
  348. package/dist/serve/worker/client/rtdb-writes.d.ts.map +1 -0
  349. package/dist/serve/worker/client/rtdb-writes.js +65 -0
  350. package/dist/serve/worker/client/rtdb-writes.js.map +1 -0
  351. package/dist/serve/worker/client.d.ts +0 -2
  352. package/dist/serve/worker/client.d.ts.map +1 -1
  353. package/dist/serve/worker/client.js +0 -2
  354. package/dist/serve/worker/client.js.map +1 -1
  355. package/dist/serve/worker/entry.js +2 -2
  356. package/dist/serve/worker/entry.js.map +1 -1
  357. package/dist/serve/worker/host/dispatch.d.ts +2 -0
  358. package/dist/serve/worker/host/dispatch.d.ts.map +1 -1
  359. package/dist/serve/worker/host/dispatch.js +24 -2
  360. package/dist/serve/worker/host/dispatch.js.map +1 -1
  361. package/dist/serve/worker/host/rtdb.d.ts +6 -2
  362. package/dist/serve/worker/host/rtdb.d.ts.map +1 -1
  363. package/dist/serve/worker/host/rtdb.js +224 -2
  364. package/dist/serve/worker/host/rtdb.js.map +1 -1
  365. package/dist/serve/worker/host/studio.d.ts.map +1 -1
  366. package/dist/serve/worker/host/studio.js +2 -0
  367. package/dist/serve/worker/host/studio.js.map +1 -1
  368. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -1
  369. package/dist/serve/worker/host/subscriptions.js +3 -3
  370. package/dist/serve/worker/host/subscriptions.js.map +1 -1
  371. package/dist/serve/worker/host.d.ts +1 -1
  372. package/dist/serve/worker/host.d.ts.map +1 -1
  373. package/dist/serve/worker/host.js +1 -1
  374. package/dist/serve/worker/host.js.map +1 -1
  375. package/dist/serve/worker/index.d.ts +16 -1
  376. package/dist/serve/worker/index.d.ts.map +1 -1
  377. package/dist/serve/worker/index.js +17 -4
  378. package/dist/serve/worker/index.js.map +1 -1
  379. package/dist/serve/worker/protocol.d.ts +57 -0
  380. package/dist/serve/worker/protocol.d.ts.map +1 -1
  381. package/dist/serve/worker/protocol.js.map +1 -1
  382. package/dist/serve/worker/rtdb-value-equality.d.ts +3 -0
  383. package/dist/serve/worker/rtdb-value-equality.d.ts.map +1 -0
  384. package/dist/serve/worker/rtdb-value-equality.js +18 -0
  385. package/dist/serve/worker/rtdb-value-equality.js.map +1 -0
  386. package/dist/serve/worker/serve-init.js +2 -2
  387. package/dist/serve/worker/serve-init.js.map +1 -1
  388. package/dist/serve/worker/service-worker-relay.js +2 -2
  389. package/dist/serve/worker/service-worker-relay.js.map +1 -1
  390. package/package.json +7 -5
  391. package/src/assurance/.generated/conformance-verdicts.ts +120 -75
  392. package/src/cli/serve.ts +215 -307
  393. package/src/cli/service-command-records/database-rules-generate.ts +3 -0
  394. package/src/cli/service-command-records/database-rules-lint.ts +3 -0
  395. package/src/cli/service-command-records/database-rules-simulate.ts +3 -0
  396. package/src/cli/service-command-records/database-rules-validate.ts +3 -0
  397. package/src/cli/service-command-records/firestore-indexes-generate.ts +3 -0
  398. package/src/cli/service-command-records/firestore-rules-lint.ts +3 -0
  399. package/src/cli/service-command-records/firestore-rules-resolve.ts +3 -0
  400. package/src/cli/service-command-records/firestore-rules-simulate.ts +3 -0
  401. package/src/cli/service-command-records/firestore-rules-validate.ts +3 -0
  402. package/src/cli/service-command-records/storage-rules-lint.ts +3 -0
  403. package/src/cli/service-command-records/storage-rules-simulate.ts +3 -0
  404. package/src/cli/service-commands.generated.ts +27 -0
  405. package/src/cli/service-commands.test.ts +43 -0
  406. package/src/cli/service-commands.ts +36 -51
  407. package/src/conformance/.generated/can-i-use-browser.ts +1 -1
  408. package/src/conformance/.generated/can-i-use.ts +1 -1
  409. package/src/conformance/.generated/conformance-docs.ts +1 -1
  410. package/src/functions-rtdb/development-runtime.ts +299 -0
  411. package/src/serve/bridge-mount.ts +253 -19
  412. package/src/serve/bundler.ts +8 -34
  413. package/src/serve/entries/app-client.ts +5 -4
  414. package/src/serve/entries/auth-helper-core.ts +83 -30
  415. package/src/serve/entries/database.ts +180 -57
  416. package/src/serve/entries/init.ts +30 -20
  417. package/src/serve/html-injection.ts +65 -0
  418. package/src/serve/namespace.ts +26 -169
  419. package/src/serve/runtime/worker-replacement.ts +1 -1
  420. package/src/serve/sandbox-session.ts +233 -0
  421. package/src/serve/server.ts +20 -5
  422. package/src/serve/site-tree.ts +146 -0
  423. package/src/serve/standalone-assets.ts +9 -26
  424. package/src/serve/vite-functions-development.ts +201 -0
  425. package/src/serve/vite-generation-bridge.ts +66 -0
  426. package/src/serve/vite-generation-functions.ts +78 -0
  427. package/src/serve/vite-generation-middleware.ts +56 -0
  428. package/src/serve/vite-generation-rules-watch.ts +37 -0
  429. package/src/serve/vite-module-swap.ts +119 -0
  430. package/src/serve/vite-page-runtime.ts +100 -0
  431. package/src/serve/vite-plugin.ts +78 -883
  432. package/src/serve/vite-sandbox-generation.ts +255 -0
  433. package/src/serve/worker/client/disconnect.ts +3 -1
  434. package/src/serve/worker/client/handles.ts +5 -0
  435. package/src/serve/worker/client/pagehide.ts +31 -0
  436. package/src/serve/worker/client/rtdb-admin.ts +74 -0
  437. package/src/serve/worker/client/rtdb-connection-lifecycle.ts +52 -0
  438. package/src/serve/worker/client/rtdb-controls.ts +8 -0
  439. package/src/serve/worker/client/rtdb-listeners.ts +337 -0
  440. package/src/serve/worker/client/rtdb-reads.ts +12 -0
  441. package/src/serve/worker/client/rtdb-references.ts +85 -0
  442. package/src/serve/worker/client/rtdb-snapshots.ts +118 -0
  443. package/src/serve/worker/client/rtdb-transactions.ts +51 -0
  444. package/src/serve/worker/client/rtdb-writes.ts +74 -0
  445. package/src/serve/worker/client.ts +0 -2
  446. package/src/serve/worker/entry.ts +2 -2
  447. package/src/serve/worker/host/dispatch.ts +22 -2
  448. package/src/serve/worker/host/rtdb.ts +243 -2
  449. package/src/serve/worker/host/studio.ts +2 -0
  450. package/src/serve/worker/host/subscriptions.ts +8 -4
  451. package/src/serve/worker/host.ts +1 -1
  452. package/src/serve/worker/index.ts +58 -10
  453. package/src/serve/worker/protocol.ts +23 -2
  454. package/src/serve/worker/rtdb-value-equality.ts +17 -0
  455. package/src/serve/worker/serve-init.ts +2 -2
  456. package/src/serve/worker/service-worker-relay.ts +2 -2
  457. package/dist/serve/docs-ui/_astro/_slug_.DUci-duz.css +0 -1
  458. package/dist/serve/docs-ui/docs/_rhythm/index.html +0 -100
  459. package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +0 -43
  460. package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +0 -26
  461. package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +0 -70
  462. package/dist/serve/docs-ui/docs/api-reference/index.html +0 -68
  463. package/dist/serve/docs-ui/docs/build/ai-logic/index.html +0 -64
  464. package/dist/serve/docs-ui/docs/build/authentication/index.html +0 -66
  465. package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +0 -70
  466. package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +0 -71
  467. package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +0 -66
  468. package/dist/serve/docs-ui/docs/build/realtime-database/index.html +0 -67
  469. package/dist/serve/docs-ui/docs/conformance-scores/index.html +0 -50
  470. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +0 -531
  471. package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +0 -73
  472. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +0 -29
  473. package/dist/serve/docs-ui/docs/get-started/start-building/index.html +0 -33
  474. package/dist/serve/docs-ui/docs/messaging-compat/index.html +0 -265
  475. package/dist/serve/docs-ui/docs/observe/resolve-runtime-status/index.html +0 -28
  476. package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +0 -74
  477. package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +0 -45
  478. package/dist/serve/docs-ui/docs/overview/index.html +0 -17
  479. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +0 -186
  480. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +0 -318
  481. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +0 -160
  482. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +0 -425
  483. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +0 -60
  484. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +0 -507
  485. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +0 -258
  486. package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +0 -51
  487. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +0 -308
  488. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +0 -68
  489. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +0 -11
  490. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +0 -126
  491. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +0 -1852
  492. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +0 -509
  493. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +0 -182
  494. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +0 -121
  495. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +0 -203
  496. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +0 -639
  497. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +0 -100
  498. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +0 -24
  499. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +0 -136
  500. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +0 -16
  501. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +0 -176
  502. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +0 -188
  503. package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +0 -51
  504. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +0 -106
  505. package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +0 -41
  506. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +0 -67
  507. package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +0 -159
  508. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +0 -47
  509. package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +0 -95
  510. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +0 -82
  511. package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +0 -37
  512. package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +0 -75
  513. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +0 -132
  514. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +0 -14
  515. package/dist/serve/docs-ui/index.html +0 -1
  516. package/dist/serve/studio-ui/assets/RulesCodeEditor-BDlH-5lp.js +0 -23
  517. package/dist/serve/studio-ui/assets/index-Bf9SSE8L.js +0 -1218
  518. package/dist/serve/studio-ui/assets/index-BlSGru_r.css +0 -1
  519. package/dist/serve/studio-ui/assets/seed-D_UjxfOU.js +0 -20
  520. package/dist/serve/studio-ui/index.html +0 -32
  521. package/dist/serve/worker/client/rtdb.d.ts +0 -36
  522. package/dist/serve/worker/client/rtdb.d.ts.map +0 -1
  523. package/dist/serve/worker/client/rtdb.js +0 -241
  524. package/dist/serve/worker/client/rtdb.js.map +0 -1
  525. package/src/serve/worker/client/rtdb.ts +0 -311
  526. /package/dist/serve/{docs-ui → site-ui}/404.html +0 -0
  527. /package/dist/serve/{docs-ui → site-ui}/_astro/_slug_.CXh9yTP1.css +0 -0
  528. /package/dist/serve/{docs-ui → site-ui}/docs/_rhythm.md +0 -0
  529. /package/dist/serve/{docs-ui → site-ui}/docs/agent/set-up-your-agent.md +0 -0
  530. /package/dist/serve/{docs-ui → site-ui}/docs/agent/watch-and-review.md +0 -0
  531. /package/dist/serve/{docs-ui → site-ui}/docs/agent/work-with-an-agent.md +0 -0
  532. /package/dist/serve/{docs-ui → site-ui}/docs/ai-compat.md +0 -0
  533. /package/dist/serve/{docs-ui → site-ui}/docs/api-reference.md +0 -0
  534. /package/dist/serve/{docs-ui → site-ui}/docs/app-compat.md +0 -0
  535. /package/dist/serve/{docs-ui → site-ui}/docs/auth-compat.md +0 -0
  536. /package/dist/serve/{docs-ui → site-ui}/docs/build/ai-logic.md +0 -0
  537. /package/dist/serve/{docs-ui → site-ui}/docs/build/authentication.md +0 -0
  538. /package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-firestore.md +0 -0
  539. /package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-messaging.md +0 -0
  540. /package/dist/serve/{docs-ui → site-ui}/docs/build/realtime-database.md +0 -0
  541. /package/dist/serve/{docs-ui → site-ui}/docs/create-pyric-reference-api.md +0 -0
  542. /package/dist/serve/{docs-ui → site-ui}/docs/functions-rtdb-compat.md +0 -0
  543. /package/dist/serve/{docs-ui → site-ui}/docs/get-started/how-the-swap-works.md +0 -0
  544. /package/dist/serve/{docs-ui → site-ui}/docs/get-started/start-building.md +0 -0
  545. /package/dist/serve/{docs-ui → site-ui}/docs/index.html +0 -0
  546. /package/dist/serve/{docs-ui → site-ui}/docs/observe/resolve-runtime-status.md +0 -0
  547. /package/dist/serve/{docs-ui → site-ui}/docs/observe/see-whats-happening.md +0 -0
  548. /package/dist/serve/{docs-ui → site-ui}/docs/observe/shape-your-data.md +0 -0
  549. /package/dist/serve/{docs-ui → site-ui}/docs/overview.md +0 -0
  550. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-app-reference-api.md +0 -0
  551. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-auth-reference-api.md +0 -0
  552. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-database-reference-api.md +0 -0
  553. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-messaging-reference-api.md +0 -0
  554. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-storage-reference-api.md +0 -0
  555. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-reference-api.md +0 -0
  556. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-scripting-reference-api.md +0 -0
  557. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-app-reference-api.md +0 -0
  558. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-auth-reference-api.md +0 -0
  559. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-browser-reference-api.md +0 -0
  560. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-reference-api.md +0 -0
  561. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-client-reference-api.md +0 -0
  562. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-reference-api.md +0 -0
  563. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-browser-reference-api.md +0 -0
  564. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-docs-reference-api.md +0 -0
  565. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-reference-api.md +0 -0
  566. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-credentials-node-reference-api.md +0 -0
  567. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-discover-reference-api.md +0 -0
  568. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-register-reference-api.md +0 -0
  569. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-remote-reference-api.md +0 -0
  570. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-verify-reference-api.md +0 -0
  571. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-messaging-reference-api.md +0 -0
  572. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-messaging-sw-reference-api.md +0 -0
  573. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-database-reference-api.md +0 -0
  574. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-firestore-reference-api.md +0 -0
  575. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-agents-reference-api.md +0 -0
  576. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-hooks-reference-api.md +0 -0
  577. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-reference-api.md +0 -0
  578. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-hooks-reference-api.md +0 -0
  579. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-reference-api.md +0 -0
  580. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-hooks-reference-api.md +0 -0
  581. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-primitives-reference-api.md +0 -0
  582. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rtdb-reference-api.md +0 -0
  583. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-hooks-reference-api.md +0 -0
  584. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-reference-api.md +0 -0
  585. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-hooks-reference-api.md +0 -0
  586. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-hooks-reference-api.md +0 -0
  587. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-reference-api.md +0 -0
  588. /package/dist/serve/{docs-ui → site-ui}/docs/secure/audit-your-rules.md +0 -0
  589. /package/dist/serve/{docs-ui → site-ui}/docs/secure/firestore-rules-limits.md +0 -0
  590. /package/dist/serve/{docs-ui → site-ui}/docs/secure/read-a-denial.md +0 -0
  591. /package/dist/serve/{docs-ui → site-ui}/docs/secure/rtdb-rules-in-typescript.md +0 -0
  592. /package/dist/serve/{docs-ui → site-ui}/docs/secure/secure-it-with-rules.md +0 -0
  593. /package/dist/serve/{docs-ui → site-ui}/docs/secure/simulate-and-lint.md +0 -0
  594. /package/dist/serve/{docs-ui → site-ui}/docs/secure/write-a-rules-test-suite.md +0 -0
  595. /package/dist/serve/{docs-ui → site-ui}/docs/ship/ship-to-production.md +0 -0
  596. /package/dist/serve/{docs-ui → site-ui}/docs/ship/test-in-node.md +0 -0
  597. /package/dist/serve/{docs-ui → site-ui}/docs/trust/how-we-know-it-matches-firebase.md +0 -0
  598. /package/dist/serve/{docs-ui → site-ui}/docs/trust/versioning-and-compatibility.md +0 -0
  599. /package/dist/serve/{studio-ui → site-ui}/pyric-logo.svg +0 -0
@@ -35,12 +35,8 @@ export interface EmbeddedAssets {
35
35
  workerVersion: string;
36
36
  /** Lazy: flat map of SDK filename -> base64 bytes (app.js, worker.js, chunks). */
37
37
  sdk: () => Promise<Record<string, string>>;
38
- /** Lazy: Studio UI relpath (posix) -> base64 bytes (index.html, assets/*). */
39
- studio: () => Promise<Record<string, string>>;
40
- /** Lazy: docs site relpath (posix) -> base64 bytes (the site-docs `dist/`
41
- * tree: `docs/*`, `_astro/*`, `index.html`, `llms.txt`). Optional for older
42
- * compiled binaries; missing means the Studio Docs tab 404s in standalone. */
43
- docs?: () => Promise<Record<string, string>>;
38
+ /** Lazy: unified Astro site relpath (posix) -> base64 bytes. */
39
+ site: () => Promise<Record<string, string>>;
44
40
  /** Lazy: packed npm tarballs of the unpublished workspace packages
45
41
  * (`pyric.tgz`, `pyric-admin.tgz`, `create-pyric.tgz`, `pyric-cli.tgz`)
46
42
  * -> base64. Used by `pyric init` / `pyric vendor` to vendor them into a
@@ -154,27 +150,14 @@ export async function materializeServeAssets(): Promise<{ outDir: string; cached
154
150
  return { outDir, cached };
155
151
  }
156
152
 
157
- let studioDirOnce: string | null = null;
153
+ let siteDirOnce: string | null = null;
158
154
 
159
- /** Materialize the embedded Studio UI tree to a temp dir for `dev --ui`. */
160
- export async function materializeStudioUi(): Promise<string> {
161
- if (studioDirOnce) return studioDirOnce;
155
+ /** Materialize the embedded Astro documentation + Studio tree for `dev --ui`. */
156
+ export async function materializeSiteUi(): Promise<string> {
157
+ if (siteDirOnce) return siteDirOnce;
162
158
  const e = embedded();
163
- const dir = join(materializationRoot(e), 'studio-ui');
164
- materialize(dir, await e.studio(), e.version);
165
- studioDirOnce = dir;
166
- return dir;
167
- }
168
-
169
- let docsDirOnce: string | null = null;
170
-
171
- /** Materialize the embedded docs site tree to a temp dir for `dev --ui`. */
172
- export async function materializeDocsUi(): Promise<string | null> {
173
- if (docsDirOnce) return docsDirOnce;
174
- const e = embedded();
175
- if (!e.docs) return null;
176
- const dir = join(materializationRoot(e), 'docs-ui');
177
- materialize(dir, await e.docs(), e.version);
178
- docsDirOnce = dir;
159
+ const dir = join(materializationRoot(e), 'site-ui');
160
+ materialize(dir, await e.site(), e.version);
161
+ siteDirOnce = dir;
179
162
  return dir;
180
163
  }
@@ -0,0 +1,201 @@
1
+ import type { Server } from 'node:http';
2
+ import path from 'node:path';
3
+ import type { ViteDevServer } from 'vite';
4
+ import type { FunctionsRtdbProject } from '../functions-rtdb/project.js';
5
+ import {
6
+ createFunctionsDevelopmentRuntime,
7
+ createInProcessFunctionsPeerReadiness,
8
+ type FunctionsDevelopmentEvent,
9
+ type FunctionsDevelopmentResult,
10
+ type FunctionsDevelopmentRuntime,
11
+ } from '../functions-rtdb/development-runtime.js';
12
+ import type { BridgeMount } from './bridge-mount.js';
13
+
14
+ export interface ViteFunctionsDevelopmentOptions {
15
+ cwd: string;
16
+ project: FunctionsRtdbProject;
17
+ projectId: string;
18
+ instance?: string;
19
+ region?: string;
20
+ watch?: boolean;
21
+ host: string;
22
+ httpServer: Server;
23
+ watcher: ViteDevServer['watcher'];
24
+ logger: ViteDevServer['config']['logger'];
25
+ bridge: BridgeMount;
26
+ baseEnv: NodeJS.ProcessEnv;
27
+ registerUrl: string;
28
+ childModuleUrl?: string | URL;
29
+ /** Internal test seam for the host adapter; production uses the shared runtime. */
30
+ runtimeFactory?: typeof createFunctionsDevelopmentRuntime;
31
+ }
32
+
33
+ export interface ViteFunctionsDevelopmentAttachment {
34
+ close(): Promise<void>;
35
+ }
36
+
37
+ function reportEvent(
38
+ logger: ViteFunctionsDevelopmentOptions['logger'],
39
+ event: FunctionsDevelopmentEvent,
40
+ ): void {
41
+ if (event.type === 'output') {
42
+ const line = event.line.replace(/\n$/, '');
43
+ if (event.stream === 'stdout') logger.info(line);
44
+ else logger.warn(line);
45
+ return;
46
+ }
47
+ if (event.type === 'unexpected-exit') {
48
+ logger.error(` ✖ [pyric] Functions child exited unexpectedly (code ${event.code}).`);
49
+ return;
50
+ }
51
+ const childEvent = event.event;
52
+ if (childEvent.type === 'execution') {
53
+ const params = Object.entries(childEvent.params)
54
+ .map(([name, value]) => `${name}=${value}`)
55
+ .join(', ');
56
+ const suffix = params ? ` (${params})` : '';
57
+ if (childEvent.status === 'fulfilled') {
58
+ logger.info(` ✔ [pyric] function ${childEvent.exportName} ← /${childEvent.ref}${suffix}`);
59
+ } else {
60
+ logger.error(
61
+ ` ✖ [pyric] function ${childEvent.exportName} ← /${childEvent.ref}${suffix}: ${childEvent.error.message}`,
62
+ );
63
+ }
64
+ } else {
65
+ logger.error(
66
+ ` ✖ [pyric] functions delivery for ${childEvent.exportName}: ${childEvent.error.message}`,
67
+ );
68
+ }
69
+ }
70
+
71
+ function reportResult(
72
+ options: ViteFunctionsDevelopmentOptions,
73
+ result: FunctionsDevelopmentResult,
74
+ mode: 'initial' | 'reload',
75
+ serveUrl: string,
76
+ ): void {
77
+ const { logger, project, cwd } = options;
78
+ if (result.kind === 'no-peer') {
79
+ logger.warn(
80
+ mode === 'reload'
81
+ ? ` ✖ [pyric] functions not restarted — no sandbox peer connected. ` +
82
+ `Functions stay down until the next save with ${serveUrl} open.`
83
+ : ` ⚠ [pyric] functions not started — no browser tab connected after 30s. ` +
84
+ `Open ${serveUrl} and restart the dev server.`,
85
+ );
86
+ return;
87
+ }
88
+ if (result.kind === 'failed') {
89
+ logger.error(
90
+ mode === 'reload'
91
+ ? ` ✖ [pyric] functions failed to reload: ${result.error.message}\n` +
92
+ ` ✖ [pyric] functions are down until the next good save.`
93
+ : ` ✖ [pyric] functions failed to start: ${result.error.message}`,
94
+ );
95
+ return;
96
+ }
97
+ const ready = result.ready;
98
+ logger.info(
99
+ mode === 'reload'
100
+ ? ` ↻ [pyric] functions reloaded (${ready.triggerCount} trigger${ready.triggerCount === 1 ? '' : 's'})`
101
+ : ` ✔ [pyric] functions ${ready.triggerCount} onValueCreated ` +
102
+ `trigger${ready.triggerCount === 1 ? '' : 's'} from ${path.relative(cwd, project.entry)}`,
103
+ );
104
+ for (const unsupported of ready.unsupportedTriggers) {
105
+ logger.warn(
106
+ ` ⚠ [pyric] functions export ${unsupported.exportName} uses unsupported trigger ` +
107
+ `${unsupported.eventType}; it will not run.`,
108
+ );
109
+ }
110
+ }
111
+
112
+ /** Own the Vite-only adaptation around the host-neutral Functions runtime. */
113
+ export function attachViteFunctionsDevelopment(
114
+ options: ViteFunctionsDevelopmentOptions,
115
+ ): ViteFunctionsDevelopmentAttachment {
116
+ const {
117
+ httpServer,
118
+ watcher,
119
+ project,
120
+ bridge,
121
+ host,
122
+ } = options;
123
+ const runtimeFactory = options.runtimeFactory ?? createFunctionsDevelopmentRuntime;
124
+ let runtime: FunctionsDevelopmentRuntime | null = null;
125
+ let reloadDebounce: ReturnType<typeof setTimeout> | null = null;
126
+ let reportedReload: Promise<FunctionsDevelopmentResult> | null = null;
127
+ let closed = false;
128
+ let closePromise: Promise<void> | null = null;
129
+
130
+ const serveUrl = (): string | null => {
131
+ const address = httpServer.address();
132
+ const port = address && typeof address === 'object' ? address.port : 0;
133
+ return port > 0 ? `http://${host}:${port}` : null;
134
+ };
135
+
136
+ const onListening = (): void => {
137
+ const url = serveUrl();
138
+ if (!url || closed || runtime) return;
139
+ runtime = runtimeFactory({
140
+ sourceDir: project.sourceDir,
141
+ entry: project.entry,
142
+ baseEnv: options.baseEnv,
143
+ serveUrl: url,
144
+ registerUrl: options.registerUrl,
145
+ instance: options.instance ?? `${options.projectId}-default-rtdb`,
146
+ location: options.region ?? options.baseEnv.PYRIC_FUNCTIONS_RTDB_REGION ?? 'us-central1',
147
+ readiness: createInProcessFunctionsPeerReadiness(bridge.sandboxConnected),
148
+ onEvent: (event) => reportEvent(options.logger, event),
149
+ ...(options.childModuleUrl === undefined ? {} : { childModuleUrl: options.childModuleUrl }),
150
+ });
151
+ void runtime.start().then((result) => {
152
+ if (!closed) reportResult(options, result, 'initial', url);
153
+ });
154
+ };
155
+
156
+ const onFunctionsFsEvent = (file: string): void => {
157
+ const resolved = path.resolve(file);
158
+ const rel = path.relative(project.sourceDir, resolved);
159
+ if (rel === '' || rel.startsWith('..') || path.isAbsolute(rel)) return;
160
+ if (rel.split(path.sep).includes('node_modules')) return;
161
+ if (reloadDebounce) clearTimeout(reloadDebounce);
162
+ reloadDebounce = setTimeout(() => {
163
+ if (!runtime || closed) return;
164
+ const transition = runtime.reload();
165
+ if (reportedReload === transition) return;
166
+ reportedReload = transition;
167
+ void transition.then((result) => {
168
+ if (!closed) reportResult(options, result, 'reload', serveUrl() ?? `http://${host}:0`);
169
+ }).finally(() => {
170
+ if (reportedReload === transition) reportedReload = null;
171
+ });
172
+ }, 300);
173
+ };
174
+
175
+ if ((httpServer as unknown as { listening?: boolean }).listening) onListening();
176
+ else httpServer.once('listening', onListening);
177
+ if (options.watch !== false) {
178
+ watcher.add(project.sourceDir);
179
+ watcher.on('change', onFunctionsFsEvent);
180
+ watcher.on('add', onFunctionsFsEvent);
181
+ watcher.on('unlink', onFunctionsFsEvent);
182
+ }
183
+
184
+ return {
185
+ close(): Promise<void> {
186
+ if (closePromise) return closePromise;
187
+ closePromise = (async () => {
188
+ closed = true;
189
+ if (reloadDebounce) clearTimeout(reloadDebounce);
190
+ httpServer.removeListener('listening', onListening);
191
+ if (options.watch !== false) {
192
+ watcher.off('change', onFunctionsFsEvent);
193
+ watcher.off('add', onFunctionsFsEvent);
194
+ watcher.off('unlink', onFunctionsFsEvent);
195
+ }
196
+ await runtime?.close();
197
+ })();
198
+ return closePromise;
199
+ },
200
+ };
201
+ }
@@ -0,0 +1,66 @@
1
+ import type { Server as HttpServer } from 'node:http';
2
+ import type { ViteDevServer } from 'vite';
3
+ import type { FunctionsRtdbProject } from '../functions-rtdb/project.js';
4
+ import type {
5
+ BridgeHostAttachment,
6
+ BridgeHostOptions,
7
+ BridgeMount,
8
+ BridgeMountOptions,
9
+ } from './bridge-mount.js';
10
+
11
+ function resolveAllowedHosts(allowedHosts: true | string[] | undefined): true | string[] {
12
+ if (allowedHosts === true) return true;
13
+ if (Array.isArray(allowedHosts)) return allowedHosts;
14
+ return [];
15
+ }
16
+
17
+ export function createViteGenerationBridge(input: {
18
+ server: ViteDevServer;
19
+ projectDir: string;
20
+ options: Omit<BridgeMountOptions, 'upgradeGuard'> | null;
21
+ functionsProject: FunctionsRtdbProject | null;
22
+ functionsProjectId: string | null;
23
+ createBridge(options: BridgeMountOptions): BridgeMount;
24
+ }): BridgeMount | null {
25
+ const { server, options, functionsProject, functionsProjectId, createBridge } = input;
26
+ if (!options && !functionsProject) return null;
27
+ const serverOptions = server.config.server;
28
+ const project = options?.project ?? functionsProjectId ?? undefined;
29
+ const disableAuditLog = options?.disableAuditLog;
30
+ const boundHost = typeof serverOptions.host === 'string' ? serverOptions.host : 'localhost';
31
+ const allowedHosts = resolveAllowedHosts(serverOptions.allowedHosts);
32
+ const bridgeOptions: BridgeMountOptions = {
33
+ project,
34
+ disableAuditLog,
35
+ upgradeGuard: {
36
+ boundHost,
37
+ allowedHosts,
38
+ },
39
+ };
40
+ return createBridge(bridgeOptions);
41
+ }
42
+
43
+ export function attachViteGenerationBridge(input: {
44
+ server: ViteDevServer;
45
+ projectDir: string;
46
+ bridge: BridgeMount | null;
47
+ }): BridgeHostAttachment | null {
48
+ const { server, projectDir, bridge } = input;
49
+ if (!bridge || !server.httpServer) return null;
50
+ const httpServer = server.httpServer as unknown as HttpServer;
51
+ const host =
52
+ (typeof server.config.server.host === 'string' && server.config.server.host) || 'localhost';
53
+ const origin = (): { host: string; port: number } | null => {
54
+ const address = httpServer.address();
55
+ const port = address && typeof address === 'object' ? address.port : 0;
56
+ return port > 0 ? { host, port } : null;
57
+ };
58
+ const hostOptions: BridgeHostOptions = {
59
+ servers: [httpServer],
60
+ projectDir,
61
+ origin,
62
+ collision: server.config.logger,
63
+ closeOnServerClose: false,
64
+ };
65
+ return bridge.attachHost(hostOptions);
66
+ }
@@ -0,0 +1,78 @@
1
+ import { existsSync } from 'node:fs';
2
+ import type { Server as HttpServer } from 'node:http';
3
+ import path from 'node:path';
4
+ import type { ViteDevServer } from 'vite';
5
+ import type { FirebaseRc } from '../cli/firebase-json.js';
6
+ import type {
7
+ FunctionsRtdbProject,
8
+ } from '../functions-rtdb/project.js';
9
+ import type { BridgeMount } from './bridge-mount.js';
10
+ import type {
11
+ ViteFunctionsDevelopmentAttachment,
12
+ ViteFunctionsDevelopmentOptions,
13
+ } from './vite-functions-development.js';
14
+
15
+ export interface ResolvedViteGenerationFunctions {
16
+ options: { region?: string; instance?: string; watch?: boolean };
17
+ project: FunctionsRtdbProject | null;
18
+ projectId: string | null;
19
+ }
20
+
21
+ export async function resolveViteGenerationFunctions(input: {
22
+ projectDir: string;
23
+ options: false | { region?: string; instance?: string; watch?: boolean };
24
+ discover(projectDir: string): FunctionsRtdbProject | null;
25
+ readFirebaseRc(projectDir: string): Promise<FirebaseRc | null>;
26
+ }): Promise<ResolvedViteGenerationFunctions> {
27
+ const { projectDir, options, discover, readFirebaseRc } = input;
28
+ const project = options === false ? null : discover(projectDir);
29
+ let projectId: string | null = null;
30
+ if (project) {
31
+ projectId =
32
+ process.env.PYRIC_PROJECT ??
33
+ (await readFirebaseRc(projectDir))?.projects?.default ??
34
+ 'demo-project';
35
+ }
36
+ return {
37
+ options: typeof options === 'object' ? options : {},
38
+ project,
39
+ projectId,
40
+ };
41
+ }
42
+
43
+ export function attachViteGenerationFunctions(input: {
44
+ server: ViteDevServer;
45
+ projectDir: string;
46
+ cliRoot: string;
47
+ bridge: BridgeMount | null;
48
+ resolved: ResolvedViteGenerationFunctions;
49
+ registerModuleUrl(): string;
50
+ fileExists?: (path: string) => boolean;
51
+ attach(options: ViteFunctionsDevelopmentOptions): ViteFunctionsDevelopmentAttachment;
52
+ }): ViteFunctionsDevelopmentAttachment | null {
53
+ const { server, projectDir, cliRoot, bridge, resolved, registerModuleUrl, attach } = input;
54
+ if (!resolved.project || !resolved.projectId || !bridge || !server.httpServer) return null;
55
+ const builtChild = path.join(cliRoot, 'dist/functions-rtdb/child.js');
56
+ const fileExists = input.fileExists ?? existsSync;
57
+ const childModuleUrl = fileExists(builtChild) ? builtChild : undefined;
58
+ const host =
59
+ (typeof server.config.server.host === 'string' && server.config.server.host) || 'localhost';
60
+ const registerUrl = registerModuleUrl();
61
+ const attachmentOptions: ViteFunctionsDevelopmentOptions = {
62
+ cwd: projectDir,
63
+ project: resolved.project,
64
+ projectId: resolved.projectId,
65
+ instance: resolved.options.instance,
66
+ region: resolved.options.region,
67
+ watch: resolved.options.watch,
68
+ host,
69
+ httpServer: server.httpServer as unknown as HttpServer,
70
+ watcher: server.watcher,
71
+ logger: server.config.logger,
72
+ bridge,
73
+ baseEnv: process.env,
74
+ registerUrl,
75
+ childModuleUrl,
76
+ };
77
+ return attach(attachmentOptions);
78
+ }
@@ -0,0 +1,56 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { ViteDevServer } from 'vite';
3
+ import type { BridgeMount } from './bridge-mount.js';
4
+ import type { SandboxSession } from './sandbox-session.js';
5
+ import { isAllowedHost } from './server.js';
6
+
7
+ /** Attach one generation's guarded namespace handler to Vite's permanent Connect stack. */
8
+ export function attachViteGenerationMiddleware(input: {
9
+ server: ViteDevServer;
10
+ bridge: BridgeMount | null;
11
+ session: SandboxSession;
12
+ }): () => void {
13
+ const { server, bridge, session } = input;
14
+ const serverOptions = server.config.server;
15
+ let active = true;
16
+
17
+ server.middlewares.use(
18
+ '/__pyric',
19
+ (req: IncomingMessage & { originalUrl?: string }, res: ServerResponse, next: () => void) => {
20
+ if (!active) {
21
+ next();
22
+ return;
23
+ }
24
+ const allowed = serverOptions.allowedHosts === true || isAllowedHost(
25
+ req.headers.host,
26
+ typeof serverOptions.host === 'string' ? serverOptions.host : 'localhost',
27
+ Array.isArray(serverOptions.allowedHosts) ? serverOptions.allowedHosts : [],
28
+ );
29
+ if (!allowed) {
30
+ res.statusCode = 403;
31
+ res.end(`pyric: refused request for Host '${req.headers.host ?? ''}' (DNS-rebinding guard).`);
32
+ return;
33
+ }
34
+ const url = new URL(
35
+ req.originalUrl ?? req.url ?? '/',
36
+ `http://${req.headers.host ?? 'localhost'}`,
37
+ );
38
+ let bridgeResult: boolean | Promise<boolean> = false;
39
+ if (bridge) bridgeResult = bridge.handler(req, res, url);
40
+ Promise.resolve(bridgeResult)
41
+ .then((bridged) => {
42
+ if (bridged) return true;
43
+ return session.handle(req, res, url);
44
+ })
45
+ .then((handled) => {
46
+ if (!handled) next();
47
+ })
48
+ .catch((error: unknown) => {
49
+ if (!res.headersSent) res.statusCode = 500;
50
+ res.end(error instanceof Error ? error.message : String(error));
51
+ });
52
+ },
53
+ );
54
+
55
+ return () => { active = false; };
56
+ }
@@ -0,0 +1,37 @@
1
+ import path from 'node:path';
2
+ import type { ViteDevServer } from 'vite';
3
+ import type { SandboxSession } from './sandbox-session.js';
4
+
5
+ /** Adapt Vite's watcher to the session's last-good Firestore-rules reload operation. */
6
+ export function watchViteGenerationRules(input: {
7
+ server: ViteDevServer;
8
+ session: SandboxSession;
9
+ }): (() => void) | null {
10
+ const { server, session } = input;
11
+ const rulesFile = session.summary.rules.firestore.sourcePath;
12
+ if (!rulesFile) return null;
13
+
14
+ let debounce: ReturnType<typeof setTimeout> | null = null;
15
+ const onRulesChange = (file: string): void => {
16
+ if (path.resolve(file) !== path.resolve(rulesFile)) return;
17
+ if (debounce) clearTimeout(debounce);
18
+ debounce = setTimeout(() => {
19
+ void session.reloadFirestoreRules().then((result) => {
20
+ if (result.kind === 'reloaded') {
21
+ server.config.logger.info(` ↻ [pyric] rules reloaded (${result.rulesHash})`);
22
+ } else if (result.kind === 'rejected') {
23
+ server.config.logger.warn(
24
+ ` ⚠ [pyric] rules NOT reloaded (last-good stays live): ${result.error.message}`,
25
+ );
26
+ }
27
+ });
28
+ }, 150);
29
+ };
30
+
31
+ server.watcher.add(rulesFile);
32
+ server.watcher.on('change', onRulesChange);
33
+ return () => {
34
+ if (debounce) clearTimeout(debounce);
35
+ server.watcher.off('change', onRulesChange);
36
+ };
37
+ }
@@ -0,0 +1,119 @@
1
+ import { existsSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import type { Plugin as EsbuildPlugin } from 'esbuild';
4
+ import type { ResolvedConfig, UserConfig } from 'vite';
5
+ import {
6
+ SDK_MODULES,
7
+ defaultSdkEntries,
8
+ pyricPackageRoot,
9
+ NODE_BUILTIN_RE,
10
+ NODE_BUILTIN_SHIMS,
11
+ } from './bundler.js';
12
+
13
+ const FIREBASE_SPECIFIER = /^firebase\/([a-z-]+(?:\/[a-z-]+)*)$/;
14
+ const SERVED_FIREBASE_SUBPATHS = new Set(
15
+ SDK_MODULES.map((specifier) => specifier.slice('firebase/'.length)),
16
+ );
17
+ const NODE_SHIM_PREFIX = '\0pyric:node-shim:';
18
+
19
+ function entryKey(subpath: string): string {
20
+ return subpath.replaceAll('/', '-');
21
+ }
22
+
23
+ function packageRootOf(file: string): string {
24
+ let dir = path.dirname(file);
25
+ while (dir !== path.dirname(dir) && !existsSync(path.join(dir, 'package.json'))) {
26
+ dir = path.dirname(dir);
27
+ }
28
+ return dir;
29
+ }
30
+
31
+ export interface ViteModuleContext {
32
+ entries: ReturnType<typeof defaultSdkEntries>;
33
+ cliRoot: string;
34
+ }
35
+
36
+ export interface ViteModuleSwap {
37
+ config(): UserConfig;
38
+ configResolved(config: ResolvedConfig): void;
39
+ resolveId(source: string, importer: string | undefined): string | null;
40
+ load(id: string): string | null;
41
+ }
42
+
43
+ export function createViteModuleContext(): ViteModuleContext {
44
+ const entries = defaultSdkEntries();
45
+ return { entries, cliRoot: packageRootOf(entries.init) };
46
+ }
47
+
48
+ /** Own the Vite and optimizer forms of the Firebase-module swap. */
49
+ export function createViteModuleSwap(context: ViteModuleContext): ViteModuleSwap {
50
+ const { entries, cliRoot } = context;
51
+ const pyricRoot = pyricPackageRoot();
52
+
53
+ const isPyricImporter = (importer: string | undefined): boolean => {
54
+ if (!importer) return false;
55
+ const file = importer.split('?')[0];
56
+ return file === pyricRoot || file.startsWith(pyricRoot + path.sep);
57
+ };
58
+ const isOurCode = (importer: string | undefined): boolean => {
59
+ if (!importer) return false;
60
+ if (isPyricImporter(importer)) return true;
61
+ const file = importer.split('?')[0];
62
+ return file === cliRoot || file.startsWith(cliRoot + path.sep);
63
+ };
64
+ const shimFor = (specifier: string): string =>
65
+ NODE_BUILTIN_SHIMS[specifier.replace(/^node:/, '')]!;
66
+
67
+ const optimizerMirror: EsbuildPlugin = {
68
+ name: 'pyric-sandbox-optimizer',
69
+ setup(build) {
70
+ build.onResolve({ filter: FIREBASE_SPECIFIER }, (args) => {
71
+ const subpath = FIREBASE_SPECIFIER.exec(args.path)![1]!;
72
+ if (SERVED_FIREBASE_SUBPATHS.has(subpath)) {
73
+ return { path: entries[entryKey(subpath)]! };
74
+ }
75
+ return null;
76
+ });
77
+ build.onResolve({ filter: NODE_BUILTIN_RE }, (args) => {
78
+ if (!isOurCode(args.importer)) return null;
79
+ return { path: args.path.replace(/^node:/, ''), namespace: 'pyric-node-shim' };
80
+ });
81
+ build.onLoad({ filter: /.*/, namespace: 'pyric-node-shim' }, (args) => ({
82
+ contents: NODE_BUILTIN_SHIMS[args.path]!,
83
+ loader: 'js',
84
+ }));
85
+ },
86
+ };
87
+
88
+ return {
89
+ config() {
90
+ return {
91
+ optimizeDeps: {
92
+ exclude: [...SDK_MODULES],
93
+ include: ['js-md5', 'js-sha256'],
94
+ esbuildOptions: { plugins: [optimizerMirror] },
95
+ },
96
+ } as unknown as UserConfig;
97
+ },
98
+ configResolved(config) {
99
+ const allow = config.server?.fs?.allow;
100
+ if (!allow) return;
101
+ for (const dir of [pyricRoot, cliRoot]) {
102
+ if (!allow.includes(dir)) allow.push(dir);
103
+ }
104
+ },
105
+ resolveId(source, importer) {
106
+ const firebase = FIREBASE_SPECIFIER.exec(source);
107
+ if (firebase) {
108
+ const subpath = firebase[1]!;
109
+ return SERVED_FIREBASE_SUBPATHS.has(subpath) ? entries[entryKey(subpath)]! : null;
110
+ }
111
+ const node = NODE_BUILTIN_RE.exec(source);
112
+ return node && isOurCode(importer) ? NODE_SHIM_PREFIX + node[2]! : null;
113
+ },
114
+ load(id) {
115
+ if (!id.startsWith(NODE_SHIM_PREFIX)) return null;
116
+ return shimFor(id.slice(NODE_SHIM_PREFIX.length));
117
+ },
118
+ };
119
+ }