@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,6 +1,5 @@
1
1
  import { access, mkdir, writeFile } from 'node:fs/promises';
2
2
  import { runCommand } from '@oclif/test';
3
- import { getCliConfig } from '@sanity/cli-core';
4
3
  import { input } from '@sanity/cli-core/ux';
5
4
  import { testCommand } from '@sanity/cli-test';
6
5
  import { afterEach, describe, expect, test, vi } from 'vitest';
@@ -13,25 +12,23 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
13
12
  input: vi.fn()
14
13
  };
15
14
  });
16
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
17
- findProjectRoot: vi.fn().mockResolvedValue({
18
- directory: '/test/project',
19
- root: '/test/project',
20
- type: 'studio'
21
- })
22
- }));
23
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
24
- getCliConfig: vi.fn().mockResolvedValue({
25
- mediaLibrary: {
26
- aspectsPath: '/test/project/aspects'
27
- }
28
- })
29
- }));
30
15
  const mockInput = vi.mocked(input);
31
16
  const mockMkdir = vi.mocked(mkdir);
32
17
  const mockAccess = vi.mocked(access);
33
18
  const mockWriteFile = vi.mocked(writeFile);
34
- const mockGetCliConfig = vi.mocked(getCliConfig);
19
+ const defaultMocks = {
20
+ cliConfig: {
21
+ mediaLibrary: {
22
+ aspectsPath: '/test/project/aspects'
23
+ }
24
+ },
25
+ projectRoot: {
26
+ directory: '/test/project',
27
+ path: '/test/project/sanity.config.ts',
28
+ root: '/test/project',
29
+ type: 'studio'
30
+ }
31
+ };
35
32
  describe('#media:create-aspect', ()=>{
36
33
  afterEach(()=>{
37
34
  vi.clearAllMocks();
@@ -63,7 +60,9 @@ describe('#media:create-aspect', ()=>{
63
60
  mockMkdir.mockResolvedValue(undefined);
64
61
  mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'));
65
62
  mockWriteFile.mockResolvedValue(undefined);
66
- const { stderr, stdout } = await testCommand(MediaCreateAspectCommand, []);
63
+ const { stderr, stdout } = await testCommand(MediaCreateAspectCommand, [], {
64
+ mocks: defaultMocks
65
+ });
67
66
  expect(stderr).toBe('');
68
67
  expect(stdout).toContain('✓ Aspect created!');
69
68
  expect(stdout).toContain('myTestAspect.ts');
@@ -83,7 +82,9 @@ describe('#media:create-aspect', ()=>{
83
82
  mockMkdir.mockResolvedValue(undefined);
84
83
  mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'));
85
84
  mockWriteFile.mockResolvedValue(undefined);
86
- await testCommand(MediaCreateAspectCommand, []);
85
+ await testCommand(MediaCreateAspectCommand, [], {
86
+ mocks: defaultMocks
87
+ });
87
88
  // Should have called writeFile with a safe name
88
89
  expect(mockWriteFile).toHaveBeenCalledWith(expect.stringMatching(/myComplexTitle/), expect.any(String));
89
90
  });
@@ -92,7 +93,9 @@ describe('#media:create-aspect', ()=>{
92
93
  mockMkdir.mockResolvedValue(undefined);
93
94
  mockAccess.mockResolvedValue(undefined);
94
95
  mockWriteFile.mockResolvedValue(undefined);
95
- const { error } = await testCommand(MediaCreateAspectCommand, []);
96
+ const { error } = await testCommand(MediaCreateAspectCommand, [], {
97
+ mocks: defaultMocks
98
+ });
96
99
  expect(error?.message).toContain('A file already exists at');
97
100
  expect(error?.oclif?.exit).toBe(1);
98
101
  expect(mockWriteFile).not.toHaveBeenCalled();
@@ -109,22 +112,30 @@ describe('#media:create-aspect', ()=>{
109
112
  }
110
113
  ]
111
114
  ])('should throw error %s', async (_, config)=>{
112
- mockGetCliConfig.mockResolvedValue(config);
113
- const { error } = await testCommand(MediaCreateAspectCommand, []);
115
+ const { error } = await testCommand(MediaCreateAspectCommand, [], {
116
+ mocks: {
117
+ ...defaultMocks,
118
+ cliConfig: config
119
+ }
120
+ });
114
121
  expect(error?.message).toContain('media library aspects path');
115
122
  expect(error?.oclif?.exit).toBe(1);
116
123
  });
117
124
  test('should create directory if it does not exist', async ()=>{
118
- mockGetCliConfig.mockResolvedValue({
119
- mediaLibrary: {
120
- aspectsPath: '/new/aspects/path'
121
- }
122
- });
123
125
  mockInput.mockResolvedValueOnce('Test Aspect').mockResolvedValueOnce('testAspect');
124
126
  mockMkdir.mockResolvedValue(undefined);
125
127
  mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'));
126
128
  mockWriteFile.mockResolvedValue(undefined);
127
- await testCommand(MediaCreateAspectCommand, []);
129
+ await testCommand(MediaCreateAspectCommand, [], {
130
+ mocks: {
131
+ ...defaultMocks,
132
+ cliConfig: {
133
+ mediaLibrary: {
134
+ aspectsPath: '/new/aspects/path'
135
+ }
136
+ }
137
+ }
138
+ });
128
139
  expect(mockMkdir).toHaveBeenCalledWith('/new/aspects/path', {
129
140
  recursive: true
130
141
  });
@@ -134,7 +145,9 @@ describe('#media:create-aspect', ()=>{
134
145
  mockMkdir.mockResolvedValue(undefined);
135
146
  mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'));
136
147
  mockWriteFile.mockResolvedValue(undefined);
137
- await testCommand(MediaCreateAspectCommand, []);
148
+ await testCommand(MediaCreateAspectCommand, [], {
149
+ mocks: defaultMocks
150
+ });
138
151
  const writeCall = mockWriteFile.mock.calls[0];
139
152
  const generatedContent = writeCall?.[1];
140
153
  expect(generatedContent).toMatchInlineSnapshot(`
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/media/__tests__/create-aspect.test.ts"],"sourcesContent":["import {access, mkdir, writeFile} from 'node:fs/promises'\n\nimport {runCommand} from '@oclif/test'\nimport {getCliConfig} from '@sanity/cli-core'\nimport {input} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {MediaCreateAspectCommand} from '../create-aspect.js'\n\nvi.mock('node:fs/promises')\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 input: vi.fn(),\n }\n})\n\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/project',\n root: '/test/project',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn().mockResolvedValue({\n mediaLibrary: {\n aspectsPath: '/test/project/aspects',\n },\n }),\n}))\n\nconst mockInput = vi.mocked(input)\nconst mockMkdir = vi.mocked(mkdir)\nconst mockAccess = vi.mocked(access)\nconst mockWriteFile = vi.mocked(writeFile)\nconst mockGetCliConfig = vi.mocked(getCliConfig)\n\ndescribe('#media:create-aspect', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('should show help text correctly', async () => {\n const {stdout} = await runCommand(['media create-aspect --help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a new aspect definition file\n\n USAGE\n $ sanity media create-aspect\n\n DESCRIPTION\n Create a new aspect definition file\n\n EXAMPLES\n Create a new aspect definition file\n\n $ sanity media create-aspect\n\n \"\n `)\n })\n\n test('should create aspect file successfully', async () => {\n mockInput\n .mockResolvedValueOnce('My Test Aspect') // title\n .mockResolvedValueOnce('myTestAspect') // name\n\n mockMkdir.mockResolvedValue(undefined)\n mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'))\n mockWriteFile.mockResolvedValue(undefined)\n\n const {stderr, stdout} = await testCommand(MediaCreateAspectCommand, [])\n\n expect(stderr).toBe('')\n expect(stdout).toContain('✓ Aspect created!')\n expect(stdout).toContain('myTestAspect.ts')\n expect(stdout).toContain('Next steps:')\n expect(stdout).toContain('sanity media deploy-aspect myTestAspect')\n\n expect(mockMkdir).toHaveBeenCalledWith('/test/project/aspects', {recursive: true})\n expect(mockAccess).toHaveBeenCalledWith('/test/project/aspects/myTestAspect.ts')\n expect(mockWriteFile).toHaveBeenCalledWith(\n '/test/project/aspects/myTestAspect.ts',\n expect.stringContaining(\"name: 'myTestAspect'\"),\n )\n expect(mockWriteFile).toHaveBeenCalledWith(\n '/test/project/aspects/myTestAspect.ts',\n expect.stringContaining(\"title: 'My Test Aspect'\"),\n )\n })\n\n test('should generate safe name from title when no name provided', async () => {\n // Mock user inputs - no name provided, should use default based on title\n mockInput\n .mockResolvedValueOnce('My Complex Title!@#') // title\n .mockResolvedValueOnce('myComplexTitle') // name based on title\n\n mockMkdir.mockResolvedValue(undefined)\n mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'))\n mockWriteFile.mockResolvedValue(undefined)\n\n await testCommand(MediaCreateAspectCommand, [])\n\n // Should have called writeFile with a safe name\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringMatching(/myComplexTitle/),\n expect.any(String),\n )\n })\n\n test('should handle file conflict gracefully', async () => {\n mockInput.mockResolvedValueOnce('Existing Aspect').mockResolvedValueOnce('existingAspect')\n\n mockMkdir.mockResolvedValue(undefined)\n mockAccess.mockResolvedValue(undefined)\n mockWriteFile.mockResolvedValue(undefined)\n\n const {error} = await testCommand(MediaCreateAspectCommand, [])\n\n expect(error?.message).toContain('A file already exists at')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockWriteFile).not.toHaveBeenCalled()\n })\n\n test.each([\n ['when mediaLibrary not configured', {}],\n ['when mediaLibrary.aspectsPath is undefined', {mediaLibrary: {}}],\n ])('should throw error %s', async (_, config) => {\n mockGetCliConfig.mockResolvedValue(config)\n\n const {error} = await testCommand(MediaCreateAspectCommand, [])\n\n expect(error?.message).toContain('media library aspects path')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should create directory if it does not exist', async () => {\n mockGetCliConfig.mockResolvedValue({\n mediaLibrary: {\n aspectsPath: '/new/aspects/path',\n },\n })\n\n mockInput.mockResolvedValueOnce('Test Aspect').mockResolvedValueOnce('testAspect')\n\n mockMkdir.mockResolvedValue(undefined)\n mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'))\n mockWriteFile.mockResolvedValue(undefined)\n\n await testCommand(MediaCreateAspectCommand, [])\n\n expect(mockMkdir).toHaveBeenCalledWith('/new/aspects/path', {recursive: true})\n })\n\n test('should generate correct template content', async () => {\n mockInput.mockResolvedValueOnce('Custom Aspect').mockResolvedValueOnce('customAspect')\n\n mockMkdir.mockResolvedValue(undefined)\n mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'))\n mockWriteFile.mockResolvedValue(undefined)\n\n await testCommand(MediaCreateAspectCommand, [])\n\n const writeCall = mockWriteFile.mock.calls[0]\n const generatedContent = writeCall?.[1] as string\n\n expect(generatedContent).toMatchInlineSnapshot(`\n \"import {defineAssetAspect, defineField} from 'sanity'\n\n export default defineAssetAspect({\n name: 'customAspect',\n title: 'Custom Aspect',\n type: 'object',\n fields: [\n defineField({\n name: 'string',\n title: 'Plain String',\n type: 'string',\n }),\n ],\n })\n \"\n `)\n })\n})\n"],"names":["access","mkdir","writeFile","runCommand","getCliConfig","input","testCommand","afterEach","describe","expect","test","vi","MediaCreateAspectCommand","mock","actual","importActual","fn","findProjectRoot","mockResolvedValue","directory","root","type","mediaLibrary","aspectsPath","mockInput","mocked","mockMkdir","mockAccess","mockWriteFile","mockGetCliConfig","clearAllMocks","stdout","toMatchInlineSnapshot","mockResolvedValueOnce","undefined","mockRejectedValue","Error","stderr","toBe","toContain","toHaveBeenCalledWith","recursive","stringContaining","stringMatching","any","String","error","message","oclif","exit","not","toHaveBeenCalled","each","_","config","writeCall","calls","generatedContent"],"mappings":"AAAA,SAAQA,MAAM,EAAEC,KAAK,EAAEC,SAAS,QAAO,mBAAkB;AAEzD,SAAQC,UAAU,QAAO,cAAa;AACtC,SAAQC,YAAY,QAAO,mBAAkB;AAC7C,SAAQC,KAAK,QAAO,sBAAqB;AACzC,SAAQC,WAAW,QAAO,mBAAkB;AAC5C,SAAQC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAE5D,SAAQC,wBAAwB,QAAO,sBAAqB;AAE5DD,GAAGE,IAAI,CAAC;AACRF,GAAGE,IAAI,CAAC,uBAAuB;IAC7B,MAAMC,SAAS,MAAMH,GAAGI,YAAY,CAAuC;IAC3E,OAAO;QACL,GAAGD,MAAM;QACTT,OAAOM,GAAGK,EAAE;IACd;AACF;AAEAL,GAAGE,IAAI,CAAC,yDAAyD,IAAO,CAAA;QACtEI,iBAAiBN,GAAGK,EAAE,GAAGE,iBAAiB,CAAC;YACzCC,WAAW;YACXC,MAAM;YACNC,MAAM;QACR;IACF,CAAA;AAEAV,GAAGE,IAAI,CAAC,0DAA0D,IAAO,CAAA;QACvET,cAAcO,GAAGK,EAAE,GAAGE,iBAAiB,CAAC;YACtCI,cAAc;gBACZC,aAAa;YACf;QACF;IACF,CAAA;AAEA,MAAMC,YAAYb,GAAGc,MAAM,CAACpB;AAC5B,MAAMqB,YAAYf,GAAGc,MAAM,CAACxB;AAC5B,MAAM0B,aAAahB,GAAGc,MAAM,CAACzB;AAC7B,MAAM4B,gBAAgBjB,GAAGc,MAAM,CAACvB;AAChC,MAAM2B,mBAAmBlB,GAAGc,MAAM,CAACrB;AAEnCI,SAAS,wBAAwB;IAC/BD,UAAU;QACRI,GAAGmB,aAAa;IAClB;IAEApB,KAAK,mCAAmC;QACtC,MAAM,EAACqB,MAAM,EAAC,GAAG,MAAM5B,WAAW;YAAC;SAA6B;QAEhEM,OAAOsB,QAAQC,qBAAqB,CAAC,CAAC;;;;;;;;;;;;;;;IAetC,CAAC;IACH;IAEAtB,KAAK,0CAA0C;QAC7Cc,UACGS,qBAAqB,CAAC,kBAAkB,QAAQ;SAChDA,qBAAqB,CAAC,iBAAgB,OAAO;QAEhDP,UAAUR,iBAAiB,CAACgB;QAC5BP,WAAWQ,iBAAiB,CAAC,IAAIC,MAAM;QACvCR,cAAcV,iBAAiB,CAACgB;QAEhC,MAAM,EAACG,MAAM,EAAEN,MAAM,EAAC,GAAG,MAAMzB,YAAYM,0BAA0B,EAAE;QAEvEH,OAAO4B,QAAQC,IAAI,CAAC;QACpB7B,OAAOsB,QAAQQ,SAAS,CAAC;QACzB9B,OAAOsB,QAAQQ,SAAS,CAAC;QACzB9B,OAAOsB,QAAQQ,SAAS,CAAC;QACzB9B,OAAOsB,QAAQQ,SAAS,CAAC;QAEzB9B,OAAOiB,WAAWc,oBAAoB,CAAC,yBAAyB;YAACC,WAAW;QAAI;QAChFhC,OAAOkB,YAAYa,oBAAoB,CAAC;QACxC/B,OAAOmB,eAAeY,oBAAoB,CACxC,yCACA/B,OAAOiC,gBAAgB,CAAC;QAE1BjC,OAAOmB,eAAeY,oBAAoB,CACxC,yCACA/B,OAAOiC,gBAAgB,CAAC;IAE5B;IAEAhC,KAAK,8DAA8D;QACjE,yEAAyE;QACzEc,UACGS,qBAAqB,CAAC,uBAAuB,QAAQ;SACrDA,qBAAqB,CAAC,mBAAkB,sBAAsB;QAEjEP,UAAUR,iBAAiB,CAACgB;QAC5BP,WAAWQ,iBAAiB,CAAC,IAAIC,MAAM;QACvCR,cAAcV,iBAAiB,CAACgB;QAEhC,MAAM5B,YAAYM,0BAA0B,EAAE;QAE9C,gDAAgD;QAChDH,OAAOmB,eAAeY,oBAAoB,CACxC/B,OAAOkC,cAAc,CAAC,mBACtBlC,OAAOmC,GAAG,CAACC;IAEf;IAEAnC,KAAK,0CAA0C;QAC7Cc,UAAUS,qBAAqB,CAAC,mBAAmBA,qBAAqB,CAAC;QAEzEP,UAAUR,iBAAiB,CAACgB;QAC5BP,WAAWT,iBAAiB,CAACgB;QAC7BN,cAAcV,iBAAiB,CAACgB;QAEhC,MAAM,EAACY,KAAK,EAAC,GAAG,MAAMxC,YAAYM,0BAA0B,EAAE;QAE9DH,OAAOqC,OAAOC,SAASR,SAAS,CAAC;QACjC9B,OAAOqC,OAAOE,OAAOC,MAAMX,IAAI,CAAC;QAChC7B,OAAOmB,eAAesB,GAAG,CAACC,gBAAgB;IAC5C;IAEAzC,KAAK0C,IAAI,CAAC;QACR;YAAC;YAAoC,CAAC;SAAE;QACxC;YAAC;YAA8C;gBAAC9B,cAAc,CAAC;YAAC;SAAE;KACnE,EAAE,yBAAyB,OAAO+B,GAAGC;QACpCzB,iBAAiBX,iBAAiB,CAACoC;QAEnC,MAAM,EAACR,KAAK,EAAC,GAAG,MAAMxC,YAAYM,0BAA0B,EAAE;QAE9DH,OAAOqC,OAAOC,SAASR,SAAS,CAAC;QACjC9B,OAAOqC,OAAOE,OAAOC,MAAMX,IAAI,CAAC;IAClC;IAEA5B,KAAK,gDAAgD;QACnDmB,iBAAiBX,iBAAiB,CAAC;YACjCI,cAAc;gBACZC,aAAa;YACf;QACF;QAEAC,UAAUS,qBAAqB,CAAC,eAAeA,qBAAqB,CAAC;QAErEP,UAAUR,iBAAiB,CAACgB;QAC5BP,WAAWQ,iBAAiB,CAAC,IAAIC,MAAM;QACvCR,cAAcV,iBAAiB,CAACgB;QAEhC,MAAM5B,YAAYM,0BAA0B,EAAE;QAE9CH,OAAOiB,WAAWc,oBAAoB,CAAC,qBAAqB;YAACC,WAAW;QAAI;IAC9E;IAEA/B,KAAK,4CAA4C;QAC/Cc,UAAUS,qBAAqB,CAAC,iBAAiBA,qBAAqB,CAAC;QAEvEP,UAAUR,iBAAiB,CAACgB;QAC5BP,WAAWQ,iBAAiB,CAAC,IAAIC,MAAM;QACvCR,cAAcV,iBAAiB,CAACgB;QAEhC,MAAM5B,YAAYM,0BAA0B,EAAE;QAE9C,MAAM2C,YAAY3B,cAAcf,IAAI,CAAC2C,KAAK,CAAC,EAAE;QAC7C,MAAMC,mBAAmBF,WAAW,CAAC,EAAE;QAEvC9C,OAAOgD,kBAAkBzB,qBAAqB,CAAC,CAAC;;;;;;;;;;;;;;;;IAgBhD,CAAC;IACH;AACF"}
1
+ {"version":3,"sources":["../../../../src/commands/media/__tests__/create-aspect.test.ts"],"sourcesContent":["import {access, mkdir, writeFile} from 'node:fs/promises'\n\nimport {runCommand} from '@oclif/test'\nimport {input} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {MediaCreateAspectCommand} from '../create-aspect.js'\n\nvi.mock('node:fs/promises')\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 input: vi.fn(),\n }\n})\n\nconst mockInput = vi.mocked(input)\nconst mockMkdir = vi.mocked(mkdir)\nconst mockAccess = vi.mocked(access)\nconst mockWriteFile = vi.mocked(writeFile)\n\nconst defaultMocks = {\n cliConfig: {\n mediaLibrary: {\n aspectsPath: '/test/project/aspects',\n },\n },\n projectRoot: {\n directory: '/test/project',\n path: '/test/project/sanity.config.ts',\n root: '/test/project',\n type: 'studio' as const,\n },\n}\n\ndescribe('#media:create-aspect', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('should show help text correctly', async () => {\n const {stdout} = await runCommand(['media create-aspect --help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a new aspect definition file\n\n USAGE\n $ sanity media create-aspect\n\n DESCRIPTION\n Create a new aspect definition file\n\n EXAMPLES\n Create a new aspect definition file\n\n $ sanity media create-aspect\n\n \"\n `)\n })\n\n test('should create aspect file successfully', async () => {\n mockInput\n .mockResolvedValueOnce('My Test Aspect') // title\n .mockResolvedValueOnce('myTestAspect') // name\n\n mockMkdir.mockResolvedValue(undefined)\n mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'))\n mockWriteFile.mockResolvedValue(undefined)\n\n const {stderr, stdout} = await testCommand(MediaCreateAspectCommand, [], {mocks: defaultMocks})\n\n expect(stderr).toBe('')\n expect(stdout).toContain('✓ Aspect created!')\n expect(stdout).toContain('myTestAspect.ts')\n expect(stdout).toContain('Next steps:')\n expect(stdout).toContain('sanity media deploy-aspect myTestAspect')\n\n expect(mockMkdir).toHaveBeenCalledWith('/test/project/aspects', {recursive: true})\n expect(mockAccess).toHaveBeenCalledWith('/test/project/aspects/myTestAspect.ts')\n expect(mockWriteFile).toHaveBeenCalledWith(\n '/test/project/aspects/myTestAspect.ts',\n expect.stringContaining(\"name: 'myTestAspect'\"),\n )\n expect(mockWriteFile).toHaveBeenCalledWith(\n '/test/project/aspects/myTestAspect.ts',\n expect.stringContaining(\"title: 'My Test Aspect'\"),\n )\n })\n\n test('should generate safe name from title when no name provided', async () => {\n // Mock user inputs - no name provided, should use default based on title\n mockInput\n .mockResolvedValueOnce('My Complex Title!@#') // title\n .mockResolvedValueOnce('myComplexTitle') // name based on title\n\n mockMkdir.mockResolvedValue(undefined)\n mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'))\n mockWriteFile.mockResolvedValue(undefined)\n\n await testCommand(MediaCreateAspectCommand, [], {mocks: defaultMocks})\n\n // Should have called writeFile with a safe name\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringMatching(/myComplexTitle/),\n expect.any(String),\n )\n })\n\n test('should handle file conflict gracefully', async () => {\n mockInput.mockResolvedValueOnce('Existing Aspect').mockResolvedValueOnce('existingAspect')\n\n mockMkdir.mockResolvedValue(undefined)\n mockAccess.mockResolvedValue(undefined)\n mockWriteFile.mockResolvedValue(undefined)\n\n const {error} = await testCommand(MediaCreateAspectCommand, [], {mocks: defaultMocks})\n\n expect(error?.message).toContain('A file already exists at')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockWriteFile).not.toHaveBeenCalled()\n })\n\n test.each([\n ['when mediaLibrary not configured', {}],\n ['when mediaLibrary.aspectsPath is undefined', {mediaLibrary: {}}],\n ])('should throw error %s', async (_, config) => {\n const {error} = await testCommand(MediaCreateAspectCommand, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: config,\n },\n })\n\n expect(error?.message).toContain('media library aspects path')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should create directory if it does not exist', async () => {\n mockInput.mockResolvedValueOnce('Test Aspect').mockResolvedValueOnce('testAspect')\n\n mockMkdir.mockResolvedValue(undefined)\n mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'))\n mockWriteFile.mockResolvedValue(undefined)\n\n await testCommand(MediaCreateAspectCommand, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {\n mediaLibrary: {\n aspectsPath: '/new/aspects/path',\n },\n },\n },\n })\n\n expect(mockMkdir).toHaveBeenCalledWith('/new/aspects/path', {recursive: true})\n })\n\n test('should generate correct template content', async () => {\n mockInput.mockResolvedValueOnce('Custom Aspect').mockResolvedValueOnce('customAspect')\n\n mockMkdir.mockResolvedValue(undefined)\n mockAccess.mockRejectedValue(new Error('ENOENT: no such file or directory'))\n mockWriteFile.mockResolvedValue(undefined)\n\n await testCommand(MediaCreateAspectCommand, [], {mocks: defaultMocks})\n\n const writeCall = mockWriteFile.mock.calls[0]\n const generatedContent = writeCall?.[1] as string\n\n expect(generatedContent).toMatchInlineSnapshot(`\n \"import {defineAssetAspect, defineField} from 'sanity'\n\n export default defineAssetAspect({\n name: 'customAspect',\n title: 'Custom Aspect',\n type: 'object',\n fields: [\n defineField({\n name: 'string',\n title: 'Plain String',\n type: 'string',\n }),\n ],\n })\n \"\n `)\n })\n})\n"],"names":["access","mkdir","writeFile","runCommand","input","testCommand","afterEach","describe","expect","test","vi","MediaCreateAspectCommand","mock","actual","importActual","fn","mockInput","mocked","mockMkdir","mockAccess","mockWriteFile","defaultMocks","cliConfig","mediaLibrary","aspectsPath","projectRoot","directory","path","root","type","clearAllMocks","stdout","toMatchInlineSnapshot","mockResolvedValueOnce","mockResolvedValue","undefined","mockRejectedValue","Error","stderr","mocks","toBe","toContain","toHaveBeenCalledWith","recursive","stringContaining","stringMatching","any","String","error","message","oclif","exit","not","toHaveBeenCalled","each","_","config","writeCall","calls","generatedContent"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { runCommand } from '@oclif/test';
2
- import { getCliConfig } from '@sanity/cli-core';
3
2
  import { confirm, select } from '@sanity/cli-core/ux';
4
3
  import { mockApi, testCommand } from '@sanity/cli-test';
5
4
  import nock from 'nock';
@@ -15,35 +14,25 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
15
14
  select: vi.fn()
16
15
  };
17
16
  });
18
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
19
- findProjectRoot: vi.fn().mockResolvedValue({
20
- directory: '/test/project',
21
- root: '/test/project',
22
- type: 'studio'
23
- })
24
- }));
25
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
26
- getCliConfig: vi.fn().mockResolvedValue({
27
- api: {
28
- projectId: 'test-project-id'
29
- }
30
- })
31
- }));
32
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
33
- getCliToken: vi.fn().mockResolvedValue('test-token')
34
- }));
35
17
  const mockConfirm = vi.mocked(confirm);
