@vendure/cloud 0.0.0 → 0.3.0

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 (552) hide show
  1. package/README.md +42 -7
  2. package/dist/cli/arguments.d.ts +5 -0
  3. package/dist/cli/arguments.d.ts.map +1 -0
  4. package/dist/cli/arguments.js +57 -0
  5. package/dist/cli/arguments.js.map +1 -0
  6. package/dist/cli/command.d.ts +26 -0
  7. package/dist/cli/command.d.ts.map +1 -0
  8. package/dist/cli/command.js +84 -0
  9. package/dist/cli/command.js.map +1 -0
  10. package/dist/cli/commands/deployment/arguments.d.ts +3 -0
  11. package/dist/cli/commands/deployment/arguments.d.ts.map +1 -0
  12. package/dist/cli/commands/deployment/arguments.js +13 -0
  13. package/dist/cli/commands/deployment/arguments.js.map +1 -0
  14. package/dist/cli/commands/deployment/build-logs.d.ts +3 -0
  15. package/dist/cli/commands/deployment/build-logs.d.ts.map +1 -0
  16. package/dist/cli/commands/deployment/build-logs.js +98 -0
  17. package/dist/cli/commands/deployment/build-logs.js.map +1 -0
  18. package/dist/cli/commands/deployment/deploy.d.ts +3 -0
  19. package/dist/cli/commands/deployment/deploy.d.ts.map +1 -0
  20. package/dist/cli/commands/deployment/deploy.js +306 -0
  21. package/dist/cli/commands/deployment/deploy.js.map +1 -0
  22. package/dist/cli/commands/deployment/index.d.ts +3 -0
  23. package/dist/cli/commands/deployment/index.d.ts.map +1 -0
  24. package/dist/cli/commands/deployment/index.js +177 -0
  25. package/dist/cli/commands/deployment/index.js.map +1 -0
  26. package/dist/cli/commands/deployment/list.d.ts +3 -0
  27. package/dist/cli/commands/deployment/list.d.ts.map +1 -0
  28. package/dist/cli/commands/deployment/list.js +77 -0
  29. package/dist/cli/commands/deployment/list.js.map +1 -0
  30. package/dist/cli/commands/deployment/logs.d.ts +3 -0
  31. package/dist/cli/commands/deployment/logs.d.ts.map +1 -0
  32. package/dist/cli/commands/deployment/logs.js +88 -0
  33. package/dist/cli/commands/deployment/logs.js.map +1 -0
  34. package/dist/cli/commands/deployment/options.d.ts +11 -0
  35. package/dist/cli/commands/deployment/options.d.ts.map +1 -0
  36. package/dist/cli/commands/deployment/options.js +37 -0
  37. package/dist/cli/commands/deployment/options.js.map +1 -0
  38. package/dist/cli/commands/deployment/plan-format.d.ts +8 -0
  39. package/dist/cli/commands/deployment/plan-format.d.ts.map +1 -0
  40. package/dist/cli/commands/deployment/plan-format.js +25 -0
  41. package/dist/cli/commands/deployment/plan-format.js.map +1 -0
  42. package/dist/cli/commands/deployment/plan.d.ts +3 -0
  43. package/dist/cli/commands/deployment/plan.d.ts.map +1 -0
  44. package/dist/cli/commands/deployment/plan.js +54 -0
  45. package/dist/cli/commands/deployment/plan.js.map +1 -0
  46. package/dist/cli/commands/deployment/rollback.d.ts +3 -0
  47. package/dist/cli/commands/deployment/rollback.d.ts.map +1 -0
  48. package/dist/cli/commands/deployment/rollback.js +97 -0
  49. package/dist/cli/commands/deployment/rollback.js.map +1 -0
  50. package/dist/cli/commands/deployment/shared.d.ts +5 -0
  51. package/dist/cli/commands/deployment/shared.d.ts.map +1 -0
  52. package/dist/cli/commands/deployment/shared.js +23 -0
  53. package/dist/cli/commands/deployment/shared.js.map +1 -0
  54. package/dist/cli/commands/deployment/show.d.ts +3 -0
  55. package/dist/cli/commands/deployment/show.d.ts.map +1 -0
  56. package/dist/cli/commands/deployment/show.js +71 -0
  57. package/dist/cli/commands/deployment/show.js.map +1 -0
  58. package/dist/cli/commands/deployment/source.d.ts +14 -0
  59. package/dist/cli/commands/deployment/source.d.ts.map +1 -0
  60. package/dist/cli/commands/deployment/source.js +19 -0
  61. package/dist/cli/commands/deployment/source.js.map +1 -0
  62. package/dist/cli/commands/deployment/status.d.ts +3 -0
  63. package/dist/cli/commands/deployment/status.d.ts.map +1 -0
  64. package/dist/cli/commands/deployment/status.js +59 -0
  65. package/dist/cli/commands/deployment/status.js.map +1 -0
  66. package/dist/cli/commands/deployment/teardown.d.ts +3 -0
  67. package/dist/cli/commands/deployment/teardown.d.ts.map +1 -0
  68. package/dist/cli/commands/deployment/teardown.js +178 -0
  69. package/dist/cli/commands/deployment/teardown.js.map +1 -0
  70. package/dist/cli/commands/identity-context/context.d.ts +3 -0
  71. package/dist/cli/commands/identity-context/context.d.ts.map +1 -0
  72. package/dist/cli/commands/identity-context/context.js +47 -0
  73. package/dist/cli/commands/identity-context/context.js.map +1 -0
  74. package/dist/cli/commands/identity-context/index.d.ts +2 -0
  75. package/dist/cli/commands/identity-context/index.d.ts.map +1 -0
  76. package/dist/cli/commands/identity-context/index.js +94 -0
  77. package/dist/cli/commands/identity-context/index.js.map +1 -0
  78. package/dist/cli/commands/identity-context/keys.d.ts +5 -0
  79. package/dist/cli/commands/identity-context/keys.d.ts.map +1 -0
  80. package/dist/cli/commands/identity-context/keys.js +52 -0
  81. package/dist/cli/commands/identity-context/keys.js.map +1 -0
  82. package/dist/cli/commands/identity-context/login.d.ts +2 -0
  83. package/dist/cli/commands/identity-context/login.d.ts.map +1 -0
  84. package/dist/cli/commands/identity-context/login.js +158 -0
  85. package/dist/cli/commands/identity-context/login.js.map +1 -0
  86. package/dist/cli/commands/identity-context/logout.d.ts +2 -0
  87. package/dist/cli/commands/identity-context/logout.d.ts.map +1 -0
  88. package/dist/cli/commands/identity-context/logout.js +12 -0
  89. package/dist/cli/commands/identity-context/logout.js.map +1 -0
  90. package/dist/cli/commands/identity-context/org-switch.d.ts +3 -0
  91. package/dist/cli/commands/identity-context/org-switch.d.ts.map +1 -0
  92. package/dist/cli/commands/identity-context/org-switch.js +71 -0
  93. package/dist/cli/commands/identity-context/org-switch.js.map +1 -0
  94. package/dist/cli/commands/identity-context/use.d.ts +3 -0
  95. package/dist/cli/commands/identity-context/use.d.ts.map +1 -0
  96. package/dist/cli/commands/identity-context/use.js +23 -0
  97. package/dist/cli/commands/identity-context/use.js.map +1 -0
  98. package/dist/cli/commands/identity-context/whoami.d.ts +3 -0
  99. package/dist/cli/commands/identity-context/whoami.d.ts.map +1 -0
  100. package/dist/cli/commands/identity-context/whoami.js +80 -0
  101. package/dist/cli/commands/identity-context/whoami.js.map +1 -0
  102. package/dist/cli/commands/index.d.ts +4 -0
  103. package/dist/cli/commands/index.d.ts.map +1 -0
  104. package/dist/cli/commands/index.js +67 -0
  105. package/dist/cli/commands/index.js.map +1 -0
  106. package/dist/cli/commands/project-config/config/build-fields.d.ts +4 -0
  107. package/dist/cli/commands/project-config/config/build-fields.d.ts.map +1 -0
  108. package/dist/cli/commands/project-config/config/build-fields.js +16 -0
  109. package/dist/cli/commands/project-config/config/build-fields.js.map +1 -0
  110. package/dist/cli/commands/project-config/config/build.d.ts +4 -0
  111. package/dist/cli/commands/project-config/config/build.d.ts.map +1 -0
  112. package/dist/cli/commands/project-config/config/build.js +46 -0
  113. package/dist/cli/commands/project-config/config/build.js.map +1 -0
  114. package/dist/cli/commands/project-config/config/desired-state.d.ts +4 -0
  115. package/dist/cli/commands/project-config/config/desired-state.d.ts.map +1 -0
  116. package/dist/cli/commands/project-config/config/desired-state.js +34 -0
  117. package/dist/cli/commands/project-config/config/desired-state.js.map +1 -0
  118. package/dist/cli/commands/project-config/config/index.d.ts +2 -0
  119. package/dist/cli/commands/project-config/config/index.d.ts.map +1 -0
  120. package/dist/cli/commands/project-config/config/index.js +177 -0
  121. package/dist/cli/commands/project-config/config/index.js.map +1 -0
  122. package/dist/cli/commands/project-config/config/runtime.d.ts +3 -0
  123. package/dist/cli/commands/project-config/config/runtime.d.ts.map +1 -0
  124. package/dist/cli/commands/project-config/config/runtime.js +38 -0
  125. package/dist/cli/commands/project-config/config/runtime.js.map +1 -0
  126. package/dist/cli/commands/project-config/config/search.d.ts +3 -0
  127. package/dist/cli/commands/project-config/config/search.d.ts.map +1 -0
  128. package/dist/cli/commands/project-config/config/search.js +54 -0
  129. package/dist/cli/commands/project-config/config/search.js.map +1 -0
  130. package/dist/cli/commands/project-config/config/set.d.ts +2 -0
  131. package/dist/cli/commands/project-config/config/set.d.ts.map +1 -0
  132. package/dist/cli/commands/project-config/config/set.js +14 -0
  133. package/dist/cli/commands/project-config/config/set.js.map +1 -0
  134. package/dist/cli/commands/project-config/config/show.d.ts +6 -0
  135. package/dist/cli/commands/project-config/config/show.d.ts.map +1 -0
  136. package/dist/cli/commands/project-config/config/show.js +33 -0
  137. package/dist/cli/commands/project-config/config/show.js.map +1 -0
  138. package/dist/cli/commands/project-config/env/add.d.ts +3 -0
  139. package/dist/cli/commands/project-config/env/add.d.ts.map +1 -0
  140. package/dist/cli/commands/project-config/env/add.js +22 -0
  141. package/dist/cli/commands/project-config/env/add.js.map +1 -0
  142. package/dist/cli/commands/project-config/env/get.d.ts +3 -0
  143. package/dist/cli/commands/project-config/env/get.d.ts.map +1 -0
  144. package/dist/cli/commands/project-config/env/get.js +12 -0
  145. package/dist/cli/commands/project-config/env/get.js.map +1 -0
  146. package/dist/cli/commands/project-config/env/import.d.ts +3 -0
  147. package/dist/cli/commands/project-config/env/import.d.ts.map +1 -0
  148. package/dist/cli/commands/project-config/env/import.js +45 -0
  149. package/dist/cli/commands/project-config/env/import.js.map +1 -0
  150. package/dist/cli/commands/project-config/env/index.d.ts +2 -0
  151. package/dist/cli/commands/project-config/env/index.d.ts.map +1 -0
  152. package/dist/cli/commands/project-config/env/index.js +103 -0
  153. package/dist/cli/commands/project-config/env/index.js.map +1 -0
  154. package/dist/cli/commands/project-config/env/list.d.ts +3 -0
  155. package/dist/cli/commands/project-config/env/list.d.ts.map +1 -0
  156. package/dist/cli/commands/project-config/env/list.js +25 -0
  157. package/dist/cli/commands/project-config/env/list.js.map +1 -0
  158. package/dist/cli/commands/project-config/env/metadata-options.d.ts +9 -0
  159. package/dist/cli/commands/project-config/env/metadata-options.d.ts.map +1 -0
  160. package/dist/cli/commands/project-config/env/metadata-options.js +32 -0
  161. package/dist/cli/commands/project-config/env/metadata-options.js.map +1 -0
  162. package/dist/cli/commands/project-config/env/pull.d.ts +3 -0
  163. package/dist/cli/commands/project-config/env/pull.d.ts.map +1 -0
  164. package/dist/cli/commands/project-config/env/pull.js +50 -0
  165. package/dist/cli/commands/project-config/env/pull.js.map +1 -0
  166. package/dist/cli/commands/project-config/env/read-value.d.ts +3 -0
  167. package/dist/cli/commands/project-config/env/read-value.d.ts.map +1 -0
  168. package/dist/cli/commands/project-config/env/read-value.js +20 -0
  169. package/dist/cli/commands/project-config/env/read-value.js.map +1 -0
  170. package/dist/cli/commands/project-config/env/rm.d.ts +3 -0
  171. package/dist/cli/commands/project-config/env/rm.d.ts.map +1 -0
  172. package/dist/cli/commands/project-config/env/rm.js +23 -0
  173. package/dist/cli/commands/project-config/env/rm.js.map +1 -0
  174. package/dist/cli/commands/project-config/env/run.d.ts +3 -0
  175. package/dist/cli/commands/project-config/env/run.d.ts.map +1 -0
  176. package/dist/cli/commands/project-config/env/run.js +28 -0
  177. package/dist/cli/commands/project-config/env/run.js.map +1 -0
  178. package/dist/cli/commands/project-config/env/update.d.ts +3 -0
  179. package/dist/cli/commands/project-config/env/update.d.ts.map +1 -0
  180. package/dist/cli/commands/project-config/env/update.js +32 -0
  181. package/dist/cli/commands/project-config/env/update.js.map +1 -0
  182. package/dist/cli/commands/project-config/environment/create.d.ts +3 -0
  183. package/dist/cli/commands/project-config/environment/create.d.ts.map +1 -0
  184. package/dist/cli/commands/project-config/environment/create.js +33 -0
  185. package/dist/cli/commands/project-config/environment/create.js.map +1 -0
  186. package/dist/cli/commands/project-config/environment/delete.d.ts +3 -0
  187. package/dist/cli/commands/project-config/environment/delete.d.ts.map +1 -0
  188. package/dist/cli/commands/project-config/environment/delete.js +42 -0
  189. package/dist/cli/commands/project-config/environment/delete.js.map +1 -0
  190. package/dist/cli/commands/project-config/environment/find.d.ts +7 -0
  191. package/dist/cli/commands/project-config/environment/find.d.ts.map +1 -0
  192. package/dist/cli/commands/project-config/environment/find.js +18 -0
  193. package/dist/cli/commands/project-config/environment/find.js.map +1 -0
  194. package/dist/cli/commands/project-config/environment/index.d.ts +2 -0
  195. package/dist/cli/commands/project-config/environment/index.d.ts.map +1 -0
  196. package/dist/cli/commands/project-config/environment/index.js +76 -0
  197. package/dist/cli/commands/project-config/environment/index.js.map +1 -0
  198. package/dist/cli/commands/project-config/environment/initial-superadmin.d.ts +3 -0
  199. package/dist/cli/commands/project-config/environment/initial-superadmin.d.ts.map +1 -0
  200. package/dist/cli/commands/project-config/environment/initial-superadmin.js +13 -0
  201. package/dist/cli/commands/project-config/environment/initial-superadmin.js.map +1 -0
  202. package/dist/cli/commands/project-config/environment/list.d.ts +3 -0
  203. package/dist/cli/commands/project-config/environment/list.d.ts.map +1 -0
  204. package/dist/cli/commands/project-config/environment/list.js +23 -0
  205. package/dist/cli/commands/project-config/environment/list.js.map +1 -0
  206. package/dist/cli/commands/project-config/environment/show.d.ts +3 -0
  207. package/dist/cli/commands/project-config/environment/show.d.ts.map +1 -0
  208. package/dist/cli/commands/project-config/environment/show.js +30 -0
  209. package/dist/cli/commands/project-config/environment/show.js.map +1 -0
  210. package/dist/cli/commands/project-config/environment/update.d.ts +3 -0
  211. package/dist/cli/commands/project-config/environment/update.d.ts.map +1 -0
  212. package/dist/cli/commands/project-config/environment/update.js +19 -0
  213. package/dist/cli/commands/project-config/environment/update.js.map +1 -0
  214. package/dist/cli/commands/project-config/index.d.ts +3 -0
  215. package/dist/cli/commands/project-config/index.d.ts.map +1 -0
  216. package/dist/cli/commands/project-config/index.js +27 -0
  217. package/dist/cli/commands/project-config/index.js.map +1 -0
  218. package/dist/cli/commands/project-config/init/build-detection.d.ts +11 -0
  219. package/dist/cli/commands/project-config/init/build-detection.d.ts.map +1 -0
  220. package/dist/cli/commands/project-config/init/build-detection.js +113 -0
  221. package/dist/cli/commands/project-config/init/build-detection.js.map +1 -0
  222. package/dist/cli/commands/project-config/init/index.d.ts +2 -0
  223. package/dist/cli/commands/project-config/init/index.d.ts.map +1 -0
  224. package/dist/cli/commands/project-config/init/index.js +48 -0
  225. package/dist/cli/commands/project-config/init/index.js.map +1 -0
  226. package/dist/cli/commands/project-config/init/init.d.ts +14 -0
  227. package/dist/cli/commands/project-config/init/init.d.ts.map +1 -0
  228. package/dist/cli/commands/project-config/init/init.js +367 -0
  229. package/dist/cli/commands/project-config/init/init.js.map +1 -0
  230. package/dist/cli/commands/project-config/options.d.ts +10 -0
  231. package/dist/cli/commands/project-config/options.d.ts.map +1 -0
  232. package/dist/cli/commands/project-config/options.js +80 -0
  233. package/dist/cli/commands/project-config/options.js.map +1 -0
  234. package/dist/cli/commands/project-config/project/create.d.ts +3 -0
  235. package/dist/cli/commands/project-config/project/create.d.ts.map +1 -0
  236. package/dist/cli/commands/project-config/project/create.js +20 -0
  237. package/dist/cli/commands/project-config/project/create.js.map +1 -0
  238. package/dist/cli/commands/project-config/project/delete.d.ts +3 -0
  239. package/dist/cli/commands/project-config/project/delete.d.ts.map +1 -0
  240. package/dist/cli/commands/project-config/project/delete.js +28 -0
  241. package/dist/cli/commands/project-config/project/delete.js.map +1 -0
  242. package/dist/cli/commands/project-config/project/index.d.ts +2 -0
  243. package/dist/cli/commands/project-config/project/index.d.ts.map +1 -0
  244. package/dist/cli/commands/project-config/project/index.js +88 -0
  245. package/dist/cli/commands/project-config/project/index.js.map +1 -0
  246. package/dist/cli/commands/project-config/project/link.d.ts +3 -0
  247. package/dist/cli/commands/project-config/project/link.d.ts.map +1 -0
  248. package/dist/cli/commands/project-config/project/link.js +45 -0
  249. package/dist/cli/commands/project-config/project/link.js.map +1 -0
  250. package/dist/cli/commands/project-config/project/list.d.ts +3 -0
  251. package/dist/cli/commands/project-config/project/list.d.ts.map +1 -0
  252. package/dist/cli/commands/project-config/project/list.js +15 -0
  253. package/dist/cli/commands/project-config/project/list.js.map +1 -0
  254. package/dist/cli/commands/project-config/project/show.d.ts +3 -0
  255. package/dist/cli/commands/project-config/project/show.d.ts.map +1 -0
  256. package/dist/cli/commands/project-config/project/show.js +33 -0
  257. package/dist/cli/commands/project-config/project/show.js.map +1 -0
  258. package/dist/cli/commands/project-config/project/unlink.d.ts +3 -0
  259. package/dist/cli/commands/project-config/project/unlink.d.ts.map +1 -0
  260. package/dist/cli/commands/project-config/project/unlink.js +21 -0
  261. package/dist/cli/commands/project-config/project/unlink.js.map +1 -0
  262. package/dist/cli/commands/project-config/project/update.d.ts +3 -0
  263. package/dist/cli/commands/project-config/project/update.d.ts.map +1 -0
  264. package/dist/cli/commands/project-config/project/update.js +18 -0
  265. package/dist/cli/commands/project-config/project/update.js.map +1 -0
  266. package/dist/cli/commands/project-config/source/connect.d.ts +15 -0
  267. package/dist/cli/commands/project-config/source/connect.d.ts.map +1 -0
  268. package/dist/cli/commands/project-config/source/connect.js +208 -0
  269. package/dist/cli/commands/project-config/source/connect.js.map +1 -0
  270. package/dist/cli/commands/project-config/source/disconnect.d.ts +3 -0
  271. package/dist/cli/commands/project-config/source/disconnect.d.ts.map +1 -0
  272. package/dist/cli/commands/project-config/source/disconnect.js +27 -0
  273. package/dist/cli/commands/project-config/source/disconnect.js.map +1 -0
  274. package/dist/cli/commands/project-config/source/index.d.ts +2 -0
  275. package/dist/cli/commands/project-config/source/index.d.ts.map +1 -0
  276. package/dist/cli/commands/project-config/source/index.js +74 -0
  277. package/dist/cli/commands/project-config/source/index.js.map +1 -0
  278. package/dist/cli/commands/project-config/source/map.d.ts +3 -0
  279. package/dist/cli/commands/project-config/source/map.d.ts.map +1 -0
  280. package/dist/cli/commands/project-config/source/map.js +93 -0
  281. package/dist/cli/commands/project-config/source/map.js.map +1 -0
  282. package/dist/cli/commands/project-config/source/repos.d.ts +3 -0
  283. package/dist/cli/commands/project-config/source/repos.d.ts.map +1 -0
  284. package/dist/cli/commands/project-config/source/repos.js +18 -0
  285. package/dist/cli/commands/project-config/source/repos.js.map +1 -0
  286. package/dist/cli/commands/project-config/source/status.d.ts +3 -0
  287. package/dist/cli/commands/project-config/source/status.d.ts.map +1 -0
  288. package/dist/cli/commands/project-config/source/status.js +72 -0
  289. package/dist/cli/commands/project-config/source/status.js.map +1 -0
  290. package/dist/cli/commands/runtime-data/backup.d.ts +5 -0
  291. package/dist/cli/commands/runtime-data/backup.d.ts.map +1 -0
  292. package/dist/cli/commands/runtime-data/backup.js +107 -0
  293. package/dist/cli/commands/runtime-data/backup.js.map +1 -0
  294. package/dist/cli/commands/runtime-data/index.d.ts +2 -0
  295. package/dist/cli/commands/runtime-data/index.d.ts.map +1 -0
  296. package/dist/cli/commands/runtime-data/index.js +206 -0
  297. package/dist/cli/commands/runtime-data/index.js.map +1 -0
  298. package/dist/cli/commands/runtime-data/resource.d.ts +11 -0
  299. package/dist/cli/commands/runtime-data/resource.d.ts.map +1 -0
  300. package/dist/cli/commands/runtime-data/resource.js +147 -0
  301. package/dist/cli/commands/runtime-data/resource.js.map +1 -0
  302. package/dist/cli/commands/runtime-data/restore.d.ts +3 -0
  303. package/dist/cli/commands/runtime-data/restore.d.ts.map +1 -0
  304. package/dist/cli/commands/runtime-data/restore.js +119 -0
  305. package/dist/cli/commands/runtime-data/restore.js.map +1 -0
  306. package/dist/cli/commands/runtime-data/seeds.d.ts +6 -0
  307. package/dist/cli/commands/runtime-data/seeds.d.ts.map +1 -0
  308. package/dist/cli/commands/runtime-data/seeds.js +213 -0
  309. package/dist/cli/commands/runtime-data/seeds.js.map +1 -0
  310. package/dist/cli/commands/runtime-data/tunnel.d.ts +16 -0
  311. package/dist/cli/commands/runtime-data/tunnel.d.ts.map +1 -0
  312. package/dist/cli/commands/runtime-data/tunnel.js +249 -0
  313. package/dist/cli/commands/runtime-data/tunnel.js.map +1 -0
  314. package/dist/cli/host-arguments.d.ts +7 -0
  315. package/dist/cli/host-arguments.d.ts.map +1 -0
  316. package/dist/cli/host-arguments.js +46 -0
  317. package/dist/cli/host-arguments.js.map +1 -0
  318. package/dist/cli/host-nodes.d.ts +30 -0
  319. package/dist/cli/host-nodes.d.ts.map +1 -0
  320. package/dist/cli/host-nodes.js +17 -0
  321. package/dist/cli/host-nodes.js.map +1 -0
  322. package/dist/cli/index.d.ts +29 -0
  323. package/dist/cli/index.d.ts.map +1 -0
  324. package/dist/cli/index.js +60 -0
  325. package/dist/cli/index.js.map +1 -0
  326. package/dist/cli/lib/api-client.d.ts +19 -0
  327. package/dist/cli/lib/api-client.d.ts.map +1 -0
  328. package/dist/cli/lib/api-client.js +111 -0
  329. package/dist/cli/lib/api-client.js.map +1 -0
  330. package/dist/cli/lib/auth.d.ts +132 -0
  331. package/dist/cli/lib/auth.d.ts.map +1 -0
  332. package/dist/cli/lib/auth.js +505 -0
  333. package/dist/cli/lib/auth.js.map +1 -0
  334. package/dist/cli/lib/config.d.ts +7 -0
  335. package/dist/cli/lib/config.d.ts.map +1 -0
  336. package/dist/cli/lib/config.js +11 -0
  337. package/dist/cli/lib/config.js.map +1 -0
  338. package/dist/cli/lib/context.d.ts +10 -0
  339. package/dist/cli/lib/context.d.ts.map +1 -0
  340. package/dist/cli/lib/context.js +42 -0
  341. package/dist/cli/lib/context.js.map +1 -0
  342. package/dist/cli/lib/contract/build-settings.d.ts +36 -0
  343. package/dist/cli/lib/contract/build-settings.d.ts.map +1 -0
  344. package/dist/cli/lib/contract/build-settings.js +73 -0
  345. package/dist/cli/lib/contract/build-settings.js.map +1 -0
  346. package/dist/cli/lib/contract/database.d.ts +47 -0
  347. package/dist/cli/lib/contract/database.d.ts.map +1 -0
  348. package/dist/cli/lib/contract/database.js +29 -0
  349. package/dist/cli/lib/contract/database.js.map +1 -0
  350. package/dist/cli/lib/contract/deployment-resource-labels.d.ts +11 -0
  351. package/dist/cli/lib/contract/deployment-resource-labels.d.ts.map +1 -0
  352. package/dist/cli/lib/contract/deployment-resource-labels.js +80 -0
  353. package/dist/cli/lib/contract/deployment-resource-labels.js.map +1 -0
  354. package/dist/cli/lib/contract/deployments.d.ts +128 -0
  355. package/dist/cli/lib/contract/deployments.d.ts.map +1 -0
  356. package/dist/cli/lib/contract/deployments.js +46 -0
  357. package/dist/cli/lib/contract/deployments.js.map +1 -0
  358. package/dist/cli/lib/contract/desired-state.d.ts +104 -0
  359. package/dist/cli/lib/contract/desired-state.d.ts.map +1 -0
  360. package/dist/cli/lib/contract/desired-state.js +171 -0
  361. package/dist/cli/lib/contract/desired-state.js.map +1 -0
  362. package/dist/cli/lib/contract/foreign-credentials.d.ts +49 -0
  363. package/dist/cli/lib/contract/foreign-credentials.d.ts.map +1 -0
  364. package/dist/cli/lib/contract/foreign-credentials.js +71 -0
  365. package/dist/cli/lib/contract/foreign-credentials.js.map +1 -0
  366. package/dist/cli/lib/contract/logs.d.ts +44 -0
  367. package/dist/cli/lib/contract/logs.d.ts.map +1 -0
  368. package/dist/cli/lib/contract/logs.js +66 -0
  369. package/dist/cli/lib/contract/logs.js.map +1 -0
  370. package/dist/cli/lib/contract/projects.d.ts +31 -0
  371. package/dist/cli/lib/contract/projects.d.ts.map +1 -0
  372. package/dist/cli/lib/contract/projects.js +9 -0
  373. package/dist/cli/lib/contract/projects.js.map +1 -0
  374. package/dist/cli/lib/contract/public-error-details.d.ts +4 -0
  375. package/dist/cli/lib/contract/public-error-details.d.ts.map +1 -0
  376. package/dist/cli/lib/contract/public-error-details.js +248 -0
  377. package/dist/cli/lib/contract/public-error-details.js.map +1 -0
  378. package/dist/cli/lib/contract/runtime-operations.d.ts +87 -0
  379. package/dist/cli/lib/contract/runtime-operations.d.ts.map +1 -0
  380. package/dist/cli/lib/contract/runtime-operations.js +67 -0
  381. package/dist/cli/lib/contract/runtime-operations.js.map +1 -0
  382. package/dist/cli/lib/contract/seeds.d.ts +31 -0
  383. package/dist/cli/lib/contract/seeds.d.ts.map +1 -0
  384. package/dist/cli/lib/contract/seeds.js +43 -0
  385. package/dist/cli/lib/contract/seeds.js.map +1 -0
  386. package/dist/cli/lib/contract/source-repository.d.ts +73 -0
  387. package/dist/cli/lib/contract/source-repository.d.ts.map +1 -0
  388. package/dist/cli/lib/contract/source-repository.js +31 -0
  389. package/dist/cli/lib/contract/source-repository.js.map +1 -0
  390. package/dist/cli/lib/contract/wire-types.d.ts +47 -0
  391. package/dist/cli/lib/contract/wire-types.d.ts.map +1 -0
  392. package/dist/cli/lib/contract/wire-types.js +13 -0
  393. package/dist/cli/lib/contract/wire-types.js.map +1 -0
  394. package/dist/cli/lib/contract/wire-values.d.ts +6 -0
  395. package/dist/cli/lib/contract/wire-values.d.ts.map +1 -0
  396. package/dist/cli/lib/contract/wire-values.js +21 -0
  397. package/dist/cli/lib/contract/wire-values.js.map +1 -0
  398. package/dist/cli/lib/dotenv.d.ts +2 -0
  399. package/dist/cli/lib/dotenv.d.ts.map +1 -0
  400. package/dist/cli/lib/dotenv.js +28 -0
  401. package/dist/cli/lib/dotenv.js.map +1 -0
  402. package/dist/cli/lib/env-file.d.ts +2 -0
  403. package/dist/cli/lib/env-file.d.ts.map +1 -0
  404. package/dist/cli/lib/env-file.js +26 -0
  405. package/dist/cli/lib/env-file.js.map +1 -0
  406. package/dist/cli/lib/env-preflight.d.ts +24 -0
  407. package/dist/cli/lib/env-preflight.d.ts.map +1 -0
  408. package/dist/cli/lib/env-preflight.js +265 -0
  409. package/dist/cli/lib/env-preflight.js.map +1 -0
  410. package/dist/cli/lib/error-output.d.ts +3 -0
  411. package/dist/cli/lib/error-output.d.ts.map +1 -0
  412. package/dist/cli/lib/error-output.js +2 -0
  413. package/dist/cli/lib/error-output.js.map +1 -0
  414. package/dist/cli/lib/errors.d.ts +37 -0
  415. package/dist/cli/lib/errors.d.ts.map +1 -0
  416. package/dist/cli/lib/errors.js +147 -0
  417. package/dist/cli/lib/errors.js.map +1 -0
  418. package/dist/cli/lib/file-lock.d.ts +23 -0
  419. package/dist/cli/lib/file-lock.d.ts.map +1 -0
  420. package/dist/cli/lib/file-lock.js +121 -0
  421. package/dist/cli/lib/file-lock.js.map +1 -0
  422. package/dist/cli/lib/format.d.ts +6 -0
  423. package/dist/cli/lib/format.d.ts.map +1 -0
  424. package/dist/cli/lib/format.js +44 -0
  425. package/dist/cli/lib/format.js.map +1 -0
  426. package/dist/cli/lib/id-prefix.d.ts +6 -0
  427. package/dist/cli/lib/id-prefix.d.ts.map +1 -0
  428. package/dist/cli/lib/id-prefix.js +18 -0
  429. package/dist/cli/lib/id-prefix.js.map +1 -0
  430. package/dist/cli/lib/invocation.d.ts +6 -0
  431. package/dist/cli/lib/invocation.d.ts.map +1 -0
  432. package/dist/cli/lib/invocation.js +34 -0
  433. package/dist/cli/lib/invocation.js.map +1 -0
  434. package/dist/cli/lib/log-stream.d.ts +7 -0
  435. package/dist/cli/lib/log-stream.d.ts.map +1 -0
  436. package/dist/cli/lib/log-stream.js +179 -0
  437. package/dist/cli/lib/log-stream.js.map +1 -0
  438. package/dist/cli/lib/logger.d.ts +5 -0
  439. package/dist/cli/lib/logger.d.ts.map +1 -0
  440. package/dist/cli/lib/logger.js +52 -0
  441. package/dist/cli/lib/logger.js.map +1 -0
  442. package/dist/cli/lib/open-browser.d.ts +2 -0
  443. package/dist/cli/lib/open-browser.d.ts.map +1 -0
  444. package/dist/cli/lib/open-browser.js +8 -0
  445. package/dist/cli/lib/open-browser.js.map +1 -0
  446. package/dist/cli/lib/organization.d.ts +3 -0
  447. package/dist/cli/lib/organization.d.ts.map +1 -0
  448. package/dist/cli/lib/organization.js +20 -0
  449. package/dist/cli/lib/organization.js.map +1 -0
  450. package/dist/cli/lib/project-link.d.ts +12 -0
  451. package/dist/cli/lib/project-link.d.ts.map +1 -0
  452. package/dist/cli/lib/project-link.js +69 -0
  453. package/dist/cli/lib/project-link.js.map +1 -0
  454. package/dist/cli/lib/resolve.d.ts +20 -0
  455. package/dist/cli/lib/resolve.d.ts.map +1 -0
  456. package/dist/cli/lib/resolve.js +88 -0
  457. package/dist/cli/lib/resolve.js.map +1 -0
  458. package/dist/cli/lib/sleep.d.ts +2 -0
  459. package/dist/cli/lib/sleep.d.ts.map +1 -0
  460. package/dist/cli/lib/sleep.js +4 -0
  461. package/dist/cli/lib/sleep.js.map +1 -0
  462. package/dist/cli/lib/slug.d.ts +3 -0
  463. package/dist/cli/lib/slug.d.ts.map +1 -0
  464. package/dist/cli/lib/slug.js +13 -0
  465. package/dist/cli/lib/slug.js.map +1 -0
  466. package/dist/cli/lib/source-repository-link.d.ts +5 -0
  467. package/dist/cli/lib/source-repository-link.d.ts.map +1 -0
  468. package/dist/cli/lib/source-repository-link.js +28 -0
  469. package/dist/cli/lib/source-repository-link.js.map +1 -0
  470. package/dist/cli/lib/types.d.ts +58 -0
  471. package/dist/cli/lib/types.d.ts.map +1 -0
  472. package/dist/cli/lib/types.js +10 -0
  473. package/dist/cli/lib/types.js.map +1 -0
  474. package/dist/cli/root-options.d.ts +14 -0
  475. package/dist/cli/root-options.d.ts.map +1 -0
  476. package/dist/cli/root-options.js +53 -0
  477. package/dist/cli/root-options.js.map +1 -0
  478. package/dist/cli-plugin.d.ts +22 -0
  479. package/dist/cli-plugin.d.ts.map +1 -0
  480. package/dist/cli-plugin.js +30 -0
  481. package/dist/cli-plugin.js.map +1 -0
  482. package/dist/cloud-config-module.d.ts +3 -0
  483. package/dist/cloud-config-module.d.ts.map +1 -0
  484. package/dist/cloud-config-module.js +16 -0
  485. package/dist/cloud-config-module.js.map +1 -0
  486. package/dist/dev/cli-host.d.ts +3 -0
  487. package/dist/dev/cli-host.d.ts.map +1 -0
  488. package/dist/dev/cli-host.js +72 -0
  489. package/dist/dev/cli-host.js.map +1 -0
  490. package/dist/dev/dev-command.d.ts +7 -0
  491. package/dist/dev/dev-command.d.ts.map +1 -0
  492. package/dist/dev/dev-command.js +122 -0
  493. package/dist/dev/dev-command.js.map +1 -0
  494. package/dist/dev/dev-config.d.ts +4 -0
  495. package/dist/dev/dev-config.d.ts.map +1 -0
  496. package/dist/dev/dev-config.js +28 -0
  497. package/dist/dev/dev-config.js.map +1 -0
  498. package/dist/dev/dev-migrate.d.ts +2 -0
  499. package/dist/dev/dev-migrate.d.ts.map +1 -0
  500. package/dist/dev/dev-migrate.js +17 -0
  501. package/dist/dev/dev-migrate.js.map +1 -0
  502. package/dist/dev/dev-process.d.ts +2 -0
  503. package/dist/dev/dev-process.d.ts.map +1 -0
  504. package/dist/dev/dev-process.js +14 -0
  505. package/dist/dev/dev-process.js.map +1 -0
  506. package/dist/dev/dev-server.d.ts +2 -0
  507. package/dist/dev/dev-server.d.ts.map +1 -0
  508. package/dist/dev/dev-server.js +15 -0
  509. package/dist/dev/dev-server.js.map +1 -0
  510. package/dist/dev/dev-worker.d.ts +2 -0
  511. package/dist/dev/dev-worker.d.ts.map +1 -0
  512. package/dist/dev/dev-worker.js +11 -0
  513. package/dist/dev/dev-worker.js.map +1 -0
  514. package/dist/dev/local-services.d.ts +23 -0
  515. package/dist/dev/local-services.d.ts.map +1 -0
  516. package/dist/dev/local-services.js +288 -0
  517. package/dist/dev/local-services.js.map +1 -0
  518. package/dist/dev/project-layout.d.ts +11 -0
  519. package/dist/dev/project-layout.d.ts.map +1 -0
  520. package/dist/dev/project-layout.js +89 -0
  521. package/dist/dev/project-layout.js.map +1 -0
  522. package/dist/entrypoint.js +3 -12
  523. package/dist/entrypoint.js.map +1 -1
  524. package/dist/index.d.ts +3 -1
  525. package/dist/index.d.ts.map +1 -1
  526. package/dist/index.js +3 -1
  527. package/dist/index.js.map +1 -1
  528. package/dist/local-asset-server.d.ts +4 -0
  529. package/dist/local-asset-server.d.ts.map +1 -0
  530. package/dist/local-asset-server.js +24 -0
  531. package/dist/local-asset-server.js.map +1 -0
  532. package/dist/local-cache-plugin.d.ts +5 -0
  533. package/dist/local-cache-plugin.d.ts.map +1 -0
  534. package/dist/local-cache-plugin.js +68 -0
  535. package/dist/local-cache-plugin.js.map +1 -0
  536. package/dist/local-cache.d.ts +17 -0
  537. package/dist/local-cache.d.ts.map +1 -0
  538. package/dist/local-cache.js +144 -0
  539. package/dist/local-cache.js.map +1 -0
  540. package/dist/local-dashboard-plugin.d.ts +9 -0
  541. package/dist/local-dashboard-plugin.d.ts.map +1 -0
  542. package/dist/local-dashboard-plugin.js +37 -0
  543. package/dist/local-dashboard-plugin.js.map +1 -0
  544. package/dist/local-database.d.ts +15 -0
  545. package/dist/local-database.d.ts.map +1 -0
  546. package/dist/local-database.js +64 -0
  547. package/dist/local-database.js.map +1 -0
  548. package/dist/local-runtime.d.ts +15 -2
  549. package/dist/local-runtime.d.ts.map +1 -1
  550. package/dist/local-runtime.js +145 -28
  551. package/dist/local-runtime.js.map +1 -1
  552. package/package.json +65 -7
