@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,6 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import { runCommand } from '@oclif/test';
3
- import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
3
+ import { getProjectCliClient } from '@sanity/cli-core';
4
4
  import { input, select } from '@sanity/cli-core/ux';
5
5
  import { testCommand } from '@sanity/cli-test';
6
6
  import { exportDataset } from '@sanity/export';
@@ -18,34 +18,24 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
18
18
  select: vi.fn()
19
19
  };
20
20
  });
21
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
22
- findProjectRoot: vi.fn().mockResolvedValue({
23
- directory: '/test/path',
24
- root: '/test/path',
25
- type: 'studio'
26
- })
27
- }));
28
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
29
- getCliConfig: vi.fn()
30
- }));
31
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
32
- getCliToken: vi.fn().mockResolvedValue('test-token')
33
- }));
34
- vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
35
- getProjectCliClient: vi.fn()
36
- }));
37
21
  vi.mock('node:fs/promises', ()=>({
38
22
  default: {
39
23
  mkdir: vi.fn().mockResolvedValue(undefined),
40
24
  stat: vi.fn()
41
25
  }
42
26
  }));
27
+ vi.mock('@sanity/cli-core', async ()=>{
28
+ const actual = await vi.importActual('@sanity/cli-core');
29
+ return {
30
+ ...actual,
31
+ getProjectCliClient: vi.fn()
32
+ };
33
+ });
43
34
  const mockExportDataset = vi.mocked(exportDataset);
44
35
  const mockInput = vi.mocked(input);
45
36
  const mockSelect = vi.mocked(select);
46
- const mockGetCliConfig = vi.mocked(getCliConfig);
47
- const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
48
37
  const mockFs = vi.mocked(fs);
