@zuplo/cli 7.11.0 → 7.11.3

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 (303) hide show
  1. package/node_modules/@hono/node-server/README.md +2 -0
  2. package/node_modules/@hono/node-server/dist/index.cjs +1 -1
  3. package/node_modules/@hono/node-server/dist/index.mjs +1 -1
  4. package/node_modules/@hono/node-server/dist/serve-static.cjs +2 -1
  5. package/node_modules/@hono/node-server/dist/serve-static.mjs +2 -1
  6. package/node_modules/@hono/node-server/package.json +1 -1
  7. package/node_modules/@posthog/core/dist/metrics/index.d.ts +9 -0
  8. package/node_modules/@posthog/core/dist/metrics/index.d.ts.map +1 -1
  9. package/node_modules/@posthog/core/dist/metrics/index.js +38 -3
  10. package/node_modules/@posthog/core/dist/metrics/index.mjs +38 -3
  11. package/node_modules/@posthog/core/dist/metrics/types.d.ts +7 -2
  12. package/node_modules/@posthog/core/dist/metrics/types.d.ts.map +1 -1
  13. package/node_modules/@posthog/core/dist/traces/ids.d.ts.map +1 -1
  14. package/node_modules/@posthog/core/dist/traces/ids.js +2 -2
  15. package/node_modules/@posthog/core/dist/traces/ids.mjs +2 -2
  16. package/node_modules/@posthog/core/package.json +2 -2
  17. package/node_modules/@posthog/core/src/metrics/index.spec.ts +75 -0
  18. package/node_modules/@posthog/core/src/metrics/index.ts +60 -0
  19. package/node_modules/@posthog/core/src/metrics/types.ts +7 -1
  20. package/node_modules/@posthog/core/src/traces/ids.ts +4 -2
  21. package/node_modules/@posthog/types/dist/capture-metric.d.ts +10 -0
  22. package/node_modules/@posthog/types/dist/capture-metric.d.ts.map +1 -1
  23. package/node_modules/@posthog/types/dist/index.d.ts +1 -1
  24. package/node_modules/@posthog/types/dist/index.d.ts.map +1 -1
  25. package/node_modules/@posthog/types/package.json +1 -1
  26. package/node_modules/@posthog/types/src/capture-metric.ts +11 -0
  27. package/node_modules/@posthog/types/src/index.ts +1 -0
  28. package/node_modules/@zuplo/core/customer.cli.minified.js +80 -80
  29. package/node_modules/@zuplo/core/index.minified.js +85 -85
  30. package/node_modules/@zuplo/core/package.json +1 -1
  31. package/node_modules/@zuplo/graphql/package.json +1 -1
  32. package/node_modules/@zuplo/openapi-tools/package.json +5 -2
  33. package/node_modules/@zuplo/otel/package.json +1 -1
  34. package/node_modules/@zuplo/runtime/out/esm/{chunk-YJ2BHVUH.js → chunk-CDEAY3VY.js} +2 -2
  35. package/node_modules/@zuplo/runtime/out/esm/chunk-LVSZ3WTO.js +37 -0
  36. package/node_modules/@zuplo/runtime/out/esm/chunk-LVSZ3WTO.js.map +1 -0
  37. package/node_modules/@zuplo/runtime/out/esm/{chunk-VTO3F6DK.js → chunk-NUVXDVLJ.js} +2 -2
  38. package/node_modules/@zuplo/runtime/out/esm/{chunk-6YPRGG62.js → chunk-TPYCFLC7.js} +109 -109
  39. package/node_modules/@zuplo/runtime/out/esm/chunk-TPYCFLC7.js.map +1 -0
  40. package/node_modules/@zuplo/runtime/out/esm/index.js +1 -1
  41. package/node_modules/@zuplo/runtime/out/esm/internal/index.js +1 -1
  42. package/node_modules/@zuplo/runtime/out/esm/mcp-gateway/index.js +1 -1
  43. package/node_modules/@zuplo/runtime/out/esm/mocks/index.js +1 -1
  44. package/node_modules/@zuplo/runtime/out/esm/sdks/aws/index.js +1 -1
  45. package/node_modules/@zuplo/runtime/out/types/index.d.ts +43 -43
  46. package/node_modules/@zuplo/runtime/out/types/internal/index.d.ts +14 -0
  47. package/node_modules/@zuplo/runtime/package.json +1 -1
  48. package/package.json +15 -12
  49. package/dist/__tests__/archive-utils.test.d.ts +0 -2
  50. package/dist/__tests__/archive-utils.test.d.ts.map +0 -1
  51. package/dist/__tests__/archive-utils.test.js +0 -50
  52. package/dist/__tests__/archive-utils.test.js.map +0 -1
  53. package/dist/__tests__/import-openapi.test.d.ts +0 -2
  54. package/dist/__tests__/import-openapi.test.d.ts.map +0 -1
  55. package/dist/__tests__/import-openapi.test.js +0 -251
  56. package/dist/__tests__/import-openapi.test.js.map +0 -1
  57. package/dist/__tests__/integration/confirm-linked-config.integration.test.d.ts +0 -2
  58. package/dist/__tests__/integration/confirm-linked-config.integration.test.d.ts.map +0 -1
  59. package/dist/__tests__/integration/confirm-linked-config.integration.test.js +0 -202
  60. package/dist/__tests__/integration/confirm-linked-config.integration.test.js.map +0 -1
  61. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts +0 -2
  62. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts.map +0 -1
  63. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js +0 -184
  64. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js.map +0 -1
  65. package/dist/__tests__/integration/custom-domain.integration.test.d.ts +0 -2
  66. package/dist/__tests__/integration/custom-domain.integration.test.d.ts.map +0 -1
  67. package/dist/__tests__/integration/custom-domain.integration.test.js +0 -563
  68. package/dist/__tests__/integration/custom-domain.integration.test.js.map +0 -1
  69. package/dist/__tests__/integration/delete.integration.test.d.ts +0 -2
  70. package/dist/__tests__/integration/delete.integration.test.d.ts.map +0 -1
  71. package/dist/__tests__/integration/delete.integration.test.js +0 -262
  72. package/dist/__tests__/integration/delete.integration.test.js.map +0 -1
  73. package/dist/__tests__/integration/deploy.integration.test.d.ts +0 -2
  74. package/dist/__tests__/integration/deploy.integration.test.d.ts.map +0 -1
  75. package/dist/__tests__/integration/deploy.integration.test.js +0 -519
  76. package/dist/__tests__/integration/deploy.integration.test.js.map +0 -1
  77. package/dist/__tests__/integration/get-project-param.integration.test.d.ts +0 -2
  78. package/dist/__tests__/integration/get-project-param.integration.test.d.ts.map +0 -1
  79. package/dist/__tests__/integration/get-project-param.integration.test.js +0 -305
  80. package/dist/__tests__/integration/get-project-param.integration.test.js.map +0 -1
  81. package/dist/__tests__/integration/info.integration.test.d.ts +0 -2
  82. package/dist/__tests__/integration/info.integration.test.d.ts.map +0 -1
  83. package/dist/__tests__/integration/info.integration.test.js +0 -293
  84. package/dist/__tests__/integration/info.integration.test.js.map +0 -1
  85. package/dist/__tests__/integration/jest-mocks-setup.d.ts +0 -2
  86. package/dist/__tests__/integration/jest-mocks-setup.d.ts.map +0 -1
  87. package/dist/__tests__/integration/jest-mocks-setup.js +0 -104
  88. package/dist/__tests__/integration/jest-mocks-setup.js.map +0 -1
  89. package/dist/__tests__/integration/jest-setup.d.ts +0 -2
  90. package/dist/__tests__/integration/jest-setup.d.ts.map +0 -1
  91. package/dist/__tests__/integration/jest-setup.js +0 -12
  92. package/dist/__tests__/integration/jest-setup.js.map +0 -1
  93. package/dist/__tests__/integration/link.integration.test.d.ts +0 -2
  94. package/dist/__tests__/integration/link.integration.test.d.ts.map +0 -1
  95. package/dist/__tests__/integration/link.integration.test.js +0 -395
  96. package/dist/__tests__/integration/link.integration.test.js.map +0 -1
  97. package/dist/__tests__/integration/linked-config-cascade.integration.test.d.ts +0 -2
  98. package/dist/__tests__/integration/linked-config-cascade.integration.test.d.ts.map +0 -1
  99. package/dist/__tests__/integration/linked-config-cascade.integration.test.js +0 -179
  100. package/dist/__tests__/integration/linked-config-cascade.integration.test.js.map +0 -1
  101. package/dist/__tests__/integration/list.integration.test.d.ts +0 -2
  102. package/dist/__tests__/integration/list.integration.test.d.ts.map +0 -1
  103. package/dist/__tests__/integration/list.integration.test.js +0 -300
  104. package/dist/__tests__/integration/list.integration.test.js.map +0 -1
  105. package/dist/__tests__/integration/source-upgrade.integration.test.d.ts +0 -2
  106. package/dist/__tests__/integration/source-upgrade.integration.test.d.ts.map +0 -1
  107. package/dist/__tests__/integration/source-upgrade.integration.test.js +0 -100
  108. package/dist/__tests__/integration/source-upgrade.integration.test.js.map +0 -1
  109. package/dist/__tests__/integration/test-utils.d.ts +0 -30
  110. package/dist/__tests__/integration/test-utils.d.ts.map +0 -1
  111. package/dist/__tests__/integration/test-utils.js +0 -82
  112. package/dist/__tests__/integration/test-utils.js.map +0 -1
  113. package/dist/__tests__/integration/tunnel.integration.test.d.ts +0 -2
  114. package/dist/__tests__/integration/tunnel.integration.test.d.ts.map +0 -1
  115. package/dist/__tests__/integration/tunnel.integration.test.js +0 -486
  116. package/dist/__tests__/integration/tunnel.integration.test.js.map +0 -1
  117. package/dist/__tests__/integration/variable.integration.test.d.ts +0 -2
  118. package/dist/__tests__/integration/variable.integration.test.d.ts.map +0 -1
  119. package/dist/__tests__/integration/variable.integration.test.js +0 -258
  120. package/dist/__tests__/integration/variable.integration.test.js.map +0 -1
  121. package/dist/__tests__/integration/whoami.integration.test.d.ts +0 -2
  122. package/dist/__tests__/integration/whoami.integration.test.d.ts.map +0 -1
  123. package/dist/__tests__/integration/whoami.integration.test.js +0 -116
  124. package/dist/__tests__/integration/whoami.integration.test.js.map +0 -1
  125. package/dist/__tests__/outdated.test.d.ts +0 -2
  126. package/dist/__tests__/outdated.test.d.ts.map +0 -1
  127. package/dist/__tests__/outdated.test.js +0 -67
  128. package/dist/__tests__/outdated.test.js.map +0 -1
  129. package/dist/__tests__/populate.test.d.ts +0 -2
  130. package/dist/__tests__/populate.test.d.ts.map +0 -1
  131. package/dist/__tests__/populate.test.js +0 -445
  132. package/dist/__tests__/populate.test.js.map +0 -1
  133. package/dist/__tests__/tsconfig-upgrader.test.d.ts +0 -2
  134. package/dist/__tests__/tsconfig-upgrader.test.d.ts.map +0 -1
  135. package/dist/__tests__/tsconfig-upgrader.test.js +0 -31
  136. package/dist/__tests__/tsconfig-upgrader.test.js.map +0 -1
  137. package/dist/ca-certificate/validation.test.d.ts +0 -2
  138. package/dist/ca-certificate/validation.test.d.ts.map +0 -1
  139. package/dist/ca-certificate/validation.test.js +0 -131
  140. package/dist/ca-certificate/validation.test.js.map +0 -1
  141. package/dist/common/analytics/cli-invocation.test.d.ts +0 -2
  142. package/dist/common/analytics/cli-invocation.test.d.ts.map +0 -1
  143. package/dist/common/analytics/cli-invocation.test.js +0 -51
  144. package/dist/common/analytics/cli-invocation.test.js.map +0 -1
  145. package/dist/common/analytics/package-manager.test.d.ts +0 -2
  146. package/dist/common/analytics/package-manager.test.d.ts.map +0 -1
  147. package/dist/common/analytics/package-manager.test.js +0 -163
  148. package/dist/common/analytics/package-manager.test.js.map +0 -1
  149. package/dist/common/cli-dispatcher.test.d.ts +0 -2
  150. package/dist/common/cli-dispatcher.test.d.ts.map +0 -1
  151. package/dist/common/cli-dispatcher.test.js +0 -80
  152. package/dist/common/cli-dispatcher.test.js.map +0 -1
  153. package/dist/common/middleware/check-pnpm-lifecycle.test.d.ts +0 -2
  154. package/dist/common/middleware/check-pnpm-lifecycle.test.d.ts.map +0 -1
  155. package/dist/common/middleware/check-pnpm-lifecycle.test.js +0 -125
  156. package/dist/common/middleware/check-pnpm-lifecycle.test.js.map +0 -1
  157. package/dist/common/middleware/get-environment-param.test.d.ts +0 -2
  158. package/dist/common/middleware/get-environment-param.test.d.ts.map +0 -1
  159. package/dist/common/middleware/get-environment-param.test.js +0 -57
  160. package/dist/common/middleware/get-environment-param.test.js.map +0 -1
  161. package/dist/common/read-linked-config.test.d.ts +0 -2
  162. package/dist/common/read-linked-config.test.d.ts.map +0 -1
  163. package/dist/common/read-linked-config.test.js +0 -363
  164. package/dist/common/read-linked-config.test.js.map +0 -1
  165. package/dist/common/terminal.test.d.ts +0 -2
  166. package/dist/common/terminal.test.d.ts.map +0 -1
  167. package/dist/common/terminal.test.js +0 -101
  168. package/dist/common/terminal.test.js.map +0 -1
  169. package/dist/common/utils/build-environment-prompt-choices.test.d.ts +0 -2
  170. package/dist/common/utils/build-environment-prompt-choices.test.d.ts.map +0 -1
  171. package/dist/common/utils/build-environment-prompt-choices.test.js +0 -97
  172. package/dist/common/utils/build-environment-prompt-choices.test.js.map +0 -1
  173. package/dist/common/utils/format-environment-type.test.d.ts +0 -2
  174. package/dist/common/utils/format-environment-type.test.d.ts.map +0 -1
  175. package/dist/common/utils/format-environment-type.test.js +0 -32
  176. package/dist/common/utils/format-environment-type.test.js.map +0 -1
  177. package/dist/common/utils/pnpm-lifecycle.test.d.ts +0 -2
  178. package/dist/common/utils/pnpm-lifecycle.test.d.ts.map +0 -1
  179. package/dist/common/utils/pnpm-lifecycle.test.js +0 -196
  180. package/dist/common/utils/pnpm-lifecycle.test.js.map +0 -1
  181. package/dist/common/utils/pretty-print-environment-prompt.test.d.ts +0 -2
  182. package/dist/common/utils/pretty-print-environment-prompt.test.d.ts.map +0 -1
  183. package/dist/common/utils/pretty-print-environment-prompt.test.js +0 -42
  184. package/dist/common/utils/pretty-print-environment-prompt.test.js.map +0 -1
  185. package/dist/common/utils/sort-environments-for-prompt.test.d.ts +0 -2
  186. package/dist/common/utils/sort-environments-for-prompt.test.d.ts.map +0 -1
  187. package/dist/common/utils/sort-environments-for-prompt.test.js +0 -82
  188. package/dist/common/utils/sort-environments-for-prompt.test.js.map +0 -1
  189. package/dist/common/utils/stringify-config.test.d.ts +0 -2
  190. package/dist/common/utils/stringify-config.test.d.ts.map +0 -1
  191. package/dist/common/utils/stringify-config.test.js +0 -80
  192. package/dist/common/utils/stringify-config.test.js.map +0 -1
  193. package/dist/common/validators/argument-validators.spec.d.ts +0 -2
  194. package/dist/common/validators/argument-validators.spec.d.ts.map +0 -1
  195. package/dist/common/validators/argument-validators.spec.js +0 -181
  196. package/dist/common/validators/argument-validators.spec.js.map +0 -1
  197. package/dist/common/worker-output.test.d.ts +0 -2
  198. package/dist/common/worker-output.test.d.ts.map +0 -1
  199. package/dist/common/worker-output.test.js +0 -32
  200. package/dist/common/worker-output.test.js.map +0 -1
  201. package/dist/deploy/archive.local-registry.test.d.ts +0 -2
  202. package/dist/deploy/archive.local-registry.test.d.ts.map +0 -1
  203. package/dist/deploy/archive.local-registry.test.js +0 -100
  204. package/dist/deploy/archive.local-registry.test.js.map +0 -1
  205. package/dist/deploy/archive.test.d.ts +0 -2
  206. package/dist/deploy/archive.test.d.ts.map +0 -1
  207. package/dist/deploy/archive.test.js +0 -248
  208. package/dist/deploy/archive.test.js.map +0 -1
  209. package/dist/deploy/classify-build-probe.test.d.ts +0 -2
  210. package/dist/deploy/classify-build-probe.test.d.ts.map +0 -1
  211. package/dist/deploy/classify-build-probe.test.js +0 -51
  212. package/dist/deploy/classify-build-probe.test.js.map +0 -1
  213. package/dist/deploy/poll-deployment.test.d.ts +0 -2
  214. package/dist/deploy/poll-deployment.test.d.ts.map +0 -1
  215. package/dist/deploy/poll-deployment.test.js +0 -158
  216. package/dist/deploy/poll-deployment.test.js.map +0 -1
  217. package/dist/dev/zuplo-local-gitignore.test.d.ts +0 -2
  218. package/dist/dev/zuplo-local-gitignore.test.d.ts.map +0 -1
  219. package/dist/dev/zuplo-local-gitignore.test.js +0 -58
  220. package/dist/dev/zuplo-local-gitignore.test.js.map +0 -1
  221. package/dist/editor/e2e/editor.spec.d.ts +0 -2
  222. package/dist/editor/e2e/editor.spec.d.ts.map +0 -1
  223. package/dist/editor/e2e/editor.spec.js +0 -44
  224. package/dist/editor/e2e/editor.spec.js.map +0 -1
  225. package/dist/link/project-type.test.d.ts +0 -2
  226. package/dist/link/project-type.test.d.ts.map +0 -1
  227. package/dist/link/project-type.test.js +0 -225
  228. package/dist/link/project-type.test.js.map +0 -1
  229. package/dist/lint/resolve-binary.test.d.ts +0 -2
  230. package/dist/lint/resolve-binary.test.d.ts.map +0 -1
  231. package/dist/lint/resolve-binary.test.js +0 -155
  232. package/dist/lint/resolve-binary.test.js.map +0 -1
  233. package/dist/open-api/convert/handler.spec.d.ts +0 -2
  234. package/dist/open-api/convert/handler.spec.d.ts.map +0 -1
  235. package/dist/open-api/convert/handler.spec.js +0 -301
  236. package/dist/open-api/convert/handler.spec.js.map +0 -1
  237. package/dist/open-api/merge/handler.spec.d.ts +0 -2
  238. package/dist/open-api/merge/handler.spec.d.ts.map +0 -1
  239. package/dist/open-api/merge/handler.spec.js +0 -673
  240. package/dist/open-api/merge/handler.spec.js.map +0 -1
  241. package/dist/open-api/overlay/handler.spec.d.ts +0 -2
  242. package/dist/open-api/overlay/handler.spec.d.ts.map +0 -1
  243. package/dist/open-api/overlay/handler.spec.js +0 -346
  244. package/dist/open-api/overlay/handler.spec.js.map +0 -1
  245. package/dist/source/ai-gateway/files.test.d.ts +0 -2
  246. package/dist/source/ai-gateway/files.test.d.ts.map +0 -1
  247. package/dist/source/ai-gateway/files.test.js +0 -135
  248. package/dist/source/ai-gateway/files.test.js.map +0 -1
  249. package/dist/source/ai-gateway/handler.test.d.ts +0 -2
  250. package/dist/source/ai-gateway/handler.test.d.ts.map +0 -1
  251. package/dist/source/ai-gateway/handler.test.js +0 -113
  252. package/dist/source/ai-gateway/handler.test.js.map +0 -1
  253. package/dist/source/ai-gateway/package.test.d.ts +0 -2
  254. package/dist/source/ai-gateway/package.test.d.ts.map +0 -1
  255. package/dist/source/ai-gateway/package.test.js +0 -30
  256. package/dist/source/ai-gateway/package.test.js.map +0 -1
  257. package/dist/source/ai-gateway/planner.test.d.ts +0 -2
  258. package/dist/source/ai-gateway/planner.test.d.ts.map +0 -1
  259. package/dist/source/ai-gateway/planner.test.js +0 -330
  260. package/dist/source/ai-gateway/planner.test.js.map +0 -1
  261. package/dist/source/ai-gateway/release.test.d.ts +0 -2
  262. package/dist/source/ai-gateway/release.test.d.ts.map +0 -1
  263. package/dist/source/ai-gateway/release.test.js +0 -62
  264. package/dist/source/ai-gateway/release.test.js.map +0 -1
  265. package/dist/test/invoke-test.test.d.ts +0 -2
  266. package/dist/test/invoke-test.test.d.ts.map +0 -1
  267. package/dist/test/invoke-test.test.js +0 -150
  268. package/dist/test/invoke-test.test.js.map +0 -1
  269. package/dist/test/test-files.test.d.ts +0 -2
  270. package/dist/test/test-files.test.d.ts.map +0 -1
  271. package/dist/test/test-files.test.js +0 -57
  272. package/dist/test/test-files.test.js.map +0 -1
  273. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.d.ts +0 -2
  274. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.d.ts.map +0 -1
  275. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.js +0 -289
  276. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.js.map +0 -1
  277. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.d.ts +0 -2
  278. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.d.ts.map +0 -1
  279. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.js +0 -181
  280. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.js.map +0 -1
  281. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.d.ts +0 -2
  282. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.d.ts.map +0 -1
  283. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.js +0 -399
  284. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.js.map +0 -1
  285. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.d.ts +0 -2
  286. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.d.ts.map +0 -1
  287. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.js +0 -779
  288. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.js.map +0 -1
  289. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.d.ts +0 -2
  290. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.d.ts.map +0 -1
  291. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.js +0 -269
  292. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.js.map +0 -1
  293. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.d.ts +0 -2
  294. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.d.ts.map +0 -1
  295. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.js +0 -93
  296. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.js.map +0 -1
  297. package/node_modules/@zuplo/runtime/out/esm/chunk-6YPRGG62.js.map +0 -1
  298. package/node_modules/@zuplo/runtime/out/esm/chunk-PBDT4FDO.js +0 -37
  299. package/node_modules/@zuplo/runtime/out/esm/chunk-PBDT4FDO.js.map +0 -1
  300. /package/node_modules/@zuplo/runtime/out/esm/{chunk-YJ2BHVUH.js.map → chunk-CDEAY3VY.js.map} +0 -0
  301. /package/node_modules/@zuplo/runtime/out/esm/{chunk-PBDT4FDO.js.LEGAL.txt → chunk-LVSZ3WTO.js.LEGAL.txt} +0 -0
  302. /package/node_modules/@zuplo/runtime/out/esm/{chunk-VTO3F6DK.js.map → chunk-NUVXDVLJ.js.map} +0 -0
  303. /package/node_modules/@zuplo/runtime/out/esm/{chunk-6YPRGG62.js.LEGAL.txt → chunk-TPYCFLC7.js.LEGAL.txt} +0 -0