36
18
  const mockSelect = vi.mocked(select);
37
- const mockGetCliConfig = vi.mocked(getCliConfig);
19
+ const defaultMocks = {
20
+ cliConfig: {
21
+ api: {
22
+ projectId: 'test-project-id'
23
+ }
24
+ },
25
+ projectRoot: {
26
+ directory: '/test/project',
27
+ path: '/test/project/sanity.config.ts',
28
+ root: '/test/project',
29
+ type: 'studio'
30
+ },
31
+ token: 'test-token'
32
+ };
38
33
  describe('#media:delete-aspect', ()=>{
39
34
  afterEach(()=>{
40
35
  vi.clearAllMocks();
41
- // Reset getCliConfig mock to default
42
- mockGetCliConfig.mockResolvedValue({
43
- api: {
44
- projectId: 'test-project-id'
45
- }
46
- });
47
36
  const pending = nock.pendingMocks();
48
37
  nock.cleanAll();
49
38
  expect(pending, 'pending mocks').toEqual([]);
@@ -77,7 +66,9 @@ describe('#media:delete-aspect', ()=>{
77
66
  `);
78
67
  });
79
68
  test('should error if aspect name is not provided', async ()=>{
80
- const { error } = await testCommand(MediaDeleteAspectCommand, []);
69
+ const { error } = await testCommand(MediaDeleteAspectCommand, [], {
70
+ mocks: defaultMocks
71
+ });
81
72
  expect(error?.message).toMatchInlineSnapshot(`
82
73
  "Missing 1 required arg:
83
74
  aspectName Name of the aspect to delete
@@ -86,10 +77,14 @@ describe('#media:delete-aspect', ()=>{
86
77
  expect(error?.oclif?.exit).toBe(2);
87
78
  });
88
79
  test('should error if project ID is not configured', async ()=>{
89
- mockGetCliConfig.mockResolvedValue({});
90
80
  const { error } = await testCommand(MediaDeleteAspectCommand, [
91
81
  'myAspect'
92
- ]);
82
+ ], {
83
+ mocks: {
84
+ ...defaultMocks,
85
+ cliConfig: {}
86
+ }
87
+ });
93
88
  expect(error?.message).toContain(NO_PROJECT_ID);
94
89
  expect(error?.oclif?.exit).toBe(1);
95
90
  });
@@ -126,7 +121,9 @@ describe('#media:delete-aspect', ()=>{
126
121
  });
127
122
  const { error, stdout } = await testCommand(MediaDeleteAspectCommand, [
128
123
  'myAspect'
129
- ]);
124
+ ], {
125
+ mocks: defaultMocks
126
+ });
130
127
  if (error) {
131
128
  console.log('ERROR:', error.message);
132
129
  }
@@ -171,7 +168,9 @@ describe('#media:delete-aspect', ()=>{
171
168
  await testCommand(MediaDeleteAspectCommand, [
172
169
  'myAspect',
173
170
  '--yes'
174
- ]);
171
+ ], {
172
+ mocks: defaultMocks
173
+ });
175
174
  expect(mockConfirm).not.toHaveBeenCalled();
176
175
  });
