gemi 0.156.0 → 0.157.1

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 (207) hide show
  1. package/dist/ai/Agent.d.ts.map +1 -1
  2. package/dist/ai/ImageModel.d.ts +2 -0
  3. package/dist/ai/ImageModel.d.ts.map +1 -1
  4. package/dist/ai/eval/Eval.d.ts +333 -0
  5. package/dist/ai/eval/Eval.d.ts.map +1 -0
  6. package/dist/ai/eval/stats.d.ts +70 -0
  7. package/dist/ai/eval/stats.d.ts.map +1 -0
  8. package/dist/ai/generate.d.ts.map +1 -1
  9. package/dist/ai/index.d.ts +5 -0
  10. package/dist/ai/index.d.ts.map +1 -1
  11. package/dist/ai/index.js +27 -26
  12. package/dist/ai/index.js.map +6 -4
  13. package/dist/ai/usageMeter.d.ts +23 -0
  14. package/dist/ai/usageMeter.d.ts.map +1 -0
  15. package/dist/app/index.js +1 -1
  16. package/dist/bun/plugin.js +1 -1
  17. package/dist/bun/preload.js +1 -1
  18. package/dist/{chunk-rb7518zz.js → chunk-00z7s34q.js} +2 -2
  19. package/dist/{chunk-rb7518zz.js.map → chunk-00z7s34q.js.map} +1 -1
  20. package/dist/{chunk-2r2j2nvq.js → chunk-0v3bca8k.js} +3 -3
  21. package/dist/{chunk-2r2j2nvq.js.map → chunk-0v3bca8k.js.map} +1 -1
  22. package/dist/{chunk-4y74s15p.js → chunk-0vc2akg0.js} +1 -1
  23. package/dist/{chunk-877yc341.js → chunk-0yjm936b.js} +3 -3
  24. package/dist/{chunk-877yc341.js.map → chunk-0yjm936b.js.map} +1 -1
  25. package/dist/{chunk-a8n9ec43.js → chunk-159j20yr.js} +2 -2
  26. package/dist/{chunk-a8n9ec43.js.map → chunk-159j20yr.js.map} +1 -1
  27. package/dist/{chunk-3csz8pfk.js → chunk-1de3awrh.js} +3 -3
  28. package/dist/{chunk-3csz8pfk.js.map → chunk-1de3awrh.js.map} +1 -1
  29. package/dist/{chunk-3nf0nmpp.js → chunk-38kjpa6q.js} +1 -1
  30. package/dist/{chunk-afaff2se.js → chunk-3ndc8adc.js} +2 -2
  31. package/dist/{chunk-afaff2se.js.map → chunk-3ndc8adc.js.map} +1 -1
  32. package/dist/{chunk-z38m1nh5.js → chunk-3t4nw1n2.js} +2 -2
  33. package/dist/{chunk-z38m1nh5.js.map → chunk-3t4nw1n2.js.map} +1 -1
  34. package/dist/{chunk-rnd8s0n5.js → chunk-42646nt7.js} +2 -2
  35. package/dist/{chunk-rnd8s0n5.js.map → chunk-42646nt7.js.map} +1 -1
  36. package/dist/{chunk-9xyd5r54.js → chunk-4t2j3zcg.js} +2 -2
  37. package/dist/{chunk-9xyd5r54.js.map → chunk-4t2j3zcg.js.map} +1 -1
  38. package/dist/{chunk-hh5bs656.js → chunk-4vnrnbn3.js} +3 -3
  39. package/dist/{chunk-hh5bs656.js.map → chunk-4vnrnbn3.js.map} +1 -1
  40. package/dist/{chunk-m5f6ksqe.js → chunk-517fjfme.js} +3 -3
  41. package/dist/{chunk-m5f6ksqe.js.map → chunk-517fjfme.js.map} +1 -1
  42. package/dist/{chunk-wckbrbzx.js → chunk-56a3vnrj.js} +2 -2
  43. package/dist/{chunk-wckbrbzx.js.map → chunk-56a3vnrj.js.map} +1 -1
  44. package/dist/{chunk-ja1289jh.js → chunk-5zxxd7qp.js} +1 -1
  45. package/dist/{chunk-4ptz62pz.js → chunk-69c2s43a.js} +2 -2
  46. package/dist/{chunk-4ptz62pz.js.map → chunk-69c2s43a.js.map} +1 -1
  47. package/dist/chunk-6np1r9gk.js +5 -0
  48. package/dist/{chunk-49s8wwp2.js.map → chunk-6np1r9gk.js.map} +1 -1
  49. package/dist/{chunk-bstn00nx.js → chunk-72f6pbap.js} +2 -2
  50. package/dist/{chunk-bstn00nx.js.map → chunk-72f6pbap.js.map} +1 -1
  51. package/dist/{chunk-0mgswwbj.js → chunk-7426gfgw.js} +2 -2
  52. package/dist/{chunk-0mgswwbj.js.map → chunk-7426gfgw.js.map} +1 -1
  53. package/dist/{chunk-baj76zja.js → chunk-78wht1ph.js} +2 -2
  54. package/dist/{chunk-baj76zja.js.map → chunk-78wht1ph.js.map} +1 -1
  55. package/dist/{chunk-mzkzgp2j.js → chunk-7yww9aq7.js} +2 -2
  56. package/dist/{chunk-mzkzgp2j.js.map → chunk-7yww9aq7.js.map} +1 -1
  57. package/dist/{chunk-djyx6eyh.js → chunk-7zy6nq9e.js} +2 -2
  58. package/dist/{chunk-djyx6eyh.js.map → chunk-7zy6nq9e.js.map} +1 -1
  59. package/dist/{chunk-w6jff43c.js → chunk-8eyxj78g.js} +3 -3
  60. package/dist/{chunk-w6jff43c.js.map → chunk-8eyxj78g.js.map} +1 -1
  61. package/dist/{chunk-twrf6d08.js → chunk-986eh0n3.js} +2 -2
  62. package/dist/{chunk-twrf6d08.js.map → chunk-986eh0n3.js.map} +1 -1
  63. package/dist/{chunk-mv1rs9he.js → chunk-9gt9qdge.js} +1 -1
  64. package/dist/{chunk-v9z4x5j2.js → chunk-9kyfaeey.js} +2 -2
  65. package/dist/{chunk-v9z4x5j2.js.map → chunk-9kyfaeey.js.map} +1 -1
  66. package/dist/{chunk-198ywkt2.js → chunk-9md6acv2.js} +1 -1
  67. package/dist/{chunk-6tkkvaqg.js → chunk-ah2jy1vx.js} +2 -2
  68. package/dist/{chunk-6tkkvaqg.js.map → chunk-ah2jy1vx.js.map} +1 -1
  69. package/dist/{chunk-xv58jnpb.js → chunk-aq5zx3vg.js} +2 -2
  70. package/dist/{chunk-xv58jnpb.js.map → chunk-aq5zx3vg.js.map} +1 -1
  71. package/dist/{chunk-tdvjrftz.js → chunk-cmt3jw6j.js} +2 -2
  72. package/dist/{chunk-tdvjrftz.js.map → chunk-cmt3jw6j.js.map} +1 -1
  73. package/dist/{chunk-v1460k0a.js → chunk-ctrae98c.js} +2 -2
  74. package/dist/{chunk-v1460k0a.js.map → chunk-ctrae98c.js.map} +1 -1
  75. package/dist/{chunk-0hqg6ema.js → chunk-dce3w52r.js} +2 -2
  76. package/dist/{chunk-0hqg6ema.js.map → chunk-dce3w52r.js.map} +1 -1
  77. package/dist/{chunk-403b2rfp.js → chunk-dhq7zv0t.js} +2 -2
  78. package/dist/{chunk-403b2rfp.js.map → chunk-dhq7zv0t.js.map} +1 -1
  79. package/dist/{chunk-rq8b8pr5.js → chunk-exb35whf.js} +2 -2
  80. package/dist/{chunk-rq8b8pr5.js.map → chunk-exb35whf.js.map} +1 -1
  81. package/dist/{chunk-73rzf7ys.js → chunk-fe12f946.js} +2 -2
  82. package/dist/{chunk-73rzf7ys.js.map → chunk-fe12f946.js.map} +1 -1
  83. package/dist/{chunk-nh01ncyy.js → chunk-g5d62d1n.js} +2 -2
  84. package/dist/{chunk-nh01ncyy.js.map → chunk-g5d62d1n.js.map} +1 -1
  85. package/dist/{chunk-ydkv9e8w.js → chunk-h3gcxf2k.js} +3 -3
  86. package/dist/{chunk-ydkv9e8w.js.map → chunk-h3gcxf2k.js.map} +1 -1
  87. package/dist/{chunk-2t61pc8v.js → chunk-jrv31jp9.js} +2 -2
  88. package/dist/{chunk-2t61pc8v.js.map → chunk-jrv31jp9.js.map} +1 -1
  89. package/dist/{chunk-dewn1kmd.js → chunk-k1aw97dm.js} +2 -2
  90. package/dist/{chunk-dewn1kmd.js.map → chunk-k1aw97dm.js.map} +1 -1
  91. package/dist/{chunk-313593t3.js → chunk-kbdt84xg.js} +2 -2
  92. package/dist/{chunk-313593t3.js.map → chunk-kbdt84xg.js.map} +1 -1
  93. package/dist/{chunk-vfwpbveq.js → chunk-kwc68y45.js} +2 -2
  94. package/dist/{chunk-vfwpbveq.js.map → chunk-kwc68y45.js.map} +1 -1
  95. package/dist/{chunk-86zhngpg.js → chunk-n95dppzm.js} +2 -2
  96. package/dist/{chunk-86zhngpg.js.map → chunk-n95dppzm.js.map} +1 -1
  97. package/dist/{chunk-apga49vp.js → chunk-nvhbkqmd.js} +2 -2
  98. package/dist/{chunk-apga49vp.js.map → chunk-nvhbkqmd.js.map} +1 -1
  99. package/dist/{chunk-qned028z.js → chunk-p2c72zx3.js} +2 -2
  100. package/dist/{chunk-qned028z.js.map → chunk-p2c72zx3.js.map} +1 -1
  101. package/dist/{chunk-0t531zdt.js → chunk-p83cjehh.js} +2 -2
  102. package/dist/{chunk-0t531zdt.js.map → chunk-p83cjehh.js.map} +1 -1
  103. package/dist/{chunk-wf4kywta.js → chunk-pgdxqrjv.js} +3 -3
  104. package/dist/{chunk-wf4kywta.js.map → chunk-pgdxqrjv.js.map} +1 -1
  105. package/dist/{chunk-f4hx69cr.js → chunk-pw5h5935.js} +2 -2
  106. package/dist/{chunk-f4hx69cr.js.map → chunk-pw5h5935.js.map} +1 -1
  107. package/dist/{chunk-4d4td4k9.js → chunk-px3ctjxh.js} +2 -2
  108. package/dist/{chunk-4d4td4k9.js.map → chunk-px3ctjxh.js.map} +1 -1
  109. package/dist/{chunk-5gq41j99.js → chunk-q3e1bqrs.js} +3 -3
  110. package/dist/{chunk-5gq41j99.js.map → chunk-q3e1bqrs.js.map} +1 -1
  111. package/dist/{chunk-c94a3qsx.js → chunk-q7k2hc45.js} +2 -2
  112. package/dist/{chunk-c94a3qsx.js.map → chunk-q7k2hc45.js.map} +1 -1
  113. package/dist/{chunk-41bvpent.js → chunk-qbvm5q1g.js} +1 -1
  114. package/dist/{chunk-7j8x62yb.js → chunk-qvngsa1c.js} +2 -2
  115. package/dist/{chunk-7j8x62yb.js.map → chunk-qvngsa1c.js.map} +1 -1
  116. package/dist/{chunk-g8sh9btf.js → chunk-r5y2khw4.js} +2 -2
  117. package/dist/{chunk-g8sh9btf.js.map → chunk-r5y2khw4.js.map} +1 -1
  118. package/dist/{chunk-1a11x8ww.js → chunk-rrz2ry81.js} +2 -2
  119. package/dist/{chunk-1a11x8ww.js.map → chunk-rrz2ry81.js.map} +1 -1
  120. package/dist/{chunk-e9z8p2fy.js → chunk-rtv4ax8z.js} +2 -2
  121. package/dist/{chunk-e9z8p2fy.js.map → chunk-rtv4ax8z.js.map} +1 -1
  122. package/dist/{chunk-gmsst3fx.js → chunk-set6qmjw.js} +2 -2
  123. package/dist/{chunk-gmsst3fx.js.map → chunk-set6qmjw.js.map} +1 -1
  124. package/dist/{chunk-sbzqxtqg.js → chunk-ss3yn4g2.js} +3 -3
  125. package/dist/{chunk-sbzqxtqg.js.map → chunk-ss3yn4g2.js.map} +1 -1
  126. package/dist/{chunk-fe9fvtvt.js → chunk-t66ex43f.js} +4 -4
  127. package/dist/{chunk-fe9fvtvt.js.map → chunk-t66ex43f.js.map} +1 -1
  128. package/dist/{chunk-rv751mxq.js → chunk-t7yt8egz.js} +2 -2
  129. package/dist/{chunk-rv751mxq.js.map → chunk-t7yt8egz.js.map} +1 -1
  130. package/dist/{chunk-rnegd7ya.js → chunk-tr8se94g.js} +3 -3
  131. package/dist/{chunk-rnegd7ya.js.map → chunk-tr8se94g.js.map} +1 -1
  132. package/dist/{chunk-1fyn63ka.js → chunk-tzheb6ak.js} +3 -3
  133. package/dist/{chunk-1fyn63ka.js.map → chunk-tzheb6ak.js.map} +1 -1
  134. package/dist/{chunk-h0kyymhv.js → chunk-v10xzpqs.js} +2 -2
  135. package/dist/{chunk-h0kyymhv.js.map → chunk-v10xzpqs.js.map} +1 -1
  136. package/dist/{chunk-30gw44g9.js → chunk-vp6t1gmt.js} +2 -2
  137. package/dist/{chunk-30gw44g9.js.map → chunk-vp6t1gmt.js.map} +1 -1
  138. package/dist/{chunk-2b3hh9xw.js → chunk-wbv6218d.js} +3 -3
  139. package/dist/{chunk-2b3hh9xw.js.map → chunk-wbv6218d.js.map} +1 -1
  140. package/dist/{chunk-mp3ecfnh.js → chunk-wg0ttent.js} +2 -2
  141. package/dist/{chunk-mp3ecfnh.js.map → chunk-wg0ttent.js.map} +1 -1
  142. package/dist/{chunk-7jnawtcm.js → chunk-wnjvfmqc.js} +2 -2
  143. package/dist/{chunk-7jnawtcm.js.map → chunk-wnjvfmqc.js.map} +1 -1
  144. package/dist/{chunk-nhhnkv0e.js → chunk-x82f3q6a.js} +4 -4
  145. package/dist/{chunk-nhhnkv0e.js.map → chunk-x82f3q6a.js.map} +1 -1
  146. package/dist/{chunk-mr3szvr3.js → chunk-xff7tkde.js} +2 -2
  147. package/dist/{chunk-mr3szvr3.js.map → chunk-xff7tkde.js.map} +1 -1
  148. package/dist/{chunk-y959p390.js → chunk-xp5axyb5.js} +15 -15
  149. package/dist/chunk-xp5axyb5.js.map +28 -0
  150. package/dist/{chunk-2x6cv37t.js → chunk-xtqd9vpp.js} +2 -2
  151. package/dist/{chunk-2x6cv37t.js.map → chunk-xtqd9vpp.js.map} +1 -1
  152. package/dist/{chunk-cee5gq7t.js → chunk-xyyq577r.js} +2 -2
  153. package/dist/{chunk-cee5gq7t.js.map → chunk-xyyq577r.js.map} +1 -1
  154. package/dist/{chunk-eqv7yxk7.js → chunk-ycn7w2e9.js} +2 -2
  155. package/dist/{chunk-eqv7yxk7.js.map → chunk-ycn7w2e9.js.map} +1 -1
  156. package/dist/{chunk-0fjn202c.js → chunk-yewj83ez.js} +3 -3
  157. package/dist/{chunk-0fjn202c.js.map → chunk-yewj83ez.js.map} +1 -1
  158. package/dist/{chunk-2ery6a75.js → chunk-yzsyg1f7.js} +3 -3
  159. package/dist/{chunk-2ery6a75.js.map → chunk-yzsyg1f7.js.map} +1 -1
  160. package/dist/{chunk-jgpbr2k1.js → chunk-z7224rhm.js} +2 -2
  161. package/dist/{chunk-jgpbr2k1.js.map → chunk-z7224rhm.js.map} +1 -1
  162. package/dist/{chunk-attr793y.js → chunk-zcg6m7gf.js} +2 -2
  163. package/dist/{chunk-attr793y.js.map → chunk-zcg6m7gf.js.map} +1 -1
  164. package/dist/{chunk-yhgt9dxj.js → chunk-zfbqgzwa.js} +2 -2
  165. package/dist/{chunk-yhgt9dxj.js.map → chunk-zfbqgzwa.js.map} +1 -1
  166. package/dist/config/index.js +1 -1
  167. package/dist/console/run.js +2 -2
  168. package/dist/console/run.js.map +1 -1
  169. package/dist/container/index.js +2 -2
  170. package/dist/container/index.js.map +1 -1
  171. package/dist/database/index.js +2 -2
  172. package/dist/database/index.js.map +1 -1
  173. package/dist/email/index.js +2 -2
  174. package/dist/email/index.js.map +1 -1
  175. package/dist/facades/index.js +2 -2
  176. package/dist/facades/index.js.map +1 -1
  177. package/dist/foundation/index.js +2 -2
  178. package/dist/foundation/index.js.map +1 -1
  179. package/dist/http/index.js +2 -2
  180. package/dist/http/index.js.map +1 -1
  181. package/dist/i18n/dictionaryRuntime.js +2 -2
  182. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  183. package/dist/i18n/index.js +2 -2
  184. package/dist/i18n/index.js.map +1 -1
  185. package/dist/kernel/index.js +2 -2
  186. package/dist/kernel/index.js.map +1 -1
  187. package/dist/orm/index.js +2 -2
  188. package/dist/orm/index.js.map +1 -1
  189. package/dist/server/index.js +2 -2
  190. package/dist/server/index.js.map +1 -1
  191. package/dist/services/index.js +2 -2
  192. package/dist/services/index.js.map +1 -1
  193. package/dist/services/queue/work.js +2 -2
  194. package/dist/services/queue/work.js.map +1 -1
  195. package/dist/stats/route-table.js +1 -1
  196. package/dist/support/index.js +2 -2
  197. package/dist/support/index.js.map +1 -1
  198. package/dist/vitest/index.js +1 -1
  199. package/package.json +1 -1
  200. package/dist/chunk-49s8wwp2.js +0 -5
  201. package/dist/chunk-y959p390.js.map +0 -27
  202. /package/dist/{chunk-4y74s15p.js.map → chunk-0vc2akg0.js.map} +0 -0
  203. /package/dist/{chunk-3nf0nmpp.js.map → chunk-38kjpa6q.js.map} +0 -0
  204. /package/dist/{chunk-ja1289jh.js.map → chunk-5zxxd7qp.js.map} +0 -0
  205. /package/dist/{chunk-mv1rs9he.js.map → chunk-9gt9qdge.js.map} +0 -0
  206. /package/dist/{chunk-198ywkt2.js.map → chunk-9md6acv2.js.map} +0 -0
  207. /package/dist/{chunk-41bvpent.js.map → chunk-qbvm5q1g.js.map} +0 -0
