@geekmidas/cli 10.0.0-alpha.62 → 10.0.0-alpha.64

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 (234) hide show
  1. package/README.md +2 -0
  2. package/dist/{HostingerProvider-DyD1Hin8.cjs → HostingerProvider-Bx2lHHvu.cjs} +3 -3
  3. package/dist/{HostingerProvider-DyD1Hin8.cjs.map → HostingerProvider-Bx2lHHvu.cjs.map} +1 -1
  4. package/dist/{HostingerProvider-B92qH4dC.mjs → HostingerProvider-Cd4aS5Kj.mjs} +2 -2
  5. package/dist/{HostingerProvider-B92qH4dC.mjs.map → HostingerProvider-Cd4aS5Kj.mjs.map} +1 -1
  6. package/dist/{LegacyStateStore-UHJEBLdn.cjs → LegacyStateStore-C2abV49N.cjs} +2 -2
  7. package/dist/{LegacyStateStore-UHJEBLdn.cjs.map → LegacyStateStore-C2abV49N.cjs.map} +1 -1
  8. package/dist/{LegacyStateStore-A8d2GdT7.mjs → LegacyStateStore-DIgkGaUP.mjs} +2 -2
  9. package/dist/{LegacyStateStore-A8d2GdT7.mjs.map → LegacyStateStore-DIgkGaUP.mjs.map} +1 -1
  10. package/dist/{LocalStateStore-B51rnfgn.mjs → LocalStateStore-Cy1ZBW7U.mjs} +2 -2
  11. package/dist/{LocalStateStore-B51rnfgn.mjs.map → LocalStateStore-Cy1ZBW7U.mjs.map} +1 -1
  12. package/dist/{LocalStateStore-COW3Ldwa.cjs → LocalStateStore-DiJqKyPy.cjs} +2 -2
  13. package/dist/{LocalStateStore-COW3Ldwa.cjs.map → LocalStateStore-DiJqKyPy.cjs.map} +1 -1
  14. package/dist/{OpenApiTsGenerator-BSrgw7B0.cjs → OpenApiTsGenerator-BWuDRHe9.cjs} +2 -2
  15. package/dist/{OpenApiTsGenerator-BSrgw7B0.cjs.map → OpenApiTsGenerator-BWuDRHe9.cjs.map} +1 -1
  16. package/dist/{OpenApiTsGenerator-q5B0z8Xg.mjs → OpenApiTsGenerator-C6v-IeHt.mjs} +2 -2
  17. package/dist/{OpenApiTsGenerator-q5B0z8Xg.mjs.map → OpenApiTsGenerator-C6v-IeHt.mjs.map} +1 -1
  18. package/dist/{S3StateStore-CJewPhgz.mjs → S3StateStore-D3x6ivBL.mjs} +2 -2
  19. package/dist/{S3StateStore-CJewPhgz.mjs.map → S3StateStore-D3x6ivBL.mjs.map} +1 -1
  20. package/dist/{S3StateStore-WUJGdRNL.cjs → S3StateStore-Ds0V1Lgm.cjs} +2 -2
  21. package/dist/{S3StateStore-WUJGdRNL.cjs.map → S3StateStore-Ds0V1Lgm.cjs.map} +1 -1
  22. package/dist/{SSMStateStore-Zejt42V8.cjs → SSMStateStore-CLipvx47.cjs} +2 -2
  23. package/dist/{SSMStateStore-Zejt42V8.cjs.map → SSMStateStore-CLipvx47.cjs.map} +1 -1
  24. package/dist/{SSMStateStore-iK5UKp9d.mjs → SSMStateStore-DfF174xQ.mjs} +2 -2
  25. package/dist/{SSMStateStore-iK5UKp9d.mjs.map → SSMStateStore-DfF174xQ.mjs.map} +1 -1
  26. package/dist/{bundler-CfH9frOS.cjs → bundler-C8uJf324.cjs} +4 -4
  27. package/dist/{bundler-CfH9frOS.cjs.map → bundler-C8uJf324.cjs.map} +1 -1
  28. package/dist/{bundler-DN5r4x5b.mjs → bundler-DYgm9xsd.mjs} +3 -3
  29. package/dist/{bundler-DN5r4x5b.mjs.map → bundler-DYgm9xsd.mjs.map} +1 -1
  30. package/dist/{cli-DYwxmfsW.mjs → cli-Bogz-zEj.mjs} +5 -4
  31. package/dist/{cli-DYwxmfsW.mjs.map → cli-Bogz-zEj.mjs.map} +1 -1
  32. package/dist/{cli-DOAUp80L.cjs → cli-D3jofJ6j.cjs} +7 -6
  33. package/dist/{cli-DOAUp80L.cjs.map → cli-D3jofJ6j.cjs.map} +1 -1
  34. package/dist/config-Be-4_I6H.d.cts +256 -0
  35. package/dist/config-Be-4_I6H.d.cts.map +1 -0
  36. package/dist/config-DqNRiQOp.d.mts +256 -0
  37. package/dist/config-DqNRiQOp.d.mts.map +1 -0
  38. package/dist/config.cjs +416 -13
  39. package/dist/config.cjs.map +1 -0
  40. package/dist/config.d.cts +4 -211
  41. package/dist/config.d.mts +4 -211
  42. package/dist/config.mjs +402 -3
  43. package/dist/config.mjs.map +1 -0
  44. package/dist/credentials-B70vmLcm.cjs +125 -0
  45. package/dist/credentials-B70vmLcm.cjs.map +1 -0
  46. package/dist/credentials-s0wMeZBU.mjs +108 -0
  47. package/dist/credentials-s0wMeZBU.mjs.map +1 -0
  48. package/dist/{define-CHBIEc5j.mjs → define-CYs0PEfZ.mjs} +2 -3
  49. package/dist/define-CYs0PEfZ.mjs.map +1 -0
  50. package/dist/{define-Cv_QvDrg.cjs → define-zUsP72ym.cjs} +2 -3
  51. package/dist/define-zUsP72ym.cjs.map +1 -0
  52. package/dist/deploy/public.cjs +166 -14
  53. package/dist/deploy/public.cjs.map +1 -0
  54. package/dist/deploy/public.d.cts +224 -3
  55. package/dist/deploy/public.d.cts.map +1 -1
  56. package/dist/deploy/public.d.mts +224 -3
  57. package/dist/deploy/public.d.mts.map +1 -1
  58. package/dist/deploy/public.mjs +141 -10
  59. package/dist/deploy/public.mjs.map +1 -0
  60. package/dist/deploy/sniffer-envparser-worker.cjs +54 -0
  61. package/dist/deploy/sniffer-envparser-worker.cjs.map +1 -0
  62. package/dist/deploy/sniffer-envparser-worker.d.cts +1 -0
  63. package/dist/deploy/sniffer-envparser-worker.d.mts +1 -0
  64. package/dist/deploy/sniffer-envparser-worker.mjs +55 -0
  65. package/dist/deploy/sniffer-envparser-worker.mjs.map +1 -0
  66. package/dist/{deploy-DSaCYvcO.cjs → deploy-55rJkdKz.cjs} +17 -14
  67. package/dist/{deploy-DSaCYvcO.cjs.map → deploy-55rJkdKz.cjs.map} +1 -1
  68. package/dist/{deploy-Cg9fae7a.mjs → deploy-Dc2LBJaK.mjs} +13 -10
  69. package/dist/deploy-Dc2LBJaK.mjs.map +1 -0
  70. package/dist/{deploy-B7jvUORo.mjs → deploy-ZRXIPp1c.mjs} +11 -8
  71. package/dist/{deploy-B7jvUORo.mjs.map → deploy-ZRXIPp1c.mjs.map} +1 -1
  72. package/dist/{deploy-D8Qr-Xto.cjs → deploy-yUcR2OlW.cjs} +15 -12
  73. package/dist/deploy-yUcR2OlW.cjs.map +1 -0
  74. package/dist/derive-B4vDpzgP.mjs +150 -0
  75. package/dist/derive-B4vDpzgP.mjs.map +1 -0
  76. package/dist/derive-DAbo49sm.cjs +161 -0
  77. package/dist/derive-DAbo49sm.cjs.map +1 -0
  78. package/dist/discover-B6yPpvRV.d.mts +99 -0
  79. package/dist/discover-B6yPpvRV.d.mts.map +1 -0
  80. package/dist/discover-B_IkPukx.d.cts +99 -0
  81. package/dist/discover-B_IkPukx.d.cts.map +1 -0
  82. package/dist/{discover-Bc-4eA_p.cjs → discover-DHdECueV.cjs} +280 -1
  83. package/dist/discover-DHdECueV.cjs.map +1 -0
  84. package/dist/{discover-FrYvzkeC.mjs → discover-LMrqsWSU.mjs} +246 -3
  85. package/dist/discover-LMrqsWSU.mjs.map +1 -0
  86. package/dist/{dokploy-CD9PY-3D.mjs → dokploy-CepdXuMl.mjs} +3 -3
  87. package/dist/{dokploy-CD9PY-3D.mjs.map → dokploy-CepdXuMl.mjs.map} +1 -1
  88. package/dist/{dokploy-Ey2foJLv.cjs → dokploy-D1d37rvM.cjs} +3 -3
  89. package/dist/{dokploy-Ey2foJLv.cjs.map → dokploy-D1d37rvM.cjs.map} +1 -1
  90. package/dist/{encryption-ChBk3hTj.cjs → encryption-C9X98u2F.cjs} +5 -5
  91. package/dist/{encryption-ChBk3hTj.cjs.map → encryption-C9X98u2F.cjs.map} +1 -1
  92. package/dist/{encryption-CVwvGbsL.mjs → encryption-CKHjMpCr.mjs} +5 -5
  93. package/dist/{encryption-CVwvGbsL.mjs.map → encryption-CKHjMpCr.mjs.map} +1 -1
  94. package/dist/fakes-C9RiT6XG.mjs.map +1 -1
  95. package/dist/fakes-zW-jNAbQ.cjs.map +1 -1
  96. package/dist/{github-BCB3_LBX.mjs → github-D-byNI7T.mjs} +4 -4
  97. package/dist/{github-BCB3_LBX.mjs.map → github-D-byNI7T.mjs.map} +1 -1
  98. package/dist/{github-OUgPDlqg.cjs → github-Dd3tMa1u.cjs} +4 -4
  99. package/dist/{github-OUgPDlqg.cjs.map → github-Dd3tMa1u.cjs.map} +1 -1
  100. package/dist/{index-BtXDZQuF.d.cts → index-CJ2qsSpp.d.mts} +2 -2
  101. package/dist/{index-BtXDZQuF.d.cts.map → index-CJ2qsSpp.d.mts.map} +1 -1
  102. package/dist/{index-DrKzpHl-.d.mts → index-CfE9Y885.d.cts} +2 -2
  103. package/dist/{index-DrKzpHl-.d.mts.map → index-CfE9Y885.d.cts.map} +1 -1
  104. package/dist/index.cjs +111 -239
  105. package/dist/index.cjs.map +1 -1
  106. package/dist/index.mjs +82 -210
  107. package/dist/index.mjs.map +1 -1
  108. package/dist/local-C7wnrcYK.cjs +586 -0
  109. package/dist/local-C7wnrcYK.cjs.map +1 -0
  110. package/dist/local-Cd8ZYQG3.mjs +473 -0
  111. package/dist/local-Cd8ZYQG3.mjs.map +1 -0
  112. package/dist/{migrate-BoHMqdCu.mjs → migrate-B4gngTLe.mjs} +6 -6
  113. package/dist/{migrate-BoHMqdCu.mjs.map → migrate-B4gngTLe.mjs.map} +1 -1
  114. package/dist/{migrate-dnaFMvOm.cjs → migrate-tx9-P9uz.cjs} +6 -6
  115. package/dist/{migrate-dnaFMvOm.cjs.map → migrate-tx9-P9uz.cjs.map} +1 -1
  116. package/dist/openapi.cjs +3 -3
  117. package/dist/openapi.d.cts +1 -1
  118. package/dist/openapi.d.mts +1 -1
  119. package/dist/openapi.mjs +3 -3
  120. package/dist/{ready-DQIy21W5.mjs → ready-bQfu9GES.mjs} +3 -3
  121. package/dist/{ready-DQIy21W5.mjs.map → ready-bQfu9GES.mjs.map} +1 -1
  122. package/dist/{ready-XlNx-Gbo.cjs → ready-brEhh68f.cjs} +3 -3
  123. package/dist/{ready-XlNx-Gbo.cjs.map → ready-brEhh68f.cjs.map} +1 -1
  124. package/dist/reconcile/public.cjs +1 -1
  125. package/dist/reconcile/public.d.cts +4 -77
  126. package/dist/reconcile/public.d.cts.map +1 -1
  127. package/dist/reconcile/public.d.mts +4 -77
  128. package/dist/reconcile/public.d.mts.map +1 -1
  129. package/dist/reconcile/public.mjs +1 -1
  130. package/dist/{resolve-wbv66HjD.cjs → resolve-BXsNQjMR.cjs} +9 -6
  131. package/dist/resolve-BXsNQjMR.cjs.map +1 -0
  132. package/dist/{resolve-CFCIkm7m.mjs → resolve-DZ2IJ0qY.mjs} +9 -6
  133. package/dist/resolve-DZ2IJ0qY.mjs.map +1 -0
  134. package/dist/{runtime-CMwtq0AL.cjs → runtime-BGNDrHzh.cjs} +2 -2
  135. package/dist/{runtime-CMwtq0AL.cjs.map → runtime-BGNDrHzh.cjs.map} +1 -1
  136. package/dist/{runtime-Dn_n-29S.d.cts → runtime-CJEYK4Gz.d.mts} +2 -2
  137. package/dist/{runtime-CXPlkZzs.d.mts.map → runtime-CJEYK4Gz.d.mts.map} +1 -1
  138. package/dist/{runtime-CXPlkZzs.d.mts → runtime-Cjq1jlVX.d.cts} +2 -2
  139. package/dist/{runtime-Dn_n-29S.d.cts.map → runtime-Cjq1jlVX.d.cts.map} +1 -1
  140. package/dist/{runtime-DbakJS8u.mjs → runtime-Cmn-FeYO.mjs} +2 -2
  141. package/dist/{runtime-DbakJS8u.mjs.map → runtime-Cmn-FeYO.mjs.map} +1 -1
  142. package/dist/sandbox/config-worker.cjs +43 -0
  143. package/dist/sandbox/config-worker.cjs.map +1 -0
  144. package/dist/sandbox/config-worker.d.cts +1 -0
  145. package/dist/sandbox/config-worker.d.mts +1 -0
  146. package/dist/sandbox/config-worker.mjs +44 -0
  147. package/dist/sandbox/config-worker.mjs.map +1 -0
  148. package/dist/sandbox/discover-worker.cjs +44 -0
  149. package/dist/sandbox/discover-worker.cjs.map +1 -0
  150. package/dist/sandbox/discover-worker.d.cts +1 -0
  151. package/dist/sandbox/discover-worker.d.mts +1 -0
  152. package/dist/sandbox/discover-worker.mjs +45 -0
  153. package/dist/sandbox/discover-worker.mjs.map +1 -0
  154. package/dist/sandbox-CL--ZDui.cjs +164 -0
  155. package/dist/sandbox-CL--ZDui.cjs.map +1 -0
  156. package/dist/sandbox-Dm247NGx.mjs +117 -0
  157. package/dist/sandbox-Dm247NGx.mjs.map +1 -0
  158. package/dist/sandbox-M8UnLhXE.d.cts +126 -0
  159. package/dist/sandbox-M8UnLhXE.d.cts.map +1 -0
  160. package/dist/sandbox-M8UnLhXE.d.mts +126 -0
  161. package/dist/sandbox-M8UnLhXE.d.mts.map +1 -0
  162. package/dist/{workspace-BFe57es7.mjs → schemas-Ckm_aBnF.cjs} +71 -982
  163. package/dist/schemas-Ckm_aBnF.cjs.map +1 -0
  164. package/dist/{workspace-B6zQO6RY.cjs → schemas-D2LCF689.mjs} +2 -1168
  165. package/dist/schemas-D2LCF689.mjs.map +1 -0
  166. package/dist/{sniffer-DHE2Nafd.mjs → sniffer-49KPbDgq.mjs} +131 -444
  167. package/dist/sniffer-49KPbDgq.mjs.map +1 -0
  168. package/dist/{sniffer-BsfPa-GA.cjs → sniffer-ByhbEW5A.cjs} +145 -512
  169. package/dist/sniffer-ByhbEW5A.cjs.map +1 -0
  170. package/dist/sst-BdALKEas.cjs +453 -0
  171. package/dist/sst-BdALKEas.cjs.map +1 -0
  172. package/dist/sst-Cper040I.mjs +430 -0
  173. package/dist/sst-Cper040I.mjs.map +1 -0
  174. package/dist/{store-BS8A7NcA.mjs → store-BaaonhkJ.mjs} +2 -2
  175. package/dist/{store-BS8A7NcA.mjs.map → store-BaaonhkJ.mjs.map} +1 -1
  176. package/dist/{store-KvNQwYaB.cjs → store-D_2ByRtW.cjs} +4 -4
  177. package/dist/{store-KvNQwYaB.cjs.map → store-D_2ByRtW.cjs.map} +1 -1
  178. package/dist/target/public.cjs +3 -3
  179. package/dist/target/public.d.cts +3 -3
  180. package/dist/target/public.d.mts +3 -3
  181. package/dist/target/public.mjs +3 -3
  182. package/dist/{terminal-6oL0vANs.cjs → terminal-Bdv--jhY.cjs} +16 -111
  183. package/dist/terminal-Bdv--jhY.cjs.map +1 -0
  184. package/dist/{terminal-ByZNjuig.mjs → terminal-D7Ntz6WE.mjs} +13 -90
  185. package/dist/terminal-D7Ntz6WE.mjs.map +1 -0
  186. package/dist/{types-DIA7Li-J.d.cts → types-B_bEQvb9.d.mts} +42 -7
  187. package/dist/types-B_bEQvb9.d.mts.map +1 -0
  188. package/dist/{types-CfLKGfC_.d.mts → types-DkrDOMxw.d.cts} +43 -6
  189. package/dist/types-DkrDOMxw.d.cts.map +1 -0
  190. package/dist/utils-D2Nk1Nv2.cjs +205 -0
  191. package/dist/utils-D2Nk1Nv2.cjs.map +1 -0
  192. package/dist/utils-D_fxUqvU.mjs +156 -0
  193. package/dist/utils-D_fxUqvU.mjs.map +1 -0
  194. package/dist/vitest.cjs +2 -2
  195. package/dist/vitest.mjs +2 -2
  196. package/dist/workerRuntime-BXfhbe13.cjs +108 -0
  197. package/dist/workerRuntime-BXfhbe13.cjs.map +1 -0
  198. package/dist/workerRuntime-CsOyBRx2.mjs +79 -0
  199. package/dist/workerRuntime-CsOyBRx2.mjs.map +1 -0
  200. package/dist/workspace/index.cjs +1 -1
  201. package/dist/workspace/index.d.cts +2 -2
  202. package/dist/workspace/index.d.mts +2 -2
  203. package/dist/workspace/index.mjs +1 -1
  204. package/dist/workspace-BwgWJK7h.cjs +1196 -0
  205. package/dist/workspace-BwgWJK7h.cjs.map +1 -0
  206. package/dist/workspace-Bwit4q9O.mjs +1024 -0
  207. package/dist/workspace-Bwit4q9O.mjs.map +1 -0
  208. package/package.json +13 -13
  209. package/dist/config-BYh9S0cZ.cjs +0 -534
  210. package/dist/config-BYh9S0cZ.cjs.map +0 -1
  211. package/dist/config-Bf4-bROQ.mjs +0 -457
  212. package/dist/config-Bf4-bROQ.mjs.map +0 -1
  213. package/dist/config.d.cts.map +0 -1
  214. package/dist/config.d.mts.map +0 -1
  215. package/dist/define-CHBIEc5j.mjs.map +0 -1
  216. package/dist/define-Cv_QvDrg.cjs.map +0 -1
  217. package/dist/deploy-Cg9fae7a.mjs.map +0 -1
  218. package/dist/deploy-D8Qr-Xto.cjs.map +0 -1
  219. package/dist/discover-Bc-4eA_p.cjs.map +0 -1
  220. package/dist/discover-FrYvzkeC.mjs.map +0 -1
  221. package/dist/home-DOzBaWaL.cjs +0 -33
  222. package/dist/home-DOzBaWaL.cjs.map +0 -1
  223. package/dist/home-GI7pJl1M.mjs +0 -22
  224. package/dist/home-GI7pJl1M.mjs.map +0 -1
  225. package/dist/resolve-CFCIkm7m.mjs.map +0 -1
  226. package/dist/resolve-wbv66HjD.cjs.map +0 -1
  227. package/dist/sniffer-BsfPa-GA.cjs.map +0 -1
  228. package/dist/sniffer-DHE2Nafd.mjs.map +0 -1
  229. package/dist/terminal-6oL0vANs.cjs.map +0 -1
  230. package/dist/terminal-ByZNjuig.mjs.map +0 -1
  231. package/dist/types-CfLKGfC_.d.mts.map +0 -1
  232. package/dist/types-DIA7Li-J.d.cts.map +0 -1
  233. package/dist/workspace-B6zQO6RY.cjs.map +0 -1
  234. package/dist/workspace-BFe57es7.mjs.map +0 -1