177
176
  test('should cancel operation if user declines confirmation', async ()=>{
@@ -196,7 +195,9 @@ describe('#media:delete-aspect', ()=>{
196
195
  mockConfirm.mockResolvedValue(false);
197
196
  const { stdout } = await testCommand(MediaDeleteAspectCommand, [
198
197
  'myAspect'
199
- ]);
198
+ ], {
199
+ mocks: defaultMocks
200
+ });
200
201
  expect(mockConfirm).toHaveBeenCalled();
201
202
  expect(stdout).toContain('Operation cancelled');
202
203
  });
@@ -218,7 +219,9 @@ describe('#media:delete-aspect', ()=>{
218
219
  '--media-library-id',
219
220
  'custom-library-id',
220
221
  '--yes'
221
- ]);
222
+ ], {
223
+ mocks: defaultMocks
224
+ });
222
225
  expect(mockSelect).not.toHaveBeenCalled();
223
226
  });
224
227
  test('should warn if aspect does not exist', async ()=>{
@@ -251,7 +254,9 @@ describe('#media:delete-aspect', ()=>{
251
254
  const { stderr, stdout } = await testCommand(MediaDeleteAspectCommand, [
252
255
  'nonExistentAspect',
253
256
  '--yes'
254
- ]);
257
+ ], {
258
+ mocks: defaultMocks
259
+ });
255
260
  expect(stderr).toContain("There's no deployed aspect with that name");
256
261
  expect(stdout).toContain('nonExistentAspect');
257
262
  });