@@ -7,6 +7,6 @@
7
7
  "import { encode } from '@jridgewell/sourcemap-codec';\n\nclass BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}\n\nclass Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t{\n\t\t\tthis.previous = null;\n\t\t\tthis.next = null;\n\t\t}\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\treset() {\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\t\tif (this.edited) {\n\t\t\tthis.content = this.original;\n\t\t\tthis.storeName = false;\n\t\t\tthis.edited = false;\n\t\t}\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// after split we should save the edit content record into the correct chunk\n\t\t\t// to make sure sourcemap correct\n\t\t\t// For example:\n\t\t\t// ' test'.trim()\n\t\t\t// split -> ' ' + 'test'\n\t\t\t// ✔️ edit -> '' + 'test'\n\t\t\t// ✖️ edit -> 'test' + ''\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t\tif (this.edited) {\n\t\t\t\t\t// save the change, if it has been edited\n\t\t\t\t\tthis.edit(trimmed, this.storeName, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tconst newChunk = this.split(this.end - trimmed.length);\n\t\t\t\tif (this.edited) {\n\t\t\t\t\t// save the change, if it has been edited\n\t\t\t\t\tnewChunk.edit(trimmed, this.storeName, true);\n\t\t\t\t}\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n\nfunction getBtoa() {\n\tif (typeof globalThis !== 'undefined' && typeof globalThis.btoa === 'function') {\n\t\treturn (str) => globalThis.btoa(unescape(encodeURIComponent(str)));\n\t} else if (typeof Buffer === 'function') {\n\t\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\n\t} else {\n\t\treturn () => {\n\t\t\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n\t\t};\n\t}\n}\n\nconst btoa = /*#__PURE__*/ getBtoa();\n\nclass SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t\tif (typeof properties.x_google_ignoreList !== 'undefined') {\n\t\t\tthis.x_google_ignoreList = properties.x_google_ignoreList;\n\t\t}\n\t\tif (typeof properties.debugId !== 'undefined') {\n\t\t\tthis.debugId = properties.debugId;\n\t\t}\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n\nfunction guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n\nfunction getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n\nconst toString = Object.prototype.toString;\n\nfunction isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n\nfunction getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n\nconst wordRegex = /\\w/;\n\nclass Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst contentLengthMinusOne = content.length - 1;\n\t\t\tlet contentLineEnd = content.indexOf('\\n', 0);\n\t\t\tlet previousContentLineEnd = -1;\n\t\t\t// Loop through each line in the content and add a segment, but stop if the last line is empty,\n\t\t\t// else code afterwards would fill one line too many\n\t\t\twhile (contentLineEnd >= 0 && contentLengthMinusOne > contentLineEnd) {\n\t\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\t\tif (nameIndex >= 0) {\n\t\t\t\t\tsegment.push(nameIndex);\n\t\t\t\t}\n\t\t\t\tthis.rawSegments.push(segment);\n\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\n\t\t\t\tpreviousContentLineEnd = contentLineEnd;\n\t\t\t\tcontentLineEnd = content.indexOf('\\n', contentLineEnd + 1);\n\t\t\t}\n\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\n\t\t\tthis.advance(content.slice(previousContentLineEnd + 1));\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t\tthis.advance(content);\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\t\t// when iterating each char, check if it's in a word boundary\n\t\tlet charInHiresBoundary = false;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t\tcharInHiresBoundary = false;\n\t\t\t} else {\n\t\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\n\t\t\t\t\tif (this.hires === 'boundary') {\n\t\t\t\t\t\t// in hires \"boundary\", group segments per word boundary than per char\n\t\t\t\t\t\tif (wordRegex.test(original[originalCharIndex])) {\n\t\t\t\t\t\t\t// for first char in the boundary found, start the boundary by pushing a segment\n\t\t\t\t\t\t\tif (!charInHiresBoundary) {\n\t\t\t\t\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t\t\t\t\t\tcharInHiresBoundary = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// for non-word char, end the boundary by pushing a segment\n\t\t\t\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t\t\t\t\tcharInHiresBoundary = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false,\n};\n\nclass MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: undefined },\n\t\t\tignoreList: { writable: true, value: options.ignoreList },\n\t\t\toffset: { writable: true, value: options.offset || 0 },\n\t\t});\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename, offset: this.offset });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\tif (this.outro) {\n\t\t\tmappings.advance(this.outro);\n\t\t}\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : undefined,\n\t\t\tsources: [\n\t\t\t\toptions.source ? getRelativePath(options.file || '', options.source) : options.file || '',\n\t\t\t],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : undefined,\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t\tx_google_ignoreList: this.ignoreList ? [sourceIndex] : undefined,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\t_ensureindentStr() {\n\t\tif (this.indentStr === undefined) {\n\t\t\tthis.indentStr = guessIndent(this.original);\n\t\t}\n\t}\n\n\t_getRawIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr;\n\t}\n\n\tgetIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tif (indentStr === undefined) {\n\t\t\tthis._ensureindentStr();\n\t\t\tindentStr = this.indentStr || '\\t';\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = (match) => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error(\n\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)',\n\t\t);\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead',\n\t\t\t);\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead',\n\t\t\t);\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\t\tindex = index + this.offset;\n\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\toptions = options || {};\n\t\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\n\t}\n\n\tupdate(start, end, content, options) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead',\n\t\t\t);\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string',\n\t\t\t\t);\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst overwrite = options !== undefined ? options.overwrite : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tObject.defineProperty(this.storedNames, original, {\n\t\t\t\twritable: true,\n\t\t\t\tvalue: true,\n\t\t\t\tenumerable: true,\n\t\t\t});\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tlet chunk = first;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t}\n\t\t\t\tchunk = chunk.next;\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, !overwrite);\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tindex = index + this.offset;\n\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\t\treturn this;\n\t}\n\n\treset(start, end) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.reset();\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t} while ((chunk = chunk.previous));\n\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while ((chunk = chunk.previous));\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length - this.offset) {\n\t\tstart = start + this.offset;\n\t\tend = end + this.offset;\n\n\t\tif (this.original.length !== 0) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\t\t}\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tlet previousChunk = chunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\n\t\t\t// Prevent infinite loop (e.g. via empty chunks, where start === end)\n\t\t\tif (chunk === previousChunk) return;\n\n\t\t\tpreviousChunk = chunk;\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`,\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (\n\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t)\n\t\t\t\treturn false;\n\t\t} while ((chunk = chunk.next));\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while ((chunk = chunk.next));\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n\n\thasChanged() {\n\t\treturn this.original !== this.toString();\n\t}\n\n\t_replaceRegexp(searchValue, replacement) {\n\t\tfunction getReplacement(match, str) {\n\t\t\tif (typeof replacement === 'string') {\n\t\t\t\treturn replacement.replace(/\\$(\\$|&|\\d+)/g, (_, i) => {\n\t\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\n\t\t\t\t\tif (i === '$') return '$';\n\t\t\t\t\tif (i === '&') return match[0];\n\t\t\t\t\tconst num = +i;\n\t\t\t\t\tif (num < match.length) return match[+i];\n\t\t\t\t\treturn `$${i}`;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn replacement(...match, match.index, str, match.groups);\n\t\t\t}\n\t\t}\n\t\tfunction matchAll(re, str) {\n\t\t\tlet match;\n\t\t\tconst matches = [];\n\t\t\twhile ((match = re.exec(str))) {\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t\treturn matches;\n\t\t}\n\t\tif (searchValue.global) {\n\t\t\tconst matches = matchAll(searchValue, this.original);\n\t\t\tmatches.forEach((match) => {\n\t\t\t\tif (match.index != null) {\n\t\t\t\t\tconst replacement = getReplacement(match, this.original);\n\t\t\t\t\tif (replacement !== match[0]) {\n\t\t\t\t\t\tthis.overwrite(match.index, match.index + match[0].length, replacement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tconst match = this.original.match(searchValue);\n\t\t\tif (match && match.index != null) {\n\t\t\t\tconst replacement = getReplacement(match, this.original);\n\t\t\t\tif (replacement !== match[0]) {\n\t\t\t\t\tthis.overwrite(match.index, match.index + match[0].length, replacement);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t_replaceString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst index = original.indexOf(string);\n\n\t\tif (index !== -1) {\n\t\t\tif (typeof replacement === 'function') {\n\t\t\t\treplacement = replacement(string, index, original);\n\t\t\t}\n\t\t\tif (string !== replacement) {\n\t\t\t\tthis.overwrite(index, index + string.length, replacement);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplace(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceString(searchValue, replacement);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n\n\t_replaceAllString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst stringLength = string.length;\n\t\tfor (\n\t\t\tlet index = original.indexOf(string);\n\t\t\tindex !== -1;\n\t\t\tindex = original.indexOf(string, index + stringLength)\n\t\t) {\n\t\t\tconst previous = original.slice(index, index + stringLength);\n\t\t\tlet _replacement = replacement;\n\t\t\tif (typeof replacement === 'function') {\n\t\t\t\t_replacement = replacement(previous, index, original);\n\t\t\t}\n\t\t\tif (previous !== _replacement) this.overwrite(index, index + stringLength, _replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplaceAll(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceAllString(searchValue, replacement);\n\t\t}\n\n\t\tif (!searchValue.global) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'MagicString.prototype.replaceAll called with a non-global RegExp argument',\n\t\t\t);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n}\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nclass Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error(\n\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`',\n\t\t\t);\n\t\t}\n\n\t\t['filename', 'ignoreList', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || '',\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator,\n\t\t});\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator,\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tlet x_google_ignoreList = undefined;\n\t\tthis.sources.forEach((source) => {\n\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\n\t\t\tif (source.ignoreList && sourceIndex !== -1) {\n\t\t\t\tif (x_google_ignoreList === undefined) {\n\t\t\t\t\tx_google_ignoreList = [];\n\t\t\t\t}\n\t\t\t\tx_google_ignoreList.push(sourceIndex);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : undefined,\n\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t\tx_google_ignoreList,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tconst indentStr = source.content._getRawIndentString();\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator ) //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty() {\n\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce(\n\t\t\t(length, source) => length + source.content.length(),\n\t\t\tthis.intro.length,\n\t\t);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n\nexport { Bundle, SourceMap, MagicString as default };\n//# sourceMappingURL=magic-string.es.mjs.map\n"
8
8
  ],
9
9
  "mappings": "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",
10
- "debugId": "34EEEEB80AB362A764756E2164756E21",
10
+ "debugId": "9C15EC80F1CD116B64756E2164756E21",
11
11
  "names": []