@@ -0,0 +1,213 @@
1
+ import { createReadStream } from "node:fs";
2
+ import { stat } from "node:fs/promises";
3
+ import { basename } from "node:path";
4
+ import * as prompts from "@clack/prompts";
5
+ import { cloudInvocation, createAuthenticatedClient, formatBytes, formatDateTime, formatTable, requiredArgument, resolveEnvironment, sleep, } from "../../index.js";
6
+ import { SEED_CONTENT_TYPE, SEED_UPLOAD_PRECONDITION_HEADER, SEED_UPLOAD_PRECONDITION_VALUE, isValidSeedName, } from "../../lib/contract/seeds.js";
7
+ const POLL_INTERVAL_MS = 3_000;
8
+ // Long enough for a real dump. The apply runs as a task in the environment's Cell and the platform
9
+ // stops it at its own, longer deadline, so a client giving up here abandons the wait rather than the
10
+ // work: the operation goes on and its outcome is on the record the id names.
11
+ const APPLY_TIMEOUT_MS = 60 * 60 * 1000;
12
+ // Postgres restore does not repopulate the search index — that runs separately
13
+ // (CLO-220 automates it). Until then, tell the operator search is empty.
14
+ const SEARCH_WARNING = "The search index was not rebuilt. Products won't appear in search until a reindex runs (Admin UI → Products → reindex, or your app's reindex job).";
15
+ export async function pushSeed({ args, globals }) {
16
+ const name = requiredArgument(args, 0, "name");
17
+ const file = requiredArgument(args, 1, "file");
18
+ assertValidSeedName(name);
19
+ if (!file.endsWith(".gz")) {
20
+ throw new Error(`Seed artifacts must be gzipped plain-SQL ('.gz'). "${basename(file)}" does not end with .gz.`);
21
+ }
22
+ const info = await stat(file).catch(() => {
23
+ throw new Error(`File not found: ${file}`);
24
+ });
25
+ if (!info.isFile()) {
26
+ throw new Error(`Not a file: ${file}`);
27
+ }
28
+ const client = createAuthenticatedClient(globals);
29
+ const spinner = globals.json ? null : prompts.spinner();
30
+ spinner?.start(`Uploading ${basename(file)} as seed "${name}"...`);
31
+ // Request a short-lived presigned upload URL, then PUT the bytes straight to
32
+ // storage — the CLI never holds bucket credentials. Two signed headers must be
33
+ // echoed exactly: the Content-Type the URL was signed with, and the create-only
34
+ // precondition, which is part of the signature rather than a header the client
35
+ // may choose. The file is streamed (not buffered) with a known Content-Length,
36
+ // so a multi-GB dump never has to fit in the CLI's memory.
37
+ const ticket = await client.post(`/seeds/${encodeURIComponent(name)}/upload-url`);
38
+ // `duplex: "half"` is required when the body is a stream but isn't in the DOM
39
+ // RequestInit type; the intersection lets us pass it without a cast.
40
+ const uploadInit = {
41
+ method: "PUT",
42
+ headers: {
43
+ "content-type": SEED_CONTENT_TYPE,
44
+ "content-length": String(info.size),
45
+ [SEED_UPLOAD_PRECONDITION_HEADER]: SEED_UPLOAD_PRECONDITION_VALUE,
46
+ },
47
+ body: fileToWebStream(file),
48
+ duplex: "half",
49
+ };
50
+ const response = await fetch(ticket.uploadUrl, uploadInit);
51
+ if (response.status === 412) {
52
+ spinner?.stop("Upload rejected");
53
+ throw new Error(`A seed named "${name}" already exists. Delete it first with \`${cloudInvocation()} seed rm ${name}\`, or use a different name.`);
54
+ }
55
+ if (!response.ok) {
56
+ spinner?.stop("Upload failed");
57
+ throw new Error(`Upload failed: HTTP ${response.status} ${response.statusText}`);
58
+ }
59
+ spinner?.stop("Upload complete.");
60
+ if (globals.json) {
61
+ writeCompactJson({ name, sizeBytes: info.size });
62
+ return;
63
+ }
64
+ prompts.log.success(`Seed "${name}" uploaded (${formatBytes(info.size)}).`);
65
+ prompts.log.info(`Apply it with \`${cloudInvocation()} seed apply ${name} -e <environment>\`.`);
66
+ }
67
+ export async function listSeeds({ globals }) {
68
+ const client = createAuthenticatedClient(globals);
69
+ // In JSON mode, keep stdout to the machine-readable payload only — no spinner
70
+ // or notes, which clack writes to stdout and would corrupt the output.
71
+ const spinner = globals.json ? null : prompts.spinner();
72
+ spinner?.start("Fetching seeds...");
73
+ const seeds = await client.get("/seeds");
74
+ spinner?.stop("Done.");
75
+ if (globals.json) {
76
+ writeCompactJson(seeds);
77
+ return;
78
+ }
79
+ if (seeds.length === 0) {
80
+ prompts.log.info(`No seeds yet. Upload one with \`${cloudInvocation()} seed push <name> <file.gz>\`.`);
81
+ return;
82
+ }
83
+ const rows = seeds
84
+ .slice()
85
+ .sort((a, b) => a.name.localeCompare(b.name))
86
+ .map((s) => [s.name, formatBytes(s.sizeBytes), formatDateTime(s.updatedAt)]);
87
+ prompts.note(formatTable(["NAME", "SIZE", "UPDATED"], rows), "Seeds");
88
+ prompts.log.info(`Apply one with \`${cloudInvocation()} seed apply <name> -e <environment>\`.`);
89
+ }
90
+ export async function applySeed({ args, options, globals }) {
91
+ const name = requiredArgument(args, 0, "name");
92
+ assertValidSeedName(name);
93
+ // Applying a seed overwrites the environment's entire database, so confirm
94
+ // unless `--yes`. JSON / non-interactive callers must pass `--yes` — checked
95
+ // before resolving the environment so it fails fast without a network call.
96
+ const needsConfirmation = options.yes !== true;
97
+ if (needsConfirmation && (globals.json || !process.stdin.isTTY)) {
98
+ throw new Error("Applying a seed overwrites all data in the target environment. Re-run with --yes to proceed non-interactively.");
99
+ }
100
+ const { project, environment } = await resolveEnvironment(globals);
101
+ if (needsConfirmation) {
102
+ const confirmed = await prompts.confirm({
103
+ initialValue: false,
104
+ message: `Apply seed "${name}" to ${project.slug} / ${environment.slug}? All current data in the database will be overwritten.`,
105
+ });
106
+ if (prompts.isCancel(confirmed) || !confirmed) {
107
+ prompts.log.info("Apply cancelled.");
108
+ return;
109
+ }
110
+ }
111
+ const client = createAuthenticatedClient(globals);
112
+ const spinner = globals.json ? null : prompts.spinner();
113
+ spinner?.start(`Applying seed "${name}" to ${project.slug} / ${environment.slug}...`);
114
+ let started;
115
+ try {
116
+ started = await client.post(`/environments/${environment.id}/seed`, { name });
117
+ }
118
+ catch (error) {
119
+ spinner?.stop("Seed could not be started");
120
+ throw error;
121
+ }
122
+ const startTime = Date.now();
123
+ let current = { operationId: started.operationId, status: "pending" };
124
+ while (current.status === "pending") {
125
+ if (Date.now() - startTime > APPLY_TIMEOUT_MS) {
126
+ spinner?.stop("Seeding is taking longer than expected");
127
+ throw new Error(`Seed apply ${started.operationId} has not finished after an hour. It is still running, and Vendure Cloud will finish or stop it on its own — do not deploy this environment or apply another seed to it until then.`);
128
+ }
129
+ await sleep(POLL_INTERVAL_MS);
130
+ current = await client.get(`/environments/${environment.id}/seed/${encodeURIComponent(started.operationId)}`);
131
+ }
132
+ if (current.status !== "success") {
133
+ spinner?.stop("Seed apply failed");
134
+ // The control plane's own sentence when it has one — it is written for a customer and says what
135
+ // to do next. The status alone is the fallback, for a control plane that predates the field.
136
+ throw new Error(current.errorDetails ??
137
+ `Seed apply ${started.operationId} ended with status "${current.status}".`);
138
+ }
139
+ spinner?.stop("Seed applied.");
140
+ if (globals.json) {
141
+ writeCompactJson({
142
+ operationId: current.operationId,
143
+ status: current.status,
144
+ environmentId: environment.id,
145
+ });
146
+ return;
147
+ }
148
+ prompts.log.success(`Seed "${name}" applied to ${project.slug} / ${environment.slug}.`);
149
+ prompts.log.warn(SEARCH_WARNING);
150
+ }
151
+ export async function removeSeed({ args, options, globals }) {
152
+ const name = requiredArgument(args, 0, "name");
153
+ assertValidSeedName(name);
154
+ // A seed can be referenced by an environment's config, so confirm before
155
+ // deleting. `--yes` bypasses for scripts; JSON mode has no TTY to prompt on and
156
+ // therefore requires `--yes`.
157
+ if (options.yes !== true) {
158
+ if (globals.json || !process.stdin.isTTY) {
159
+ throw new Error(`Refusing to delete seed "${name}" without confirmation — pass --yes.`);
160
+ }
161
+ const confirmed = await prompts.confirm({
162
+ initialValue: false,
163
+ message: `Delete seed "${name}"? Environments configured to use it will fail to seed until it is replaced.`,
164
+ });
165
+ if (prompts.isCancel(confirmed) || !confirmed) {
166
+ prompts.log.info("Deletion cancelled.");
167
+ return;
168
+ }
169
+ }
170
+ const client = createAuthenticatedClient(globals);
171
+ const result = await client.delete(`/seeds/${encodeURIComponent(name)}`);
172
+ if (globals.json) {
173
+ writeCompactJson(result);
174
+ return;
175
+ }
176
+ prompts.log.success(`Seed "${result.name}" deleted.`);
177
+ }
178
+ // Client-side pre-validation for a fast, clear error; the control plane is the
179
+ // authority. Delegates to the single seed-name rule the wire contract carries
180
+ // (CLO-217) so the two never drift.
181
+ function assertValidSeedName(name) {
182
+ if (!isValidSeedName(name)) {
183
+ throw new Error(`Invalid seed name "${name}". Use lowercase letters, numbers and hyphens (max 63 characters), e.g. "flowtech-preview-slim".`);
184
+ }
185
+ }
186
+ // One line, no indentation. `writeJson` pretty-prints, which is what `resource` has always written
187
+ // and what these four have never written; a script reading a seed command's stdout line by line
188
+ // would stop working on the change.
189
+ function writeCompactJson(value) {
190
+ process.stdout.write(`${JSON.stringify(value)}\n`);
191
+ }
192
+ // Bridges a file read stream to a web ReadableStream for a streaming upload body,
193
+ // so a multi-GB dump is never held in memory. Driving the file's async iterator
194
+ // from `pull` gives natural backpressure — a chunk is only read when the upload
195
+ // consumer asks for one.
196
+ function fileToWebStream(path) {
197
+ const iterator = createReadStream(path)[Symbol.asyncIterator]();
198
+ return new ReadableStream({
199
+ async pull(controller) {
200
+ const { done, value } = await iterator.next();
201
+ if (done) {
202
+ controller.close();
203
+ }
204
+ else {
205
+ controller.enqueue(value);
206
+ }
207
+ },
208
+ async cancel() {
209
+ await iterator.return?.();
210
+ },
211
+ });
212
+ }
213
+ //# sourceMappingURL=seeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../../../src/cli/commands/runtime-data/seeds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ApiClient, type CloudCommandInput } from "../../index.js";
2
+ import type { TunnelTicket } from "../../lib/contract/database.js";
3
+ export interface TunnelHandle {
4
+ port: number;
5
+ database: TunnelTicket["database"];
6
+ close: () => Promise<void>;
7
+ }
8
+ export declare function buildConnectionString(database: TunnelTicket["database"], port: number): string;
9
+ export declare function openDatabaseTunnel({ options, globals }: CloudCommandInput): Promise<number>;
10
+ export declare function startDbTunnel(options: {
11
+ client: ApiClient;
12
+ environmentId: string;
13
+ apiUrl: string;
14
+ requestedPort?: number;
15
+ }): Promise<TunnelHandle>;
16
+ //# sourceMappingURL=tunnel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/runtime-data/tunnel.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,iBAAiB,EAKvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAenE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAiBD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9F;AAED,wBAAsB,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CjG;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6BxB"}
@@ -0,0 +1,249 @@
1
+ import net from "node:net";
2
+ import * as prompts from "@clack/prompts";
3
+ import { createAuthenticatedClient, getApiUrl, logger, resolveEnvironment, } from "../../index.js";
4
+ // Local tunnel to the environment database. Per accepted TCP connection the
5
+ // CLI mints a single-use ticket over HTTPS and opens one WebSocket to the
6
+ // control plane, which relays to the database. The ticket travels as the
7
+ // FIRST WS message — never in the URL.
8
+ //
9
+ // Uses the runtime's built-in WebSocket, which Node has had since 22.
10
+ const DEFAULT_PORT = 5432;
11
+ // Gateway close codes (mirror apps/control-plane database-tunnel.gateway.ts).
12
+ const CLOSE_IDLE_TIMEOUT = 4410;
13
+ const CLOSE_MAX_DURATION = 4411;
14
+ // Local connection string for the tunnel. The relay is a transparent pipe and
15
+ // TLS is negotiated end-to-end with the database (ADR-0006), so the client must
16
+ // request TLS — `sslmode=require` (not `verify-full`), because the client dials
17
+ // 127.0.0.1 and the cert belongs to the remote DB: encrypt without hostname
18
+ // verification.
19
+ //
20
+ // This is libpq semantics (psql and other libpq clients consume this string),
21
+ // where `require` means "encrypt, do not verify the CA". The managed app runs
22
+ // node-postgres, whose `PGSSLMODE` handling differs — there the equivalent value
23
+ // is `no-verify`, injected as a managed env var (ADR-0011). Same intent, different
24
+ // driver: don't unify the two values.
25
+ //
26
+ // Host is `127.0.0.1`, not `localhost`: the listener binds IPv4 loopback, and
27
+ // `localhost` resolves to IPv6 (`::1`) first on many systems — a client using it
28
+ // would miss the tunnel (and may hit a local Postgres bound on `::1:5432`).
29
+ export function buildConnectionString(database, port) {
30
+ const sslSuffix = database.tlsEnabled ? "?sslmode=require" : "";
31
+ return `postgres://${encodeURIComponent(database.username)}:${encodeURIComponent(database.password)}@127.0.0.1:${port}/${encodeURIComponent(database.database)}${sslSuffix}`;
32
+ }
33
+ export async function openDatabaseTunnel({ options, globals }) {
34
+ const requestedPort = readPort(options.port);
35
+ const { project, environment } = await resolveEnvironment(globals);
36
+ const client = createAuthenticatedClient(globals);
37
+ const spinner = prompts.spinner();
38
+ spinner.start(`Opening tunnel to ${project.slug} / ${environment.slug} database...`);
39
+ let handle;
40
+ try {
41
+ handle = await startDbTunnel({
42
+ client,
43
+ environmentId: environment.id,
44
+ apiUrl: getApiUrl(),
45
+ requestedPort,
46
+ });
47
+ }
48
+ catch (error) {
49
+ spinner.stop("Could not open tunnel");
50
+ throw error;
51
+ }
52
+ const { database, port } = handle;
53
+ const connectionString = buildConnectionString(database, port);
54
+ // Printed as plain lines, not a boxed note: the connection string is long
55
+ // enough to overflow a clack note box and fragment its borders.
56
+ spinner.stop(`Tunnel open on 127.0.0.1:${port}`);
57
+ prompts.log.message(connectionString);
58
+ prompts.log.info("Press Ctrl-C to close the tunnel.");
59
+ // The command runs until Ctrl-C — the net server holds the event loop — and then answers with
60
+ // the code the host exits on. `vcloud` called `process.exit` from the signal handler itself;
61
+ // answering instead leaves the exiting where every other command in this family leaves it, and
62
+ // is what makes the teardown observable from a test.
63
+ return await new Promise((resolve) => {
64
+ process.once("SIGINT", () => {
65
+ void handle
66
+ .close()
67
+ .then(() => {
68
+ prompts.outro("Tunnel closed.");
69
+ resolve(0);
70
+ })
71
+ // Never hang on Ctrl-C: if teardown rejects, answer non-zero anyway.
72
+ .catch(() => resolve(1));
73
+ });
74
+ });
75
+ }
76
+ export async function startDbTunnel(options) {
77
+ const { client, environmentId, apiUrl, requestedPort } = options;
78
+ // The first ticket is minted purely to validate access and fetch the
79
+ // connection credentials — every TCP connection mints its own.
80
+ const initial = await client.post(`/environments/${environmentId}/database/tunnel-tickets`);
81
+ const wsUrl = `${apiUrl.replace(/^http/, "ws")}${initial.wsPath}`;
82
+ const activeSockets = new Set();
83
+ const server = net.createServer((socket) => {
84
+ activeSockets.add(socket);
85
+ socket.on("close", () => activeSockets.delete(socket));
86
+ void relayConnection(socket, client, environmentId, wsUrl);
87
+ });
88
+ const port = await listenWithFallback(server, requestedPort);
89
+ return {
90
+ port,
91
+ database: initial.database,
92
+ close: async () => {
93
+ for (const socket of activeSockets) {
94
+ socket.destroy();
95
+ }
96
+ await new Promise((resolve) => server.close(() => resolve()));
97
+ },
98
+ };
99
+ }
100
+ async function relayConnection(socket, client, environmentId, wsUrl) {
101
+ // Buffer client bytes (psql sends its startup packet immediately) until
102
+ // the relay is ready. The data listener is attached right away and the queue
103
+ // is kept here rather than left to pause()/resume(), so no byte can arrive
104
+ // while the socket is paused and be dropped by the runtime underneath.
105
+ let ready = false;
106
+ let wsSend = null;
107
+ const pending = [];
108
+ let closed = false;
109
+ let activeWs = null;
110
+ // Idempotent teardown, wired before the ticket-mint await below. The `error`
111
+ // listener must exist from the start: a net.Socket with no 'error' handler
112
+ // throws on a peer RST, and during the mint window there is no other handler —
113
+ // an early RST would otherwise crash the relay. `activeWs` is null until the
114
+ // mint resolves and the WS is created; teardown closes it once it exists. The
115
+ // `closed` flag also lets us skip opening a doomed WS if the client went away
116
+ // mid-mint.
117
+ const teardown = () => {
118
+ // Re-entrant: the `activeWs.close()` below can dispatch the WS `error` event
119
+ // synchronously, whose listener calls teardown again (CLO-550).
120
+ if (closed) {
121
+ return;
122
+ }
123
+ closed = true;
124
+ socket.destroy();
125
+ if (activeWs &&
126
+ (activeWs.readyState === WebSocket.OPEN || activeWs.readyState === WebSocket.CONNECTING)) {
127
+ activeWs.close();
128
+ }
129
+ };
130
+ socket.on("error", teardown);
131
+ socket.on("close", teardown);
132
+ socket.on("data", (chunk) => {
133
+ if (ready && wsSend) {
134
+ wsSend(chunk);
135
+ }
136
+ else {
137
+ pending.push(chunk);
138
+ }
139
+ });
140
+ let ticket;
141
+ try {
142
+ ticket = await client.post(`/environments/${environmentId}/database/tunnel-tickets`);
143
+ }
144
+ catch (error) {
145
+ logger.warn({ error: error instanceof Error ? error.message : error }, "Tunnel ticket mint failed");
146
+ prompts.log.warn("Connection rejected — could not authorize the tunnel.");
147
+ teardown();
148
+ return;
149
+ }
150
+ if (closed) {
151
+ return;
152
+ }
153
+ const ws = new WebSocket(wsUrl);
154
+ activeWs = ws;
155
+ ws.binaryType = "arraybuffer";
156
+ ws.addEventListener("open", () => {
157
+ ws.send(JSON.stringify({ ticket: ticket.ticket }));
158
+ });
159
+ ws.addEventListener("message", (event) => {
160
+ if (!ready) {
161
+ // First message is the relay handshake.
162
+ if (typeof event.data === "string") {
163
+ try {
164
+ const message = JSON.parse(event.data);
165
+ if (message &&
166
+ typeof message === "object" &&
167
+ message.type === "ready") {
168
+ ready = true;
169
+ wsSend = (chunk) => ws.send(chunk);
170
+ for (const chunk of pending) {
171
+ wsSend(chunk);
172
+ }
173
+ pending.length = 0;
174
+ return;
175
+ }
176
+ }
177
+ catch {
178
+ // Fall through — unexpected handshake, tear down.
179
+ }
180
+ }
181
+ logger.warn({ data: String(event.data) }, "Unexpected tunnel handshake message");
182
+ teardown();
183
+ return;
184
+ }
185
+ if (typeof event.data === "string") {
186
+ return; // Control messages after handshake are ignored.
187
+ }
188
+ socket.write(Buffer.from(event.data));
189
+ });
190
+ ws.addEventListener("close", (event) => {
191
+ if (!ready && event.code !== 1000) {
192
+ prompts.log.warn("Connection rejected by the tunnel endpoint.");
193
+ logger.warn({ code: event.code, reason: event.reason }, "Tunnel WS closed before ready");
194
+ }
195
+ else if (event.code === CLOSE_IDLE_TIMEOUT) {
196
+ prompts.log.warn("Connection closed: idle timeout. Reconnect to continue.");
197
+ }
198
+ else if (event.code === CLOSE_MAX_DURATION) {
199
+ prompts.log.warn("Connection closed: maximum tunnel duration reached. Reconnect to continue.");
200
+ }
201
+ socket.destroy();
202
+ });
203
+ ws.addEventListener("error", () => {
204
+ logger.warn("Tunnel WS error");
205
+ teardown();
206
+ });
207
+ }
208
+ // `--port` is declared with a mandatory value, so the host hands over the string the customer
209
+ // typed or nothing at all. Anything else is a shape this command did not declare.
210
+ function readPort(value) {
211
+ if (value === undefined)
212
+ return undefined;
213
+ const port = typeof value === "string" ? Number.parseInt(value, 10) : Number.NaN;
214
+ if (Number.isNaN(port) || port < 0 || port > 65535) {
215
+ throw new Error(`Invalid port "${String(value)}".`);
216
+ }
217
+ return port;
218
+ }
219
+ async function listenWithFallback(server, requestedPort) {
220
+ const preferred = requestedPort ?? DEFAULT_PORT;
221
+ try {
222
+ await listen(server, preferred);
223
+ }
224
+ catch (error) {
225
+ const code = error instanceof Error && "code" in error ? error.code : undefined;
226
+ if (requestedPort !== undefined || (code !== "EADDRINUSE" && code !== "EACCES")) {
227
+ throw error;
228
+ }
229
+ prompts.log.warn(`Port ${preferred} is in use — picking a free port.`);
230
+ await listen(server, 0);
231
+ }
232
+ return server.address().port;
233
+ }
234
+ function listen(server, port) {
235
+ return new Promise((resolve, reject) => {
236
+ const onError = (error) => {
237
+ server.removeListener("listening", onListening);
238
+ reject(error);
239
+ };
240
+ const onListening = () => {
241
+ server.removeListener("error", onError);
242
+ resolve();
243
+ };
244
+ server.once("error", onError);
245
+ server.once("listening", onListening);
246
+ server.listen(port, "127.0.0.1");
247
+ });
248
+ }
249
+ //# sourceMappingURL=tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../../../src/cli/commands/runtime-data/tunnel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface CommandContext {
2
+ inheritedOptions: Record<string, unknown>;
3
+ commandPath: string[];
4
+ }
5
+ export declare function readCommandContext(args: readonly unknown[]): CommandContext;
6
+ export declare function readCommandOptions(args: readonly unknown[]): Record<string, unknown>;
7
+ //# sourceMappingURL=host-arguments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-arguments.d.ts","sourceRoot":"","sources":["../../src/cli/host-arguments.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,cAAc,CAe3E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQpF"}
@@ -0,0 +1,46 @@
1
+ // Reading what a CLI host passed a command action.
2
+ //
3
+ // The Vendure CLI host appends three values after everything Commander supplies — the parsed
4
+ // options, the Commander command, then its own context — and reads them back by counting from the
5
+ // end. `@vendure/cli` exports `readCommandContext` and `readCommandOptions` for that, and this is a
6
+ // restatement of them rather than a call to them.
7
+ //
8
+ // It is a restatement for the same reason `dev/cli-host.ts` is one, and for one more. The first:
9
+ // `import("@vendure/cli")` answers with whichever copy sits nearest this package, which in a
10
+ // workspace is not always the copy that is running, so reading the convention from it proves
11
+ // nothing about the host that actually called. Reaching the running host needs a helper it does not
12
+ // expose (CLO-646). The second: the same actions run under the transitional `vcloud` executable,
13
+ // which is not the Vendure CLI and does not install it — resolving the host there would fail on a
14
+ // customer's machine, and bundling it would pull the whole Vendure CLI, `vite` and `ts-morph`
15
+ // included, into a standalone binary that never runs any of it.
16
+ //
17
+ // A restated convention is a cross-component claim, so it is held by a test rather than by this
18
+ // comment: `test/cli-host-arguments.test.ts` reads the same argument list with these and with the
19
+ // host's own exported readers and requires the same answer.
20
+ const CONTEXT_FROM_END = 1;
21
+ const OPTIONS_FROM_END = 3;
22
+ // Throws rather than defaulting, because a tail that is not there is a calling convention that has
23
+ // moved. A command run with the wrong context would resolve the wrong VC Environment.
24
+ export function readCommandContext(args) {
25
+ const context = args[args.length - CONTEXT_FROM_END];
26
+ if (!isPlainObject(context) || !Array.isArray(context.commandPath)) {
27
+ throw new Error("No CliCommandContext found. Pass the full argument list a command action received.");
28
+ }
29
+ const commandPath = context.commandPath.filter((segment) => typeof segment === "string");
30
+ const inheritedOptions = context.inheritedOptions;
31
+ return {
32
+ inheritedOptions: isPlainObject(inheritedOptions) ? inheritedOptions : {},
33
+ commandPath,
34
+ };
35
+ }
36
+ export function readCommandOptions(args) {
37
+ const options = args[args.length - OPTIONS_FROM_END];
38
+ if (!isPlainObject(options)) {
39
+ throw new Error("No parsed options found. Pass the full argument list a command action received.");
40
+ }
41
+ return options;
42
+ }
43
+ function isPlainObject(value) {
44
+ return typeof value === "object" && value !== null && !Array.isArray(value);
45
+ }
46
+ //# sourceMappingURL=host-arguments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-arguments.js","sourceRoot":"","sources":["../../src/cli/host-arguments.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,6FAA6F;AAC7F,kGAAkG;AAClG,oGAAoG;AACpG,kDAAkD;AAClD,EAAE;AACF,iGAAiG;AACjG,6FAA6F;AAC7F,6FAA6F;AAC7F,oGAAoG;AACpG,iGAAiG;AACjG,kGAAkG;AAClG,8FAA8F;AAC9F,gEAAgE;AAChE,EAAE;AACF,gGAAgG;AAChG,kGAAkG;AAClG,4DAA4D;AAE5D,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAO3B,mGAAmG;AACnG,sFAAsF;AACtF,MAAM,UAAU,kBAAkB,CAAC,IAAwB;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;IACrD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAC5C,CAAC,OAAO,EAAqB,EAAE,CAAC,OAAO,OAAO,KAAK,QAAQ,CAC5D,CAAC;IACF,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAClD,OAAO;QACL,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;QACzE,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAwB;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;IACrD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,30 @@
1
+ export interface CloudCommandArgument {
2
+ name: string;
3
+ description: string;
4
+ required?: boolean;
5
+ }
6
+ export interface CloudCommandOption {
7
+ long: string;
8
+ short?: string;
9
+ description: string;
10
+ required?: boolean;
11
+ defaultValue?: string;
12
+ subOptions?: CloudCommandOption[];
13
+ }
14
+ export type CloudCommandAction = (...args: unknown[]) => Promise<void | number>;
15
+ export interface CloudCommand {
16
+ name: string;
17
+ description: string;
18
+ arguments?: CloudCommandArgument[];
19
+ options?: CloudCommandOption[];
20
+ action: CloudCommandAction;
21
+ subcommands?: CloudCommandNode[];
22
+ }
23
+ export interface CloudCommandGroupNode {
24
+ name: string;
25
+ description: string;
26
+ options?: CloudCommandOption[];
27
+ subcommands: CloudCommandNode[];
28
+ }
29
+ export type CloudCommandNode = CloudCommand | CloudCommandGroupNode;
30
+ //# sourceMappingURL=host-nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-nodes.d.ts","sourceRoot":"","sources":["../../src/cli/host-nodes.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACnC;AAMD,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;AAKhF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAGD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,qBAAqB,CAAC"}
@@ -0,0 +1,17 @@
1
+ // The Vendure CLI host's command shape, restated rather than imported from `@vendure/cli`.
2
+ //
3
+ // Loading the CLI plugin must resolve no package, and that covers a type-only import. TypeScript
4
+ // erases one, so it cannot fail a `vendure` run, but it still has to resolve the specifier to
5
+ // compile. `@vendure/cli` is an optional peer dependency here, and `apps/vc-builder/Dockerfile`
6
+ // compiles this package on its own — where an import that resolves only inside the workspace shows
7
+ // up as TS2307. `test/cli-published-surface.test.ts` counts a type-only reach for that reason.
8
+ //
9
+ // Only as much of the host's shape as this package fills in. `replaces` is absent because it takes
10
+ // over a built-in `vendure` command; the `dev` extension is the only thing here that does that, and
11
+ // a hosted Cloud command that set it would displace a Core command silently.
12
+ //
13
+ // Nothing keeps these in step with the host by construction. The suites that hand the declared tree
14
+ // to the host's own `defineCliPlugin` do: `test/cli-plugin.test.ts` for the whole inventory,
15
+ // `test/cli-boundary.test.ts` and each family's tree suite for the parts.
16
+ export {};
17
+ //# sourceMappingURL=host-nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-nodes.js","sourceRoot":"","sources":["../../src/cli/host-nodes.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,EAAE;AACF,iGAAiG;AACjG,8FAA8F;AAC9F,gGAAgG;AAChG,mGAAmG;AACnG,+FAA+F;AAC/F,EAAE;AACF,mGAAmG;AACnG,oGAAoG;AACpG,6EAA6E;AAC7E,EAAE;AACF,oGAAoG;AACpG,6FAA6F;AAC7F,0EAA0E"}