@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,53 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { describe, expect, test } from 'vitest';
3
- describe('#dataset:import', ()=>{
4
- test('should print datasets:import help', async ()=>{
5
- const { stdout } = await runCommand('dataset import --help');
6
- expect(stdout).toMatchInlineSnapshot(String.raw`
7
- "Import documents to a Sanity dataset
8
-
9
- USAGE
10
- $ sanity dataset import SOURCE -p <value> -d <value> [-t <value>]
11
- [--replace | --missing] [--allow-failing-assets]
12
- [--allow-assets-in-different-dataset] [--replace-assets]
13
- [--skip-cross-dataset-references] [--allow-system-documents]
14
- [--asset-concurrency <value>]
15
-
16
- ARGUMENTS
17
- SOURCE Source file (use "-" for stdin)
18
-
19
- FLAGS
20
- -d, --dataset=<value> (required) Dataset to import to
21
- -p, --project=<value> (required) Project ID to import to
22
- -t, --token=<value> [env: SANITY_IMPORT_TOKEN] Token to
23
- authenticate with
24
- --allow-assets-in-different-dataset Allow asset documents to reference
25
- different project/dataset
26
- --allow-failing-assets Skip assets that cannot be
27
- fetched/uploaded
28
- --allow-system-documents Imports system documents
29
- --asset-concurrency=<value> Number of parallel asset imports
30
- --missing Skip documents that already exist
31
- --replace Replace documents with the same IDs
32
- --replace-assets Skip reuse of existing assets
33
- --skip-cross-dataset-references Skips references to other datasets
34
-
35
- DESCRIPTION
36
- Import documents to a Sanity dataset
37
-
38
- EXAMPLES
39
- Import "./my-dataset.ndjson" into dataset "staging"
40
-
41
- $ sanity dataset import -p myPrOj -d staging -t someSecretToken \
42
- my-dataset.ndjson
43
-
44
- Import into dataset "test" from stdin, read token from env var
45
-
46
- cat my-dataset.ndjson | sanity dataset import -p myPrOj -d test -
47
-
48
- "
49
- `);
50
- });
51
- });
52
-
53
- //# sourceMappingURL=import.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/dataset/__tests__/import.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {describe, expect, test} from 'vitest'\n\ndescribe('#dataset:import', () => {\n test('should print datasets:import help', async () => {\n const {stdout} = await runCommand('dataset import --help')\n\n expect(stdout).toMatchInlineSnapshot(String.raw`\n \"Import documents to a Sanity dataset\n\n USAGE\n $ sanity dataset import SOURCE -p <value> -d <value> [-t <value>]\n [--replace | --missing] [--allow-failing-assets]\n [--allow-assets-in-different-dataset] [--replace-assets]\n [--skip-cross-dataset-references] [--allow-system-documents]\n [--asset-concurrency <value>]\n\n ARGUMENTS\n SOURCE Source file (use \"-\" for stdin)\n\n FLAGS\n -d, --dataset=<value> (required) Dataset to import to\n -p, --project=<value> (required) Project ID to import to\n -t, --token=<value> [env: SANITY_IMPORT_TOKEN] Token to\n authenticate with\n --allow-assets-in-different-dataset Allow asset documents to reference\n different project/dataset\n --allow-failing-assets Skip assets that cannot be\n fetched/uploaded\n --allow-system-documents Imports system documents\n --asset-concurrency=<value> Number of parallel asset imports\n --missing Skip documents that already exist\n --replace Replace documents with the same IDs\n --replace-assets Skip reuse of existing assets\n --skip-cross-dataset-references Skips references to other datasets\n\n DESCRIPTION\n Import documents to a Sanity dataset\n\n EXAMPLES\n Import \"./my-dataset.ndjson\" into dataset \"staging\"\n\n $ sanity dataset import -p myPrOj -d staging -t someSecretToken \\\n my-dataset.ndjson\n\n Import into dataset \"test\" from stdin, read token from env var\n\n cat my-dataset.ndjson | sanity dataset import -p myPrOj -d test -\n\n \"\n `)\n })\n})\n"],"names":["runCommand","describe","expect","test","stdout","toMatchInlineSnapshot","String","raw"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AACtC,SAAQC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,QAAO,SAAQ;AAE7CF,SAAS,mBAAmB;IAC1BE,KAAK,qCAAqC;QACxC,MAAM,EAACC,MAAM,EAAC,GAAG,MAAMJ,WAAW;QAElCE,OAAOE,QAAQC,qBAAqB,CAACC,OAAOC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2ChD,CAAC;IACH;AACF"}
@@ -1,216 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { createTestClient, mockApi, testCommand } from '@sanity/cli-test';
3
- import nock from 'nock';
4
- import { afterEach, describe, expect, test, vi } from 'vitest';
5
- import { DATASET_API_VERSION } from '../../../services/datasets.js';
6
- import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
7
- import { ListDatasetCommand } from '../list.js';
8
- const mockListDatasets = vi.hoisted(()=>vi.fn());
9
- const testProjectId = vi.hoisted(()=>'test-project');
10
- const testToken = vi.hoisted(()=>'test-token');
11
- vi.mock('@sanity/cli-core', async ()=>{
12
- const actual = await vi.importActual('@sanity/cli-core');
13
- const testClient = createTestClient({
14
- apiVersion: 'v2025-09-16',
15
- projectId: testProjectId,
16
- token: testToken
17
- });
18
- return {
19
- ...actual,
20
- getProjectCliClient: vi.fn().mockResolvedValue({
21
- datasets: {
22
- list: mockListDatasets
23
- },
24
- request: testClient.request
25
- })
26
- };
27
- });
28
- const defaultMocks = {
29
- cliConfig: {
30
- api: {
31
- projectId: testProjectId
32
- }
33
- },
34
- projectRoot: {
35
- directory: '/test/path',
36
- path: '/test/path/sanity.config.ts',
37
- type: 'studio'
38
- },
39
- token: testToken
40
- };
41
- describe('#dataset:list', ()=>{
42
- afterEach(()=>{
43
- vi.clearAllMocks();
44
- const pending = nock.pendingMocks();
45
- nock.cleanAll();
46
- expect(pending, 'pending mocks').toEqual([]);
47
- });
48
- test('--help works', async ()=>{
49
- const { stdout } = await runCommand([
50
- 'dataset list',
51
- '--help'
52
- ]);
53
- expect(stdout).toMatchInlineSnapshot(`
54
- "List datasets of your project
55
-
56
- USAGE
57
- $ sanity dataset list
58
-
59
- DESCRIPTION
60
- List datasets of your project
61
-
62
- EXAMPLES
63
- List datasets of your project
64
-
65
- $ sanity dataset list
66
-
67
- "
68
- `);
69
- });
70
- test('lists datasets successfully', async ()=>{
71
- mockListDatasets.mockResolvedValue([
72
- {
73
- name: 'production'
74
- },
75
- {
76
- name: 'test'
77
- },
78
- {
79
- name: 'development'
80
- }
81
- ]);
82
- mockApi({
83
- apiHost: `https://${testProjectId}.api.sanity.io`,
84
- apiVersion: DATASET_API_VERSION,
85
- method: 'get',
86
- uri: `/aliases`
87
- }).reply(200, []);
88
- const { stdout } = await testCommand(ListDatasetCommand, [], {
89
- mocks: defaultMocks
90
- });
91
- expect(stdout).toBe('production\ntest\ndevelopment\n');
92
- });
93
- test('lists datasets and aliases successfully', async ()=>{
94
- mockListDatasets.mockResolvedValue([
95
- {
96
- name: 'production'
97
- },
98
- {
99
- name: 'test'
100
- }
101
- ]);
102
- mockApi({
103
- apiHost: `https://${testProjectId}.api.sanity.io`,
104
- apiVersion: DATASET_API_VERSION,
105
- method: 'get',
106
- uri: `/aliases`
107
- }).reply(200, [
108
- {
109
- datasetName: 'production',
110
- name: 'prod'
111
- },
112
- {
113
- datasetName: 'test',
114
- name: 'staging'
115
- }
116
- ]);
117
- const { stdout } = await testCommand(ListDatasetCommand, [], {
118
- mocks: defaultMocks
119
- });
120
- expect(stdout).toBe('production\ntest\n~prod -> production\n~staging -> test\n');
121
- });
122
- test('handles unlinked aliases', async ()=>{
123
- mockListDatasets.mockResolvedValue([
124
- {
125
- name: 'production'
126
- }
127
- ]);
128
- mockApi({
129
- apiHost: `https://${testProjectId}.api.sanity.io`,
130
- apiVersion: DATASET_API_VERSION,
131
- method: 'get',
132
- uri: `/aliases`
133
- }).reply(200, [
134
- {
135
- datasetName: 'production',
136
- name: 'prod'
137
- },
138
- {
139
- datasetName: null,
140
- name: 'old'
141
- }
142
- ]);
143
- const { stdout } = await testCommand(ListDatasetCommand, [], {
144
- mocks: defaultMocks
145
- });
146
- expect(stdout).toBe('production\n~prod -> production\n~old -> <unlinked>\n');
147
- });
148
- test('handles empty dataset list', async ()=>{
149
- mockListDatasets.mockResolvedValue([]);
150
- mockApi({
151
- apiHost: `https://${testProjectId}.api.sanity.io`,
152
- apiVersion: DATASET_API_VERSION,
153
- method: 'get',
154
- uri: `/aliases`
155
- }).reply(200, []);
156
- const { stdout } = await testCommand(ListDatasetCommand, [], {
157
- mocks: defaultMocks
158
- });
159
- expect(stdout).toBe('No datasets found for this project.\n');
160
- });
161
- test('handles alias fetch failure gracefully', async ()=>{
162
- mockListDatasets.mockResolvedValue([
163
- {
164
- name: 'production'
165
- }
166
- ]);
167
- mockApi({
168
- apiHost: `https://${testProjectId}.api.sanity.io`,
169
- apiVersion: DATASET_API_VERSION,
170
- method: 'get',
171
- uri: `/aliases`
172
- }).reply(500, {
173
- error: 'Alias service unavailable',
174
- message: 'Alias service unavailable'
175
- });
176
- const { stdout } = await testCommand(ListDatasetCommand, [], {
177
- mocks: defaultMocks
178
- });
179
- expect(stdout).toBe('production\n');
180
- });
181
- test('shows error when no project ID is found', async ()=>{
182
- const { error } = await testCommand(ListDatasetCommand, [], {
183
- mocks: {
184
- ...defaultMocks,
185
- cliConfig: {
186
- api: {
187
- projectId: undefined
188
- }
189
- }
190
- }
191
- });
192
- expect(error?.message).toBe(NO_PROJECT_ID);
193
- expect(error?.oclif?.exit).toBe(1);
194
- });
195
- test('handles API errors when listing datasets ', async ()=>{
196
- const listError = new Error('Internal Server Error');
197
- Object.assign(listError, {
198
- statusCode: 500
199
- });
200
- mockListDatasets.mockRejectedValue(listError);
201
- mockApi({
202
- apiHost: `https://${testProjectId}.api.sanity.io`,
203
- apiVersion: DATASET_API_VERSION,
204
- method: 'get',
205
- uri: `/aliases`
206
- }).reply(200, []);
207
- const { error } = await testCommand(ListDatasetCommand, [], {
208
- mocks: defaultMocks
209
- });
210
- expect(error?.message).toContain('Dataset list retrieval failed');
211
- expect(error?.message).toContain('Internal Server Error');
212
- expect(error?.oclif?.exit).toBe(1);
213
- });
214
- });
215
-
216
- //# sourceMappingURL=list.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/dataset/__tests__/list.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {createTestClient, mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {DATASET_API_VERSION, type DatasetAliasDefinition} from '../../../services/datasets.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {ListDatasetCommand} from '../list.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 () => {\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 list: mockListDatasets,\n } as never,\n request: testClient.request,\n }),\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\ndescribe('#dataset:list', () => {\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 list', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"List datasets of your project\n\n USAGE\n $ sanity dataset list\n\n DESCRIPTION\n List datasets of your project\n\n EXAMPLES\n List datasets of your project\n\n $ sanity dataset list\n\n \"\n `)\n })\n\n test('lists datasets successfully', async () => {\n mockListDatasets.mockResolvedValue([\n {name: 'production'} as never,\n {name: 'test'} as never,\n {name: 'development'} as never,\n ])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n const {stdout} = await testCommand(ListDatasetCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toBe('production\\ntest\\ndevelopment\\n')\n })\n\n test('lists datasets and aliases successfully', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never, {name: 'test'} as never])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [\n {datasetName: 'production', name: 'prod'},\n {datasetName: 'test', name: 'staging'},\n ])\n\n const {stdout} = await testCommand(ListDatasetCommand, [], {\n mocks: defaultMocks,\n })\n expect(stdout).toBe('production\\ntest\\n~prod -> production\\n~staging -> test\\n')\n })\n\n test('handles unlinked aliases', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [\n {datasetName: 'production', name: 'prod'},\n {datasetName: null, name: 'old'},\n ] as DatasetAliasDefinition[])\n\n const {stdout} = await testCommand(ListDatasetCommand, [], {\n mocks: defaultMocks,\n })\n expect(stdout).toBe('production\\n~prod -> production\\n~old -> <unlinked>\\n')\n })\n\n test('handles empty dataset list', async () => {\n mockListDatasets.mockResolvedValue([])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n const {stdout} = await testCommand(ListDatasetCommand, [], {\n mocks: defaultMocks,\n })\n expect(stdout).toBe('No datasets found for this project.\\n')\n })\n\n test('handles alias fetch failure gracefully', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(500, {\n error: 'Alias service unavailable',\n message: 'Alias service unavailable',\n })\n\n const {stdout} = await testCommand(ListDatasetCommand, [], {\n mocks: defaultMocks,\n })\n expect(stdout).toBe('production\\n')\n })\n\n test('shows error when no project ID is found', async () => {\n const {error} = await testCommand(ListDatasetCommand, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: undefined}},\n },\n })\n expect(error?.message).toBe(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles API errors when listing datasets ', async () => {\n const listError = new Error('Internal Server Error')\n Object.assign(listError, {statusCode: 500})\n mockListDatasets.mockRejectedValue(listError)\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n const {error} = await testCommand(ListDatasetCommand, [], {\n mocks: defaultMocks,\n })\n expect(error?.message).toContain('Dataset list retrieval failed')\n expect(error?.message).toContain('Internal Server Error')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","createTestClient","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","DATASET_API_VERSION","NO_PROJECT_ID","ListDatasetCommand","mockListDatasets","hoisted","fn","testProjectId","testToken","mock","actual","importActual","testClient","apiVersion","projectId","token","getProjectCliClient","mockResolvedValue","datasets","list","request","defaultMocks","cliConfig","api","projectRoot","directory","path","type","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","name","apiHost","method","uri","reply","mocks","toBe","datasetName","error","message","undefined","oclif","exit","listError","Error","Object","assign","statusCode","mockRejectedValue","toContain"],"mappings":"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"}
@@ -1,339 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { createTestClient, mockApi, testCommand } from '@sanity/cli-test';
3
- import nock from 'nock';
4
- import { afterEach, describe, expect, test, vi } from 'vitest';
5
- import { DATASET_API_VERSION } from '../../../../services/datasets.js';
6
- import { PROJECT_FEATURES_API_VERSION } from '../../../../services/getProjectFeatures.js';
7
- import { NO_PROJECT_ID } from '../../../../util/errorMessages.js';
8
- import { CreateAliasCommand } from '../create.js';
9
- const mockListDatasets = vi.hoisted(()=>vi.fn());
10
- const testProjectId = vi.hoisted(()=>'test-project');
11
- const testToken = vi.hoisted(()=>'test-token');
12
- vi.mock('@sanity/cli-core', async (importOriginal)=>{
13
- const actual = await importOriginal();
14
- const testClient = createTestClient({
15
- apiVersion: 'v2025-09-16',
16
- projectId: testProjectId,
17
- token: testToken
18
- });
19
- return {
20
- ...actual,
21
- getProjectCliClient: vi.fn().mockResolvedValue({
22
- datasets: {
23
- list: mockListDatasets
24
- },
25
- request: testClient.request
26
- })
27
- };
28
- });
29
- const defaultMocks = {
30
- cliConfig: {
31
- api: {
32
- projectId: testProjectId
33
- }
34
- },
35
- projectRoot: {
36
- directory: '/test/path',
37
- path: '/test/path/sanity.config.ts',
38
- type: 'studio'
39
- },
40
- token: testToken
41
- };
42
- describe('#dataset:alias:create', ()=>{
43
- afterEach(()=>{
44
- vi.clearAllMocks();
45
- const pending = nock.pendingMocks();
46
- nock.cleanAll();
47
- expect(pending, 'pending mocks').toEqual([]);
48
- });
49
- test('help works correctly', async ()=>{
50
- const { stdout } = await runCommand([
51
- 'dataset alias create',
52
- '--help'
53
- ]);
54
- expect(stdout).toMatchInlineSnapshot(`
55
- "Create a dataset alias within your project
56
-
57
- USAGE
58
- $ sanity dataset alias create [ALIASNAME] [TARGETDATASET]
59
-
60
- ARGUMENTS
61
- [ALIASNAME] Dataset alias name to create
62
- [TARGETDATASET] Target dataset name to link the alias to
63
-
64
- DESCRIPTION
65
- Create a dataset alias within your project
66
-
67
- EXAMPLES
68
- Create an alias with interactive prompts
69
-
70
- $ sanity dataset alias create
71
-
72
- Create alias named "conference" with interactive dataset selection
73
-
74
- $ sanity dataset alias create conference
75
-
76
- Create alias "conference" linked to "conf-2025" dataset
77
-
78
- $ sanity dataset alias create conference conf-2025
79
-
80
- Create alias with explicit ~ prefix
81
-
82
- $ sanity dataset alias create ~conference conf-2025
83
-
84
- "
85
- `);
86
- });
87
- test.each([
88
- [
89
- 'test-alias',
90
- 'without ~ prefix'
91
- ],
92
- [
93
- '~test-alias',
94
- 'with ~ prefix'
95
- ]
96
- ])('creates alias with valid arguments: %s (%s)', async (aliasInput)=>{
97
- mockListDatasets.mockResolvedValue([
98
- {
99
- name: 'production'
100
- }
101
- ]);
102
- mockApi({
103
- apiHost: `https://${testProjectId}.api.sanity.io`,
104
- apiVersion: PROJECT_FEATURES_API_VERSION,
105
- method: 'get',
106
- uri: `/features`
107
- }).reply(200, [
108
- 'advancedDatasetManagement'
109
- ]);
110
- mockApi({
111
- apiHost: `https://${testProjectId}.api.sanity.io`,
112
- apiVersion: DATASET_API_VERSION,
113
- method: 'get',
114
- uri: `/aliases`
115
- }).reply(200, []);
116
- mockApi({
117
- apiHost: `https://${testProjectId}.api.sanity.io`,
118
- apiVersion: DATASET_API_VERSION,
119
- method: 'put',
120
- uri: `/aliases/test-alias`
121
- }).reply(200, {
122
- aliasName: 'test-alias',
123
- datasetName: 'production'
124
- });
125
- const { stdout } = await testCommand(CreateAliasCommand, [
126
- aliasInput,
127
- 'production'
128
- ], {
129
- mocks: defaultMocks
130
- });
131
- expect(stdout).toContain('Dataset alias ~test-alias created and linked to production successfully');
132
- });
133
- test('creates alias without target dataset', async ()=>{
134
- mockListDatasets.mockResolvedValue([]);
135
- mockApi({
136
- apiHost: `https://${testProjectId}.api.sanity.io`,
137
- apiVersion: PROJECT_FEATURES_API_VERSION,
138
- method: 'get',
139
- uri: `/features`
140
- }).reply(200, [
141
- 'advancedDatasetManagement'
142
- ]);
143
- mockApi({
144
- apiHost: `https://${testProjectId}.api.sanity.io`,
145
- apiVersion: DATASET_API_VERSION,
146
- method: 'get',
147
- uri: `/aliases`
148
- }).reply(200, []);
149
- mockApi({
150
- apiHost: `https://${testProjectId}.api.sanity.io`,
151
- apiVersion: DATASET_API_VERSION,
152
- method: 'put',
153
- uri: `/aliases/test-alias`
154
- }).reply(200, {
155
- aliasName: 'test-alias',
156
- datasetName: null
157
- });
158
- const { stdout } = await testCommand(CreateAliasCommand, [
159
- 'test-alias'
160
- ], {
161
- mocks: defaultMocks
162
- });
163
- expect(stdout).toContain('Dataset alias ~test-alias created successfully');
164
- });
165
- test('fails when alias already exists', async ()=>{
166
- mockListDatasets.mockResolvedValue([
167
- {
168
- name: 'production'
169
- }
170
- ]);
171
- mockApi({
172
- apiHost: `https://${testProjectId}.api.sanity.io`,
173
- apiVersion: PROJECT_FEATURES_API_VERSION,
174
- method: 'get',
175
- uri: `/features`
176
- }).reply(200, [
177
- 'advancedDatasetManagement'
178
- ]);
179
- mockApi({
180
- apiHost: `https://${testProjectId}.api.sanity.io`,
181
- apiVersion: DATASET_API_VERSION,
182
- method: 'get',
183
- uri: `/aliases`
184
- }).reply(200, [
185
- {
186
- datasetName: 'production',
187
- name: 'existing-alias'
188
- }
189
- ]);
190
- const { error } = await testCommand(CreateAliasCommand, [
191
- 'existing-alias',
192
- 'production'
193
- ], {
194
- mocks: defaultMocks
195
- });
196
- expect(error?.message).toContain('Dataset alias "~existing-alias" already exists');
197
- expect(error?.oclif?.exit).toBe(1);
198
- });
199
- test('fails when project lacks advanced dataset management feature', async ()=>{
200
- mockListDatasets.mockResolvedValue([
201
- {
202
- name: 'production'
203
- }
204
- ]);
205
- mockApi({
206
- apiHost: `https://${testProjectId}.api.sanity.io`,
207
- apiVersion: PROJECT_FEATURES_API_VERSION,
208
- method: 'get',
209
- uri: `/features`
210
- }).reply(200, []);
211
- const { error } = await testCommand(CreateAliasCommand, [
212
- 'test-alias',
213
- 'production'
214
- ], {
215
- mocks: defaultMocks
216
- });
217
- expect(error?.message).toContain('This project cannot create a dataset alias');
218
- expect(error?.oclif?.exit).toBe(1);
219
- });
220
- test('fails when target dataset does not exist', async ()=>{
221
- mockListDatasets.mockResolvedValue([
222
- {
223
- name: 'production'
224
- }
225
- ]);
226
- mockApi({
227
- apiHost: `https://${testProjectId}.api.sanity.io`,
228
- apiVersion: PROJECT_FEATURES_API_VERSION,
229
- method: 'get',
230
- uri: `/features`
231
- }).reply(200, [
232
- 'advancedDatasetManagement'
233
- ]);
234
- mockApi({
235
- apiHost: `https://${testProjectId}.api.sanity.io`,
236
- apiVersion: DATASET_API_VERSION,
237
- method: 'get',
238
- uri: `/aliases`
239
- }).reply(200, []);
240
- const { error } = await testCommand(CreateAliasCommand, [
241
- 'test-alias',
242
- 'nonexistent'
243
- ], {
244
- mocks: defaultMocks
245
- });
246
- expect(error?.message).toContain('Dataset "nonexistent" does not exist');
247
- expect(error?.message).toContain('Available datasets: production');
248
- expect(error?.oclif?.exit).toBe(1);
249
- });
250
- test('fails when no project ID available', async ()=>{
251
- const { error } = await testCommand(CreateAliasCommand, [
252
- 'test-alias',
253
- 'production'
254
- ], {
255
- mocks: {
256
- ...defaultMocks,
257
- cliConfig: {
258
- api: {}
259
- }
260
- }
261
- });
262
- expect(error?.message).toContain(NO_PROJECT_ID);
263
- expect(error?.oclif?.exit).toBe(1);
264
- });
265
- test('handles API errors gracefully', async ()=>{
266
- mockListDatasets.mockResolvedValue([
267
- {
268
- name: 'production'
269
- }
270
- ]);
271
- mockApi({
272
- apiHost: `https://${testProjectId}.api.sanity.io`,
273
- apiVersion: PROJECT_FEATURES_API_VERSION,
274
- method: 'get',
275
- uri: `/features`
276
- }).reply(200, [
277
- 'advancedDatasetManagement'
278
- ]);
279
- mockApi({
280
- apiHost: `https://${testProjectId}.api.sanity.io`,
281
- apiVersion: DATASET_API_VERSION,
282
- method: 'get',
283
- uri: `/aliases`
284
- }).reply(200, []);
285
- mockApi({
286
- apiHost: `https://${testProjectId}.api.sanity.io`,
287
- apiVersion: DATASET_API_VERSION,
288
- method: 'put',
289
- uri: `/aliases/test-alias`
290
- }).reply(500, {
291
- error: 'API Error: Network timeout',
292
- message: 'API Error: Network timeout'
293
- });
294
- const { error } = await testCommand(CreateAliasCommand, [
295
- 'test-alias',
296
- 'production'
297
- ], {
298
- mocks: defaultMocks
299
- });
300
- expect(error?.message).toContain('Dataset alias creation failed: API Error: Network timeout');
301
- expect(error?.oclif?.exit).toBe(1);
302
- });
303
- test.each([
304
- [
305
- 'a',
306
- 'production',
307
- 'Alias name must be at least two characters long'
308
- ],
309
- [
310
- 'test-alias',
311
- 'Invalid Dataset',
312
- 'Dataset name must be all lowercase characters'
313
- ]
314
- ])('fails with invalid input: alias=%s, dataset=%s', async (alias, dataset, expectedError)=>{
315
- mockListDatasets.mockResolvedValue([
316
- {
317
- name: 'production'
318
- }
319
- ]);
320
- mockApi({
321
- apiHost: `https://${testProjectId}.api.sanity.io`,
322
- apiVersion: PROJECT_FEATURES_API_VERSION,
323
- method: 'get',
324
- uri: `/features`
325
- }).reply(200, [
326
- 'advancedDatasetManagement'
327
- ]);
328
- const { error } = await testCommand(CreateAliasCommand, [
329
- alias,
330
- dataset
331
- ], {
332
- mocks: defaultMocks
333
- });
334
- expect(error?.message).toContain(expectedError);
335
- expect(error?.oclif?.exit).toBe(1);
336
- });
337
- });
338
-
339
- //# sourceMappingURL=create.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/commands/dataset/alias/__tests__/create.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {createTestClient, mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {DATASET_API_VERSION} from '../../../../services/datasets.js'\nimport {PROJECT_FEATURES_API_VERSION} from '../../../../services/getProjectFeatures.js'\nimport {NO_PROJECT_ID} from '../../../../util/errorMessages.js'\nimport {CreateAliasCommand} from '../create.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\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\ndescribe('#dataset:alias: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 correctly', async () => {\n const {stdout} = await runCommand(['dataset alias create', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a dataset alias within your project\n\n USAGE\n $ sanity dataset alias create [ALIASNAME] [TARGETDATASET]\n\n ARGUMENTS\n [ALIASNAME] Dataset alias name to create\n [TARGETDATASET] Target dataset name to link the alias to\n\n DESCRIPTION\n Create a dataset alias within your project\n\n EXAMPLES\n Create an alias with interactive prompts\n\n $ sanity dataset alias create\n\n Create alias named \"conference\" with interactive dataset selection\n\n $ sanity dataset alias create conference\n\n Create alias \"conference\" linked to \"conf-2025\" dataset\n\n $ sanity dataset alias create conference conf-2025\n\n Create alias with explicit ~ prefix\n\n $ sanity dataset alias create ~conference conf-2025\n\n \"\n `)\n })\n\n test.each([\n ['test-alias', 'without ~ prefix'],\n ['~test-alias', 'with ~ prefix'],\n ])('creates alias with valid arguments: %s (%s)', async (aliasInput) => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\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, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'put',\n uri: `/aliases/test-alias`,\n }).reply(200, {aliasName: 'test-alias', datasetName: 'production'})\n\n const {stdout} = await testCommand(CreateAliasCommand, [aliasInput, 'production'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain(\n 'Dataset alias ~test-alias created and linked to production successfully',\n )\n })\n\n test('creates alias without target dataset', 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, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'put',\n uri: `/aliases/test-alias`,\n }).reply(200, {aliasName: 'test-alias', datasetName: null})\n\n const {stdout} = await testCommand(CreateAliasCommand, ['test-alias'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Dataset alias ~test-alias created successfully')\n })\n\n test('fails when alias already exists', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\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, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [{datasetName: 'production', name: 'existing-alias'}])\n\n const {error} = await testCommand(CreateAliasCommand, ['existing-alias', 'production'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset alias \"~existing-alias\" already exists')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when project lacks advanced dataset management feature', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\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(CreateAliasCommand, ['test-alias', 'production'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('This project cannot create a dataset alias')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when target dataset does not exist', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\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, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'nonexistent'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset \"nonexistent\" does not exist')\n expect(error?.message).toContain('Available datasets: production')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('fails when no project ID available', async () => {\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'production'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {}},\n },\n })\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles API errors gracefully', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\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, ['advancedDatasetManagement'])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'get',\n uri: `/aliases`,\n }).reply(200, [])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: DATASET_API_VERSION,\n method: 'put',\n uri: `/aliases/test-alias`,\n }).reply(500, {error: 'API Error: Network timeout', message: 'API Error: Network timeout'})\n\n const {error} = await testCommand(CreateAliasCommand, ['test-alias', 'production'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset alias creation failed: API Error: Network timeout')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test.each([\n ['a', 'production', 'Alias name must be at least two characters long'],\n ['test-alias', 'Invalid Dataset', 'Dataset name must be all lowercase characters'],\n ])('fails with invalid input: alias=%s, dataset=%s', async (alias, dataset, expectedError) => {\n mockListDatasets.mockResolvedValue([{name: 'production'} as never])\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, ['advancedDatasetManagement'])\n\n const {error} = await testCommand(CreateAliasCommand, [alias, dataset], {mocks: defaultMocks})\n\n expect(error?.message).toContain(expectedError)\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","createTestClient","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","DATASET_API_VERSION","PROJECT_FEATURES_API_VERSION","NO_PROJECT_ID","CreateAliasCommand","mockListDatasets","hoisted","fn","testProjectId","testToken","mock","importOriginal","actual","testClient","apiVersion","projectId","token","getProjectCliClient","mockResolvedValue","datasets","list","request","defaultMocks","cliConfig","api","projectRoot","directory","path","type","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","each","aliasInput","name","apiHost","method","uri","reply","aliasName","datasetName","mocks","toContain","error","message","oclif","exit","toBe","alias","dataset","expectedError"],"mappings":"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"}