12
12
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{oa as w,pa as P,qa as R,ra as b}from"./chunk-a22h5cby.js";import{ua as K,va as _,wa as L,xa as A}from"./chunk-epvpmakp.js";import{ya as I}from"./chunk-r3v2cnrj.js";import{Aa as E,za as T}from"./chunk-twrf6d08.js";var i=["gemi","gemi/client","gemi/http","gemi/app","gemi/facades","gemi/email","gemi/kernel","gemi/services","gemi/i18n","gemi/dictionary"];function O(q){return q==="gemi"||q.startsWith("gemi/")}import{parseAstAsync as h}from"vite";var V="virtual:gemi-dict/",x="\x00virtual:gemi-dict/",f=new Set(["gemi/dictionary","gemi/client","gemi/i18n"]),y="gemi/dictionary";function B(){let q=new Map;return{name:"gemi-plugin-dictionary",enforce:"post",resolveId(H){if(H.startsWith(V))return`\x00${H}`;return null},async load(H){if(!H.startsWith(x))return null;let Q=H.slice(x.length),W=Q.lastIndexOf("/"),J=Q.slice(0,W),Y=Q.slice(W+1),$=q.get(J);if(!$){let M=g(J);if(M){try{await this.load({id:M})}catch{}$=q.get(J)}}if(!$)return this.error(`No dictionary registered for "${J}". If this persists, restart the dev server.`),null;let G=_($.translations,Y,$.locales);return`export default ${JSON.stringify(G)};
2
+ import{oa as w,pa as P,qa as R,ra as b}from"./chunk-a22h5cby.js";import{ua as K,va as _,wa as L,xa as A}from"./chunk-epvpmakp.js";import{ya as I}from"./chunk-r3v2cnrj.js";import{Aa as E,za as T}from"./chunk-986eh0n3.js";var i=["gemi","gemi/client","gemi/http","gemi/app","gemi/facades","gemi/email","gemi/kernel","gemi/services","gemi/i18n","gemi/dictionary"];function O(q){return q==="gemi"||q.startsWith("gemi/")}import{parseAstAsync as h}from"vite";var V="virtual:gemi-dict/",x="\x00virtual:gemi-dict/",f=new Set(["gemi/dictionary","gemi/client","gemi/i18n"]),y="gemi/dictionary";function B(){let q=new Map;return{name:"gemi-plugin-dictionary",enforce:"post",resolveId(H){if(H.startsWith(V))return`\x00${H}`;return null},async load(H){if(!H.startsWith(x))return null;let Q=H.slice(x.length),W=Q.lastIndexOf("/"),J=Q.slice(0,W),Y=Q.slice(W+1),$=q.get(J);if(!$){let M=g(J);if(M){try{await this.load({id:M})}catch{}$=q.get(J)}}if(!$)return this.error(`No dictionary registered for "${J}". If this persists, restart the dev server.`),null;let G=_($.translations,Y,$.locales);return`export default ${JSON.stringify(G)};
3
3
  `},async transform(H,Q){if(!H.includes("defineDictionary"))return null;if(Q.startsWith("\x00")||Q.includes("/node_modules/"))return null;let W=await h(H),J=new Set;for(let Z of W.body){if(Z.type!=="ImportDeclaration")continue;if(!f.has(Z.source?.value))continue;for(let z of Z.specifiers??[])if(z.type==="ImportSpecifier"&&z.imported?.name==="defineDictionary")J.add(z.local.name)}let Y=[],$=0;if(X(W,(Z)=>{if(Z.type!=="CallExpression")return;let z=Z.callee;if(z?.type==="Identifier"&&J.has(z.name)){Y.push(Z);return}if((z?.type==="Identifier"?z.name:z?.type==="MemberExpression"&&!z.computed?z.property?.name:void 0)==="defineDictionary")$++}),$>0&&p(W,"defineDictionary"))$=0;if($>0)this.warn(`${Q}: ${$} defineDictionary() call(s) could not be traced to an import of "gemi/dictionary", "gemi/client" or "gemi/i18n", so their locales were left inline and will all ship to the browser. Import defineDictionary directly by name rather than through a namespace import or a local re-export.`);if(Y.length===0)return null;let G=new T(H),M=!1;for(let Z of Y){if(Z.arguments?.length<1||Z.arguments?.length>2)this.error({message:"defineDictionary() takes an object literal and an optional options object.",pos:Z.start});let z=m(Z.arguments[0],(j)=>this.error({message:j,pos:Z.arguments[0]?.start??Z.start})),F=v(Z.arguments[1],(j)=>this.error({message:j,pos:Z.arguments[1]?.start??Z.start})),D=A(z),C=`${Buffer.from(Q).toString("base64url")}/${D}`,N=K(z,F);if(N.length===0)this.error({message:'defineDictionary() declares no locales \u2014 every key needs at least one "<locale>": "<string>" entry.',pos:Z.start});if(!F){let j=L(z);if(j)this.error({message:`defineDictionary() cannot infer a source language. Key "${j.againstKey}" lists "${j.againstFirst}" first but "${j.key}" lists "${j.first}" first, so the locale every key falls back to depends on the order `+"they are written in \u2014 moving one key would change what language a reader sees. "+'Pass { sourceLocale: "<locale>" } as the second argument to pin it.',pos:Z.start})}q.set(C,{id:D,locales:N,translations:z});let S=N.map((j)=>`${JSON.stringify(j)}:()=>import(${JSON.stringify(`${V}${C}/${j}`)})`).join(",");G.overwrite(Z.start,Z.end,`__gemi_dict__(${JSON.stringify(D)},{${S}})`),M=!0}if(!M)return null;return G.append(`
4
4
  import { __gemi_dict__ } from ${JSON.stringify(y)};
5
5
  `),{code:G.toString(),map:G.generateMap({hires:!0})}}}}function g(q){let H=q.indexOf("/");if(H===-1)return null;try{return Buffer.from(q.slice(0,H),"base64url").toString("utf8")}catch{return null}}function m(q,H){if(q?.type!=="ObjectExpression")H("defineDictionary() needs an inline object literal \u2014 it is read at build time, so a variable or spread cannot be resolved.");let Q={};for(let W of q.properties){let J=U(W);if(J===null)H("defineDictionary() keys must be plain string keys \u2014 computed keys and spreads cannot be read at build time.");if(W.value?.type!=="ObjectExpression")H(`defineDictionary() entry "${J}" must be an object of "<locale>": "<string>" pairs.`);let Y={};for(let $ of W.value.properties){let G=U($);if(G===null)H(`defineDictionary() entry "${J}" has a locale key that cannot be read at build time.`);let M=$.value;if(M?.type!=="Literal"||typeof M.value!=="string")H(`defineDictionary() entry "${J}" locale "${G}" must be a string literal. Use {{param}} interpolation instead of a template literal or a function.`);Y[G]=M.value}Q[J]=Y}return Q}function v(q,H){if(q===void 0)return;if(q.type!=="ObjectExpression")H("defineDictionary() options must be an inline object literal \u2014 it is read at build time.");for(let Q of q.properties){if(U(Q)!=="sourceLocale")continue;let W=Q.value;if(W?.type!=="Literal"||typeof W.value!=="string")H("defineDictionary() sourceLocale must be a string literal.");return W.value}return}function p(q,H){let Q=!1;return X(q,(W)=>{if(Q)return;if(W.type==="FunctionDeclaration"&&W.id?.name===H)Q=!0;if(W.type==="VariableDeclarator"&&W.id?.name===H)Q=!0}),Q}function U(q){if(q?.type!=="Property"||q.computed)return null;if(q.key?.type==="Identifier")return q.key.name;if(q.key?.type==="Literal"&&typeof q.key.value==="string")return q.key.value;return null}function X(q,H){if(q===null||typeof q!=="object")return;if(Array.isArray(q)){for(let Q of q)X(Q,H);return}if(typeof q.type==="string")H(q);for(let Q of Object.keys(q)){if(Q==="parent")continue;let W=q[Q];if(W&&typeof W==="object")X(W,H)}}import{mkdir as u,writeFile as c}from"fs/promises";import{dirname as r,join as t}from"path";function k(q){let H;return{name:"gemi-plugin-asset-base",config:(Q,W)=>W.command==="build"&&q?{base:q}:void 0,configResolved(Q){H=Q},async writeBundle(Q){if(!H||H.command!=="build"||H.build.ssr||!Q.dir)return;let W=t(Q.dir,P);await u(r(W),{recursive:!0}),await c(W,`${JSON.stringify({assetBase:d(H.base)})}
@@ -1,5 +1,5 @@
1
1
  // @bun
2
2
  class m{name;cron;withoutOverlapping=!1;onOneServer=!1;shouldRun(){return!0}callback(f){}onTick(){}onComplete(){}static exp(f){return f}}
3
- export{m as Dd};
3
+ export{m as Fd};
4
4
 
5
- //# debugId=1C8E7CF17AC6609464756E2164756E21
5
+ //# debugId=E16944810CF3728764756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "// A cron expression accepted by `Bun.cron`: a 5-field expression\n// (`minute hour day-of-month month day-of-week`, interpreted in UTC) or one of\n// the nicknames below. The `string & {}` member keeps arbitrary expressions\n// assignable while still surfacing the nicknames in editor autocomplete.\nexport type CronExpression =\n | \"@yearly\"\n | \"@annually\"\n | \"@monthly\"\n | \"@weekly\"\n | \"@daily\"\n | \"@midnight\"\n | \"@hourly\"\n | (string & {});\n\nimport type { HeldLock } from \"../lock/LockManager\";\n\nexport type WithoutOverlapping =\n | boolean\n | {\n /**\n * The lock's lease, in milliseconds: how long it outlives an instance\n * that died holding it. Renewed every third of this while the tick\n * runs, so it does not limit how long a tick may take. Default five\n * minutes.\n */\n expiresAfter?: number;\n };\n\nexport class CronJob {\n name: string;\n cron: CronExpression;\n\n /**\n * Skips a tick while an earlier tick of this job is still running, on this\n * instance or any other sharing the queue's storage. With the database\n * queue driver that is a lock row in `gemi_locks`; with the memory driver\n * it only covers this process.\n *\n * The lock is held across `onTick`, `callback` and `onComplete`, and handed\n * to `callback` as its argument. If its lease is lost while the tick runs\n * (the instance stalled past `expiresAfter`), `lock.lost` aborts and the\n * scheduler logs it. Writes that must not land after that go through\n * `lock.fence(...)`.\n *\n * It does not stop a second instance from running the same tick after the\n * first one finished; `onOneServer` does.\n */\n withoutOverlapping: WithoutOverlapping = false;\n\n /**\n * Runs each tick on one instance only, across every instance sharing the\n * queue's storage: the first to claim the tick's minute runs it, the others\n * skip it. Assumes the instances' clocks agree to well within a minute.\n */\n onOneServer = false;\n\n /**\n * Decides whether this tick happens at all. Evaluated once per tick, before\n * anything else; returning `false` skips `onTick`, `callback` and\n * `onComplete` alike.\n *\n * ### Why this is a member and not a line the job writes for itself\n *\n * A job that reports outward — mails a digest, opens a Sentry issue, pings a\n * channel — must not fire from a laptop, and the guard for that has to cover\n * the whole tick. There was nowhere to write it. gemi calls `onTick` and\n * `onComplete` *outside* `callback`, so a guard placed in a lifecycle hook\n * only stops the hook it lives in: an early `return` at the top of `callback`\n * leaves the job still announcing that it started and still announcing that\n * it finished, which for an outward-reporting job is most of the damage.\n *\n * The only construct that covered every hook was an abstract base class that\n * shadowed `callback` with the guard and renamed the real body to `run()` —\n * and that costs the app the framework's own vocabulary. A job then reads\n * `async run()` while every page of the documentation reads `async\n * callback()`, so the next person to follow the docs writes a `callback` the\n * base class never calls: no error, no output, a job that silently does\n * nothing. Forgetting *this* member fails the other way round — the job runs,\n * which is what it did before anyone asked for a gate.\n *\n * ### What it gates\n *\n * Work, not registration. A job whose gate returns `false` is still\n * scheduled, still holds its `Bun.cron` handle, and still appears in\n * `app(Scheduler).jobs` — \"is it scheduled\" and \"will it do anything\" are\n * different questions and the second one is answered per tick. That is also\n * why this is a method: a field would be read once, when the scheduler\n * constructs the job at boot, and would freeze whatever it saw then.\n *\n * A gate that throws is logged and treated as `false`. Cron work recurs, so\n * a skipped tick is recovered by the next one, while an email sent from the\n * wrong machine is not recovered at all.\n *\n * ### Composing with a base class\n *\n * Nothing here calls `super` for you. A subclass that overrides `shouldRun`\n * for its own reason silently replaces whatever its base was gating on, so\n * narrow rather than redefine:\n *\n * ```typescript\n * async shouldRun() {\n * return (await super.shouldRun()) && this.hasSubscribers();\n * }\n * ```\n *\n * A shared base should annotate its return type as written here rather than\n * let it be inferred: a base returning a plain `boolean` narrows the\n * signature its subclasses inherit, and the `await super` above then does not\n * typecheck against it.\n */\n shouldRun(): Promise<boolean> | boolean {\n return true;\n }\n\n /**\n * The tick's work. `lock` is the `withoutOverlapping` lock when the job\n * declares one.\n */\n callback(_lock?: HeldLock): Promise<void> | void {}\n onTick(): Promise<void> | void {}\n onComplete(): Promise<void> | void {}\n\n static exp(expression: CronExpression) {\n return expression;\n }\n}\n"
6
6
  ],
7
7
  "mappings": ";AA4BO,MAAM,CAAQ,CACnB,KACA,KAiBA,mBAAyC,GAOzC,YAAc,GAwDd,SAAS,EAA+B,CACtC,MAAO,GAOT,QAAQ,CAAC,EAAwC,EACjD,MAAM,EAAyB,EAC/B,UAAU,EAAyB,QAE5B,IAAG,CAAC,EAA4B,CACrC,OAAO,EAEX",
8
- "debugId": "1C8E7CF17AC6609464756E2164756E21",
8
+ "debugId": "E16944810CF3728764756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{fa as k,ga as p}from"./chunk-rnegd7ya.js";function D(){return{name:"gemi-custom-request",setup(x){x.onLoad({filter:k},async(j)=>{let y=await Bun.file(j.path).text();return{contents:await p(y),loader:j.path.endsWith(".tsx")?"tsx":"ts"}})}}}
2
+ import{fa as k,ga as p}from"./chunk-tr8se94g.js";function D(){return{name:"gemi-custom-request",setup(x){x.onLoad({filter:k},async(j)=>{let y=await Bun.file(j.path).text();return{contents:await p(y),loader:j.path.endsWith(".tsx")?"tsx":"ts"}})}}}
3
3
  export{D as ea};
4
4
 
5
5
  //# debugId=92CE5F11E40AB21B64756E2164756E21
@@ -1,5 +1,5 @@
1
1
  // @bun
2
2
  var z="/api";function v(j){return j==="/api"||j.startsWith("/api/")}function B(j){return v(j)?j.slice(4):j}
3
- export{z as ql,v as rl,B as sl};
3
+ export{z as sl,v as tl,B as ul};
4
4
 
5
- //# debugId=A835B8EF16FEF0DE64756E2164756E21
5
+ //# debugId=4AFE25AC9D8D859764756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "/**\n * The prefix every api route is served under. The browser adds it when it\n * fetches (`/api${path}`) and the server strips it before matching, so an api\n * router's own paths never carry it.\n */\nexport const API_PREFIX = \"/api\";\n\n/**\n * Whether a request pathname is an api request: `/api` itself or anything\n * under `/api/`. A bare `startsWith(\"/api\")` also claims `/apidocs`,\n * `/api-keys` and `/apiary`, so a view route there would never render — the\n * api dispatcher would answer its 404 JSON instead.\n */\nexport function isApiPath(pathname: string): boolean {\n return pathname === API_PREFIX || pathname.startsWith(`${API_PREFIX}/`);\n}\n\n/**\n * The api router path a request pathname addresses: `/api/users/1` is\n * `/users/1`, `/api/` is `/` and `/api` is `\"\"`. Only the leading prefix is\n * stripped — `replace(\"/api\", \"\")` would also strip an `/api` inside the path\n * of a request that did not start with one (`/files/api` becoming `/files`).\n * A pathname outside `/api` comes back unchanged, so the dispatcher can still\n * be handed a request by its route path directly.\n */\nexport function apiPath(pathname: string): string {\n return isApiPath(pathname) ? pathname.slice(API_PREFIX.length) : pathname;\n}\n"
6
6
  ],
7
7
  "mappings": ";AAKO,IAAM,EAAa,OAQnB,SAAS,CAAS,CAAC,EAA2B,CACnD,OAAO,IATiB,QASU,EAAS,WAAW,OAAgB,EAWjE,SAAS,CAAO,CAAC,EAA0B,CAChD,OAAO,EAAU,CAAQ,EAAI,EAAS,MAAM,CAAiB,EAAI",
8
- "debugId": "A835B8EF16FEF0DE64756E2164756E21",
8
+ "debugId": "4AFE25AC9D8D859764756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -45,6 +45,6 @@ Say which, and registerModels will leave it alone:
45
45
  register("${j}", ${z[0]})
46
46
 
47
47
  A class that is only a typed view over the same rows belongs in a module you do not hand to registerModels.`);this.model=j;this.candidates=z;this.name="AmbiguousModelRegistrationError"}}class C extends Error{model;operation;required;limit;dialect;constructor(j,z,B,G,H,I){super(`${j}.${z} would bind ${B} parameters, and the '${H}' driver accepts at most ${G} in one statement. ${I}`+(z==="createMany"?" A createMany over the ceiling is normally split across statements inside one transaction, so reaching this means splitting cannot help: a single row binds more than the driver accepts.":" Splitting is not something this operation can do for you \u2014 one "+"statement has to carry one answer. Narrow the query."));this.model=j;this.operation=z;this.required=B;this.limit=G;this.dialect=H;this.name="ParameterLimitError"}}class D extends Error{model;operation;field;constructor(j,z,B){super(`${j}.${z} is missing a value for '${B}', which is required and has no default.`);this.model=j;this.operation=z;this.field=B;this.name="MissingRequiredValueError"}}class F extends Error{relation;model;constructor(j,z,B){super(`'${j}' is not a relation on model ${z}. `+(B.length>0?`Known relations: ${B.join(", ")}.`:`${z} declares no relations.`));this.relation=j;this.model=z;this.name="UnknownRelationError"}}class b extends Error{model;limit;constructor(j,z){super(`The include tree nests more than ${z} relations deep (at model ${j}). Deeply nested includes are legal, so this is a guard against a generated or malformed argument tree rather than a limit on `+"modelling \u2014 every level costs at least one query.");this.model=j;this.limit=z;this.name="RelationDepthExceededError"}}class P extends Error{model;relation;target;constructor(j,z,B,G){super(`${j}.${z} points at model '${B}', which nothing has registered. The generated artifact and the registry disagree: re-run \`prisma generate\`, and check that app/models/generated/index.ts is imported. `+(G.length>0?`Registered models: ${G.join(", ")}.`:"Nothing is registered at all."));this.model=j;this.relation=z;this.target=B;this.name="UnregisteredRelationTargetError"}}class R extends Error{model;relation;constructor(j,z,B){super(`Cannot resolve how ${j}.${z} joins: ${B} This means `+"app/models/generated is stale or hand-edited \u2014 re-run "+"`prisma generate`.");this.model=j;this.relation=z;this.name="MalformedRelationError"}}class v extends Error{constructor(j,z){super(`No model is registered under the name '${j}'. `+(z.length>0?`Registered models: ${z.join(", ")}.`:"Nothing is registered \u2014 is app/models/generated/index.ts imported?"));this.name="ModelNotRegisteredError"}}class N extends Error{constructor(j){super(`${j} has no $schema. Model subclasses must extend a generated base class from app/models/generated/models.ts.`);this.name="MissingModelSchemaError"}}class Q extends Error{model;operation;constructor(j,z){super(`${j}.${z} was given 'lock' outside a transaction. A row lock lasts until the transaction that took it ends, so outside one it is released as soon as the row is read and protects nothing. Run the read and the writes it guards inside Model.transaction(async () => { ... }).`);this.model=j;this.operation=z;this.name="LockOutsideTransactionError"}}
48
- export{K as qj,Z as rj,_ as sj,$ as tj,L as uj,M as vj,U as wj,V as xj,y as yj,O as zj,W as Aj,E as Bj,S as Cj,T as Dj,x as Ej,A as Fj,C as Gj,D as Hj,F as Ij,b as Jj,P as Kj,R as Lj,v as Mj,N as Nj,Q as Oj};
48
+ export{K as sj,Z as tj,_ as uj,$ as vj,L as wj,M as xj,U as yj,V as zj,y as Aj,O as Bj,W as Cj,E as Dj,S as Ej,T as Fj,x as Gj,A as Hj,C as Ij,D as Jj,F as Kj,b as Lj,P as Mj,R as Nj,v as Oj,N as Pj,Q as Qj};
49
49
 
