@zuplo/cli 7.10.0 → 7.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/dist/common/worker-output.d.ts +7 -0
  2. package/dist/common/worker-output.d.ts.map +1 -1
  3. package/dist/common/worker-output.js +39 -0
  4. package/dist/common/worker-output.js.map +1 -1
  5. package/dist/tsconfig.tsbuildinfo +1 -1
  6. package/node_modules/@hono/node-server/README.md +2 -0
  7. package/node_modules/@hono/node-server/dist/index.cjs +1 -1
  8. package/node_modules/@hono/node-server/dist/index.mjs +1 -1
  9. package/node_modules/@hono/node-server/dist/serve-static.cjs +2 -1
  10. package/node_modules/@hono/node-server/dist/serve-static.mjs +2 -1
  11. package/node_modules/@hono/node-server/package.json +1 -1
  12. package/node_modules/@posthog/core/dist/metrics/index.d.ts +9 -0
  13. package/node_modules/@posthog/core/dist/metrics/index.d.ts.map +1 -1
  14. package/node_modules/@posthog/core/dist/metrics/index.js +38 -3
  15. package/node_modules/@posthog/core/dist/metrics/index.mjs +38 -3
  16. package/node_modules/@posthog/core/dist/metrics/types.d.ts +7 -2
  17. package/node_modules/@posthog/core/dist/metrics/types.d.ts.map +1 -1
  18. package/node_modules/@posthog/core/dist/traces/ids.d.ts.map +1 -1
  19. package/node_modules/@posthog/core/dist/traces/ids.js +2 -2
  20. package/node_modules/@posthog/core/dist/traces/ids.mjs +2 -2
  21. package/node_modules/@posthog/core/dist/types.d.ts +1 -1
  22. package/node_modules/@posthog/core/dist/types.d.ts.map +1 -1
  23. package/node_modules/@posthog/core/package.json +4 -3
  24. package/node_modules/@posthog/core/src/metrics/index.spec.ts +75 -0
  25. package/node_modules/@posthog/core/src/metrics/index.ts +60 -0
  26. package/node_modules/@posthog/core/src/metrics/types.ts +7 -1
  27. package/node_modules/@posthog/core/src/traces/ids.ts +4 -2
  28. package/node_modules/@posthog/core/src/types.ts +1 -1
  29. package/node_modules/@posthog/types/dist/capture-metric.d.ts +10 -0
  30. package/node_modules/@posthog/types/dist/capture-metric.d.ts.map +1 -1
  31. package/node_modules/@posthog/types/dist/capture.d.ts +1 -1
  32. package/node_modules/@posthog/types/dist/capture.d.ts.map +1 -1
  33. package/node_modules/@posthog/types/dist/index.d.ts +1 -1
  34. package/node_modules/@posthog/types/dist/index.d.ts.map +1 -1
  35. package/node_modules/@posthog/types/package.json +1 -1
  36. package/node_modules/@posthog/types/src/capture-metric.ts +11 -0
  37. package/node_modules/@posthog/types/src/capture.ts +1 -1
  38. package/node_modules/@posthog/types/src/index.ts +1 -0
  39. package/node_modules/@zuplo/core/customer.cli.minified.js +272 -261
  40. package/node_modules/@zuplo/core/index.minified.js +276 -265
  41. package/node_modules/@zuplo/core/package.json +1 -1
  42. package/node_modules/@zuplo/graphql/package.json +1 -1
  43. package/node_modules/@zuplo/openapi-tools/package.json +5 -2
  44. package/node_modules/@zuplo/otel/package.json +1 -1
  45. package/node_modules/@zuplo/runtime/out/esm/{chunk-YJ2BHVUH.js → chunk-CDEAY3VY.js} +2 -2
  46. package/node_modules/@zuplo/runtime/out/esm/chunk-LVSZ3WTO.js +37 -0
  47. package/node_modules/@zuplo/runtime/out/esm/chunk-LVSZ3WTO.js.map +1 -0
  48. package/node_modules/@zuplo/runtime/out/esm/{chunk-VTO3F6DK.js → chunk-NUVXDVLJ.js} +2 -2
  49. package/node_modules/@zuplo/runtime/out/esm/{chunk-6YPRGG62.js → chunk-RHU3Z7DA.js} +108 -108
  50. package/node_modules/@zuplo/runtime/out/esm/chunk-RHU3Z7DA.js.map +1 -0
  51. package/node_modules/@zuplo/runtime/out/esm/index.js +1 -1
  52. package/node_modules/@zuplo/runtime/out/esm/internal/index.js +1 -1
  53. package/node_modules/@zuplo/runtime/out/esm/mcp-gateway/index.js +1 -1
  54. package/node_modules/@zuplo/runtime/out/esm/mocks/index.js +1 -1
  55. package/node_modules/@zuplo/runtime/out/esm/sdks/aws/index.js +1 -1
  56. package/node_modules/@zuplo/runtime/out/types/index.d.ts +15 -24
  57. package/node_modules/@zuplo/runtime/out/types/internal/index.d.ts +14 -0
  58. package/node_modules/@zuplo/runtime/package.json +1 -1
  59. package/package.json +15 -12
  60. package/dist/__tests__/archive-utils.test.d.ts +0 -2
  61. package/dist/__tests__/archive-utils.test.d.ts.map +0 -1
  62. package/dist/__tests__/archive-utils.test.js +0 -50
  63. package/dist/__tests__/archive-utils.test.js.map +0 -1
  64. package/dist/__tests__/import-openapi.test.d.ts +0 -2
  65. package/dist/__tests__/import-openapi.test.d.ts.map +0 -1
  66. package/dist/__tests__/import-openapi.test.js +0 -251
  67. package/dist/__tests__/import-openapi.test.js.map +0 -1
  68. package/dist/__tests__/integration/confirm-linked-config.integration.test.d.ts +0 -2
  69. package/dist/__tests__/integration/confirm-linked-config.integration.test.d.ts.map +0 -1
  70. package/dist/__tests__/integration/confirm-linked-config.integration.test.js +0 -202
  71. package/dist/__tests__/integration/confirm-linked-config.integration.test.js.map +0 -1
  72. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts +0 -2
  73. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts.map +0 -1
  74. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js +0 -184
  75. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js.map +0 -1
  76. package/dist/__tests__/integration/custom-domain.integration.test.d.ts +0 -2
  77. package/dist/__tests__/integration/custom-domain.integration.test.d.ts.map +0 -1
  78. package/dist/__tests__/integration/custom-domain.integration.test.js +0 -563
  79. package/dist/__tests__/integration/custom-domain.integration.test.js.map +0 -1
  80. package/dist/__tests__/integration/delete.integration.test.d.ts +0 -2
  81. package/dist/__tests__/integration/delete.integration.test.d.ts.map +0 -1
  82. package/dist/__tests__/integration/delete.integration.test.js +0 -262
  83. package/dist/__tests__/integration/delete.integration.test.js.map +0 -1
  84. package/dist/__tests__/integration/deploy.integration.test.d.ts +0 -2
  85. package/dist/__tests__/integration/deploy.integration.test.d.ts.map +0 -1
  86. package/dist/__tests__/integration/deploy.integration.test.js +0 -519
  87. package/dist/__tests__/integration/deploy.integration.test.js.map +0 -1
  88. package/dist/__tests__/integration/get-project-param.integration.test.d.ts +0 -2
  89. package/dist/__tests__/integration/get-project-param.integration.test.d.ts.map +0 -1
  90. package/dist/__tests__/integration/get-project-param.integration.test.js +0 -305
  91. package/dist/__tests__/integration/get-project-param.integration.test.js.map +0 -1
  92. package/dist/__tests__/integration/info.integration.test.d.ts +0 -2
  93. package/dist/__tests__/integration/info.integration.test.d.ts.map +0 -1
  94. package/dist/__tests__/integration/info.integration.test.js +0 -293
  95. package/dist/__tests__/integration/info.integration.test.js.map +0 -1
  96. package/dist/__tests__/integration/jest-mocks-setup.d.ts +0 -2
  97. package/dist/__tests__/integration/jest-mocks-setup.d.ts.map +0 -1
  98. package/dist/__tests__/integration/jest-mocks-setup.js +0 -104
  99. package/dist/__tests__/integration/jest-mocks-setup.js.map +0 -1
  100. package/dist/__tests__/integration/jest-setup.d.ts +0 -2
  101. package/dist/__tests__/integration/jest-setup.d.ts.map +0 -1
  102. package/dist/__tests__/integration/jest-setup.js +0 -12
  103. package/dist/__tests__/integration/jest-setup.js.map +0 -1
  104. package/dist/__tests__/integration/link.integration.test.d.ts +0 -2
  105. package/dist/__tests__/integration/link.integration.test.d.ts.map +0 -1
  106. package/dist/__tests__/integration/link.integration.test.js +0 -395
  107. package/dist/__tests__/integration/link.integration.test.js.map +0 -1
  108. package/dist/__tests__/integration/linked-config-cascade.integration.test.d.ts +0 -2
  109. package/dist/__tests__/integration/linked-config-cascade.integration.test.d.ts.map +0 -1
  110. package/dist/__tests__/integration/linked-config-cascade.integration.test.js +0 -179
  111. package/dist/__tests__/integration/linked-config-cascade.integration.test.js.map +0 -1
  112. package/dist/__tests__/integration/list.integration.test.d.ts +0 -2
  113. package/dist/__tests__/integration/list.integration.test.d.ts.map +0 -1
  114. package/dist/__tests__/integration/list.integration.test.js +0 -300
  115. package/dist/__tests__/integration/list.integration.test.js.map +0 -1
  116. package/dist/__tests__/integration/source-upgrade.integration.test.d.ts +0 -2
  117. package/dist/__tests__/integration/source-upgrade.integration.test.d.ts.map +0 -1
  118. package/dist/__tests__/integration/source-upgrade.integration.test.js +0 -100
  119. package/dist/__tests__/integration/source-upgrade.integration.test.js.map +0 -1
  120. package/dist/__tests__/integration/test-utils.d.ts +0 -30
  121. package/dist/__tests__/integration/test-utils.d.ts.map +0 -1
  122. package/dist/__tests__/integration/test-utils.js +0 -82
  123. package/dist/__tests__/integration/test-utils.js.map +0 -1
  124. package/dist/__tests__/integration/tunnel.integration.test.d.ts +0 -2
  125. package/dist/__tests__/integration/tunnel.integration.test.d.ts.map +0 -1
  126. package/dist/__tests__/integration/tunnel.integration.test.js +0 -486
  127. package/dist/__tests__/integration/tunnel.integration.test.js.map +0 -1
  128. package/dist/__tests__/integration/variable.integration.test.d.ts +0 -2
  129. package/dist/__tests__/integration/variable.integration.test.d.ts.map +0 -1
  130. package/dist/__tests__/integration/variable.integration.test.js +0 -258
  131. package/dist/__tests__/integration/variable.integration.test.js.map +0 -1
  132. package/dist/__tests__/integration/whoami.integration.test.d.ts +0 -2
  133. package/dist/__tests__/integration/whoami.integration.test.d.ts.map +0 -1
  134. package/dist/__tests__/integration/whoami.integration.test.js +0 -116
  135. package/dist/__tests__/integration/whoami.integration.test.js.map +0 -1
  136. package/dist/__tests__/outdated.test.d.ts +0 -2
  137. package/dist/__tests__/outdated.test.d.ts.map +0 -1
  138. package/dist/__tests__/outdated.test.js +0 -67
  139. package/dist/__tests__/outdated.test.js.map +0 -1
  140. package/dist/__tests__/populate.test.d.ts +0 -2
  141. package/dist/__tests__/populate.test.d.ts.map +0 -1
  142. package/dist/__tests__/populate.test.js +0 -445
  143. package/dist/__tests__/populate.test.js.map +0 -1
  144. package/dist/__tests__/tsconfig-upgrader.test.d.ts +0 -2
  145. package/dist/__tests__/tsconfig-upgrader.test.d.ts.map +0 -1
  146. package/dist/__tests__/tsconfig-upgrader.test.js +0 -31
  147. package/dist/__tests__/tsconfig-upgrader.test.js.map +0 -1
  148. package/dist/ca-certificate/validation.test.d.ts +0 -2
  149. package/dist/ca-certificate/validation.test.d.ts.map +0 -1
  150. package/dist/ca-certificate/validation.test.js +0 -131
  151. package/dist/ca-certificate/validation.test.js.map +0 -1
  152. package/dist/common/analytics/cli-invocation.test.d.ts +0 -2
  153. package/dist/common/analytics/cli-invocation.test.d.ts.map +0 -1
  154. package/dist/common/analytics/cli-invocation.test.js +0 -51
  155. package/dist/common/analytics/cli-invocation.test.js.map +0 -1
  156. package/dist/common/analytics/package-manager.test.d.ts +0 -2
  157. package/dist/common/analytics/package-manager.test.d.ts.map +0 -1
  158. package/dist/common/analytics/package-manager.test.js +0 -163
  159. package/dist/common/analytics/package-manager.test.js.map +0 -1
  160. package/dist/common/cli-dispatcher.test.d.ts +0 -2
  161. package/dist/common/cli-dispatcher.test.d.ts.map +0 -1
  162. package/dist/common/cli-dispatcher.test.js +0 -80
  163. package/dist/common/cli-dispatcher.test.js.map +0 -1
  164. package/dist/common/middleware/check-pnpm-lifecycle.test.d.ts +0 -2
  165. package/dist/common/middleware/check-pnpm-lifecycle.test.d.ts.map +0 -1
  166. package/dist/common/middleware/check-pnpm-lifecycle.test.js +0 -125
  167. package/dist/common/middleware/check-pnpm-lifecycle.test.js.map +0 -1
  168. package/dist/common/middleware/get-environment-param.test.d.ts +0 -2
  169. package/dist/common/middleware/get-environment-param.test.d.ts.map +0 -1
  170. package/dist/common/middleware/get-environment-param.test.js +0 -57
  171. package/dist/common/middleware/get-environment-param.test.js.map +0 -1
  172. package/dist/common/read-linked-config.test.d.ts +0 -2
  173. package/dist/common/read-linked-config.test.d.ts.map +0 -1
  174. package/dist/common/read-linked-config.test.js +0 -363
  175. package/dist/common/read-linked-config.test.js.map +0 -1
  176. package/dist/common/terminal.test.d.ts +0 -2
  177. package/dist/common/terminal.test.d.ts.map +0 -1
  178. package/dist/common/terminal.test.js +0 -101
  179. package/dist/common/terminal.test.js.map +0 -1
  180. package/dist/common/utils/build-environment-prompt-choices.test.d.ts +0 -2
  181. package/dist/common/utils/build-environment-prompt-choices.test.d.ts.map +0 -1
  182. package/dist/common/utils/build-environment-prompt-choices.test.js +0 -97
  183. package/dist/common/utils/build-environment-prompt-choices.test.js.map +0 -1
  184. package/dist/common/utils/format-environment-type.test.d.ts +0 -2
  185. package/dist/common/utils/format-environment-type.test.d.ts.map +0 -1
  186. package/dist/common/utils/format-environment-type.test.js +0 -32
  187. package/dist/common/utils/format-environment-type.test.js.map +0 -1
  188. package/dist/common/utils/pnpm-lifecycle.test.d.ts +0 -2
  189. package/dist/common/utils/pnpm-lifecycle.test.d.ts.map +0 -1
  190. package/dist/common/utils/pnpm-lifecycle.test.js +0 -196
  191. package/dist/common/utils/pnpm-lifecycle.test.js.map +0 -1
  192. package/dist/common/utils/pretty-print-environment-prompt.test.d.ts +0 -2
  193. package/dist/common/utils/pretty-print-environment-prompt.test.d.ts.map +0 -1
  194. package/dist/common/utils/pretty-print-environment-prompt.test.js +0 -42
  195. package/dist/common/utils/pretty-print-environment-prompt.test.js.map +0 -1
  196. package/dist/common/utils/sort-environments-for-prompt.test.d.ts +0 -2
  197. package/dist/common/utils/sort-environments-for-prompt.test.d.ts.map +0 -1
  198. package/dist/common/utils/sort-environments-for-prompt.test.js +0 -82
  199. package/dist/common/utils/sort-environments-for-prompt.test.js.map +0 -1
  200. package/dist/common/utils/stringify-config.test.d.ts +0 -2
  201. package/dist/common/utils/stringify-config.test.d.ts.map +0 -1
  202. package/dist/common/utils/stringify-config.test.js +0 -80
  203. package/dist/common/utils/stringify-config.test.js.map +0 -1
  204. package/dist/common/validators/argument-validators.spec.d.ts +0 -2
  205. package/dist/common/validators/argument-validators.spec.d.ts.map +0 -1
  206. package/dist/common/validators/argument-validators.spec.js +0 -181
  207. package/dist/common/validators/argument-validators.spec.js.map +0 -1
  208. package/dist/deploy/archive.local-registry.test.d.ts +0 -2
  209. package/dist/deploy/archive.local-registry.test.d.ts.map +0 -1
  210. package/dist/deploy/archive.local-registry.test.js +0 -100
  211. package/dist/deploy/archive.local-registry.test.js.map +0 -1
  212. package/dist/deploy/archive.test.d.ts +0 -2
  213. package/dist/deploy/archive.test.d.ts.map +0 -1
  214. package/dist/deploy/archive.test.js +0 -248
  215. package/dist/deploy/archive.test.js.map +0 -1
  216. package/dist/deploy/classify-build-probe.test.d.ts +0 -2
  217. package/dist/deploy/classify-build-probe.test.d.ts.map +0 -1
  218. package/dist/deploy/classify-build-probe.test.js +0 -51
  219. package/dist/deploy/classify-build-probe.test.js.map +0 -1
  220. package/dist/deploy/poll-deployment.test.d.ts +0 -2
  221. package/dist/deploy/poll-deployment.test.d.ts.map +0 -1
  222. package/dist/deploy/poll-deployment.test.js +0 -158
  223. package/dist/deploy/poll-deployment.test.js.map +0 -1
  224. package/dist/dev/zuplo-local-gitignore.test.d.ts +0 -2
  225. package/dist/dev/zuplo-local-gitignore.test.d.ts.map +0 -1
  226. package/dist/dev/zuplo-local-gitignore.test.js +0 -58
  227. package/dist/dev/zuplo-local-gitignore.test.js.map +0 -1
  228. package/dist/editor/e2e/editor.spec.d.ts +0 -2
  229. package/dist/editor/e2e/editor.spec.d.ts.map +0 -1
  230. package/dist/editor/e2e/editor.spec.js +0 -44
  231. package/dist/editor/e2e/editor.spec.js.map +0 -1
  232. package/dist/link/project-type.test.d.ts +0 -2
  233. package/dist/link/project-type.test.d.ts.map +0 -1
  234. package/dist/link/project-type.test.js +0 -225
  235. package/dist/link/project-type.test.js.map +0 -1
  236. package/dist/lint/resolve-binary.test.d.ts +0 -2
  237. package/dist/lint/resolve-binary.test.d.ts.map +0 -1
  238. package/dist/lint/resolve-binary.test.js +0 -155
  239. package/dist/lint/resolve-binary.test.js.map +0 -1
  240. package/dist/open-api/convert/handler.spec.d.ts +0 -2
  241. package/dist/open-api/convert/handler.spec.d.ts.map +0 -1
  242. package/dist/open-api/convert/handler.spec.js +0 -301
  243. package/dist/open-api/convert/handler.spec.js.map +0 -1
  244. package/dist/open-api/merge/handler.spec.d.ts +0 -2
  245. package/dist/open-api/merge/handler.spec.d.ts.map +0 -1
  246. package/dist/open-api/merge/handler.spec.js +0 -673
  247. package/dist/open-api/merge/handler.spec.js.map +0 -1
  248. package/dist/open-api/overlay/handler.spec.d.ts +0 -2
  249. package/dist/open-api/overlay/handler.spec.d.ts.map +0 -1
  250. package/dist/open-api/overlay/handler.spec.js +0 -346
  251. package/dist/open-api/overlay/handler.spec.js.map +0 -1
  252. package/dist/source/ai-gateway/files.test.d.ts +0 -2
  253. package/dist/source/ai-gateway/files.test.d.ts.map +0 -1
  254. package/dist/source/ai-gateway/files.test.js +0 -135
  255. package/dist/source/ai-gateway/files.test.js.map +0 -1
  256. package/dist/source/ai-gateway/handler.test.d.ts +0 -2
  257. package/dist/source/ai-gateway/handler.test.d.ts.map +0 -1
  258. package/dist/source/ai-gateway/handler.test.js +0 -113
  259. package/dist/source/ai-gateway/handler.test.js.map +0 -1
  260. package/dist/source/ai-gateway/package.test.d.ts +0 -2
  261. package/dist/source/ai-gateway/package.test.d.ts.map +0 -1
  262. package/dist/source/ai-gateway/package.test.js +0 -30
  263. package/dist/source/ai-gateway/package.test.js.map +0 -1
  264. package/dist/source/ai-gateway/planner.test.d.ts +0 -2
  265. package/dist/source/ai-gateway/planner.test.d.ts.map +0 -1
  266. package/dist/source/ai-gateway/planner.test.js +0 -330
  267. package/dist/source/ai-gateway/planner.test.js.map +0 -1
  268. package/dist/source/ai-gateway/release.test.d.ts +0 -2
  269. package/dist/source/ai-gateway/release.test.d.ts.map +0 -1
  270. package/dist/source/ai-gateway/release.test.js +0 -62
  271. package/dist/source/ai-gateway/release.test.js.map +0 -1
  272. package/dist/test/invoke-test.test.d.ts +0 -2
  273. package/dist/test/invoke-test.test.d.ts.map +0 -1
  274. package/dist/test/invoke-test.test.js +0 -150
  275. package/dist/test/invoke-test.test.js.map +0 -1
  276. package/dist/test/test-files.test.d.ts +0 -2
  277. package/dist/test/test-files.test.d.ts.map +0 -1
  278. package/dist/test/test-files.test.js +0 -57
  279. package/dist/test/test-files.test.js.map +0 -1
  280. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.d.ts +0 -2
  281. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.d.ts.map +0 -1
  282. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.js +0 -289
  283. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.js.map +0 -1
  284. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.d.ts +0 -2
  285. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.d.ts.map +0 -1
  286. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.js +0 -181
  287. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.js.map +0 -1
  288. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.d.ts +0 -2
  289. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.d.ts.map +0 -1
  290. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.js +0 -399
  291. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.js.map +0 -1
  292. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.d.ts +0 -2
  293. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.d.ts.map +0 -1
  294. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.js +0 -779
  295. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.js.map +0 -1
  296. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.d.ts +0 -2
  297. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.d.ts.map +0 -1
  298. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.js +0 -269
  299. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.js.map +0 -1
  300. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.d.ts +0 -2
  301. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.d.ts.map +0 -1
  302. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.js +0 -93
  303. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.js.map +0 -1
  304. package/node_modules/@zuplo/runtime/out/esm/chunk-6YPRGG62.js.map +0 -1
  305. package/node_modules/@zuplo/runtime/out/esm/chunk-PBDT4FDO.js +0 -37
  306. package/node_modules/@zuplo/runtime/out/esm/chunk-PBDT4FDO.js.map +0 -1
  307. /package/node_modules/@zuplo/runtime/out/esm/{chunk-YJ2BHVUH.js.map → chunk-CDEAY3VY.js.map} +0 -0
  308. /package/node_modules/@zuplo/runtime/out/esm/{chunk-PBDT4FDO.js.LEGAL.txt → chunk-LVSZ3WTO.js.LEGAL.txt} +0 -0
  309. /package/node_modules/@zuplo/runtime/out/esm/{chunk-VTO3F6DK.js.map → chunk-NUVXDVLJ.js.map} +0 -0
  310. /package/node_modules/@zuplo/runtime/out/esm/{chunk-6YPRGG62.js.LEGAL.txt → chunk-RHU3Z7DA.js.LEGAL.txt} +0 -0
