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

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