50
- //# debugId=8AF2550E5FFCFA7A64756E2164756E21
50
+ //# debugId=6B27F18A4A7B383564756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "/**\n * Thrown when the compiler is handed an argument it does not implement yet.\n *\n * Every public operation accepts the full Prisma argument type from iteration 1\n * — signatures are final, capability grows underneath them. The price of that is\n * that anything unimplemented has to fail loudly: silently dropping a `take: 10`\n * and returning the whole table is the worst failure mode this ORM has.\n */\nexport class UnsupportedQueryError extends Error {\n constructor(\n public readonly argument: string,\n public readonly model: string,\n public readonly operation: string,\n /**\n * What cannot work, and what to do instead.\n *\n * **Required**, which is the second half of #61 — the first being the\n * `UnsupportedByDesignError` split beside this. It was optional, and the\n * refusals that omitted it were the highest-traffic ones: an argument the\n * operation does not accept, on the path a typo takes. Those said only\n * *that* something was refused, to the reader least likely to know why.\n *\n * Required rather than conventionally-supplied for the reason five other\n * parameters here are — `render`'s `origin`, `changedFields`' `schema`,\n * `RelationExecutor.exec`'s `preScoped`, `resolveLink`'s `operation`,\n * `assertPageArgument`'s reported name: where omitting an argument produces\n * a *worse* result rather than an error, `tsc` is the only thing that keeps\n * a convention. Ninety-five of a hundred call sites already passed one; the\n * five that did not are exactly the ones nobody revisited.\n *\n * `UnknownFieldError` and `UnknownRelationError` set the standard this\n * meets: both enumerate the valid names rather than only rejecting the\n * invalid one.\n */\n detail: string,\n ) {\n super(\n `gemi ORM does not support '${argument}' yet (${model}.${operation}). ` +\n detail,\n );\n this.name = \"UnsupportedQueryError\";\n }\n}\n\n/**\n * An argument the ORM has **decided not to implement**, as opposed to one it has\n * not implemented yet.\n *\n * The distinction is the whole point, and it is a distinction a caller can act\n * on: \"yet\" means wait for a release, \"will not\" means change the code. Sharing\n * one error for both meant `docs/orm.md` could list `omit` under *Not in scope*\n * while the runtime said \"yet\" — a contradiction a reader has no way to\n * resolve, and the one #68 exists to end.\n *\n * A subclass rather than a sibling, so `catch (e) { if (e instanceof\n * UnsupportedQueryError) … }` keeps working for callers that do not care which\n * kind it is.\n */\n/**\n * An argument the ORM **does** implement, given a value it cannot mean.\n *\n * The third category, and the one that made \"yet\" wrong four separate times —\n * #82, #88, #100 and #101 each corrected it at their own call site before #61\n * was found to own the problem. The taxonomy the three classes now draw:\n *\n * not implemented yet UnsupportedQueryError wait for a release\n * decided against UnsupportedByDesignError change the call (#78)\n * implemented, bad value InvalidArgumentError fix the value\n *\n * `take: \"-2\"` is the clearest case. `take` is implemented; `\"-2\"` is not a\n * take. Telling that caller the ORM \"does not support 'take' yet\" is wrong on\n * both halves — it does, and there is nothing to wait for — and it sends them\n * to a changelog when the fix is one character in their own code.\n *\n * **Extends `UnsupportedQueryError`**, so every existing `catch` and every test\n * asserting the base class keeps working. That is the same choice\n * `UnsupportedByDesignError` made, and it is what lets a taxonomy be added to a\n * shipped ORM without a breaking change: the specific classes are for the\n * reader, the base class is for the handler.\n *\n * **Where the taxonomy stops, and why it stops there.** An argument that is not\n * in the grammar at all keeps the base class and its \"yet\" — `{ nope: 1 }`\n * reports \"does not support 'nope' yet\". That is right for half of what reaches\n * that path and wrong for the other half: the same check refuses a typo and a\n * real Prisma argument this ORM has genuinely not implemented, and nothing at\n * that point can tell them apart. Splitting it would mean carrying Prisma's\n * full argument grammar per operation, which is a large amount of duplicated\n * schema for a small gain.\n *\n * What makes it tolerable is the sentence after it. Since #61's other half made\n * `detail` mandatory, that refusal always continues *\"findMany takes include,\n * omit, orderBy, select, skip, take, where\"* — so a caller who typed `nope`\n * learns it is not coming from the very next clause, without the class having\n * to know. Recorded here rather than left to be re-derived, because \"the third\n * class did not cover this one\" is the obvious first reading and it is not the\n * interesting part.\n */\nexport class InvalidArgumentError extends UnsupportedQueryError {\n constructor(\n argument: string,\n model: string,\n operation: string,\n /** What is wrong with the value, and what a good one looks like. */\n reason: string,\n ) {\n super(argument, model, operation, reason);\n this.name = \"InvalidArgumentError\";\n this.message = `Invalid '${argument}' (${model}.${operation}). ${reason}`;\n }\n}\n\nexport class UnsupportedByDesignError extends UnsupportedQueryError {\n constructor(\n argument: string,\n model: string,\n operation: string,\n /** What to use instead. Required — see #61: a refusal owes the caller a next step. */\n reason: string,\n ) {\n super(argument, model, operation, reason);\n this.name = \"UnsupportedByDesignError\";\n this.message =\n `gemi ORM does not implement '${argument}' (${model}.${operation}), ` +\n `and this is a decision rather than a gap. ${reason}`;\n }\n}\n\n/**\n * Thrown when an argument names something that is not a field on the model. A\n * `where` key with no matching field is an error, never a passthrough — that is\n * the rule that keeps user input out of the identifier positions in the SQL.\n */\nexport class UnknownFieldError extends Error {\n constructor(\n public readonly field: string,\n public readonly model: string,\n known: string[],\n ) {\n super(\n `'${field}' is not a field on model ${model}. ` +\n `Known fields: ${known.join(\", \")}.`,\n );\n this.name = \"UnknownFieldError\";\n }\n}\n\n/**\n * Thrown when a column holds something the generated schema says it cannot —\n * an unparseable timestamp, a fractional value in a `BigInt` column, malformed\n * JSON. Every dialect needs it, which is why it lives here rather than beside\n * one of them.\n *\n * It exists so those cases fail rather than decode into a plausible wrong\n * value: `new Date(\"nonsense\")` is an `Invalid Date`, not an error, and it\n * would travel a long way before anyone noticed.\n */\nexport class DecodeError extends Error {\n constructor(\n public readonly field: { column: string; type: string },\n public readonly value: unknown,\n ) {\n super(\n `Could not decode the value ${JSON.stringify(String(value))} from column ` +\n `'${field.column}' as ${field.type}. The column's contents do not match ` +\n `the Prisma schema — was it written by something other than Prisma or ` +\n `the gemi ORM?`,\n );\n this.name = \"DecodeError\";\n }\n}\n\n/**\n * Thrown by the `*OrThrow` operations when the query matched nothing. Prisma\n * raises `NotFoundError` / `P2025` for the same case; the differential harness\n * compares the fact of throwing, not the error type.\n */\nexport class RecordNotFoundError extends Error {\n constructor(\n public readonly model: string,\n public readonly operation: string,\n ) {\n super(`No ${model} found (${model}.${operation}).`);\n this.name = \"RecordNotFoundError\";\n }\n}\n\n/**\n * The dispatchers' test for a lookup that matched nothing and should be\n * answered with a 404.\n *\n * Matches the name as well as the class for the reason `isPolicyDeniedError`\n * and `isUniqueConstraintError` do: `instanceof` compares against *this*\n * module instance's class object, so a second copy of `gemi/orm` — two\n * versions in one dependency tree, a linked package beside a bundled one —\n * throws an error this would not recognise, and the request would go back to\n * being a 500 carrying the model's name in its body.\n *\n * The name is the identity here, so an application error that calls itself\n * `RecordNotFoundError` is deliberately matched too. That is the same bargain\n * the other two predicates make, and the failure it trades against — a 500\n * where a 404 was meant — is the worse one.\n */\nexport function isRecordNotFoundError(error: unknown): error is RecordNotFoundError {\n if (error instanceof RecordNotFoundError) return true;\n\n return (\n typeof error === \"object\" &&\n error !== null &&\n (error as { name?: unknown }).name === \"RecordNotFoundError\"\n );\n}\n\n/**\n * Thrown when a write violates a unique constraint.\n *\n * DECISION — gemi defines its own error rather than mirroring Prisma's codes.\n *\n * Prisma raises `PrismaClientKnownRequestError` with code `P2002` and\n * `meta.target` holding the field names. Mirroring that would ease a migration\n * for code already branching on `P2002`.\n *\n * **The premise this note used to rest on was wrong, and the conclusion is\n * unchanged.** It said \"nothing in this repository does (checked)\", which was\n * true of *this* repository and was never the question — the code that branches\n * on `P2002` lives in the applications the ORM is for. The first real port\n * measured four such guards, every one of them in concurrency-recovery code\n * (catch the collision, re-read, retry), and every one of them silently dead the\n * moment the write moved onto gemi: the `catch` still ran, the condition was\n * false, the recovery did not happen. Nor was the repository itself clean —\n * `templates/saas-starter/app/models/differential.ts:621` branches on `P2002`\n * today, and did when this was written.\n *\n * What the premise was doing was answering \"would anyone notice?\", and the\n * answer is that four people noticed at once. The decision never depended on it.\n * Carrying a `P` code implies the rest of the taxonomy is implemented too:\n * `P2003`, `P2025`, and the fifty others an application might reasonably then\n * expect to catch. Claiming a compatibility surface we have not built is worse\n * than asking the call sites that need it to catch a gemi error instead —\n * *especially* when the code in question is a retry loop, because a\n * compatibility surface that covers `P2002` and not `P2034` fails in exactly\n * the same silent way, one layer further in.\n *\n * A porter reaches for `isUniqueConstraintError` below. `UPGRADE.md` carries\n * the temporary `|| error.code === \"P2002\"` bridge, for a codebase halfway\n * through the move, with the marker that says when to delete it; it is\n * deliberately not exported, because a Prisma code in gemi's permanent surface\n * is the thing this note declined.\n *\n * What the contract does promise is the part that matters: the error is typed,\n * catchable, and names the fields — as *field* names, the way Prisma's\n * `meta.target` does, not as the database columns the driver reported.\n */\nexport class UniqueConstraintError extends Error {\n constructor(\n public readonly model: string,\n public readonly operation: string,\n /** Field names, mapped back through the schema from the driver's columns. */\n public readonly fields: string[],\n /** The constraint's own name, when the dialect reports one. */\n public readonly constraint?: string,\n options?: { cause?: unknown },\n ) {\n super(\n `Unique constraint violated on ${model}.${operation}` +\n (fields.length > 0 ? ` for ${fields.join(\", \")}` : \"\") +\n (constraint ? ` (constraint '${constraint}')` : \"\") +\n `. A ${model} with those values already exists.`,\n options,\n );\n this.name = \"UniqueConstraintError\";\n }\n}\n\n/**\n * The guard to write in a retry-on-collision `catch`, which is where a\n * `code === \"P2002\"` test almost always was:\n *\n * try {\n * return await Invite.create({ data: { token } })\n * } catch (error) {\n * if (!isUniqueConstraintError(error)) throw error\n * return await Invite.findUniqueOrThrow({ where: { token } })\n * }\n *\n * **Why this is worth shipping rather than telling people to write\n * `instanceof`**, which is the obvious objection and the reason it nearly was\n * not shipped. The second half of the test is the whole of it:\n *\n * error instanceof UniqueConstraintError || error.name === \"UniqueConstraintError\"\n *\n * `instanceof` compares against *this module instance's* class object, so it is\n * false across a duplicate copy of `gemi/orm` — two versions in one dependency\n * tree, a bundled build alongside a linked one, a monorepo package resolving\n * its own. The error is the right error, thrown by the right code, and the\n * guard silently does not fire. That is not a hypothetical: duck-typing rather\n * than importing the class is precisely what the ported application had already\n * done for Prisma's error, for precisely this reason, and shipping a predicate\n * that only does `instanceof` would hand it back the same trap under a new\n * name.\n *\n * So the name is load-bearing rather than a convenience: it is the identity\n * that survives module duplication, which is why every error in this file sets\n * `this.name` explicitly instead of relying on the class name surviving\n * minification.\n *\n * **The narrowing is a claim, and this is what it rests on.** The name branch\n * asserts `UniqueConstraintError` on the strength of a string — a second copy\n * of this module really does carry `model`, `operation` and `fields`, so the\n * claim holds for the case it exists for. An unrelated object named\n * `\"UniqueConstraintError\"` would defeat it, and that is not something that\n * happens by accident.\n *\n * **It deliberately does not match `code === \"P2002\"`.** See the DECISION\n * above: the temporary bridge for a half-ported codebase is in `UPGRADE.md`,\n * where it can carry a delete-me marker, rather than in gemi's permanent\n * surface, where it would have neither.\n */\nexport function isUniqueConstraintError(\n error: unknown,\n): error is UniqueConstraintError {\n if (error instanceof UniqueConstraintError) return true;\n\n return (\n typeof error === \"object\" &&\n error !== null &&\n (error as { name?: unknown }).name === \"UniqueConstraintError\"\n );\n}\n\n/**\n * Thrown when a write needs `RETURNING` and the dialect has none.\n *\n * Unreachable on SQLite and Postgres, which both support it. It exists so that\n * the MySQL / MariaDB path is a named gap rather than a wrong answer: the\n * fallback there is `lastInsertRowid` plus a re-select, which is a different\n * statement shape and is not implemented.\n */\nexport class ReturningUnsupportedError extends Error {\n constructor(\n public readonly model: string,\n public readonly operation: string,\n public readonly dialect: string,\n ) {\n super(\n `${model}.${operation} needs RETURNING to report its result, and the ` +\n `'${dialect}' dialect does not support it. The fallback — ` +\n `lastInsertRowid plus a re-select — is not implemented.`,\n );\n this.name = \"ReturningUnsupportedError\";\n }\n}\n\n/**\n * Thrown when a policy denies an operation.\n *\n * Two ways to get here, and the message distinguishes them because the fixes\n * are different: a policy's `before` returned false, or the model is policied\n * and there is no user in scope at all.\n *\n * The second is the deny-by-default rule, and it is the reason this error is\n * loud. A cron tick or a queue worker reading a policied model has no user, and\n * the alternative — treating \"no user\" as \"no policy\" — means the dangerous\n * case is the silent one: a request whose auth middleware was misconfigured\n * would read every tenant's rows rather than failing. So unscoped access is\n * always a decision written at the call site, through `Model.asSystem`.\n */\nexport class PolicyDeniedError extends Error {\n constructor(\n public readonly model: string,\n public readonly operation: string,\n public readonly reason: \"denied\" | \"no-user\" = \"denied\",\n ) {\n super(\n reason === \"no-user\"\n ? `${model}.${operation} is governed by a policy and there is no user ` +\n `in scope. If this is a cron tick, a queue worker or a script, say ` +\n `so at the call site: Model.asSystem(() => ...). Policies are ` +\n `never skipped just because a user failed to turn up.`\n : `${model}.${operation} was denied by ${model}'s policy.`,\n );\n this.name = \"PolicyDeniedError\";\n }\n}\n\n/**\n * The api dispatcher's test for a denial it should answer with a 403. It\n * matches the name as well as the class for the reason\n * `isUniqueConstraintError` does: a second copy of `gemi/orm` throws an error\n * that is not `instanceof` this class, and a denial that failed the test would\n * go back to being a 500 that carries the policy's message.\n */\nexport function isPolicyDeniedError(error: unknown): error is PolicyDeniedError {\n if (error instanceof PolicyDeniedError) return true;\n\n return (\n typeof error === \"object\" &&\n error !== null &&\n (error as { name?: unknown }).name === \"PolicyDeniedError\"\n );\n}\n\n/**\n * Thrown when an `update` writes to a column its own policy's `scope` selects on,\n * and the policy has no `onUpdate` saying what that should mean.\n *\n * The shape it catches:\n *\n * scope: (ctx) => ({ organizationId: ctx.user.organizationId })\n * // ...and then\n * User.update({ where: { id }, data: { organizationId: 999 } })\n *\n * The scope did its job — only rows in the caller's own tenant could be selected\n * — and the statement still hands one of them to another tenant. Afterwards the\n * row is outside the scope, so it cannot be read back and cannot be put right by\n * the same caller: a one-way door rather than a visible failure. The usual way in\n * is not malice but mass assignment, a handler forwarding request fields into\n * `data`.\n *\n * This is `assertCreateCovered`'s question asked of the other write. There it is\n * \"you scoped reads but never said what an insert means\"; here it is \"you scoped\n * reads but never said whether an update may move a row out\". Both are answered\n * by writing the hook, including when the answer is \"allow it\" —\n * `onUpdate: (_ctx, data) => data` is a complete and legitimate answer, and\n * saying it out loud is the point.\n *\n * **What it cannot see.** The scope-owned columns are read off the top level of\n * the fragment the policy returned, so `{ organizationId: 7 }` is understood and\n * `{ OR: [...] }` is not — a scope built from combinators is not attributed to\n * any column and an update through it is not checked. Narrowing that would mean\n * either interpreting arbitrary `where` grammar or refusing every update on such\n * a model, and neither is worth it: the guard is a rail on the common shape, not\n * a proof.\n */\nexport class ScopeEscapeError extends Error {\n constructor(\n public readonly model: string,\n public readonly operation: string,\n public readonly fields: readonly string[],\n ) {\n const named = fields.map((field) => `'${field}'`).join(\", \");\n super(\n `${model}.${operation} writes ${named}, which ${model}'s policy also ` +\n `scopes on — so this update can move a row outside the scope that ` +\n `selected it, where the caller can no longer read or repair it.\\n\\n` +\n `Add an onUpdate to that policy. It may reassert the column ` +\n `(data => ({ ...data, ${fields[0]}: ctx.user.${fields[0]} })), reject ` +\n `the write, or allow it explicitly with (_ctx, data) => data — all ` +\n `three are fine, and the point is that the policy says which.`,\n );\n this.name = \"ScopeEscapeError\";\n }\n}\n\n/**\n * Thrown when a model class carries policies but is not the class the registry\n * resolves its name to.\n *\n * This exists because of a cross-tenant leak that shipped past review. The\n * generated `index.ts` registers the *generated* base — `register(\"Account\",\n * AccountModel)` — while an application authors its policy on a subclass:\n *\n * export class Account extends AccountModel {\n * static $policies = [{ scope: (ctx) => ({ organizationId: … }) }]\n * }\n *\n * A root query goes through `Account`, so `policiesFor(this)` finds the policy\n * and the scope applies. A **nested** relation read resolves through the\n * registry, gets `AccountModel`, and walks a prototype chain the policy is not\n * on — so `User.findMany({ include: { accounts: true } })` returned every\n * tenant's accounts. Root queries scoped, nested reads unscoped: exactly the\n * Prisma behaviour policies exist to fix, and silent.\n *\n * Raised at the first query through the unregistered class, naming the one-line\n * fix, because the alternative is data crossing a tenant boundary with nothing\n * to notice it.\n *\n * It fires on a divergence in the resolved policy *chain*, not merely on the two\n * classes differing. A plain subclass that adds no policy of its own inherits\n * the same policy objects in the same order, so a nested read resolving to its\n * parent applies exactly what the root query applied — no divergence, nothing\n * to refuse. An earlier version compared class identity and rejected\n * `class AdminUser extends User {}` for policies it had not written.\n */\nexport class UnregisteredPolicyClassError extends Error {\n constructor(\n public readonly model: string,\n /**\n * Under `carries: \"narrowing\"` this is the *ancestor* — the class the model\n * belongs to — rather than whatever the registry currently holds. The two\n * classes are on one prototype chain there, and which of them is registered\n * is the thing in question, so naming them by their relationship is what\n * makes the message readable.\n */\n public readonly registered: string,\n /** Under `carries: \"narrowing\"`, the descendant: the view that narrows. */\n public readonly queried: string,\n /**\n * Which side carries the policies that would be skipped, and therefore what\n * the author should do about it. Three, because they need three different\n * answers: a missing registration, a query through the wrong class, and a\n * view that should not be competing for the name at all.\n */\n public readonly carries: \"queried\" | \"registered\" | \"narrowing\" = \"queried\",\n ) {\n super(\n carries === \"narrowing\"\n ? `${queried} extends ${registered}, which owns the model '${model}', ` +\n `and carries policies of its own on top of it. A class that ` +\n `narrows an existing model is a view, and the registry holds one ` +\n `class per name — so registering ${queried} would apply its ` +\n `narrowing to every nested read of ${model}, and leaving ` +\n `${registered} registered would skip ${queried}'s policies ` +\n `entirely. Neither is a thing to choose for you.\\n\\n` +\n `Keep the view out of the modules you hand to Kernel.models, and ` +\n `query it directly where you want it:\\n\\n` +\n ` ${queried}.findMany(…) // narrowed, at the call site\\n\\n` +\n `If it is not a view but the model itself, move the policies onto ` +\n `${registered} — the class the model's name resolves to — and ` +\n `${queried} inherits them everywhere.\\n`\n : carries === \"queried\"\n ? `${queried} carries policies but the registry resolves '${model}' to ` +\n `${registered}. Nested relation reads go through the registry, so ` +\n `they would run on ${registered} and skip every policy on ` +\n `${queried} — scoped at the root, unscoped inside an include. ` +\n `Register the class that carries the policy:\\n\\n` +\n ` import { register } from \"gemi/orm\"\\n` +\n ` export class ${queried} extends ${registered} { … }\\n` +\n ` register(\"${model}\", ${queried})\\n`\n : `This query goes through ${queried}, but the registry resolves ` +\n `'${model}' to ${registered}, which carries policies ${queried} ` +\n `does not. Nested relation reads would be scoped and this query is ` +\n `not — the same policy applying to some queries and not others. ` +\n `Query ${registered} instead:\\n\\n` +\n ` ${registered}.findMany(…)\\n\\n` +\n `If skipping policies is intended, say so at the call site — that ` +\n `is what Model.asSystem() is for, and it is the only way to do it ` +\n `that a reader can see.\\n`,\n );\n this.name = \"UnregisteredPolicyClassError\";\n }\n}\n\n/**\n * Thrown when a `$policies` array holds something that is not a usable policy.\n *\n * Every case it covers is refused today — by `tsc`, at the class declaration,\n * with `TS2417`, because `Model` declares `static $policies?: readonly\n * PolicyEntry[]` and `ModelPolicy`'s members are all optional, so a typo'd key\n * trips weak-type detection. This is therefore a guard on the paths that import\n * user code *without* having type-checked it: `registerModels` at boot, and\n * `gemi check models`, whose whole job is to find mistakes in a file somebody is\n * still writing.\n *\n * Two failures, and the second is the one that matters.\n *\n * **A function the ORM cannot get a policy out of.** `resolveEntry` instantiates\n * every function entry with no arguments, and there are two ways that goes\n * wrong. A factory nobody called — `softDeletes` rather than\n * `softDeletes({ field })` — is not constructable at all and reached `new entry`\n * to produce `TypeError: function is not a constructor`. A class that *is*\n * constructable and whose constructor wants an argument gets through that check\n * and dies inside its own body instead, with\n * `TypeError: undefined is not an object (evaluating 'opts.field')`. Both are\n * loud and neither named the model, the index or the file, which on a 79-model\n * app leaves the first question unanswered; the second is the case that survived\n * a first pass at this error, because \"constructable\" is a fact about\n * `[[Construct]]` and says nothing about what the constructor then does.\n *\n * **An entry with no recognised hook.** `{ scopes: … }` and\n * `{ default: { scope: … } }` were accepted in silence: `applyPolicies`\n * dispatches on `before` / `scope` / `onCreate` / `onUpdate` and\n * `applyRedaction` on `redact`, so an entry spelling none of them contributes\n * nothing. The model then carries a visible `$policies` array, passes\n * `gemi check models` as correctly registered, and **reads unscoped** — the same\n * written-believed-not-in-effect shape `UnregisteredPolicyClassError` exists\n * for, arriving through a typo instead of through the registry.\n *\n * The line between *empty but valid* and *malformed* is drawn at \"would this\n * ever run\": an entry with at least one recognised hook that is callable is\n * accepted whatever else it carries, because a factory's return value and a\n * policy class routinely hold configuration and helpers beside the hooks, and\n * refusing unknown *extra* keys would reject code that works. An entry with no\n * callable hook at all is refused, `{}` included — it is indistinguishable from\n * a policy that was meant to do something, and a conditional policy belongs in\n * the array rather than in the entry.\n */\nexport class InvalidPolicyEntryError extends Error {\n constructor(\n /**\n * The class whose **own** `$policies` array holds the entry — the class the\n * author wrote the array on, which is not necessarily the model being\n * queried when the array is on a base.\n */\n public readonly model: string,\n /** The entry's index in that array. */\n public readonly index: number,\n public readonly reason:\n | \"not-a-policy\"\n | \"not-constructable\"\n | \"constructor-threw\"\n | \"no-hooks\"\n | \"hook-not-callable\",\n /** What was found in the entry's place, rendered for a human. */\n public readonly found: string,\n /**\n * The hook names the runtime dispatches on, supplied by `policy.ts` so the\n * list lives beside the code that reads it rather than being restated here.\n */\n hooks: readonly string[],\n /**\n * A key the entry actually spells and the hook it is within one edit of.\n *\n * **The pair, not the hook alone.** An unattributed \"Did you mean `scope`?\"\n * after a list of five keys does not say which of them was read as a\n * misspelling, so a reader who can see that none of them are has no way to\n * dismiss it — and this error is about an authorization rule that is not in\n * effect, where a suggestion followed wrongly costs a rename of something\n * that was never the problem.\n */\n public readonly suggestion?: { key: string; hook: string },\n options?: { cause?: unknown },\n ) {\n const where = `${model}.$policies[${index}]`;\n const named =\n hooks.length > 1\n ? `${hooks.slice(0, -1).join(\", \")} or ${hooks[hooks.length - 1]}`\n : (hooks[0] ?? \"\");\n\n super(\n reason === \"not-a-policy\"\n ? `${where} is ${found}, which is not a policy. An entry is either a ` +\n `policy object — { scope, onCreate, … } — or a class the ORM ` +\n `constructs with no arguments.\\n\\n` +\n `A policy that only sometimes applies belongs in the array rather ` +\n `than in the entry:\\n\\n` +\n ` static $policies = [...(multiTenant ? [tenantScope] : [])]\\n`\n : reason === \"not-constructable\"\n ? `${where} is ${found}, and a function entry is instantiated with ` +\n `no arguments — so an arrow function, a plain function, or a ` +\n `factory that was never called cannot be one.\\n\\n` +\n `If it is a factory, call it:\\n\\n` +\n ` static $policies = [softDeletes({ field: \"deletedAt\" })]\\n`\n : reason === \"constructor-threw\"\n ? `${where} is ${found}\\n\\n` +\n `A class entry is constructed with no arguments. If this one ` +\n `needs some, construct it yourself and put the instance in the ` +\n `array:\\n\\n` +\n ` static $policies = [new TenantPolicy({ field: \"orgId\" })]\\n\\n` +\n `If the constructor reaches for something that is not ready yet, ` +\n `note that it runs on the first query through this model, not at ` +\n `boot.\\n`\n : reason === \"hook-not-callable\"\n ? `${where} has a ${found}, and every hook is called — so this ` +\n `would throw on the first query that reached it rather than ` +\n `doing whatever it was meant to do. Give it a function, or ` +\n `leave the key out.\\n`\n : `${where} has none of ${named}, so it would never run. The ` +\n `model carries a visible $policies array and nothing in it ` +\n `applies to any query — which for a scope means the model ` +\n `reads unscoped. ${found}` +\n (suggestion\n ? ` Is '${suggestion.key}' meant to be \\`${suggestion.hook}\\`?`\n : \"\") +\n `\\n`,\n options,\n );\n this.name = \"InvalidPolicyEntryError\";\n }\n}\n\n/**\n * Thrown when `registerModels` finds two unrelated classes in one module both\n * claiming the same model name.\n *\n * Deriving registration from a module namespace works because the candidates\n * are normally a chain — a generated base, the application's subclass, perhaps\n * a typed view over it — and a chain has a least element to elect. Two classes\n * that extend the same base without extending each other do not: both were\n * written for this model, and only the author knows which one nested reads\n * should run.\n *\n * Refused rather than guessed at, because both guesses are silent. Picking\n * either would scope every `include` of the model by one class's policies while\n * the other's code keeps reading as though its own applied.\n *\n * **\"In one module\" is the exact scope, and the asymmetry is deliberate.**\n * Election happens per module, so two unrelated claims split across *different*\n * modules never meet inside one — the later import simply wins. What catches\n * that is the audit at the end of `registerModels` rather than this error, and\n * only when the two diverge in policies. Two unrelated *unpolicied* claims on\n * one name resolve by import order and nothing reports it, which is tolerable\n * for the same reason it is invisible: with no policies on either, the choice\n * changes no query's scope.\n */\nexport class AmbiguousModelRegistrationError extends Error {\n constructor(\n public readonly model: string,\n public readonly candidates: readonly string[],\n ) {\n const named = candidates.map((candidate) => `'${candidate}'`).join(\", \");\n super(\n `Two classes in one module claim the model '${model}' — ${named} — and ` +\n `neither extends the other, so there is no way to tell which one ` +\n `nested relation reads should run.\\n\\n` +\n `Say which, and registerModels will leave it alone:\\n\\n` +\n ` import { register } from \"gemi/orm\"\\n` +\n ` register(\"${model}\", ${candidates[0]})\\n\\n` +\n `A class that is only a typed view over the same rows belongs in a ` +\n `module you do not hand to registerModels.`,\n );\n this.name = \"AmbiguousModelRegistrationError\";\n }\n}\n\n/**\n * Thrown when a statement would bind more parameters than the driver's wire\n * protocol can carry.\n *\n * Three shapes reach it, all of them scaling with the caller's *data* rather\n * than with the query's shape: `createMany` at `rows × columns`, an `in` list on\n * SQLite (one placeholder per element, and such a list is routinely\n * request-derived), and a to-many `include` on SQLite, which batches an `in`\n * over the parent keys. Both limits are hard and low enough to hit with an\n * ordinary import — Postgres counts parameters in an int16 (65535), SQLite\n * defaults `SQLITE_MAX_VARIABLE_NUMBER` to 32766. Postgres escapes the last two\n * either way: `= any($1)` is one parameter however long the array.\n *\n * Prisma chunks the insert automatically. Doing that here means several\n * statements, which without a transaction is a partially-applied `createMany`\n * on failure — so it waits for iteration 5, and until then this is a named gap\n * rather than a driver error naming neither the model nor the cause. Same\n * treatment as `ReturningUnsupportedError`, for the same reason.\n */\nexport class ParameterLimitError extends Error {\n constructor(\n public readonly model: string,\n public readonly operation: string,\n public readonly required: number,\n public readonly limit: number,\n public readonly dialect: string,\n detail: string,\n ) {\n super(\n `${model}.${operation} would bind ${required} parameters, and the ` +\n `'${dialect}' driver accepts at most ${limit} in one statement. ` +\n `${detail}` +\n (operation === \"createMany\"\n ? ` A createMany over the ceiling is normally split across statements ` +\n `inside one transaction, so reaching this means splitting cannot ` +\n `help: a single row binds more than the driver accepts.`\n : ` Splitting is not something this operation can do for you — one ` +\n `statement has to carry one answer. Narrow the query.`),\n );\n this.name = \"ParameterLimitError\";\n }\n}\n\n/**\n * Thrown when a write omits a column that has no value to fall back on: not\n * supplied, no client-side default, no database default, and not nullable.\n *\n * Raised in the compiler rather than left to the database so the message names\n * the field and the model, instead of surfacing as `NOT NULL constraint failed`\n * with a column name and no context.\n */\nexport class MissingRequiredValueError extends Error {\n constructor(\n public readonly model: string,\n public readonly operation: string,\n public readonly field: string,\n ) {\n super(\n `${model}.${operation} is missing a value for '${field}', which is ` +\n `required and has no default.`,\n );\n this.name = \"MissingRequiredValueError\";\n }\n}\n\n/**\n * Thrown when an `include` — or a relation-shaped key inside a `select` — names\n * something the model does not declare as a relation.\n */\nexport class UnknownRelationError extends Error {\n constructor(\n public readonly relation: string,\n public readonly model: string,\n known: string[],\n ) {\n super(\n `'${relation}' is not a relation on model ${model}. ` +\n (known.length > 0\n ? `Known relations: ${known.join(\", \")}.`\n : `${model} declares no relations.`),\n );\n this.name = \"UnknownRelationError\";\n }\n}\n\n/**\n * Thrown when an include tree nests deeper than the guard allows.\n *\n * A cyclic include is legal and finite — `user -> accounts -> user` terminates\n * because the caller wrote a finite tree. What this catches is an *unbounded*\n * one: an argument tree built by a loop, or forwarded from a request body, that\n * describes a thousand levels. Under the batched planner every level is at least\n * one query, so the guard is what stops a malformed argument from becoming a\n * self-inflicted denial of service.\n */\nexport class RelationDepthExceededError extends Error {\n constructor(\n public readonly model: string,\n public readonly limit: number,\n ) {\n super(\n `The include tree nests more than ${limit} relations deep (at model ` +\n `${model}). Deeply nested includes are legal, so this is a guard ` +\n `against a generated or malformed argument tree rather than a limit on ` +\n `modelling — every level costs at least one query.`,\n );\n this.name = \"RelationDepthExceededError\";\n }\n}\n\n/**\n * Thrown when a relation names a model the registry does not hold. Every\n * relation in a generated artifact was emitted from a model in the same\n * `schema.prisma`, so this can only mean the artifact and the registry disagree.\n */\nexport class UnregisteredRelationTargetError extends Error {\n constructor(\n public readonly model: string,\n public readonly relation: string,\n public readonly target: string,\n known: string[],\n ) {\n super(\n `${model}.${relation} points at model '${target}', which nothing has ` +\n `registered. The generated artifact and the registry disagree: re-run ` +\n `\\`prisma generate\\`, and check that app/models/generated/index.ts is ` +\n `imported. ` +\n (known.length > 0\n ? `Registered models: ${known.join(\", \")}.`\n : `Nothing is registered at all.`),\n );\n this.name = \"UnregisteredRelationTargetError\";\n }\n}\n\n/**\n * Thrown when a relation is registered on both sides but the two sides do not\n * describe a link the planner can follow: no matching `relationName` on the\n * other model, or a `from` / `to` naming a field that is not there. Like\n * `UnregisteredRelationTargetError`, it means a stale generated artifact — a\n * consistent one cannot produce it.\n */\nexport class MalformedRelationError extends Error {\n constructor(\n public readonly model: string,\n public readonly relation: string,\n detail: string,\n ) {\n super(\n `Cannot resolve how ${model}.${relation} joins: ${detail} This means ` +\n `app/models/generated is stale or hand-edited — re-run ` +\n `\\`prisma generate\\`.`,\n );\n this.name = \"MalformedRelationError\";\n }\n}\n\n/** Thrown when a relation resolves to a model name nothing registered. */\nexport class ModelNotRegisteredError extends Error {\n constructor(name: string, known: string[]) {\n super(\n `No model is registered under the name '${name}'. ` +\n (known.length > 0\n ? `Registered models: ${known.join(\", \")}.`\n : `Nothing is registered — is app/models/generated/index.ts imported?`),\n );\n this.name = \"ModelNotRegisteredError\";\n }\n}\n\n/** Thrown when a model class is used before the generator has given it a schema. */\nexport class MissingModelSchemaError extends Error {\n constructor(className: string) {\n super(\n `${className} has no $schema. Model subclasses must extend a generated ` +\n `base class from app/models/generated/models.ts.`,\n );\n this.name = \"MissingModelSchemaError\";\n }\n}\n\n/**\n * A `lock` asked for outside a transaction.\n *\n * A row lock is held until the transaction that took it ends. Outside one, the\n * statement is its own transaction, so the lock is released the moment the row\n * comes back — before the write it was meant to guard has even been issued. The\n * read would succeed and protect nothing, which is the failure this refuses: the\n * race the lock was written to close stays open, silently.\n *\n * Raised on SQLite too, where the lock itself compiles to nothing, so code that\n * forgot its transaction fails in development rather than first on Postgres.\n */\nexport class LockOutsideTransactionError extends Error {\n constructor(\n public readonly model: string,\n public readonly operation: string,\n ) {\n super(\n `${model}.${operation} was given 'lock' outside a transaction. A row ` +\n `lock lasts until the transaction that took it ends, so outside one it ` +\n `is released as soon as the row is read and protects nothing. Run the ` +\n `read and the writes it guards inside Model.transaction(async () => { ` +\n `... }).`,\n );\n this.name = \"LockOutsideTransactionError\";\n }\n}\n"
6
6
  ],
