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

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