@@ -285,7 +290,9 @@ describe('#media:delete-aspect', ()=>{
285
290
  const { error } = await testCommand(MediaDeleteAspectCommand, [
286
291
  'myAspect',
287
292
  '--yes'
288
- ]);
293
+ ], {
294
+ mocks: defaultMocks
295
+ });
289
296
  expect(error?.message).toContain('Failed to delete aspect');
290
297
  expect(error?.oclif?.exit).toBe(1);
291
298
  });
@@ -323,7 +330,9 @@ describe('#media:delete-aspect', ()=>{
323
330
  await testCommand(MediaDeleteAspectCommand, [
324
331
  'myAspect',
325
332
  '--yes'
326
- ]);
333
+ ], {
334
+ mocks: defaultMocks
335
+ });
327
336
  expect(mockSelect).toHaveBeenCalledWith(expect.objectContaining({
328
337
  message: 'Select media library'
329
338
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/media/__tests__/delete-aspect.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig} from '@sanity/cli-core'\nimport {confirm, select} from '@sanity/cli-core/ux'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {MEDIA_LIBRARY_API_VERSION} from '../../../services/mediaLibraries.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {MediaDeleteAspectCommand} from '../delete-aspect.js'\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 select: vi.fn(),\n }\n})\n\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/project',\n root: '/test/project',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n projectId: 'test-project-id',\n },\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nconst mockConfirm = vi.mocked(confirm)\nconst mockSelect = vi.mocked(select)\nconst mockGetCliConfig = vi.mocked(getCliConfig)\n\ndescribe('#media:delete-aspect', () => {\n afterEach(() => {\n vi.clearAllMocks()\n // Reset getCliConfig mock to default\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project-id',\n },\n })\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('should show help text correctly', async () => {\n const {stdout} = await runCommand(['media delete-aspect --help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Undeploy an aspect\n\n USAGE\n $ sanity media delete-aspect ASPECTNAME [--media-library-id <value>] [--yes]\n\n ARGUMENTS\n ASPECTNAME Name of the aspect to delete\n\n FLAGS\n --media-library-id=<value> The id of the target media library\n --yes Skip confirmation prompt\n\n DESCRIPTION\n Undeploy an aspect\n\n EXAMPLES\n Delete the aspect named \"someAspect\"\n\n $ sanity media delete-aspect someAspect\n\n \"\n `)\n })\n\n test('should error if aspect name is not provided', async () => {\n const {error} = await testCommand(MediaDeleteAspectCommand, [])\n\n expect(error?.message).toMatchInlineSnapshot(`\n \"Missing 1 required arg:\n aspectName Name of the aspect to delete\n See more help with --help\"\n `)\n expect(error?.oclif?.exit).toBe(2)\n })\n\n test('should error if project ID is not configured', async () => {\n mockGetCliConfig.mockResolvedValue({})\n\n const {error} = await testCommand(MediaDeleteAspectCommand, ['myAspect'])\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should successfully delete an aspect with confirmation', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'test-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('test-library-id')\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/test-library-id/mutate',\n }).reply(200, {results: [{id: 'myAspect'}]})\n\n const {error, stdout} = await testCommand(MediaDeleteAspectCommand, ['myAspect'])\n\n if (error) {\n console.log('ERROR:', error.message)\n }\n\n expect(mockConfirm).toHaveBeenCalledWith({\n default: false,\n message: expect.stringContaining('Are you absolutely sure'),\n })\n expect(stdout).toContain('✓')\n expect(stdout).toContain('Deleted aspect')\n expect(stdout).toContain('myAspect')\n })\n\n test('should skip confirmation with --yes flag', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'test-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('test-library-id')\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/test-library-id/mutate',\n }).reply(200, {results: [{id: 'myAspect'}]})\n\n await testCommand(MediaDeleteAspectCommand, ['myAspect', '--yes'])\n\n expect(mockConfirm).not.toHaveBeenCalled()\n })\n\n test('should cancel operation if user declines confirmation', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'test-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('test-library-id')\n mockConfirm.mockResolvedValue(false)\n\n const {stdout} = await testCommand(MediaDeleteAspectCommand, ['myAspect'])\n\n expect(mockConfirm).toHaveBeenCalled()\n expect(stdout).toContain('Operation cancelled')\n })\n\n test('should use --media-library-id flag when provided', async () => {\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/custom-library-id/mutate',\n }).reply(200, {results: [{id: 'myAspect'}]})\n\n await testCommand(MediaDeleteAspectCommand, [\n 'myAspect',\n '--media-library-id',\n 'custom-library-id',\n '--yes',\n ])\n\n expect(mockSelect).not.toHaveBeenCalled()\n })\n\n test('should warn if aspect does not exist', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'test-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('test-library-id')\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/test-library-id/mutate',\n }).reply(200, {results: []})\n\n const {stderr, stdout} = await testCommand(MediaDeleteAspectCommand, [\n 'nonExistentAspect',\n '--yes',\n ])\n\n expect(stderr).toContain(\"There's no deployed aspect with that name\")\n expect(stdout).toContain('nonExistentAspect')\n })\n\n test('should handle API errors gracefully', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'test-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('test-library-id')\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/test-library-id/mutate',\n }).reply(500, {message: 'Network timeout'})\n\n const {error} = await testCommand(MediaDeleteAspectCommand, ['myAspect', '--yes'])\n\n expect(error?.message).toContain('Failed to delete aspect')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fetch and present media libraries for selection', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'selected-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('selected-library-id')\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/selected-library-id/mutate',\n }).reply(200, {results: [{id: 'myAspect'}]})\n\n await testCommand(MediaDeleteAspectCommand, ['myAspect', '--yes'])\n\n expect(mockSelect).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Select media library',\n }),\n )\n })\n})\n"],"names":["runCommand","getCliConfig","confirm","select","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","MEDIA_LIBRARY_API_VERSION","NO_PROJECT_ID","MediaDeleteAspectCommand","mock","actual","importActual","fn","findProjectRoot","mockResolvedValue","directory","root","type","api","projectId","getCliToken","mockConfirm","mocked","mockSelect","mockGetCliConfig","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","error","message","oclif","exit","toBe","toContain","apiVersion","method","query","uri","reply","data","id","organizationId","status","results","console","log","toHaveBeenCalledWith","default","stringContaining","not","toHaveBeenCalled","stderr","objectContaining"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/commands/media/__tests__/delete-aspect.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {confirm, select} from '@sanity/cli-core/ux'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {MEDIA_LIBRARY_API_VERSION} from '../../../services/mediaLibraries.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {MediaDeleteAspectCommand} from '../delete-aspect.js'\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 select: vi.fn(),\n }\n})\n\nconst mockConfirm = vi.mocked(confirm)\nconst mockSelect = vi.mocked(select)\n\nconst defaultMocks = {\n cliConfig: {\n api: {\n projectId: 'test-project-id',\n },\n },\n projectRoot: {\n directory: '/test/project',\n path: '/test/project/sanity.config.ts',\n root: '/test/project',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\ndescribe('#media:delete-aspect', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('should show help text correctly', async () => {\n const {stdout} = await runCommand(['media delete-aspect --help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Undeploy an aspect\n\n USAGE\n $ sanity media delete-aspect ASPECTNAME [--media-library-id <value>] [--yes]\n\n ARGUMENTS\n ASPECTNAME Name of the aspect to delete\n\n FLAGS\n --media-library-id=<value> The id of the target media library\n --yes Skip confirmation prompt\n\n DESCRIPTION\n Undeploy an aspect\n\n EXAMPLES\n Delete the aspect named \"someAspect\"\n\n $ sanity media delete-aspect someAspect\n\n \"\n `)\n })\n\n test('should error if aspect name is not provided', async () => {\n const {error} = await testCommand(MediaDeleteAspectCommand, [], {mocks: defaultMocks})\n\n expect(error?.message).toMatchInlineSnapshot(`\n \"Missing 1 required arg:\n aspectName Name of the aspect to delete\n See more help with --help\"\n `)\n expect(error?.oclif?.exit).toBe(2)\n })\n\n test('should error if project ID is not configured', async () => {\n const {error} = await testCommand(MediaDeleteAspectCommand, ['myAspect'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {},\n },\n })\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should successfully delete an aspect with confirmation', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'test-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('test-library-id')\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/test-library-id/mutate',\n }).reply(200, {results: [{id: 'myAspect'}]})\n\n const {error, stdout} = await testCommand(MediaDeleteAspectCommand, ['myAspect'], {\n mocks: defaultMocks,\n })\n\n if (error) {\n console.log('ERROR:', error.message)\n }\n\n expect(mockConfirm).toHaveBeenCalledWith({\n default: false,\n message: expect.stringContaining('Are you absolutely sure'),\n })\n expect(stdout).toContain('✓')\n expect(stdout).toContain('Deleted aspect')\n expect(stdout).toContain('myAspect')\n })\n\n test('should skip confirmation with --yes flag', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'test-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('test-library-id')\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/test-library-id/mutate',\n }).reply(200, {results: [{id: 'myAspect'}]})\n\n await testCommand(MediaDeleteAspectCommand, ['myAspect', '--yes'], {mocks: defaultMocks})\n\n expect(mockConfirm).not.toHaveBeenCalled()\n })\n\n test('should cancel operation if user declines confirmation', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'test-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('test-library-id')\n mockConfirm.mockResolvedValue(false)\n\n const {stdout} = await testCommand(MediaDeleteAspectCommand, ['myAspect'], {\n mocks: defaultMocks,\n })\n\n expect(mockConfirm).toHaveBeenCalled()\n expect(stdout).toContain('Operation cancelled')\n })\n\n test('should use --media-library-id flag when provided', async () => {\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/custom-library-id/mutate',\n }).reply(200, {results: [{id: 'myAspect'}]})\n\n await testCommand(\n MediaDeleteAspectCommand,\n ['myAspect', '--media-library-id', 'custom-library-id', '--yes'],\n {mocks: defaultMocks},\n )\n\n expect(mockSelect).not.toHaveBeenCalled()\n })\n\n test('should warn if aspect does not exist', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'test-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('test-library-id')\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/test-library-id/mutate',\n }).reply(200, {results: []})\n\n const {stderr, stdout} = await testCommand(\n MediaDeleteAspectCommand,\n ['nonExistentAspect', '--yes'],\n {mocks: defaultMocks},\n )\n\n expect(stderr).toContain(\"There's no deployed aspect with that name\")\n expect(stdout).toContain('nonExistentAspect')\n })\n\n test('should handle API errors gracefully', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'test-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('test-library-id')\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/test-library-id/mutate',\n }).reply(500, {message: 'Network timeout'})\n\n const {error} = await testCommand(MediaDeleteAspectCommand, ['myAspect', '--yes'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Failed to delete aspect')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fetch and present media libraries for selection', async () => {\n // Mock the media libraries API call\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'get',\n query: {projectId: 'test-project-id'},\n uri: '/media-libraries',\n }).reply(200, {\n data: [\n {\n id: 'selected-library-id',\n organizationId: 'test-org-id',\n status: 'active',\n },\n ],\n })\n\n mockSelect.mockResolvedValue('selected-library-id')\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n method: 'post',\n uri: '/media-libraries/selected-library-id/mutate',\n }).reply(200, {results: [{id: 'myAspect'}]})\n\n await testCommand(MediaDeleteAspectCommand, ['myAspect', '--yes'], {mocks: defaultMocks})\n\n expect(mockSelect).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Select media library',\n }),\n )\n })\n})\n"],"names":["runCommand","confirm","select","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","MEDIA_LIBRARY_API_VERSION","NO_PROJECT_ID","MediaDeleteAspectCommand","mock","actual","importActual","fn","mockConfirm","mocked","mockSelect","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","root","type","token","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","error","mocks","message","oclif","exit","toBe","toContain","apiVersion","method","query","uri","reply","data","id","organizationId","status","mockResolvedValue","results","console","log","toHaveBeenCalledWith","default","stringContaining","not","toHaveBeenCalled","stderr","objectContaining"],"mappings":"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"}