7
7
  "mappings": "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",
8
- "debugId": "8AF2550E5FFCFA7A64756E2164756E21",
8
+ "debugId": "6B27F18A4A7B383564756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{Q as I}from"./chunk-mp3ecfnh.js";import{_ as A}from"./chunk-0hqg6ema.js";import"./chunk-0t531zdt.js";import{aa as f}from"./chunk-wckbrbzx.js";import{tl as t,xl as T}from"./chunk-baj76zja.js";var N=t(I(),1),a=t(f(),1),d=t(A(),1);import{readFileSync as g}from"fs";var c=(e)=>async(s)=>{e.logger?.debug("@aws-sdk/credential-provider-web-identity - fromWebToken");let{roleArn:o,roleSessionName:r,webIdentityToken:i,providerId:n,policyArns:m,policy:S,durationSeconds:l}=e,{roleAssumerWithWebIdentity:E}=e;if(!E){let{getDefaultRoleAssumerWithWebIdentity:p}=await import("./chunk-yhgt9dxj.js").then((m)=>t(m.default,1));E=p({...e.clientConfig,credentialProviderLogger:e.logger,parentClientConfig:{...s?.callerClientConfig,...e.parentClientConfig}},e.clientPlugins)}return E({RoleArn:o,RoleSessionName:r??`aws-sdk-js-session-${Date.now()}`,WebIdentityToken:i,ProviderId:n,PolicyArns:m,Policy:S,DurationSeconds:l})};var _="AWS_WEB_IDENTITY_TOKEN_FILE",O="AWS_ROLE_ARN",k="AWS_ROLE_SESSION_NAME",L=(e={})=>async(s)=>{e.logger?.debug("@aws-sdk/credential-provider-web-identity - fromTokenFile");let o=e?.webIdentityTokenFile??process.env[_],r=e?.roleArn??process.env[O],i=e?.roleSessionName??process.env[k];if(!o||!r)throw new a.CredentialsProviderError("Web identity configuration not specified",{logger:e.logger});let n=await c({...e,webIdentityToken:d.externalDataInterceptor?.getTokenRecord?.()[o]??g(o,{encoding:"ascii"}),roleArn:r,roleSessionName:i})(s);if(o===process.env[_])N.setCredentialFeature(n,"CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN","h");return n};export{c as fromWebToken,L as fromTokenFile};
2
+ import{Q as I}from"./chunk-wg0ttent.js";import{_ as A}from"./chunk-dce3w52r.js";import"./chunk-p83cjehh.js";import{aa as f}from"./chunk-56a3vnrj.js";import{vl as t,zl as T}from"./chunk-78wht1ph.js";var N=t(I(),1),a=t(f(),1),d=t(A(),1);import{readFileSync as g}from"fs";var c=(e)=>async(s)=>{e.logger?.debug("@aws-sdk/credential-provider-web-identity - fromWebToken");let{roleArn:o,roleSessionName:r,webIdentityToken:i,providerId:n,policyArns:m,policy:S,durationSeconds:l}=e,{roleAssumerWithWebIdentity:E}=e;if(!E){let{getDefaultRoleAssumerWithWebIdentity:p}=await import("./chunk-zfbqgzwa.js").then((m)=>t(m.default,1));E=p({...e.clientConfig,credentialProviderLogger:e.logger,parentClientConfig:{...s?.callerClientConfig,...e.parentClientConfig}},e.clientPlugins)}return E({RoleArn:o,RoleSessionName:r??`aws-sdk-js-session-${Date.now()}`,WebIdentityToken:i,ProviderId:n,PolicyArns:m,Policy:S,DurationSeconds:l})};var _="AWS_WEB_IDENTITY_TOKEN_FILE",O="AWS_ROLE_ARN",k="AWS_ROLE_SESSION_NAME",L=(e={})=>async(s)=>{e.logger?.debug("@aws-sdk/credential-provider-web-identity - fromTokenFile");let o=e?.webIdentityTokenFile??process.env[_],r=e?.roleArn??process.env[O],i=e?.roleSessionName??process.env[k];if(!o||!r)throw new a.CredentialsProviderError("Web identity configuration not specified",{logger:e.logger});let n=await c({...e,webIdentityToken:d.externalDataInterceptor?.getTokenRecord?.()[o]??g(o,{encoding:"ascii"}),roleArn:r,roleSessionName:i})(s);if(o===process.env[_])N.setCredentialFeature(n,"CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN","h");return n};export{c as fromWebToken,L as fromTokenFile};
3
3
 
