@sanity/cli 6.0.0-alpha.3 → 6.0.0-alpha.5

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 (376) hide show
  1. package/dist/actions/auth/login/{index.js → login.js} +1 -1
  2. package/dist/actions/auth/login/{index.js.map → login.js.map} +1 -1
  3. package/dist/actions/dev/startStudioDevServer.js +3 -8
  4. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  5. package/dist/actions/dev/types.d.ts +1 -3
  6. package/dist/actions/dev/types.js.map +1 -1
  7. package/dist/actions/documents/validate.d.ts +0 -2
  8. package/dist/actions/documents/validate.js +21 -1
  9. package/dist/actions/documents/validate.js.map +1 -1
  10. package/dist/actions/exec/execScript.js +1 -1
  11. package/dist/actions/exec/execScript.js.map +1 -1
  12. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +1 -1
  13. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +1 -1
  14. package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
  15. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
  16. package/dist/actions/manifest/extractManifest.js +1 -4
  17. package/dist/actions/manifest/extractManifest.js.map +1 -1
  18. package/dist/actions/organizations/getOrganizationChoices.d.ts +6 -0
  19. package/dist/actions/organizations/getOrganizationChoices.js +23 -0
  20. package/dist/actions/organizations/getOrganizationChoices.js.map +1 -0
  21. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +2 -0
  22. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js +9 -0
  23. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js.map +1 -0
  24. package/dist/actions/organizations/hasProjectAttachGrant.d.ts +1 -0
  25. package/dist/actions/organizations/hasProjectAttachGrant.js +24 -0
  26. package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -0
  27. package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
  28. package/dist/actions/schema/deleteSchemaAction.js +12 -17
  29. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  30. package/dist/actions/schema/deploySchemas.d.ts +15 -0
  31. package/dist/actions/schema/deploySchemas.js +98 -0
  32. package/dist/actions/schema/deploySchemas.js.map +1 -0
  33. package/dist/actions/schema/listSchemas.d.ts +12 -0
  34. package/dist/actions/schema/listSchemas.js +119 -0
  35. package/dist/actions/schema/listSchemas.js.map +1 -0
  36. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
  37. package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
  38. package/dist/actions/schema/utils/debug.d.ts +2 -0
  39. package/dist/actions/schema/utils/debug.js +5 -0
  40. package/dist/actions/schema/utils/debug.js.map +1 -0
  41. package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
  42. package/dist/actions/schema/utils/manifestExtractor.js +12 -17
  43. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  44. package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
  45. package/dist/actions/schema/utils/manifestReader.js +6 -12
  46. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  47. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
  48. package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
  49. package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
  50. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
  51. package/dist/actions/schema/utils/schemaStoreValidation.js +40 -127
  52. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
  53. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
  54. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
  55. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
  56. package/dist/actions/users/getMembersForProject.d.ts +1 -3
  57. package/dist/actions/users/getMembersForProject.js +6 -17
  58. package/dist/actions/users/getMembersForProject.js.map +1 -1
  59. package/dist/actions/users/types.d.ts +0 -11
  60. package/dist/actions/users/types.js.map +1 -1
  61. package/dist/commands/__tests__/debug.test.js +113 -220
  62. package/dist/commands/__tests__/debug.test.js.map +1 -1
  63. package/dist/commands/__tests__/deploy.test.js +325 -293
  64. package/dist/commands/__tests__/deploy.test.js.map +1 -1
  65. package/dist/commands/__tests__/dev.test.js +62 -19
  66. package/dist/commands/__tests__/dev.test.js.map +1 -1
  67. package/dist/commands/__tests__/init/init.authentication.test.js +73 -0
  68. package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -0
  69. package/dist/commands/__tests__/init/init.create-new-project.test.js +195 -0
  70. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -0
  71. package/dist/commands/__tests__/init/init.plan.test.js +279 -0
  72. package/dist/commands/__tests__/init/init.plan.test.js.map +1 -0
  73. package/dist/commands/__tests__/init/init.setup.test.js +335 -0
  74. package/dist/commands/__tests__/init/init.setup.test.js.map +1 -0
  75. package/dist/commands/__tests__/install.test.js +46 -22
  76. package/dist/commands/__tests__/install.test.js.map +1 -1
  77. package/dist/commands/__tests__/logout.test.js +8 -5
  78. package/dist/commands/__tests__/logout.test.js.map +1 -1
  79. package/dist/commands/__tests__/manage.test.js +29 -24
  80. package/dist/commands/__tests__/manage.test.js.map +1 -1
  81. package/dist/commands/__tests__/migration.test.js +119 -0
  82. package/dist/commands/__tests__/migration.test.js.map +1 -0
  83. package/dist/commands/__tests__/versions.test.js +22 -14
  84. package/dist/commands/__tests__/versions.test.js.map +1 -1
  85. package/dist/commands/backup/__tests__/disable.test.js +72 -75
  86. package/dist/commands/backup/__tests__/disable.test.js.map +1 -1
  87. package/dist/commands/backup/__tests__/download.test.js +169 -80
  88. package/dist/commands/backup/__tests__/download.test.js.map +1 -1
  89. package/dist/commands/backup/__tests__/enable.test.js +109 -140
  90. package/dist/commands/backup/__tests__/enable.test.js.map +1 -1
  91. package/dist/commands/backup/__tests__/list.test.js +84 -75
  92. package/dist/commands/backup/__tests__/list.test.js.map +1 -1
  93. package/dist/commands/backup/disable.js +5 -11
  94. package/dist/commands/backup/disable.js.map +1 -1
  95. package/dist/commands/backup/enable.js +5 -11
  96. package/dist/commands/backup/enable.js.map +1 -1
  97. package/dist/commands/backup/list.js +7 -8
  98. package/dist/commands/backup/list.js.map +1 -1
  99. package/dist/commands/cors/__tests__/add.test.js +68 -38
  100. package/dist/commands/cors/__tests__/add.test.js.map +1 -1
  101. package/dist/commands/cors/__tests__/delete.test.js +52 -37
  102. package/dist/commands/cors/__tests__/delete.test.js.map +1 -1
  103. package/dist/commands/cors/__tests__/list.test.js +80 -57
  104. package/dist/commands/cors/__tests__/list.test.js.map +1 -1
  105. package/dist/commands/cors/add.js +5 -13
  106. package/dist/commands/cors/add.js.map +1 -1
  107. package/dist/commands/cors/delete.js +7 -15
  108. package/dist/commands/cors/delete.js.map +1 -1
  109. package/dist/commands/cors/list.js +2 -10
  110. package/dist/commands/cors/list.js.map +1 -1
  111. package/dist/commands/dataset/__tests__/copy.test.js +197 -89
  112. package/dist/commands/dataset/__tests__/copy.test.js.map +1 -1
  113. package/dist/commands/dataset/__tests__/create.test.js +147 -117
  114. package/dist/commands/dataset/__tests__/create.test.js.map +1 -1
  115. package/dist/commands/dataset/__tests__/delete.test.js +75 -68
  116. package/dist/commands/dataset/__tests__/delete.test.js.map +1 -1
  117. package/dist/commands/dataset/__tests__/export.test.js +123 -83
  118. package/dist/commands/dataset/__tests__/export.test.js.map +1 -1
  119. package/dist/commands/dataset/__tests__/import.test.js +2 -2
  120. package/dist/commands/dataset/__tests__/import.test.js.map +1 -1
  121. package/dist/commands/dataset/__tests__/list.test.js +107 -65
  122. package/dist/commands/dataset/__tests__/list.test.js.map +1 -1
  123. package/dist/commands/dataset/alias/__tests__/create.test.js +114 -74
  124. package/dist/commands/dataset/alias/__tests__/create.test.js.map +1 -1
  125. package/dist/commands/dataset/alias/__tests__/delete.test.js +40 -29
  126. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +1 -1
  127. package/dist/commands/dataset/alias/__tests__/link.test.js +114 -74
  128. package/dist/commands/dataset/alias/__tests__/link.test.js.map +1 -1
  129. package/dist/commands/dataset/alias/__tests__/unlink.test.js +44 -29
  130. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +1 -1
  131. package/dist/commands/dataset/export.js +4 -4
  132. package/dist/commands/dataset/export.js.map +1 -1
  133. package/dist/commands/dataset/visibility/__tests__/get.test.js +48 -67
  134. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +1 -1
  135. package/dist/commands/dataset/visibility/__tests__/set.test.js +76 -123
  136. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +1 -1
  137. package/dist/commands/dev.js +0 -1
  138. package/dist/commands/dev.js.map +1 -1
  139. package/dist/commands/docs/__tests__/search.test.js +8 -7
  140. package/dist/commands/docs/__tests__/search.test.js.map +1 -1
  141. package/dist/commands/documents/__tests__/create.test.js +328 -265
  142. package/dist/commands/documents/__tests__/create.test.js.map +1 -1
  143. package/dist/commands/documents/__tests__/delete.test.js +119 -87
  144. package/dist/commands/documents/__tests__/delete.test.js.map +1 -1
  145. package/dist/commands/documents/__tests__/get.test.js +68 -95
  146. package/dist/commands/documents/__tests__/get.test.js.map +1 -1
  147. package/dist/commands/documents/__tests__/query.test.js +87 -192
  148. package/dist/commands/documents/__tests__/query.test.js.map +1 -1
  149. package/dist/commands/documents/__tests__/validate.test.js +52 -29
  150. package/dist/commands/documents/__tests__/validate.test.js.map +1 -1
  151. package/dist/commands/documents/create.d.ts +1 -0
  152. package/dist/commands/documents/create.js +10 -9
  153. package/dist/commands/documents/create.js.map +1 -1
  154. package/dist/commands/documents/delete.js +2 -3
  155. package/dist/commands/documents/delete.js.map +1 -1
  156. package/dist/commands/documents/get.js +2 -3
  157. package/dist/commands/documents/get.js.map +1 -1
  158. package/dist/commands/documents/query.js +2 -3
  159. package/dist/commands/documents/query.js.map +1 -1
  160. package/dist/commands/documents/validate.js +0 -20
  161. package/dist/commands/documents/validate.js.map +1 -1
  162. package/dist/commands/graphql/__tests__/list.test.js +57 -45
  163. package/dist/commands/graphql/__tests__/list.test.js.map +1 -1
  164. package/dist/commands/graphql/__tests__/undeploy.test.js +85 -59
  165. package/dist/commands/graphql/__tests__/undeploy.test.js.map +1 -1
  166. package/dist/commands/graphql/list.js +2 -2
  167. package/dist/commands/graphql/list.js.map +1 -1
  168. package/dist/commands/graphql/undeploy.js +4 -9
  169. package/dist/commands/graphql/undeploy.js.map +1 -1
  170. package/dist/commands/hook/__tests__/attempt.test.js +48 -33
  171. package/dist/commands/hook/__tests__/attempt.test.js.map +1 -1
  172. package/dist/commands/hook/__tests__/create.test.js +49 -51
  173. package/dist/commands/hook/__tests__/create.test.js.map +1 -1
  174. package/dist/commands/hook/__tests__/delete.test.js +43 -30
  175. package/dist/commands/hook/__tests__/delete.test.js.map +1 -1
  176. package/dist/commands/hook/__tests__/list.test.js +38 -31
  177. package/dist/commands/hook/__tests__/list.test.js.map +1 -1
  178. package/dist/commands/hook/__tests__/logs.test.js +68 -40
  179. package/dist/commands/hook/__tests__/logs.test.js.map +1 -1
  180. package/dist/commands/hook/create.js +2 -6
  181. package/dist/commands/hook/create.js.map +1 -1
  182. package/dist/commands/hook/delete.js +5 -17
  183. package/dist/commands/hook/delete.js.map +1 -1
  184. package/dist/commands/hook/list.js +2 -8
  185. package/dist/commands/hook/list.js.map +1 -1
  186. package/dist/commands/init.d.ts +4 -0
  187. package/dist/commands/init.js +151 -18
  188. package/dist/commands/init.js.map +1 -1
  189. package/dist/commands/login.js +1 -1
  190. package/dist/commands/login.js.map +1 -1
  191. package/dist/commands/manifest/__tests__/extract.test.js +22 -13
  192. package/dist/commands/manifest/__tests__/extract.test.js.map +1 -1
  193. package/dist/commands/media/__tests__/create-aspect.test.js +41 -28
  194. package/dist/commands/media/__tests__/create-aspect.test.js.map +1 -1
  195. package/dist/commands/media/__tests__/delete-aspect.test.js +44 -35
  196. package/dist/commands/media/__tests__/delete-aspect.test.js.map +1 -1
  197. package/dist/commands/media/__tests__/deploy-aspect.test.js +67 -80
  198. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +1 -1
  199. package/dist/commands/media/__tests__/export.test.js +365 -66
  200. package/dist/commands/media/__tests__/export.test.js.map +1 -1
  201. package/dist/commands/media/__tests__/import.test.js +171 -105
  202. package/dist/commands/media/__tests__/import.test.js.map +1 -1
  203. package/dist/commands/media/export.js +2 -2
  204. package/dist/commands/media/export.js.map +1 -1
  205. package/dist/commands/media/import.js +2 -2
  206. package/dist/commands/media/import.js.map +1 -1
  207. package/dist/commands/projects/__tests__/list.test.js +5 -4
  208. package/dist/commands/projects/__tests__/list.test.js.map +1 -1
  209. package/dist/commands/projects/list.js +2 -6
  210. package/dist/commands/projects/list.js.map +1 -1
  211. package/dist/commands/schema/__tests__/delete.test.js +396 -151
  212. package/dist/commands/schema/__tests__/delete.test.js.map +1 -1
  213. package/dist/commands/schema/__tests__/deploy.test.js +348 -0
  214. package/dist/commands/schema/__tests__/deploy.test.js.map +1 -0
  215. package/dist/commands/schema/__tests__/extract.test.js +19 -11
  216. package/dist/commands/schema/__tests__/extract.test.js.map +1 -1
  217. package/dist/commands/schema/__tests__/list.test.js +399 -0
  218. package/dist/commands/schema/__tests__/list.test.js.map +1 -0
  219. package/dist/commands/schema/__tests__/validate.test.js +27 -10
  220. package/dist/commands/schema/__tests__/validate.test.js.map +1 -1
  221. package/dist/commands/schema/delete.d.ts +1 -1
  222. package/dist/commands/schema/delete.js +20 -23
  223. package/dist/commands/schema/delete.js.map +1 -1
  224. package/dist/commands/schema/deploy.d.ts +16 -0
  225. package/dist/commands/schema/deploy.js +98 -0
  226. package/dist/commands/schema/deploy.js.map +1 -0
  227. package/dist/commands/schema/list.d.ts +15 -0
  228. package/dist/commands/schema/list.js +104 -0
  229. package/dist/commands/schema/list.js.map +1 -0
  230. package/dist/commands/telemetry/__tests__/disable.test.js +7 -5
  231. package/dist/commands/telemetry/__tests__/disable.test.js.map +1 -1
  232. package/dist/commands/telemetry/__tests__/enable.test.js +7 -5
  233. package/dist/commands/telemetry/__tests__/enable.test.js.map +1 -1
  234. package/dist/commands/telemetry/__tests__/status.test.js +7 -5
  235. package/dist/commands/telemetry/__tests__/status.test.js.map +1 -1
  236. package/dist/commands/tokens/__tests__/add.test.js +55 -40
  237. package/dist/commands/tokens/__tests__/add.test.js.map +1 -1
  238. package/dist/commands/tokens/__tests__/delete.test.js +72 -42
  239. package/dist/commands/tokens/__tests__/delete.test.js.map +1 -1
  240. package/dist/commands/tokens/__tests__/list.test.js +87 -60
  241. package/dist/commands/tokens/__tests__/list.test.js.map +1 -1
  242. package/dist/commands/tokens/add.js +3 -5
  243. package/dist/commands/tokens/add.js.map +1 -1
  244. package/dist/commands/users/__tests__/invite.test.js +100 -79
  245. package/dist/commands/users/__tests__/invite.test.js.map +1 -1
  246. package/dist/commands/users/__tests__/list.test.js +186 -180
  247. package/dist/commands/users/__tests__/list.test.js.map +1 -1
  248. package/dist/commands/users/invite.js +6 -17
  249. package/dist/commands/users/invite.js.map +1 -1
  250. package/dist/commands/users/list.js +4 -7
  251. package/dist/commands/users/list.js.map +1 -1
  252. package/dist/config/createCliConfig.d.ts +4 -4
  253. package/dist/services/backup.d.ts +8 -0
  254. package/dist/services/backup.js +19 -0
  255. package/dist/services/backup.js.map +1 -1
  256. package/dist/services/cors.d.ts +23 -0
  257. package/dist/services/cors.js +38 -0
  258. package/dist/services/cors.js.map +1 -0
  259. package/dist/services/graphql.d.ts +7 -0
  260. package/dist/services/graphql.js +11 -0
  261. package/dist/services/graphql.js.map +1 -1
  262. package/dist/services/hooks.d.ts +2 -0
  263. package/dist/services/hooks.js +19 -0
  264. package/dist/services/hooks.js.map +1 -1
  265. package/dist/services/organizations.d.ts +40 -0
  266. package/dist/services/organizations.js +41 -0
  267. package/dist/services/organizations.js.map +1 -0
  268. package/dist/services/projects.d.ts +31 -0
  269. package/dist/services/projects.js +71 -1
  270. package/dist/services/projects.js.map +1 -1
  271. package/dist/services/schemas.d.ts +4 -0
  272. package/dist/services/schemas.js +40 -0
  273. package/dist/services/schemas.js.map +1 -0
  274. package/dist/services/user.d.ts +10 -0
  275. package/dist/services/user.js +24 -0
  276. package/dist/services/user.js.map +1 -0
  277. package/dist/util/__tests__/getCliVersion.test.js +2 -2
  278. package/dist/util/__tests__/getCliVersion.test.js.map +1 -1
  279. package/dist/util/errorMessages.d.ts +1 -0
  280. package/dist/util/errorMessages.js +1 -0
  281. package/dist/util/errorMessages.js.map +1 -1
  282. package/dist/util/getCliVersion.js +1 -1
  283. package/dist/util/getCliVersion.js.map +1 -1
  284. package/dist/util/readPackageJson.d.ts +1 -15
  285. package/dist/util/readPackageJson.js +1 -1
  286. package/dist/util/readPackageJson.js.map +1 -1
  287. package/dist/util/uniqBy.d.ts +1 -0
  288. package/dist/util/uniqBy.js +14 -0
  289. package/dist/util/uniqBy.js.map +1 -0
  290. package/oclif.config.js +6 -1
  291. package/oclif.manifest.json +152 -158
  292. package/package.json +30 -31
  293. package/dist/actions/cors/constants.d.ts +0 -1
  294. package/dist/actions/cors/constants.js +0 -3
  295. package/dist/actions/cors/constants.js.map +0 -1
  296. package/dist/actions/cors/types.d.ts +0 -9
  297. package/dist/actions/cors/types.js +0 -3
  298. package/dist/actions/cors/types.js.map +0 -1
  299. package/dist/actions/migration/getMigrationRootDirectory.d.ts +0 -2
  300. package/dist/actions/migration/getMigrationRootDirectory.js +0 -14
  301. package/dist/actions/migration/getMigrationRootDirectory.js.map +0 -1
  302. package/dist/actions/migration/resolveMigrations.d.ts +0 -19
  303. package/dist/actions/migration/resolveMigrations.js +0 -43
  304. package/dist/actions/migration/resolveMigrations.js.map +0 -1
  305. package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js +0 -65
  306. package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js.map +0 -1
  307. package/dist/actions/migration/templates/__tests__/minimalSimple.test.js +0 -145
  308. package/dist/actions/migration/templates/__tests__/minimalSimple.test.js.map +0 -1
  309. package/dist/actions/migration/templates/__tests__/renameField.test.js +0 -63
  310. package/dist/actions/migration/templates/__tests__/renameField.test.js.map +0 -1
  311. package/dist/actions/migration/templates/__tests__/renameType.test.js +0 -61
  312. package/dist/actions/migration/templates/__tests__/renameType.test.js.map +0 -1
  313. package/dist/actions/migration/templates/__tests__/stringToPTE.test.js +0 -87
  314. package/dist/actions/migration/templates/__tests__/stringToPTE.test.js.map +0 -1
  315. package/dist/actions/migration/templates/index.d.ts +0 -5
  316. package/dist/actions/migration/templates/index.js +0 -7
  317. package/dist/actions/migration/templates/index.js.map +0 -1
  318. package/dist/actions/migration/templates/minimalAdvanced.d.ts +0 -4
  319. package/dist/actions/migration/templates/minimalAdvanced.js +0 -21
  320. package/dist/actions/migration/templates/minimalAdvanced.js.map +0 -1
  321. package/dist/actions/migration/templates/minimalSimple.d.ts +0 -4
  322. package/dist/actions/migration/templates/minimalSimple.js +0 -61
  323. package/dist/actions/migration/templates/minimalSimple.js.map +0 -1
  324. package/dist/actions/migration/templates/renameField.d.ts +0 -4
  325. package/dist/actions/migration/templates/renameField.js +0 -20
  326. package/dist/actions/migration/templates/renameField.js.map +0 -1
  327. package/dist/actions/migration/templates/renameType.d.ts +0 -4
  328. package/dist/actions/migration/templates/renameType.js +0 -19
  329. package/dist/actions/migration/templates/renameType.js.map +0 -1
  330. package/dist/actions/migration/templates/stringToPTE.d.ts +0 -4
  331. package/dist/actions/migration/templates/stringToPTE.js +0 -32
  332. package/dist/actions/migration/templates/stringToPTE.js.map +0 -1
  333. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
  334. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
  335. package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
  336. package/dist/actions/schema/schemaStoreConstants.js +0 -4
  337. package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
  338. package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
  339. package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
  340. package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
  341. package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
  342. package/dist/actions/schema/utils/schemaApiClient.js +0 -17
  343. package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
  344. package/dist/actions/users/apiVersion.d.ts +0 -6
  345. package/dist/actions/users/apiVersion.js +0 -7
  346. package/dist/actions/users/apiVersion.js.map +0 -1
  347. package/dist/commands/__tests__/init.test.js +0 -411
  348. package/dist/commands/__tests__/init.test.js.map +0 -1
  349. package/dist/commands/migration/__tests__/create.test.js +0 -296
  350. package/dist/commands/migration/__tests__/create.test.js.map +0 -1
  351. package/dist/commands/migration/__tests__/list.test.js +0 -166
  352. package/dist/commands/migration/__tests__/list.test.js.map +0 -1
  353. package/dist/commands/migration/__tests__/run.test.js +0 -481
  354. package/dist/commands/migration/__tests__/run.test.js.map +0 -1
  355. package/dist/commands/migration/create.d.ts +0 -17
  356. package/dist/commands/migration/create.js +0 -143
  357. package/dist/commands/migration/create.js.map +0 -1
  358. package/dist/commands/migration/list.d.ts +0 -9
  359. package/dist/commands/migration/list.js +0 -61
  360. package/dist/commands/migration/list.js.map +0 -1
  361. package/dist/commands/migration/run.d.ts +0 -26
  362. package/dist/commands/migration/run.js +0 -271
  363. package/dist/commands/migration/run.js.map +0 -1
  364. package/dist/util/migration/constants.d.ts +0 -3
  365. package/dist/util/migration/constants.js +0 -10
  366. package/dist/util/migration/constants.js.map +0 -1
  367. package/dist/util/migration/ensureApiVersionFormat.d.ts +0 -9
  368. package/dist/util/migration/ensureApiVersionFormat.js +0 -16
  369. package/dist/util/migration/ensureApiVersionFormat.js.map +0 -1
  370. package/dist/util/migration/prettyMutationFormatter.d.ts +0 -8
  371. package/dist/util/migration/prettyMutationFormatter.js +0 -141
  372. package/dist/util/migration/prettyMutationFormatter.js.map +0 -1
  373. package/dist/utils/migration/resolveMigrationScript.d.ts +0 -44
  374. package/dist/utils/migration/resolveMigrationScript.js +0 -74
  375. package/dist/utils/migration/resolveMigrationScript.js.map +0 -1
  376. /package/dist/actions/auth/login/{index.d.ts → login.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/__tests__/deploy.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig} from '@sanity/cli-core'\nimport {confirm, input, select} from '@sanity/cli-core/ux'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\nimport {testExample} from '~test/helpers/testExample.js'\n\nimport {buildApp} from '../../actions/build/buildApp.js'\nimport {buildStudio} from '../../actions/build/buildStudio.js'\nimport {checkDir} from '../../actions/deploy/checkDir.js'\nimport {USER_APPLICATIONS_API_VERSION} from '../../services/userApplications.js'\nimport {dirIsEmptyOrNonExistent} from '../../util/dirIsEmptyOrNonExistent.js'\nimport {readModuleVersion} from '../../util/readModuleVersion.js'\nimport {DeployCommand} from '../deploy.js'\n\nvi.mock('../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn(),\n}))\n\nvi.mock('../../util/readModuleVersion.js', () => ({\n readModuleVersion: vi.fn(),\n}))\n\nvi.mock('../../actions/build/buildApp.js', () => ({\n buildApp: vi.fn(),\n}))\n\nvi.mock('../../actions/build/buildStudio.js', () => ({\n buildStudio: vi.fn(),\n}))\n\nvi.mock('../../actions/deploy/checkDir.js', () => ({\n checkDir: vi.fn(),\n}))\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n confirm: vi.fn(),\n input: vi.fn(),\n select: vi.fn(),\n }\n})\n\nvi.mock('../../util/dirIsEmptyOrNonExistent.js', () => ({\n dirIsEmptyOrNonExistent: vi.fn(() => true),\n}))\n\nvi.mock('tar-fs', () => ({\n pack: vi.fn(() => {\n return {\n pipe: vi.fn(),\n }\n }),\n}))\n\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockSelect = vi.mocked(select)\nconst mockConfirm = vi.mocked(confirm)\nconst mockInput = vi.mocked(input)\nconst mockCheckDir = vi.mocked(checkDir)\nconst mockDirIsEmptyOrNonExistent = vi.mocked(dirIsEmptyOrNonExistent)\nconst mockReadModuleVersion = vi.mocked(readModuleVersion)\nconst mockBuildStudio = vi.mocked(buildStudio)\nconst mockBuildApp = vi.mocked(buildApp)\n\ndescribe('#deploy', () => {\n beforeEach(async () => {\n // Set up default mocks\n mockReadModuleVersion.mockImplementation(async (sourceDir, moduleName) => {\n if (moduleName === 'sanity') return '3.0.0' // for studio deployments\n if (moduleName === '@sanity/sdk-react') return '1.0.0' // for app deployments\n return '1.0.0'\n })\n mockCheckDir.mockResolvedValue()\n })\n\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('help text is correct', async () => {\n const {stdout} = await runCommand('deploy --help')\n expect(stdout).toMatchInlineSnapshot(`\n \"Builds and deploys Sanity Studio or application to Sanity hosting\n\n USAGE\n $ sanity deploy [SOURCEDIR] [--auto-updates] [--build] [--minify]\n [--schema-required] [--source-maps] [--verbose] [-y]\n\n ARGUMENTS\n [SOURCEDIR] Source directory\n\n FLAGS\n -y, --yes Unattended mode, answers \"yes\" to any \"yes/no\" prompt\n and otherwise uses defaults\n --[no-]auto-updates Automatically update the studio to the latest version\n --[no-]build Don't build the studio prior to deploy, instead\n deploying the version currently in \\`dist/\\`\n --[no-]minify Skip minifying built JavaScript (speeds up build,\n increases size of bundle)\n --schema-required Fail-fast deployment if schema store fails\n --source-maps Enable source maps for built bundles (increases size\n of bundle)\n --verbose Enable verbose logging\n\n DESCRIPTION\n Builds and deploys Sanity Studio or application to Sanity hosting\n\n EXAMPLES\n Build the studio\n\n $ sanity deploy\n\n Deploys non-minified build with source maps\n\n $ sanity deploy --no-minify --source-maps\n\n Fail fast on schema store fails - for when other services rely on the stored\n schema\n\n $ sanity deploy --schema-required\n\n \"\n `)\n })\n test('shows an error for invalid flags', async () => {\n const {error} = await testCommand(DeployCommand, ['--invalid'])\n\n expect(error?.message).toContain('Nonexistent flag: --invalid')\n })\n\n test(\"should prompt to confirm deleting source directory if it's not empty\", async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n mockConfirm.mockResolvedValue(true)\n mockDirIsEmptyOrNonExistent.mockResolvedValue(false)\n\n const appId = 'app-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId: 'org-id',\n },\n deployment: {\n appId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${appId}`,\n }).reply(200, {\n appHost: 'existing-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: appId,\n organizationId: 'org-id',\n projectId: null,\n title: 'Existing App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${appId}/deployments`,\n }).reply(200, {\n id: 'deployment-id',\n })\n\n const {error} = await testCommand(DeployCommand, ['build'], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(mockConfirm).toHaveBeenCalledWith({\n default: false,\n message: '\"./build\" is not empty, do you want to proceed?',\n })\n })\n\n test(\"should cancel the deployment if the user doesn't want to proceed\", async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n mockConfirm.mockResolvedValue(false)\n\n const appId = 'app-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId: 'org-id',\n },\n deployment: {\n appId,\n },\n })\n\n const {error} = await testCommand(DeployCommand, ['build'], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Cancelled.')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n describe('app', () => {\n test('should re-deploy app if it already exists', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const appId = 'app-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId: 'org-id',\n },\n deployment: {\n appId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${appId}`,\n }).reply(200, {\n appHost: 'existing-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: appId,\n organizationId: 'org-id',\n projectId: null,\n title: 'Existing App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${appId}/deployments`,\n }).reply(200, {\n id: 'deployment-id',\n })\n\n const {error, stderr, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n\n expect(stderr).toContain('Checking application info')\n expect(stderr).toContain('Verifying local content')\n expect(stderr).toContain('Deploying...')\n\n expect(stdout).toContain('Success! Application deployed')\n })\n\n test('should handle missing @sanity/sdk-react version', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const appId = 'app-id'\n const organizationId = 'org-id'\n\n mockReadModuleVersion.mockResolvedValue(null)\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n deployment: {\n appId,\n },\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Failed to find installed @sanity/sdk-react version')\n })\n\n test('should create new user application if none exists', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const organizationId = 'org-id'\n const newAppId = 'new-app-id'\n const deploymentId = 'deployment-id'\n\n mockInput.mockResolvedValue('Test App')\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, {\n appHost: 'generated-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: newAppId,\n organizationId,\n projectId: null,\n title: 'Test App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${newAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Application deployed')\n expect(stdout).toContain(\n `Add the deployment.appId to your sanity.cli.js or sanity.cli.ts file:`,\n )\n expect(stdout).toContain(`deployment: {\n appId: '${newAppId}',`)\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Enter a title for your application:',\n validate: expect.any(Function),\n })\n })\n\n test('should skip build when --no-build flag is used', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId = 'existing-app-id'\n const organizationId = 'org-id'\n const deploymentId = 'deployment-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n deployment: {\n appId: existingAppId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}`,\n }).reply(200, {\n appHost: 'existing-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId,\n organizationId,\n projectId: null,\n title: 'Existing App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Application deployed')\n expect(mockBuildApp).not.toHaveBeenCalled()\n })\n\n test('should handle directory check errors', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId = 'existing-app-id'\n const organizationId = 'org-id'\n\n mockCheckDir.mockRejectedValue(new Error('Directory check failed'))\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n deployment: {\n appId: existingAppId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}`,\n }).reply(200, {\n appHost: 'existing-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId,\n organizationId,\n projectId: null,\n title: 'Existing App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error checking directory')\n })\n\n test('should error when fetching user applications if user doesn’t have org access', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const appId = 'some-app-id'\n const organizationId = 'org-without-access'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n deployment: {\n appId,\n },\n })\n\n // Simulate API returning 403 Forbidden for the given org\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${appId}`,\n }).reply(403, {\n error: 'Forbidden',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain(\n `You don’t have permission to view applications for the configured organization ID (\"${organizationId}\")`,\n )\n })\n\n test('should handle user-applications endpoint errors', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId = 'existing-app-id'\n const organizationId = 'org-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n deployment: {\n appId: existingAppId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}`,\n }).reply(500, {\n error: 'Internal server error',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error deploying application')\n })\n\n test('should handle deployment API errors', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId = 'existing-app-id'\n const organizationId = 'org-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n deployment: {\n appId: existingAppId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}`,\n }).reply(200, {\n appHost: 'existing-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId,\n organizationId,\n projectId: null,\n title: 'Existing App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}/deployments`,\n }).reply(500, {\n error: 'Internal server error',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error deploying application')\n })\n\n test('should show an error if deployment.appId is configured but the application does not exist', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const nonExistentAppId = 'non-existent-app-id'\n const organizationId = 'org-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n deployment: {\n appId: nonExistentAppId,\n },\n })\n\n // Simulate API returning no user application for the given app.id\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${nonExistentAppId}`,\n }).reply(404, {\n error: 'Not found',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain(\n 'The `appId` provided in your configuration’s `deployment` object cannot be found in your organization',\n )\n })\n\n test('should show an error if deployment.appId and app.id (deprecated) are both in use', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const appId = 'app-id'\n const organizationId = 'org-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n id: appId,\n organizationId,\n },\n deployment: {\n appId: appId,\n },\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain(\n 'Found both app.id (deprecated) and deployment.appId in your application configuration.\\n\\nPlease remove app.id from your sanity.cli.js or sanity.cli.ts file.',\n )\n })\n\n test('should show a warning if app.id (deprecated) is used', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const appId = 'app-id'\n const organizationId = 'org-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n id: appId,\n organizationId,\n },\n })\n\n const {stderr} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(stderr).toContain('The `app.id` config has moved to `deployment.appId`.')\n })\n\n test('should handle app creation with retry when host is taken', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const organizationId = 'org-id'\n const newAppId = 'new-app-id'\n const deploymentId = 'deployment-id'\n\n mockInput.mockResolvedValue('Test App')\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n })\n .once()\n .reply(409, {\n message: 'App host already taken',\n statusCode: 409,\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n })\n .once()\n .reply(200, {\n appHost: 'generated-host-2',\n createdAt: '2024-01-01T00:00:00Z',\n id: newAppId,\n organizationId,\n projectId: null,\n title: 'Test App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${newAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Application deployed')\n })\n\n test('should handle app creation failure with non-retryable error', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const organizationId = 'org-id'\n\n mockInput.mockResolvedValue('Test App')\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(500, {\n message: 'Internal server error',\n statusCode: 500,\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error deploying application')\n })\n\n test('should handle findUserApplicationForApp API errors', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId = 'existing-app-id'\n const organizationId = 'org-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n deployment: {\n appId: existingAppId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}`,\n }).reply(500, {\n error: 'Internal server error',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error deploying application')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should test input validation for app title', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const organizationId = 'org-id'\n const newAppId = 'new-app-id'\n const deploymentId = 'deployment-id'\n\n mockInput.mockResolvedValue('Valid App Title')\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, {\n appHost: 'generated-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: newAppId,\n organizationId,\n projectId: null,\n title: 'Valid App Title',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${newAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Enter a title for your application:',\n validate: expect.any(Function),\n })\n })\n\n test('should allow selecting from list of apps', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const organizationId = 'org-id'\n const existingAppId1 = 'existing-app-id-1'\n const existingAppId2 = 'existing-app-id-2'\n const deploymentId = 'deployment-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [\n {\n appHost: 'existing-host-1',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId1,\n organizationId,\n projectId: null,\n title: 'Existing App 1',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n {\n appHost: 'existing-host-2',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId2,\n organizationId,\n projectId: null,\n title: 'Existing App 2',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n ])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId2}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n mockSelect.mockResolvedValue('existing-host-2')\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Application deployed')\n expect(stdout).toContain(\n `Add the deployment.appId to your sanity.cli.js or sanity.cli.ts file:`,\n )\n expect(stdout).toContain(`deployment: {\n appId: '${existingAppId2}',`)\n })\n\n test('should allow creating a new app by selecting from list of apps', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const organizationId = 'org-id'\n const existingAppId1 = 'existing-app-id-1'\n const existingAppId2 = 'existing-app-id-2'\n const newAppId = 'new-app-id'\n const deploymentId = 'deployment-id'\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [\n {\n appHost: 'existing-host-1',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId1,\n organizationId,\n projectId: null,\n title: 'Existing App 1',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n {\n appHost: 'existing-host-2',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId2,\n organizationId,\n projectId: null,\n title: 'Existing App 2',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n ])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, {\n appHost: 'generated-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: newAppId,\n organizationId,\n projectId: null,\n title: 'Test App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${newAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n mockSelect.mockResolvedValue('NEW_APP')\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Application deployed')\n expect(stdout).toContain(\n `Add the deployment.appId to your sanity.cli.js or sanity.cli.ts file:`,\n )\n expect(stdout).toContain(`deployment: {\n appId: '${newAppId}',`)\n })\n\n test('should throw an error if organizationId is not set', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n mockGetCliConfig.mockResolvedValue({\n app: {\n organizationId: undefined,\n },\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain(\n 'sanity.cli.ts does not contain an organization identifier (\"app.organizationId\"), which is required for the Sanity CLI to communicate with the Sanity API',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('studio', () => {\n test('should handle missing sanity version', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n mockReadModuleVersion.mockResolvedValue(null)\n\n mockGetCliConfig.mockResolvedValue({\n studioHost: 'existing-studio',\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Failed to find installed sanity version')\n })\n\n test('should handle directory check errors', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'existing-studio'\n const studioAppId = 'studio-app-id'\n\n mockCheckDir.mockRejectedValue(new Error('Directory check failed'))\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n studioHost,\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: studioHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'Existing Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error checking directory')\n })\n\n test('should re-deploy studio if it already exists', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'existing-studio'\n const studioAppId = 'studio-app-id'\n const deploymentId = 'deployment-id'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n studioHost,\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: studioHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'Existing Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stderr, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stderr).toContain('Checking project info')\n expect(stderr).toContain('Verifying local content')\n expect(stderr).toContain('Deploying to sanity.studio')\n expect(stdout).toContain('Success! Studio deployed')\n })\n\n test('should create new studio hostname when studioHost is provided but does not exist', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project-id',\n },\n studioHost: 'new-studio-host',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: 'new-studio-host',\n appType: 'studio',\n },\n uri: `/projects/test-project-id/user-applications`,\n }).reply(404, {\n message: 'Not found',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/test-project-id/user-applications`,\n }).reply(200, {\n appHost: 'new-studio-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: 'new-studio-app-id',\n projectId: 'test-project-id',\n title: 'New Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/test-project-id/user-applications/new-studio-app-id/deployments`,\n }).reply(200, {\n id: 'deployment-id',\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed')\n expect(stdout).toContain('Your project has not been assigned a studio hostname')\n expect(stdout).toContain('Creating https://new-studio-host.sanity.studio')\n })\n\n test('should handle studio hostname creation failure when name is taken', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'taken-studio-host'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n studioHost,\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(404, {\n message: 'Not found',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(409, {\n message: 'Studio hostname already taken',\n statusCode: 409,\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Studio hostname already taken')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should allow selecting from existing studio hostnames', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n })\n\n const studioOneId = 'studio-one-id'\n const studioTwoId = 'studio-two-id'\n const deploymentId = 'deployment-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, [\n {\n appHost: 'studio-one',\n createdAt: '2024-01-01T00:00:00Z',\n id: studioOneId,\n projectId,\n title: 'Studio One',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n {\n appHost: 'studio-two',\n createdAt: '2024-01-01T00:00:00Z',\n id: studioTwoId,\n projectId,\n title: 'Studio Two',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n ])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioTwoId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n location: 'https://studio-two.sanity.studio',\n })\n\n mockSelect.mockResolvedValue('studio-two')\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed to https://studio-two.sanity.studio')\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'Create new studio hostname', value: 'NEW_STUDIO'},\n expect.any(Object), // Separator\n {name: 'Studio One', value: 'studio-one'},\n {name: 'Studio Two', value: 'studio-two'},\n ],\n message: 'Select existing studio hostname, or create a new one',\n })\n })\n\n test('should allow creating new studio hostname from selection menu', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const existingStudioId = 'existing-studio-id'\n const newStudioFromMenuId = 'new-studio-from-menu-id'\n const deploymentId = 'deployment-id'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n })\n .once()\n .reply(200, [\n {\n appHost: 'existing-studio',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingStudioId,\n projectId,\n title: 'Existing Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n ])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: 'new-studio-from-menu',\n createdAt: '2024-01-01T00:00:00Z',\n id: newStudioFromMenuId,\n projectId,\n title: 'New Studio From Menu',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${newStudioFromMenuId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n mockSelect.mockResolvedValue('NEW_STUDIO')\n mockInput.mockImplementation(({validate}) => {\n const promise = (async () => {\n if (validate) {\n await validate('new-studio-from-menu')\n }\n return 'new-studio-from-menu'\n })() as Promise<string> & {cancel: () => void}\n\n promise.cancel = () => {}\n return promise\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed')\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Studio hostname (<value>.sanity.studio):',\n validate: expect.any(Function),\n })\n })\n\n test('should handle input validation with retry for studio hostname creation', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const validStudioId = 'valid-studio-id'\n const deploymentId = 'deployment-id'\n\n mockInput.mockImplementation(({validate}) => {\n const promise = (async () => {\n if (validate) {\n // First attempt with a name that will be taken (triggers 409)\n let result = await validate('taken-name')\n if (result !== true) {\n // Name was taken, try again with a valid name (triggers 200)\n result = await validate('valid-name')\n }\n }\n return 'valid-name'\n })() as Promise<string> & {cancel: () => void}\n\n promise.cancel = () => {}\n return promise\n })\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, [])\n\n // First API call fails (hostname taken)\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n })\n .once()\n .reply(409, {\n message: 'Studio hostname already taken',\n statusCode: 409,\n })\n\n // Second API call succeeds\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n })\n .once()\n .reply(200, {\n appHost: 'valid-name',\n createdAt: '2024-01-01T00:00:00Z',\n id: validStudioId,\n projectId,\n title: 'Valid Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${validStudioId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed')\n })\n\n test('should handle input validation fails with unknown error', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n\n mockInput.mockImplementation(({validate}) => {\n const promise = (async () => {\n if (validate) {\n // First attempt with a name that will be taken (triggers 409)\n let result = await validate('taken-name')\n if (result !== true) {\n // Name was taken, try again with a valid name (triggers 200)\n result = await validate('valid-name')\n }\n }\n return 'valid-name'\n })() as Promise<string> & {cancel: () => void}\n\n promise.cancel = () => {}\n return promise\n })\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, [])\n\n // First API call fails (hostname taken)\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n })\n .once()\n .reply(500, {\n message: 'Internal server error',\n statusCode: 500,\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error creating user application')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should throw error when no projectId is configured', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n mockGetCliConfig.mockResolvedValue({\n api: {},\n studioHost: 'some-studio',\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain(\n 'sanity.cli.ts does not contain a project identifier (\"api.projectId\"), which is required for the Sanity CLI to communicate with the Sanity API',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should log a warning if the deprecated auto-updates flag is used', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const {stderr} = await testCommand(DeployCommand, ['--auto-updates'], {\n config: {root: cwd},\n })\n\n expect(stderr).toContain('Warning: The --auto-updates flag is deprecated')\n })\n\n test('should throw an error when both the current and deprecated autoUpdates config are used', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n mockGetCliConfig.mockResolvedValue({\n autoUpdates: true,\n deployment: {\n autoUpdates: true,\n },\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain(\n 'Found both `autoUpdates` (deprecated) and `deployment.autoUpdates` in sanity.cli.',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle general API errors when finding user application', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'existing-studio'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n studioHost,\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(500, {\n error: 'Internal server error',\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error finding user application')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle deployment API errors for studio', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'existing-studio'\n const studioAppId = 'studio-app-id'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n studioHost,\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: studioHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'Existing Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioAppId}/deployments`,\n }).reply(500, {\n error: 'Internal server error',\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error deploying studio')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle fatal errors during studio hostname creation', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'new-studio-host'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n studioHost,\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(404, {\n message: 'Not found',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(500, {\n message: 'Internal server error',\n statusCode: 500,\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error creating user application from config')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle no existing studio applications scenario', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const newStudioId = 'new-studio-id'\n const deploymentId = 'deployment-id'\n\n mockInput.mockImplementation(({validate}) => {\n const promise = (async () => {\n if (validate) {\n await validate('new-studio-name')\n }\n return 'new-studio-name'\n })() as Promise<string> & {cancel: () => void}\n\n promise.cancel = () => {}\n return promise\n })\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, [])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: 'new-studio-name',\n createdAt: '2024-01-01T00:00:00Z',\n id: newStudioId,\n projectId,\n title: 'New Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${newStudioId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed')\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Studio hostname (<value>.sanity.studio):',\n validate: expect.any(Function),\n })\n })\n\n test('should skip build when --no-build flag is used for studio', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'existing-studio'\n const studioAppId = 'studio-app-id'\n const deploymentId = 'deployment-id'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n studioHost,\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: studioHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'Existing Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed')\n expect(mockBuildStudio).not.toHaveBeenCalled()\n })\n\n test('should deploy studio using deployment.appId', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioAppId = 'studio-app-id'\n const appHost = 'my-studio'\n const deploymentId = 'deployment-id'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n deployment: {\n appId: studioAppId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n uri: `/projects/${projectId}/user-applications/${studioAppId}`,\n }).reply(200, {\n appHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'My Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n location: `https://${appHost}.sanity.studio`,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain(`Success! Studio deployed to https://${appHost}.sanity.studio`)\n })\n\n test('should prioritize deployment.appId over studioHost when both are configured', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioAppId = 'studio-app-id'\n const studioHost = 'my-studio-host'\n const deploymentId = 'deployment-id'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n deployment: {\n appId: studioAppId,\n },\n studioHost,\n })\n\n // Should call by appId, NOT by appHost\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n uri: `/projects/${projectId}/user-applications/${studioAppId}`,\n }).reply(200, {\n appHost: studioHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'My Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n location: `https://${studioHost}.sanity.studio`,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain(`Success! Studio deployed to https://${studioHost}.sanity.studio`)\n })\n\n test('should handle error when deployment.appId does not exist for the org', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioAppId = 'non-existent-app-id'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n deployment: {\n appId: studioAppId,\n },\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n uri: `/projects/${projectId}/user-applications/${studioAppId}`,\n }).reply(404, {\n message: 'Application not found',\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error finding user application')\n expect(error?.message).toContain(`Cannot find app with app ID ${studioAppId}`)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should not fall back to studioHost when deployment.appId is configured but does not exist', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioAppId = 'non-existent-app-id'\n const studioHost = 'valid-studio-host'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId,\n },\n deployment: {\n appId: studioAppId,\n },\n studioHost, // This should NOT be used as fallback\n })\n\n // appId lookup fails\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n uri: `/projects/${projectId}/user-applications/${studioAppId}`,\n }).reply(404, {\n message: 'Application not found',\n })\n\n // Should NOT make a call to studioHost - if it does, this mock will remain unused\n // and cause the test to fail due to pending mocks check\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n })\n\n expect(error?.message).toContain('Error finding user application')\n expect(error?.message).toContain(`Cannot find app with app ID ${studioAppId}`)\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n})\n"],"names":["runCommand","getCliConfig","confirm","input","select","mockApi","testCommand","nock","afterEach","beforeEach","describe","expect","test","vi","testExample","buildApp","buildStudio","checkDir","USER_APPLICATIONS_API_VERSION","dirIsEmptyOrNonExistent","readModuleVersion","DeployCommand","mock","fn","actual","importActual","pack","pipe","mockGetCliConfig","mocked","mockSelect","mockConfirm","mockInput","mockCheckDir","mockDirIsEmptyOrNonExistent","mockReadModuleVersion","mockBuildStudio","mockBuildApp","mockImplementation","sourceDir","moduleName","mockResolvedValue","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","error","message","toContain","cwd","process","appId","app","organizationId","deployment","apiVersion","query","appType","uri","reply","appHost","createdAt","id","projectId","title","type","updatedAt","urlType","method","config","root","toBeUndefined","toHaveBeenCalledWith","default","oclif","exit","toBe","stderr","newAppId","deploymentId","validate","any","Function","existingAppId","not","toHaveBeenCalled","mockRejectedValue","Error","nonExistentAppId","once","statusCode","existingAppId1","existingAppId2","undefined","studioHost","studioAppId","api","studioOneId","studioTwoId","location","choices","name","value","Object","existingStudioId","newStudioFromMenuId","promise","cancel","validStudioId","result","autoUpdates","newStudioId"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/__tests__/deploy.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {confirm, input, select} from '@sanity/cli-core/ux'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\nimport {testExample} from '~test/helpers/testExample.js'\n\nimport {buildApp} from '../../actions/build/buildApp.js'\nimport {buildStudio} from '../../actions/build/buildStudio.js'\nimport {checkDir} from '../../actions/deploy/checkDir.js'\nimport {USER_APPLICATIONS_API_VERSION} from '../../services/userApplications.js'\nimport {dirIsEmptyOrNonExistent} from '../../util/dirIsEmptyOrNonExistent.js'\nimport {readModuleVersion} from '../../util/readModuleVersion.js'\nimport {DeployCommand} from '../deploy.js'\n\nvi.mock('../../util/readModuleVersion.js', () => ({\n readModuleVersion: vi.fn(),\n}))\n\nvi.mock('../../actions/build/buildApp.js', () => ({\n buildApp: vi.fn(),\n}))\n\nvi.mock('../../actions/build/buildStudio.js', () => ({\n buildStudio: vi.fn(),\n}))\n\nvi.mock('../../actions/deploy/checkDir.js', () => ({\n checkDir: vi.fn(),\n}))\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n confirm: vi.fn(),\n input: vi.fn(),\n select: vi.fn(),\n }\n})\n\nvi.mock('../../util/dirIsEmptyOrNonExistent.js', () => ({\n dirIsEmptyOrNonExistent: vi.fn(() => true),\n}))\n\nvi.mock('tar-fs', () => ({\n pack: vi.fn(() => {\n return {\n pipe: vi.fn(),\n }\n }),\n}))\n\nconst mockSelect = vi.mocked(select)\nconst mockConfirm = vi.mocked(confirm)\nconst mockInput = vi.mocked(input)\nconst mockCheckDir = vi.mocked(checkDir)\nconst mockDirIsEmptyOrNonExistent = vi.mocked(dirIsEmptyOrNonExistent)\nconst mockReadModuleVersion = vi.mocked(readModuleVersion)\nconst mockBuildStudio = vi.mocked(buildStudio)\nconst mockBuildApp = vi.mocked(buildApp)\n\nconst appId = 'app-id'\nconst organizationId = 'org-id'\n\nconst defaultMocks = {\n cliConfig: {\n app: {\n organizationId,\n },\n deployment: {\n appId,\n },\n },\n}\n\ndescribe('#deploy', () => {\n beforeEach(async () => {\n // Set up default mocks\n mockReadModuleVersion.mockImplementation(async (sourceDir, moduleName) => {\n if (moduleName === 'sanity') return '3.0.0' // for studio deployments\n if (moduleName === '@sanity/sdk-react') return '1.0.0' // for app deployments\n return '1.0.0'\n })\n mockCheckDir.mockResolvedValue()\n })\n\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('help text is correct', async () => {\n const {stdout} = await runCommand('deploy --help')\n expect(stdout).toMatchInlineSnapshot(`\n \"Builds and deploys Sanity Studio or application to Sanity hosting\n\n USAGE\n $ sanity deploy [SOURCEDIR] [--auto-updates] [--build] [--minify]\n [--schema-required] [--source-maps] [--verbose] [-y]\n\n ARGUMENTS\n [SOURCEDIR] Source directory\n\n FLAGS\n -y, --yes Unattended mode, answers \"yes\" to any \"yes/no\" prompt\n and otherwise uses defaults\n --[no-]auto-updates Automatically update the studio to the latest version\n --[no-]build Don't build the studio prior to deploy, instead\n deploying the version currently in \\`dist/\\`\n --[no-]minify Skip minifying built JavaScript (speeds up build,\n increases size of bundle)\n --schema-required Fail-fast deployment if schema store fails\n --source-maps Enable source maps for built bundles (increases size\n of bundle)\n --verbose Enable verbose logging\n\n DESCRIPTION\n Builds and deploys Sanity Studio or application to Sanity hosting\n\n EXAMPLES\n Build the studio\n\n $ sanity deploy\n\n Deploys non-minified build with source maps\n\n $ sanity deploy --no-minify --source-maps\n\n Fail fast on schema store fails - for when other services rely on the stored\n schema\n\n $ sanity deploy --schema-required\n\n \"\n `)\n })\n test('shows an error for invalid flags', async () => {\n const {error} = await testCommand(DeployCommand, ['--invalid'])\n\n expect(error?.message).toContain('Nonexistent flag: --invalid')\n })\n\n test(\"should prompt to confirm deleting source directory if it's not empty\", async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n mockConfirm.mockResolvedValue(true)\n mockDirIsEmptyOrNonExistent.mockResolvedValue(false)\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${appId}`,\n }).reply(200, {\n appHost: 'existing-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: appId,\n organizationId: 'org-id',\n projectId: null,\n title: 'Existing App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${appId}/deployments`,\n }).reply(200, {\n id: 'deployment-id',\n })\n\n const {error} = await testCommand(DeployCommand, ['build'], {\n config: {root: cwd},\n mocks: defaultMocks,\n })\n\n expect(error).toBeUndefined()\n expect(mockConfirm).toHaveBeenCalledWith({\n default: false,\n message: '\"./build\" is not empty, do you want to proceed?',\n })\n })\n\n test(\"should cancel the deployment if the user doesn't want to proceed\", async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n mockConfirm.mockResolvedValue(false)\n\n const {error} = await testCommand(DeployCommand, ['build'], {\n config: {root: cwd},\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Cancelled.')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n describe('app', () => {\n test('should re-deploy app if it already exists', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${appId}`,\n }).reply(200, {\n appHost: 'existing-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: appId,\n organizationId: 'org-id',\n projectId: null,\n title: 'Existing App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${appId}/deployments`,\n }).reply(200, {\n id: 'deployment-id',\n })\n\n const {error, stderr, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: defaultMocks,\n })\n\n expect(error).toBeUndefined()\n\n expect(stderr).toContain('Checking application info')\n expect(stderr).toContain('Verifying local content')\n expect(stderr).toContain('Deploying...')\n\n expect(stdout).toContain('Success! Application deployed')\n })\n\n test('should handle missing @sanity/sdk-react version', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n mockReadModuleVersion.mockResolvedValue(null)\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Failed to find installed @sanity/sdk-react version')\n })\n\n test('should create new user application if none exists', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const newAppId = 'new-app-id'\n const deploymentId = 'deployment-id'\n\n mockInput.mockResolvedValue('Test App')\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, {\n appHost: 'generated-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: newAppId,\n organizationId,\n projectId: null,\n title: 'Test App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${newAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n app: {\n organizationId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Application deployed')\n expect(stdout).toContain(\n `Add the deployment.appId to your sanity.cli.js or sanity.cli.ts file:`,\n )\n expect(stdout).toContain(`deployment: {\n appId: '${newAppId}',`)\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Enter a title for your application:',\n validate: expect.any(Function),\n })\n })\n\n test('should skip build when --no-build flag is used', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId = 'existing-app-id'\n const deploymentId = 'deployment-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}`,\n }).reply(200, {\n appHost: 'existing-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId,\n organizationId,\n projectId: null,\n title: 'Existing App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n ...defaultMocks.cliConfig,\n deployment: {\n appId: existingAppId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Application deployed')\n expect(mockBuildApp).not.toHaveBeenCalled()\n })\n\n test('should handle directory check errors', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId = 'existing-app-id'\n\n mockCheckDir.mockRejectedValue(new Error('Directory check failed'))\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}`,\n }).reply(200, {\n appHost: 'existing-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId,\n organizationId,\n projectId: null,\n title: 'Existing App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n ...defaultMocks.cliConfig,\n deployment: {\n appId: existingAppId,\n },\n },\n },\n })\n\n expect(error?.message).toContain('Error checking directory')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test(\"should error when fetching user applications if user doesn't have org access\", async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const anotherAppId = 'some-app-id'\n const anotherOrganizationId = 'org-without-access'\n\n // Simulate API returning 403 Forbidden for the given org\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${anotherAppId}`,\n }).reply(403, {\n error: 'Forbidden',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n app: {\n organizationId: anotherOrganizationId,\n },\n deployment: {\n appId: anotherAppId,\n },\n },\n },\n })\n\n expect(error?.message).toContain(\n `You don’t have permission to view applications for the configured organization ID (\"${anotherOrganizationId}\")`,\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle user-applications endpoint errors', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId = 'existing-app-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}`,\n }).reply(500, {\n error: 'Internal server error',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n ...defaultMocks.cliConfig,\n deployment: {\n appId: existingAppId,\n },\n },\n },\n })\n\n expect(error?.message).toContain('Error deploying application')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle deployment API errors', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId = 'existing-app-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}`,\n }).reply(200, {\n appHost: 'existing-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId,\n organizationId,\n projectId: null,\n title: 'Existing App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}/deployments`,\n }).reply(500, {\n error: 'Internal server error',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n ...defaultMocks.cliConfig,\n deployment: {\n appId: existingAppId,\n },\n },\n },\n })\n\n expect(error?.message).toContain('Error deploying application')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should show an error if deployment.appId is configured but the application does not exist', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const nonExistentAppId = 'non-existent-app-id'\n\n // Simulate API returning no user application for the given app.id\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${nonExistentAppId}`,\n }).reply(404, {\n error: 'Not found',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n ...defaultMocks.cliConfig,\n deployment: {\n appId: nonExistentAppId,\n },\n },\n },\n })\n\n expect(error?.message).toContain(\n 'The `appId` provided in your configuration’s `deployment` object cannot be found in your organization',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should show an error if deployment.appId and app.id (deprecated) are both in use', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n ...defaultMocks.cliConfig,\n app: {\n id: appId,\n organizationId,\n },\n },\n },\n })\n\n expect(error?.message).toContain(\n 'Found both app.id (deprecated) and deployment.appId in your application configuration.\\n\\nPlease remove app.id from your sanity.cli.js or sanity.cli.ts file.',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should show a warning if app.id (deprecated) is used', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const {stderr} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n app: {\n id: appId,\n organizationId,\n },\n },\n },\n })\n\n expect(stderr).toContain('The `app.id` config has moved to `deployment.appId`.')\n })\n\n test('should handle app creation with retry when host is taken', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const newAppId = 'new-app-id'\n const deploymentId = 'deployment-id'\n\n mockInput.mockResolvedValue('Test App')\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n })\n .once()\n .reply(409, {\n message: 'App host already taken',\n statusCode: 409,\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n })\n .once()\n .reply(200, {\n appHost: 'generated-host-2',\n createdAt: '2024-01-01T00:00:00Z',\n id: newAppId,\n organizationId,\n projectId: null,\n title: 'Test App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${newAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n app: {\n organizationId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Application deployed')\n })\n\n test('should handle app creation failure with non-retryable error', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n mockInput.mockResolvedValue('Test App')\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(500, {\n message: 'Internal server error',\n statusCode: 500,\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n app: {\n organizationId,\n },\n },\n },\n })\n\n expect(error?.message).toContain('Error deploying application')\n })\n\n test('should handle findUserApplicationForApp API errors', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId = 'existing-app-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId}`,\n }).reply(500, {\n error: 'Internal server error',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n ...defaultMocks.cliConfig,\n deployment: {\n appId: existingAppId,\n },\n },\n },\n })\n\n expect(error?.message).toContain('Error deploying application')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should test input validation for app title', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const newAppId = 'new-app-id'\n const deploymentId = 'deployment-id'\n\n mockInput.mockResolvedValue('Valid App Title')\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, {\n appHost: 'generated-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: newAppId,\n organizationId,\n projectId: null,\n title: 'Valid App Title',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${newAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n app: {\n organizationId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Enter a title for your application:',\n validate: expect.any(Function),\n })\n })\n\n test('should allow selecting from list of apps', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId1 = 'existing-app-id-1'\n const existingAppId2 = 'existing-app-id-2'\n const deploymentId = 'deployment-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [\n {\n appHost: 'existing-host-1',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId1,\n organizationId,\n projectId: null,\n title: 'Existing App 1',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n {\n appHost: 'existing-host-2',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId2,\n organizationId,\n projectId: null,\n title: 'Existing App 2',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n ])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${existingAppId2}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n mockSelect.mockResolvedValue('existing-host-2')\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n app: {\n organizationId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Application deployed')\n expect(stdout).toContain(\n `Add the deployment.appId to your sanity.cli.js or sanity.cli.ts file:`,\n )\n expect(stdout).toContain(`deployment: {\n appId: '${existingAppId2}',`)\n })\n\n test('should allow creating a new app by selecting from list of apps', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const existingAppId1 = 'existing-app-id-1'\n const existingAppId2 = 'existing-app-id-2'\n const newAppId = 'new-app-id'\n const deploymentId = 'deployment-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, [\n {\n appHost: 'existing-host-1',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId1,\n organizationId,\n projectId: null,\n title: 'Existing App 1',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n {\n appHost: 'existing-host-2',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingAppId2,\n organizationId,\n projectId: null,\n title: 'Existing App 2',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n ])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n organizationId,\n },\n uri: `/user-applications`,\n }).reply(200, {\n appHost: 'generated-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: newAppId,\n organizationId,\n projectId: null,\n title: 'Test App',\n type: 'coreApp',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'coreApp',\n },\n uri: `/user-applications/${newAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n mockSelect.mockResolvedValue('NEW_APP')\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n app: {\n organizationId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Application deployed')\n expect(stdout).toContain(\n `Add the deployment.appId to your sanity.cli.js or sanity.cli.ts file:`,\n )\n expect(stdout).toContain(`deployment: {\n appId: '${newAppId}',`)\n })\n\n test('should throw an error if organizationId is not set', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n app: {\n organizationId: undefined,\n },\n },\n },\n })\n\n expect(error?.message).toContain(\n 'sanity.cli.ts does not contain an organization identifier (\"app.organizationId\"), which is required for the Sanity CLI to communicate with the Sanity API',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('studio', () => {\n test('should handle missing sanity version', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n mockReadModuleVersion.mockResolvedValue(null)\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n studioHost: 'existing-studio',\n },\n },\n })\n\n expect(error?.message).toContain('Failed to find installed sanity version')\n })\n\n test('should handle directory check errors', async () => {\n const cwd = await testExample('basic-app')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'existing-studio'\n const studioAppId = 'studio-app-id'\n\n mockCheckDir.mockRejectedValue(new Error('Directory check failed'))\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: studioHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'Existing Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n const {error} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n studioHost,\n },\n },\n })\n\n expect(error?.message).toContain('Error checking directory')\n })\n\n test('should re-deploy studio if it already exists', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'existing-studio'\n const studioAppId = 'studio-app-id'\n const deploymentId = 'deployment-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: studioHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'Existing Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stderr, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n studioHost,\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stderr).toContain('Checking project info')\n expect(stderr).toContain('Verifying local content')\n expect(stderr).toContain('Deploying to sanity.studio')\n expect(stdout).toContain('Success! Studio deployed')\n })\n\n test('should create new studio hostname when studioHost is provided but does not exist', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: 'new-studio-host',\n appType: 'studio',\n },\n uri: `/projects/test-project-id/user-applications`,\n }).reply(404, {\n message: 'Not found',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/test-project-id/user-applications`,\n }).reply(200, {\n appHost: 'new-studio-host',\n createdAt: '2024-01-01T00:00:00Z',\n id: 'new-studio-app-id',\n projectId: 'test-project-id',\n title: 'New Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/test-project-id/user-applications/new-studio-app-id/deployments`,\n }).reply(200, {\n id: 'deployment-id',\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId: 'test-project-id',\n },\n studioHost: 'new-studio-host',\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed')\n expect(stdout).toContain('Your project has not been assigned a studio hostname')\n expect(stdout).toContain('Creating https://new-studio-host.sanity.studio')\n })\n\n test('should handle studio hostname creation failure when name is taken', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'taken-studio-host'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(404, {\n message: 'Not found',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(409, {\n message: 'Studio hostname already taken',\n statusCode: 409,\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n studioHost,\n },\n },\n })\n\n expect(error?.message).toContain('Studio hostname already taken')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should allow selecting from existing studio hostnames', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n\n const studioOneId = 'studio-one-id'\n const studioTwoId = 'studio-two-id'\n const deploymentId = 'deployment-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, [\n {\n appHost: 'studio-one',\n createdAt: '2024-01-01T00:00:00Z',\n id: studioOneId,\n projectId,\n title: 'Studio One',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n {\n appHost: 'studio-two',\n createdAt: '2024-01-01T00:00:00Z',\n id: studioTwoId,\n projectId,\n title: 'Studio Two',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n ])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioTwoId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n location: 'https://studio-two.sanity.studio',\n })\n\n mockSelect.mockResolvedValue('studio-two')\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed to https://studio-two.sanity.studio')\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'Create new studio hostname', value: 'NEW_STUDIO'},\n expect.any(Object), // Separator\n {name: 'Studio One', value: 'studio-one'},\n {name: 'Studio Two', value: 'studio-two'},\n ],\n message: 'Select existing studio hostname, or create a new one',\n })\n })\n\n test('should allow creating new studio hostname from selection menu', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const existingStudioId = 'existing-studio-id'\n const newStudioFromMenuId = 'new-studio-from-menu-id'\n const deploymentId = 'deployment-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n })\n .once()\n .reply(200, [\n {\n appHost: 'existing-studio',\n createdAt: '2024-01-01T00:00:00Z',\n id: existingStudioId,\n projectId,\n title: 'Existing Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n },\n ])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: 'new-studio-from-menu',\n createdAt: '2024-01-01T00:00:00Z',\n id: newStudioFromMenuId,\n projectId,\n title: 'New Studio From Menu',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${newStudioFromMenuId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n mockSelect.mockResolvedValue('NEW_STUDIO')\n mockInput.mockImplementation(({validate}) => {\n const promise = (async () => {\n if (validate) {\n await validate('new-studio-from-menu')\n }\n return 'new-studio-from-menu'\n })() as Promise<string> & {cancel: () => void}\n\n promise.cancel = () => {}\n return promise\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed')\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Studio hostname (<value>.sanity.studio):',\n validate: expect.any(Function),\n })\n })\n\n test('should handle input validation with retry for studio hostname creation', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const validStudioId = 'valid-studio-id'\n const deploymentId = 'deployment-id'\n\n mockInput.mockImplementation(({validate}) => {\n const promise = (async () => {\n if (validate) {\n // First attempt with a name that will be taken (triggers 409)\n let result = await validate('taken-name')\n if (result !== true) {\n // Name was taken, try again with a valid name (triggers 200)\n result = await validate('valid-name')\n }\n }\n return 'valid-name'\n })() as Promise<string> & {cancel: () => void}\n\n promise.cancel = () => {}\n return promise\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, [])\n\n // First API call fails (hostname taken)\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n })\n .once()\n .reply(409, {\n message: 'Studio hostname already taken',\n statusCode: 409,\n })\n\n // Second API call succeeds\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n })\n .once()\n .reply(200, {\n appHost: 'valid-name',\n createdAt: '2024-01-01T00:00:00Z',\n id: validStudioId,\n projectId,\n title: 'Valid Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${validStudioId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed')\n })\n\n test('should handle input validation fails with unknown error', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n\n mockInput.mockImplementation(({validate}) => {\n const promise = (async () => {\n if (validate) {\n // First attempt with a name that will be taken (triggers 409)\n let result = await validate('taken-name')\n if (result !== true) {\n // Name was taken, try again with a valid name (triggers 200)\n result = await validate('valid-name')\n }\n }\n return 'valid-name'\n })() as Promise<string> & {cancel: () => void}\n\n promise.cancel = () => {}\n return promise\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, [])\n\n // First API call fails (hostname taken)\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n })\n .once()\n .reply(500, {\n message: 'Internal server error',\n statusCode: 500,\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n },\n },\n })\n\n expect(error?.message).toContain('Error creating user application')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should throw error when no projectId is configured', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {},\n studioHost: 'some-studio',\n },\n },\n })\n\n expect(error?.message).toContain(\n 'sanity.cli.ts does not contain a project identifier (\"api.projectId\"), which is required for the Sanity CLI to communicate with the Sanity API',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should log a warning if the deprecated auto-updates flag is used', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'test-studio'\n\n const {stderr} = await testCommand(DeployCommand, ['--auto-updates'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n studioHost,\n },\n },\n })\n\n expect(stderr).toContain('Warning: The --auto-updates flag is deprecated')\n })\n\n test('should throw an error when both the current and deprecated autoUpdates config are used', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n autoUpdates: true,\n deployment: {\n autoUpdates: true,\n },\n },\n },\n })\n\n expect(error?.message).toContain(\n 'Found both `autoUpdates` (deprecated) and `deployment.autoUpdates` in sanity.cli.',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle general API errors when finding user application', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'existing-studio'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(500, {\n error: 'Internal server error',\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n studioHost,\n },\n },\n })\n\n expect(error?.message).toContain('Error finding user application')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle deployment API errors for studio', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'existing-studio'\n const studioAppId = 'studio-app-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: studioHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'Existing Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioAppId}/deployments`,\n }).reply(500, {\n error: 'Internal server error',\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n studioHost,\n },\n },\n })\n\n expect(error?.message).toContain('Error deploying studio')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle fatal errors during studio hostname creation', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'new-studio-host'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(404, {\n message: 'Not found',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(500, {\n message: 'Internal server error',\n statusCode: 500,\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n studioHost,\n },\n },\n })\n\n expect(error?.message).toContain('Error creating user application from config')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle no existing studio applications scenario', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const newStudioId = 'new-studio-id'\n const deploymentId = 'deployment-id'\n\n mockInput.mockImplementation(({validate}) => {\n const promise = (async () => {\n if (validate) {\n await validate('new-studio-name')\n }\n return 'new-studio-name'\n })() as Promise<string> & {cancel: () => void}\n\n promise.cancel = () => {}\n return promise\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, [])\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: 'new-studio-name',\n createdAt: '2024-01-01T00:00:00Z',\n id: newStudioId,\n projectId,\n title: 'New Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${newStudioId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed')\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Studio hostname (<value>.sanity.studio):',\n validate: expect.any(Function),\n })\n })\n\n test('should skip build when --no-build flag is used for studio', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioHost = 'existing-studio'\n const studioAppId = 'studio-app-id'\n const deploymentId = 'deployment-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n query: {\n appHost: studioHost,\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications`,\n }).reply(200, {\n appHost: studioHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'Existing Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, ['--no-build'], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n studioHost,\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Success! Studio deployed')\n expect(mockBuildStudio).not.toHaveBeenCalled()\n })\n\n test('should deploy studio using deployment.appId', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioAppId = 'studio-app-id'\n const appHost = 'my-studio'\n const deploymentId = 'deployment-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n uri: `/projects/${projectId}/user-applications/${studioAppId}`,\n }).reply(200, {\n appHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'My Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n location: `https://${appHost}.sanity.studio`,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n deployment: {\n appId: studioAppId,\n },\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain(`Success! Studio deployed to https://${appHost}.sanity.studio`)\n })\n\n test('should prioritize deployment.appId over studioHost when both are configured', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioAppId = 'studio-app-id'\n const studioHost = 'my-studio-host'\n const deploymentId = 'deployment-id'\n\n // Should call by appId, NOT by appHost\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n uri: `/projects/${projectId}/user-applications/${studioAppId}`,\n }).reply(200, {\n appHost: studioHost,\n createdAt: '2024-01-01T00:00:00Z',\n id: studioAppId,\n projectId,\n title: 'My Studio',\n type: 'studio',\n updatedAt: '2024-01-01T00:00:00Z',\n urlType: 'internal',\n })\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n method: 'post',\n query: {\n appType: 'studio',\n },\n uri: `/projects/${projectId}/user-applications/${studioAppId}/deployments`,\n }).reply(200, {\n id: deploymentId,\n location: `https://${studioHost}.sanity.studio`,\n })\n\n const {error, stdout} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n deployment: {\n appId: studioAppId,\n },\n studioHost,\n },\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain(`Success! Studio deployed to https://${studioHost}.sanity.studio`)\n })\n\n test('should handle error when deployment.appId does not exist for the org', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioAppId = 'non-existent-app-id'\n\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n uri: `/projects/${projectId}/user-applications/${studioAppId}`,\n }).reply(404, {\n message: 'Application not found',\n })\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n deployment: {\n appId: studioAppId,\n },\n },\n },\n })\n\n expect(error?.message).toContain('Error finding user application')\n expect(error?.message).toContain(`Cannot find app with app ID ${studioAppId}`)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should not fall back to studioHost when deployment.appId is configured but does not exist', async () => {\n const cwd = await testExample('basic-studio')\n process.cwd = () => cwd\n\n const projectId = 'test-project-id'\n const studioAppId = 'non-existent-app-id'\n const studioHost = 'valid-studio-host'\n\n // appId lookup fails\n mockApi({\n apiVersion: USER_APPLICATIONS_API_VERSION,\n uri: `/projects/${projectId}/user-applications/${studioAppId}`,\n }).reply(404, {\n message: 'Application not found',\n })\n\n // Should NOT make a call to studioHost - if it does, this mock will remain unused\n // and cause the test to fail due to pending mocks check\n\n const {error} = await testCommand(DeployCommand, [], {\n config: {root: cwd},\n mocks: {\n cliConfig: {\n api: {\n projectId,\n },\n deployment: {\n appId: studioAppId,\n },\n studioHost, // This should NOT be used as fallback\n },\n },\n })\n\n expect(error?.message).toContain('Error finding user application')\n expect(error?.message).toContain(`Cannot find app with app ID ${studioAppId}`)\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n})\n"],"names":["runCommand","confirm","input","select","mockApi","testCommand","nock","afterEach","beforeEach","describe","expect","test","vi","testExample","buildApp","buildStudio","checkDir","USER_APPLICATIONS_API_VERSION","dirIsEmptyOrNonExistent","readModuleVersion","DeployCommand","mock","fn","actual","importActual","pack","pipe","mockSelect","mocked","mockConfirm","mockInput","mockCheckDir","mockDirIsEmptyOrNonExistent","mockReadModuleVersion","mockBuildStudio","mockBuildApp","appId","organizationId","defaultMocks","cliConfig","app","deployment","mockImplementation","sourceDir","moduleName","mockResolvedValue","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","error","message","toContain","cwd","process","apiVersion","query","appType","uri","reply","appHost","createdAt","id","projectId","title","type","updatedAt","urlType","method","config","root","mocks","toBeUndefined","toHaveBeenCalledWith","default","oclif","exit","toBe","stderr","newAppId","deploymentId","validate","any","Function","existingAppId","not","toHaveBeenCalled","mockRejectedValue","Error","anotherAppId","anotherOrganizationId","nonExistentAppId","once","statusCode","existingAppId1","existingAppId2","undefined","studioHost","studioAppId","api","studioOneId","studioTwoId","location","choices","name","value","Object","existingStudioId","newStudioFromMenuId","promise","cancel","validStudioId","result","autoUpdates","newStudioId"],"mappings":"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"}