@@ -0,0 +1,256 @@
1
+ import { _ as LoadedConfig, b as NormalizedWorkspace, r as GkmConfig, y as NormalizedAppConfig } from "./types-DkrDOMxw.cjs";
2
+ import { n as Sandbox } from "./sandbox-M8UnLhXE.cjs";
3
+ import "./index-CfE9Y885.cjs";
4
+ import { ConstructManifest } from "@geekmidas/manifest";
5
+ //#region src/dev/discovery.d.ts
6
+ /** Where an app is in its life. `stopped` is a server that exited on its own. */
7
+ type AppStatus = 'starting' | 'ready' | 'reloading' | 'stopped';
8
+ /** A JSON API an app serves about itself. */
9
+ type DataApiKind = 'telescope' | 'database' | 'openapi';
10
+ interface DiscoveredDataApi {
11
+ kind: DataApiKind;
12
+ /** Where the app serves it. */
13
+ path: string;
14
+ /** The app's own address for it — `http://localhost:<port><path>`. */
15
+ url: string;
16
+ /** The same API through this endpoint, relative to its origin. */
17
+ proxy: string;
18
+ }
19
+ interface DiscoveredApp {
20
+ name: string;
21
+ type: 'backend' | 'web' | 'mobile';
22
+ port: number;
23
+ /** `http://localhost:<port>`. */
24
+ url: string;
25
+ publicUrl: string | null;
26
+ status: AppStatus;
27
+ reloads: number;
28
+ /** The `gkm dev` running it, when it runs in one of its own. */
29
+ pid: number | null;
30
+ dataApis: DiscoveredDataApi[];
31
+ }
32
+ interface DiscoveredWorkspace {
33
+ /** Stable for a workspace's root: its name, and a hash of where it is. */
34
+ id: string;
35
+ name: string;
36
+ root: string;
37
+ stage: string;
38
+ manifest: ConstructManifest | null;
39
+ apps: DiscoveredApp[];
40
+ }
41
+ /** The body of `GET /__gkm`. */
42
+ interface DiscoveryResponse {
43
+ version: 1;
44
+ /** The `gkm dev` serving this endpoint, which may change while you watch. */
45
+ host: {
46
+ pid: number;
47
+ port: number;
48
+ };
49
+ /** Where the changes stream, as server-sent events. */
50
+ events: string;
51
+ workspaces: DiscoveredWorkspace[];
52
+ }
53
+ /** One message on `GET /__gkm/events`; its SSE `event:` is its `type`. */
54
+ type DiscoveryEvent = {
55
+ type: 'snapshot';
56
+ snapshot: DiscoveryResponse;
57
+ } | {
58
+ type: 'workspace.started' | 'workspace.stopped';
59
+ workspace: string;
60
+ } | {
61
+ type: 'app.started' | 'app.stopped' | 'app.reloaded' | 'app.status';
62
+ workspace: string;
63
+ app: DiscoveredApp;
64
+ };
65
+ //#endregion
66
+ //#region src/config.d.ts
67
+ /**
68
+ * Define GKM configuration with full TypeScript support.
69
+ * This is an identity function that provides type safety and autocomplete.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * // gkm.config.ts
74
+ * import { defineConfig } from '@geekmidas/cli/config';
75
+ *
76
+ * export default defineConfig({
77
+ * routes: './src/endpoints/**\/*.ts',
78
+ * envParser: './src/config/env',
79
+ * logger: './src/config/logger',
80
+ * telescope: true,
81
+ * });
82
+ * ```
83
+ */
84
+ declare function defineConfig(config: GkmConfig): GkmConfig;
85
+ interface ParsedModuleConfig {
86
+ path: string;
87
+ importPattern: string;
88
+ }
89
+ /**
90
+ * Parse a module config string into path and import pattern.
91
+ *
92
+ * @param configString - Config string in format "./path/to/module" or "./path/to/module#exportName"
93
+ * @param defaultAlias - The default alias name to use if no export name specified
94
+ * @returns Object with path and import pattern
95
+ *
96
+ * @example
97
+ * parseModuleConfig('./src/config/env', 'envParser')
98
+ * // { path: './src/config/env', importPattern: 'envParser' }
99
+ *
100
+ * parseModuleConfig('./src/config/env#envParser', 'envParser')
101
+ * // { path: './src/config/env', importPattern: '{ envParser }' }
102
+ *
103
+ * parseModuleConfig('./src/config/env#myEnv', 'envParser')
104
+ * // { path: './src/config/env', importPattern: '{ myEnv as envParser }' }
105
+ */
106
+ declare function parseModuleConfig(configString: string, defaultAlias: string): ParsedModuleConfig;
107
+ interface ConfigDiscoveryResult {
108
+ configPath: string;
109
+ workspaceRoot: string;
110
+ }
111
+ /**
112
+ * The directory holding the gkm config that `cwd` belongs to — the project a
113
+ * sandbox for it is confined to.
114
+ *
115
+ * @throws {ConfigNotFound} when neither `cwd` nor any parent has one.
116
+ */
117
+ declare function findWorkspaceRoot(cwd: string): string;
118
+ /** No gkm config in a directory or any of its parents. */
119
+ declare class ConfigNotFound extends Error {
120
+ readonly cwd: string;
121
+ constructor(cwd: string);
122
+ }
123
+ interface LoadConfigOptions {
124
+ /**
125
+ * Load the config — and discover the constructs it names — in this
126
+ * sandbox rather than in this process. The config then arrives as data;
127
+ * see {@link Sandbox.isolating} for what happens to one holding live
128
+ * objects. Defaults to the run's own (`withSandbox`); with neither, the
129
+ * config is imported here, as `gkm` always has.
130
+ */
131
+ sandbox?: Sandbox;
132
+ /**
133
+ * How long the sandboxed config load may run. Defaults to
134
+ * {@link CONFIG_LOAD_TIMEOUT_MS}.
135
+ */
136
+ timeoutMs?: number;
137
+ }
138
+ /**
139
+ * How long loading a config, or discovering its constructs, may take in a
140
+ * sandbox: room for tsx to compile a large project cold, and not a deploy
141
+ * held open by a config that never finishes importing.
142
+ */
143
+ declare const CONFIG_LOAD_TIMEOUT_MS = 60000;
144
+ /** The config failed to import, or threw while it ran. */
145
+ declare class ConfigLoadFailed extends Error {
146
+ readonly configPath: string;
147
+ readonly detail: string;
148
+ constructor(configPath: string, detail: string);
149
+ }
150
+ /**
151
+ * The config holds something that is not data — a custom state store, an
152
+ * inline deploy target, a function — and the sandbox it was loaded in hands
153
+ * the deploy nothing but data.
154
+ */
155
+ declare class ConfigObjectNotSerializable extends Error {
156
+ readonly configPath: string;
157
+ readonly paths: readonly string[];
158
+ constructor(configPath: string, paths: readonly string[]);
159
+ }
160
+ /**
161
+ * Load configuration file (single-app format).
162
+ * For backwards compatibility with existing code.
163
+ *
164
+ * @deprecated Use loadWorkspaceConfig for new code
165
+ */
166
+ declare function loadConfig(cwd?: string): Promise<GkmConfig>;
167
+ /**
168
+ * Load configuration file and process it as a workspace.
169
+ * Works with both single-app and workspace configurations.
170
+ *
171
+ * Single-app configs are automatically wrapped as a workspace with one app.
172
+ *
173
+ * @example
174
+ * ```ts
175
+ * const { type, workspace } = await loadWorkspaceConfig();
176
+ *
177
+ * if (type === 'workspace') {
178
+ * console.log('Multi-app workspace:', workspace.apps);
179
+ * } else {
180
+ * console.log('Single app wrapped as workspace');
181
+ * }
182
+ * ```
183
+ */
184
+ /**
185
+ * The workspace a directory belongs to, as its config states it — without
186
+ * discovering its constructs.
187
+ *
188
+ * For callers that need a fact the config holds (where a stage's secrets are
189
+ * stored) and nothing the graph adds. `loadWorkspaceConfig` imports every
190
+ * construct module to derive the apps, which is a cost a secrets read should
191
+ * not pay.
192
+ */
193
+ declare function loadWorkspaceSettings(cwd?: string, options?: LoadConfigOptions): Promise<LoadedConfig['workspace']>;
194
+ declare function loadWorkspaceConfig(cwd?: string, options?: LoadConfigOptions): Promise<LoadedConfig>;
195
+ /**
196
+ * A workspace with no `constructs` glob.
197
+ *
198
+ * In v10 every address, container and app comes from what the workspace
199
+ * declares — there is no second path that reads a hand-written compose file or
200
+ * an `apps` block's ports. A config that declares nothing has nothing to run.
201
+ */
202
+ declare class WorkspaceDeclaresNoConstructs extends Error {
203
+ readonly root: string;
204
+ constructor(root: string);
205
+ }
206
+ interface AppConfigResult {
207
+ appName: string;
208
+ app: NormalizedAppConfig;
209
+ gkmConfig: GkmConfig;
210
+ workspace: NormalizedWorkspace;
211
+ workspaceRoot: string;
212
+ appRoot: string;
213
+ }
214
+ /** A directory that no app in the workspace lives in. */
215
+ declare class NotInAnApp extends Error {
216
+ readonly cwd: string;
217
+ readonly apps: Readonly<Record<string, string>>;
218
+ constructor(cwd: string, apps: Readonly<Record<string, string>>);
219
+ }
220
+ /**
221
+ * The backend app a directory is part of, with its gkm config — found by the
222
+ * `path` its construct declares.
223
+ *
224
+ * @example
225
+ * ```ts
226
+ * // From apps/api, where a construct declares `path: 'apps/api'`
227
+ * const { app, workspace, workspaceRoot } = await loadAppConfig();
228
+ * ```
229
+ *
230
+ * @throws {NotInAnApp} when no app's path contains the directory.
231
+ * @throws {NotABackendApp} when the app it is in has no gkm config to run.
232
+ */
233
+ declare function loadAppConfig(cwd?: string): Promise<AppConfigResult>;
234
+ /** The app a directory is in has no gkm config — a site, or an entry app. */
235
+ declare class NotABackendApp extends Error {
236
+ readonly appName: string;
237
+ constructor(appName: string);
238
+ }
239
+ interface WorkspaceAppInfo {
240
+ /** The app's key in the workspace. */
241
+ appName: string;
242
+ app: NormalizedAppConfig;
243
+ workspace: NormalizedWorkspace;
244
+ workspaceRoot: string;
245
+ }
246
+ /**
247
+ * The app a directory is part of, frontend or backend — found by the `path`
248
+ * its construct declares. Unlike `loadAppConfig`, the app need not have a
249
+ * gkm config, which is what `gkm exec` and `gkm test` from a site need.
250
+ *
251
+ * @throws {NotInAnApp} when no app's path contains the directory.
252
+ */
253
+ declare function loadWorkspaceAppInfo(cwd?: string): Promise<WorkspaceAppInfo>;
254
+ //#endregion
255
+ export { DiscoveredApp as C, DiscoveryResponse as D, DiscoveryEvent as E, DataApiKind as S, DiscoveredWorkspace as T, loadWorkspaceAppInfo as _, ConfigNotFound as a, parseModuleConfig as b, NotABackendApp as c, WorkspaceAppInfo as d, WorkspaceDeclaresNoConstructs as f, loadConfig as g, loadAppConfig as h, ConfigLoadFailed as i, NotInAnApp as l, findWorkspaceRoot as m, CONFIG_LOAD_TIMEOUT_MS as n, ConfigObjectNotSerializable as o, defineConfig as p, ConfigDiscoveryResult as r, LoadConfigOptions as s, AppConfigResult as t, ParsedModuleConfig as u, loadWorkspaceConfig as v, DiscoveredDataApi as w, AppStatus as x, loadWorkspaceSettings as y };
256
+ //# sourceMappingURL=config-Be-4_I6H.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-Be-4_I6H.d.cts","names":[],"sources":["../src/dev/discovery.ts","../src/config.ts"],"mappings":";;;;;;KAoFY;;KAGA;UA6CK;EAChB,MAAM;;EAEN;;EAEA;;EAEA;;UAGgB;EAChB;EACA;EACA;;EAEA;EACA;EACA,QAAQ;EACR;;EAEA;EACA,UAAU;;UAGM;;EAEhB;EACA;EACA;EACA;EACA,UAAU;EACV,MAAM;;;UAIU;EAChB;;EAEA;IAAQ;IAAa;;;EAErB;EACA,YAAY;;;KAID;EACP;EAAkB,UAAU;;EAC5B;EAAiD;;EAEnD;EACA;EACA,KAAK;;;;;;;;;;;;;;;;;;;;;iBCpIQ,aAAa,QAAQ,YAAY;UAIhC;EAChB;EACA;;;;;;;;;;;;;;;;;;;iBAoBe,kBACf,sBACA,uBACE;UAac;EAChB;EACA;;;;;;;;iBAgDe,kBAAkB;;cAKrB,uBAAuB;WACd;EAArB,YAAqB;;UAaL;;;;;;;;EAQhB,UAAU;;;;;EAKV;;;;;;;cAQY;;cAGA,yBAAyB;WAE3B;WACA;EAFV,YACU,oBACA;;;;;;;cAYE,oCAAoC;WAEtC;WACA;EAFV,YACU,oBACA;;;;;;;;iBA0GW,WACrB,eACE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuCW,sBACrB,cACA,UAAS,oBACP,QAAQ;iBAKW,oBACrB,cACA,UAAS,oBACP,QAAQ;;;;;;;;cAgEE,sCAAsC;WAC7B;EAArB,YAAqB;;UAWL;EAChB;EACA,KAAK;EACL,WAAW;EACX,WAAW;EACX;EACA;;;cAqCY,mBAAmB;WAErB;WACA,MAAM,SAAS;EAFzB,YACU,aACA,MAAM,SAAS;;;;;;;;;;;;;;;iBAoCJ,cACrB,eACE,QAAQ;;cAkBE,uBAAuB;WACd;EAArB,YAAqB;;UAQL;;EAEhB;EACA,KAAK;EACL,WAAW;EACX;;;;;;;;;iBAUqB,qBACrB,eACE,QAAQ"}
@@ -0,0 +1,256 @@
1
+ import { n as Sandbox } from "./sandbox-M8UnLhXE.mjs";
2
+ import { _ as LoadedConfig, b as NormalizedWorkspace, r as GkmConfig, y as NormalizedAppConfig } from "./types-B_bEQvb9.mjs";
3
+ import "./index-CJ2qsSpp.mjs";
4
+ import { ConstructManifest } from "@geekmidas/manifest";
5
+ //#region src/dev/discovery.d.ts
6
+ /** Where an app is in its life. `stopped` is a server that exited on its own. */
7
+ type AppStatus = 'starting' | 'ready' | 'reloading' | 'stopped';
8
+ /** A JSON API an app serves about itself. */
9
+ type DataApiKind = 'telescope' | 'database' | 'openapi';
10
+ interface DiscoveredDataApi {
11
+ kind: DataApiKind;
12
+ /** Where the app serves it. */
13
+ path: string;
14
+ /** The app's own address for it — `http://localhost:<port><path>`. */
15
+ url: string;
16
+ /** The same API through this endpoint, relative to its origin. */
17
+ proxy: string;
18
+ }
19
+ interface DiscoveredApp {
20
+ name: string;
21
+ type: 'backend' | 'web' | 'mobile';
22
+ port: number;
23
+ /** `http://localhost:<port>`. */
24
+ url: string;
25
+ publicUrl: string | null;
26
+ status: AppStatus;
27
+ reloads: number;
28
+ /** The `gkm dev` running it, when it runs in one of its own. */
29
+ pid: number | null;
30
+ dataApis: DiscoveredDataApi[];
31
+ }
32
+ interface DiscoveredWorkspace {
33
+ /** Stable for a workspace's root: its name, and a hash of where it is. */
34
+ id: string;
35
+ name: string;
36
+ root: string;
37
+ stage: string;
38
+ manifest: ConstructManifest | null;
39
+ apps: DiscoveredApp[];
40
+ }
41
+ /** The body of `GET /__gkm`. */
42
+ interface DiscoveryResponse {
43
+ version: 1;
44
+ /** The `gkm dev` serving this endpoint, which may change while you watch. */
45
+ host: {
46
+ pid: number;
47
+ port: number;
48
+ };
49
+ /** Where the changes stream, as server-sent events. */
50
+ events: string;
51
+ workspaces: DiscoveredWorkspace[];
52
+ }
53
+ /** One message on `GET /__gkm/events`; its SSE `event:` is its `type`. */
54
+ type DiscoveryEvent = {
55
+ type: 'snapshot';
56
+ snapshot: DiscoveryResponse;
57
+ } | {
58
+ type: 'workspace.started' | 'workspace.stopped';
59
+ workspace: string;
60
+ } | {
61
+ type: 'app.started' | 'app.stopped' | 'app.reloaded' | 'app.status';
62
+ workspace: string;
63
+ app: DiscoveredApp;
64
+ };
65
+ //#endregion
66
+ //#region src/config.d.ts
67
+ /**
68
+ * Define GKM configuration with full TypeScript support.
69
+ * This is an identity function that provides type safety and autocomplete.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * // gkm.config.ts
74
+ * import { defineConfig } from '@geekmidas/cli/config';
75
+ *
76
+ * export default defineConfig({
77
+ * routes: './src/endpoints/**\/*.ts',
78
+ * envParser: './src/config/env',
79
+ * logger: './src/config/logger',
80
+ * telescope: true,
81
+ * });
82
+ * ```
83
+ */
84
+ declare function defineConfig(config: GkmConfig): GkmConfig;
85
+ interface ParsedModuleConfig {
86
+ path: string;
87
+ importPattern: string;
88
+ }
89
+ /**
90
+ * Parse a module config string into path and import pattern.
91
+ *
92
+ * @param configString - Config string in format "./path/to/module" or "./path/to/module#exportName"
93
+ * @param defaultAlias - The default alias name to use if no export name specified
94
+ * @returns Object with path and import pattern
95
+ *
96
+ * @example
97
+ * parseModuleConfig('./src/config/env', 'envParser')
98
+ * // { path: './src/config/env', importPattern: 'envParser' }
99
+ *
100
+ * parseModuleConfig('./src/config/env#envParser', 'envParser')
101
+ * // { path: './src/config/env', importPattern: '{ envParser }' }
102
+ *
103
+ * parseModuleConfig('./src/config/env#myEnv', 'envParser')
104
+ * // { path: './src/config/env', importPattern: '{ myEnv as envParser }' }
105
+ */
106
+ declare function parseModuleConfig(configString: string, defaultAlias: string): ParsedModuleConfig;
107
+ interface ConfigDiscoveryResult {
108
+ configPath: string;
109
+ workspaceRoot: string;
110
+ }
111
+ /**
112
+ * The directory holding the gkm config that `cwd` belongs to — the project a
113
+ * sandbox for it is confined to.
114
+ *
115
+ * @throws {ConfigNotFound} when neither `cwd` nor any parent has one.
116
+ */
117
+ declare function findWorkspaceRoot(cwd: string): string;
118
+ /** No gkm config in a directory or any of its parents. */
119
+ declare class ConfigNotFound extends Error {
120
+ readonly cwd: string;
121
+ constructor(cwd: string);
122
+ }
123
+ interface LoadConfigOptions {
124
+ /**
125
+ * Load the config — and discover the constructs it names — in this
126
+ * sandbox rather than in this process. The config then arrives as data;
127
+ * see {@link Sandbox.isolating} for what happens to one holding live
128
+ * objects. Defaults to the run's own (`withSandbox`); with neither, the
129
+ * config is imported here, as `gkm` always has.
130
+ */
131
+ sandbox?: Sandbox;
132
+ /**
133
+ * How long the sandboxed config load may run. Defaults to
134
+ * {@link CONFIG_LOAD_TIMEOUT_MS}.
135
+ */
136
+ timeoutMs?: number;
137
+ }
138
+ /**
139
+ * How long loading a config, or discovering its constructs, may take in a
140
+ * sandbox: room for tsx to compile a large project cold, and not a deploy
141
+ * held open by a config that never finishes importing.
142
+ */
143
+ declare const CONFIG_LOAD_TIMEOUT_MS = 60000;
144
+ /** The config failed to import, or threw while it ran. */
145
+ declare class ConfigLoadFailed extends Error {
146
+ readonly configPath: string;
147
+ readonly detail: string;
148
+ constructor(configPath: string, detail: string);
149
+ }
150
+ /**
151
+ * The config holds something that is not data — a custom state store, an
152
+ * inline deploy target, a function — and the sandbox it was loaded in hands
153
+ * the deploy nothing but data.
154
+ */
155
+ declare class ConfigObjectNotSerializable extends Error {
156
+ readonly configPath: string;
157
+ readonly paths: readonly string[];
158
+ constructor(configPath: string, paths: readonly string[]);
159
+ }
160
+ /**
161
+ * Load configuration file (single-app format).
162
+ * For backwards compatibility with existing code.
163
+ *
164
+ * @deprecated Use loadWorkspaceConfig for new code
165
+ */
166
+ declare function loadConfig(cwd?: string): Promise<GkmConfig>;
167
+ /**
168
+ * Load configuration file and process it as a workspace.
169
+ * Works with both single-app and workspace configurations.
170
+ *
171
+ * Single-app configs are automatically wrapped as a workspace with one app.
172
+ *
173
+ * @example
174
+ * ```ts
175
+ * const { type, workspace } = await loadWorkspaceConfig();
176
+ *
177
+ * if (type === 'workspace') {
178
+ * console.log('Multi-app workspace:', workspace.apps);
179
+ * } else {
180
+ * console.log('Single app wrapped as workspace');
181
+ * }
182
+ * ```
183
+ */
184
+ /**
185
+ * The workspace a directory belongs to, as its config states it — without
186
+ * discovering its constructs.
187
+ *
188
+ * For callers that need a fact the config holds (where a stage's secrets are
189
+ * stored) and nothing the graph adds. `loadWorkspaceConfig` imports every
190
+ * construct module to derive the apps, which is a cost a secrets read should
191
+ * not pay.
192
+ */
193
+ declare function loadWorkspaceSettings(cwd?: string, options?: LoadConfigOptions): Promise<LoadedConfig['workspace']>;
194
+ declare function loadWorkspaceConfig(cwd?: string, options?: LoadConfigOptions): Promise<LoadedConfig>;
195
+ /**
196
+ * A workspace with no `constructs` glob.
197
+ *
198
+ * In v10 every address, container and app comes from what the workspace
199
+ * declares — there is no second path that reads a hand-written compose file or
200
+ * an `apps` block's ports. A config that declares nothing has nothing to run.
201
+ */
202
+ declare class WorkspaceDeclaresNoConstructs extends Error {
203
+ readonly root: string;
204
+ constructor(root: string);
205
+ }
206
+ interface AppConfigResult {
207
+ appName: string;
208
+ app: NormalizedAppConfig;
209
+ gkmConfig: GkmConfig;
210
+ workspace: NormalizedWorkspace;
211
+ workspaceRoot: string;
212
+ appRoot: string;
213
+ }
214
+ /** A directory that no app in the workspace lives in. */
215
+ declare class NotInAnApp extends Error {
216
+ readonly cwd: string;
217
+ readonly apps: Readonly<Record<string, string>>;
218
+ constructor(cwd: string, apps: Readonly<Record<string, string>>);
219
+ }
220
+ /**
221
+ * The backend app a directory is part of, with its gkm config — found by the
222
+ * `path` its construct declares.
223
+ *
224
+ * @example
225
+ * ```ts
226
+ * // From apps/api, where a construct declares `path: 'apps/api'`
227
+ * const { app, workspace, workspaceRoot } = await loadAppConfig();
228
+ * ```
229
+ *
230
+ * @throws {NotInAnApp} when no app's path contains the directory.
231
+ * @throws {NotABackendApp} when the app it is in has no gkm config to run.
232
+ */
233
+ declare function loadAppConfig(cwd?: string): Promise<AppConfigResult>;
234
+ /** The app a directory is in has no gkm config — a site, or an entry app. */
235
+ declare class NotABackendApp extends Error {
236
+ readonly appName: string;
237
+ constructor(appName: string);
238
+ }
239
+ interface WorkspaceAppInfo {
240
+ /** The app's key in the workspace. */
241
+ appName: string;
242
+ app: NormalizedAppConfig;
243
+ workspace: NormalizedWorkspace;
244
+ workspaceRoot: string;
245
+ }
246
+ /**
247
+ * The app a directory is part of, frontend or backend — found by the `path`
248
+ * its construct declares. Unlike `loadAppConfig`, the app need not have a
249
+ * gkm config, which is what `gkm exec` and `gkm test` from a site need.
250
+ *
251
+ * @throws {NotInAnApp} when no app's path contains the directory.
252
+ */
253
+ declare function loadWorkspaceAppInfo(cwd?: string): Promise<WorkspaceAppInfo>;
254
+ //#endregion
255
+ export { DiscoveredApp as C, DiscoveryResponse as D, DiscoveryEvent as E, DataApiKind as S, DiscoveredWorkspace as T, loadWorkspaceAppInfo as _, ConfigNotFound as a, parseModuleConfig as b, NotABackendApp as c, WorkspaceAppInfo as d, WorkspaceDeclaresNoConstructs as f, loadConfig as g, loadAppConfig as h, ConfigLoadFailed as i, NotInAnApp as l, findWorkspaceRoot as m, CONFIG_LOAD_TIMEOUT_MS as n, ConfigObjectNotSerializable as o, defineConfig as p, ConfigDiscoveryResult as r, LoadConfigOptions as s, AppConfigResult as t, ParsedModuleConfig as u, loadWorkspaceConfig as v, DiscoveredDataApi as w, AppStatus as x, loadWorkspaceSettings as y };
256
+ //# sourceMappingURL=config-DqNRiQOp.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-DqNRiQOp.d.mts","names":[],"sources":["../src/dev/discovery.ts","../src/config.ts"],"mappings":";;;;;;KAoFY;;KAGA;UA6CK;EAChB,MAAM;;EAEN;;EAEA;;EAEA;;UAGgB;EAChB;EACA;EACA;;EAEA;EACA;EACA,QAAQ;EACR;;EAEA;EACA,UAAU;;UAGM;;EAEhB;EACA;EACA;EACA;EACA,UAAU;EACV,MAAM;;;UAIU;EAChB;;EAEA;IAAQ;IAAa;;;EAErB;EACA,YAAY;;;KAID;EACP;EAAkB,UAAU;;EAC5B;EAAiD;;EAEnD;EACA;EACA,KAAK;;;;;;;;;;;;;;;;;;;;;iBCpIQ,aAAa,QAAQ,YAAY;UAIhC;EAChB;EACA;;;;;;;;;;;;;;;;;;;iBAoBe,kBACf,sBACA,uBACE;UAac;EAChB;EACA;;;;;;;;iBAgDe,kBAAkB;;cAKrB,uBAAuB;WACd;EAArB,YAAqB;;UAaL;;;;;;;;EAQhB,UAAU;;;;;EAKV;;;;;;;cAQY;;cAGA,yBAAyB;WAE3B;WACA;EAFV,YACU,oBACA;;;;;;;cAYE,oCAAoC;WAEtC;WACA;EAFV,YACU,oBACA;;;;;;;;iBA0GW,WACrB,eACE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuCW,sBACrB,cACA,UAAS,oBACP,QAAQ;iBAKW,oBACrB,cACA,UAAS,oBACP,QAAQ;;;;;;;;cAgEE,sCAAsC;WAC7B;EAArB,YAAqB;;UAWL;EAChB;EACA,KAAK;EACL,WAAW;EACX,WAAW;EACX;EACA;;;cAqCY,mBAAmB;WAErB;WACA,MAAM,SAAS;EAFzB,YACU,aACA,MAAM,SAAS;;;;;;;;;;;;;;;iBAoCJ,cACrB,eACE,QAAQ;;cAkBE,uBAAuB;WACd;EAArB,YAAqB;;UAQL;;EAEhB;EACA,KAAK;EACL,WAAW;EACX;;;;;;;;;iBAUqB,qBACrB,eACE,QAAQ"}