4
- //# debugId=FA2A24EA2C7DCF2664756E2164756E21
4
+ //# debugId=C51A31A584BD44D064756E2164756E21
@@ -6,6 +6,6 @@
6
6
  "export const fromWebToken = (init) => async (awsIdentityProperties) => {\n init.logger?.debug(\"@aws-sdk/credential-provider-web-identity - fromWebToken\");\n const { roleArn, roleSessionName, webIdentityToken, providerId, policyArns, policy, durationSeconds } = init;\n let { roleAssumerWithWebIdentity } = init;\n if (!roleAssumerWithWebIdentity) {\n const { getDefaultRoleAssumerWithWebIdentity } = await import(\"@aws-sdk/nested-clients/sts\");\n roleAssumerWithWebIdentity = getDefaultRoleAssumerWithWebIdentity({\n ...init.clientConfig,\n credentialProviderLogger: init.logger,\n parentClientConfig: {\n ...awsIdentityProperties?.callerClientConfig,\n ...init.parentClientConfig,\n },\n }, init.clientPlugins);\n }\n return roleAssumerWithWebIdentity({\n RoleArn: roleArn,\n RoleSessionName: roleSessionName ?? `aws-sdk-js-session-${Date.now()}`,\n WebIdentityToken: webIdentityToken,\n ProviderId: providerId,\n PolicyArns: policyArns,\n Policy: policy,\n DurationSeconds: durationSeconds,\n });\n};\n"
7
7
  ],
8
8
  "mappings": ";8NAAA,SACA,KACA,KACA,iBAAS,WCHF,IAAM,EAAe,CAAC,IAAS,MAAO,IAA0B,CACnE,EAAK,QAAQ,MAAM,0DAA0D,EAC7E,IAAQ,UAAS,kBAAiB,mBAAkB,aAAY,aAAY,SAAQ,mBAAoB,GAClG,8BAA+B,EACrC,GAAI,CAAC,EAA4B,CAC7B,IAAQ,wCAAyC,KAAa,yDAC9D,EAA6B,EAAqC,IAC3D,EAAK,aACR,yBAA0B,EAAK,OAC/B,mBAAoB,IACb,GAAuB,sBACvB,EAAK,kBACZ,CACJ,EAAG,EAAK,aAAa,EAEzB,OAAO,EAA2B,CAC9B,QAAS,EACT,gBAAiB,GAAmB,sBAAsB,KAAK,IAAI,IACnE,iBAAkB,EAClB,WAAY,EACZ,WAAY,EACZ,OAAQ,EACR,gBAAiB,CACrB,CAAC,GDlBL,IAAM,EAAiB,8BACjB,EAAe,eACf,EAAwB,wBACjB,EAAgB,CAAC,EAAO,CAAC,IAAM,MAAO,IAA0B,CACzE,EAAK,QAAQ,MAAM,2DAA2D,EAC9E,IAAM,EAAuB,GAAM,sBAAwB,QAAQ,IAAI,GACjE,EAAU,GAAM,SAAW,QAAQ,IAAI,GACvC,EAAkB,GAAM,iBAAmB,QAAQ,IAAI,GAC7D,GAAI,CAAC,GAAwB,CAAC,EAC1B,MAAM,IAAI,2BAAyB,2CAA4C,CAC3E,OAAQ,EAAK,MACjB,CAAC,EAEL,IAAM,EAAc,MAAM,EAAa,IAChC,EACH,iBAAkB,2BAAyB,iBAAiB,EAAE,IAC1D,EAAa,EAAsB,CAAE,SAAU,OAAQ,CAAC,EAC5D,UACA,iBACJ,CAAC,EAAE,CAAqB,EACxB,GAAI,IAAyB,QAAQ,IAAI,GACrC,uBAAqB,EAAa,wCAAyC,GAAG,EAElF,OAAO",