@@ -1,125 +0,0 @@
1
- import assert from "node:assert";
2
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
3
- import os from "node:os";
4
- import path from "node:path";
5
- import { afterEach, beforeEach, describe, it } from "node:test";
6
- import { buildDlxMessage, buildProjectMessage, decideAction, } from "./check-pnpm-lifecycle.js";
7
- const SKIP_ENV_VAR = "ZUPLO_SKIP_PNPM_LIFECYCLE_CHECK";
8
- const BLOCKED_MODULES_YAML = [
9
- "ignoredBuilds:",
10
- " - deno@2.3.1",
11
- " - workerd@1.20241230.0",
12
- " - esbuild@0.25.2",
13
- "pendingBuilds: []",
14
- "",
15
- ].join("\n");
16
- const CLEAN_MODULES_YAML = "ignoredBuilds: []\npendingBuilds: []\n";
17
- function writeModulesYaml(dir, contents) {
18
- const nm = path.join(dir, "node_modules");
19
- mkdirSync(nm, { recursive: true });
20
- writeFileSync(path.join(nm, ".modules.yaml"), contents);
21
- }
22
- describe("buildDlxMessage", () => {
23
- it("includes the --allow-build flags and the user's command", () => {
24
- const msg = buildDlxMessage("deno, workerd", "deploy");
25
- assert.match(msg, /--allow-build=deno/);
26
- assert.match(msg, /--allow-build=workerd/);
27
- assert.match(msg, /--allow-build=esbuild/);
28
- assert.match(msg, /--allow-build=@swc\/core/);
29
- assert.match(msg, /--allow-build=protobufjs/);
30
- assert.match(msg, /pnpm zuplo deploy/);
31
- });
32
- it("preserves nested subcommand paths in suggestion", () => {
33
- const msg = buildDlxMessage("deno", "project create my-app");
34
- assert.match(msg, /pnpx .* zuplo project create my-app/);
35
- assert.match(msg, /pnpm zuplo project create my-app/);
36
- });
37
- it("includes the onlyBuiltDependencies block as a prerequisite", () => {
38
- const msg = buildDlxMessage("deno", "deploy");
39
- assert.match(msg, /onlyBuiltDependencies:/);
40
- assert.match(msg, /- deno/);
41
- assert.match(msg, /- esbuild/);
42
- assert.match(msg, /- workerd/);
43
- assert.match(msg, /- "@swc\/core"/);
44
- assert.match(msg, /- protobufjs/);
45
- });
46
- it("places onlyBuiltDependencies at column 0 for paste-safety", () => {
47
- const msg = buildDlxMessage("deno", "deploy");
48
- assert.match(msg, /^onlyBuiltDependencies:$/m);
49
- });
50
- it("includes the package.json alternative", () => {
51
- const msg = buildDlxMessage("deno", "deploy");
52
- assert.match(msg, /^"pnpm": \{$/m);
53
- assert.match(msg, /"onlyBuiltDependencies": \[.*"deno".*\]/);
54
- });
55
- });
56
- describe("buildProjectMessage", () => {
57
- it("includes the onlyBuiltDependencies block and pnpm install", () => {
58
- const msg = buildProjectMessage("deno, workerd");
59
- assert.match(msg, /onlyBuiltDependencies:/);
60
- assert.match(msg, /- deno/);
61
- assert.match(msg, /- workerd/);
62
- assert.match(msg, /pnpm install/);
63
- });
64
- it("places onlyBuiltDependencies at column 0 for paste-safety", () => {
65
- const msg = buildProjectMessage("deno");
66
- assert.match(msg, /^onlyBuiltDependencies:$/m);
67
- });
68
- it("includes the package.json alternative", () => {
69
- const msg = buildProjectMessage("deno");
70
- assert.match(msg, /^"pnpm": \{$/m);
71
- assert.match(msg, /"onlyBuiltDependencies": \[.*"deno".*\]/);
72
- });
73
- it("does NOT include --allow-build (that's only for dlx)", () => {
74
- const msg = buildProjectMessage("deno");
75
- assert.doesNotMatch(msg, /--allow-build/);
76
- });
77
- });
78
- describe("decideAction", () => {
79
- let tmp;
80
- let prevSkip;
81
- beforeEach(() => {
82
- tmp = mkdtempSync(path.join(os.tmpdir(), "zup-decide-"));
83
- prevSkip = process.env[SKIP_ENV_VAR];
84
- delete process.env[SKIP_ENV_VAR];
85
- });
86
- afterEach(() => {
87
- rmSync(tmp, { recursive: true, force: true });
88
- if (prevSkip === undefined) {
89
- delete process.env[SKIP_ENV_VAR];
90
- }
91
- else {
92
- process.env[SKIP_ENV_VAR] = prevSkip;
93
- }
94
- });
95
- it("returns null when no .modules.yaml is found", () => {
96
- assert.strictEqual(decideAction({ _: ["deploy"] }, tmp), null);
97
- });
98
- it("returns null when no critical builds are blocked", () => {
99
- writeModulesYaml(tmp, CLEAN_MODULES_YAML);
100
- assert.strictEqual(decideAction({ _: ["deploy"] }, tmp), null);
101
- });
102
- it("returns project message when blocked deps exist outside dlx", () => {
103
- writeModulesYaml(tmp, BLOCKED_MODULES_YAML);
104
- const result = decideAction({ _: ["deploy"] }, tmp);
105
- assert.notStrictEqual(result, null);
106
- assert.match(result.message, /onlyBuiltDependencies:/);
107
- assert.doesNotMatch(result.message, /--allow-build/);
108
- });
109
- it("returns dlx message when blocked deps exist in pnpm dlx tree", () => {
110
- const dlxDir = path.join(tmp, "pnpm", "dlx", "fake-hash", "subdir");
111
- mkdirSync(dlxDir, { recursive: true });
112
- writeModulesYaml(dlxDir, BLOCKED_MODULES_YAML);
113
- const result = decideAction({ _: ["project", "create"] }, dlxDir);
114
- assert.notStrictEqual(result, null);
115
- assert.match(result.message, /--allow-build=deno/);
116
- assert.match(result.message, /pnpm zuplo project create/);
117
- });
118
- it("returns null when bypass env var is set, even with blocked deps", () => {
119
- writeModulesYaml(tmp, BLOCKED_MODULES_YAML);
120
- assert.notStrictEqual(decideAction({ _: ["deploy"] }, tmp), null);
121
- process.env[SKIP_ENV_VAR] = "1";
122
- assert.strictEqual(decideAction({ _: ["deploy"] }, tmp), null);
123
- });
124
- });
125
- //# sourceMappingURL=check-pnpm-lifecycle.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-pnpm-lifecycle.test.js","sourceRoot":"","sources":["../../../src/common/middleware/check-pnpm-lifecycle.test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"node:assert\";\nimport { mkdirSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\nimport {\n buildDlxMessage,\n buildProjectMessage,\n decideAction,\n} from \"./check-pnpm-lifecycle.js\";\n\nconst SKIP_ENV_VAR = \"ZUPLO_SKIP_PNPM_LIFECYCLE_CHECK\";\n\nconst BLOCKED_MODULES_YAML = [\n \"ignoredBuilds:\",\n \" - deno@2.3.1\",\n \" - workerd@1.20241230.0\",\n \" - esbuild@0.25.2\",\n \"pendingBuilds: []\",\n \"\",\n].join(\"\\n\");\n\nconst CLEAN_MODULES_YAML = \"ignoredBuilds: []\\npendingBuilds: []\\n\";\n\nfunction writeModulesYaml(dir: string, contents: string): void {\n const nm = path.join(dir, \"node_modules\");\n mkdirSync(nm, { recursive: true });\n writeFileSync(path.join(nm, \".modules.yaml\"), contents);\n}\n\ndescribe(\"buildDlxMessage\", () => {\n it(\"includes the --allow-build flags and the user's command\", () => {\n const msg = buildDlxMessage(\"deno, workerd\", \"deploy\");\n assert.match(msg, /--allow-build=deno/);\n assert.match(msg, /--allow-build=workerd/);\n assert.match(msg, /--allow-build=esbuild/);\n assert.match(msg, /--allow-build=@swc\\/core/);\n assert.match(msg, /--allow-build=protobufjs/);\n assert.match(msg, /pnpm zuplo deploy/);\n });\n\n it(\"preserves nested subcommand paths in suggestion\", () => {\n const msg = buildDlxMessage(\"deno\", \"project create my-app\");\n assert.match(msg, /pnpx .* zuplo project create my-app/);\n assert.match(msg, /pnpm zuplo project create my-app/);\n });\n\n it(\"includes the onlyBuiltDependencies block as a prerequisite\", () => {\n const msg = buildDlxMessage(\"deno\", \"deploy\");\n assert.match(msg, /onlyBuiltDependencies:/);\n assert.match(msg, /- deno/);\n assert.match(msg, /- esbuild/);\n assert.match(msg, /- workerd/);\n assert.match(msg, /- \"@swc\\/core\"/);\n assert.match(msg, /- protobufjs/);\n });\n\n it(\"places onlyBuiltDependencies at column 0 for paste-safety\", () => {\n const msg = buildDlxMessage(\"deno\", \"deploy\");\n assert.match(msg, /^onlyBuiltDependencies:$/m);\n });\n\n it(\"includes the package.json alternative\", () => {\n const msg = buildDlxMessage(\"deno\", \"deploy\");\n assert.match(msg, /^\"pnpm\": \\{$/m);\n assert.match(msg, /\"onlyBuiltDependencies\": \\[.*\"deno\".*\\]/);\n });\n});\n\ndescribe(\"buildProjectMessage\", () => {\n it(\"includes the onlyBuiltDependencies block and pnpm install\", () => {\n const msg = buildProjectMessage(\"deno, workerd\");\n assert.match(msg, /onlyBuiltDependencies:/);\n assert.match(msg, /- deno/);\n assert.match(msg, /- workerd/);\n assert.match(msg, /pnpm install/);\n });\n\n it(\"places onlyBuiltDependencies at column 0 for paste-safety\", () => {\n const msg = buildProjectMessage(\"deno\");\n assert.match(msg, /^onlyBuiltDependencies:$/m);\n });\n\n it(\"includes the package.json alternative\", () => {\n const msg = buildProjectMessage(\"deno\");\n assert.match(msg, /^\"pnpm\": \\{$/m);\n assert.match(msg, /\"onlyBuiltDependencies\": \\[.*\"deno\".*\\]/);\n });\n\n it(\"does NOT include --allow-build (that's only for dlx)\", () => {\n const msg = buildProjectMessage(\"deno\");\n assert.doesNotMatch(msg, /--allow-build/);\n });\n});\n\ndescribe(\"decideAction\", () => {\n let tmp: string;\n let prevSkip: string | undefined;\n\n beforeEach(() => {\n tmp = mkdtempSync(path.join(os.tmpdir(), \"zup-decide-\"));\n prevSkip = process.env[SKIP_ENV_VAR];\n delete process.env[SKIP_ENV_VAR];\n });\n\n afterEach(() => {\n rmSync(tmp, { recursive: true, force: true });\n if (prevSkip === undefined) {\n delete process.env[SKIP_ENV_VAR];\n } else {\n process.env[SKIP_ENV_VAR] = prevSkip;\n }\n });\n\n it(\"returns null when no .modules.yaml is found\", () => {\n assert.strictEqual(decideAction({ _: [\"deploy\"] }, tmp), null);\n });\n\n it(\"returns null when no critical builds are blocked\", () => {\n writeModulesYaml(tmp, CLEAN_MODULES_YAML);\n assert.strictEqual(decideAction({ _: [\"deploy\"] }, tmp), null);\n });\n\n it(\"returns project message when blocked deps exist outside dlx\", () => {\n writeModulesYaml(tmp, BLOCKED_MODULES_YAML);\n const result = decideAction({ _: [\"deploy\"] }, tmp);\n assert.notStrictEqual(result, null);\n assert.match(result!.message, /onlyBuiltDependencies:/);\n assert.doesNotMatch(result!.message, /--allow-build/);\n });\n\n it(\"returns dlx message when blocked deps exist in pnpm dlx tree\", () => {\n const dlxDir = path.join(tmp, \"pnpm\", \"dlx\", \"fake-hash\", \"subdir\");\n mkdirSync(dlxDir, { recursive: true });\n writeModulesYaml(dlxDir, BLOCKED_MODULES_YAML);\n const result = decideAction({ _: [\"project\", \"create\"] }, dlxDir);\n assert.notStrictEqual(result, null);\n assert.match(result!.message, /--allow-build=deno/);\n assert.match(result!.message, /pnpm zuplo project create/);\n });\n\n it(\"returns null when bypass env var is set, even with blocked deps\", () => {\n // This is the critical regression test: with blocked deps in the\n // fixture, the ONLY way to get null is if the bypass branch fires\n // before getBlockedCriticalDeps runs. A typo in SKIP_ENV_VAR or a\n // removed early-return would cause this assertion to fail.\n writeModulesYaml(tmp, BLOCKED_MODULES_YAML);\n // Sanity: confirm the fixture is actually broken without bypass\n assert.notStrictEqual(decideAction({ _: [\"deploy\"] }, tmp), null);\n\n process.env[SKIP_ENV_VAR] = \"1\";\n assert.strictEqual(decideAction({ _: [\"deploy\"] }, tmp), null);\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=get-environment-param.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-environment-param.test.d.ts","sourceRoot":"","sources":["../../../src/common/middleware/get-environment-param.test.ts"],"names":[],"mappings":""}
@@ -1,57 +0,0 @@
1
- import assert from "node:assert";
2
- import { describe, it } from "node:test";
3
- import { applyBranchFlag, hasEnvironmentFlag, } from "./get-environment-param.js";
4
- function argv(...userArgs) {
5
- return ["node", "/path/to/zup.js", ...userArgs];
6
- }
7
- describe("hasEnvironmentFlag", () => {
8
- it("returns true for `--environment main`", () => {
9
- assert.strictEqual(hasEnvironmentFlag(argv("deploy", "--environment", "main")), true);
10
- });
11
- it("returns true for `--environment=main`", () => {
12
- assert.strictEqual(hasEnvironmentFlag(argv("deploy", "--environment=main")), true);
13
- });
14
- it("returns false for `-e main` because deploy doesn't declare a short alias", () => {
15
- assert.strictEqual(hasEnvironmentFlag(argv("deploy", "-e", "main")), false);
16
- });
17
- it("returns true for the `--branch` alias", () => {
18
- assert.strictEqual(hasEnvironmentFlag(argv("deploy", "--branch", "main")), true);
19
- assert.strictEqual(hasEnvironmentFlag(argv("deploy", "--branch=main")), true);
20
- });
21
- it("does not match `--branch-other`", () => {
22
- assert.strictEqual(hasEnvironmentFlag(argv("deploy", "--branch-other", "x")), false);
23
- });
24
- it("returns false when no environment flag is present", () => {
25
- assert.strictEqual(hasEnvironmentFlag(argv("deploy")), false);
26
- });
27
- it("returns false when only unrelated flags are present", () => {
28
- assert.strictEqual(hasEnvironmentFlag(argv("deploy", "--no-prompt", "--account", "foo")), false);
29
- });
30
- it("returns false for env-var only (no flag in argv) — this is the case the production prompt must not bypass", () => {
31
- assert.strictEqual(hasEnvironmentFlag(argv("deploy")), false);
32
- });
33
- it("does not match flags that share a prefix (e.g. `--environment-other`)", () => {
34
- assert.strictEqual(hasEnvironmentFlag(argv("deploy", "--environment-other", "x")), false);
35
- });
36
- it("ignores `--environment` if it appears in node/script positions", () => {
37
- assert.strictEqual(hasEnvironmentFlag(["--environment", "x", "deploy"]), false);
38
- });
39
- });
40
- describe("applyBranchFlag", () => {
41
- it("lets a typed --branch override --environment", () => {
42
- const a = { environment: "from-environment", branch: "from-branch" };
43
- applyBranchFlag(a, argv("deploy", "--branch", "from-branch", "--environment", "from-environment"));
44
- assert.strictEqual(a.environment, "from-branch");
45
- });
46
- it("takes the last value when --branch is repeated", () => {
47
- const a = { environment: undefined, branch: ["first", "last"] };
48
- applyBranchFlag(a, argv("deploy", "--branch=first", "--branch=last"));
49
- assert.strictEqual(a.environment, "last");
50
- });
51
- it("ignores a branch that came only from ZUPLO_BRANCH", () => {
52
- const a = { environment: "from-environment", branch: "from-branch-var" };
53
- applyBranchFlag(a, argv("deploy"));
54
- assert.strictEqual(a.environment, "from-environment");
55
- });
56
- });
57
- //# sourceMappingURL=get-environment-param.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-environment-param.test.js","sourceRoot":"","sources":["../../../src/common/middleware/get-environment-param.test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"node:assert\";\nimport { describe, it } from \"node:test\";\nimport {\n applyBranchFlag,\n hasEnvironmentFlag,\n} from \"./get-environment-param.js\";\n\n// process.argv layout: [node, script, ...userArgs]. Helper builds that shape.\nfunction argv(...userArgs: string[]): string[] {\n return [\"node\", \"/path/to/zup.js\", ...userArgs];\n}\n\ndescribe(\"hasEnvironmentFlag\", () => {\n it(\"returns true for `--environment main`\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--environment\", \"main\")),\n true\n );\n });\n\n it(\"returns true for `--environment=main`\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--environment=main\")),\n true\n );\n });\n\n it(\"returns false for `-e main` because deploy doesn't declare a short alias\", () => {\n // If deploy's yargs option ever adds `alias: \\\"e\\\"`, this test should be\n // updated to expect true and the helper extended to match.\n assert.strictEqual(hasEnvironmentFlag(argv(\"deploy\", \"-e\", \"main\")), false);\n });\n\n it(\"returns true for the `--branch` alias\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--branch\", \"main\")),\n true\n );\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--branch=main\")),\n true\n );\n });\n\n it(\"does not match `--branch-other`\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--branch-other\", \"x\")),\n false\n );\n });\n\n it(\"returns false when no environment flag is present\", () => {\n assert.strictEqual(hasEnvironmentFlag(argv(\"deploy\")), false);\n });\n\n it(\"returns false when only unrelated flags are present\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--no-prompt\", \"--account\", \"foo\")),\n false\n );\n });\n\n it(\"returns false for env-var only (no flag in argv) — this is the case the production prompt must not bypass\", () => {\n // Simulates `ZUPLO_ENVIRONMENT=main npx zuplo deploy`: yargs picks up the\n // env var into argv.environment but the flag is absent from process.argv.\n assert.strictEqual(hasEnvironmentFlag(argv(\"deploy\")), false);\n });\n\n it(\"does not match flags that share a prefix (e.g. `--environment-other`)\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--environment-other\", \"x\")),\n false\n );\n });\n\n it(\"ignores `--environment` if it appears in node/script positions\", () => {\n // Defensive: the loop intentionally starts at index 2 so an args array\n // that happens to put `--environment` at index 0 or 1 is not treated\n // as an explicit flag. (Not a realistic process.argv shape, but guards\n // the contract.)\n assert.strictEqual(\n hasEnvironmentFlag([\"--environment\", \"x\", \"deploy\"]),\n false\n );\n });\n});\n\ndescribe(\"applyBranchFlag\", () => {\n it(\"lets a typed --branch override --environment\", () => {\n const a = { environment: \"from-environment\", branch: \"from-branch\" };\n applyBranchFlag(\n a,\n argv(\n \"deploy\",\n \"--branch\",\n \"from-branch\",\n \"--environment\",\n \"from-environment\"\n )\n );\n assert.strictEqual(a.environment, \"from-branch\");\n });\n\n it(\"takes the last value when --branch is repeated\", () => {\n const a = { environment: undefined, branch: [\"first\", \"last\"] };\n applyBranchFlag(a, argv(\"deploy\", \"--branch=first\", \"--branch=last\"));\n assert.strictEqual(a.environment, \"last\");\n });\n\n it(\"ignores a branch that came only from ZUPLO_BRANCH\", () => {\n const a = { environment: \"from-environment\", branch: \"from-branch-var\" };\n applyBranchFlag(a, argv(\"deploy\"));\n assert.strictEqual(a.environment, \"from-environment\");\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=read-linked-config.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-linked-config.test.d.ts","sourceRoot":"","sources":["../../src/common/read-linked-config.test.ts"],"names":[],"mappings":""}
@@ -1,363 +0,0 @@
1
- import assert from "node:assert";
2
- import { mkdtemp, rm, writeFile } from "node:fs/promises";
3
- import { tmpdir } from "node:os";
4
- import { join } from "node:path";
5
- import readline from "node:readline";
6
- import { afterEach, beforeEach, describe, it, mock } from "node:test";
7
- import { confirmLinkedValue, readLinkedConfig, USE_LINKED_DETAILS, } from "./read-linked-config.js";
8
- describe("readLinkedConfig", () => {
9
- let testDir;
10
- beforeEach(async () => {
11
- testDir = await mkdtemp(join(tmpdir(), "zuplo-read-linked-config-test-"));
12
- });
13
- afterEach(async () => {
14
- await rm(testDir, { recursive: true, force: true });
15
- });
16
- it("returns empty object when .env.zuplo does not exist", async () => {
17
- const argv = { dir: testDir };
18
- const result = await readLinkedConfig(argv);
19
- assert.deepStrictEqual(result, {});
20
- });
21
- it("returns both fields when all are present", async () => {
22
- await writeFile(join(testDir, ".env.zuplo"), ["ZUPLO_ACCOUNT_NAME=my-account", "ZUPLO_PROJECT_NAME=my-project"].join("\n"), "utf-8");
23
- const argv = { dir: testDir };
24
- const result = await readLinkedConfig(argv);
25
- assert.deepStrictEqual(result, {
26
- accountName: "my-account",
27
- projectName: "my-project",
28
- environmentType: undefined,
29
- });
30
- });
31
- it("returns environmentType when ZUPLO_ENVIRONMENT_TYPE is present", async () => {
32
- await writeFile(join(testDir, ".env.zuplo"), [
33
- "ZUPLO_ACCOUNT_NAME=my-account",
34
- "ZUPLO_PROJECT_NAME=my-project",
35
- "ZUPLO_ENVIRONMENT_TYPE=production",
36
- ].join("\n"), "utf-8");
37
- const argv = { dir: testDir };
38
- const result = await readLinkedConfig(argv);
39
- assert.deepStrictEqual(result, {
40
- accountName: "my-account",
41
- projectName: "my-project",
42
- environmentType: "production",
43
- });
44
- });
45
- it("returns undefined for fields that are missing from the file", async () => {
46
- await writeFile(join(testDir, ".env.zuplo"), "ZUPLO_ACCOUNT_NAME=my-account\n", "utf-8");
47
- const argv = { dir: testDir };
48
- const result = await readLinkedConfig(argv);
49
- assert.strictEqual(result.accountName, "my-account");
50
- assert.strictEqual(result.projectName, undefined);
51
- });
52
- it("returns undefined for fields set to empty string", async () => {
53
- await writeFile(join(testDir, ".env.zuplo"), 'ZUPLO_ACCOUNT_NAME=\nZUPLO_PROJECT_NAME=""\n', "utf-8");
54
- const argv = { dir: testDir };
55
- const result = await readLinkedConfig(argv);
56
- assert.strictEqual(result.accountName, undefined);
57
- assert.strictEqual(result.projectName, undefined);
58
- });
59
- it("caches the result on argv so the file is only read once", async () => {
60
- await writeFile(join(testDir, ".env.zuplo"), "ZUPLO_ACCOUNT_NAME=my-account\n", "utf-8");
61
- const argv = { dir: testDir };
62
- const first = await readLinkedConfig(argv);
63
- await rm(join(testDir, ".env.zuplo"));
64
- const second = await readLinkedConfig(argv);
65
- assert.strictEqual(first, second);
66
- assert.strictEqual(second.accountName, "my-account");
67
- });
68
- it("returns empty object and does not throw on a malformed file", async () => {
69
- await writeFile(join(testDir, ".env.zuplo"), "THIS IS NOT VALID\x00ENV\n", "utf-8");
70
- const argv = { dir: testDir };
71
- const result = await readLinkedConfig(argv);
72
- assert.ok(typeof result === "object");
73
- });
74
- it("defaults dir to '.' when argv.dir is not set", async () => {
75
- const argv = { dir: testDir };
76
- const result = await readLinkedConfig(argv);
77
- assert.deepStrictEqual(result, {});
78
- });
79
- });
80
- describe("confirmLinkedValue", () => {
81
- let originalStdinIsTTY;
82
- let originalStdoutIsTTY;
83
- let originalCI;
84
- let hadCI;
85
- beforeEach(() => {
86
- originalStdinIsTTY = Object.getOwnPropertyDescriptor(process.stdin, "isTTY");
87
- originalStdoutIsTTY = Object.getOwnPropertyDescriptor(process.stdout, "isTTY");
88
- hadCI = Object.hasOwn(process.env, "CI");
89
- originalCI = process.env.CI;
90
- delete process.env.CI;
91
- });
92
- afterEach(() => {
93
- mock.restoreAll();
94
- if (originalStdinIsTTY) {
95
- Object.defineProperty(process.stdin, "isTTY", originalStdinIsTTY);
96
- }
97
- else {
98
- delete process.stdin.isTTY;
99
- }
100
- if (originalStdoutIsTTY) {
101
- Object.defineProperty(process.stdout, "isTTY", originalStdoutIsTTY);
102
- }
103
- else {
104
- delete process.stdout.isTTY;
105
- }
106
- if (hadCI) {
107
- process.env.CI = originalCI;
108
- }
109
- else {
110
- delete process.env.CI;
111
- }
112
- });
113
- it("returns true immediately without prompting in non-interactive terminals", async () => {
114
- Object.defineProperty(process.stdin, "isTTY", {
115
- value: false,
116
- configurable: true,
117
- });
118
- Object.defineProperty(process.stdout, "isTTY", {
119
- value: false,
120
- configurable: true,
121
- });
122
- const result = await confirmLinkedValue("Use linked account 'foo'?");
123
- assert.strictEqual(result, true);
124
- });
125
- it("returns true when user enters 'y'", async () => {
126
- Object.defineProperty(process.stdin, "isTTY", {
127
- value: true,
128
- configurable: true,
129
- });
130
- Object.defineProperty(process.stdout, "isTTY", {
131
- value: true,
132
- configurable: true,
133
- });
134
- stubReadlineAnswer("y");
135
- assert.strictEqual(await confirmLinkedValue("Use linked account 'foo'?"), true);
136
- });
137
- it("returns true when user enters 'Y' (case-insensitive)", async () => {
138
- Object.defineProperty(process.stdin, "isTTY", {
139
- value: true,
140
- configurable: true,
141
- });
142
- Object.defineProperty(process.stdout, "isTTY", {
143
- value: true,
144
- configurable: true,
145
- });
146
- stubReadlineAnswer("Y");
147
- assert.strictEqual(await confirmLinkedValue("Use linked account 'foo'?"), true);
148
- });
149
- it("returns true when user presses Enter (empty input — default yes)", async () => {
150
- Object.defineProperty(process.stdin, "isTTY", {
151
- value: true,
152
- configurable: true,
153
- });
154
- Object.defineProperty(process.stdout, "isTTY", {
155
- value: true,
156
- configurable: true,
157
- });
158
- stubReadlineAnswer("");
159
- assert.strictEqual(await confirmLinkedValue("Use linked account 'foo'?"), true);
160
- });
161
- it("returns false when user enters 'n'", async () => {
162
- Object.defineProperty(process.stdin, "isTTY", {
163
- value: true,
164
- configurable: true,
165
- });
166
- Object.defineProperty(process.stdout, "isTTY", {
167
- value: true,
168
- configurable: true,
169
- });
170
- stubReadlineAnswer("n");
171
- assert.strictEqual(await confirmLinkedValue("Use linked account 'foo'?"), false);
172
- });
173
- it("returns false when user enters 'N' (case-insensitive)", async () => {
174
- Object.defineProperty(process.stdin, "isTTY", {
175
- value: true,
176
- configurable: true,
177
- });
178
- Object.defineProperty(process.stdout, "isTTY", {
179
- value: true,
180
- configurable: true,
181
- });
182
- stubReadlineAnswer("N");
183
- assert.strictEqual(await confirmLinkedValue("Use linked account 'foo'?"), false);
184
- });
185
- it("returns false when user enters 'no'", async () => {
186
- Object.defineProperty(process.stdin, "isTTY", {
187
- value: true,
188
- configurable: true,
189
- });
190
- Object.defineProperty(process.stdout, "isTTY", {
191
- value: true,
192
- configurable: true,
193
- });
194
- stubReadlineAnswer("no");
195
- assert.strictEqual(await confirmLinkedValue("Use linked account 'foo'?"), false);
196
- });
197
- it("returns false when user enters 'NO' (case-insensitive)", async () => {
198
- Object.defineProperty(process.stdin, "isTTY", {
199
- value: true,
200
- configurable: true,
201
- });
202
- Object.defineProperty(process.stdout, "isTTY", {
203
- value: true,
204
- configurable: true,
205
- });
206
- stubReadlineAnswer("NO");
207
- assert.strictEqual(await confirmLinkedValue("Use linked account 'foo'?"), false);
208
- });
209
- it("falls back to defaultYes when input is unrecognized (preserves [Y/n] tolerance)", async () => {
210
- Object.defineProperty(process.stdin, "isTTY", {
211
- value: true,
212
- configurable: true,
213
- });
214
- Object.defineProperty(process.stdout, "isTTY", {
215
- value: true,
216
- configurable: true,
217
- });
218
- stubReadlineAnswer("foo");
219
- assert.strictEqual(await confirmLinkedValue("Use linked account 'foo'?"), true);
220
- });
221
- describe("with { defaultYes: false }", () => {
222
- it("returns false in non-interactive terminals", async () => {
223
- Object.defineProperty(process.stdin, "isTTY", {
224
- value: false,
225
- configurable: true,
226
- });
227
- Object.defineProperty(process.stdout, "isTTY", {
228
- value: false,
229
- configurable: true,
230
- });
231
- const result = await confirmLinkedValue("Deploy to prod?", {
232
- defaultYes: false,
233
- });
234
- assert.strictEqual(result, false);
235
- });
236
- it("returns false when user presses Enter (empty input — default no)", async () => {
237
- Object.defineProperty(process.stdin, "isTTY", {
238
- value: true,
239
- configurable: true,
240
- });
241
- Object.defineProperty(process.stdout, "isTTY", {
242
- value: true,
243
- configurable: true,
244
- });
245
- stubReadlineAnswer("");
246
- assert.strictEqual(await confirmLinkedValue("Deploy to prod?", { defaultYes: false }), false);
247
- });
248
- it("returns true when user enters 'y'", async () => {
249
- Object.defineProperty(process.stdin, "isTTY", {
250
- value: true,
251
- configurable: true,
252
- });
253
- Object.defineProperty(process.stdout, "isTTY", {
254
- value: true,
255
- configurable: true,
256
- });
257
- stubReadlineAnswer("y");
258
- assert.strictEqual(await confirmLinkedValue("Deploy to prod?", { defaultYes: false }), true);
259
- });
260
- it("returns true when user enters 'yes'", async () => {
261
- Object.defineProperty(process.stdin, "isTTY", {
262
- value: true,
263
- configurable: true,
264
- });
265
- Object.defineProperty(process.stdout, "isTTY", {
266
- value: true,
267
- configurable: true,
268
- });
269
- stubReadlineAnswer("yes");
270
- assert.strictEqual(await confirmLinkedValue("Deploy to prod?", { defaultYes: false }), true);
271
- });
272
- it("returns false when input is unrecognized (falls back to default)", async () => {
273
- Object.defineProperty(process.stdin, "isTTY", {
274
- value: true,
275
- configurable: true,
276
- });
277
- Object.defineProperty(process.stdout, "isTTY", {
278
- value: true,
279
- configurable: true,
280
- });
281
- stubReadlineAnswer("foo");
282
- assert.strictEqual(await confirmLinkedValue("Deploy to prod?", { defaultYes: false }), false);
283
- });
284
- it("renders the prompt with [y/N] hint", async () => {
285
- Object.defineProperty(process.stdin, "isTTY", {
286
- value: true,
287
- configurable: true,
288
- });
289
- Object.defineProperty(process.stdout, "isTTY", {
290
- value: true,
291
- configurable: true,
292
- });
293
- let capturedPrompt = "";
294
- mock.method(readline, "createInterface", () => ({
295
- on: () => { },
296
- question: (prompt, callback) => {
297
- capturedPrompt = prompt;
298
- callback("");
299
- },
300
- close: mock.fn(),
301
- }));
302
- await confirmLinkedValue("Deploy to prod?", { defaultYes: false });
303
- assert.match(capturedPrompt, /\[y\/N\]/);
304
- });
305
- });
306
- it("exits the process when SIGINT is emitted on the readline interface", () => {
307
- Object.defineProperty(process.stdin, "isTTY", {
308
- value: true,
309
- configurable: true,
310
- });
311
- Object.defineProperty(process.stdout, "isTTY", {
312
- value: true,
313
- configurable: true,
314
- });
315
- const exitStub = mock.method(process, "exit", () => {
316
- throw new Error("process.exit called");
317
- });
318
- let sigintEmitter;
319
- mock.method(readline, "createInterface", () => ({
320
- on: (event, handler) => {
321
- if (event === "SIGINT")
322
- sigintEmitter = handler;
323
- },
324
- question: () => {
325
- },
326
- close: mock.fn(),
327
- }));
328
- void confirmLinkedValue("Use linked account 'foo'?");
329
- assert.throws(() => sigintEmitter(), /process\.exit called/);
330
- assert.strictEqual(exitStub.mock.calls[0].arguments[0], 1);
331
- });
332
- });
333
- describe("USE_LINKED_DETAILS", () => {
334
- let testDir;
335
- beforeEach(async () => {
336
- testDir = await mkdtemp(join(tmpdir(), "zuplo-use-linked-details-test-"));
337
- });
338
- afterEach(async () => {
339
- await rm(testDir, { recursive: true, force: true });
340
- });
341
- it("is exported and has the expected value", () => {
342
- assert.strictEqual(USE_LINKED_DETAILS, "useLinkedDetails");
343
- });
344
- it("setting it to false on argv does not collide with the internal cache key", async () => {
345
- const argv = {
346
- dir: testDir,
347
- [USE_LINKED_DETAILS]: false,
348
- };
349
- const result = await readLinkedConfig(argv);
350
- assert.deepStrictEqual(result, {});
351
- });
352
- });
353
- function stubReadlineAnswer(answer) {
354
- mock.method(readline, "createInterface", () => ({
355
- on: () => {
356
- },
357
- question: (_prompt, callback) => {
358
- callback(answer);
359
- },
360
- close: mock.fn(),
361
- }));
362
- }
363
- //# sourceMappingURL=read-linked-config.test.js.map