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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/README.md +2907 -109
  2. package/dist/actions/dataset/create.d.ts +49 -0
  3. package/dist/actions/dataset/create.js +48 -0
  4. package/dist/actions/dataset/create.js.map +1 -0
  5. package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
  6. package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
  7. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
  8. package/dist/actions/debug/gatherDebugInfo.js +15 -21
  9. package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
  10. package/dist/actions/debug/types.d.ts +0 -2
  11. package/dist/actions/debug/types.js.map +1 -1
  12. package/dist/actions/deploy/deployApp.js +13 -0
  13. package/dist/actions/deploy/deployApp.js.map +1 -1
  14. package/dist/actions/init/remoteTemplate.js +1 -1
  15. package/dist/actions/init/remoteTemplate.js.map +1 -1
  16. package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
  17. package/dist/actions/manifest/extractAppManifest.js +51 -0
  18. package/dist/actions/manifest/extractAppManifest.js.map +1 -0
  19. package/dist/actions/manifest/extractManifest.js +1 -1
  20. package/dist/actions/manifest/extractManifest.js.map +1 -1
  21. package/dist/actions/manifest/types.d.ts +6 -1
  22. package/dist/actions/manifest/types.js.map +1 -1
  23. package/dist/actions/media/importAspects.js +2 -1
  24. package/dist/actions/media/importAspects.js.map +1 -1
  25. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +1 -1
  26. package/dist/actions/telemetry/resolveConsent.d.ts +1 -9
  27. package/dist/actions/telemetry/resolveConsent.js +2 -2
  28. package/dist/actions/telemetry/resolveConsent.js.map +1 -1
  29. package/dist/actions/telemetry/setConsent.d.ts +1 -4
  30. package/dist/actions/telemetry/setConsent.js +4 -8
  31. package/dist/actions/telemetry/setConsent.js.map +1 -1
  32. package/dist/commands/dataset/create.d.ts +0 -2
  33. package/dist/commands/dataset/create.js +8 -54
  34. package/dist/commands/dataset/create.js.map +1 -1
  35. package/dist/commands/debug.js +5 -9
  36. package/dist/commands/debug.js.map +1 -1
  37. package/dist/commands/init.d.ts +6 -1
  38. package/dist/commands/init.js +358 -20
  39. package/dist/commands/init.js.map +1 -1
  40. package/dist/commands/manifest/extract.js +7 -8
  41. package/dist/commands/manifest/extract.js.map +1 -1
  42. package/dist/commands/telemetry/disable.js +0 -1
  43. package/dist/commands/telemetry/disable.js.map +1 -1
  44. package/dist/commands/telemetry/enable.js +0 -1
  45. package/dist/commands/telemetry/enable.js.map +1 -1
  46. package/dist/commands/telemetry/status.js +1 -3
  47. package/dist/commands/telemetry/status.js.map +1 -1
  48. package/dist/config/createCliConfig.d.ts +9 -0
  49. package/dist/hooks/prerun/flushTelemetry.worker.d.ts +2 -0
  50. package/dist/hooks/prerun/flushTelemetry.worker.js +22 -0
  51. package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -0
  52. package/dist/hooks/prerun/setupTelemetry.js +65 -1
  53. package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
  54. package/dist/prompts/init/promptForTypescript.d.ts +2 -0
  55. package/dist/prompts/init/promptForTypescript.js +15 -0
  56. package/dist/prompts/init/promptForTypescript.js.map +1 -0
  57. package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
  58. package/dist/prompts/promptForDatasetAclMode.js +27 -0
  59. package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
  60. package/dist/prompts/promptForDatasetName.d.ts +1 -1
  61. package/dist/prompts/promptForDatasetName.js +4 -1
  62. package/dist/prompts/promptForDatasetName.js.map +1 -1
  63. package/dist/services/organizations.d.ts +3 -1
  64. package/dist/services/organizations.js +2 -1
  65. package/dist/services/organizations.js.map +1 -1
  66. package/dist/services/telemetry.d.ts +2 -0
  67. package/dist/services/telemetry.js +20 -0
  68. package/dist/services/telemetry.js.map +1 -0
  69. package/dist/services/user.d.ts +5 -0
  70. package/dist/services/user.js +12 -1
  71. package/dist/services/user.js.map +1 -1
  72. package/dist/services/userApplications.d.ts +3 -1
  73. package/dist/services/userApplications.js +5 -1
  74. package/dist/services/userApplications.js.map +1 -1
  75. package/dist/telemetry/cli.telemetry.d.ts +20 -0
  76. package/dist/telemetry/cli.telemetry.js +8 -0
  77. package/dist/telemetry/cli.telemetry.js.map +1 -0
  78. package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +5 -0
  79. package/dist/telemetry/store/cleanupOldTelemetryFiles.js +30 -0
  80. package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +1 -0
  81. package/dist/telemetry/store/createTelemetryStore.d.ts +39 -0
  82. package/dist/telemetry/store/createTelemetryStore.js +95 -0
  83. package/dist/telemetry/store/createTelemetryStore.js.map +1 -0
  84. package/dist/telemetry/store/createTraceId.d.ts +10 -0
  85. package/dist/telemetry/store/createTraceId.js +10 -0
  86. package/dist/telemetry/store/createTraceId.js.map +1 -0
  87. package/dist/telemetry/store/debug.d.ts +5 -0
  88. package/dist/telemetry/store/debug.js +7 -0
  89. package/dist/telemetry/store/debug.js.map +1 -0
  90. package/dist/telemetry/store/findTelemetryFiles.d.ts +13 -0
  91. package/dist/telemetry/store/findTelemetryFiles.js +34 -0
  92. package/dist/telemetry/store/findTelemetryFiles.js.map +1 -0
  93. package/dist/telemetry/store/flushTelemetryFiles.d.ts +20 -0
  94. package/dist/telemetry/store/flushTelemetryFiles.js +107 -0
  95. package/dist/telemetry/store/flushTelemetryFiles.js.map +1 -0
  96. package/dist/telemetry/store/generateTelemetryFilePath.d.ts +17 -0
  97. package/dist/telemetry/store/generateTelemetryFilePath.js +30 -0
  98. package/dist/telemetry/store/generateTelemetryFilePath.js.map +1 -0
  99. package/dist/telemetry/store/getTelemetryBaseInfo.d.ts +27 -0
  100. package/dist/telemetry/store/getTelemetryBaseInfo.js +34 -0
  101. package/dist/telemetry/store/getTelemetryBaseInfo.js.map +1 -0
  102. package/dist/telemetry/store/logger.d.ts +6 -0
  103. package/dist/telemetry/store/logger.js +54 -0
  104. package/dist/telemetry/store/logger.js.map +1 -0
  105. package/dist/telemetry/store/trace.d.ts +6 -0
  106. package/dist/telemetry/store/trace.js +150 -0
  107. package/dist/telemetry/store/trace.js.map +1 -0
  108. package/dist/telemetry/utils/readNDJSON.d.ts +10 -0
  109. package/dist/telemetry/utils/readNDJSON.js +18 -0
  110. package/dist/telemetry/utils/readNDJSON.js.map +1 -0
  111. package/dist/util/detectRuntime.d.ts +8 -0
  112. package/dist/util/detectRuntime.js +20 -0
  113. package/dist/util/detectRuntime.js.map +1 -0
  114. package/dist/util/isStaging.d.ts +7 -0
  115. package/dist/util/isStaging.js +10 -0
  116. package/dist/util/isStaging.js.map +1 -0
  117. package/dist/util/parseArguments.d.ts +35 -0
  118. package/dist/util/parseArguments.js +42 -0
  119. package/dist/util/parseArguments.js.map +1 -0
  120. package/oclif.manifest.json +7 -1
  121. package/package.json +25 -18
  122. package/templates/app-quickstart/src/App.css +20 -0
  123. package/templates/app-quickstart/src/App.tsx +25 -0
  124. package/templates/app-quickstart/src/ExampleComponent.css +90 -0
  125. package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
  126. package/templates/app-sanity-ui/src/App.tsx +34 -0
  127. package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
  128. package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
  129. package/templates/blog/README.md +11 -0
  130. package/templates/blog/schemaTypes/author.js +50 -0
  131. package/templates/blog/schemaTypes/blockContent.js +67 -0
  132. package/templates/blog/schemaTypes/category.js +19 -0
  133. package/templates/blog/schemaTypes/index.js +6 -0
  134. package/templates/blog/schemaTypes/post.js +65 -0
  135. package/templates/blog/static/.gitkeep +1 -0
  136. package/templates/clean/README.md +9 -0
  137. package/templates/clean/schemaTypes/index.js +1 -0
  138. package/templates/clean/static/.gitkeep +1 -0
  139. package/templates/ecommerce/README.md +11 -0
  140. package/templates/ecommerce/plugins/.gitkeep +1 -0
  141. package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
  142. package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
  143. package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
  144. package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
  145. package/templates/ecommerce/schemaTypes/category.js +39 -0
  146. package/templates/ecommerce/schemaTypes/index.js +23 -0
  147. package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
  148. package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
  149. package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
  150. package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
  151. package/templates/ecommerce/schemaTypes/product.js +83 -0
  152. package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
  153. package/templates/ecommerce/schemaTypes/vendor.js +39 -0
  154. package/templates/ecommerce/static/.gitkeep +1 -0
  155. package/templates/get-started/README.md +9 -0
  156. package/templates/get-started/plugins/.gitkeep +1 -0
  157. package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
  158. package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
  159. package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
  160. package/templates/get-started/schemaTypes/index.ts +1 -0
  161. package/templates/get-started/static/.gitkeep +1 -0
  162. package/templates/moviedb/README.md +10 -0
  163. package/templates/moviedb/schemaTypes/blockContent.js +67 -0
  164. package/templates/moviedb/schemaTypes/castMember.js +37 -0
  165. package/templates/moviedb/schemaTypes/crewMember.js +52 -0
  166. package/templates/moviedb/schemaTypes/index.js +22 -0
  167. package/templates/moviedb/schemaTypes/movie.js +85 -0
  168. package/templates/moviedb/schemaTypes/person.js +37 -0
  169. package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
  170. package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
  171. package/templates/moviedb/schemaTypes/screening.js +81 -0
  172. package/templates/moviedb/static/.gitkeep +1 -0
  173. package/templates/quickstart/README.md +9 -0
  174. package/templates/quickstart/schemaTypes/index.js +1 -0
  175. package/templates/quickstart/static/.gitkeep +1 -0
  176. package/templates/shared/gitignore.txt +29 -0
  177. package/templates/shared/tsconfig.json +17 -0
  178. package/templates/shopify/README.md +85 -0
  179. package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
  180. package/templates/shopify/components/icons/Shopify.tsx +20 -0
  181. package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
  182. package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
  183. package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
  184. package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
  185. package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
  186. package/templates/shopify/components/media/ColorTheme.tsx +38 -0
  187. package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
  188. package/templates/shopify/components/studio/Navbar.tsx +29 -0
  189. package/templates/shopify/constants.ts +61 -0
  190. package/templates/shopify/docs/features.md +158 -0
  191. package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
  192. package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
  193. package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
  194. package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
  195. package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
  196. package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
  197. package/templates/shopify/schemaTypes/documents/page.ts +70 -0
  198. package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
  199. package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
  200. package/templates/shopify/schemaTypes/index.ts +108 -0
  201. package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
  202. package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
  203. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
  204. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
  205. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
  206. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
  207. package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
  208. package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
  209. package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
  210. package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
  211. package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
  212. package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
  213. package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
  214. package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
  215. package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
  216. package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
  217. package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
  218. package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
  219. package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
  220. package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
  221. package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
  222. package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
  223. package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
  224. package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
  225. package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
  226. package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
  227. package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
  228. package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
  229. package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
  230. package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
  231. package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
  232. package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
  233. package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
  234. package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
  235. package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
  236. package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
  237. package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
  238. package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
  239. package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
  240. package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
  241. package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
  242. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
  243. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
  244. package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
  245. package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
  246. package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
  247. package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
  248. package/templates/shopify/static/.gitkeep +1 -0
  249. package/templates/shopify/structure/collectionStructure.ts +9 -0
  250. package/templates/shopify/structure/colorThemeStructure.ts +9 -0
  251. package/templates/shopify/structure/homeStructure.ts +9 -0
  252. package/templates/shopify/structure/index.ts +57 -0
  253. package/templates/shopify/structure/pageStructure.ts +11 -0
  254. package/templates/shopify/structure/productStructure.ts +51 -0
  255. package/templates/shopify/structure/settingStructure.ts +9 -0
  256. package/templates/shopify/utils/blocksToText.ts +20 -0
  257. package/templates/shopify/utils/defineStructure.ts +11 -0
  258. package/templates/shopify/utils/getPriceRange.ts +24 -0
  259. package/templates/shopify/utils/shopifyUrls.ts +22 -0
  260. package/templates/shopify/utils/validateSlug.ts +18 -0
  261. package/templates/shopify-online-storefront/README.md +54 -0
  262. package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
  263. package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
  264. package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
  265. package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
  266. package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
  267. package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
  268. package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
  269. package/templates/shopify-online-storefront/constants.ts +18 -0
  270. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
  271. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
  272. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
  273. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
  274. package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
  275. package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
  276. package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
  277. package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
  278. package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
  279. package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
  280. package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
  281. package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
  282. package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
  283. package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
  284. package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
  285. package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
  286. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
  287. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
  288. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
  289. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
  290. package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
  291. package/templates/shopify-online-storefront/structure/index.ts +37 -0
  292. package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
  293. package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
  294. package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
  295. package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
  296. package/dist/actions/build/__tests__/buildApp.test.js +0 -367
  297. package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
  298. package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
  299. package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
  300. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
  301. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
  302. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
  303. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
  304. package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
  305. package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
  306. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
  307. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
  308. package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
  309. package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
  310. package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
  311. package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
  312. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
  313. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
  314. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
  315. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
  316. package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
  317. package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
  318. package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
  319. package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
  320. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
  321. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
  322. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
  323. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
  324. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
  325. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
  326. package/dist/actions/media/__tests__/importMedia.test.js +0 -182
  327. package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
  328. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
  329. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
  330. package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
  331. package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
  332. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
  333. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
  334. package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
  335. package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
  336. package/dist/commands/__tests__/blueprints.test.js +0 -54
  337. package/dist/commands/__tests__/blueprints.test.js.map +0 -1
  338. package/dist/commands/__tests__/build.test.js +0 -132
  339. package/dist/commands/__tests__/build.test.js.map +0 -1
  340. package/dist/commands/__tests__/codemod.test.js +0 -271
  341. package/dist/commands/__tests__/codemod.test.js.map +0 -1
  342. package/dist/commands/__tests__/debug.test.js +0 -590
  343. package/dist/commands/__tests__/debug.test.js.map +0 -1
  344. package/dist/commands/__tests__/deploy.test.js +0 -1945
  345. package/dist/commands/__tests__/deploy.test.js.map +0 -1
  346. package/dist/commands/__tests__/dev.test.js +0 -453
  347. package/dist/commands/__tests__/dev.test.js.map +0 -1
  348. package/dist/commands/__tests__/exec.test.js +0 -207
  349. package/dist/commands/__tests__/exec.test.js.map +0 -1
  350. package/dist/commands/__tests__/init/init.authentication.test.js +0 -73
  351. package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
  352. package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -195
  353. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
  354. package/dist/commands/__tests__/init/init.plan.test.js +0 -279
  355. package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
  356. package/dist/commands/__tests__/init/init.setup.test.js +0 -335
  357. package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
  358. package/dist/commands/__tests__/install.test.js +0 -282
  359. package/dist/commands/__tests__/install.test.js.map +0 -1
  360. package/dist/commands/__tests__/learn.test.js +0 -29
  361. package/dist/commands/__tests__/learn.test.js.map +0 -1
  362. package/dist/commands/__tests__/logout.test.js +0 -91
  363. package/dist/commands/__tests__/logout.test.js.map +0 -1
  364. package/dist/commands/__tests__/manage.test.js +0 -110
  365. package/dist/commands/__tests__/manage.test.js.map +0 -1
  366. package/dist/commands/__tests__/migration.test.js +0 -119
  367. package/dist/commands/__tests__/migration.test.js.map +0 -1
  368. package/dist/commands/__tests__/preview.test.js +0 -261
  369. package/dist/commands/__tests__/preview.test.js.map +0 -1
  370. package/dist/commands/__tests__/start.test.js +0 -253
  371. package/dist/commands/__tests__/start.test.js.map +0 -1
  372. package/dist/commands/__tests__/undeploy.test.js +0 -382
  373. package/dist/commands/__tests__/undeploy.test.js.map +0 -1
  374. package/dist/commands/__tests__/versions.test.js +0 -142
  375. package/dist/commands/__tests__/versions.test.js.map +0 -1
  376. package/dist/commands/backup/__tests__/disable.test.js +0 -204
  377. package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
  378. package/dist/commands/backup/__tests__/download.test.js +0 -768
  379. package/dist/commands/backup/__tests__/download.test.js.map +0 -1
  380. package/dist/commands/backup/__tests__/enable.test.js +0 -286
  381. package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
  382. package/dist/commands/backup/__tests__/list.test.js +0 -330
  383. package/dist/commands/backup/__tests__/list.test.js.map +0 -1
  384. package/dist/commands/cors/__tests__/add.test.js +0 -376
  385. package/dist/commands/cors/__tests__/add.test.js.map +0 -1
  386. package/dist/commands/cors/__tests__/delete.test.js +0 -308
  387. package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
  388. package/dist/commands/cors/__tests__/list.test.js +0 -241
  389. package/dist/commands/cors/__tests__/list.test.js.map +0 -1
  390. package/dist/commands/dataset/__tests__/copy.test.js +0 -628
  391. package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
  392. package/dist/commands/dataset/__tests__/create.test.js +0 -342
  393. package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
  394. package/dist/commands/dataset/__tests__/delete.test.js +0 -231
  395. package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
  396. package/dist/commands/dataset/__tests__/export.test.js +0 -601
  397. package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
  398. package/dist/commands/dataset/__tests__/import.test.js +0 -53
  399. package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
  400. package/dist/commands/dataset/__tests__/list.test.js +0 -216
  401. package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
  402. package/dist/commands/dataset/alias/__tests__/create.test.js +0 -339
  403. package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
  404. package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -247
  405. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
  406. package/dist/commands/dataset/alias/__tests__/link.test.js +0 -376
  407. package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
  408. package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -313
  409. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
  410. package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -128
  411. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
  412. package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -198
  413. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
  414. package/dist/commands/docs/__tests__/browse.test.js +0 -29
  415. package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
  416. package/dist/commands/docs/__tests__/read.test.js +0 -78
  417. package/dist/commands/docs/__tests__/read.test.js.map +0 -1
  418. package/dist/commands/docs/__tests__/search.test.js +0 -255
  419. package/dist/commands/docs/__tests__/search.test.js.map +0 -1
  420. package/dist/commands/documents/__tests__/create.test.js +0 -1030
  421. package/dist/commands/documents/__tests__/create.test.js.map +0 -1
  422. package/dist/commands/documents/__tests__/delete.test.js +0 -300
  423. package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
  424. package/dist/commands/documents/__tests__/get.test.js +0 -182
  425. package/dist/commands/documents/__tests__/get.test.js.map +0 -1
  426. package/dist/commands/documents/__tests__/query.test.js +0 -300
  427. package/dist/commands/documents/__tests__/query.test.js.map +0 -1
  428. package/dist/commands/documents/__tests__/validate.test.js +0 -249
  429. package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
  430. package/dist/commands/graphql/__tests__/list.test.js +0 -240
  431. package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
  432. package/dist/commands/graphql/__tests__/undeploy.test.js +0 -410
  433. package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
  434. package/dist/commands/hook/__tests__/attempt.test.js +0 -275
  435. package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
  436. package/dist/commands/hook/__tests__/create.test.js +0 -119
  437. package/dist/commands/hook/__tests__/create.test.js.map +0 -1
  438. package/dist/commands/hook/__tests__/delete.test.js +0 -233
  439. package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
  440. package/dist/commands/hook/__tests__/list.test.js +0 -145
  441. package/dist/commands/hook/__tests__/list.test.js.map +0 -1
  442. package/dist/commands/hook/__tests__/logs.test.js +0 -798
  443. package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
  444. package/dist/commands/manifest/__tests__/extract.test.js +0 -132
  445. package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
  446. package/dist/commands/mcp/__tests__/configure.test.js +0 -397
  447. package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
  448. package/dist/commands/media/__tests__/create-aspect.test.js +0 -173
  449. package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
  450. package/dist/commands/media/__tests__/delete-aspect.test.js +0 -342
  451. package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
  452. package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -619
  453. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
  454. package/dist/commands/media/__tests__/export.test.js +0 -697
  455. package/dist/commands/media/__tests__/export.test.js.map +0 -1
  456. package/dist/commands/media/__tests__/import.test.js +0 -347
  457. package/dist/commands/media/__tests__/import.test.js.map +0 -1
  458. package/dist/commands/openapi/__tests__/get.test.js +0 -149
  459. package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
  460. package/dist/commands/openapi/__tests__/list.test.js +0 -113
  461. package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
  462. package/dist/commands/projects/__tests__/list.test.js +0 -154
  463. package/dist/commands/projects/__tests__/list.test.js.map +0 -1
  464. package/dist/commands/schema/__tests__/delete.test.js +0 -454
  465. package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
  466. package/dist/commands/schema/__tests__/deploy.test.js +0 -348
  467. package/dist/commands/schema/__tests__/deploy.test.js.map +0 -1
  468. package/dist/commands/schema/__tests__/extract.test.js +0 -121
  469. package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
  470. package/dist/commands/schema/__tests__/list.test.js +0 -399
  471. package/dist/commands/schema/__tests__/list.test.js.map +0 -1
  472. package/dist/commands/schema/__tests__/validate.test.js +0 -121
  473. package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
  474. package/dist/commands/telemetry/__tests__/disable.test.js +0 -147
  475. package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
  476. package/dist/commands/telemetry/__tests__/enable.test.js +0 -133
  477. package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
  478. package/dist/commands/telemetry/__tests__/status.test.js +0 -155
  479. package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
  480. package/dist/commands/tokens/__tests__/add.test.js +0 -435
  481. package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
  482. package/dist/commands/tokens/__tests__/delete.test.js +0 -405
  483. package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
  484. package/dist/commands/tokens/__tests__/list.test.js +0 -395
  485. package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
  486. package/dist/commands/users/__tests__/invite.test.js +0 -362
  487. package/dist/commands/users/__tests__/invite.test.js.map +0 -1
  488. package/dist/commands/users/__tests__/list.test.js +0 -407
  489. package/dist/commands/users/__tests__/list.test.js.map +0 -1
  490. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
  491. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
  492. package/dist/services/__tests__/datasetAliases.test.js +0 -131
  493. package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
  494. package/dist/services/__tests__/datasets.test.js +0 -436
  495. package/dist/services/__tests__/datasets.test.js.map +0 -1
  496. package/dist/services/__tests__/graphql.test.js +0 -43
  497. package/dist/services/__tests__/graphql.test.js.map +0 -1
  498. package/dist/services/__tests__/mediaLibraries.test.js +0 -88
  499. package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
  500. package/dist/services/__tests__/projects.test.js +0 -41
  501. package/dist/services/__tests__/projects.test.js.map +0 -1
  502. package/dist/services/__tests__/userApplications.test.js +0 -113
  503. package/dist/services/__tests__/userApplications.test.js.map +0 -1
  504. package/dist/util/__tests__/appId.test.js +0 -31
  505. package/dist/util/__tests__/appId.test.js.map +0 -1
  506. package/dist/util/__tests__/cliClient.test.js +0 -184
  507. package/dist/util/__tests__/cliClient.test.js.map +0 -1
  508. package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
  509. package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
  510. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
  511. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
  512. package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
  513. package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
  514. package/dist/util/__tests__/getCliVersion.test.js +0 -28
  515. package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
  516. package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
  517. package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
  518. package/dist/util/__tests__/getWorkspace.test.js +0 -37
  519. package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
  520. package/dist/util/__tests__/readPackageJson.test.js +0 -69
  521. package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
  522. package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
  523. package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
  524. package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
  525. package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
  526. package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
  527. package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/__tests__/datasetAliases.test.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {\n createAlias,\n DATASET_ALIASES_API_VERSION,\n listAliases,\n removeAlias,\n updateAlias,\n} from '../datasetAliases.js'\n\nvi.mock(import('@sanity/cli-core'), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockClient = {\n request: vi.fn(),\n}\n\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\nbeforeEach(() => {\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n})\n\nafterEach(() => {\n vi.clearAllMocks()\n})\n\ndescribe('#listAliases', () => {\n test('calls client.request with correct parameters', async () => {\n const mockAliases = [\n {datasetName: 'production', name: 'prod'},\n {datasetName: 'development', name: 'dev'},\n ]\n mockClient.request.mockResolvedValue(mockAliases)\n\n const result = await listAliases('test-project')\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_ALIASES_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n expect(mockClient.request).toHaveBeenCalledWith({uri: '/aliases'})\n expect(result).toBe(mockAliases)\n })\n})\n\ndescribe('#createAlias', () => {\n test('calls client.request with correct parameters when datasetName is provided', async () => {\n const mockResponse = {aliasName: 'prod', datasetName: 'production'}\n mockClient.request.mockResolvedValue(mockResponse)\n\n const result = await createAlias('test-project', 'prod', 'production')\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_ALIASES_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n expect(mockClient.request).toHaveBeenCalledWith({\n body: {datasetName: 'production'},\n method: 'PUT',\n uri: '/aliases/prod',\n })\n expect(result).toBe(mockResponse)\n })\n\n test('calls client.request with undefined body when datasetName is null', async () => {\n const mockResponse = {aliasName: 'prod', datasetName: null}\n mockClient.request.mockResolvedValue(mockResponse)\n\n const result = await createAlias('test-project', 'prod', null)\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_ALIASES_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n expect(mockClient.request).toHaveBeenCalledWith({\n body: undefined,\n method: 'PUT',\n uri: '/aliases/prod',\n })\n expect(result).toBe(mockResponse)\n })\n})\n\ndescribe('#removeAlias', () => {\n test('calls client.request with correct parameters', async () => {\n const mockResponse = {deleted: true}\n mockClient.request.mockResolvedValue(mockResponse)\n\n const result = await removeAlias('test-project', 'test-alias')\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_ALIASES_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n expect(mockClient.request).toHaveBeenCalledWith({\n method: 'DELETE',\n uri: '/aliases/test-alias',\n })\n expect(result).toBe(mockResponse)\n })\n})\n\ndescribe('#updateAlias', () => {\n test('calls client.request with correct parameters', async () => {\n const mockResponse = {aliasName: 'prod', datasetName: 'production'}\n mockClient.request.mockResolvedValue(mockResponse)\n\n const result = await updateAlias('test-project', 'prod', 'production')\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_ALIASES_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n expect(mockClient.request).toHaveBeenCalledWith({\n body: {datasetName: 'production'},\n method: 'PATCH',\n uri: '/aliases/prod',\n })\n expect(result).toBe(mockResponse)\n })\n})\n"],"names":["getProjectCliClient","afterEach","beforeEach","describe","expect","test","vi","createAlias","DATASET_ALIASES_API_VERSION","listAliases","removeAlias","updateAlias","mock","importOriginal","actual","fn","mockClient","request","mockGetProjectCliClient","mocked","mockResolvedValue","clearAllMocks","mockAliases","datasetName","name","result","toHaveBeenCalledWith","apiVersion","projectId","requireUser","uri","toBe","mockResponse","aliasName","body","method","undefined","deleted"],"mappings":"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"}
@@ -1,436 +0,0 @@
1
- import { getProjectCliClient } from '@sanity/cli-core';
2
- import { EventSource } from 'eventsource';
3
- import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
4
- import { createDataset, DATASET_API_VERSION, deleteDataset, editDatasetAcl, followCopyJobProgress, listDatasetAliases, listDatasets } from '../datasets.js';
5
- vi.mock('eventsource', ()=>{
6
- return {
7
- EventSource: vi.fn()
8
- };
9
- });
10
- vi.mock(import('@sanity/cli-core'), async (importOriginal)=>{
11
- const actual = await importOriginal();
12
- return {
13
- ...actual,
14
- getProjectCliClient: vi.fn()
15
- };
16
- });
17
- const mockClient = {
18
- config: vi.fn(),
19
- datasets: {
20
- create: vi.fn(),
21
- delete: vi.fn(),
22
- edit: vi.fn(),
23
- list: vi.fn()
24
- },
25
- request: vi.fn()
26
- };
27
- const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
28
- beforeEach(()=>{
29
- mockGetProjectCliClient.mockResolvedValue(mockClient);
30
- });
31
- afterEach(()=>{
32
- vi.clearAllMocks();
33
- });
34
- describe('#listDatasets', ()=>{
35
- test('calls client.datasets.list with correct parameters', async ()=>{
36
- const mockDatasets = [
37
- {
38
- aclMode: 'private',
39
- name: 'production'
40
- }
41
- ];
42
- mockClient.datasets.list.mockResolvedValue(mockDatasets);
43
- const result = await listDatasets('test-project');
44
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
45
- apiVersion: DATASET_API_VERSION,
46
- projectId: 'test-project',
47
- requireUser: true
48
- });
49
- expect(mockClient.datasets.list).toHaveBeenCalledWith();
50
- expect(result).toBe(mockDatasets);
51
- });
52
- });
53
- describe('#deleteDataset', ()=>{
54
- test('calls client.datasets.delete with correct parameters', async ()=>{
55
- mockClient.datasets.delete.mockResolvedValue(undefined);
56
- await deleteDataset({
57
- datasetName: 'test-dataset',
58
- projectId: 'test-project'
59
- });
60
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
61
- apiVersion: DATASET_API_VERSION,
62
- projectId: 'test-project',
63
- requireUser: true
64
- });
65
- expect(mockClient.datasets.delete).toHaveBeenCalledWith('test-dataset');
66
- });
67
- });
68
- describe('#editDatasetAcl', ()=>{
69
- test('calls client.datasets.edit with correct parameters for private mode', async ()=>{
70
- mockClient.datasets.edit.mockResolvedValue({});
71
- await editDatasetAcl({
72
- aclMode: 'private',
73
- datasetName: 'test-dataset',
74
- projectId: 'test-project'
75
- });
76
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
77
- apiVersion: DATASET_API_VERSION,
78
- projectId: 'test-project',
79
- requireUser: true
80
- });
81
- expect(mockClient.datasets.edit).toHaveBeenCalledWith('test-dataset', {
82
- aclMode: 'private'
83
- });
84
- });
85
- test('calls client.datasets.edit with correct parameters for public mode', async ()=>{
86
- mockClient.datasets.edit.mockResolvedValue({});
87
- await editDatasetAcl({
88
- aclMode: 'public',
89
- datasetName: 'my-dataset',
90
- projectId: 'my-project'
91
- });
92
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
93
- apiVersion: DATASET_API_VERSION,
94
- projectId: 'my-project',
95
- requireUser: true
96
- });
97
- expect(mockClient.datasets.edit).toHaveBeenCalledWith('my-dataset', {
98
- aclMode: 'public'
99
- });
100
- });
101
- test('propagates errors from client', async ()=>{
102
- const error = new Error('API error');
103
- mockClient.datasets.edit.mockRejectedValue(error);
104
- await expect(editDatasetAcl({
105
- aclMode: 'private',
106
- datasetName: 'test-dataset',
107
- projectId: 'test-project'
108
- })).rejects.toThrow('API error');
109
- });
110
- });
111
- describe('#listDatasetAliases', ()=>{
112
- test('calls client.request with correct parameters', async ()=>{
113
- const mockAliases = [
114
- {
115
- datasetName: 'test-dataset',
116
- name: 'test-alias'
117
- }
118
- ];
119
- mockClient.request.mockResolvedValue(mockAliases);
120
- const result = await listDatasetAliases('test-project');
121
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
122
- apiVersion: DATASET_API_VERSION,
123
- projectId: 'test-project',
124
- requireUser: true
125
- });
126
- expect(mockClient.request).toHaveBeenCalledWith({
127
- uri: '/aliases'
128
- });
129
- expect(result).toBe(mockAliases);
130
- });
131
- });
132
- describe('#createDataset', ()=>{
133
- test('calls client.datasets.create with correct parameters', async ()=>{
134
- mockClient.datasets.create.mockResolvedValue(undefined);
135
- await createDataset({
136
- aclMode: 'private',
137
- datasetName: 'test-dataset',
138
- projectId: 'test-project'
139
- });
140
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
141
- apiVersion: DATASET_API_VERSION,
142
- projectId: 'test-project',
143
- requireUser: true
144
- });
145
- expect(mockClient.datasets.create).toHaveBeenCalledWith('test-dataset', {
146
- aclMode: 'private'
147
- });
148
- });
149
- test('calls client.datasets.create without aclMode if not provided', async ()=>{
150
- mockClient.datasets.create.mockResolvedValue(undefined);
151
- await createDataset({
152
- datasetName: 'test-dataset',
153
- projectId: 'test-project'
154
- });
155
- expect(mockClient.datasets.create).toHaveBeenCalledWith('test-dataset');
156
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
157
- apiVersion: DATASET_API_VERSION,
158
- projectId: 'test-project',
159
- requireUser: true
160
- });
161
- });
162
- });
163
- describe('#followCopyJobProgress', ()=>{
164
- let mockEventSource;
165
- beforeEach(()=>{
166
- mockEventSource = {
167
- addEventListener: vi.fn(),
168
- close: vi.fn(),
169
- removeEventListener: vi.fn()
170
- };
171
- vi.mocked(EventSource).mockImplementation(()=>mockEventSource);
172
- mockClient.config = vi.fn().mockReturnValue({
173
- url: 'https://api.sanity.io'
174
- });
175
- mockGetProjectCliClient.mockResolvedValue(mockClient);
176
- });
177
- test('subscribes to progress events and completes successfully', (context)=>{
178
- return new Promise((resolve)=>{
179
- const observable = followCopyJobProgress({
180
- jobId: 'test-job',
181
- projectId: 'test-project'
182
- });
183
- const events = [];
184
- observable.subscribe({
185
- complete: ()=>{
186
- // When state is 'completed', onComplete is called which doesn't push the event
187
- expect(events).toEqual([
188
- {
189
- progress: 25,
190
- state: 'processing',
191
- type: 'job'
192
- },
193
- {
194
- progress: 50,
195
- state: 'processing',
196
- type: 'job'
197
- }
198
- ]);
199
- expect(mockEventSource.close).toHaveBeenCalled();
200
- expect(mockEventSource.removeEventListener).toHaveBeenCalledTimes(4);
201
- resolve();
202
- },
203
- error: (err)=>{
204
- context.task.result?.errors?.push(err);
205
- resolve();
206
- },
207
- next: (event)=>{
208
- events.push(event);
209
- }
210
- });
211
- // Wait for async getJobListenUrl to complete
212
- setImmediate(()=>{
213
- // Simulate progress events
214
- const jobHandler = mockEventSource.addEventListener.mock.calls.find(([event])=>event === 'job')?.[1];
215
- if (jobHandler) {
216
- jobHandler({
217
- data: JSON.stringify({
218
- progress: 25,
219
- state: 'processing',
220
- type: 'job'
221
- })
222
- });
223
- jobHandler({
224
- data: JSON.stringify({
225
- progress: 50,
226
- state: 'processing',
227
- type: 'job'
228
- })
229
- });
230
- jobHandler({
231
- data: JSON.stringify({
232
- progress: 100,
233
- state: 'completed',
234
- type: 'job'
235
- })
236
- });
237
- }
238
- });
239
- });
240
- });
241
- test('handles JSON parse errors gracefully', (context)=>{
242
- return new Promise((resolve)=>{
243
- const observable = followCopyJobProgress({
244
- jobId: 'test-job',
245
- projectId: 'test-project'
246
- });
247
- observable.subscribe({
248
- complete: ()=>{
249
- context.task.result?.errors?.push(new Error('Should not complete'));
250
- resolve();
251
- },
252
- error: (err)=>{
253
- expect(err.message).toContain('Invalid JSON received from server');
254
- resolve();
255
- },
256
- next: ()=>{}
257
- });
258
- // Wait for async getJobListenUrl to complete
259
- setImmediate(()=>{
260
- // Simulate invalid JSON
261
- const jobHandler = mockEventSource.addEventListener.mock.calls.find(([event])=>event === 'job')?.[1];
262
- if (jobHandler) {
263
- jobHandler({
264
- data: 'invalid json {'
265
- });
266
- }
267
- });
268
- });
269
- });
270
- test('emits reconnect event on error', (context)=>{
271
- return new Promise((resolve)=>{
272
- const observable = followCopyJobProgress({
273
- jobId: 'test-job',
274
- projectId: 'test-project'
275
- });
276
- const events = [];
277
- let errorReceived = false;
278
- const subscription = observable.subscribe({
279
- complete: ()=>{
280
- if (!errorReceived) {
281
- context.task.result?.errors?.push(new Error('Should not complete before error'));
282
- }
283
- resolve();
284
- },
285
- error: (_err)=>{
286
- errorReceived = true;
287
- // This is expected when we stop the subscription after seeing reconnect
288
- },
289
- next: (event)=>{
290
- events.push(event);
291
- // After seeing reconnect event, verify it was emitted correctly
292
- if (events.some((e)=>typeof e === 'object' && e !== null && 'type' in e && e.type === 'reconnect')) {
293
- expect(events).toContainEqual({
294
- type: 'reconnect'
295
- });
296
- expect(mockEventSource.close).toHaveBeenCalled();
297
- subscription.unsubscribe();
298
- resolve();
299
- }
300
- }
301
- });
302
- // Wait for async getJobListenUrl to complete
303
- setImmediate(()=>{
304
- // Simulate progress, then error
305
- const jobHandler = mockEventSource.addEventListener.mock.calls.find(([event])=>event === 'job')?.[1];
306
- const errorHandler = mockEventSource.addEventListener.mock.calls.find(([event])=>event === 'error')?.[1];
307
- if (jobHandler && errorHandler) {
308
- jobHandler({
309
- data: JSON.stringify({
310
- progress: 25,
311
- state: 'processing',
312
- type: 'job'
313
- })
314
- });
315
- errorHandler({});
316
- }
317
- });
318
- });
319
- });
320
- test('handles channel_error event', (context)=>{
321
- return new Promise((resolve)=>{
322
- const observable = followCopyJobProgress({
323
- jobId: 'test-job',
324
- projectId: 'test-project'
325
- });
326
- observable.subscribe({
327
- complete: ()=>{
328
- context.task.result?.errors?.push(new Error('Should not complete'));
329
- resolve();
330
- },
331
- error: (err)=>{
332
- expect(err.message).toContain('Copy job failed: Channel closed');
333
- expect(mockEventSource.close).toHaveBeenCalled();
334
- resolve();
335
- },
336
- next: ()=>{}
337
- });
338
- // Wait for async getJobListenUrl to complete
339
- setImmediate(()=>{
340
- // Simulate channel error
341
- const channelErrorHandler = mockEventSource.addEventListener.mock.calls.find(([event])=>event === 'channel_error')?.[1];
342
- if (channelErrorHandler) {
343
- channelErrorHandler({
344
- data: 'Channel closed'
345
- });
346
- }
347
- });
348
- });
349
- });
350
- test('handles failed state in job message', (context)=>{
351
- return new Promise((resolve)=>{
352
- const observable = followCopyJobProgress({
353
- jobId: 'test-job',
354
- projectId: 'test-project'
355
- });
356
- observable.subscribe({
357
- complete: ()=>{
358
- context.task.result?.errors?.push(new Error('Should not complete'));
359
- resolve();
360
- },
361
- error: (err)=>{
362
- expect(err.message).toContain('Copy job failed: Disk space exceeded');
363
- resolve();
364
- },
365
- next: ()=>{}
366
- });
367
- // Wait for async getJobListenUrl to complete
368
- setImmediate(()=>{
369
- // Simulate failed job
370
- const jobHandler = mockEventSource.addEventListener.mock.calls.find(([event])=>event === 'job')?.[1];
371
- if (jobHandler) {
372
- jobHandler({
373
- data: JSON.stringify({
374
- message: 'Disk space exceeded',
375
- state: 'failed'
376
- })
377
- });
378
- }
379
- });
380
- });
381
- });
382
- test('cleanup prevents reconnection when stopped', (context)=>{
383
- return new Promise((resolve)=>{
384
- const observable = followCopyJobProgress({
385
- jobId: 'test-job',
386
- projectId: 'test-project'
387
- });
388
- const subscription = observable.subscribe({
389
- complete: ()=>{
390
- context.task.result?.errors?.push(new Error('Should not complete'));
391
- resolve();
392
- },
393
- error: (err)=>{
394
- context.task.result?.errors?.push(err);
395
- resolve();
396
- },
397
- next: ()=>{}
398
- });
399
- // Wait for async getJobListenUrl to complete
400
- setImmediate(()=>{
401
- // Get error handler
402
- const errorHandler = mockEventSource.addEventListener.mock.calls.find(([event])=>event === 'error')?.[1];
403
- // Unsubscribe first to set stopped = true
404
- subscription.unsubscribe();
405
- // Now trigger error - should not create new EventSource
406
- const eventSourceCallCount = vi.mocked(EventSource).mock.calls.length;
407
- if (errorHandler) {
408
- errorHandler({});
409
- }
410
- // Verify no new EventSource was created
411
- expect(vi.mocked(EventSource)).toHaveBeenCalledTimes(eventSourceCallCount);
412
- expect(mockEventSource.close).toHaveBeenCalled();
413
- resolve();
414
- });
415
- });
416
- });
417
- test('cleanup is idempotent (no errors on multiple calls)', ()=>{
418
- const observable = followCopyJobProgress({
419
- jobId: 'test-job',
420
- projectId: 'test-project'
421
- });
422
- const subscription = observable.subscribe({
423
- complete: ()=>{},
424
- error: ()=>{},
425
- next: ()=>{}
426
- });
427
- // Call unsubscribe multiple times
428
- expect(()=>{
429
- subscription.unsubscribe();
430
- subscription.unsubscribe();
431
- subscription.unsubscribe();
432
- }).not.toThrow();
433
- });
434
- });
435
-
436
- //# sourceMappingURL=datasets.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/__tests__/datasets.test.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\nimport {EventSource} from 'eventsource'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {\n createDataset,\n DATASET_API_VERSION,\n deleteDataset,\n editDatasetAcl,\n followCopyJobProgress,\n listDatasetAliases,\n listDatasets,\n} from '../datasets.js'\n\nvi.mock('eventsource', () => {\n return {\n EventSource: vi.fn(),\n }\n})\n\nvi.mock(import('@sanity/cli-core'), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockClient = {\n config: vi.fn(),\n datasets: {\n create: vi.fn(),\n delete: vi.fn(),\n edit: vi.fn(),\n list: vi.fn(),\n },\n request: vi.fn(),\n}\n\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\nbeforeEach(() => {\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n})\n\nafterEach(() => {\n vi.clearAllMocks()\n})\n\ndescribe('#listDatasets', () => {\n test('calls client.datasets.list with correct parameters', async () => {\n const mockDatasets = [{aclMode: 'private', name: 'production'}]\n mockClient.datasets.list.mockResolvedValue(mockDatasets)\n\n const result = await listDatasets('test-project')\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n expect(mockClient.datasets.list).toHaveBeenCalledWith()\n expect(result).toBe(mockDatasets)\n })\n})\n\ndescribe('#deleteDataset', () => {\n test('calls client.datasets.delete with correct parameters', async () => {\n mockClient.datasets.delete.mockResolvedValue(undefined)\n\n await deleteDataset({datasetName: 'test-dataset', projectId: 'test-project'})\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n expect(mockClient.datasets.delete).toHaveBeenCalledWith('test-dataset')\n })\n})\n\ndescribe('#editDatasetAcl', () => {\n test('calls client.datasets.edit with correct parameters for private mode', async () => {\n mockClient.datasets.edit.mockResolvedValue({})\n\n await editDatasetAcl({\n aclMode: 'private',\n datasetName: 'test-dataset',\n projectId: 'test-project',\n })\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n expect(mockClient.datasets.edit).toHaveBeenCalledWith('test-dataset', {aclMode: 'private'})\n })\n\n test('calls client.datasets.edit with correct parameters for public mode', async () => {\n mockClient.datasets.edit.mockResolvedValue({})\n\n await editDatasetAcl({\n aclMode: 'public',\n datasetName: 'my-dataset',\n projectId: 'my-project',\n })\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_API_VERSION,\n projectId: 'my-project',\n requireUser: true,\n })\n expect(mockClient.datasets.edit).toHaveBeenCalledWith('my-dataset', {aclMode: 'public'})\n })\n\n test('propagates errors from client', async () => {\n const error = new Error('API error')\n mockClient.datasets.edit.mockRejectedValue(error)\n\n await expect(\n editDatasetAcl({\n aclMode: 'private',\n datasetName: 'test-dataset',\n projectId: 'test-project',\n }),\n ).rejects.toThrow('API error')\n })\n})\n\ndescribe('#listDatasetAliases', () => {\n test('calls client.request with correct parameters', async () => {\n const mockAliases = [{datasetName: 'test-dataset', name: 'test-alias'}]\n mockClient.request.mockResolvedValue(mockAliases)\n\n const result = await listDatasetAliases('test-project')\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n expect(mockClient.request).toHaveBeenCalledWith({uri: '/aliases'})\n expect(result).toBe(mockAliases)\n })\n})\n\ndescribe('#createDataset', () => {\n test('calls client.datasets.create with correct parameters', async () => {\n mockClient.datasets.create.mockResolvedValue(undefined)\n\n await createDataset({\n aclMode: 'private',\n datasetName: 'test-dataset',\n projectId: 'test-project',\n })\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n expect(mockClient.datasets.create).toHaveBeenCalledWith('test-dataset', {aclMode: 'private'})\n })\n\n test('calls client.datasets.create without aclMode if not provided', async () => {\n mockClient.datasets.create.mockResolvedValue(undefined)\n\n await createDataset({datasetName: 'test-dataset', projectId: 'test-project'})\n\n expect(mockClient.datasets.create).toHaveBeenCalledWith('test-dataset')\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: DATASET_API_VERSION,\n projectId: 'test-project',\n requireUser: true,\n })\n })\n})\n\ndescribe('#followCopyJobProgress', () => {\n let mockEventSource: {\n addEventListener: ReturnType<typeof vi.fn>\n close: ReturnType<typeof vi.fn>\n removeEventListener: ReturnType<typeof vi.fn>\n }\n\n beforeEach(() => {\n mockEventSource = {\n addEventListener: vi.fn(),\n close: vi.fn(),\n removeEventListener: vi.fn(),\n }\n vi.mocked(EventSource).mockImplementation(() => mockEventSource as never)\n mockClient.config = vi.fn().mockReturnValue({url: 'https://api.sanity.io'})\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n })\n\n test('subscribes to progress events and completes successfully', (context) => {\n return new Promise<void>((resolve) => {\n const observable = followCopyJobProgress({jobId: 'test-job', projectId: 'test-project'})\n const events: unknown[] = []\n\n observable.subscribe({\n complete: () => {\n // When state is 'completed', onComplete is called which doesn't push the event\n expect(events).toEqual([\n {progress: 25, state: 'processing', type: 'job'},\n {progress: 50, state: 'processing', type: 'job'},\n ])\n expect(mockEventSource.close).toHaveBeenCalled()\n expect(mockEventSource.removeEventListener).toHaveBeenCalledTimes(4)\n resolve()\n },\n error: (err: Error) => {\n context.task.result?.errors?.push(err)\n resolve()\n },\n next: (event) => {\n events.push(event)\n },\n })\n\n // Wait for async getJobListenUrl to complete\n setImmediate(() => {\n // Simulate progress events\n const jobHandler = mockEventSource.addEventListener.mock.calls.find(\n ([event]) => event === 'job',\n )?.[1]\n\n if (jobHandler) {\n jobHandler({data: JSON.stringify({progress: 25, state: 'processing', type: 'job'})})\n jobHandler({data: JSON.stringify({progress: 50, state: 'processing', type: 'job'})})\n jobHandler({data: JSON.stringify({progress: 100, state: 'completed', type: 'job'})})\n }\n })\n })\n })\n\n test('handles JSON parse errors gracefully', (context) => {\n return new Promise<void>((resolve) => {\n const observable = followCopyJobProgress({jobId: 'test-job', projectId: 'test-project'})\n\n observable.subscribe({\n complete: () => {\n context.task.result?.errors?.push(new Error('Should not complete'))\n resolve()\n },\n error: (err: Error) => {\n expect(err.message).toContain('Invalid JSON received from server')\n resolve()\n },\n next: () => {},\n })\n\n // Wait for async getJobListenUrl to complete\n setImmediate(() => {\n // Simulate invalid JSON\n const jobHandler = mockEventSource.addEventListener.mock.calls.find(\n ([event]) => event === 'job',\n )?.[1]\n\n if (jobHandler) {\n jobHandler({data: 'invalid json {'})\n }\n })\n })\n })\n\n test('emits reconnect event on error', (context) => {\n return new Promise<void>((resolve) => {\n const observable = followCopyJobProgress({jobId: 'test-job', projectId: 'test-project'})\n const events: unknown[] = []\n let errorReceived = false\n\n const subscription = observable.subscribe({\n complete: () => {\n if (!errorReceived) {\n context.task.result?.errors?.push(new Error('Should not complete before error'))\n }\n resolve()\n },\n error: (_err: Error) => {\n errorReceived = true\n // This is expected when we stop the subscription after seeing reconnect\n },\n next: (event) => {\n events.push(event)\n // After seeing reconnect event, verify it was emitted correctly\n if (\n events.some(\n (e: unknown) =>\n typeof e === 'object' && e !== null && 'type' in e && e.type === 'reconnect',\n )\n ) {\n expect(events).toContainEqual({type: 'reconnect'})\n expect(mockEventSource.close).toHaveBeenCalled()\n subscription.unsubscribe()\n resolve()\n }\n },\n })\n\n // Wait for async getJobListenUrl to complete\n setImmediate(() => {\n // Simulate progress, then error\n const jobHandler = mockEventSource.addEventListener.mock.calls.find(\n ([event]) => event === 'job',\n )?.[1]\n const errorHandler = mockEventSource.addEventListener.mock.calls.find(\n ([event]) => event === 'error',\n )?.[1]\n\n if (jobHandler && errorHandler) {\n jobHandler({data: JSON.stringify({progress: 25, state: 'processing', type: 'job'})})\n errorHandler({})\n }\n })\n })\n })\n\n test('handles channel_error event', (context) => {\n return new Promise<void>((resolve) => {\n const observable = followCopyJobProgress({jobId: 'test-job', projectId: 'test-project'})\n\n observable.subscribe({\n complete: () => {\n context.task.result?.errors?.push(new Error('Should not complete'))\n resolve()\n },\n error: (err: Error) => {\n expect(err.message).toContain('Copy job failed: Channel closed')\n expect(mockEventSource.close).toHaveBeenCalled()\n resolve()\n },\n next: () => {},\n })\n\n // Wait for async getJobListenUrl to complete\n setImmediate(() => {\n // Simulate channel error\n const channelErrorHandler = mockEventSource.addEventListener.mock.calls.find(\n ([event]) => event === 'channel_error',\n )?.[1]\n\n if (channelErrorHandler) {\n channelErrorHandler({data: 'Channel closed'})\n }\n })\n })\n })\n\n test('handles failed state in job message', (context) => {\n return new Promise<void>((resolve) => {\n const observable = followCopyJobProgress({jobId: 'test-job', projectId: 'test-project'})\n\n observable.subscribe({\n complete: () => {\n context.task.result?.errors?.push(new Error('Should not complete'))\n resolve()\n },\n error: (err: Error) => {\n expect(err.message).toContain('Copy job failed: Disk space exceeded')\n resolve()\n },\n next: () => {},\n })\n\n // Wait for async getJobListenUrl to complete\n setImmediate(() => {\n // Simulate failed job\n const jobHandler = mockEventSource.addEventListener.mock.calls.find(\n ([event]) => event === 'job',\n )?.[1]\n\n if (jobHandler) {\n jobHandler({data: JSON.stringify({message: 'Disk space exceeded', state: 'failed'})})\n }\n })\n })\n })\n\n test('cleanup prevents reconnection when stopped', (context) => {\n return new Promise<void>((resolve) => {\n const observable = followCopyJobProgress({jobId: 'test-job', projectId: 'test-project'})\n\n const subscription = observable.subscribe({\n complete: () => {\n context.task.result?.errors?.push(new Error('Should not complete'))\n resolve()\n },\n error: (err: Error) => {\n context.task.result?.errors?.push(err)\n resolve()\n },\n next: () => {},\n })\n\n // Wait for async getJobListenUrl to complete\n setImmediate(() => {\n // Get error handler\n const errorHandler = mockEventSource.addEventListener.mock.calls.find(\n ([event]) => event === 'error',\n )?.[1]\n\n // Unsubscribe first to set stopped = true\n subscription.unsubscribe()\n\n // Now trigger error - should not create new EventSource\n const eventSourceCallCount = vi.mocked(EventSource).mock.calls.length\n if (errorHandler) {\n errorHandler({})\n }\n\n // Verify no new EventSource was created\n expect(vi.mocked(EventSource)).toHaveBeenCalledTimes(eventSourceCallCount)\n expect(mockEventSource.close).toHaveBeenCalled()\n resolve()\n })\n })\n })\n\n test('cleanup is idempotent (no errors on multiple calls)', () => {\n const observable = followCopyJobProgress({jobId: 'test-job', projectId: 'test-project'})\n\n const subscription = observable.subscribe({\n complete: () => {},\n error: () => {},\n next: () => {},\n })\n\n // Call unsubscribe multiple times\n expect(() => {\n subscription.unsubscribe()\n subscription.unsubscribe()\n subscription.unsubscribe()\n }).not.toThrow()\n })\n})\n"],"names":["getProjectCliClient","EventSource","afterEach","beforeEach","describe","expect","test","vi","createDataset","DATASET_API_VERSION","deleteDataset","editDatasetAcl","followCopyJobProgress","listDatasetAliases","listDatasets","mock","fn","importOriginal","actual","mockClient","config","datasets","create","delete","edit","list","request","mockGetProjectCliClient","mocked","mockResolvedValue","clearAllMocks","mockDatasets","aclMode","name","result","toHaveBeenCalledWith","apiVersion","projectId","requireUser","toBe","undefined","datasetName","error","Error","mockRejectedValue","rejects","toThrow","mockAliases","uri","mockEventSource","addEventListener","close","removeEventListener","mockImplementation","mockReturnValue","url","context","Promise","resolve","observable","jobId","events","subscribe","complete","toEqual","progress","state","type","toHaveBeenCalled","toHaveBeenCalledTimes","err","task","errors","push","next","event","setImmediate","jobHandler","calls","find","data","JSON","stringify","message","toContain","errorReceived","subscription","_err","some","e","toContainEqual","unsubscribe","errorHandler","channelErrorHandler","eventSourceCallCount","length","not"],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- import { getProjectCliClient } from '@sanity/cli-core';
2
- import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
3
- import { listGraphQLEndpoints } from '../graphql.js';
4
- vi.mock(import('@sanity/cli-core'), async (importOriginal)=>{
5
- const actual = await importOriginal();
6
- return {
7
- ...actual,
8
- getProjectCliClient: vi.fn()
9
- };
10
- });
11
- const mockClient = {
12
- request: vi.fn()
13
- };
14
- beforeEach(()=>{
15
- vi.mocked(getProjectCliClient).mockResolvedValue(mockClient);
16
- });
17
- afterEach(()=>{
18
- vi.clearAllMocks();
19
- });
20
- describe('#listGraphQLEndpoints', ()=>{
21
- test('fetches GraphQL endpoints successfully', async ()=>{
22
- const result = {
23
- dataset: 'production',
24
- generation: 'gen2',
25
- playgroundEnabled: true,
26
- projectId: '123',
27
- tag: 'default'
28
- };
29
- mockClient.request.mockResolvedValueOnce([
30
- result
31
- ]);
32
- const endpoints = await listGraphQLEndpoints('123');
33
- expect(mockClient.request).toHaveBeenCalledWith({
34
- method: 'GET',
35
- uri: '/apis/graphql'
36
- });
37
- expect(endpoints).toEqual([
38
- result
39
- ]);
40
- });
41
- });
42
-
43
- //# sourceMappingURL=graphql.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/__tests__/graphql.test.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {listGraphQLEndpoints} from '../graphql.js'\n\nvi.mock(import('@sanity/cli-core'), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockClient = {\n request: vi.fn(),\n}\n\nbeforeEach(() => {\n vi.mocked(getProjectCliClient).mockResolvedValue(mockClient as never)\n})\n\nafterEach(() => {\n vi.clearAllMocks()\n})\n\ndescribe('#listGraphQLEndpoints', () => {\n test('fetches GraphQL endpoints successfully', async () => {\n const result = {\n dataset: 'production',\n generation: 'gen2',\n playgroundEnabled: true,\n projectId: '123',\n tag: 'default',\n }\n mockClient.request.mockResolvedValueOnce([result])\n\n const endpoints = await listGraphQLEndpoints('123')\n\n expect(mockClient.request).toHaveBeenCalledWith({\n method: 'GET',\n uri: '/apis/graphql',\n })\n expect(endpoints).toEqual([result])\n })\n})\n"],"names":["getProjectCliClient","afterEach","beforeEach","describe","expect","test","vi","listGraphQLEndpoints","mock","importOriginal","actual","fn","mockClient","request","mocked","mockResolvedValue","clearAllMocks","result","dataset","generation","playgroundEnabled","projectId","tag","mockResolvedValueOnce","endpoints","toHaveBeenCalledWith","method","uri","toEqual"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,mBAAkB;AACpD,SAAQC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAExE,SAAQC,oBAAoB,QAAO,gBAAe;AAElDD,GAAGE,IAAI,CAAC,MAAM,CAAC,qBAAqB,OAAOC;IACzC,MAAMC,SAAS,MAAMD;IACrB,OAAO;QACL,GAAGC,MAAM;QACTV,qBAAqBM,GAAGK,EAAE;IAC5B;AACF;AAEA,MAAMC,aAAa;IACjBC,SAASP,GAAGK,EAAE;AAChB;AAEAT,WAAW;IACTI,GAAGQ,MAAM,CAACd,qBAAqBe,iBAAiB,CAACH;AACnD;AAEAX,UAAU;IACRK,GAAGU,aAAa;AAClB;AAEAb,SAAS,yBAAyB;IAChCE,KAAK,0CAA0C;QAC7C,MAAMY,SAAS;YACbC,SAAS;YACTC,YAAY;YACZC,mBAAmB;YACnBC,WAAW;YACXC,KAAK;QACP;QACAV,WAAWC,OAAO,CAACU,qBAAqB,CAAC;YAACN;SAAO;QAEjD,MAAMO,YAAY,MAAMjB,qBAAqB;QAE7CH,OAAOQ,WAAWC,OAAO,EAAEY,oBAAoB,CAAC;YAC9CC,QAAQ;YACRC,KAAK;QACP;QACAvB,OAAOoB,WAAWI,OAAO,CAAC;YAACX;SAAO;IACpC;AACF"}
@@ -1,88 +0,0 @@
1
- import { getGlobalCliClient } from '@sanity/cli-core';
2
- import { MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME } from '@sanity/types';
3
- import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
4
- import { deleteAspect, getMediaLibraries, MEDIA_LIBRARY_API_VERSION } from '../mediaLibraries.js';
5
- vi.mock(import('@sanity/cli-core'), async (importOriginal)=>{
6
- const actual = await importOriginal();
7
- return {
8
- ...actual,
9
- getGlobalCliClient: vi.fn()
10
- };
11
- });
12
- const mockClient = {
13
- request: vi.fn()
14
- };
15
- const mockGetGlobalCliClient = vi.mocked(getGlobalCliClient);
16
- beforeEach(()=>{
17
- mockGetGlobalCliClient.mockResolvedValue(mockClient);
18
- });
19
- afterEach(()=>{
20
- vi.clearAllMocks();
21
- });
22
- describe('#deleteAspect', ()=>{
23
- test('calls client.request with correct parameters', async ()=>{
24
- const mockResponse = {
25
- results: [
26
- {
27
- id: 'myAspect'
28
- }
29
- ]
30
- };
31
- mockClient.request.mockResolvedValue(mockResponse);
32
- const result = await deleteAspect({
33
- aspectName: 'myAspect',
34
- mediaLibraryId: 'test-library-id',
35
- projectId: 'test-project'
36
- });
37
- expect(mockGetGlobalCliClient).toHaveBeenCalledWith({
38
- apiVersion: MEDIA_LIBRARY_API_VERSION,
39
- requireUser: true
40
- });
41
- expect(mockClient.request).toHaveBeenCalledWith({
42
- body: {
43
- mutations: [
44
- {
45
- delete: {
46
- params: {
47
- id: 'myAspect',
48
- type: MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME
49
- },
50
- query: `*[_type == $type && _id == $id]`
51
- }
52
- }
53
- ]
54
- },
55
- method: 'POST',
56
- uri: '/media-libraries/test-library-id/mutate'
57
- });
58
- expect(result).toBe(mockResponse);
59
- });
60
- });
61
- describe('#getMediaLibraries', ()=>{
62
- test('calls client.request with correct parameters', async ()=>{
63
- const mockResponse = {
64
- data: [
65
- {
66
- id: 'myAspect',
67
- status: 'active'
68
- }
69
- ]
70
- };
71
- mockClient.request.mockResolvedValue(mockResponse);
72
- const result = await getMediaLibraries('test-project');
73
- expect(mockGetGlobalCliClient).toHaveBeenCalledWith({
74
- apiVersion: MEDIA_LIBRARY_API_VERSION,
75
- requireUser: true
76
- });
77
- expect(mockClient.request).toHaveBeenCalledWith({
78
- method: 'GET',
79
- query: {
80
- projectId: 'test-project'
81
- },
82
- uri: '/media-libraries'
83
- });
84
- expect(result).toStrictEqual(mockResponse.data);
85
- });
86
- });
87
-
88
- //# sourceMappingURL=mediaLibraries.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/services/__tests__/mediaLibraries.test.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\nimport {MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME} from '@sanity/types'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {deleteAspect, getMediaLibraries, MEDIA_LIBRARY_API_VERSION} from '../mediaLibraries.js'\n\nvi.mock(import('@sanity/cli-core'), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n getGlobalCliClient: vi.fn(),\n }\n})\n\nconst mockClient = {\n request: vi.fn(),\n}\n\nconst mockGetGlobalCliClient = vi.mocked(getGlobalCliClient)\n\nbeforeEach(() => {\n mockGetGlobalCliClient.mockResolvedValue(mockClient as never)\n})\n\nafterEach(() => {\n vi.clearAllMocks()\n})\n\ndescribe('#deleteAspect', () => {\n test('calls client.request with correct parameters', async () => {\n const mockResponse = {results: [{id: 'myAspect'}]}\n mockClient.request.mockResolvedValue(mockResponse)\n\n const result = await deleteAspect({\n aspectName: 'myAspect',\n mediaLibraryId: 'test-library-id',\n projectId: 'test-project',\n })\n\n expect(mockGetGlobalCliClient).toHaveBeenCalledWith({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n requireUser: true,\n })\n\n expect(mockClient.request).toHaveBeenCalledWith({\n body: {\n mutations: [\n {\n delete: {\n params: {\n id: 'myAspect',\n type: MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME,\n },\n query: `*[_type == $type && _id == $id]`,\n },\n },\n ],\n },\n method: 'POST',\n uri: '/media-libraries/test-library-id/mutate',\n })\n expect(result).toBe(mockResponse)\n })\n})\n\ndescribe('#getMediaLibraries', () => {\n test('calls client.request with correct parameters', async () => {\n const mockResponse = {data: [{id: 'myAspect', status: 'active'}]}\n mockClient.request.mockResolvedValue(mockResponse)\n\n const result = await getMediaLibraries('test-project')\n expect(mockGetGlobalCliClient).toHaveBeenCalledWith({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n requireUser: true,\n })\n expect(mockClient.request).toHaveBeenCalledWith({\n method: 'GET',\n query: {projectId: 'test-project'},\n uri: '/media-libraries',\n })\n expect(result).toStrictEqual(mockResponse.data)\n })\n})\n"],"names":["getGlobalCliClient","MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME","afterEach","beforeEach","describe","expect","test","vi","deleteAspect","getMediaLibraries","MEDIA_LIBRARY_API_VERSION","mock","importOriginal","actual","fn","mockClient","request","mockGetGlobalCliClient","mocked","mockResolvedValue","clearAllMocks","mockResponse","results","id","result","aspectName","mediaLibraryId","projectId","toHaveBeenCalledWith","apiVersion","requireUser","body","mutations","delete","params","type","query","method","uri","toBe","data","status","toStrictEqual"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AACnD,SAAQC,oCAAoC,QAAO,gBAAe;AAClE,SAAQC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAExE,SAAQC,YAAY,EAAEC,iBAAiB,EAAEC,yBAAyB,QAAO,uBAAsB;AAE/FH,GAAGI,IAAI,CAAC,MAAM,CAAC,qBAAqB,OAAOC;IACzC,MAAMC,SAAS,MAAMD;IACrB,OAAO;QACL,GAAGC,MAAM;QACTb,oBAAoBO,GAAGO,EAAE;IAC3B;AACF;AAEA,MAAMC,aAAa;IACjBC,SAAST,GAAGO,EAAE;AAChB;AAEA,MAAMG,yBAAyBV,GAAGW,MAAM,CAAClB;AAEzCG,WAAW;IACTc,uBAAuBE,iBAAiB,CAACJ;AAC3C;AAEAb,UAAU;IACRK,GAAGa,aAAa;AAClB;AAEAhB,SAAS,iBAAiB;IACxBE,KAAK,gDAAgD;QACnD,MAAMe,eAAe;YAACC,SAAS;gBAAC;oBAACC,IAAI;gBAAU;aAAE;QAAA;QACjDR,WAAWC,OAAO,CAACG,iBAAiB,CAACE;QAErC,MAAMG,SAAS,MAAMhB,aAAa;YAChCiB,YAAY;YACZC,gBAAgB;YAChBC,WAAW;QACb;QAEAtB,OAAOY,wBAAwBW,oBAAoB,CAAC;YAClDC,YAAYnB;YACZoB,aAAa;QACf;QAEAzB,OAAOU,WAAWC,OAAO,EAAEY,oBAAoB,CAAC;YAC9CG,MAAM;gBACJC,WAAW;oBACT;wBACEC,QAAQ;4BACNC,QAAQ;gCACNX,IAAI;gCACJY,MAAMlC;4BACR;4BACAmC,OAAO,CAAC,+BAA+B,CAAC;wBAC1C;oBACF;iBACD;YACH;YACAC,QAAQ;YACRC,KAAK;QACP;QACAjC,OAAOmB,QAAQe,IAAI,CAAClB;IACtB;AACF;AAEAjB,SAAS,sBAAsB;IAC7BE,KAAK,gDAAgD;QACnD,MAAMe,eAAe;YAACmB,MAAM;gBAAC;oBAACjB,IAAI;oBAAYkB,QAAQ;gBAAQ;aAAE;QAAA;QAChE1B,WAAWC,OAAO,CAACG,iBAAiB,CAACE;QAErC,MAAMG,SAAS,MAAMf,kBAAkB;QACvCJ,OAAOY,wBAAwBW,oBAAoB,CAAC;YAClDC,YAAYnB;YACZoB,aAAa;QACf;QACAzB,OAAOU,WAAWC,OAAO,EAAEY,oBAAoB,CAAC;YAC9CS,QAAQ;YACRD,OAAO;gBAACT,WAAW;YAAc;YACjCW,KAAK;QACP;QACAjC,OAAOmB,QAAQkB,aAAa,CAACrB,aAAamB,IAAI;IAChD;AACF"}