9
- "debugId": "FA2A24EA2C7DCF2664756E2164756E21",
9
+ "debugId": "C51A31A584BD44D064756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{R as S,T as h,U as u}from"./chunk-30gw44g9.js";import{ma as q,na as w}from"./chunk-mv1rs9he.js";import"./chunk-a22h5cby.js";import"./chunk-epvpmakp.js";import"./chunk-r3v2cnrj.js";import"./chunk-twrf6d08.js";import"./chunk-kk18xqgc.js";import"./chunk-403b2rfp.js";import{Li as N}from"./chunk-cee5gq7t.js";import{bl as C}from"./chunk-g8sh9btf.js";import{rl as y}from"./chunk-6tkkvaqg.js";import"./chunk-baj76zja.js";import{join as $J}from"path";import{createServer as zJ}from"vite";import{join as l}from"path";import{IncomingMessage as d,ServerResponse as p}from"http";import{Socket as i}from"net";function c(J){return J.replace(/\x1b\[[0-9;]*m/g,"").replace(/\[[0-9;]*m/g,"").replace(/\n\s*\n/g,`
2
+ import{R as S,T as h,U as u}from"./chunk-vp6t1gmt.js";import{ma as q,na as w}from"./chunk-9gt9qdge.js";import"./chunk-a22h5cby.js";import"./chunk-epvpmakp.js";import"./chunk-r3v2cnrj.js";import"./chunk-986eh0n3.js";import"./chunk-kk18xqgc.js";import"./chunk-dhq7zv0t.js";import{Ni as N}from"./chunk-xyyq577r.js";import{dl as C}from"./chunk-r5y2khw4.js";import{tl as y}from"./chunk-ah2jy1vx.js";import"./chunk-78wht1ph.js";import{join as $J}from"path";import{createServer as zJ}from"vite";import{join as l}from"path";import{IncomingMessage as d,ServerResponse as p}from"http";import{Socket as i}from"net";function c(J){return J.replace(/\x1b\[[0-9;]*m/g,"").replace(/\[[0-9;]*m/g,"").replace(/\n\s*\n/g,`
3
3
  `).split(`
4
4
  `).map((W)=>W.trim()).filter((W)=>W.length>0).join(`
5
5
  `).trim()}function _(J){return`
@@ -55,4 +55,4 @@ window.$RefreshSig$ = () => (type) => type;
55
55
  window.__vite_plugin_react_preamble_installed__ = true;
56
56
  `;function t(J){let{pathname:W}=new URL(J.url),Z=($)=>new Response($,{headers:{"Content-Type":"application/javascript"}});if(W===T)return Z(a);if(W.startsWith("/render-error.js"))return Z("window.render_error = true");if(W.startsWith("/refresh.js"))return Z(s);return null}function P(J,W,Z){let $=l(process.cwd(),"app");return async(z)=>{let{pathname:Q}=new URL(z.url),U=(G)=>{if(console.error(G),Z.ssrFixStacktrace?.(G),O(G),y(Q))return new Response(JSON.stringify({error:N("server_error",G?.message??String(G),500)}),{status:500,headers:{"Content-Type":"application/json"}});return globalThis.__gemiErrorPageServed=!0,new Response(_(I(G)),{status:500,headers:{"Content-Type":"text/html"}})},X=async(G)=>{let j=t(G);if(j)return j;try{let L=J.fetch.bind(J),K=await n(Z,G)??await L(G);if(K instanceof Response)return K;let A={},F={},D={},m=(Y,B)=>`"${Y}": () => import("${B}")`,b=[];for(let Y of["404",...J.getFlatComponentTree.call(J)]){if(Bun.env.NODE_ENV==="test")break;let B=`${process.env.APP_DIR}`,x=await V(Z).import(`${B}/views/${Y}.tsx`);A[Y]=x.default,F[Y]=x?.OpenGraph,D[Y]=x,b.push(m(Y,`/app/views/${Y}.tsx`))}let v=`{${b.join(",")}}`;return await K({getStyles:async(Y,B)=>await S($,Z,Y,B?.layout),resolveIsland:(Y)=>({src:`/${Y}${C}`,preload:[]}),buildId:"dev",bootstrapModules:[T],viewImportMap:A,viewModules:D,ogMap:F,loaders:v,cssManifest:{}})}catch(L){return U(L)}};return await W(z,(G)=>J.withGlobalMiddleware(G,X,U))}}function r(J){try{return Bun.listen({hostname:"0.0.0.0",port:J,socket:{data(){}}}).stop(!0),!0}catch(W){return W?.code!=="EADDRINUSE"}}function f(J,W=r){let Z=24678+(J-5173);if(Z>65471)Z=24678;for(let $=Z;$<Z+64;$++)if(W($))return $;throw Error(`Could not find a free port for Vite's HMR websocket: tried ${Z}-${Z+64-1}. Set one explicitly in gemi.config.ts as \`vite: { server: { ws: { port } } }\`.`)}import{createServer as e}from"http";var JJ=new Set(["vite-hmr","vite-ping"]);async function R(J){let W=e((Z,$)=>{$.writeHead(426,{"Content-Type":"text/plain"}),$.end("Upgrade Required")});return await new Promise((Z,$)=>{W.once("error",$),W.listen(J,"127.0.0.1",()=>{W.off("error",$),Z()})}),W}function k(J){if(!J||typeof J!=="object")return null;let Z=J.server?.address?.();if(Z&&typeof Z==="object"&&"port"in Z)return Number(Z.port)||null;return null}function E(J){if(J.headers.get("upgrade")?.toLowerCase()!=="websocket")return!1;return JJ.has(J.headers.get("sec-websocket-protocol")??"")}var WJ=(J)=>typeof J==="string"?J:new Uint8Array(J);async function g(J,W,Z){let $=new URL(J.url),z=J.headers.get("sec-websocket-protocol")??"vite-hmr",Q={host:J.headers.get("host")??$.host},U=J.headers.get("origin");if(U)Q.origin=U;let X=new WebSocket(`ws://127.0.0.1:${Z}${$.pathname}${$.search}`,{protocols:[z],headers:Q});X.binaryType="arraybuffer";let G={upstream:X,early:[]};if(X.onmessage=(K)=>{let A=WJ(K.data);if(G.browser)G.browser.send(A);else G.early.push(A)},X.onclose=(K)=>{G.browser?.close(ZJ(K.code),K.reason)},X.onerror=()=>{},!await new Promise((K)=>{X.addEventListener("open",()=>K(!0),{once:!0}),X.addEventListener("close",()=>K(!1),{once:!0})}))return new Response("Vite refused the HMR websocket",{status:403});if(!W.upgrade(J,{headers:{"Sec-WebSocket-Protocol":z},data:G}))return X.close(),new Response("WebSocket upgrade failed",{status:400});return}function ZJ(J){if(J===1000||J>=1001&&J<=1003||J>=1007&&J<=1014)return J;if(J>=3000&&J<=4999)return J;return 1000}var H={open(J){let W=J.data;for(let Z of W.early)J.send(Z);if(W.early=[],W.browser=J,W.upstream.readyState!==WebSocket.OPEN)J.close(1000)},message(J,W){if(J.data.upstream.readyState===WebSocket.OPEN)J.data.upstream.send(W)},close(J){let{upstream:W}=J.data;if(W.readyState<=WebSocket.OPEN)W.close()}};function GJ(J,W){let Z=W.websocket,$=(z)=>z.data?.gemiSocket===!0;return{...W.socketOptions(),maxPayloadLength:16777216,closeOnBackpressureLimit:!1,open:(z)=>$(z)?Z.open?.(z):J.open?.(z),message:(z,Q)=>$(z)?Z.message(z,Q):J.message(z,Q),close:(z,Q,U)=>$(z)?Z.close?.(z,Q,U):J.close?.(z,Q,U)}}var M=process.cwd(),QJ=$J(M,"app");if(!globalThis.__gemiErrorHooked)globalThis.__gemiErrorHooked=!0,process.on("unhandledRejection",(J)=>{console.error(J),O(J)}),process.on("uncaughtException",(J)=>{console.error(J),O(J)});async function TJ(J,W){let Z=Number(process.env.PORT)||5173,$=u(),z=Boolean(globalThis.__gemiVite),Q=globalThis.__gemiVite??=await zJ({configFile:!1,plugins:[w()],server:{middlewareMode:!0,port:Z,ws:{server:await R(f(Z))},allowedHosts:J.devAllowedHosts.call(J),watch:{ignored:(L)=>{let K=L.split(/[/\\]/).pop()??"";return K===".env"||K.startsWith(".env.")}}},appType:"custom",resolve:{dedupe:["react","react-dom"]},optimizeDeps:{include:["react","react-dom","react-dom/client"]},ssr:{external:[...q]}});process.env.ROOT_DIR=M,process.env.APP_DIR=QJ;let U=P(J,W,Q),X=k(Q.config?.server?.ws),G=J.sockets(),j=Bun.serve({port:Z,idleTimeout:$,fetch:(L,K)=>{if(X!==null&&E(L))return g(L,K,X);if(J.applyTrustedClientIp(L),G?.matches(L))return G.upgrade(L,K);return U(L)},websocket:G?GJ(H,G):H});if(await G?.start(j),z)V(Q).clearCache();if(z)if(globalThis.__gemiErrorActive&&globalThis.__gemiErrorPageServed)globalThis.__gemiErrorActive=!1,globalThis.__gemiErrorPageServed=!1,Q.ws.send({type:"full-reload"});else globalThis.__gemiErrorActive=!1,Q.ws.send({type:"custom",event:"http-reload"});else h({port:j.port,rootDir:M});return j}export{I as viteErrorPayload,TJ as httpDev};
57
57
 
58
- //# debugId=9ABCE666B9B0A2A564756E2164756E21
58
+ //# debugId=05AED464954BD00464756E2164756E21
@@ -9,6 +9,6 @@
9
9
  "import { createServer, type Server as NodeServer } from \"node:http\";\n\nimport type { Server, ServerWebSocket, WebSocketHandler } from \"bun\";\n\n// Vite's HMR websocket, carried on the dev server's own port.\n//\n// In middleware mode Vite has no HTTP server of its own, so by default it\n// stands up a second one for the websocket, on a second port (see\n// `hmrPort.ts`), and tells the browser to connect to `<page host>:<that port>`.\n// A reverse proxy or tunnel (ngrok, a container port mapping, a phone on the\n// LAN through https) only carries the port the page came from, so HMR could\n// not connect there, and the client logged connection failures forever.\n//\n// Vite can attach its websocket to a server it is handed (`server.ws.server`)\n// instead, and then tells the browser to connect to the page's own origin. That\n// server has to be a Node `http.Server`; the dev server is `Bun.serve`. So:\n//\n// - the Node server Vite is handed listens on loopback only, on the port\n// `resolveHmrPort` picked, and answers nothing but websocket upgrades;\n// - `Bun.serve` accepts the browser's upgrade on the page's origin and relays\n// frames both ways to that loopback server.\n//\n// The relay forwards the browser's `Host` and `Origin` and the request's query\n// (the `token`), so Vite still runs its own host and token checks against what\n// the browser actually sent.\n\n/** The subprotocols Vite's client opens its sockets with. */\nconst VITE_PROTOCOLS = new Set([\"vite-hmr\", \"vite-ping\"]);\n\n/**\n * Start the loopback Node server Vite attaches its HMR websocket to.\n * Everything but an upgrade gets `426 Upgrade Required`, as Vite's own\n * websocket server answers.\n */\nexport async function listenHmrServer(port: number): Promise<NodeServer> {\n const server = createServer((_req, res) => {\n res.writeHead(426, { \"Content-Type\": \"text/plain\" });\n res.end(\"Upgrade Required\");\n });\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, \"127.0.0.1\", () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n return server;\n}\n\n/**\n * The loopback port to relay to, read from the config Vite actually resolved,\n * so an app that set its own `server.ws` in `gemi.config.ts` is relayed to\n * where Vite really is, or not relayed at all. `null` when Vite was not given\n * a server (its websocket is then on a port of its own, and the client goes\n * there directly) or when HMR is off.\n */\nexport function hmrRelayPort(wsConfig: unknown): number | null {\n if (!wsConfig || typeof wsConfig !== \"object\") return null;\n const server = (wsConfig as { server?: { address?: () => unknown } }).server;\n const address = server?.address?.();\n if (address && typeof address === \"object\" && \"port\" in address) {\n return Number((address as { port: number }).port) || null;\n }\n return null;\n}\n\n/** Whether a request is the Vite client opening its HMR (or ping) socket. */\nexport function isHmrUpgrade(req: Request): boolean {\n if (req.headers.get(\"upgrade\")?.toLowerCase() !== \"websocket\") return false;\n return VITE_PROTOCOLS.has(req.headers.get(\"sec-websocket-protocol\") ?? \"\");\n}\n\nexport type HmrRelayData = {\n /** The socket to Vite, already open when the browser's is accepted. */\n upstream: WebSocket;\n /** Frames Vite sent before the browser's socket opened (its `connected`). */\n early: (string | Uint8Array)[];\n browser?: ServerWebSocket<HmrRelayData>;\n};\n\ntype Frame = string | Uint8Array;\n\nconst frameOf = (data: unknown): Frame =>\n typeof data === \"string\" ? data : new Uint8Array(data as ArrayBuffer);\n\n/**\n * Open the socket to Vite first, and accept the browser's upgrade only once\n * Vite has accepted it. Returns `undefined` once Bun has taken the request\n * over, or a refusal.\n *\n * The order matters. Vite refuses a socket whose host is not in\n * `allowedHosts`, or a cross-origin one without its token. Had the browser's\n * socket been accepted first and closed when Vite refused, the client would\n * read that as \"server connection lost\", ping (which Vite always answers),\n * and reload the page, forever. Refused before it opens, the client logs one\n * \"failed to connect to websocket\" and the page keeps working.\n */\nexport async function upgradeHmr(\n req: Request,\n server: Server<HmrRelayData>,\n port: number,\n): Promise<Response | undefined> {\n const url = new URL(req.url);\n const protocol = req.headers.get(\"sec-websocket-protocol\") ?? \"vite-hmr\";\n // `Host` is what Vite's `allowedHosts` check reads; the URL's host is the\n // same value `Bun.serve` derived it from.\n const headers: Record<string, string> = {\n host: req.headers.get(\"host\") ?? url.host,\n };\n const origin = req.headers.get(\"origin\");\n if (origin) headers.origin = origin;\n\n const upstream = new WebSocket(\n `ws://127.0.0.1:${port}${url.pathname}${url.search}`,\n {\n protocols: [protocol],\n headers,\n } as any,\n );\n upstream.binaryType = \"arraybuffer\";\n const data: HmrRelayData = { upstream, early: [] };\n\n upstream.onmessage = (event) => {\n const frame = frameOf(event.data);\n if (data.browser) data.browser.send(frame);\n else data.early.push(frame);\n };\n upstream.onclose = (event) => {\n data.browser?.close(sendableCloseCode(event.code), event.reason);\n };\n upstream.onerror = () => {\n // A `close` follows; it ends the browser's socket if there is one.\n };\n\n const opened = await new Promise<boolean>((resolve) => {\n upstream.addEventListener(\"open\", () => resolve(true), { once: true });\n upstream.addEventListener(\"close\", () => resolve(false), { once: true });\n });\n if (!opened) {\n return new Response(\"Vite refused the HMR websocket\", { status: 403 });\n }\n\n const upgraded = server.upgrade(req, {\n // The browser fails a connection whose response does not echo the\n // subprotocol it asked for.\n headers: { \"Sec-WebSocket-Protocol\": protocol },\n data,\n });\n if (!upgraded) {\n upstream.close();\n return new Response(\"WebSocket upgrade failed\", { status: 400 });\n }\n return undefined;\n}\n\n// A close code that may be sent in a close frame. 1005, 1006 and 1015 are\n// reported locally and never sent.\nfunction sendableCloseCode(code: number): number {\n if (\n code === 1000 ||\n (code >= 1001 && code <= 1003) ||\n (code >= 1007 && code <= 1014)\n ) {\n return code;\n }\n if (code >= 3000 && code <= 4999) return code;\n return 1000;\n}\n\n/** `Bun.serve`'s `websocket` option: relays frames to and from Vite. */\nexport const hmrRelayHandler: WebSocketHandler<HmrRelayData> = {\n open(ws: ServerWebSocket<HmrRelayData>) {\n const data = ws.data;\n for (const frame of data.early) ws.send(frame);\n data.early = [];\n data.browser = ws;\n // Vite may have hung up while the upgrade was in flight.\n if (data.upstream.readyState !== WebSocket.OPEN) ws.close(1000);\n },\n message(ws: ServerWebSocket<HmrRelayData>, message) {\n if (ws.data.upstream.readyState === WebSocket.OPEN) {\n ws.data.upstream.send(message);\n }\n },\n close(ws: ServerWebSocket<HmrRelayData>) {\n const { upstream } = ws.data;\n if (upstream.readyState <= WebSocket.OPEN) upstream.close();\n },\n};\n"
10
10
  ],
11
11
  "mappings": "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",
12
- "debugId": "9ABCE666B9B0A2A564756E2164756E21",
12
+ "debugId": "05AED464954BD00464756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{$ as re}from"./chunk-0t531zdt.js";import{ul as _,xl as a}from"./chunk-baj76zja.js";var I=_((b)=>{Object.defineProperty(b,"__esModule",{value:!0});b.getHomeDir=void 0;var W=a("os"),V=a("path"),x={},G=()=>{if(process&&process.geteuid)return`${process.geteuid()}`;return"DEFAULT"},U=()=>{let{HOME:e,USERPROFILE:t,HOMEPATH:r,HOMEDRIVE:o=`C:${V.sep}`}=process.env;if(e)return e;if(t)return t;if(r)return`${o}${r}`;let i=G();if(!x[i])x[i]=(0,W.homedir)();return x[i]};b.getHomeDir=U});var P=_((j)=>{Object.defineProperty(j,"__esModule",{value:!0});j.getSSOTokenFilepath=void 0;var X=a("crypto"),B=a("path"),J=I(),z=(e)=>{let r=(0,X.createHash)("sha1").update(e).digest("hex");return(0,B.join)((0,J.getHomeDir)(),".aws","sso","cache",`${r}.json`)};j.getSSOTokenFilepath=z});var R=_((C)=>{Object.defineProperty(C,"__esModule",{value:!0});C.getSSOTokenFromFile=C.tokenIntercept=void 0;var Q=a("fs/promises"),Y=P();C.tokenIntercept={};var Z=async(e)=>{if(C.tokenIntercept[e])return C.tokenIntercept[e];let t=(0,Y.getSSOTokenFilepath)(e),r=await(0,Q.readFile)(t,"utf8");return JSON.parse(r)};C.getSSOTokenFromFile=Z});var k=_((L)=>{Object.defineProperty(L,"__esModule",{value:!0});L.readFile=L.fileIntercept=L.filePromises=void 0;var ee=a("fs/promises");L.filePromises={};L.fileIntercept={};var te=(e,t)=>{if(L.fileIntercept[e]!==void 0)return L.fileIntercept[e];if(!L.filePromises[e]||t?.ignoreCache)L.filePromises[e]=(0,ee.readFile)(e,"utf8");return L.filePromises[e]};L.readFile=te});var ye=_((c)=>{var l=I(),O=P(),y=R(),g=a("path"),S=re(),f=k(),q="AWS_PROFILE",$="default",oe=(e)=>e.profile||process.env[q]||$,p=".",ie=(e)=>Object.entries(e).filter(([t])=>{let r=t.indexOf(p);if(r===-1)return!1;return Object.values(S.IniSectionType).includes(t.substring(0,r))}).reduce((t,[r,o])=>{let i=r.indexOf(p),n=r.substring(0,i)===S.IniSectionType.PROFILE?r.substring(i+1):r;return t[n]=o,t},{...e.default&&{default:e.default}}),ne="AWS_CONFIG_FILE",M=()=>process.env[ne]||g.join(l.getHomeDir(),".aws","config"),se="AWS_SHARED_CREDENTIALS_FILE",ce=()=>process.env[se]||g.join(l.getHomeDir(),".aws","credentials"),ae=/^([\w-]+)\s(["'])?([\w-@\+\.%:/]+)\2$/,le=["__proto__","profile __proto__"],T=(e)=>{let t={},r,o;for(let i of e.split(/\r?\n/)){let n=i.split(/(^|\s)[;#]/)[0].trim();if(n[0]==="["&&n[n.length-1]==="]"){r=void 0,o=void 0;let s=n.substring(1,n.length-1),u=ae.exec(s);if(u){let[,d,,m]=u;if(Object.values(S.IniSectionType).includes(d))r=[d,m].join(p)}else r=s;if(le.includes(s))throw Error(`Found invalid profile name "${s}"`)}else if(r){let s=n.indexOf("=");if(![0,-1].includes(s)){let[u,d]=[n.substring(0,s).trim(),n.substring(s+1).trim()];if(d==="")o=u;else{if(o&&i.trimStart()===i)o=void 0;t[r]=t[r]||{};let m=o?[o,u].join(p):u;t[r][m]=d}}}}return t},A=()=>({}),K=async(e={})=>{let{filepath:t=ce(),configFilepath:r=M()}=e,o=l.getHomeDir(),i="~/",n=t;if(t.startsWith("~/"))n=g.join(o,t.slice(2));let h=r;if(r.startsWith("~/"))h=g.join(o,r.slice(2));let s=await Promise.all([f.readFile(h,{ignoreCache:e.ignoreCache}).then(T).then(ie).catch(A),f.readFile(n,{ignoreCache:e.ignoreCache}).then(T).catch(A)]);return{configFile:s[0],credentialsFile:s[1]}},pe=(e)=>Object.entries(e).filter(([t])=>t.startsWith(S.IniSectionType.SSO_SESSION+p)).reduce((t,[r,o])=>({...t,[r.substring(r.indexOf(p)+1)]:o}),{}),ue=()=>({}),fe=async(e={})=>f.readFile(e.configFilepath??M()).then(T).then(pe).catch(ue),de=(...e)=>{let t={};for(let r of e)for(let[o,i]of Object.entries(r))if(t[o]!==void 0)Object.assign(t[o],i);else t[o]=i;return t},_e=async(e)=>{let t=await K(e);return de(t.configFile,t.credentialsFile)},Fe={getFileRecord(){return f.fileIntercept},interceptFile(e,t){f.fileIntercept[e]=Promise.resolve(t)},getTokenRecord(){return y.tokenIntercept},interceptToken(e,t){y.tokenIntercept[e]=t}};c.getSSOTokenFromFile=y.getSSOTokenFromFile;c.readFile=f.readFile;c.CONFIG_PREFIX_SEPARATOR=p;c.DEFAULT_PROFILE=$;c.ENV_PROFILE=q;c.externalDataInterceptor=Fe;c.getProfileName=oe;c.loadSharedConfigFiles=K;c.loadSsoSessionData=fe;c.parseKnownFiles=_e;Object.prototype.hasOwnProperty.call(l,"__proto__")&&!Object.prototype.hasOwnProperty.call(c,"__proto__")&&Object.defineProperty(c,"__proto__",{enumerable:!0,value:l.__proto__});Object.keys(l).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(c,e))c[e]=l[e]});Object.prototype.hasOwnProperty.call(O,"__proto__")&&!Object.prototype.hasOwnProperty.call(c,"__proto__")&&Object.defineProperty(c,"__proto__",{enumerable:!0,value:O.__proto__});Object.keys(O).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(c,e))c[e]=O[e]})});
2
+ import{$ as re}from"./chunk-p83cjehh.js";import{wl as _,zl as a}from"./chunk-78wht1ph.js";var I=_((b)=>{Object.defineProperty(b,"__esModule",{value:!0});b.getHomeDir=void 0;var W=a("os"),V=a("path"),x={},G=()=>{if(process&&process.geteuid)return`${process.geteuid()}`;return"DEFAULT"},U=()=>{let{HOME:e,USERPROFILE:t,HOMEPATH:r,HOMEDRIVE:o=`C:${V.sep}`}=process.env;if(e)return e;if(t)return t;if(r)return`${o}${r}`;let i=G();if(!x[i])x[i]=(0,W.homedir)();return x[i]};b.getHomeDir=U});var P=_((j)=>{Object.defineProperty(j,"__esModule",{value:!0});j.getSSOTokenFilepath=void 0;var X=a("crypto"),B=a("path"),J=I(),z=(e)=>{let r=(0,X.createHash)("sha1").update(e).digest("hex");return(0,B.join)((0,J.getHomeDir)(),".aws","sso","cache",`${r}.json`)};j.getSSOTokenFilepath=z});var R=_((C)=>{Object.defineProperty(C,"__esModule",{value:!0});C.getSSOTokenFromFile=C.tokenIntercept=void 0;var Q=a("fs/promises"),Y=P();C.tokenIntercept={};var Z=async(e)=>{if(C.tokenIntercept[e])return C.tokenIntercept[e];let t=(0,Y.getSSOTokenFilepath)(e),r=await(0,Q.readFile)(t,"utf8");return JSON.parse(r)};C.getSSOTokenFromFile=Z});var k=_((L)=>{Object.defineProperty(L,"__esModule",{value:!0});L.readFile=L.fileIntercept=L.filePromises=void 0;var ee=a("fs/promises");L.filePromises={};L.fileIntercept={};var te=(e,t)=>{if(L.fileIntercept[e]!==void 0)return L.fileIntercept[e];if(!L.filePromises[e]||t?.ignoreCache)L.filePromises[e]=(0,ee.readFile)(e,"utf8");return L.filePromises[e]};L.readFile=te});var ye=_((c)=>{var l=I(),O=P(),y=R(),g=a("path"),S=re(),f=k(),q="AWS_PROFILE",$="default",oe=(e)=>e.profile||process.env[q]||$,p=".",ie=(e)=>Object.entries(e).filter(([t])=>{let r=t.indexOf(p);if(r===-1)return!1;return Object.values(S.IniSectionType).includes(t.substring(0,r))}).reduce((t,[r,o])=>{let i=r.indexOf(p),n=r.substring(0,i)===S.IniSectionType.PROFILE?r.substring(i+1):r;return t[n]=o,t},{...e.default&&{default:e.default}}),ne="AWS_CONFIG_FILE",M=()=>process.env[ne]||g.join(l.getHomeDir(),".aws","config"),se="AWS_SHARED_CREDENTIALS_FILE",ce=()=>process.env[se]||g.join(l.getHomeDir(),".aws","credentials"),ae=/^([\w-]+)\s(["'])?([\w-@\+\.%:/]+)\2$/,le=["__proto__","profile __proto__"],T=(e)=>{let t={},r,o;for(let i of e.split(/\r?\n/)){let n=i.split(/(^|\s)[;#]/)[0].trim();if(n[0]==="["&&n[n.length-1]==="]"){r=void 0,o=void 0;let s=n.substring(1,n.length-1),u=ae.exec(s);if(u){let[,d,,m]=u;if(Object.values(S.IniSectionType).includes(d))r=[d,m].join(p)}else r=s;if(le.includes(s))throw Error(`Found invalid profile name "${s}"`)}else if(r){let s=n.indexOf("=");if(![0,-1].includes(s)){let[u,d]=[n.substring(0,s).trim(),n.substring(s+1).trim()];if(d==="")o=u;else{if(o&&i.trimStart()===i)o=void 0;t[r]=t[r]||{};let m=o?[o,u].join(p):u;t[r][m]=d}}}}return t},A=()=>({}),K=async(e={})=>{let{filepath:t=ce(),configFilepath:r=M()}=e,o=l.getHomeDir(),i="~/",n=t;if(t.startsWith("~/"))n=g.join(o,t.slice(2));let h=r;if(r.startsWith("~/"))h=g.join(o,r.slice(2));let s=await Promise.all([f.readFile(h,{ignoreCache:e.ignoreCache}).then(T).then(ie).catch(A),f.readFile(n,{ignoreCache:e.ignoreCache}).then(T).catch(A)]);return{configFile:s[0],credentialsFile:s[1]}},pe=(e)=>Object.entries(e).filter(([t])=>t.startsWith(S.IniSectionType.SSO_SESSION+p)).reduce((t,[r,o])=>({...t,[r.substring(r.indexOf(p)+1)]:o}),{}),ue=()=>({}),fe=async(e={})=>f.readFile(e.configFilepath??M()).then(T).then(pe).catch(ue),de=(...e)=>{let t={};for(let r of e)for(let[o,i]of Object.entries(r))if(t[o]!==void 0)Object.assign(t[o],i);else t[o]=i;return t},_e=async(e)=>{let t=await K(e);return de(t.configFile,t.credentialsFile)},Fe={getFileRecord(){return f.fileIntercept},interceptFile(e,t){f.fileIntercept[e]=Promise.resolve(t)},getTokenRecord(){return y.tokenIntercept},interceptToken(e,t){y.tokenIntercept[e]=t}};c.getSSOTokenFromFile=y.getSSOTokenFromFile;c.readFile=f.readFile;c.CONFIG_PREFIX_SEPARATOR=p;c.DEFAULT_PROFILE=$;c.ENV_PROFILE=q;c.externalDataInterceptor=Fe;c.getProfileName=oe;c.loadSharedConfigFiles=K;c.loadSsoSessionData=fe;c.parseKnownFiles=_e;Object.prototype.hasOwnProperty.call(l,"__proto__")&&!Object.prototype.hasOwnProperty.call(c,"__proto__")&&Object.defineProperty(c,"__proto__",{enumerable:!0,value:l.__proto__});Object.keys(l).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(c,e))c[e]=l[e]});Object.prototype.hasOwnProperty.call(O,"__proto__")&&!Object.prototype.hasOwnProperty.call(c,"__proto__")&&Object.defineProperty(c,"__proto__",{enumerable:!0,value:O.__proto__});Object.keys(O).forEach(function(e){if(e!=="default"&&!Object.prototype.hasOwnProperty.call(c,e))c[e]=O[e]})});
3
3
  export{ye as _};
4
4
 
5
- //# debugId=A820EEFE03B31CCA64756E2164756E21
5
+ //# debugId=5F7CB2D2B02237CE64756E2164756E21
@@ -9,6 +9,6 @@
9
9
  "'use strict';\n\nvar getHomeDir = require('./getHomeDir');\nvar getSSOTokenFilepath = require('./getSSOTokenFilepath');\nvar getSSOTokenFromFile = require('./getSSOTokenFromFile');\nvar path = require('path');\nvar types = require('@smithy/types');\nvar readFile = require('./readFile');\n\nconst ENV_PROFILE = \"AWS_PROFILE\";\nconst DEFAULT_PROFILE = \"default\";\nconst getProfileName = (init) => init.profile || process.env[ENV_PROFILE] || DEFAULT_PROFILE;\n\nconst CONFIG_PREFIX_SEPARATOR = \".\";\n\nconst getConfigData = (data) => Object.entries(data)\n .filter(([key]) => {\n const indexOfSeparator = key.indexOf(CONFIG_PREFIX_SEPARATOR);\n if (indexOfSeparator === -1) {\n return false;\n }\n return Object.values(types.IniSectionType).includes(key.substring(0, indexOfSeparator));\n})\n .reduce((acc, [key, value]) => {\n const indexOfSeparator = key.indexOf(CONFIG_PREFIX_SEPARATOR);\n const updatedKey = key.substring(0, indexOfSeparator) === types.IniSectionType.PROFILE ? key.substring(indexOfSeparator + 1) : key;\n acc[updatedKey] = value;\n return acc;\n}, {\n ...(data.default && { default: data.default }),\n});\n\nconst ENV_CONFIG_PATH = \"AWS_CONFIG_FILE\";\nconst getConfigFilepath = () => process.env[ENV_CONFIG_PATH] || path.join(getHomeDir.getHomeDir(), \".aws\", \"config\");\n\nconst ENV_CREDENTIALS_PATH = \"AWS_SHARED_CREDENTIALS_FILE\";\nconst getCredentialsFilepath = () => process.env[ENV_CREDENTIALS_PATH] || path.join(getHomeDir.getHomeDir(), \".aws\", \"credentials\");\n\nconst prefixKeyRegex = /^([\\w-]+)\\s([\"'])?([\\w-@\\+\\.%:/]+)\\2$/;\nconst profileNameBlockList = [\"__proto__\", \"profile __proto__\"];\nconst parseIni = (iniData) => {\n const map = {};\n let currentSection;\n let currentSubSection;\n for (const iniLine of iniData.split(/\\r?\\n/)) {\n const trimmedLine = iniLine.split(/(^|\\s)[;#]/)[0].trim();\n const isSection = trimmedLine[0] === \"[\" && trimmedLine[trimmedLine.length - 1] === \"]\";\n if (isSection) {\n currentSection = undefined;\n currentSubSection = undefined;\n const sectionName = trimmedLine.substring(1, trimmedLine.length - 1);\n const matches = prefixKeyRegex.exec(sectionName);\n if (matches) {\n const [, prefix, , name] = matches;\n if (Object.values(types.IniSectionType).includes(prefix)) {\n currentSection = [prefix, name].join(CONFIG_PREFIX_SEPARATOR);\n }\n }\n else {\n currentSection = sectionName;\n }\n if (profileNameBlockList.includes(sectionName)) {\n throw new Error(`Found invalid profile name \"${sectionName}\"`);\n }\n }\n else if (currentSection) {\n const indexOfEqualsSign = trimmedLine.indexOf(\"=\");\n if (![0, -1].includes(indexOfEqualsSign)) {\n const [name, value] = [\n trimmedLine.substring(0, indexOfEqualsSign).trim(),\n trimmedLine.substring(indexOfEqualsSign + 1).trim(),\n ];\n if (value === \"\") {\n currentSubSection = name;\n }\n else {\n if (currentSubSection && iniLine.trimStart() === iniLine) {\n currentSubSection = undefined;\n }\n map[currentSection] = map[currentSection] || {};\n const key = currentSubSection ? [currentSubSection, name].join(CONFIG_PREFIX_SEPARATOR) : name;\n map[currentSection][key] = value;\n }\n }\n }\n }\n return map;\n};\n\nconst swallowError$1 = () => ({});\nconst loadSharedConfigFiles = async (init = {}) => {\n const { filepath = getCredentialsFilepath(), configFilepath = getConfigFilepath() } = init;\n const homeDir = getHomeDir.getHomeDir();\n const relativeHomeDirPrefix = \"~/\";\n let resolvedFilepath = filepath;\n if (filepath.startsWith(relativeHomeDirPrefix)) {\n resolvedFilepath = path.join(homeDir, filepath.slice(2));\n }\n let resolvedConfigFilepath = configFilepath;\n if (configFilepath.startsWith(relativeHomeDirPrefix)) {\n resolvedConfigFilepath = path.join(homeDir, configFilepath.slice(2));\n }\n const parsedFiles = await Promise.all([\n readFile.readFile(resolvedConfigFilepath, {\n ignoreCache: init.ignoreCache,\n })\n .then(parseIni)\n .then(getConfigData)\n .catch(swallowError$1),\n readFile.readFile(resolvedFilepath, {\n ignoreCache: init.ignoreCache,\n })\n .then(parseIni)\n .catch(swallowError$1),\n ]);\n return {\n configFile: parsedFiles[0],\n credentialsFile: parsedFiles[1],\n };\n};\n\nconst getSsoSessionData = (data) => Object.entries(data)\n .filter(([key]) => key.startsWith(types.IniSectionType.SSO_SESSION + CONFIG_PREFIX_SEPARATOR))\n .reduce((acc, [key, value]) => ({ ...acc, [key.substring(key.indexOf(CONFIG_PREFIX_SEPARATOR) + 1)]: value }), {});\n\nconst swallowError = () => ({});\nconst loadSsoSessionData = async (init = {}) => readFile.readFile(init.configFilepath ?? getConfigFilepath())\n .then(parseIni)\n .then(getSsoSessionData)\n .catch(swallowError);\n\nconst mergeConfigFiles = (...files) => {\n const merged = {};\n for (const file of files) {\n for (const [key, values] of Object.entries(file)) {\n if (merged[key] !== undefined) {\n Object.assign(merged[key], values);\n }\n else {\n merged[key] = values;\n }\n }\n }\n return merged;\n};\n\nconst parseKnownFiles = async (init) => {\n const parsedFiles = await loadSharedConfigFiles(init);\n return mergeConfigFiles(parsedFiles.configFile, parsedFiles.credentialsFile);\n};\n\nconst externalDataInterceptor = {\n getFileRecord() {\n return readFile.fileIntercept;\n },\n interceptFile(path, contents) {\n readFile.fileIntercept[path] = Promise.resolve(contents);\n },\n getTokenRecord() {\n return getSSOTokenFromFile.tokenIntercept;\n },\n interceptToken(id, contents) {\n getSSOTokenFromFile.tokenIntercept[id] = contents;\n },\n};\n\nexports.getSSOTokenFromFile = getSSOTokenFromFile.getSSOTokenFromFile;\nexports.readFile = readFile.readFile;\nexports.CONFIG_PREFIX_SEPARATOR = CONFIG_PREFIX_SEPARATOR;\nexports.DEFAULT_PROFILE = DEFAULT_PROFILE;\nexports.ENV_PROFILE = ENV_PROFILE;\nexports.externalDataInterceptor = externalDataInterceptor;\nexports.getProfileName = getProfileName;\nexports.loadSharedConfigFiles = loadSharedConfigFiles;\nexports.loadSsoSessionData = loadSsoSessionData;\nexports.parseKnownFiles = parseKnownFiles;\nObject.prototype.hasOwnProperty.call(getHomeDir, '__proto__') &&\n !Object.prototype.hasOwnProperty.call(exports, '__proto__') &&\n Object.defineProperty(exports, '__proto__', {\n enumerable: true,\n value: getHomeDir['__proto__']\n });\n\nObject.keys(getHomeDir).forEach(function (k) {\n if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = getHomeDir[k];\n});\nObject.prototype.hasOwnProperty.call(getSSOTokenFilepath, '__proto__') &&\n !Object.prototype.hasOwnProperty.call(exports, '__proto__') &&\n Object.defineProperty(exports, '__proto__', {\n enumerable: true,\n value: getSSOTokenFilepath['__proto__']\n });\n\nObject.keys(getSSOTokenFilepath).forEach(function (k) {\n if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = getSSOTokenFilepath[k];\n});\n"
10
10
  ],
11
11
  "mappings": "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",
12
- "debugId": "A820EEFE03B31CCA64756E2164756E21",
12
+ "debugId": "5F7CB2D2B02237CE64756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{rl as J}from"./chunk-6tkkvaqg.js";class L{kernel;onException;constructor(f){this.kernel=new f.kernel,this.kernel.boot.call(this.kernel),this.onException=f.onException??((A)=>{console.error("Unhandled exception in App:",A)})}async waitForBoot(){await this.kernel.waitForBoot()}getComponentTree(){return this.kernel.viewRoutes().componentTree}getFlatComponentTree(){let f=new Set;for(let A of this.kernel.domains().viewDispatchers())for(let C of A.flatComponentTree)f.add(C);return Array.from(f)}devAllowedHosts(){let f=this.kernel.domains();if(!f.resolver)return[];return f.acceptsCustomDomains?!0:[`.${f.resolver.root}`]}sockets(){return this.kernel.sockets.call(this.kernel)}applyTrustedClientIp(f){this.kernel.domains().applyClientIp(f)}getRouteManifest(){return this.kernel.viewRoutes().routeManifest}globallyGated=new WeakMap;async withGlobalMiddleware(f,A,C){let z;try{z=await this.kernel.run.call(this.kernel,()=>this.kernel.globalMiddleware(f))}catch(F){return await C(F)}if(z.refusal)return z.refusal;return this.globallyGated.set(f,z.carried),z.apply(await A(f))}async fetch(f){let A=new URL(f.url);return this.kernel.run.call(this.kernel,async()=>{this.applyTrustedClientIp(f);let C=this.globallyGated.has(f),z=C?null:await this.kernel.globalMiddleware(f),F=C?this.globallyGated.get(f):z.carried;if(z?.refusal)return z.refusal;let H=this.kernel.mcpHttp();if(H){let B=await H.handle(f);if(B)return z?z.apply(B):B}let I=this.kernel.domains(),D=await I.ask(f)??await I.route(f);if(D instanceof Response)return z?z.apply(D):D;if(!D){let B=new Response("Unknown host",{status:404});return z?z.apply(B):B}let G=J(A.pathname)?await D.api.handleApiRequest(f,F):await D.view.handleViewRequest(f,F);if(!z)return G;if(typeof G==="function"){let B=G;return async(...M)=>z.apply(await B(...M))}return z.apply(G)})}dispatchJob(f,A){return this.kernel.run.bind(this.kernel)(()=>{return this.kernel.queue().dispatchJob(f,A)})}shutdown(f){return this.kernel.shutdown(f)}destroy(){this.kernel.destroy()}clone(){return Object.assign(Object.create(Object.getPrototypeOf(this)),this)}}export{L as Da};
2
+ import{tl as J}from"./chunk-ah2jy1vx.js";class L{kernel;onException;constructor(f){this.kernel=new f.kernel,this.kernel.boot.call(this.kernel),this.onException=f.onException??((A)=>{console.error("Unhandled exception in App:",A)})}async waitForBoot(){await this.kernel.waitForBoot()}getComponentTree(){return this.kernel.viewRoutes().componentTree}getFlatComponentTree(){let f=new Set;for(let A of this.kernel.domains().viewDispatchers())for(let C of A.flatComponentTree)f.add(C);return Array.from(f)}devAllowedHosts(){let f=this.kernel.domains();if(!f.resolver)return[];return f.acceptsCustomDomains?!0:[`.${f.resolver.root}`]}sockets(){return this.kernel.sockets.call(this.kernel)}applyTrustedClientIp(f){this.kernel.domains().applyClientIp(f)}getRouteManifest(){return this.kernel.viewRoutes().routeManifest}globallyGated=new WeakMap;async withGlobalMiddleware(f,A,C){let z;try{z=await this.kernel.run.call(this.kernel,()=>this.kernel.globalMiddleware(f))}catch(F){return await C(F)}if(z.refusal)return z.refusal;return this.globallyGated.set(f,z.carried),z.apply(await A(f))}async fetch(f){let A=new URL(f.url);return this.kernel.run.call(this.kernel,async()=>{this.applyTrustedClientIp(f);let C=this.globallyGated.has(f),z=C?null:await this.kernel.globalMiddleware(f),F=C?this.globallyGated.get(f):z.carried;if(z?.refusal)return z.refusal;let H=this.kernel.mcpHttp();if(H){let B=await H.handle(f);if(B)return z?z.apply(B):B}let I=this.kernel.domains(),D=await I.ask(f)??await I.route(f);if(D instanceof Response)return z?z.apply(D):D;if(!D){let B=new Response("Unknown host",{status:404});return z?z.apply(B):B}let G=J(A.pathname)?await D.api.handleApiRequest(f,F):await D.view.handleViewRequest(f,F);if(!z)return G;if(typeof G==="function"){let B=G;return async(...M)=>z.apply(await B(...M))}return z.apply(G)})}dispatchJob(f,A){return this.kernel.run.bind(this.kernel)(()=>{return this.kernel.queue().dispatchJob(f,A)})}shutdown(f){return this.kernel.shutdown(f)}destroy(){this.kernel.destroy()}clone(){return Object.assign(Object.create(Object.getPrototypeOf(this)),this)}}export{L as Da};
3
3
 
4
- //# debugId=8D9748E90B3AED8264756E2164756E21
4
+ //# debugId=572E4952CD31F04A64756E2164756E21