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

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 (461) hide show
  1. package/dist/actions/dataset/create.d.ts +49 -0
  2. package/dist/actions/dataset/create.js +48 -0
  3. package/dist/actions/dataset/create.js.map +1 -0
  4. package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
  5. package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
  6. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
  7. package/dist/actions/debug/gatherDebugInfo.js +15 -21
  8. package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
  9. package/dist/actions/debug/types.d.ts +0 -2
  10. package/dist/actions/debug/types.js.map +1 -1
  11. package/dist/actions/deploy/deployApp.js +13 -0
  12. package/dist/actions/deploy/deployApp.js.map +1 -1
  13. package/dist/actions/init/remoteTemplate.js +1 -1
  14. package/dist/actions/init/remoteTemplate.js.map +1 -1
  15. package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
  16. package/dist/actions/manifest/extractAppManifest.js +51 -0
  17. package/dist/actions/manifest/extractAppManifest.js.map +1 -0
  18. package/dist/actions/manifest/extractManifest.js +1 -1
  19. package/dist/actions/manifest/extractManifest.js.map +1 -1
  20. package/dist/actions/manifest/types.d.ts +6 -1
  21. package/dist/actions/manifest/types.js.map +1 -1
  22. package/dist/actions/media/importAspects.js +2 -1
  23. package/dist/actions/media/importAspects.js.map +1 -1
  24. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +1 -1
  25. package/dist/commands/dataset/create.d.ts +0 -2
  26. package/dist/commands/dataset/create.js +8 -54
  27. package/dist/commands/dataset/create.js.map +1 -1
  28. package/dist/commands/debug.js +5 -9
  29. package/dist/commands/debug.js.map +1 -1
  30. package/dist/commands/init.d.ts +6 -1
  31. package/dist/commands/init.js +358 -20
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/commands/manifest/extract.js +7 -8
  34. package/dist/commands/manifest/extract.js.map +1 -1
  35. package/dist/config/createCliConfig.d.ts +9 -0
  36. package/dist/prompts/init/promptForTypescript.d.ts +2 -0
  37. package/dist/prompts/init/promptForTypescript.js +15 -0
  38. package/dist/prompts/init/promptForTypescript.js.map +1 -0
  39. package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
  40. package/dist/prompts/promptForDatasetAclMode.js +27 -0
  41. package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
  42. package/dist/prompts/promptForDatasetName.d.ts +1 -1
  43. package/dist/prompts/promptForDatasetName.js +4 -1
  44. package/dist/prompts/promptForDatasetName.js.map +1 -1
  45. package/dist/services/organizations.d.ts +3 -1
  46. package/dist/services/organizations.js +2 -1
  47. package/dist/services/organizations.js.map +1 -1
  48. package/dist/services/user.d.ts +5 -0
  49. package/dist/services/user.js +12 -1
  50. package/dist/services/user.js.map +1 -1
  51. package/dist/services/userApplications.d.ts +3 -1
  52. package/dist/services/userApplications.js +5 -1
  53. package/dist/services/userApplications.js.map +1 -1
  54. package/oclif.manifest.json +113 -113
  55. package/package.json +16 -12
  56. package/templates/app-quickstart/src/App.css +20 -0
  57. package/templates/app-quickstart/src/App.tsx +25 -0
  58. package/templates/app-quickstart/src/ExampleComponent.css +90 -0
  59. package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
  60. package/templates/app-sanity-ui/src/App.tsx +34 -0
  61. package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
  62. package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
  63. package/templates/blog/README.md +11 -0
  64. package/templates/blog/schemaTypes/author.js +50 -0
  65. package/templates/blog/schemaTypes/blockContent.js +67 -0
  66. package/templates/blog/schemaTypes/category.js +19 -0
  67. package/templates/blog/schemaTypes/index.js +6 -0
  68. package/templates/blog/schemaTypes/post.js +65 -0
  69. package/templates/blog/static/.gitkeep +1 -0
  70. package/templates/clean/README.md +9 -0
  71. package/templates/clean/schemaTypes/index.js +1 -0
  72. package/templates/clean/static/.gitkeep +1 -0
  73. package/templates/ecommerce/README.md +11 -0
  74. package/templates/ecommerce/plugins/.gitkeep +1 -0
  75. package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
  76. package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
  77. package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
  78. package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
  79. package/templates/ecommerce/schemaTypes/category.js +39 -0
  80. package/templates/ecommerce/schemaTypes/index.js +23 -0
  81. package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
  82. package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
  83. package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
  84. package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
  85. package/templates/ecommerce/schemaTypes/product.js +83 -0
  86. package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
  87. package/templates/ecommerce/schemaTypes/vendor.js +39 -0
  88. package/templates/ecommerce/static/.gitkeep +1 -0
  89. package/templates/get-started/README.md +9 -0
  90. package/templates/get-started/plugins/.gitkeep +1 -0
  91. package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
  92. package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
  93. package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
  94. package/templates/get-started/schemaTypes/index.ts +1 -0
  95. package/templates/get-started/static/.gitkeep +1 -0
  96. package/templates/moviedb/README.md +10 -0
  97. package/templates/moviedb/schemaTypes/blockContent.js +67 -0
  98. package/templates/moviedb/schemaTypes/castMember.js +37 -0
  99. package/templates/moviedb/schemaTypes/crewMember.js +52 -0
  100. package/templates/moviedb/schemaTypes/index.js +22 -0
  101. package/templates/moviedb/schemaTypes/movie.js +85 -0
  102. package/templates/moviedb/schemaTypes/person.js +37 -0
  103. package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
  104. package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
  105. package/templates/moviedb/schemaTypes/screening.js +81 -0
  106. package/templates/moviedb/static/.gitkeep +1 -0
  107. package/templates/quickstart/README.md +9 -0
  108. package/templates/quickstart/schemaTypes/index.js +1 -0
  109. package/templates/quickstart/static/.gitkeep +1 -0
  110. package/templates/shared/gitignore.txt +29 -0
  111. package/templates/shared/tsconfig.json +17 -0
  112. package/templates/shopify/README.md +85 -0
  113. package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
  114. package/templates/shopify/components/icons/Shopify.tsx +20 -0
  115. package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
  116. package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
  117. package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
  118. package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
  119. package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
  120. package/templates/shopify/components/media/ColorTheme.tsx +38 -0
  121. package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
  122. package/templates/shopify/components/studio/Navbar.tsx +29 -0
  123. package/templates/shopify/constants.ts +61 -0
  124. package/templates/shopify/docs/features.md +158 -0
  125. package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
  126. package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
  127. package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
  128. package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
  129. package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
  130. package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
  131. package/templates/shopify/schemaTypes/documents/page.ts +70 -0
  132. package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
  133. package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
  134. package/templates/shopify/schemaTypes/index.ts +108 -0
  135. package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
  136. package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
  137. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
  138. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
  139. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
  140. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
  141. package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
  142. package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
  143. package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
  144. package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
  145. package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
  146. package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
  147. package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
  148. package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
  149. package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
  150. package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
  151. package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
  152. package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
  153. package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
  154. package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
  155. package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
  156. package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
  157. package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
  158. package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
  159. package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
  160. package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
  161. package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
  162. package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
  163. package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
  164. package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
  165. package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
  166. package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
  167. package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
  168. package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
  169. package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
  170. package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
  171. package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
  172. package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
  173. package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
  174. package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
  175. package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
  176. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
  177. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
  178. package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
  179. package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
  180. package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
  181. package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
  182. package/templates/shopify/static/.gitkeep +1 -0
  183. package/templates/shopify/structure/collectionStructure.ts +9 -0
  184. package/templates/shopify/structure/colorThemeStructure.ts +9 -0
  185. package/templates/shopify/structure/homeStructure.ts +9 -0
  186. package/templates/shopify/structure/index.ts +57 -0
  187. package/templates/shopify/structure/pageStructure.ts +11 -0
  188. package/templates/shopify/structure/productStructure.ts +51 -0
  189. package/templates/shopify/structure/settingStructure.ts +9 -0
  190. package/templates/shopify/utils/blocksToText.ts +20 -0
  191. package/templates/shopify/utils/defineStructure.ts +11 -0
  192. package/templates/shopify/utils/getPriceRange.ts +24 -0
  193. package/templates/shopify/utils/shopifyUrls.ts +22 -0
  194. package/templates/shopify/utils/validateSlug.ts +18 -0
  195. package/templates/shopify-online-storefront/README.md +54 -0
  196. package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
  197. package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
  198. package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
  199. package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
  200. package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
  201. package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
  202. package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
  203. package/templates/shopify-online-storefront/constants.ts +18 -0
  204. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
  205. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
  206. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
  207. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
  208. package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
  209. package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
  210. package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
  211. package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
  212. package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
  213. package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
  214. package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
  215. package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
  216. package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
  217. package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
  218. package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
  219. package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
  220. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
  221. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
  222. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
  223. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
  224. package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
  225. package/templates/shopify-online-storefront/structure/index.ts +37 -0
  226. package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
  227. package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
  228. package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
  229. package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
  230. package/dist/actions/build/__tests__/buildApp.test.js +0 -367
  231. package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
  232. package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
  233. package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
  234. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
  235. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
  236. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
  237. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
  238. package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
  239. package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
  240. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
  241. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
  242. package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
  243. package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
  244. package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
  245. package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
  246. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
  247. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
  248. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
  249. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
  250. package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
  251. package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
  252. package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
  253. package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
  254. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
  255. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
  256. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
  257. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
  258. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
  259. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
  260. package/dist/actions/media/__tests__/importMedia.test.js +0 -182
  261. package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
  262. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
  263. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
  264. package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
  265. package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
  266. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
  267. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
  268. package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
  269. package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
  270. package/dist/commands/__tests__/blueprints.test.js +0 -54
  271. package/dist/commands/__tests__/blueprints.test.js.map +0 -1
  272. package/dist/commands/__tests__/build.test.js +0 -132
  273. package/dist/commands/__tests__/build.test.js.map +0 -1
  274. package/dist/commands/__tests__/codemod.test.js +0 -271
  275. package/dist/commands/__tests__/codemod.test.js.map +0 -1
  276. package/dist/commands/__tests__/debug.test.js +0 -590
  277. package/dist/commands/__tests__/debug.test.js.map +0 -1
  278. package/dist/commands/__tests__/deploy.test.js +0 -1945
  279. package/dist/commands/__tests__/deploy.test.js.map +0 -1
  280. package/dist/commands/__tests__/dev.test.js +0 -453
  281. package/dist/commands/__tests__/dev.test.js.map +0 -1
  282. package/dist/commands/__tests__/exec.test.js +0 -207
  283. package/dist/commands/__tests__/exec.test.js.map +0 -1
  284. package/dist/commands/__tests__/init/init.authentication.test.js +0 -73
  285. package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
  286. package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -195
  287. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
  288. package/dist/commands/__tests__/init/init.plan.test.js +0 -279
  289. package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
  290. package/dist/commands/__tests__/init/init.setup.test.js +0 -335
  291. package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
  292. package/dist/commands/__tests__/install.test.js +0 -282
  293. package/dist/commands/__tests__/install.test.js.map +0 -1
  294. package/dist/commands/__tests__/learn.test.js +0 -29
  295. package/dist/commands/__tests__/learn.test.js.map +0 -1
  296. package/dist/commands/__tests__/logout.test.js +0 -91
  297. package/dist/commands/__tests__/logout.test.js.map +0 -1
  298. package/dist/commands/__tests__/manage.test.js +0 -110
  299. package/dist/commands/__tests__/manage.test.js.map +0 -1
  300. package/dist/commands/__tests__/migration.test.js +0 -119
  301. package/dist/commands/__tests__/migration.test.js.map +0 -1
  302. package/dist/commands/__tests__/preview.test.js +0 -261
  303. package/dist/commands/__tests__/preview.test.js.map +0 -1
  304. package/dist/commands/__tests__/start.test.js +0 -253
  305. package/dist/commands/__tests__/start.test.js.map +0 -1
  306. package/dist/commands/__tests__/undeploy.test.js +0 -382
  307. package/dist/commands/__tests__/undeploy.test.js.map +0 -1
  308. package/dist/commands/__tests__/versions.test.js +0 -142
  309. package/dist/commands/__tests__/versions.test.js.map +0 -1
  310. package/dist/commands/backup/__tests__/disable.test.js +0 -204
  311. package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
  312. package/dist/commands/backup/__tests__/download.test.js +0 -768
  313. package/dist/commands/backup/__tests__/download.test.js.map +0 -1
  314. package/dist/commands/backup/__tests__/enable.test.js +0 -286
  315. package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
  316. package/dist/commands/backup/__tests__/list.test.js +0 -330
  317. package/dist/commands/backup/__tests__/list.test.js.map +0 -1
  318. package/dist/commands/cors/__tests__/add.test.js +0 -376
  319. package/dist/commands/cors/__tests__/add.test.js.map +0 -1
  320. package/dist/commands/cors/__tests__/delete.test.js +0 -308
  321. package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
  322. package/dist/commands/cors/__tests__/list.test.js +0 -241
  323. package/dist/commands/cors/__tests__/list.test.js.map +0 -1
  324. package/dist/commands/dataset/__tests__/copy.test.js +0 -628
  325. package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
  326. package/dist/commands/dataset/__tests__/create.test.js +0 -342
  327. package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
  328. package/dist/commands/dataset/__tests__/delete.test.js +0 -231
  329. package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
  330. package/dist/commands/dataset/__tests__/export.test.js +0 -601
  331. package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
  332. package/dist/commands/dataset/__tests__/import.test.js +0 -53
  333. package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
  334. package/dist/commands/dataset/__tests__/list.test.js +0 -216
  335. package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
  336. package/dist/commands/dataset/alias/__tests__/create.test.js +0 -339
  337. package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
  338. package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -247
  339. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
  340. package/dist/commands/dataset/alias/__tests__/link.test.js +0 -376
  341. package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
  342. package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -313
  343. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
  344. package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -128
  345. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
  346. package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -198
  347. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
  348. package/dist/commands/docs/__tests__/browse.test.js +0 -29
  349. package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
  350. package/dist/commands/docs/__tests__/read.test.js +0 -78
  351. package/dist/commands/docs/__tests__/read.test.js.map +0 -1
  352. package/dist/commands/docs/__tests__/search.test.js +0 -255
  353. package/dist/commands/docs/__tests__/search.test.js.map +0 -1
  354. package/dist/commands/documents/__tests__/create.test.js +0 -1030
  355. package/dist/commands/documents/__tests__/create.test.js.map +0 -1
  356. package/dist/commands/documents/__tests__/delete.test.js +0 -300
  357. package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
  358. package/dist/commands/documents/__tests__/get.test.js +0 -182
  359. package/dist/commands/documents/__tests__/get.test.js.map +0 -1
  360. package/dist/commands/documents/__tests__/query.test.js +0 -300
  361. package/dist/commands/documents/__tests__/query.test.js.map +0 -1
  362. package/dist/commands/documents/__tests__/validate.test.js +0 -249
  363. package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
  364. package/dist/commands/graphql/__tests__/list.test.js +0 -240
  365. package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
  366. package/dist/commands/graphql/__tests__/undeploy.test.js +0 -410
  367. package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
  368. package/dist/commands/hook/__tests__/attempt.test.js +0 -275
  369. package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
  370. package/dist/commands/hook/__tests__/create.test.js +0 -119
  371. package/dist/commands/hook/__tests__/create.test.js.map +0 -1
  372. package/dist/commands/hook/__tests__/delete.test.js +0 -233
  373. package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
  374. package/dist/commands/hook/__tests__/list.test.js +0 -145
  375. package/dist/commands/hook/__tests__/list.test.js.map +0 -1
  376. package/dist/commands/hook/__tests__/logs.test.js +0 -798
  377. package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
  378. package/dist/commands/manifest/__tests__/extract.test.js +0 -132
  379. package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
  380. package/dist/commands/mcp/__tests__/configure.test.js +0 -397
  381. package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
  382. package/dist/commands/media/__tests__/create-aspect.test.js +0 -173
  383. package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
  384. package/dist/commands/media/__tests__/delete-aspect.test.js +0 -342
  385. package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
  386. package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -619
  387. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
  388. package/dist/commands/media/__tests__/export.test.js +0 -697
  389. package/dist/commands/media/__tests__/export.test.js.map +0 -1
  390. package/dist/commands/media/__tests__/import.test.js +0 -347
  391. package/dist/commands/media/__tests__/import.test.js.map +0 -1
  392. package/dist/commands/openapi/__tests__/get.test.js +0 -149
  393. package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
  394. package/dist/commands/openapi/__tests__/list.test.js +0 -113
  395. package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
  396. package/dist/commands/projects/__tests__/list.test.js +0 -154
  397. package/dist/commands/projects/__tests__/list.test.js.map +0 -1
  398. package/dist/commands/schema/__tests__/delete.test.js +0 -454
  399. package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
  400. package/dist/commands/schema/__tests__/deploy.test.js +0 -348
  401. package/dist/commands/schema/__tests__/deploy.test.js.map +0 -1
  402. package/dist/commands/schema/__tests__/extract.test.js +0 -121
  403. package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
  404. package/dist/commands/schema/__tests__/list.test.js +0 -399
  405. package/dist/commands/schema/__tests__/list.test.js.map +0 -1
  406. package/dist/commands/schema/__tests__/validate.test.js +0 -121
  407. package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
  408. package/dist/commands/telemetry/__tests__/disable.test.js +0 -147
  409. package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
  410. package/dist/commands/telemetry/__tests__/enable.test.js +0 -133
  411. package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
  412. package/dist/commands/telemetry/__tests__/status.test.js +0 -155
  413. package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
  414. package/dist/commands/tokens/__tests__/add.test.js +0 -435
  415. package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
  416. package/dist/commands/tokens/__tests__/delete.test.js +0 -405
  417. package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
  418. package/dist/commands/tokens/__tests__/list.test.js +0 -395
  419. package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
  420. package/dist/commands/users/__tests__/invite.test.js +0 -362
  421. package/dist/commands/users/__tests__/invite.test.js.map +0 -1
  422. package/dist/commands/users/__tests__/list.test.js +0 -407
  423. package/dist/commands/users/__tests__/list.test.js.map +0 -1
  424. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
  425. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
  426. package/dist/services/__tests__/datasetAliases.test.js +0 -131
  427. package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
  428. package/dist/services/__tests__/datasets.test.js +0 -436
  429. package/dist/services/__tests__/datasets.test.js.map +0 -1
  430. package/dist/services/__tests__/graphql.test.js +0 -43
  431. package/dist/services/__tests__/graphql.test.js.map +0 -1
  432. package/dist/services/__tests__/mediaLibraries.test.js +0 -88
  433. package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
  434. package/dist/services/__tests__/projects.test.js +0 -41
  435. package/dist/services/__tests__/projects.test.js.map +0 -1
  436. package/dist/services/__tests__/userApplications.test.js +0 -113
  437. package/dist/services/__tests__/userApplications.test.js.map +0 -1
  438. package/dist/util/__tests__/appId.test.js +0 -31
  439. package/dist/util/__tests__/appId.test.js.map +0 -1
  440. package/dist/util/__tests__/cliClient.test.js +0 -184
  441. package/dist/util/__tests__/cliClient.test.js.map +0 -1
  442. package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
  443. package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
  444. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
  445. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
  446. package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
  447. package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
  448. package/dist/util/__tests__/getCliVersion.test.js +0 -28
  449. package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
  450. package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
  451. package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
  452. package/dist/util/__tests__/getWorkspace.test.js +0 -37
  453. package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
  454. package/dist/util/__tests__/readPackageJson.test.js +0 -69
  455. package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
  456. package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
  457. package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
  458. package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
  459. package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
  460. package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
  461. package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