@@ -1,293 +0,0 @@
1
- import nock from "nock";
2
- import yargs from "yargs/yargs";
3
- import infoCommand from "../../cmds/info.js";
4
- import { cleanupTest, setupAuthenticatedNock, setupTestEnvironment, TEST_ACCOUNT_NAME, TEST_API_BASE, TEST_AUTH_TOKEN, TEST_PROJECT_NAME, } from "./test-utils.js";
5
- const TEST_ACCOUNT = TEST_ACCOUNT_NAME;
6
- const TEST_PROJECT = TEST_PROJECT_NAME;
7
- jest.mock("../../common/read-linked-config.js", () => ({
8
- __esModule: true,
9
- readLinkedConfig: jest.fn().mockResolvedValue({}),
10
- confirmLinkedValue: jest.fn().mockResolvedValue(true),
11
- USE_LINKED_DETAILS: "useLinkedDetails",
12
- ignoreLinkedDetails: jest.fn(),
13
- }));
14
- const { readLinkedConfig } = jest.requireMock("../../common/read-linked-config.js");
15
- async function executeInfoCommand(args) {
16
- const yargsInstance = yargs([])
17
- .command(infoCommand)
18
- .help(false)
19
- .version(false)
20
- .exitProcess(false);
21
- const commandArgs = ["info"];
22
- if (args["api-key"]) {
23
- commandArgs.push("--api-key", args["api-key"]);
24
- }
25
- return await yargsInstance.parse(commandArgs);
26
- }
27
- const mockPrintResult = jest.mocked(require("../../common/output.js").printResultToConsoleAndExitGracefully);
28
- const mockPrintCriticalFailure = jest.mocked(require("../../common/output.js").printCriticalFailureToConsoleAndExit);
29
- const mockPrintWarning = jest.mocked(require("../../common/output.js").printWarningToConsole);
30
- describe("Info Command Integration Tests", () => {
31
- beforeEach(() => {
32
- setupTestEnvironment();
33
- nock.cleanAll();
34
- nock.disableNetConnect();
35
- jest.clearAllMocks();
36
- readLinkedConfig.mockResolvedValue({});
37
- });
38
- afterEach(() => {
39
- cleanupTest();
40
- });
41
- it("should show 'no project linked' when .env.zuplo is missing", async () => {
42
- await executeInfoCommand({ "api-key": TEST_AUTH_TOKEN });
43
- expect(mockPrintResult).toHaveBeenCalledTimes(1);
44
- const output = mockPrintResult.mock.calls[0][0];
45
- expect(output).toContain("No project linked");
46
- expect(output).toContain("zuplo link");
47
- });
48
- it("should show 'no project linked' when unauthenticated and not linked", async () => {
49
- await executeInfoCommand({});
50
- expect(mockPrintResult).toHaveBeenCalledTimes(1);
51
- const output = mockPrintResult.mock.calls[0][0];
52
- expect(output).toContain("No project linked");
53
- expect(output).toContain("zuplo link");
54
- expect(mockPrintCriticalFailure).not.toHaveBeenCalled();
55
- });
56
- it("should show full project info when linked", async () => {
57
- readLinkedConfig.mockResolvedValue({
58
- accountName: TEST_ACCOUNT,
59
- projectName: TEST_PROJECT,
60
- environmentType: "development",
61
- });
62
- setupAuthenticatedNock(nock(TEST_API_BASE))
63
- .get(`/v1/projects`)
64
- .query({ accountName: TEST_ACCOUNT })
65
- .reply(200, {
66
- data: [
67
- {
68
- name: TEST_PROJECT,
69
- sourceRepoUrl: "https://github.com/josh-twist/josh-poc",
70
- sourceControlProvider: "GITHUB",
71
- },
72
- ],
73
- });
74
- await executeInfoCommand({ "api-key": TEST_AUTH_TOKEN });
75
- expect(mockPrintResult).toHaveBeenCalledTimes(1);
76
- const output = mockPrintResult.mock.calls[0][0];
77
- expect(output).toContain(`Project: ${TEST_PROJECT}`);
78
- expect(output).toContain(`Account: ${TEST_ACCOUNT}`);
79
- expect(output).toContain(`Portal: https://portal.zuplo.com/${TEST_ACCOUNT}/${TEST_PROJECT}`);
80
- expect(output).toContain("Environment Type: working-copy");
81
- expect(output).not.toContain("Environment Type: development");
82
- expect(output).toContain("Source Control: https://github.com/josh-twist/josh-poc");
83
- });
84
- it.each(["development", "working_copy", "working-copy"])("should display 'working-copy' label for ZUPLO_ENVIRONMENT_TYPE=%s", async (envType) => {
85
- readLinkedConfig.mockResolvedValue({
86
- accountName: TEST_ACCOUNT,
87
- projectName: TEST_PROJECT,
88
- environmentType: envType,
89
- });
90
- setupAuthenticatedNock(nock(TEST_API_BASE))
91
- .get(`/v1/projects`)
92
- .query({ accountName: TEST_ACCOUNT })
93
- .reply(200, {
94
- data: [
95
- {
96
- name: TEST_PROJECT,
97
- sourceRepoUrl: null,
98
- sourceControlProvider: "NONE",
99
- },
100
- ],
101
- });
102
- await executeInfoCommand({ "api-key": TEST_AUTH_TOKEN });
103
- expect(mockPrintResult).toHaveBeenCalledTimes(1);
104
- const output = mockPrintResult.mock.calls[0][0];
105
- expect(output).toContain("Environment Type: working-copy");
106
- });
107
- it("should omit environment type when the linked value is whitespace-only", async () => {
108
- readLinkedConfig.mockResolvedValue({
109
- accountName: TEST_ACCOUNT,
110
- projectName: TEST_PROJECT,
111
- environmentType: " ",
112
- });
113
- setupAuthenticatedNock(nock(TEST_API_BASE))
114
- .get(`/v1/projects`)
115
- .query({ accountName: TEST_ACCOUNT })
116
- .reply(200, {
117
- data: [
118
- {
119
- name: TEST_PROJECT,
120
- sourceRepoUrl: null,
121
- sourceControlProvider: "NONE",
122
- },
123
- ],
124
- });
125
- await executeInfoCommand({ "api-key": TEST_AUTH_TOKEN });
126
- expect(mockPrintResult).toHaveBeenCalledTimes(1);
127
- const output = mockPrintResult.mock.calls[0][0];
128
- expect(output).not.toContain("Environment Type:");
129
- });
130
- it("should show source control deep link when no repo is connected", async () => {
131
- readLinkedConfig.mockResolvedValue({
132
- accountName: TEST_ACCOUNT,
133
- projectName: TEST_PROJECT,
134
- environmentType: "production",
135
- });
136
- setupAuthenticatedNock(nock(TEST_API_BASE))
137
- .get(`/v1/projects`)
138
- .query({ accountName: TEST_ACCOUNT })
139
- .reply(200, {
140
- data: [
141
- {
142
- name: TEST_PROJECT,
143
- sourceRepoUrl: null,
144
- sourceControlProvider: "NONE",
145
- },
146
- ],
147
- });
148
- await executeInfoCommand({ "api-key": TEST_AUTH_TOKEN });
149
- expect(mockPrintResult).toHaveBeenCalledTimes(1);
150
- const output = mockPrintResult.mock.calls[0][0];
151
- expect(output).toContain(`Source Control: none, connect at https://portal.zuplo.com/${TEST_ACCOUNT}/${TEST_PROJECT}/settings/source-control-settings`);
152
- });
153
- it("should omit environment type when not in linked config", async () => {
154
- readLinkedConfig.mockResolvedValue({
155
- accountName: TEST_ACCOUNT,
156
- projectName: TEST_PROJECT,
157
- });
158
- setupAuthenticatedNock(nock(TEST_API_BASE))
159
- .get(`/v1/projects`)
160
- .query({ accountName: TEST_ACCOUNT })
161
- .reply(200, {
162
- data: [
163
- {
164
- name: TEST_PROJECT,
165
- sourceRepoUrl: null,
166
- sourceControlProvider: "NONE",
167
- },
168
- ],
169
- });
170
- await executeInfoCommand({ "api-key": TEST_AUTH_TOKEN });
171
- expect(mockPrintResult).toHaveBeenCalledTimes(1);
172
- const output = mockPrintResult.mock.calls[0][0];
173
- expect(output).not.toContain("Environment Type:");
174
- });
175
- it("should exit with error when API returns 401 and --api-key was used", async () => {
176
- readLinkedConfig.mockResolvedValue({
177
- accountName: TEST_ACCOUNT,
178
- projectName: TEST_PROJECT,
179
- environmentType: "development",
180
- });
181
- setupAuthenticatedNock(nock(TEST_API_BASE))
182
- .get(`/v1/projects`)
183
- .query({ accountName: TEST_ACCOUNT })
184
- .reply(401, {
185
- type: "https://httpproblems.com/http-status/401",
186
- title: "Unauthorized",
187
- status: 401,
188
- detail: "Invalid token",
189
- });
190
- await expect(executeInfoCommand({ "api-key": TEST_AUTH_TOKEN })).rejects.toThrow("Process would exit");
191
- expect(mockPrintCriticalFailure).toHaveBeenCalledWith("The provided --api-key was rejected. Check that it is valid and not expired, or run `zuplo login` to authenticate interactively.");
192
- expect(mockPrintResult).not.toHaveBeenCalled();
193
- expect(mockPrintWarning).not.toHaveBeenCalled();
194
- });
195
- it("should exit with error when API returns 401 and saved credentials were used", async () => {
196
- readLinkedConfig.mockResolvedValue({
197
- accountName: TEST_ACCOUNT,
198
- projectName: TEST_PROJECT,
199
- environmentType: "development",
200
- });
201
- setupAuthenticatedNock(nock(TEST_API_BASE))
202
- .get(`/v1/projects`)
203
- .query({ accountName: TEST_ACCOUNT })
204
- .reply(401, {
205
- type: "https://httpproblems.com/http-status/401",
206
- title: "Unauthorized",
207
- status: 401,
208
- detail: "Invalid token",
209
- });
210
- await expect(executeInfoCommand({})).rejects.toThrow("Process would exit");
211
- expect(mockPrintCriticalFailure).toHaveBeenCalledWith("Your saved credentials were rejected. They may be expired — run `zuplo login` to re-authenticate, or pass a valid --api-key.");
212
- expect(mockPrintResult).not.toHaveBeenCalled();
213
- expect(mockPrintWarning).not.toHaveBeenCalled();
214
- });
215
- it("should show local info with warning when API returns a server error", async () => {
216
- readLinkedConfig.mockResolvedValue({
217
- accountName: TEST_ACCOUNT,
218
- projectName: TEST_PROJECT,
219
- environmentType: "development",
220
- });
221
- setupAuthenticatedNock(nock(TEST_API_BASE))
222
- .get(`/v1/projects`)
223
- .query({ accountName: TEST_ACCOUNT })
224
- .reply(500, { error: "Internal Server Error" });
225
- await executeInfoCommand({ "api-key": TEST_AUTH_TOKEN });
226
- expect(mockPrintResult).toHaveBeenCalledTimes(1);
227
- const output = mockPrintResult.mock.calls[0][0];
228
- expect(output).toContain(`Project: ${TEST_PROJECT}`);
229
- expect(output).toContain(`Account: ${TEST_ACCOUNT}`);
230
- expect(output).not.toContain("Source Control:");
231
- expect(mockPrintWarning).toHaveBeenCalledWith("Unable to fetch project details, some information may be missing");
232
- });
233
- it("should exit with error when API returns a non-401 4xx", async () => {
234
- readLinkedConfig.mockResolvedValue({
235
- accountName: TEST_ACCOUNT,
236
- projectName: TEST_PROJECT,
237
- environmentType: "development",
238
- });
239
- setupAuthenticatedNock(nock(TEST_API_BASE))
240
- .get(`/v1/projects`)
241
- .query({ accountName: TEST_ACCOUNT })
242
- .reply(403, { error: "Forbidden" });
243
- await expect(executeInfoCommand({ "api-key": TEST_AUTH_TOKEN })).rejects.toThrow("Process would exit");
244
- expect(mockPrintCriticalFailure).toHaveBeenCalledWith(`The Zuplo API returned 403 Forbidden. Verify the account "${TEST_ACCOUNT}" and your credentials.`);
245
- expect(mockPrintResult).not.toHaveBeenCalled();
246
- expect(mockPrintWarning).not.toHaveBeenCalled();
247
- });
248
- it("should show local info with warning on network error", async () => {
249
- readLinkedConfig.mockResolvedValue({
250
- accountName: TEST_ACCOUNT,
251
- projectName: TEST_PROJECT,
252
- environmentType: "development",
253
- });
254
- setupAuthenticatedNock(nock(TEST_API_BASE))
255
- .get(`/v1/projects`)
256
- .query({ accountName: TEST_ACCOUNT })
257
- .replyWithError("ECONNREFUSED");
258
- await executeInfoCommand({ "api-key": TEST_AUTH_TOKEN });
259
- expect(mockPrintResult).toHaveBeenCalledTimes(1);
260
- const output = mockPrintResult.mock.calls[0][0];
261
- expect(output).toContain(`Project: ${TEST_PROJECT}`);
262
- expect(output).toContain(`Account: ${TEST_ACCOUNT}`);
263
- expect(output).not.toContain("Source Control:");
264
- expect(mockPrintWarning).toHaveBeenCalledWith("Unable to fetch project details, some information may be missing");
265
- });
266
- it("should warn and omit source control when linked project is not in API response", async () => {
267
- readLinkedConfig.mockResolvedValue({
268
- accountName: TEST_ACCOUNT,
269
- projectName: TEST_PROJECT,
270
- environmentType: "working_copy",
271
- });
272
- setupAuthenticatedNock(nock(TEST_API_BASE))
273
- .get(`/v1/projects`)
274
- .query({ accountName: TEST_ACCOUNT })
275
- .reply(200, {
276
- data: [
277
- {
278
- name: "some-other-project",
279
- sourceRepoUrl: "https://github.com/josh-twist/other",
280
- sourceControlProvider: "GITHUB",
281
- },
282
- ],
283
- });
284
- await executeInfoCommand({ "api-key": TEST_AUTH_TOKEN });
285
- expect(mockPrintResult).toHaveBeenCalledTimes(1);
286
- const output = mockPrintResult.mock.calls[0][0];
287
- expect(output).toContain(`Project: ${TEST_PROJECT}`);
288
- expect(output).toContain(`Account: ${TEST_ACCOUNT}`);
289
- expect(output).not.toContain("Source Control:");
290
- expect(mockPrintWarning).toHaveBeenCalledWith(`Project "${TEST_PROJECT}" was not found in account "${TEST_ACCOUNT}". Run \`zuplo link\` to link a project.`);
291
- });
292
- });
293
- //# sourceMappingURL=info.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"info.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/info.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Integration tests for the info command\n */\n/// <reference types=\"jest\" />\nimport nock from \"nock\";\nimport yargs from \"yargs/yargs\";\nimport infoCommand from \"../../cmds/info.js\";\nimport {\n cleanupTest,\n setupAuthenticatedNock,\n setupTestEnvironment,\n TEST_ACCOUNT_NAME,\n TEST_API_BASE,\n TEST_AUTH_TOKEN,\n TEST_PROJECT_NAME,\n} from \"./test-utils.js\";\n\nconst TEST_ACCOUNT = TEST_ACCOUNT_NAME;\nconst TEST_PROJECT = TEST_PROJECT_NAME;\n\njest.mock(\"../../common/read-linked-config.js\", () => ({\n __esModule: true,\n readLinkedConfig: jest.fn().mockResolvedValue({}),\n confirmLinkedValue: jest.fn().mockResolvedValue(true),\n USE_LINKED_DETAILS: \"useLinkedDetails\",\n ignoreLinkedDetails: jest.fn(),\n}));\n\nconst { readLinkedConfig } = jest.requireMock(\n \"../../common/read-linked-config.js\"\n) as { readLinkedConfig: jest.Mock };\n\nasync function executeInfoCommand(args: { \"api-key\"?: string }) {\n const yargsInstance = yargs([])\n .command(infoCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n const commandArgs = [\"info\"];\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n return await yargsInstance.parse(commandArgs);\n}\n\nconst mockPrintResult = jest.mocked(\n require(\"../../common/output.js\").printResultToConsoleAndExitGracefully\n);\nconst mockPrintCriticalFailure = jest.mocked(\n require(\"../../common/output.js\").printCriticalFailureToConsoleAndExit\n);\nconst mockPrintWarning = jest.mocked(\n require(\"../../common/output.js\").printWarningToConsole\n);\n\ndescribe(\"Info Command Integration Tests\", () => {\n beforeEach(() => {\n setupTestEnvironment();\n nock.cleanAll();\n nock.disableNetConnect();\n jest.clearAllMocks();\n readLinkedConfig.mockResolvedValue({});\n });\n\n afterEach(() => {\n cleanupTest();\n });\n\n it(\"should show 'no project linked' when .env.zuplo is missing\", async () => {\n await executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN });\n\n expect(mockPrintResult).toHaveBeenCalledTimes(1);\n const output = mockPrintResult.mock.calls[0][0] as string;\n expect(output).toContain(\"No project linked\");\n expect(output).toContain(\"zuplo link\");\n });\n\n it(\"should show 'no project linked' when unauthenticated and not linked\", async () => {\n await executeInfoCommand({});\n\n expect(mockPrintResult).toHaveBeenCalledTimes(1);\n const output = mockPrintResult.mock.calls[0][0] as string;\n expect(output).toContain(\"No project linked\");\n expect(output).toContain(\"zuplo link\");\n expect(mockPrintCriticalFailure).not.toHaveBeenCalled();\n });\n\n it(\"should show full project info when linked\", async () => {\n // The tenant API emits \"development\" for working-copy environments, which\n // is what gets written into .env.zuplo. The CLI must display this as\n // \"working-copy\".\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n environmentType: \"development\",\n });\n\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .reply(200, {\n data: [\n {\n name: TEST_PROJECT,\n sourceRepoUrl: \"https://github.com/josh-twist/josh-poc\",\n sourceControlProvider: \"GITHUB\",\n },\n ],\n });\n\n await executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN });\n\n expect(mockPrintResult).toHaveBeenCalledTimes(1);\n const output = mockPrintResult.mock.calls[0][0] as string;\n expect(output).toContain(`Project: ${TEST_PROJECT}`);\n expect(output).toContain(`Account: ${TEST_ACCOUNT}`);\n expect(output).toContain(\n `Portal: https://portal.zuplo.com/${TEST_ACCOUNT}/${TEST_PROJECT}`\n );\n expect(output).toContain(\"Environment Type: working-copy\");\n expect(output).not.toContain(\"Environment Type: development\");\n expect(output).toContain(\n \"Source Control: https://github.com/josh-twist/josh-poc\"\n );\n });\n\n it.each([\"development\", \"working_copy\", \"working-copy\"])(\n \"should display 'working-copy' label for ZUPLO_ENVIRONMENT_TYPE=%s\",\n async (envType) => {\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n environmentType: envType,\n });\n\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .reply(200, {\n data: [\n {\n name: TEST_PROJECT,\n sourceRepoUrl: null,\n sourceControlProvider: \"NONE\",\n },\n ],\n });\n\n await executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN });\n\n expect(mockPrintResult).toHaveBeenCalledTimes(1);\n const output = mockPrintResult.mock.calls[0][0] as string;\n expect(output).toContain(\"Environment Type: working-copy\");\n }\n );\n\n it(\"should omit environment type when the linked value is whitespace-only\", async () => {\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n environmentType: \" \",\n });\n\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .reply(200, {\n data: [\n {\n name: TEST_PROJECT,\n sourceRepoUrl: null,\n sourceControlProvider: \"NONE\",\n },\n ],\n });\n\n await executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN });\n\n expect(mockPrintResult).toHaveBeenCalledTimes(1);\n const output = mockPrintResult.mock.calls[0][0] as string;\n expect(output).not.toContain(\"Environment Type:\");\n });\n\n it(\"should show source control deep link when no repo is connected\", async () => {\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n environmentType: \"production\",\n });\n\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .reply(200, {\n data: [\n {\n name: TEST_PROJECT,\n sourceRepoUrl: null,\n sourceControlProvider: \"NONE\",\n },\n ],\n });\n\n await executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN });\n\n expect(mockPrintResult).toHaveBeenCalledTimes(1);\n const output = mockPrintResult.mock.calls[0][0] as string;\n expect(output).toContain(\n `Source Control: none, connect at https://portal.zuplo.com/${TEST_ACCOUNT}/${TEST_PROJECT}/settings/source-control-settings`\n );\n });\n\n it(\"should omit environment type when not in linked config\", async () => {\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n });\n\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .reply(200, {\n data: [\n {\n name: TEST_PROJECT,\n sourceRepoUrl: null,\n sourceControlProvider: \"NONE\",\n },\n ],\n });\n\n await executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN });\n\n expect(mockPrintResult).toHaveBeenCalledTimes(1);\n const output = mockPrintResult.mock.calls[0][0] as string;\n expect(output).not.toContain(\"Environment Type:\");\n });\n\n it(\"should exit with error when API returns 401 and --api-key was used\", async () => {\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n environmentType: \"development\",\n });\n\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .reply(401, {\n type: \"https://httpproblems.com/http-status/401\",\n title: \"Unauthorized\",\n status: 401,\n detail: \"Invalid token\",\n });\n\n await expect(\n executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN })\n ).rejects.toThrow(\"Process would exit\");\n\n expect(mockPrintCriticalFailure).toHaveBeenCalledWith(\n \"The provided --api-key was rejected. Check that it is valid and not expired, or run `zuplo login` to authenticate interactively.\"\n );\n expect(mockPrintResult).not.toHaveBeenCalled();\n expect(mockPrintWarning).not.toHaveBeenCalled();\n });\n\n it(\"should exit with error when API returns 401 and saved credentials were used\", async () => {\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n environmentType: \"development\",\n });\n\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .reply(401, {\n type: \"https://httpproblems.com/http-status/401\",\n title: \"Unauthorized\",\n status: 401,\n detail: \"Invalid token\",\n });\n\n await expect(executeInfoCommand({})).rejects.toThrow(\"Process would exit\");\n\n expect(mockPrintCriticalFailure).toHaveBeenCalledWith(\n \"Your saved credentials were rejected. They may be expired — run `zuplo login` to re-authenticate, or pass a valid --api-key.\"\n );\n expect(mockPrintResult).not.toHaveBeenCalled();\n expect(mockPrintWarning).not.toHaveBeenCalled();\n });\n\n it(\"should show local info with warning when API returns a server error\", async () => {\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n environmentType: \"development\",\n });\n\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .reply(500, { error: \"Internal Server Error\" });\n\n await executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN });\n\n expect(mockPrintResult).toHaveBeenCalledTimes(1);\n const output = mockPrintResult.mock.calls[0][0] as string;\n expect(output).toContain(`Project: ${TEST_PROJECT}`);\n expect(output).toContain(`Account: ${TEST_ACCOUNT}`);\n expect(output).not.toContain(\"Source Control:\");\n expect(mockPrintWarning).toHaveBeenCalledWith(\n \"Unable to fetch project details, some information may be missing\"\n );\n });\n\n it(\"should exit with error when API returns a non-401 4xx\", async () => {\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n environmentType: \"development\",\n });\n\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .reply(403, { error: \"Forbidden\" });\n\n await expect(\n executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN })\n ).rejects.toThrow(\"Process would exit\");\n\n expect(mockPrintCriticalFailure).toHaveBeenCalledWith(\n `The Zuplo API returned 403 Forbidden. Verify the account \"${TEST_ACCOUNT}\" and your credentials.`\n );\n expect(mockPrintResult).not.toHaveBeenCalled();\n expect(mockPrintWarning).not.toHaveBeenCalled();\n });\n\n it(\"should show local info with warning on network error\", async () => {\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n environmentType: \"development\",\n });\n\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .replyWithError(\"ECONNREFUSED\");\n\n await executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN });\n\n expect(mockPrintResult).toHaveBeenCalledTimes(1);\n const output = mockPrintResult.mock.calls[0][0] as string;\n expect(output).toContain(`Project: ${TEST_PROJECT}`);\n expect(output).toContain(`Account: ${TEST_ACCOUNT}`);\n expect(output).not.toContain(\"Source Control:\");\n expect(mockPrintWarning).toHaveBeenCalledWith(\n \"Unable to fetch project details, some information may be missing\"\n );\n });\n\n it(\"should warn and omit source control when linked project is not in API response\", async () => {\n readLinkedConfig.mockResolvedValue({\n accountName: TEST_ACCOUNT,\n projectName: TEST_PROJECT,\n environmentType: \"working_copy\",\n });\n\n // API returns projects but none match the linked project name (stale .env.zuplo)\n setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/projects`)\n .query({ accountName: TEST_ACCOUNT })\n .reply(200, {\n data: [\n {\n name: \"some-other-project\",\n sourceRepoUrl: \"https://github.com/josh-twist/other\",\n sourceControlProvider: \"GITHUB\",\n },\n ],\n });\n\n await executeInfoCommand({ \"api-key\": TEST_AUTH_TOKEN });\n\n expect(mockPrintResult).toHaveBeenCalledTimes(1);\n const output = mockPrintResult.mock.calls[0][0] as string;\n expect(output).toContain(`Project: ${TEST_PROJECT}`);\n expect(output).toContain(`Account: ${TEST_ACCOUNT}`);\n expect(output).not.toContain(\"Source Control:\");\n expect(mockPrintWarning).toHaveBeenCalledWith(\n `Project \"${TEST_PROJECT}\" was not found in account \"${TEST_ACCOUNT}\". Run \\`zuplo link\\` to link a project.`\n );\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=jest-mocks-setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jest-mocks-setup.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/jest-mocks-setup.ts"],"names":[],"mappings":""}
@@ -1,104 +0,0 @@
1
- const TEST_AUTH_TOKEN = "test-auth-token-123";
2
- jest.mock("../../common/output.js", () => ({
3
- __esModule: true,
4
- default: jest.fn((argv) => argv),
5
- printResultToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),
6
- printTableToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),
7
- printJsonToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),
8
- printCancellationToConsoleAndExitGracefully: jest
9
- .fn()
10
- .mockResolvedValue(undefined),
11
- printResultToConsole: jest.fn().mockResolvedValue(undefined),
12
- printJsonToConsole: jest.fn().mockResolvedValue(undefined),
13
- printDiagnosticsToConsole: jest.fn(),
14
- printWarningToConsole: jest.fn(),
15
- printSpinnerToConsole: jest.fn().mockReturnValue({
16
- stop: jest.fn(),
17
- succeed: jest.fn(),
18
- fail: jest.fn(),
19
- suffixText: "",
20
- }),
21
- printCriticalFailureToConsole: jest.fn(),
22
- printCriticalFailureToConsoleAndExit: jest.fn().mockImplementation(() => {
23
- throw new Error("Process would exit");
24
- }),
25
- textOrJson: jest.fn((text) => {
26
- try {
27
- return JSON.parse(text);
28
- }
29
- catch {
30
- return text;
31
- }
32
- }),
33
- }));
34
- jest.mock("../../common/analytics/lib.js", () => ({
35
- captureEvent: jest.fn().mockResolvedValue(undefined),
36
- }));
37
- jest.mock("../../common/middleware/authentication.js", () => ({
38
- authenticate: jest.fn((argv) => {
39
- argv.authToken = TEST_AUTH_TOKEN;
40
- return argv;
41
- }),
42
- authenticateNoPrompt: jest.fn((argv) => {
43
- argv.authToken = TEST_AUTH_TOKEN;
44
- return argv;
45
- }),
46
- }));
47
- jest.mock("@inquirer/prompts", () => {
48
- class MockSeparator {
49
- type = "separator";
50
- separator;
51
- constructor(separator = "──────────────") {
52
- this.separator = separator;
53
- }
54
- static isSeparator(item) {
55
- return (item != null &&
56
- typeof item === "object" &&
57
- item.type === "separator");
58
- }
59
- }
60
- return {
61
- Separator: MockSeparator,
62
- select: jest.fn().mockImplementation(({ choices }) => {
63
- if (Array.isArray(choices) && choices.length > 0) {
64
- const firstReal = choices.find((c) => !MockSeparator.isSeparator(c) &&
65
- c.value !== null) ?? choices[0];
66
- return Promise.resolve(firstReal.value);
67
- }
68
- return Promise.resolve("test-default");
69
- }),
70
- input: jest.fn().mockResolvedValue("test-new-project"),
71
- };
72
- });
73
- jest.mock("../../common/middleware/user-configuration.js", () => ({
74
- configure: jest.fn((argv) => argv),
75
- }));
76
- jest.mock("../../common/middleware/user-identification.js", () => ({
77
- identify: jest.fn((argv) => argv),
78
- }));
79
- jest.mock("../../common/middleware/check-pnpm-lifecycle.js", () => ({
80
- checkPnpmLifecycle: jest.fn((argv) => argv),
81
- }));
82
- jest.mock("../../common/validators/lib.js", () => ({
83
- YargsChecker: jest.fn().mockImplementation(() => ({
84
- check: jest.fn().mockResolvedValue(true),
85
- })),
86
- }));
87
- jest.mock("../../common/handler.js", () => ({
88
- showHelpOnNoSubcommand: jest.fn((configure) => ({
89
- builder: (yargs) => configure(yargs),
90
- handler: jest.fn(),
91
- })),
92
- }));
93
- jest.mock("../../login/tokens.js", () => ({
94
- getAuthToken: jest.fn().mockResolvedValue(TEST_AUTH_TOKEN),
95
- refreshAccessToken: jest.fn().mockResolvedValue({
96
- access_token: TEST_AUTH_TOKEN,
97
- id_token: "mock-id-token",
98
- expires_in: 3600,
99
- token_type: "Bearer",
100
- scope: "openid profile email",
101
- }),
102
- }));
103
- export {};
104
- //# sourceMappingURL=jest-mocks-setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jest-mocks-setup.js","sourceRoot":"","sources":["../../../src/__tests__/integration/jest-mocks-setup.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Jest mocks setup - loaded before all test modules\n * This file contains all the Jest mocks that need to be applied before any modules are imported\n */\nimport type { Ora } from \"ora\";\n\nconst TEST_AUTH_TOKEN = \"test-auth-token-123\";\n\n// Mock all output functions to prevent actual console output and process.exit calls\njest.mock(\"../../common/output.js\", () => ({\n __esModule: true,\n default: jest.fn((argv: unknown) => argv), // setBlocking middleware function\n printResultToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),\n printTableToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),\n printJsonToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),\n printCancellationToConsoleAndExitGracefully: jest\n .fn()\n .mockResolvedValue(undefined),\n printResultToConsole: jest.fn().mockResolvedValue(undefined),\n printJsonToConsole: jest.fn().mockResolvedValue(undefined),\n printDiagnosticsToConsole: jest.fn(),\n printWarningToConsole: jest.fn(),\n printSpinnerToConsole: jest.fn().mockReturnValue({\n stop: jest.fn(),\n succeed: jest.fn(),\n fail: jest.fn(),\n suffixText: \"\",\n } as unknown as Ora),\n printCriticalFailureToConsole: jest.fn(),\n printCriticalFailureToConsoleAndExit: jest.fn().mockImplementation(() => {\n throw new Error(\"Process would exit\");\n }),\n textOrJson: jest.fn((text: string) => {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }),\n}));\n\n// Mock analytics\njest.mock(\"../../common/analytics/lib.js\", () => ({\n captureEvent: jest.fn().mockResolvedValue(undefined),\n}));\n\n// Mock authentication middleware to add authToken\njest.mock(\"../../common/middleware/authentication.js\", () => ({\n authenticate: jest.fn((argv: Record<string, unknown>) => {\n argv.authToken = TEST_AUTH_TOKEN;\n return argv;\n }),\n authenticateNoPrompt: jest.fn((argv: Record<string, unknown>) => {\n argv.authToken = TEST_AUTH_TOKEN;\n return argv;\n }),\n}));\n\n// Mock inquirer prompts to return predictable values for tests\njest.mock(\"@inquirer/prompts\", () => {\n class MockSeparator {\n type = \"separator\";\n separator: string;\n constructor(separator = \"──────────────\") {\n this.separator = separator;\n }\n static isSeparator(item: unknown): boolean {\n return (\n item != null &&\n typeof item === \"object\" &&\n (item as { type?: unknown }).type === \"separator\"\n );\n }\n }\n return {\n Separator: MockSeparator,\n select: jest.fn().mockImplementation(({ choices }) => {\n if (Array.isArray(choices) && choices.length > 0) {\n // Skip separators (no `value`) and null-sentinel choices, then return\n // the first real choice's value.\n const firstReal =\n choices.find(\n (c) =>\n !MockSeparator.isSeparator(c) &&\n (c as { value?: unknown }).value !== null\n ) ?? choices[0];\n return Promise.resolve((firstReal as { value: unknown }).value);\n }\n return Promise.resolve(\"test-default\");\n }),\n input: jest.fn().mockResolvedValue(\"test-new-project\"),\n };\n});\n\n// Mock other middleware to pass through arguments\njest.mock(\"../../common/middleware/user-configuration.js\", () => ({\n configure: jest.fn((argv: unknown) => argv),\n}));\n\njest.mock(\"../../common/middleware/user-identification.js\", () => ({\n identify: jest.fn((argv: unknown) => argv),\n}));\n\njest.mock(\"../../common/middleware/check-pnpm-lifecycle.js\", () => ({\n checkPnpmLifecycle: jest.fn((argv: unknown) => argv),\n}));\n\n// Mock validators to pass through\njest.mock(\"../../common/validators/lib.js\", () => ({\n YargsChecker: jest.fn().mockImplementation(() => ({\n check: jest.fn().mockResolvedValue(true),\n })),\n}));\n\n// Mock showHelpOnNoSubcommand helper for commands with subcommands\njest.mock(\"../../common/handler.js\", () => ({\n showHelpOnNoSubcommand: jest.fn((configure) => ({\n builder: (yargs: unknown) => (configure as (y: unknown) => unknown)(yargs),\n handler: jest.fn(),\n })),\n}));\n\n// Mock token functions to prevent file system and HTTP calls\njest.mock(\"../../login/tokens.js\", () => ({\n getAuthToken: jest.fn().mockResolvedValue(TEST_AUTH_TOKEN),\n refreshAccessToken: jest.fn().mockResolvedValue({\n access_token: TEST_AUTH_TOKEN,\n id_token: \"mock-id-token\",\n expires_in: 3600,\n token_type: \"Bearer\",\n scope: \"openid profile email\",\n }),\n}));\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=jest-setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jest-setup.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/jest-setup.ts"],"names":[],"mappings":""}
@@ -1,12 +0,0 @@
1
- beforeEach(() => {
2
- const envKeys = Object.keys(process.env).filter((key) => key.startsWith("ZUPLO_"));
3
- envKeys.forEach((key) => {
4
- delete process.env[key];
5
- });
6
- });
7
- afterEach(() => {
8
- jest.clearAllMocks();
9
- jest.restoreAllMocks();
10
- });
11
- export {};
12
- //# sourceMappingURL=jest-setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jest-setup.js","sourceRoot":"","sources":["../../../src/__tests__/integration/jest-setup.ts"],"names":[],"mappings":"AAMA,UAAU,CAAC,GAAG,EAAE;IAGd,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACtD,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CACzB,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IAEb,IAAI,CAAC,aAAa,EAAE,CAAC;IACrB,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Jest setup for integration tests\n */\n/// <reference types=\"jest\" />\n\n// Global test setup\nbeforeEach(() => {\n // Clear all environment variables before each test\n\n const envKeys = Object.keys(process.env).filter((key) =>\n key.startsWith(\"ZUPLO_\")\n );\n envKeys.forEach((key) => {\n delete process.env[key];\n });\n});\n\nafterEach(() => {\n // Clear all mocks after each test\n jest.clearAllMocks();\n jest.restoreAllMocks();\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=link.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"link.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/link.integration.test.ts"],"names":[],"mappings":""}