38
+ const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
49
39
  const TEST_CONFIG = {
50
40
  DATASET: 'production',
51
41
  PROJECT_ID: 'test-project'
@@ -61,6 +51,20 @@ const ERROR_MESSAGES = {
61
51
  EXPORT_FAILED: 'Export failed',
62
52
  USE_OVERWRITE: '--overwrite'
63
53
  };
54
+ const defaultMocks = {
55
+ cliConfig: {
56
+ api: {
57
+ dataset: TEST_CONFIG.DATASET,
58
+ projectId: TEST_CONFIG.PROJECT_ID
59
+ }
60
+ },
61
+ projectRoot: {
62
+ directory: '/test/path',
63
+ path: '/test/path/sanity.config.ts',
64
+ type: 'studio'
65
+ },
66
+ token: 'test-token'
67
+ };
64
68
  const createTestContext = (overrides = {})=>{
65
69
  const defaults = {
66
70
  dataset: TEST_CONFIG.DATASET,
@@ -80,20 +84,6 @@ const createTestContext = (overrides = {})=>{
80
84
  ...defaults,
81
85
  ...overrides
82
86
  };
83
- // Setup CLI config
84
- const apiConfig = {
85
- projectId: context.projectId
86
- };
87
- if (context.dataset) apiConfig.dataset = context.dataset;
88
- mockGetCliConfig.mockResolvedValue({
89
- api: apiConfig
90
- });
91
- // Setup project client
92
- mockGetProjectCliClient.mockResolvedValue({
93
- datasets: {
94
- list: vi.fn().mockResolvedValue(context.datasets)
95
- }
96
- });
97
87
  // Setup file system
98
88
  if (context.fileExists) {
99
89
  mockFs.stat.mockResolvedValue({
@@ -110,7 +100,23 @@ const createTestContext = (overrides = {})=>{
110
100
  if (context.inputValue) {
111
101
  mockInput.mockResolvedValueOnce(context.inputValue);
112
102
  }
113
- return context;
103
+ const apiConfig = {
104
+ projectId: context.projectId
105
+ };
106
+ if (context.dataset) apiConfig.dataset = context.dataset;
107
+ mockGetProjectCliClient.mockResolvedValue({
108
+ datasets: {
109
+ list: vi.fn().mockResolvedValue(context.datasets)
110
+ }
111
+ });
112
+ return {
113
+ mocks: {
114
+ ...defaultMocks,
115
+ cliConfig: {
116
+ api: apiConfig
117
+ }
118
+ }
119
+ };
114
120
  };
115
121
  describe('#dataset:export', ()=>{
116
122
  afterEach(()=>{
@@ -147,7 +153,7 @@ describe('#dataset:export', ()=>{
147
153
  shouldShowDetails: false
148
154
  }
149
155
  ])('exports dataset $description', async ({ args, expectedPathPattern, inputValue, shouldShowDetails })=>{
150
- createTestContext({
156
+ const { mocks } = createTestContext({
151
157
  datasets: [
152
158
  {
153
159
  name: 'production'
@@ -155,7 +161,9 @@ describe('#dataset:export', ()=>{
155
161
  ],
156
162
  inputValue
157
163
  });
158
- const { stdout } = await testCommand(DatasetExportCommand, args);
164
+ const { stdout } = await testCommand(DatasetExportCommand, args, {
165
+ mocks
166
+ });
159
167
  expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
160
168
  assetConcurrency: 8,
161
169
  assets: true,
@@ -176,7 +184,7 @@ describe('#dataset:export', ()=>{
176
184
  }
177
185
  });
178
186
  test('exports to stdout with dash', async ()=>{
179
- createTestContext({
187
+ const { mocks } = createTestContext({
180
188
  datasets: [
181
189
  {
182
190
  name: 'production'
@@ -186,13 +194,15 @@ describe('#dataset:export', ()=>{
186
194
  await testCommand(DatasetExportCommand, [
187
195
  'production',
188
196
  '-'
189
- ]);
197
+ ], {
198
+ mocks
199
+ });
190
200
  expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
191
201
  outputPath: process.stdout
192
202
  }));
193
203
  });
194
204
  test('prompts for destination when not provided as argument', async ()=>{
195
- createTestContext({
205
+ const { mocks } = createTestContext({
196
206
  datasets: [
197
207
  {
198
208
  name: 'production'
@@ -202,7 +212,9 @@ describe('#dataset:export', ()=>{
202
212
  });
203
213
  await testCommand(DatasetExportCommand, [
204
214
  'production'
205
- ]);
215
+ ], {
216
+ mocks
217
+ });
206
218
  expect(mockInput).toHaveBeenCalledWith({
207
219
  default: expect.stringMatching(/production\.tar\.gz$/),
208
220
  message: 'Output path:',
@@ -216,12 +228,14 @@ describe('#dataset:export', ()=>{
216
228
  });
217
229
  describe('dataset selection', ()=>{
218
230
  test('prompts for dataset selection when none specified', async ()=>{
219
- createTestContext({
231
+ const { mocks } = createTestContext({
220
232
  dataset: null,
221
233
  inputValue: 'staging.tar.gz',
222
234
  selectValue: 'staging'
223
235
  });
224
- await testCommand(DatasetExportCommand, []);
236
+ await testCommand(DatasetExportCommand, [], {
237
+ mocks
238
+ });
225
239
  expect(mockSelect).toHaveBeenCalledWith({
226
240
  choices: [
227
241
  {
@@ -240,7 +254,7 @@ describe('#dataset:export', ()=>{
240
254
  }));
241
255
  });
242
256
  test('uses and announces default dataset from config', async ()=>{
243
- createTestContext({
257
+ const { mocks } = createTestContext({
244
258
  dataset: 'staging',
245
259
  datasets: [
246
260
  {
@@ -249,14 +263,16 @@ describe('#dataset:export', ()=>{
249
263
  ],
250
264
  inputValue: 'staging.tar.gz'
251
265
  });
252
- const { stdout } = await testCommand(DatasetExportCommand, []);
266
+ const { stdout } = await testCommand(DatasetExportCommand, [], {
267
+ mocks
268
+ });
253
269
  expect(stdout).toContain('Using default dataset: staging');
254
270
  expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
255
271
  dataset: 'staging'
256
272
  }));
257
273
  });
258
274
  test('validates dataset exists in project', async ()=>{
259
- createTestContext({
275
+ const { mocks } = createTestContext({
260
276
  datasets: [
261
277
  {
262
278
  name: 'production'
@@ -266,14 +282,16 @@ describe('#dataset:export', ()=>{
266
282
  const { error } = await testCommand(DatasetExportCommand, [
267
283
  'staging',
268
284
  TEST_OUTPUTS.TAR_GZ
269
- ]);
285
+ ], {
286
+ mocks
287
+ });
270
288
  expect(error?.message).toContain(`${ERROR_MESSAGES.DATASET_NOT_FOUND} "staging" not found`);
271
289
  expect(error?.oclif?.exit).toBe(1);
272
290
  });
273
291
  });
274
292
  describe('file operations', ()=>{
275
293
  test('creates parent directory for nested output paths', async ()=>{
276
- createTestContext({
294
+ const { mocks } = createTestContext({
277
295
  datasets: [
278
296
  {
279
297
  name: 'production'
@@ -283,13 +301,15 @@ describe('#dataset:export', ()=>{
283
301
  await testCommand(DatasetExportCommand, [
284
302
  'production',
285
303
  TEST_OUTPUTS.SUBDIR
286
- ]);
304
+ ], {
305
+ mocks
306
+ });
287
307
  expect(mockFs.mkdir).toHaveBeenCalledWith(expect.stringMatching(/subdir$/), {
288
308
  recursive: true
289
309
  });
290
310
  });
291
311
  test('prevents overwrite without flag', async ()=>{
292
- createTestContext({
312
+ const { mocks } = createTestContext({
293
313
  datasets: [
294
314
  {
295
315
  name: 'production'
@@ -300,13 +320,15 @@ describe('#dataset:export', ()=>{
300
320
  const { error } = await testCommand(DatasetExportCommand, [
301
321
  'production',
302
322
  TEST_OUTPUTS.EXISTING
303
- ]);
323
+ ], {
324
+ mocks
325
+ });
304
326
  expect(error?.message).toContain(ERROR_MESSAGES.ALREADY_EXISTS);
305
327
  expect(error?.message).toContain(ERROR_MESSAGES.USE_OVERWRITE);
306
328
  expect(error?.oclif?.exit).toBe(1);
307
329
  });
308
330
  test('allows overwrite with flag', async ()=>{
309
- createTestContext({
331
+ const { mocks } = createTestContext({
310
332
  datasets: [
311
333
  {
312
334
  name: 'production'
@@ -318,11 +340,13 @@ describe('#dataset:export', ()=>{
318
340
  'production',
319
341
  TEST_OUTPUTS.EXISTING,
320
342
  '--overwrite'
321
- ]);
343
+ ], {
344
+ mocks
345
+ });
322
346
  expect(mockExportDataset).toHaveBeenCalled();
323
347
  });
324
348
  test('handles directory creation errors gracefully', async ()=>{
325
- createTestContext({
349
+ const { mocks } = createTestContext({
326
350
  datasets: [
327
351
  {
328
352
  name: 'production'
@@ -336,13 +360,15 @@ describe('#dataset:export', ()=>{
336
360
  const { error } = await testCommand(DatasetExportCommand, [
337
361
  'production',
338
362
  TEST_OUTPUTS.SUBDIR
339
- ]);
363
+ ], {
364
+ mocks
365
+ });
340
366
  expect(error?.message).toContain('Permission denied: Cannot create directory');
341
367
  expect(error?.message).toContain('Please check write permissions');
342
368
  expect(error?.oclif?.exit).toBe(1);
343
369
  });
344
370
  test('handles other directory creation errors gracefully', async ()=>{
345
- createTestContext({
371
+ const { mocks } = createTestContext({
346
372
  datasets: [
347
373
  {
348
374
  name: 'production'
@@ -355,7 +381,9 @@ describe('#dataset:export', ()=>{
355
381
  const { error } = await testCommand(DatasetExportCommand, [
356
382
  'production',
357
383
  TEST_OUTPUTS.SUBDIR
358
- ]);
384
+ ], {
385
+ mocks
386
+ });
359
387
  expect(error?.message).toContain('Failed to create directory');
360
388
  expect(error?.message).toContain('Disk full');
361
389
  expect(error?.oclif?.exit).toBe(1);
@@ -363,7 +391,7 @@ describe('#dataset:export', ()=>{
363
391
  });
364
392
  describe('export options', ()=>{
365
393
  test('sets assets:false when --no-assets flag is used', async ()=>{
366
- createTestContext({
394
+ const { mocks } = createTestContext({
367
395
  datasets: [
368
396
  {
369
397
  name: 'production'
@@ -374,13 +402,15 @@ describe('#dataset:export', ()=>{
374
402
  'production',
375
403
  TEST_OUTPUTS.TAR_GZ,
376
404
  '--no-assets'
377
- ]);
405
+ ], {
406
+ mocks
407
+ });
378
408
  expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
379
409
  assets: false
380
410
  }));
381
411
  });
382
412
  test('parses comma-separated types with --types flag', async ()=>{
383
- createTestContext({
413
+ const { mocks } = createTestContext({
384
414
  datasets: [
385
415
  {
386
416
  name: 'production'
@@ -392,7 +422,9 @@ describe('#dataset:export', ()=>{
392
422
  TEST_OUTPUTS.TAR_GZ,
393
423
  '--types',
394
424
  'post,author'
395
- ]);
425
+ ], {
426
+ mocks
427
+ });
396
428
  expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
397
429
  types: [
398
430
  'post',
@@ -401,7 +433,7 @@ describe('#dataset:export', ()=>{
401
433
  }));
402
434
  });
403
435
  test('sets raw:true when --raw flag is used', async ()=>{
404
- createTestContext({
436
+ const { mocks } = createTestContext({
405
437
  datasets: [
406
438
  {
407
439
  name: 'production'
@@ -412,13 +444,15 @@ describe('#dataset:export', ()=>{
412
444
  'production',
413
445
  TEST_OUTPUTS.TAR_GZ,
414
446
  '--raw'
415
- ]);
447
+ ], {
448
+ mocks
449
+ });
416
450
  expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
417
451
  raw: true
418
452
  }));
419
453
  });
420
454
  test('sets mode to cursor with --mode flag', async ()=>{
421
- createTestContext({
455
+ const { mocks } = createTestContext({
422
456
  datasets: [
423
457
  {
424
458
  name: 'production'
@@ -430,7 +464,9 @@ describe('#dataset:export', ()=>{
430
464
  TEST_OUTPUTS.TAR_GZ,
431
465
  '--mode',
432
466
  'cursor'
433
- ]);
467
+ ], {
468
+ mocks
469
+ });
434
470
  expect(mockExportDataset).toHaveBeenCalledWith(expect.objectContaining({
435
471
  mode: 'cursor'
436
472
  }));
@@ -438,28 +474,32 @@ describe('#dataset:export', ()=>{
438
474
  });
439
475
  describe('error handling', ()=>{
440
476
  test('fails without project ID', async ()=>{
441
- createTestContext({
477
+ const { mocks } = createTestContext({
442
478
  projectId: undefined
443
479
  });
444
480
  const { error } = await testCommand(DatasetExportCommand, [
445
481
  'production',
446
482
  TEST_OUTPUTS.TAR_GZ
447
- ]);
483
+ ], {
484
+ mocks
485
+ });
448
486
  expect(error?.message).toEqual(NO_PROJECT_ID);
449
487
  expect(error?.oclif?.exit).toBe(1);
450
488
  });
451
489
  test('handles cancelled dataset selection gracefully', async ()=>{
452
- createTestContext({
490
+ const { mocks } = createTestContext({
453
491
  dataset: null
454
492
  });
455
493
  // Mock select to simulate user cancellation (Ctrl+C throws an error)
456
494
  mockSelect.mockRejectedValueOnce(new Error('User cancelled'));
457
- const { error } = await testCommand(DatasetExportCommand, []);
495
+ const { error } = await testCommand(DatasetExportCommand, [], {
496
+ mocks
497
+ });
458
498
  expect(error?.message).toContain('User cancelled');
459
499
  expect(error?.oclif?.exit).toBe(1);
460
500
  });
461
501
  test('handles export errors with detailed error message', async ()=>{
462
- createTestContext({
502
+ const { mocks } = createTestContext({
463
503
  datasets: [
464
504
  {
465
505
  name: 'production'
@@ -471,12 +511,14 @@ describe('#dataset:export', ()=>{
471
511
  const { error } = await testCommand(DatasetExportCommand, [
472
512
  'production',
473
513
  TEST_OUTPUTS.TAR_GZ
474
- ]);
514
+ ], {
515
+ mocks
516
+ });
475
517
  expect(error?.message).toBe(`${ERROR_MESSAGES.EXPORT_FAILED}: Network timeout during export`);
476
518
  expect(error?.oclif?.exit).toBe(1);
477
519
  });
478
520
  test('validates dataset name format', async ()=>{
479
- createTestContext({
521
+ const { mocks } = createTestContext({
480
522
  datasets: [
481
523
  {
482
524
  name: 'production'
@@ -486,19 +528,13 @@ describe('#dataset:export', ()=>{
486
528
  const { error } = await testCommand(DatasetExportCommand, [
487
529
  'INVALID-DATASET',
488
530
  TEST_OUTPUTS.TAR_GZ
489
- ]);
531
+ ], {
532
+ mocks
533
+ });
490
534
  expect(error?.message).toContain('lowercase');
491
535
  expect(error?.oclif?.exit).toBe(1);
492
536
  });
493
537
  test('handles dataset listing errors gracefully', async ()=>{
494
- // Setup basic context but override the datasets.list to throw an error
495
- createTestContext({
496
- datasets: [
497
- {
498
- name: 'production'
499
- }
500
- ]
501
- });
502
538
  const listError = new Error('Network error: Unable to connect to API');
503
539
  mockGetProjectCliClient.mockResolvedValue({
504
540
  datasets: {
@@ -508,13 +544,15 @@ describe('#dataset:export', ()=>{
508
544
  const { error } = await testCommand(DatasetExportCommand, [
509
545
  'production',
510
546
  TEST_OUTPUTS.TAR_GZ
511
- ]);
547
+ ], {
548
+ mocks: defaultMocks
549
+ });
512
550
  expect(error?.message).toContain('Failed to list datasets:');
513
551
  expect(error?.message).toContain('Network error: Unable to connect to API');
514
552
  expect(error?.oclif?.exit).toBe(1);
515
553
  });
516
554
  test('handles progress updates correctly', async ()=>{
517
- createTestContext({
555
+ const { mocks } = createTestContext({
518
556
  datasets: [
519
557
  {
520
558
  name: 'production'
@@ -550,7 +588,9 @@ describe('#dataset:export', ()=>{
550
588
  const { stdout } = await testCommand(DatasetExportCommand, [
551
589
  'production',
552
590
  TEST_OUTPUTS.TAR_GZ
553
- ]);
591
+ ], {
592
+ mocks
593
+ });
554
594
  // Verify command completed successfully
555
595
  expect(stdout).toContain('Export finished');
556
596
  expect(mockExportDataset).toHaveBeenCalled();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/dataset/__tests__/export.test.ts"],"sourcesContent":["import fs from 'node:fs/promises'\n\nimport {runCommand} from '@oclif/test'\nimport {type CliConfig, getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {input, select} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {exportDataset, type ExportResult} from '@sanity/export'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {DatasetExportCommand} from '../export.js'\n\nvi.mock('@sanity/export', () => ({\n exportDataset: vi.fn().mockResolvedValue(undefined),\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 input: 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/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nvi.mock('node:fs/promises', () => ({\n default: {\n mkdir: vi.fn().mockResolvedValue(undefined),\n stat: vi.fn(),\n },\n}))\n\nconst mockExportDataset = vi.mocked(exportDataset)\nconst mockInput = vi.mocked(input)\nconst mockSelect = vi.mocked(select)\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\nconst mockFs = vi.mocked(fs)\n\nconst TEST_CONFIG = {\n DATASET: 'production',\n PROJECT_ID: 'test-project',\n} as const\n\nconst TEST_OUTPUTS = {\n EXISTING: 'existing.tar.gz',\n SUBDIR: 'subdir/output.tar.gz',\n TAR_GZ: 'output.tar.gz',\n} as const\n\nconst ERROR_MESSAGES = {\n ALREADY_EXISTS: 'already exists',\n DATASET_NOT_FOUND: 'Dataset with name',\n EXPORT_FAILED: 'Export failed',\n USE_OVERWRITE: '--overwrite',\n} as const\n\nconst createTestContext = (\n overrides: {\n dataset?: string | null\n datasets?: Array<{name: string}>\n fileExists?: boolean\n inputValue?: string\n isFile?: boolean\n projectId?: string\n selectValue?: string\n } = {},\n) => {\n const defaults = {\n dataset: TEST_CONFIG.DATASET,\n datasets: [{name: 'production'}, {name: 'staging'}],\n fileExists: false,\n isFile: true,\n projectId: TEST_CONFIG.PROJECT_ID,\n }\n\n const context = {...defaults, ...overrides}\n\n // Setup CLI config\n const apiConfig: CliConfig['api'] = {projectId: context.projectId}\n if (context.dataset) apiConfig.dataset = context.dataset\n\n mockGetCliConfig.mockResolvedValue({api: apiConfig})\n\n // Setup project client\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockResolvedValue(context.datasets),\n },\n } as never)\n\n // Setup file system\n if (context.fileExists) {\n mockFs.stat.mockResolvedValue({\n isFile: () => context.isFile,\n } as never)\n } else {\n mockFs.stat.mockRejectedValue(new Error('File not found'))\n }\n\n // Setup select if provided\n if (context.selectValue) {\n mockSelect.mockResolvedValueOnce(context.selectValue)\n }\n\n // Setup input if provided\n if (context.inputValue) {\n mockInput.mockResolvedValueOnce(context.inputValue)\n }\n\n return context\n}\n\ndescribe('#dataset:export', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset:export', '--help'])\n\n expect(stdout).toContain('Export dataset to local filesystem as a gzipped tarball')\n expect(stdout).toContain('ARGUMENTS')\n expect(stdout).toContain('EXAMPLES')\n expect(stdout).toContain('--no-assets')\n })\n\n describe('successful exports', () => {\n test.each([\n {\n args: ['production', TEST_OUTPUTS.TAR_GZ],\n description: 'with specified file',\n expectedPathPattern: /output\\.tar\\.gz$/,\n shouldShowDetails: true,\n },\n {\n args: ['production'],\n description: 'with auto-generated filename when no destination provided via prompt',\n expectedPathPattern: /custom-output\\.tar\\.gz$/,\n inputValue: 'custom-output.tar.gz',\n shouldShowDetails: false,\n },\n ])(\n 'exports dataset $description',\n async ({args, expectedPathPattern, inputValue, shouldShowDetails}) => {\n createTestContext({datasets: [{name: 'production'}], inputValue})\n\n const {stdout} = await testCommand(DatasetExportCommand, args)\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n assetConcurrency: 8,\n assets: true,\n client: expect.any(Object),\n compress: true,\n dataset: 'production',\n drafts: true,\n mode: 'stream',\n onProgress: expect.any(Function),\n outputPath: expect.stringMatching(expectedPathPattern),\n raw: false,\n types: undefined,\n }),\n )\n\n if (shouldShowDetails) {\n expect(stdout).toContain('projectId: test-project')\n expect(stdout).toContain('dataset: production')\n expect(stdout).toContain('Export finished')\n }\n },\n )\n\n test('exports to stdout with dash', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', '-'])\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n outputPath: process.stdout,\n }),\n )\n })\n\n test('prompts for destination when not provided as argument', async () => {\n createTestContext({\n datasets: [{name: 'production'}],\n inputValue: '/custom/path/export.tar.gz',\n })\n\n await testCommand(DatasetExportCommand, ['production'])\n\n expect(mockInput).toHaveBeenCalledWith({\n default: expect.stringMatching(/production\\.tar\\.gz$/),\n message: 'Output path:',\n transformer: expect.any(Function),\n validate: expect.any(Function),\n })\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n outputPath: '/custom/path/export.tar.gz',\n }),\n )\n })\n })\n\n describe('dataset selection', () => {\n test('prompts for dataset selection when none specified', async () => {\n createTestContext({\n dataset: null, // No default dataset\n inputValue: 'staging.tar.gz', // Mock destination input\n selectValue: 'staging',\n })\n\n await testCommand(DatasetExportCommand, [])\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'production', value: 'production'},\n {name: 'staging', value: 'staging'},\n ],\n message: 'Select the dataset name:',\n })\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('uses and announces default dataset from config', async () => {\n createTestContext({\n dataset: 'staging',\n datasets: [{name: 'staging'}],\n inputValue: 'staging.tar.gz', // Mock destination input\n })\n\n const {stdout} = await testCommand(DatasetExportCommand, [])\n\n expect(stdout).toContain('Using default dataset: staging')\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('validates dataset exists in project', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n const {error} = await testCommand(DatasetExportCommand, ['staging', TEST_OUTPUTS.TAR_GZ])\n\n expect(error?.message).toContain(`${ERROR_MESSAGES.DATASET_NOT_FOUND} \"staging\" not found`)\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('file operations', () => {\n test('creates parent directory for nested output paths', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR])\n\n expect(mockFs.mkdir).toHaveBeenCalledWith(expect.stringMatching(/subdir$/), {\n recursive: true,\n })\n })\n\n test('prevents overwrite without flag', async () => {\n createTestContext({\n datasets: [{name: 'production'}],\n fileExists: true,\n })\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.EXISTING])\n\n expect(error?.message).toContain(ERROR_MESSAGES.ALREADY_EXISTS)\n expect(error?.message).toContain(ERROR_MESSAGES.USE_OVERWRITE)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('allows overwrite with flag', async () => {\n createTestContext({\n datasets: [{name: 'production'}],\n fileExists: true,\n })\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.EXISTING, '--overwrite'])\n\n expect(mockExportDataset).toHaveBeenCalled()\n })\n\n test('handles directory creation errors gracefully', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n // Mock mkdir to throw a permission error\n const permissionError = new Error('Permission denied') as Error & {code: string}\n permissionError.code = 'EACCES'\n mockFs.mkdir.mockRejectedValueOnce(permissionError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR])\n\n expect(error?.message).toContain('Permission denied: Cannot create directory')\n expect(error?.message).toContain('Please check write permissions')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles other directory creation errors gracefully', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n // Mock mkdir to throw a generic error\n const genericError = new Error('Disk full')\n mockFs.mkdir.mockRejectedValueOnce(genericError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR])\n\n expect(error?.message).toContain('Failed to create directory')\n expect(error?.message).toContain('Disk full')\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('export options', () => {\n test('sets assets:false when --no-assets flag is used', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ, '--no-assets'])\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n assets: false,\n }),\n )\n })\n\n test('parses comma-separated types with --types flag', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, [\n 'production',\n TEST_OUTPUTS.TAR_GZ,\n '--types',\n 'post,author',\n ])\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n types: ['post', 'author'],\n }),\n )\n })\n\n test('sets raw:true when --raw flag is used', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ, '--raw'])\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n raw: true,\n }),\n )\n })\n\n test('sets mode to cursor with --mode flag', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, [\n 'production',\n TEST_OUTPUTS.TAR_GZ,\n '--mode',\n 'cursor',\n ])\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n mode: 'cursor',\n }),\n )\n })\n })\n\n describe('error handling', () => {\n test('fails without project ID', async () => {\n createTestContext({projectId: undefined as never})\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ])\n\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles cancelled dataset selection gracefully', async () => {\n createTestContext({\n dataset: null, // No default dataset\n })\n\n // Mock select to simulate user cancellation (Ctrl+C throws an error)\n mockSelect.mockRejectedValueOnce(new Error('User cancelled'))\n\n const {error} = await testCommand(DatasetExportCommand, [])\n\n expect(error?.message).toContain('User cancelled')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles export errors with detailed error message', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n const exportError = new Error('Network timeout during export')\n mockExportDataset.mockRejectedValueOnce(exportError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ])\n\n expect(error?.message).toBe(`${ERROR_MESSAGES.EXPORT_FAILED}: Network timeout during export`)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('validates dataset name format', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n\n const {error} = await testCommand(DatasetExportCommand, [\n 'INVALID-DATASET',\n TEST_OUTPUTS.TAR_GZ,\n ])\n\n expect(error?.message).toContain('lowercase')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles dataset listing errors gracefully', async () => {\n // Setup basic context but override the datasets.list to throw an error\n createTestContext({datasets: [{name: 'production'}]})\n\n const listError = new Error('Network error: Unable to connect to API')\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockRejectedValue(listError),\n },\n } as never)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ])\n\n expect(error?.message).toContain('Failed to list datasets:')\n expect(error?.message).toContain('Network error: Unable to connect to API')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles progress updates correctly', async () => {\n createTestContext({datasets: [{name: 'production'}]})\n let progressHandler: (progress: {\n current: number\n step: string\n total: number\n update?: boolean\n }) => void\n\n mockExportDataset.mockImplementationOnce(async (options): Promise<ExportResult> => {\n progressHandler = options.onProgress!\n // Simulate progress updates to test that they don't crash\n progressHandler({current: 10, step: 'Exporting documents...', total: 100})\n progressHandler({current: 5, step: 'Exporting assets...', total: 20})\n progressHandler({current: 10, step: 'Exporting assets...', total: 20, update: true})\n return {\n assetCount: 20,\n documentCount: 100,\n outputPath: '/tmp/export.tar.gz',\n }\n })\n\n const {stdout} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ])\n\n // Verify command completed successfully\n expect(stdout).toContain('Export finished')\n expect(mockExportDataset).toHaveBeenCalled()\n })\n })\n})\n"],"names":["fs","runCommand","getCliConfig","getProjectCliClient","input","select","testCommand","exportDataset","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DatasetExportCommand","mock","fn","mockResolvedValue","undefined","actual","importActual","findProjectRoot","directory","root","type","getCliToken","default","mkdir","stat","mockExportDataset","mocked","mockInput","mockSelect","mockGetCliConfig","mockGetProjectCliClient","mockFs","TEST_CONFIG","DATASET","PROJECT_ID","TEST_OUTPUTS","EXISTING","SUBDIR","TAR_GZ","ERROR_MESSAGES","ALREADY_EXISTS","DATASET_NOT_FOUND","EXPORT_FAILED","USE_OVERWRITE","createTestContext","overrides","defaults","dataset","datasets","name","fileExists","isFile","projectId","context","apiConfig","api","list","mockRejectedValue","Error","selectValue","mockResolvedValueOnce","inputValue","clearAllMocks","stdout","toContain","each","args","description","expectedPathPattern","shouldShowDetails","toHaveBeenCalledWith","objectContaining","assetConcurrency","assets","client","any","Object","compress","drafts","mode","onProgress","Function","outputPath","stringMatching","raw","types","process","message","transformer","validate","choices","value","error","oclif","exit","toBe","recursive","toHaveBeenCalled","permissionError","code","mockRejectedValueOnce","genericError","toEqual","exportError","listError","progressHandler","mockImplementationOnce","options","current","step","total","update","assetCount","documentCount"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/commands/dataset/__tests__/export.test.ts"],"sourcesContent":["import fs from 'node:fs/promises'\n\nimport {runCommand} from '@oclif/test'\nimport {type CliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {input, select} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {exportDataset, type ExportResult} from '@sanity/export'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {DatasetExportCommand} from '../export.js'\n\nvi.mock('@sanity/export', () => ({\n exportDataset: vi.fn().mockResolvedValue(undefined),\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 input: vi.fn(),\n select: vi.fn(),\n }\n})\n\nvi.mock('node:fs/promises', () => ({\n default: {\n mkdir: vi.fn().mockResolvedValue(undefined),\n stat: vi.fn(),\n },\n}))\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockExportDataset = vi.mocked(exportDataset)\nconst mockInput = vi.mocked(input)\nconst mockSelect = vi.mocked(select)\nconst mockFs = vi.mocked(fs)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\nconst TEST_CONFIG = {\n DATASET: 'production',\n PROJECT_ID: 'test-project',\n} as const\n\nconst TEST_OUTPUTS = {\n EXISTING: 'existing.tar.gz',\n SUBDIR: 'subdir/output.tar.gz',\n TAR_GZ: 'output.tar.gz',\n} as const\n\nconst ERROR_MESSAGES = {\n ALREADY_EXISTS: 'already exists',\n DATASET_NOT_FOUND: 'Dataset with name',\n EXPORT_FAILED: 'Export failed',\n USE_OVERWRITE: '--overwrite',\n} as const\n\nconst defaultMocks = {\n cliConfig: {api: {dataset: TEST_CONFIG.DATASET, projectId: TEST_CONFIG.PROJECT_ID}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\ninterface TestContextOptions {\n dataset?: string | null\n datasets?: Array<{name: string}>\n fileExists?: boolean\n inputValue?: string\n isFile?: boolean\n projectId?: string\n selectValue?: string\n}\n\nconst createTestContext = (overrides: TestContextOptions = {}) => {\n const defaults = {\n dataset: TEST_CONFIG.DATASET,\n datasets: [{name: 'production'}, {name: 'staging'}],\n fileExists: false,\n isFile: true,\n projectId: TEST_CONFIG.PROJECT_ID,\n }\n\n const context = {...defaults, ...overrides}\n\n // Setup file system\n if (context.fileExists) {\n mockFs.stat.mockResolvedValue({\n isFile: () => context.isFile,\n } as never)\n } else {\n mockFs.stat.mockRejectedValue(new Error('File not found'))\n }\n\n // Setup select if provided\n if (context.selectValue) {\n mockSelect.mockResolvedValueOnce(context.selectValue)\n }\n\n // Setup input if provided\n if (context.inputValue) {\n mockInput.mockResolvedValueOnce(context.inputValue)\n }\n\n const apiConfig: CliConfig['api'] = {projectId: context.projectId}\n if (context.dataset) apiConfig.dataset = context.dataset\n\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockResolvedValue(context.datasets),\n },\n } as never)\n\n return {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: apiConfig},\n },\n }\n}\n\ndescribe('#dataset:export', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset:export', '--help'])\n\n expect(stdout).toContain('Export dataset to local filesystem as a gzipped tarball')\n expect(stdout).toContain('ARGUMENTS')\n expect(stdout).toContain('EXAMPLES')\n expect(stdout).toContain('--no-assets')\n })\n\n describe('successful exports', () => {\n test.each([\n {\n args: ['production', TEST_OUTPUTS.TAR_GZ],\n description: 'with specified file',\n expectedPathPattern: /output\\.tar\\.gz$/,\n shouldShowDetails: true,\n },\n {\n args: ['production'],\n description: 'with auto-generated filename when no destination provided via prompt',\n expectedPathPattern: /custom-output\\.tar\\.gz$/,\n inputValue: 'custom-output.tar.gz',\n shouldShowDetails: false,\n },\n ])(\n 'exports dataset $description',\n async ({args, expectedPathPattern, inputValue, shouldShowDetails}) => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}], inputValue})\n\n const {stdout} = await testCommand(DatasetExportCommand, args, {mocks})\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n assetConcurrency: 8,\n assets: true,\n client: expect.any(Object),\n compress: true,\n dataset: 'production',\n drafts: true,\n mode: 'stream',\n onProgress: expect.any(Function),\n outputPath: expect.stringMatching(expectedPathPattern),\n raw: false,\n types: undefined,\n }),\n )\n\n if (shouldShowDetails) {\n expect(stdout).toContain('projectId: test-project')\n expect(stdout).toContain('dataset: production')\n expect(stdout).toContain('Export finished')\n }\n },\n )\n\n test('exports to stdout with dash', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', '-'], {mocks})\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n outputPath: process.stdout,\n }),\n )\n })\n\n test('prompts for destination when not provided as argument', async () => {\n const {mocks} = createTestContext({\n datasets: [{name: 'production'}],\n inputValue: '/custom/path/export.tar.gz',\n })\n\n await testCommand(DatasetExportCommand, ['production'], {mocks})\n\n expect(mockInput).toHaveBeenCalledWith({\n default: expect.stringMatching(/production\\.tar\\.gz$/),\n message: 'Output path:',\n transformer: expect.any(Function),\n validate: expect.any(Function),\n })\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n outputPath: '/custom/path/export.tar.gz',\n }),\n )\n })\n })\n\n describe('dataset selection', () => {\n test('prompts for dataset selection when none specified', async () => {\n const {mocks} = createTestContext({\n dataset: null, // No default dataset\n inputValue: 'staging.tar.gz', // Mock destination input\n selectValue: 'staging',\n })\n\n await testCommand(DatasetExportCommand, [], {mocks})\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'production', value: 'production'},\n {name: 'staging', value: 'staging'},\n ],\n message: 'Select the dataset name:',\n })\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('uses and announces default dataset from config', async () => {\n const {mocks} = createTestContext({\n dataset: 'staging',\n datasets: [{name: 'staging'}],\n inputValue: 'staging.tar.gz', // Mock destination input\n })\n\n const {stdout} = await testCommand(DatasetExportCommand, [], {mocks})\n\n expect(stdout).toContain('Using default dataset: staging')\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('validates dataset exists in project', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n const {error} = await testCommand(DatasetExportCommand, ['staging', TEST_OUTPUTS.TAR_GZ], {\n mocks,\n })\n\n expect(error?.message).toContain(`${ERROR_MESSAGES.DATASET_NOT_FOUND} \"staging\" not found`)\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('file operations', () => {\n test('creates parent directory for nested output paths', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR], {mocks})\n\n expect(mockFs.mkdir).toHaveBeenCalledWith(expect.stringMatching(/subdir$/), {\n recursive: true,\n })\n })\n\n test('prevents overwrite without flag', async () => {\n const {mocks} = createTestContext({\n datasets: [{name: 'production'}],\n fileExists: true,\n })\n\n const {error} = await testCommand(\n DatasetExportCommand,\n ['production', TEST_OUTPUTS.EXISTING],\n {mocks},\n )\n\n expect(error?.message).toContain(ERROR_MESSAGES.ALREADY_EXISTS)\n expect(error?.message).toContain(ERROR_MESSAGES.USE_OVERWRITE)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('allows overwrite with flag', async () => {\n const {mocks} = createTestContext({\n datasets: [{name: 'production'}],\n fileExists: true,\n })\n\n await testCommand(\n DatasetExportCommand,\n ['production', TEST_OUTPUTS.EXISTING, '--overwrite'],\n {mocks},\n )\n\n expect(mockExportDataset).toHaveBeenCalled()\n })\n\n test('handles directory creation errors gracefully', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n // Mock mkdir to throw a permission error\n const permissionError = new Error('Permission denied') as Error & {code: string}\n permissionError.code = 'EACCES'\n mockFs.mkdir.mockRejectedValueOnce(permissionError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR], {\n mocks,\n })\n\n expect(error?.message).toContain('Permission denied: Cannot create directory')\n expect(error?.message).toContain('Please check write permissions')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles other directory creation errors gracefully', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n // Mock mkdir to throw a generic error\n const genericError = new Error('Disk full')\n mockFs.mkdir.mockRejectedValueOnce(genericError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.SUBDIR], {\n mocks,\n })\n\n expect(error?.message).toContain('Failed to create directory')\n expect(error?.message).toContain('Disk full')\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('export options', () => {\n test('sets assets:false when --no-assets flag is used', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ, '--no-assets'], {\n mocks,\n })\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n assets: false,\n }),\n )\n })\n\n test('parses comma-separated types with --types flag', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(\n DatasetExportCommand,\n ['production', TEST_OUTPUTS.TAR_GZ, '--types', 'post,author'],\n {mocks},\n )\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n types: ['post', 'author'],\n }),\n )\n })\n\n test('sets raw:true when --raw flag is used', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ, '--raw'], {mocks})\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n raw: true,\n }),\n )\n })\n\n test('sets mode to cursor with --mode flag', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n await testCommand(\n DatasetExportCommand,\n ['production', TEST_OUTPUTS.TAR_GZ, '--mode', 'cursor'],\n {mocks},\n )\n\n expect(mockExportDataset).toHaveBeenCalledWith(\n expect.objectContaining({\n mode: 'cursor',\n }),\n )\n })\n })\n\n describe('error handling', () => {\n test('fails without project ID', async () => {\n const {mocks} = createTestContext({projectId: undefined as never})\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ], {\n mocks,\n })\n\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles cancelled dataset selection gracefully', async () => {\n const {mocks} = createTestContext({\n dataset: null, // No default dataset\n })\n\n // Mock select to simulate user cancellation (Ctrl+C throws an error)\n mockSelect.mockRejectedValueOnce(new Error('User cancelled'))\n\n const {error} = await testCommand(DatasetExportCommand, [], {mocks})\n\n expect(error?.message).toContain('User cancelled')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles export errors with detailed error message', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n const exportError = new Error('Network timeout during export')\n mockExportDataset.mockRejectedValueOnce(exportError)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ], {\n mocks,\n })\n\n expect(error?.message).toBe(`${ERROR_MESSAGES.EXPORT_FAILED}: Network timeout during export`)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('validates dataset name format', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n\n const {error} = await testCommand(\n DatasetExportCommand,\n ['INVALID-DATASET', TEST_OUTPUTS.TAR_GZ],\n {mocks},\n )\n\n expect(error?.message).toContain('lowercase')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles dataset listing errors gracefully', async () => {\n const listError = new Error('Network error: Unable to connect to API')\n\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockRejectedValue(listError),\n },\n } as never)\n\n const {error} = await testCommand(DatasetExportCommand, ['production', TEST_OUTPUTS.TAR_GZ], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Failed to list datasets:')\n expect(error?.message).toContain('Network error: Unable to connect to API')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles progress updates correctly', async () => {\n const {mocks} = createTestContext({datasets: [{name: 'production'}]})\n let progressHandler: (progress: {\n current: number\n step: string\n total: number\n update?: boolean\n }) => void\n\n mockExportDataset.mockImplementationOnce(async (options): Promise<ExportResult> => {\n progressHandler = options.onProgress!\n // Simulate progress updates to test that they don't crash\n progressHandler({current: 10, step: 'Exporting documents...', total: 100})\n progressHandler({current: 5, step: 'Exporting assets...', total: 20})\n progressHandler({current: 10, step: 'Exporting assets...', total: 20, update: true})\n return {\n assetCount: 20,\n documentCount: 100,\n outputPath: '/tmp/export.tar.gz',\n }\n })\n\n const {stdout} = await testCommand(\n DatasetExportCommand,\n ['production', TEST_OUTPUTS.TAR_GZ],\n {mocks},\n )\n\n // Verify command completed successfully\n expect(stdout).toContain('Export finished')\n expect(mockExportDataset).toHaveBeenCalled()\n })\n })\n})\n"],"names":["fs","runCommand","getProjectCliClient","input","select","testCommand","exportDataset","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DatasetExportCommand","mock","fn","mockResolvedValue","undefined","actual","importActual","default","mkdir","stat","mockExportDataset","mocked","mockInput","mockSelect","mockFs","mockGetProjectCliClient","TEST_CONFIG","DATASET","PROJECT_ID","TEST_OUTPUTS","EXISTING","SUBDIR","TAR_GZ","ERROR_MESSAGES","ALREADY_EXISTS","DATASET_NOT_FOUND","EXPORT_FAILED","USE_OVERWRITE","defaultMocks","cliConfig","api","dataset","projectId","projectRoot","directory","path","type","token","createTestContext","overrides","defaults","datasets","name","fileExists","isFile","context","mockRejectedValue","Error","selectValue","mockResolvedValueOnce","inputValue","apiConfig","list","mocks","clearAllMocks","stdout","toContain","each","args","description","expectedPathPattern","shouldShowDetails","toHaveBeenCalledWith","objectContaining","assetConcurrency","assets","client","any","Object","compress","drafts","mode","onProgress","Function","outputPath","stringMatching","raw","types","process","message","transformer","validate","choices","value","error","oclif","exit","toBe","recursive","toHaveBeenCalled","permissionError","code","mockRejectedValueOnce","genericError","toEqual","exportError","listError","progressHandler","mockImplementationOnce","options","current","step","total","update","assetCount","documentCount"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { describe, expect, test } from 'vitest';
3
3
  describe('#dataset:import', ()=>{
4
4
  test('should print datasets:import help', async ()=>{
5
5
  const { stdout } = await runCommand('dataset import --help');
6
- expect(stdout).toMatchInlineSnapshot(`
6
+ expect(stdout).toMatchInlineSnapshot(String.raw`
7
7
  "Import documents to a Sanity dataset
8
8
 
9
9
  USAGE
@@ -38,7 +38,7 @@ describe('#dataset:import', ()=>{
38
38
  EXAMPLES
39
39
  Import "./my-dataset.ndjson" into dataset "staging"
40
40
 
41
- $ sanity dataset import -p myPrOj -d staging -t someSecretToken \\
41
+ $ sanity dataset import -p myPrOj -d staging -t someSecretToken \
42
42
  my-dataset.ndjson
43
43
 
44
44
  Import into dataset "test" from stdin, read token from env var