@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 +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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"}