@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 +0,0 @@
1
- {"version":3,"file":"import-openapi.test.js","sourceRoot":"","sources":["../../src/__tests__/import-openapi.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,aAAa,EAA2B,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,MAAM,2BAA2B,GAAG;IAClC,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,aAAa;QAC1B,OAAO,EAAE;YACP,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,eAAe;SACrB;KACF;IACD,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE;QACV,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,MAAM;gBACV,WAAW,EAAE,0BAA0B;gBACvC,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,MAAM;iBACf;aACF;SACF;QACD,eAAe,EAAE;YACf,aAAa,EAAE;gBACb,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,yBAAyB;gBACtC,MAAM,EAAE,QAAQ;aACjB;SACF;KACF;IACD,OAAO,EAAE;QACP;YACE,GAAG,EAAE,+BAA+B;YACpC,WAAW,EAAE,OAAO;SACrB;QACD;YACE,GAAG,EAAE,yBAAyB;YAC9B,WAAW,EAAE,MAAM;SACpB;KACF;IACD,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,IAAI,EAAE,EAAE;IACR,KAAK,EAAE;QACL,6BAA6B,EAAE;YAC7B,IAAI,EAAE;gBACJ,OAAO,EAAE,YAAY;gBACrB,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE;oBACV;wBACE,IAAI,EAAE,iCAAiC;qBACxC;iBACF;gBACD,SAAS,EAAE;oBACT,KAAK,EAAE;wBACL,WAAW,EAAE,EAAE;qBAChB;iBACF;gBACD,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACd,OAAO,EAAE;oBACP;wBACE,GAAG,EAAE,+BAA+B;wBACpC,WAAW,EAAE,OAAO;qBACrB;oBACD;wBACE,GAAG,EAAE,yBAAyB;wBAC9B,WAAW,EAAE,YAAY;qBAC1B;iBACF;aACF;SACF;QACD,6BAA6B,EAAE;YAC7B,IAAI,EAAE;gBACJ,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,eAAe;gBACxB,UAAU,EAAE;oBACV;wBACE,IAAI,EAAE,iCAAiC;qBACxC;iBACF;gBACD,SAAS,EAAE;oBACT,KAAK,EAAE;wBACL,WAAW,EAAE,EAAE;qBAChB;iBACF;aACF;SACF;KACF;CACF,CAAC;AAEF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAC9B,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,WAAW,EACX,aAAa,CACd,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,WAAW,EACX,UAAU,CACX,CAAC;AAEF,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,eAAuB;IACnE,IAAI,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAG1C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAGzC,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAErD,OAAO,CAAC,GAAG,CAAC,gCAAgC,eAAe,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,eAAe,GAAG,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,IAAI,OAAqB,CAAC;AAC1B,QAAQ,CAAC,sBAAsB,EAAE,KAAK;IACpC,IAAI,SAAoB,CAAC;IACzB,UAAU,CAAC,KAAK;QACd,OAAO,GAAG,aAAa,EAAE,CAAC;QAE1B,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK;QACnD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAC/B,WAAW,EACX,QAAQ,EACR,0BAA0B,CAC3B,CAAC;QAEF,MAAM,aAAa,CACjB,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,EAC3C,eAAe,CAChB,CAAC;QAEF,MAAM,aAAa,CAAC;YAClB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC;YACtD,WAAW,EAAE,eAAe;SAC7B,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAElE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE9C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YACvC,6BAA6B,EAAE;gBAC7B,IAAI,EAAE;oBACJ,OAAO,EAAE,YAAY;oBACrB,WAAW,EAAE,OAAO;oBACpB,UAAU,EAAE;wBACV;4BACE,IAAI,EAAE,iCAAiC;yBACxC;qBACF;oBACD,SAAS,EAAE;wBACT,KAAK,EAAE;4BACL,WAAW,EAAE,EAAE;yBAChB;qBACF;oBACD,QAAQ,EAAE,CAAC,EAAE,CAAC;oBACd,OAAO,EAAE;wBACP;4BACE,GAAG,EAAE,+BAA+B;4BACpC,WAAW,EAAE,OAAO;yBACrB;wBACD;4BACE,GAAG,EAAE,yBAAyB;4BAC9B,WAAW,EAAE,YAAY;yBAC1B;qBACF;iBACF;aACF;YACD,6BAA6B,EAAE;gBAC7B,IAAI,EAAE;oBACJ,WAAW,EAAE,OAAO;oBACpB,OAAO,EAAE,eAAe;oBACxB,UAAU,EAAE;wBACV;4BACE,IAAI,EAAE,iCAAiC;yBACxC;qBACF;oBACD,SAAS,EAAE;wBACT,KAAK,EAAE;4BACL,WAAW,EAAE,EAAE;yBAChB;qBACF;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK;QAC5E,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;QAE3E,MAAM,aAAa,CAAC;YAClB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC;YACtD,WAAW,EAAE,eAAe;SAC7B,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAElE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE9C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YACtC,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,aAAa;YAC1B,OAAO,EAAE;gBACP,IAAI,EAAE,YAAY;gBAClB,GAAG,EAAE,eAAe;aACrB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE9C,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5C,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,SAAS;oBACf,EAAE,EAAE,MAAM;oBACV,WAAW,EAAE,0BAA0B;oBACvC,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE;wBACN,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,MAAM;qBACf;iBACF;aACF;YACD,eAAe,EAAE;gBACf,aAAa,EAAE;oBACb,IAAI,EAAE,MAAM;oBACZ,WAAW,EAAE,yBAAyB;oBACtC,MAAM,EAAE,QAAQ;iBACjB;aACF;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YACzC;gBACE,GAAG,EAAE,+BAA+B;gBACpC,WAAW,EAAE,OAAO;aACrB;YACD;gBACE,GAAG,EAAE,yBAAyB;gBAC9B,WAAW,EAAE,MAAM;aACpB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAElD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE5C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YACvC,6BAA6B,EAAE;gBAC7B,IAAI,EAAE;oBACJ,OAAO,EAAE,eAAe;oBACxB,WAAW,EAAE,OAAO;oBACpB,UAAU,EAAE;wBACV;4BACE,IAAI,EAAE,iCAAiC;yBACxC;qBACF;oBACD,SAAS,EAAE;wBACT,KAAK,EAAE;4BACL,WAAW,EAAE,EAAE;yBAChB;qBACF;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\nimport { fileURLToPath } from \"node:url\";\nimport { expect } from \"chai\";\nimport { createSandbox, SinonSandbox, SinonStub } from \"sinon\";\nimport { importOpenApi } from \"../open-api/merge/handler.js\";\n\nconst baseRoutesFileOnImportTests = {\n info: {\n version: \"v2\",\n title: \"Zuplo test API V2\",\n description: \"Test api v2\",\n contact: {\n name: \"Zuplo test\",\n url: \"www.zuplo.com\",\n },\n },\n openapi: \"3.1.0\",\n components: {\n parameters: {\n userUid: {\n name: \"userUid\",\n in: \"path\",\n description: \"Unique UUID of the user.\",\n required: true,\n schema: {\n type: \"string\",\n format: \"uuid\",\n },\n },\n },\n securitySchemes: {\n authorization: {\n type: \"http\",\n description: \"Firebase JWT auth token\",\n scheme: \"bearer\",\n },\n },\n },\n servers: [\n {\n url: \"https://api.stage.example.com\",\n description: \"Stage\",\n },\n {\n url: \"https://api.example.com\",\n description: \"Prod\",\n },\n ],\n security: [{}],\n tags: [],\n paths: {\n \"/v1/second/{userUid}/nature\": {\n post: {\n summary: \"Test route\",\n operationId: \"12345\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n security: [{}],\n servers: [\n {\n url: \"https://api.stage.example.com\",\n description: \"stage\",\n },\n {\n url: \"https://api.example.com\",\n description: \"production\",\n },\n ],\n },\n },\n \"/v2/second/{userUid}/nature\": {\n post: {\n operationId: \"67920\",\n summary: \"Test route v2\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n },\n },\n },\n};\n\nconst __filename = fileURLToPath(import.meta.url); // get the resolved path to the file\nconst __dirname = path.dirname(__filename); // get the name of the directory\n\nconst testAssetsPath = path.join(\n __dirname,\n \"..\",\n \"..\",\n \"src\",\n \"__tests__\",\n \"test-assets\"\n);\n\nconst testTmpPath = path.join(\n __dirname,\n \"..\",\n \"..\",\n \"src\",\n \"__tests__\",\n \"test-tmp\"\n);\n\nasync function createOASFile(content: string, destinationPath: string) {\n try {\n // Get the directory path of the file\n const dir = path.dirname(destinationPath);\n\n // Ensure that the directory exists (creates parent directories if necessary)\n await fs.mkdir(dir, { recursive: true });\n\n // Write the content to the file (creates the file if it doesn't exist)\n await fs.writeFile(destinationPath, content, \"utf8\");\n\n console.log(`File created successfully at ${destinationPath}`);\n } catch (error) {\n console.error(`Error creating file at ${destinationPath}:`, error);\n }\n}\n\nlet sandbox: SinonSandbox;\ndescribe(\"Import open api file\", async function () {\n let printExit: SinonStub;\n beforeEach(async function () {\n sandbox = createSandbox();\n // @NOTE - need to wrap this or else the cli code kills test run\n printExit = sandbox.stub(process, \"exit\");\n });\n\n afterEach(() => {\n sandbox.restore();\n });\n\n it(\"should merge two existing files correctly\", async function () {\n const destinationPath = path.join(\n testTmpPath,\n \"config\",\n \"routes-test-one.oas.json\"\n );\n // setup by creating the destination file first\n await createOASFile(\n JSON.stringify(baseRoutesFileOnImportTests),\n destinationPath\n );\n\n await importOpenApi({\n prompt: false,\n source: path.join(testAssetsPath, \"toimport.oas.json\"),\n destination: destinationPath,\n });\n\n const mergedContent = await fs.readFile(destinationPath, \"utf-8\");\n\n const jsonContent = JSON.parse(mergedContent);\n\n expect(jsonContent.paths).to.deep.equals({\n \"/v1/second/{userUid}/nature\": {\n post: {\n summary: \"Test route\",\n operationId: \"12345\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n security: [{}],\n servers: [\n {\n url: \"https://api.stage.example.com\",\n description: \"stage\",\n },\n {\n url: \"https://api.example.com\",\n description: \"production\",\n },\n ],\n },\n },\n \"/v2/second/{userUid}/nature\": {\n post: {\n operationId: \"67920\",\n summary: \"Test route v2\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n },\n },\n });\n });\n\n it(\"should import a file into a fs destination that does not yet exist\", async function () {\n const destinationPath = path.join(testTmpPath, \"routes-test-two.oas.json\");\n\n await importOpenApi({\n prompt: false,\n source: path.join(testAssetsPath, \"toimport.oas.json\"),\n destination: destinationPath,\n });\n\n const mergedContent = await fs.readFile(destinationPath, \"utf-8\");\n\n const jsonContent = JSON.parse(mergedContent);\n\n expect(jsonContent.info).to.deep.equals({\n version: \"v2\",\n title: \"Zuplo test API V2\",\n description: \"Test api v2\",\n contact: {\n name: \"Zuplo test\",\n url: \"www.zuplo.com\",\n },\n });\n\n expect(jsonContent.openapi).to.equal(\"3.1.0\");\n\n expect(jsonContent.components).to.deep.equals({\n parameters: {\n userUid: {\n name: \"userUid\",\n in: \"path\",\n description: \"Unique UUID of the user.\",\n required: true,\n schema: {\n type: \"string\",\n format: \"uuid\",\n },\n },\n },\n securitySchemes: {\n authorization: {\n type: \"http\",\n description: \"Firebase JWT auth token\",\n scheme: \"bearer\",\n },\n },\n });\n\n expect(jsonContent.servers).to.deep.equals([\n {\n url: \"https://api.stage.example.com\",\n description: \"Stage\",\n },\n {\n url: \"https://api.example.com\",\n description: \"Prod\",\n },\n ]);\n\n expect(jsonContent.security).to.deep.equals([{}]);\n\n expect(jsonContent.tags).to.deep.equals([]);\n\n expect(jsonContent.paths).to.deep.equals({\n \"/v2/second/{userUid}/nature\": {\n post: {\n summary: \"Test route v2\",\n operationId: \"67920\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n },\n },\n });\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=confirm-linked-config.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"confirm-linked-config.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/confirm-linked-config.integration.test.ts"],"names":[],"mappings":""}
@@ -1,202 +0,0 @@
1
- import { confirmLinkedConfig } from "../../common/middleware/confirm-linked-config.js";
2
- import { confirmLinkedValue, readLinkedConfig, USE_LINKED_DETAILS, } from "../../common/read-linked-config.js";
3
- import { isInteractiveTerminal } from "../../common/terminal.js";
4
- import { cleanupTest, setupTestEnvironment, TEST_ACCOUNT_NAME, TEST_AUTH_TOKEN, TEST_PROJECT_NAME, } from "./test-utils.js";
5
- jest.mock("../../common/read-linked-config.js", () => ({
6
- __esModule: true,
7
- confirmLinkedValue: jest.fn().mockResolvedValue(true),
8
- readLinkedConfig: jest.fn().mockResolvedValue({}),
9
- USE_LINKED_DETAILS: "useLinkedDetails",
10
- ignoreLinkedDetails: jest
11
- .fn()
12
- .mockImplementation((argv) => {
13
- argv["useLinkedDetails"] = false;
14
- }),
15
- }));
16
- jest.mock("../../common/terminal.js", () => ({
17
- __esModule: true,
18
- isInteractiveTerminal: jest.fn().mockReturnValue(true),
19
- }));
20
- describe("confirmLinkedConfig middleware", () => {
21
- beforeEach(() => {
22
- setupTestEnvironment();
23
- jest.clearAllMocks();
24
- jest.mocked(isInteractiveTerminal).mockReturnValue(true);
25
- jest.mocked(confirmLinkedValue).mockResolvedValue(true);
26
- jest.mocked(readLinkedConfig).mockResolvedValue({});
27
- });
28
- afterEach(() => {
29
- cleanupTest();
30
- });
31
- describe("when both account and project are linked and the terminal is interactive", () => {
32
- it("asks a single combined Y/n prompt and sets both values on accept", async () => {
33
- jest.mocked(readLinkedConfig).mockResolvedValue({
34
- accountName: TEST_ACCOUNT_NAME,
35
- projectName: TEST_PROJECT_NAME,
36
- });
37
- jest.mocked(confirmLinkedValue).mockResolvedValue(true);
38
- const argv = { authToken: TEST_AUTH_TOKEN };
39
- await confirmLinkedConfig(argv);
40
- expect(confirmLinkedValue).toHaveBeenCalledTimes(1);
41
- expect(confirmLinkedValue).toHaveBeenCalledWith(`Use linked project '${TEST_PROJECT_NAME}' in account '${TEST_ACCOUNT_NAME}'?`);
42
- expect(argv.account).toBe(TEST_ACCOUNT_NAME);
43
- expect(argv.project).toBe(TEST_PROJECT_NAME);
44
- expect(argv[USE_LINKED_DETAILS]).not.toBe(false);
45
- });
46
- it("sets useLinkedDetails=false on decline so downstream pickers run", async () => {
47
- jest.mocked(readLinkedConfig).mockResolvedValue({
48
- accountName: TEST_ACCOUNT_NAME,
49
- projectName: TEST_PROJECT_NAME,
50
- });
51
- jest.mocked(confirmLinkedValue).mockResolvedValue(false);
52
- const argv = { authToken: TEST_AUTH_TOKEN };
53
- await confirmLinkedConfig(argv);
54
- expect(confirmLinkedValue).toHaveBeenCalledTimes(1);
55
- expect(argv[USE_LINKED_DETAILS]).toBe(false);
56
- expect(argv.account).toBeUndefined();
57
- expect(argv.project).toBeUndefined();
58
- });
59
- });
60
- describe("when the terminal is non-interactive (CI/CD)", () => {
61
- it("silently uses both linked values without prompting", async () => {
62
- jest.mocked(readLinkedConfig).mockResolvedValue({
63
- accountName: TEST_ACCOUNT_NAME,
64
- projectName: TEST_PROJECT_NAME,
65
- });
66
- jest.mocked(isInteractiveTerminal).mockReturnValue(false);
67
- const argv = { authToken: TEST_AUTH_TOKEN };
68
- await confirmLinkedConfig(argv);
69
- expect(confirmLinkedValue).not.toHaveBeenCalled();
70
- expect(argv.account).toBe(TEST_ACCOUNT_NAME);
71
- expect(argv.project).toBe(TEST_PROJECT_NAME);
72
- });
73
- });
74
- describe("when one of --account or --project is already supplied", () => {
75
- it("skips entirely when --account is supplied (defers to fetchProject)", async () => {
76
- jest.mocked(readLinkedConfig).mockResolvedValue({
77
- accountName: TEST_ACCOUNT_NAME,
78
- projectName: TEST_PROJECT_NAME,
79
- });
80
- const argv = {
81
- authToken: TEST_AUTH_TOKEN,
82
- account: "explicit-account",
83
- };
84
- await confirmLinkedConfig(argv);
85
- expect(confirmLinkedValue).not.toHaveBeenCalled();
86
- expect(readLinkedConfig).not.toHaveBeenCalled();
87
- expect(argv.account).toBe("explicit-account");
88
- expect(argv.project).toBeUndefined();
89
- });
90
- it("skips entirely when --project is supplied (defers to fetchAccount)", async () => {
91
- jest.mocked(readLinkedConfig).mockResolvedValue({
92
- accountName: TEST_ACCOUNT_NAME,
93
- projectName: TEST_PROJECT_NAME,
94
- });
95
- const argv = {
96
- authToken: TEST_AUTH_TOKEN,
97
- project: "explicit-project",
98
- };
99
- await confirmLinkedConfig(argv);
100
- expect(confirmLinkedValue).not.toHaveBeenCalled();
101
- expect(readLinkedConfig).not.toHaveBeenCalled();
102
- expect(argv.project).toBe("explicit-project");
103
- expect(argv.account).toBeUndefined();
104
- });
105
- it("skips entirely when both flags are supplied", async () => {
106
- const argv = {
107
- authToken: TEST_AUTH_TOKEN,
108
- account: "explicit-account",
109
- project: "explicit-project",
110
- };
111
- await confirmLinkedConfig(argv);
112
- expect(confirmLinkedValue).not.toHaveBeenCalled();
113
- expect(readLinkedConfig).not.toHaveBeenCalled();
114
- });
115
- it("skips entirely when --account is supplied as an array (repeated flag)", async () => {
116
- jest.mocked(readLinkedConfig).mockResolvedValue({
117
- accountName: TEST_ACCOUNT_NAME,
118
- projectName: TEST_PROJECT_NAME,
119
- });
120
- const argv = {
121
- authToken: TEST_AUTH_TOKEN,
122
- account: ["a", "b"],
123
- };
124
- await confirmLinkedConfig(argv);
125
- expect(confirmLinkedValue).not.toHaveBeenCalled();
126
- expect(readLinkedConfig).not.toHaveBeenCalled();
127
- expect(argv.account).toEqual(["a", "b"]);
128
- });
129
- });
130
- describe("when --no-prompt is set (argv.prompt === false)", () => {
131
- it("auto-accepts both linked values without prompting", async () => {
132
- jest.mocked(readLinkedConfig).mockResolvedValue({
133
- accountName: TEST_ACCOUNT_NAME,
134
- projectName: TEST_PROJECT_NAME,
135
- });
136
- const argv = {
137
- authToken: TEST_AUTH_TOKEN,
138
- prompt: false,
139
- };
140
- await confirmLinkedConfig(argv);
141
- expect(confirmLinkedValue).not.toHaveBeenCalled();
142
- expect(argv.account).toBe(TEST_ACCOUNT_NAME);
143
- expect(argv.project).toBe(TEST_PROJECT_NAME);
144
- });
145
- });
146
- describe("when the linked config is partial", () => {
147
- it("skips when only the account is linked (defers to fetchAccount's single prompt)", async () => {
148
- jest.mocked(readLinkedConfig).mockResolvedValue({
149
- accountName: TEST_ACCOUNT_NAME,
150
- });
151
- const argv = { authToken: TEST_AUTH_TOKEN };
152
- await confirmLinkedConfig(argv);
153
- expect(confirmLinkedValue).not.toHaveBeenCalled();
154
- expect(argv.account).toBeUndefined();
155
- expect(argv.project).toBeUndefined();
156
- });
157
- it("skips when only the project is linked", async () => {
158
- jest.mocked(readLinkedConfig).mockResolvedValue({
159
- projectName: TEST_PROJECT_NAME,
160
- });
161
- const argv = { authToken: TEST_AUTH_TOKEN };
162
- await confirmLinkedConfig(argv);
163
- expect(confirmLinkedValue).not.toHaveBeenCalled();
164
- expect(argv.account).toBeUndefined();
165
- expect(argv.project).toBeUndefined();
166
- });
167
- it("skips when no linked config exists", async () => {
168
- jest.mocked(readLinkedConfig).mockResolvedValue({});
169
- const argv = { authToken: TEST_AUTH_TOKEN };
170
- await confirmLinkedConfig(argv);
171
- expect(confirmLinkedValue).not.toHaveBeenCalled();
172
- });
173
- });
174
- describe("when useLinkedDetails is already false (link command path)", () => {
175
- it("skips entirely without reading linked config", async () => {
176
- const argv = {
177
- authToken: TEST_AUTH_TOKEN,
178
- [USE_LINKED_DETAILS]: false,
179
- };
180
- await confirmLinkedConfig(argv);
181
- expect(readLinkedConfig).not.toHaveBeenCalled();
182
- expect(confirmLinkedValue).not.toHaveBeenCalled();
183
- expect(argv[USE_LINKED_DETAILS]).toBe(false);
184
- });
185
- });
186
- describe("when an api-key is supplied", () => {
187
- it("skips entirely (account is resolved via the api-key)", async () => {
188
- jest.mocked(readLinkedConfig).mockResolvedValue({
189
- accountName: TEST_ACCOUNT_NAME,
190
- projectName: TEST_PROJECT_NAME,
191
- });
192
- const argv = {
193
- authToken: TEST_AUTH_TOKEN,
194
- "api-key": "zpka_some_key",
195
- };
196
- await confirmLinkedConfig(argv);
197
- expect(confirmLinkedValue).not.toHaveBeenCalled();
198
- expect(readLinkedConfig).not.toHaveBeenCalled();
199
- });
200
- });
201
- });
202
- //# sourceMappingURL=confirm-linked-config.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"confirm-linked-config.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/confirm-linked-config.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Integration tests for the confirmLinkedConfig middleware.\n *\n * The middleware merges the two legacy \"Use linked account?\" / \"Use linked\n * project?\" prompts into a single combined Y/n. CI/CD safety is delegated to\n * the existing isInteractiveTerminal() check used elsewhere in the CLI — these\n * tests verify both the interactive UX and that non-interactive runs skip the\n * prompt entirely.\n */\n/// <reference types=\"jest\" />\nimport { confirmLinkedConfig } from \"../../common/middleware/confirm-linked-config.js\";\nimport {\n confirmLinkedValue,\n readLinkedConfig,\n USE_LINKED_DETAILS,\n} from \"../../common/read-linked-config.js\";\nimport { isInteractiveTerminal } from \"../../common/terminal.js\";\nimport {\n cleanupTest,\n setupTestEnvironment,\n TEST_ACCOUNT_NAME,\n TEST_AUTH_TOKEN,\n TEST_PROJECT_NAME,\n} from \"./test-utils.js\";\n\njest.mock(\"../../common/read-linked-config.js\", () => ({\n __esModule: true,\n confirmLinkedValue: jest.fn().mockResolvedValue(true),\n readLinkedConfig: jest.fn().mockResolvedValue({}),\n USE_LINKED_DETAILS: \"useLinkedDetails\",\n ignoreLinkedDetails: jest\n .fn()\n .mockImplementation((argv: Record<string, unknown>) => {\n argv[\"useLinkedDetails\"] = false;\n }),\n}));\n\njest.mock(\"../../common/terminal.js\", () => ({\n __esModule: true,\n isInteractiveTerminal: jest.fn().mockReturnValue(true),\n}));\n\ndescribe(\"confirmLinkedConfig middleware\", () => {\n beforeEach(() => {\n setupTestEnvironment();\n jest.clearAllMocks();\n jest.mocked(isInteractiveTerminal).mockReturnValue(true);\n jest.mocked(confirmLinkedValue).mockResolvedValue(true);\n jest.mocked(readLinkedConfig).mockResolvedValue({});\n });\n\n afterEach(() => {\n cleanupTest();\n });\n\n describe(\"when both account and project are linked and the terminal is interactive\", () => {\n it(\"asks a single combined Y/n prompt and sets both values on accept\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({\n accountName: TEST_ACCOUNT_NAME,\n projectName: TEST_PROJECT_NAME,\n });\n jest.mocked(confirmLinkedValue).mockResolvedValue(true);\n\n const argv: Record<string, unknown> = { authToken: TEST_AUTH_TOKEN };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).toHaveBeenCalledTimes(1);\n expect(confirmLinkedValue).toHaveBeenCalledWith(\n `Use linked project '${TEST_PROJECT_NAME}' in account '${TEST_ACCOUNT_NAME}'?`\n );\n expect(argv.account).toBe(TEST_ACCOUNT_NAME);\n expect(argv.project).toBe(TEST_PROJECT_NAME);\n expect(argv[USE_LINKED_DETAILS]).not.toBe(false);\n });\n\n it(\"sets useLinkedDetails=false on decline so downstream pickers run\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({\n accountName: TEST_ACCOUNT_NAME,\n projectName: TEST_PROJECT_NAME,\n });\n jest.mocked(confirmLinkedValue).mockResolvedValue(false);\n\n const argv: Record<string, unknown> = { authToken: TEST_AUTH_TOKEN };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).toHaveBeenCalledTimes(1);\n expect(argv[USE_LINKED_DETAILS]).toBe(false);\n expect(argv.account).toBeUndefined();\n expect(argv.project).toBeUndefined();\n });\n });\n\n describe(\"when the terminal is non-interactive (CI/CD)\", () => {\n it(\"silently uses both linked values without prompting\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({\n accountName: TEST_ACCOUNT_NAME,\n projectName: TEST_PROJECT_NAME,\n });\n jest.mocked(isInteractiveTerminal).mockReturnValue(false);\n\n const argv: Record<string, unknown> = { authToken: TEST_AUTH_TOKEN };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n expect(argv.account).toBe(TEST_ACCOUNT_NAME);\n expect(argv.project).toBe(TEST_PROJECT_NAME);\n });\n });\n\n describe(\"when one of --account or --project is already supplied\", () => {\n it(\"skips entirely when --account is supplied (defers to fetchProject)\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({\n accountName: TEST_ACCOUNT_NAME,\n projectName: TEST_PROJECT_NAME,\n });\n\n const argv: Record<string, unknown> = {\n authToken: TEST_AUTH_TOKEN,\n account: \"explicit-account\",\n };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n expect(readLinkedConfig).not.toHaveBeenCalled();\n expect(argv.account).toBe(\"explicit-account\");\n expect(argv.project).toBeUndefined();\n });\n\n it(\"skips entirely when --project is supplied (defers to fetchAccount)\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({\n accountName: TEST_ACCOUNT_NAME,\n projectName: TEST_PROJECT_NAME,\n });\n\n const argv: Record<string, unknown> = {\n authToken: TEST_AUTH_TOKEN,\n project: \"explicit-project\",\n };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n expect(readLinkedConfig).not.toHaveBeenCalled();\n expect(argv.project).toBe(\"explicit-project\");\n expect(argv.account).toBeUndefined();\n });\n\n it(\"skips entirely when both flags are supplied\", async () => {\n const argv: Record<string, unknown> = {\n authToken: TEST_AUTH_TOKEN,\n account: \"explicit-account\",\n project: \"explicit-project\",\n };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n expect(readLinkedConfig).not.toHaveBeenCalled();\n });\n\n it(\"skips entirely when --account is supplied as an array (repeated flag)\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({\n accountName: TEST_ACCOUNT_NAME,\n projectName: TEST_PROJECT_NAME,\n });\n\n const argv: Record<string, unknown> = {\n authToken: TEST_AUTH_TOKEN,\n account: [\"a\", \"b\"],\n };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n expect(readLinkedConfig).not.toHaveBeenCalled();\n expect(argv.account).toEqual([\"a\", \"b\"]);\n });\n });\n\n describe(\"when --no-prompt is set (argv.prompt === false)\", () => {\n it(\"auto-accepts both linked values without prompting\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({\n accountName: TEST_ACCOUNT_NAME,\n projectName: TEST_PROJECT_NAME,\n });\n\n const argv: Record<string, unknown> = {\n authToken: TEST_AUTH_TOKEN,\n prompt: false,\n };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n expect(argv.account).toBe(TEST_ACCOUNT_NAME);\n expect(argv.project).toBe(TEST_PROJECT_NAME);\n });\n });\n\n describe(\"when the linked config is partial\", () => {\n it(\"skips when only the account is linked (defers to fetchAccount's single prompt)\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({\n accountName: TEST_ACCOUNT_NAME,\n });\n\n const argv: Record<string, unknown> = { authToken: TEST_AUTH_TOKEN };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n expect(argv.account).toBeUndefined();\n expect(argv.project).toBeUndefined();\n });\n\n it(\"skips when only the project is linked\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({\n projectName: TEST_PROJECT_NAME,\n });\n\n const argv: Record<string, unknown> = { authToken: TEST_AUTH_TOKEN };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n expect(argv.account).toBeUndefined();\n expect(argv.project).toBeUndefined();\n });\n\n it(\"skips when no linked config exists\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({});\n\n const argv: Record<string, unknown> = { authToken: TEST_AUTH_TOKEN };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n });\n });\n\n describe(\"when useLinkedDetails is already false (link command path)\", () => {\n it(\"skips entirely without reading linked config\", async () => {\n const argv: Record<string, unknown> = {\n authToken: TEST_AUTH_TOKEN,\n [USE_LINKED_DETAILS]: false,\n };\n await confirmLinkedConfig(argv);\n\n expect(readLinkedConfig).not.toHaveBeenCalled();\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n expect(argv[USE_LINKED_DETAILS]).toBe(false);\n });\n });\n\n describe(\"when an api-key is supplied\", () => {\n it(\"skips entirely (account is resolved via the api-key)\", async () => {\n jest.mocked(readLinkedConfig).mockResolvedValue({\n accountName: TEST_ACCOUNT_NAME,\n projectName: TEST_PROJECT_NAME,\n });\n\n const argv: Record<string, unknown> = {\n authToken: TEST_AUTH_TOKEN,\n \"api-key\": \"zpka_some_key\",\n };\n await confirmLinkedConfig(argv);\n\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n expect(readLinkedConfig).not.toHaveBeenCalled();\n });\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=confirm-production-deploy.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"confirm-production-deploy.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/confirm-production-deploy.integration.test.ts"],"names":[],"mappings":""}
@@ -1,184 +0,0 @@
1
- import { confirmProductionDeploy } from "../../common/middleware/confirm-production-deploy.js";
2
- import { ENVIRONMENT_EXPLICIT_KEY, FETCHED_ENVIRONMENTS_KEY, } from "../../common/middleware/get-environment-param.js";
3
- import { printCancellationToConsoleAndExitGracefully } from "../../common/output.js";
4
- import { confirmLinkedValue } from "../../common/read-linked-config.js";
5
- import { isInteractiveTerminal } from "../../common/terminal.js";
6
- import { cleanupTest, setupTestEnvironment, TEST_ACCOUNT_NAME, TEST_AUTH_TOKEN, TEST_PROJECT_NAME, } from "./test-utils.js";
7
- jest.mock("../../common/read-linked-config.js", () => ({
8
- __esModule: true,
9
- confirmLinkedValue: jest.fn().mockResolvedValue(true),
10
- }));
11
- jest.mock("../../common/terminal.js", () => ({
12
- __esModule: true,
13
- isInteractiveTerminal: jest.fn().mockReturnValue(true),
14
- }));
15
- jest.mock("../../common/output.js", () => ({
16
- __esModule: true,
17
- printCancellationToConsoleAndExitGracefully: jest
18
- .fn()
19
- .mockImplementation(() => {
20
- throw new Error("cancelled");
21
- }),
22
- }));
23
- function baseArgv(overrides = {}) {
24
- return {
25
- authToken: TEST_AUTH_TOKEN,
26
- account: TEST_ACCOUNT_NAME,
27
- project: TEST_PROJECT_NAME,
28
- ...overrides,
29
- };
30
- }
31
- describe("confirmProductionDeploy middleware", () => {
32
- beforeEach(() => {
33
- setupTestEnvironment();
34
- jest.clearAllMocks();
35
- jest.mocked(isInteractiveTerminal).mockReturnValue(true);
36
- jest.mocked(confirmLinkedValue).mockResolvedValue(true);
37
- jest
38
- .mocked(printCancellationToConsoleAndExitGracefully)
39
- .mockImplementation((() => {
40
- throw new Error("cancelled");
41
- }));
42
- });
43
- afterEach(() => {
44
- cleanupTest();
45
- });
46
- describe("when the env was inferred from a production branch and the terminal is interactive", () => {
47
- it("prompts with default No for branch 'main' and proceeds on accept", async () => {
48
- jest.mocked(confirmLinkedValue).mockResolvedValue(true);
49
- const argv = baseArgv({
50
- environment: "main",
51
- [ENVIRONMENT_EXPLICIT_KEY]: false,
52
- });
53
- await confirmProductionDeploy(argv);
54
- expect(confirmLinkedValue).toHaveBeenCalledTimes(1);
55
- const [message, options] = jest.mocked(confirmLinkedValue).mock.calls[0];
56
- expect(message).toContain("'main' production environment");
57
- expect(message).toContain(`'${TEST_PROJECT_NAME}'`);
58
- expect(message).toContain(`'${TEST_ACCOUNT_NAME}'`);
59
- expect(options).toEqual({ defaultYes: false });
60
- expect(printCancellationToConsoleAndExitGracefully).not.toHaveBeenCalled();
61
- });
62
- it("cancels via the graceful exit helper when the user declines", async () => {
63
- jest.mocked(confirmLinkedValue).mockResolvedValue(false);
64
- const argv = baseArgv({
65
- environment: "main",
66
- [ENVIRONMENT_EXPLICIT_KEY]: false,
67
- });
68
- await expect(confirmProductionDeploy(argv)).rejects.toThrow("cancelled");
69
- expect(confirmLinkedValue).toHaveBeenCalledTimes(1);
70
- expect(printCancellationToConsoleAndExitGracefully).toHaveBeenCalledWith("Deployment cancelled.");
71
- });
72
- it("prompts for branch 'master'", async () => {
73
- const argv = baseArgv({
74
- environment: "master",
75
- [ENVIRONMENT_EXPLICIT_KEY]: false,
76
- });
77
- await confirmProductionDeploy(argv);
78
- expect(confirmLinkedValue).toHaveBeenCalledTimes(1);
79
- });
80
- it("prompts for branch 'production' without duplicating the word in the message", async () => {
81
- const argv = baseArgv({
82
- environment: "production",
83
- [ENVIRONMENT_EXPLICIT_KEY]: false,
84
- });
85
- await confirmProductionDeploy(argv);
86
- expect(confirmLinkedValue).toHaveBeenCalledTimes(1);
87
- const [message] = jest.mocked(confirmLinkedValue).mock.calls[0];
88
- expect(message).toContain("the production environment");
89
- expect(message).not.toContain("'production' production environment");
90
- });
91
- it("prompts when the environment list reports environmentType=production for a non-standard name", async () => {
92
- const argv = baseArgv({
93
- environment: "live",
94
- [ENVIRONMENT_EXPLICIT_KEY]: false,
95
- [FETCHED_ENVIRONMENTS_KEY]: [
96
- {
97
- name: "live",
98
- accountName: TEST_ACCOUNT_NAME,
99
- projectName: TEST_PROJECT_NAME,
100
- createdOn: null,
101
- branchName: "live",
102
- environmentType: "production",
103
- },
104
- ],
105
- });
106
- await confirmProductionDeploy(argv);
107
- expect(confirmLinkedValue).toHaveBeenCalledTimes(1);
108
- });
109
- });
110
- describe("when the env is not production", () => {
111
- it("does not prompt for a feature branch", async () => {
112
- const argv = baseArgv({
113
- environment: "feature/login",
114
- [ENVIRONMENT_EXPLICIT_KEY]: false,
115
- });
116
- await confirmProductionDeploy(argv);
117
- expect(confirmLinkedValue).not.toHaveBeenCalled();
118
- });
119
- it("does not prompt when cached environmentType is not production", async () => {
120
- const argv = baseArgv({
121
- environment: "preview-1",
122
- [ENVIRONMENT_EXPLICIT_KEY]: false,
123
- [FETCHED_ENVIRONMENTS_KEY]: [
124
- {
125
- name: "preview-1",
126
- accountName: TEST_ACCOUNT_NAME,
127
- projectName: TEST_PROJECT_NAME,
128
- createdOn: null,
129
- branchName: "preview-1",
130
- environmentType: "preview",
131
- },
132
- ],
133
- });
134
- await confirmProductionDeploy(argv);
135
- expect(confirmLinkedValue).not.toHaveBeenCalled();
136
- });
137
- });
138
- describe("when the user opts out of the prompt", () => {
139
- it("does not prompt when --environment was passed explicitly", async () => {
140
- const argv = baseArgv({
141
- environment: "main",
142
- [ENVIRONMENT_EXPLICIT_KEY]: true,
143
- });
144
- await confirmProductionDeploy(argv);
145
- expect(confirmLinkedValue).not.toHaveBeenCalled();
146
- });
147
- it("does not prompt when --no-prompt is set (argv.prompt === false)", async () => {
148
- const argv = baseArgv({
149
- environment: "main",
150
- [ENVIRONMENT_EXPLICIT_KEY]: false,
151
- prompt: false,
152
- });
153
- await confirmProductionDeploy(argv);
154
- expect(confirmLinkedValue).not.toHaveBeenCalled();
155
- });
156
- });
157
- describe("when the terminal is non-interactive (CI/CD)", () => {
158
- it("does not prompt", async () => {
159
- jest.mocked(isInteractiveTerminal).mockReturnValue(false);
160
- const argv = baseArgv({
161
- environment: "main",
162
- [ENVIRONMENT_EXPLICIT_KEY]: false,
163
- });
164
- await confirmProductionDeploy(argv);
165
- expect(confirmLinkedValue).not.toHaveBeenCalled();
166
- });
167
- });
168
- describe("when argv.environment is missing or empty", () => {
169
- it("returns without prompting if environment is undefined", async () => {
170
- const argv = baseArgv({ [ENVIRONMENT_EXPLICIT_KEY]: false });
171
- await confirmProductionDeploy(argv);
172
- expect(confirmLinkedValue).not.toHaveBeenCalled();
173
- });
174
- it("returns without prompting if environment is empty string", async () => {
175
- const argv = baseArgv({
176
- environment: "",
177
- [ENVIRONMENT_EXPLICIT_KEY]: false,
178
- });
179
- await confirmProductionDeploy(argv);
180
- expect(confirmLinkedValue).not.toHaveBeenCalled();
181
- });
182
- });
183
- });
184
- //# sourceMappingURL=confirm-production-deploy.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"confirm-production-deploy.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/confirm-production-deploy.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Integration tests for the confirmProductionDeploy middleware.\n *\n * The middleware adds a Y/n (default No) prompt before deploying to a\n * production environment. It fires only when the terminal is interactive,\n * `--no-prompt` was not set, `--environment` was not passed, and the\n * resolved environment is \"production\" by branch-name heuristic\n * (main/master/production) or by server-reported environmentType when the\n * environments list is already cached. CI/CD is detected automatically via\n * isInteractiveTerminal.\n */\n/// <reference types=\"jest\" />\nimport { confirmProductionDeploy } from \"../../common/middleware/confirm-production-deploy.js\";\nimport {\n ENVIRONMENT_EXPLICIT_KEY,\n FETCHED_ENVIRONMENTS_KEY,\n} from \"../../common/middleware/get-environment-param.js\";\nimport { printCancellationToConsoleAndExitGracefully } from \"../../common/output.js\";\nimport { confirmLinkedValue } from \"../../common/read-linked-config.js\";\nimport { isInteractiveTerminal } from \"../../common/terminal.js\";\nimport {\n cleanupTest,\n setupTestEnvironment,\n TEST_ACCOUNT_NAME,\n TEST_AUTH_TOKEN,\n TEST_PROJECT_NAME,\n} from \"./test-utils.js\";\n\njest.mock(\"../../common/read-linked-config.js\", () => ({\n __esModule: true,\n confirmLinkedValue: jest.fn().mockResolvedValue(true),\n}));\n\njest.mock(\"../../common/terminal.js\", () => ({\n __esModule: true,\n isInteractiveTerminal: jest.fn().mockReturnValue(true),\n}));\n\n// Mock output module — the real one calls process.exit and pulls in the\n// analytics client, which we don't want in this ESM test context. The\n// middleware only needs the cancel helper here, substituted with a thrower so\n// we can assert the cancel path without actually exiting the process.\njest.mock(\"../../common/output.js\", () => ({\n __esModule: true,\n printCancellationToConsoleAndExitGracefully: jest\n .fn()\n .mockImplementation(() => {\n throw new Error(\"cancelled\");\n }),\n}));\n\nfunction baseArgv(overrides: Record<string, unknown> = {}) {\n return {\n authToken: TEST_AUTH_TOKEN,\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n ...overrides,\n };\n}\n\ndescribe(\"confirmProductionDeploy middleware\", () => {\n beforeEach(() => {\n setupTestEnvironment();\n jest.clearAllMocks();\n jest.mocked(isInteractiveTerminal).mockReturnValue(true);\n jest.mocked(confirmLinkedValue).mockResolvedValue(true);\n jest\n .mocked(printCancellationToConsoleAndExitGracefully)\n .mockImplementation((() => {\n throw new Error(\"cancelled\");\n }) as never);\n });\n\n afterEach(() => {\n cleanupTest();\n });\n\n describe(\"when the env was inferred from a production branch and the terminal is interactive\", () => {\n it(\"prompts with default No for branch 'main' and proceeds on accept\", async () => {\n jest.mocked(confirmLinkedValue).mockResolvedValue(true);\n\n const argv = baseArgv({\n environment: \"main\",\n [ENVIRONMENT_EXPLICIT_KEY]: false,\n });\n await confirmProductionDeploy(argv);\n\n expect(confirmLinkedValue).toHaveBeenCalledTimes(1);\n const [message, options] = jest.mocked(confirmLinkedValue).mock.calls[0];\n expect(message).toContain(\"'main' production environment\");\n expect(message).toContain(`'${TEST_PROJECT_NAME}'`);\n expect(message).toContain(`'${TEST_ACCOUNT_NAME}'`);\n expect(options).toEqual({ defaultYes: false });\n expect(\n printCancellationToConsoleAndExitGracefully\n ).not.toHaveBeenCalled();\n });\n\n it(\"cancels via the graceful exit helper when the user declines\", async () => {\n jest.mocked(confirmLinkedValue).mockResolvedValue(false);\n\n const argv = baseArgv({\n environment: \"main\",\n [ENVIRONMENT_EXPLICIT_KEY]: false,\n });\n await expect(confirmProductionDeploy(argv)).rejects.toThrow(\"cancelled\");\n expect(confirmLinkedValue).toHaveBeenCalledTimes(1);\n expect(printCancellationToConsoleAndExitGracefully).toHaveBeenCalledWith(\n \"Deployment cancelled.\"\n );\n });\n\n it(\"prompts for branch 'master'\", async () => {\n const argv = baseArgv({\n environment: \"master\",\n [ENVIRONMENT_EXPLICIT_KEY]: false,\n });\n await confirmProductionDeploy(argv);\n expect(confirmLinkedValue).toHaveBeenCalledTimes(1);\n });\n\n it(\"prompts for branch 'production' without duplicating the word in the message\", async () => {\n const argv = baseArgv({\n environment: \"production\",\n [ENVIRONMENT_EXPLICIT_KEY]: false,\n });\n await confirmProductionDeploy(argv);\n expect(confirmLinkedValue).toHaveBeenCalledTimes(1);\n const [message] = jest.mocked(confirmLinkedValue).mock.calls[0];\n expect(message).toContain(\"the production environment\");\n expect(message).not.toContain(\"'production' production environment\");\n });\n\n it(\"prompts when the environment list reports environmentType=production for a non-standard name\", async () => {\n const argv = baseArgv({\n environment: \"live\",\n [ENVIRONMENT_EXPLICIT_KEY]: false,\n [FETCHED_ENVIRONMENTS_KEY]: [\n {\n name: \"live\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: TEST_PROJECT_NAME,\n createdOn: null,\n branchName: \"live\",\n environmentType: \"production\",\n },\n ],\n });\n\n await confirmProductionDeploy(argv);\n expect(confirmLinkedValue).toHaveBeenCalledTimes(1);\n });\n });\n\n describe(\"when the env is not production\", () => {\n it(\"does not prompt for a feature branch\", async () => {\n const argv = baseArgv({\n environment: \"feature/login\",\n [ENVIRONMENT_EXPLICIT_KEY]: false,\n });\n\n await confirmProductionDeploy(argv);\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n });\n\n it(\"does not prompt when cached environmentType is not production\", async () => {\n const argv = baseArgv({\n environment: \"preview-1\",\n [ENVIRONMENT_EXPLICIT_KEY]: false,\n [FETCHED_ENVIRONMENTS_KEY]: [\n {\n name: \"preview-1\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: TEST_PROJECT_NAME,\n createdOn: null,\n branchName: \"preview-1\",\n environmentType: \"preview\",\n },\n ],\n });\n\n await confirmProductionDeploy(argv);\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n });\n });\n\n describe(\"when the user opts out of the prompt\", () => {\n it(\"does not prompt when --environment was passed explicitly\", async () => {\n const argv = baseArgv({\n environment: \"main\",\n [ENVIRONMENT_EXPLICIT_KEY]: true,\n });\n\n await confirmProductionDeploy(argv);\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n });\n\n it(\"does not prompt when --no-prompt is set (argv.prompt === false)\", async () => {\n const argv = baseArgv({\n environment: \"main\",\n [ENVIRONMENT_EXPLICIT_KEY]: false,\n prompt: false,\n });\n\n await confirmProductionDeploy(argv);\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n });\n });\n\n describe(\"when the terminal is non-interactive (CI/CD)\", () => {\n it(\"does not prompt\", async () => {\n jest.mocked(isInteractiveTerminal).mockReturnValue(false);\n const argv = baseArgv({\n environment: \"main\",\n [ENVIRONMENT_EXPLICIT_KEY]: false,\n });\n\n await confirmProductionDeploy(argv);\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n });\n });\n\n describe(\"when argv.environment is missing or empty\", () => {\n it(\"returns without prompting if environment is undefined\", async () => {\n const argv = baseArgv({ [ENVIRONMENT_EXPLICIT_KEY]: false });\n await confirmProductionDeploy(argv);\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n });\n\n it(\"returns without prompting if environment is empty string\", async () => {\n const argv = baseArgv({\n environment: \"\",\n [ENVIRONMENT_EXPLICIT_KEY]: false,\n });\n await confirmProductionDeploy(argv);\n expect(confirmLinkedValue).not.toHaveBeenCalled();\n });\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=custom-domain.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"custom-domain.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/custom-domain.integration.test.ts"],"names":[],"mappings":""}