@@ -1,628 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { select } from '@sanity/cli-core/ux';
3
- import { createTestClient, mockApi, testCommand } from '@sanity/cli-test';
4
- import nock from 'nock';
5
- import { of, throwError } from 'rxjs';
6
- import { afterEach, describe, expect, test, vi } from 'vitest';
7
- import { DATASET_API_VERSION, followCopyJobProgress } from '../../../services/datasets.js';
8
- import { CopyDatasetCommand } from '../copy.js';
9
- const mockListDatasets = vi.hoisted(()=>vi.fn());
10
- const testProjectId = vi.hoisted(()=>'test-project');
11
- const testToken = vi.hoisted(()=>'test-token');
12
- vi.mock('@sanity/cli-core', async (importOriginal)=>{
13
- const actual = await importOriginal();
14
- const testClient = createTestClient({
15
- apiVersion: 'v2025-09-16',
16
- projectId: testProjectId,
17
- token: testToken
18
- });
19
- return {
20
- ...actual,
21
- getProjectCliClient: vi.fn().mockResolvedValue({
22
- datasets: {
23
- list: mockListDatasets
24
- },
25
- request: testClient.request
26
- })
27
- };
28
- });
29
- vi.mock('@sanity/cli-core/ux', async ()=>{
30
- const actual = await vi.importActual('@sanity/cli-core/ux');
31
- return {
32
- ...actual,
33
- input: vi.fn(),
34
- select: vi.fn()
35
- };
36
- });
37
- vi.mock('../../../services/datasets.js', async (importOriginal)=>{
38
- const actual = await importOriginal();
39
- return {
40
- ...actual,
41
- // Keep only followCopyJobProgress mocked since it uses EventSource streaming
42
- followCopyJobProgress: vi.fn()
43
- };
44
- });
45
- const defaultMocks = {
46
- cliConfig: {
47
- api: {
48
- projectId: testProjectId
49
- }
50
- },
51
- projectRoot: {
52
- directory: '/test/path',
53
- path: '/test/path/sanity.config.ts',
54
- type: 'studio'
55
- },
56
- token: testToken
57
- };
58
- const mockSelect = vi.mocked(select);
59
- const mockFollowCopyJobProgress = vi.mocked(followCopyJobProgress);
60
- function createMockDataset(name) {
61
- return {
62
- aclMode: 'public',
63
- addonFor: null,
64
- createdAt: '2023-01-01T00:00:00Z',
65
- createdByUserId: 'test-user',
66
- datasetProfile: 'default',
67
- features: [],
68
- name,
69
- tags: []
70
- };
71
- }
72
- describe('#dataset:copy', ()=>{
73
- afterEach(()=>{
74
- vi.clearAllMocks();
75
- const pending = nock.pendingMocks();
76
- nock.cleanAll();
77
- expect(pending, 'pending mocks').toEqual([]);
78
- });
79
- test('help works', async ()=>{
80
- const { stdout } = await runCommand([
81
- 'dataset copy',
82
- '--help'
83
- ]);
84
- expect(stdout).toMatchInlineSnapshot(`
85
- "Manages dataset copying, including starting a new copy job, listing copy jobs and following the progress of a running copy job
86
-
87
- USAGE
88
- $ sanity dataset copy [SOURCE] [TARGET] [--attach <value> | --list |
89
- --detach | --skip-history] [--limit <value> ] [--offset <value> ]
90
-
91
- ARGUMENTS
92
- [SOURCE] Name of the dataset to copy from
93
- [TARGET] Name of the dataset to copy to
94
-
95
- FLAGS
96
- --attach=<value> Attach to the running copy process to show progress
97
- --detach Start the copy without waiting for it to finish
98
- --limit=<value> Maximum number of jobs returned (default 10, max 1000)
99
- --list Lists all dataset copy jobs
100
- --offset=<value> Start position in the list of jobs (default 0)
101
- --skip-history Don't preserve document history on copy
102
-
103
- DESCRIPTION
104
- Manages dataset copying, including starting a new copy job, listing copy jobs
105
- and following the progress of a running copy job
106
-
107
- EXAMPLES
108
- Interactively copy a dataset
109
-
110
- $ sanity dataset copy
111
-
112
- Copy from source-dataset (prompts for target)
113
-
114
- $ sanity dataset copy source-dataset
115
-
116
- Copy from source-dataset to target-dataset
117
-
118
- $ sanity dataset copy source-dataset target-dataset
119
-
120
- Copy without preserving document history (faster for large datasets)
121
-
122
- $ sanity dataset copy --skip-history source target
123
-
124
- Start copy job without waiting for completion
125
-
126
- $ sanity dataset copy --detach source target
127
-
128
- Attach to a running copy job to follow progress
129
-
130
- $ sanity dataset copy --attach <job-id>
131
-
132
- List all dataset copy jobs
133
-
134
- $ sanity dataset copy --list
135
-
136
- List copy jobs with pagination
137
-
138
- $ sanity dataset copy --list --offset 2 --limit 10
139
-
140
- "
141
- `);
142
- });
143
- describe('list mode', ()=>{
144
- test('lists copy jobs successfully', async ()=>{
145
- mockApi({
146
- apiHost: `https://${testProjectId}.api.sanity.io`,
147
- apiVersion: DATASET_API_VERSION,
148
- method: 'get',
149
- uri: `/projects/${testProjectId}/datasets/copy`
150
- }).reply(200, [
151
- {
152
- createdAt: '2023-01-01T00:00:00Z',
153
- id: 'job-1',
154
- sourceDataset: 'production',
155
- state: 'completed',
156
- targetDataset: 'backup',
157
- updatedAt: '2023-01-01T00:05:00Z',
158
- withHistory: true
159
- },
160
- {
161
- createdAt: '2023-01-02T00:00:00Z',
162
- id: 'job-2',
163
- sourceDataset: 'staging',
164
- state: 'failed',
165
- targetDataset: 'test',
166
- updatedAt: '2023-01-02T00:02:00Z',
167
- withHistory: false
168
- }
169
- ]);
170
- const { stdout } = await testCommand(CopyDatasetCommand, [
171
- '--list'
172
- ], {
173
- mocks: defaultMocks
174
- });
175
- expect(stdout).toContain('Dataset copy jobs');
176
- expect(stdout).toContain('job-1');
177
- expect(stdout).toContain('job-2');
178
- expect(stdout).toContain('production');
179
- expect(stdout).toContain('staging');
180
- });
181
- test('lists copy jobs with offset and limit', async ()=>{
182
- mockApi({
183
- apiHost: `https://${testProjectId}.api.sanity.io`,
184
- apiVersion: DATASET_API_VERSION,
185
- method: 'get',
186
- query: {
187
- limit: '10',
188
- offset: '2'
189
- },
190
- uri: `/projects/${testProjectId}/datasets/copy`
191
- }).reply(200, [
192
- {
193
- createdAt: '2023-01-01T00:00:00Z',
194
- id: 'job-2',
195
- sourceDataset: 'production',
196
- state: 'completed',
197
- targetDataset: 'backup',
198
- updatedAt: '2023-01-01T00:05:00Z',
199
- withHistory: true
200
- },
201
- {
202
- createdAt: '2023-01-02T00:00:00Z',
203
- id: 'job-3',
204
- sourceDataset: 'staging',
205
- state: 'failed',
206
- targetDataset: 'test',
207
- updatedAt: '2023-01-02T00:02:00Z',
208
- withHistory: false
209
- }
210
- ]);
211
- const { stdout } = await testCommand(CopyDatasetCommand, [
212
- '--list',
213
- '--offset',
214
- '2',
215
- '--limit',
216
- '10'
217
- ], {
218
- mocks: defaultMocks
219
- });
220
- expect(stdout).toContain('job-2');
221
- expect(stdout).toContain('job-3');
222
- expect(stdout).toContain('production');
223
- expect(stdout).toContain('staging');
224
- });
225
- test('shows message when no copy jobs exist', async ()=>{
226
- mockApi({
227
- apiHost: `https://${testProjectId}.api.sanity.io`,
228
- apiVersion: DATASET_API_VERSION,
229
- method: 'get',
230
- uri: `/projects/${testProjectId}/datasets/copy`
231
- }).reply(200, []);
232
- const { stdout } = await testCommand(CopyDatasetCommand, [
233
- '--list'
234
- ], {
235
- mocks: defaultMocks
236
- });
237
- expect(stdout).toContain("This project doesn't have any dataset copy jobs");
238
- });
239
- test('handles errors when listing copy jobs', async ()=>{
240
- mockApi({
241
- apiHost: `https://${testProjectId}.api.sanity.io`,
242
- apiVersion: DATASET_API_VERSION,
243
- method: 'get',
244
- uri: `/projects/${testProjectId}/datasets/copy`
245
- }).reply(500, {
246
- error: 'API Error',
247
- message: 'API Error'
248
- });
249
- const { error } = await testCommand(CopyDatasetCommand, [
250
- '--list'
251
- ], {
252
- mocks: defaultMocks
253
- });
254
- expect(error?.message).toContain('Failed to list dataset copy jobs');
255
- expect(error?.oclif?.exit).toBe(1);
256
- });
257
- });
258
- describe('attach mode', ()=>{
259
- test('attaches to running job and shows progress', async ()=>{
260
- mockFollowCopyJobProgress.mockReturnValue(of({
261
- progress: 25,
262
- type: 'progress'
263
- }, {
264
- progress: 50,
265
- type: 'progress'
266
- }, {
267
- progress: 75,
268
- type: 'progress'
269
- }, {
270
- progress: 100,
271
- type: 'progress'
272
- }));
273
- const { stdout } = await testCommand(CopyDatasetCommand, [
274
- '--attach',
275
- 'job-123'
276
- ], {
277
- mocks: defaultMocks
278
- });
279
- expect(mockFollowCopyJobProgress).toHaveBeenCalledWith({
280
- jobId: 'job-123',
281
- projectId: 'test-project'
282
- });
283
- expect(stdout).toContain('Job job-123 completed');
284
- });
285
- test('handles progress tracking errors', async ()=>{
286
- mockFollowCopyJobProgress.mockReturnValue(throwError(()=>new Error('Connection lost')));
287
- const { error } = await testCommand(CopyDatasetCommand, [
288
- '--attach',
289
- 'job-123'
290
- ], {
291
- mocks: defaultMocks
292
- });
293
- expect(error?.message).toContain('Failed to attach to copy job: Connection lost');
294
- expect(error?.oclif?.exit).toBe(1);
295
- });
296
- test('rejects whitespace-only jobId', async ()=>{
297
- const { error } = await testCommand(CopyDatasetCommand, [
298
- '--attach',
299
- ' '
300
- ], {
301
- mocks: defaultMocks
302
- });
303
- expect(error?.message).toContain('Please supply a valid jobId');
304
- expect(error?.oclif?.exit).toBe(1);
305
- });
306
- test('handles JSON parse errors from EventSource', async ()=>{
307
- mockFollowCopyJobProgress.mockReturnValue(throwError(()=>new Error('Invalid JSON received from server: Unexpected token')));
308
- const { error } = await testCommand(CopyDatasetCommand, [
309
- '--attach',
310
- 'job-123'
311
- ], {
312
- mocks: defaultMocks
313
- });
314
- expect(error?.message).toContain('Invalid JSON received from server');
315
- expect(error?.oclif?.exit).toBe(1);
316
- });
317
- test('handles EventSource reconnection', async ()=>{
318
- mockFollowCopyJobProgress.mockReturnValue(of({
319
- progress: 25,
320
- type: 'progress'
321
- }, {
322
- type: 'reconnect'
323
- }, {
324
- progress: 50,
325
- type: 'progress'
326
- }));
327
- const { stdout } = await testCommand(CopyDatasetCommand, [
328
- '--attach',
329
- 'job-123'
330
- ], {
331
- mocks: defaultMocks
332
- });
333
- expect(mockFollowCopyJobProgress).toHaveBeenCalledWith({
334
- jobId: 'job-123',
335
- projectId: 'test-project'
336
- });
337
- expect(stdout).toContain('Job job-123 completed');
338
- });
339
- test('handles channel_error from EventSource', async ()=>{
340
- mockFollowCopyJobProgress.mockReturnValue(throwError(()=>new Error('Copy job failed: Channel closed unexpectedly')));
341
- const { error } = await testCommand(CopyDatasetCommand, [
342
- '--attach',
343
- 'job-123'
344
- ], {
345
- mocks: defaultMocks
346
- });
347
- expect(error?.message).toContain('Copy job failed');
348
- expect(error?.oclif?.exit).toBe(1);
349
- });
350
- });
351
- describe('copy mode', ()=>{
352
- test('copies dataset with provided arguments', async ()=>{
353
- mockListDatasets.mockResolvedValue([
354
- createMockDataset('production'),
355
- createMockDataset('staging')
356
- ]);
357
- mockApi({
358
- apiHost: `https://${testProjectId}.api.sanity.io`,
359
- apiVersion: DATASET_API_VERSION,
360
- method: 'put',
361
- uri: `/datasets/production/copy`
362
- }).reply(200, {
363
- jobId: 'job-456'
364
- });
365
- mockFollowCopyJobProgress.mockReturnValue(of({
366
- progress: 100,
367
- type: 'progress'
368
- }));
369
- const { stdout } = await testCommand(CopyDatasetCommand, [
370
- 'production',
371
- 'backup'
372
- ], {
373
- mocks: defaultMocks
374
- });
375
- expect(stdout).toContain('Copying dataset production to backup');
376
- expect(stdout).toContain('Job job-456 started');
377
- expect(stdout).toContain('Job job-456 completed');
378
- });
379
- test('prompts for source dataset when not provided', async ()=>{
380
- mockListDatasets.mockResolvedValue([
381
- createMockDataset('production'),
382
- createMockDataset('staging')
383
- ]);
384
- mockSelect.mockResolvedValueOnce('production');
385
- mockSelect.mockResolvedValueOnce('backup');
386
- mockApi({
387
- apiHost: `https://${testProjectId}.api.sanity.io`,
388
- apiVersion: DATASET_API_VERSION,
389
- method: 'put',
390
- uri: `/datasets/production/copy`
391
- }).reply(200, {
392
- jobId: 'job-789'
393
- });
394
- mockFollowCopyJobProgress.mockReturnValue(of({
395
- progress: 100,
396
- type: 'progress'
397
- }));
398
- await testCommand(CopyDatasetCommand, [], {
399
- mocks: defaultMocks
400
- });
401
- expect(mockSelect).toHaveBeenCalledWith({
402
- choices: expect.arrayContaining([
403
- expect.objectContaining({
404
- value: 'production'
405
- }),
406
- expect.objectContaining({
407
- value: 'staging'
408
- })
409
- ]),
410
- message: 'Select the dataset name:'
411
- });
412
- });
413
- test.each([
414
- {
415
- args: [
416
- 'Invalid-Dataset',
417
- 'backup'
418
- ],
419
- description: 'source dataset name is invalid',
420
- expectedError: 'must be all lowercase',
421
- setupMocks: ()=>{
422
- // No additional mocks needed - validation happens before dataset fetch
423
- }
424
- },
425
- {
426
- args: [
427
- 'nonexistent',
428
- 'backup'
429
- ],
430
- description: 'source dataset does not exist',
431
- expectedError: 'Source dataset "nonexistent" doesn\'t exist',
432
- setupMocks: ()=>{
433
- mockListDatasets.mockResolvedValue([
434
- createMockDataset('production'),
435
- createMockDataset('staging')
436
- ]);
437
- }
438
- },
439
- {
440
- args: [
441
- 'production',
442
- 'Invalid-Dataset'
443
- ],
444
- description: 'target dataset name is invalid',
445
- expectedError: 'must be all lowercase',
446
- setupMocks: ()=>{
447
- mockListDatasets.mockResolvedValue([
448
- createMockDataset('production'),
449
- createMockDataset('staging')
450
- ]);
451
- }
452
- },
453
- {
454
- args: [
455
- 'production',
456
- 'staging'
457
- ],
458
- description: 'target dataset already exists',
459
- expectedError: 'Target dataset "staging" already exists',
460
- setupMocks: ()=>{
461
- mockListDatasets.mockResolvedValue([
462
- createMockDataset('production'),
463
- createMockDataset('staging')
464
- ]);
465
- }
466
- }
467
- ])('errors when $description', async ({ args, expectedError, setupMocks })=>{
468
- setupMocks();
469
- const { error } = await testCommand(CopyDatasetCommand, args, {
470
- mocks: defaultMocks
471
- });
472
- expect(error?.message).toContain(expectedError);
473
- expect(error?.oclif?.exit).toBe(1);
474
- });
475
- test('copies dataset with skip-history flag', async ()=>{
476
- mockListDatasets.mockResolvedValue([
477
- createMockDataset('production'),
478
- createMockDataset('staging')
479
- ]);
480
- mockApi({
481
- apiHost: `https://${testProjectId}.api.sanity.io`,
482
- apiVersion: DATASET_API_VERSION,
483
- method: 'put',
484
- uri: `/datasets/production/copy`
485
- }).reply(200, {
486
- jobId: 'job-skip'
487
- });
488
- mockFollowCopyJobProgress.mockReturnValue(of({
489
- progress: 100,
490
- type: 'progress'
491
- }));
492
- await testCommand(CopyDatasetCommand, [
493
- 'production',
494
- 'backup',
495
- '--skip-history'
496
- ], {
497
- mocks: defaultMocks
498
- });
499
- });
500
- test('copies dataset with detach flag (does not wait for completion)', async ()=>{
501
- mockListDatasets.mockResolvedValue([
502
- createMockDataset('production'),
503
- createMockDataset('staging')
504
- ]);
505
- mockApi({
506
- apiHost: `https://${testProjectId}.api.sanity.io`,
507
- apiVersion: DATASET_API_VERSION,
508
- method: 'put',
509
- uri: `/datasets/production/copy`
510
- }).reply(200, {
511
- jobId: 'job-detach'
512
- });
513
- const { stdout } = await testCommand(CopyDatasetCommand, [
514
- 'production',
515
- 'backup',
516
- '--detach'
517
- ], {
518
- mocks: defaultMocks
519
- });
520
- expect(stdout).toContain('Job job-detach started');
521
- expect(stdout).not.toContain('Job job-detach completed');
522
- expect(mockFollowCopyJobProgress).not.toHaveBeenCalled();
523
- });
524
- test('handles copy dataset errors', async ()=>{
525
- mockListDatasets.mockResolvedValue([
526
- createMockDataset('production'),
527
- createMockDataset('staging')
528
- ]);
529
- mockApi({
530
- apiHost: `https://${testProjectId}.api.sanity.io`,
531
- apiVersion: DATASET_API_VERSION,
532
- method: 'put',
533
- uri: `/datasets/production/copy`
534
- }).reply(500, {
535
- error: 'Insufficient permissions',
536
- message: 'Insufficient permissions'
537
- });
538
- const { error } = await testCommand(CopyDatasetCommand, [
539
- 'production',
540
- 'backup'
541
- ], {
542
- mocks: defaultMocks
543
- });
544
- expect(error?.message).toContain('Dataset copying failed');
545
- expect(error?.oclif?.exit).toBe(1);
546
- });
547
- test('handles fetch datasets error', async ()=>{
548
- mockListDatasets.mockRejectedValue(new Error('Network error'));
549
- const { error } = await testCommand(CopyDatasetCommand, [
550
- 'production',
551
- 'backup'
552
- ], {
553
- mocks: defaultMocks
554
- });
555
- expect(error?.message).toContain('Failed to fetch datasets: Network error');
556
- expect(error?.oclif?.exit).toBe(1);
557
- });
558
- });
559
- describe('flag validation', ()=>{
560
- test.each([
561
- {
562
- desc: '--list with --attach',
563
- flags: [
564
- '--list',
565
- '--attach',
566
- 'job-123'
567
- ]
568
- },
569
- {
570
- desc: '--list with --detach',
571
- flags: [
572
- '--list',
573
- '--detach'
574
- ]
575
- },
576
- {
577
- desc: '--attach with --detach',
578
- flags: [
579
- '--attach',
580
- 'job-123',
581
- '--detach'
582
- ]
583
- }
584
- ])('errors when using mutually exclusive flags: $desc', async ({ flags })=>{
585
- const { error } = await testCommand(CopyDatasetCommand, flags, {
586
- mocks: defaultMocks
587
- });
588
- expect(error?.message).toContain('cannot also be provided when using');
589
- expect(error?.oclif?.exit).toBe(2);
590
- });
591
- test.each([
592
- {
593
- flag: '--offset',
594
- value: '2'
595
- },
596
- {
597
- flag: '--limit',
598
- value: '10'
599
- }
600
- ])('errors when $flag is used without --list', async ({ flag, value })=>{
601
- const { error } = await testCommand(CopyDatasetCommand, [
602
- flag,
603
- value
604
- ], {
605
- mocks: defaultMocks
606
- });
607
- expect(error?.message).toContain('--list');
608
- expect(error?.oclif?.exit).toBe(2);
609
- });
610
- });
611
- test('errors when no project ID is found', async ()=>{
612
- const { error } = await testCommand(CopyDatasetCommand, [
613
- 'production',
614
- 'backup'
615
- ], {
616
- mocks: {
617
- ...defaultMocks,
618
- cliConfig: {
619
- api: undefined
620
- }
621
- }
622
- });
623
- expect(error?.message).toContain('sanity.cli.ts does not contain a project identifier');
624
- expect(error?.oclif?.exit).toBe(1);
625
- });
626
- });
627
-
628
- //# sourceMappingURL=copy.test.js.map