@sanity/cli 6.0.0-alpha.4 → 6.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/dist/actions/dataset/create.d.ts +49 -0
  2. package/dist/actions/dataset/create.js +48 -0
  3. package/dist/actions/dataset/create.js.map +1 -0
  4. package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
  5. package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
  6. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
  7. package/dist/actions/debug/gatherDebugInfo.js +15 -21
  8. package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
  9. package/dist/actions/debug/types.d.ts +0 -2
  10. package/dist/actions/debug/types.js.map +1 -1
  11. package/dist/actions/deploy/deployApp.js +13 -0
  12. package/dist/actions/deploy/deployApp.js.map +1 -1
  13. package/dist/actions/dev/startStudioDevServer.js +3 -8
  14. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  15. package/dist/actions/dev/types.d.ts +1 -3
  16. package/dist/actions/dev/types.js.map +1 -1
  17. package/dist/actions/documents/validate.d.ts +0 -2
  18. package/dist/actions/documents/validate.js +21 -1
  19. package/dist/actions/documents/validate.js.map +1 -1
  20. package/dist/actions/exec/execScript.js +1 -1
  21. package/dist/actions/exec/execScript.js.map +1 -1
  22. package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
  23. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
  24. package/dist/actions/init/remoteTemplate.js +1 -1
  25. package/dist/actions/init/remoteTemplate.js.map +1 -1
  26. package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
  27. package/dist/actions/manifest/extractAppManifest.js +51 -0
  28. package/dist/actions/manifest/extractAppManifest.js.map +1 -0
  29. package/dist/actions/manifest/extractManifest.js +2 -5
  30. package/dist/actions/manifest/extractManifest.js.map +1 -1
  31. package/dist/actions/manifest/types.d.ts +6 -1
  32. package/dist/actions/manifest/types.js.map +1 -1
  33. package/dist/actions/media/importAspects.js +2 -1
  34. package/dist/actions/media/importAspects.js.map +1 -1
  35. package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
  36. package/dist/actions/schema/deleteSchemaAction.js +12 -17
  37. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  38. package/dist/actions/schema/deploySchemas.d.ts +15 -0
  39. package/dist/actions/schema/deploySchemas.js +98 -0
  40. package/dist/actions/schema/deploySchemas.js.map +1 -0
  41. package/dist/actions/schema/listSchemas.d.ts +12 -0
  42. package/dist/actions/schema/listSchemas.js +119 -0
  43. package/dist/actions/schema/listSchemas.js.map +1 -0
  44. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
  45. package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
  46. package/dist/actions/schema/utils/debug.d.ts +2 -0
  47. package/dist/actions/schema/utils/debug.js +5 -0
  48. package/dist/actions/schema/utils/debug.js.map +1 -0
  49. package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
  50. package/dist/actions/schema/utils/manifestExtractor.js +12 -17
  51. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  52. package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
  53. package/dist/actions/schema/utils/manifestReader.js +6 -12
  54. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  55. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
  56. package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
  57. package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
  58. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
  59. package/dist/actions/schema/utils/schemaStoreValidation.js +38 -125
  60. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
  61. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
  62. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
  63. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
  64. package/dist/actions/users/getMembersForProject.d.ts +1 -3
  65. package/dist/actions/users/getMembersForProject.js +6 -17
  66. package/dist/actions/users/getMembersForProject.js.map +1 -1
  67. package/dist/actions/users/types.d.ts +0 -11
  68. package/dist/actions/users/types.js.map +1 -1
  69. package/dist/commands/backup/disable.js +5 -11
  70. package/dist/commands/backup/disable.js.map +1 -1
  71. package/dist/commands/backup/enable.js +5 -11
  72. package/dist/commands/backup/enable.js.map +1 -1
  73. package/dist/commands/backup/list.js +7 -8
  74. package/dist/commands/backup/list.js.map +1 -1
  75. package/dist/commands/cors/add.js +5 -13
  76. package/dist/commands/cors/add.js.map +1 -1
  77. package/dist/commands/cors/delete.js +7 -15
  78. package/dist/commands/cors/delete.js.map +1 -1
  79. package/dist/commands/cors/list.js +2 -10
  80. package/dist/commands/cors/list.js.map +1 -1
  81. package/dist/commands/dataset/create.d.ts +0 -2
  82. package/dist/commands/dataset/create.js +8 -54
  83. package/dist/commands/dataset/create.js.map +1 -1
  84. package/dist/commands/dataset/export.js +4 -4
  85. package/dist/commands/dataset/export.js.map +1 -1
  86. package/dist/commands/debug.js +5 -9
  87. package/dist/commands/debug.js.map +1 -1
  88. package/dist/commands/dev.js +0 -1
  89. package/dist/commands/dev.js.map +1 -1
  90. package/dist/commands/documents/create.d.ts +1 -0
  91. package/dist/commands/documents/create.js +10 -9
  92. package/dist/commands/documents/create.js.map +1 -1
  93. package/dist/commands/documents/delete.js +2 -3
  94. package/dist/commands/documents/delete.js.map +1 -1
  95. package/dist/commands/documents/get.js +2 -3
  96. package/dist/commands/documents/get.js.map +1 -1
  97. package/dist/commands/documents/query.js +2 -3
  98. package/dist/commands/documents/query.js.map +1 -1
  99. package/dist/commands/documents/validate.js +0 -20
  100. package/dist/commands/documents/validate.js.map +1 -1
  101. package/dist/commands/graphql/list.js +2 -2
  102. package/dist/commands/graphql/list.js.map +1 -1
  103. package/dist/commands/graphql/undeploy.js +4 -9
  104. package/dist/commands/graphql/undeploy.js.map +1 -1
  105. package/dist/commands/hook/create.js +2 -6
  106. package/dist/commands/hook/create.js.map +1 -1
  107. package/dist/commands/hook/delete.js +5 -17
  108. package/dist/commands/hook/delete.js.map +1 -1
  109. package/dist/commands/hook/list.js +2 -8
  110. package/dist/commands/hook/list.js.map +1 -1
  111. package/dist/commands/init.d.ts +6 -1
  112. package/dist/commands/init.js +358 -20
  113. package/dist/commands/init.js.map +1 -1
  114. package/dist/commands/manifest/extract.js +7 -8
  115. package/dist/commands/manifest/extract.js.map +1 -1
  116. package/dist/commands/media/export.js +2 -2
  117. package/dist/commands/media/export.js.map +1 -1
  118. package/dist/commands/media/import.js +2 -2
  119. package/dist/commands/media/import.js.map +1 -1
  120. package/dist/commands/projects/list.js +2 -6
  121. package/dist/commands/projects/list.js.map +1 -1
  122. package/dist/commands/schema/delete.d.ts +1 -1
  123. package/dist/commands/schema/delete.js +20 -23
  124. package/dist/commands/schema/delete.js.map +1 -1
  125. package/dist/commands/schema/deploy.d.ts +16 -0
  126. package/dist/commands/schema/deploy.js +98 -0
  127. package/dist/commands/schema/deploy.js.map +1 -0
  128. package/dist/commands/schema/list.d.ts +15 -0
  129. package/dist/commands/schema/list.js +104 -0
  130. package/dist/commands/schema/list.js.map +1 -0
  131. package/dist/commands/tokens/add.js +3 -5
  132. package/dist/commands/tokens/add.js.map +1 -1
  133. package/dist/commands/users/invite.js +6 -17
  134. package/dist/commands/users/invite.js.map +1 -1
  135. package/dist/commands/users/list.js +4 -7
  136. package/dist/commands/users/list.js.map +1 -1
  137. package/dist/config/createCliConfig.d.ts +13 -4
  138. package/dist/prompts/init/promptForTypescript.d.ts +2 -0
  139. package/dist/prompts/init/promptForTypescript.js +15 -0
  140. package/dist/prompts/init/promptForTypescript.js.map +1 -0
  141. package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
  142. package/dist/prompts/promptForDatasetAclMode.js +27 -0
  143. package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
  144. package/dist/prompts/promptForDatasetName.d.ts +1 -1
  145. package/dist/prompts/promptForDatasetName.js +4 -1
  146. package/dist/prompts/promptForDatasetName.js.map +1 -1
  147. package/dist/services/backup.d.ts +8 -0
  148. package/dist/services/backup.js +19 -0
  149. package/dist/services/backup.js.map +1 -1
  150. package/dist/services/cors.d.ts +23 -0
  151. package/dist/services/cors.js +38 -0
  152. package/dist/services/cors.js.map +1 -0
  153. package/dist/services/graphql.d.ts +7 -0
  154. package/dist/services/graphql.js +11 -0
  155. package/dist/services/graphql.js.map +1 -1
  156. package/dist/services/hooks.d.ts +2 -0
  157. package/dist/services/hooks.js +19 -0
  158. package/dist/services/hooks.js.map +1 -1
  159. package/dist/services/organizations.d.ts +4 -2
  160. package/dist/services/organizations.js +3 -2
  161. package/dist/services/organizations.js.map +1 -1
  162. package/dist/services/projects.d.ts +11 -0
  163. package/dist/services/projects.js +41 -0
  164. package/dist/services/projects.js.map +1 -1
  165. package/dist/services/schemas.d.ts +4 -0
  166. package/dist/services/schemas.js +40 -0
  167. package/dist/services/schemas.js.map +1 -0
  168. package/dist/services/user.d.ts +13 -0
  169. package/dist/services/user.js +27 -3
  170. package/dist/services/user.js.map +1 -1
  171. package/dist/services/userApplications.d.ts +3 -1
  172. package/dist/services/userApplications.js +5 -1
  173. package/dist/services/userApplications.js.map +1 -1
  174. package/dist/util/errorMessages.d.ts +1 -0
  175. package/dist/util/errorMessages.js +1 -0
  176. package/dist/util/errorMessages.js.map +1 -1
  177. package/dist/util/getCliVersion.js +1 -1
  178. package/dist/util/getCliVersion.js.map +1 -1
  179. package/dist/util/readPackageJson.d.ts +1 -15
  180. package/dist/util/readPackageJson.js +1 -1
  181. package/dist/util/readPackageJson.js.map +1 -1
  182. package/dist/util/uniqBy.d.ts +1 -0
  183. package/dist/util/uniqBy.js +14 -0
  184. package/dist/util/uniqBy.js.map +1 -0
  185. package/oclif.manifest.json +284 -139
  186. package/package.json +36 -33
  187. package/templates/app-quickstart/src/App.css +20 -0
  188. package/templates/app-quickstart/src/App.tsx +25 -0
  189. package/templates/app-quickstart/src/ExampleComponent.css +90 -0
  190. package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
  191. package/templates/app-sanity-ui/src/App.tsx +34 -0
  192. package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
  193. package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
  194. package/templates/blog/README.md +11 -0
  195. package/templates/blog/schemaTypes/author.js +50 -0
  196. package/templates/blog/schemaTypes/blockContent.js +67 -0
  197. package/templates/blog/schemaTypes/category.js +19 -0
  198. package/templates/blog/schemaTypes/index.js +6 -0
  199. package/templates/blog/schemaTypes/post.js +65 -0
  200. package/templates/blog/static/.gitkeep +1 -0
  201. package/templates/clean/README.md +9 -0
  202. package/templates/clean/schemaTypes/index.js +1 -0
  203. package/templates/clean/static/.gitkeep +1 -0
  204. package/templates/ecommerce/README.md +11 -0
  205. package/templates/ecommerce/plugins/.gitkeep +1 -0
  206. package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
  207. package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
  208. package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
  209. package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
  210. package/templates/ecommerce/schemaTypes/category.js +39 -0
  211. package/templates/ecommerce/schemaTypes/index.js +23 -0
  212. package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
  213. package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
  214. package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
  215. package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
  216. package/templates/ecommerce/schemaTypes/product.js +83 -0
  217. package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
  218. package/templates/ecommerce/schemaTypes/vendor.js +39 -0
  219. package/templates/ecommerce/static/.gitkeep +1 -0
  220. package/templates/get-started/README.md +9 -0
  221. package/templates/get-started/plugins/.gitkeep +1 -0
  222. package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
  223. package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
  224. package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
  225. package/templates/get-started/schemaTypes/index.ts +1 -0
  226. package/templates/get-started/static/.gitkeep +1 -0
  227. package/templates/moviedb/README.md +10 -0
  228. package/templates/moviedb/schemaTypes/blockContent.js +67 -0
  229. package/templates/moviedb/schemaTypes/castMember.js +37 -0
  230. package/templates/moviedb/schemaTypes/crewMember.js +52 -0
  231. package/templates/moviedb/schemaTypes/index.js +22 -0
  232. package/templates/moviedb/schemaTypes/movie.js +85 -0
  233. package/templates/moviedb/schemaTypes/person.js +37 -0
  234. package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
  235. package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
  236. package/templates/moviedb/schemaTypes/screening.js +81 -0
  237. package/templates/moviedb/static/.gitkeep +1 -0
  238. package/templates/quickstart/README.md +9 -0
  239. package/templates/quickstart/schemaTypes/index.js +1 -0
  240. package/templates/quickstart/static/.gitkeep +1 -0
  241. package/templates/shared/gitignore.txt +29 -0
  242. package/templates/shared/tsconfig.json +17 -0
  243. package/templates/shopify/README.md +85 -0
  244. package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
  245. package/templates/shopify/components/icons/Shopify.tsx +20 -0
  246. package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
  247. package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
  248. package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
  249. package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
  250. package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
  251. package/templates/shopify/components/media/ColorTheme.tsx +38 -0
  252. package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
  253. package/templates/shopify/components/studio/Navbar.tsx +29 -0
  254. package/templates/shopify/constants.ts +61 -0
  255. package/templates/shopify/docs/features.md +158 -0
  256. package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
  257. package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
  258. package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
  259. package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
  260. package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
  261. package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
  262. package/templates/shopify/schemaTypes/documents/page.ts +70 -0
  263. package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
  264. package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
  265. package/templates/shopify/schemaTypes/index.ts +108 -0
  266. package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
  267. package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
  268. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
  269. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
  270. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
  271. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
  272. package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
  273. package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
  274. package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
  275. package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
  276. package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
  277. package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
  278. package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
  279. package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
  280. package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
  281. package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
  282. package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
  283. package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
  284. package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
  285. package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
  286. package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
  287. package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
  288. package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
  289. package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
  290. package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
  291. package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
  292. package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
  293. package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
  294. package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
  295. package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
  296. package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
  297. package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
  298. package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
  299. package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
  300. package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
  301. package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
  302. package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
  303. package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
  304. package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
  305. package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
  306. package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
  307. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
  308. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
  309. package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
  310. package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
  311. package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
  312. package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
  313. package/templates/shopify/static/.gitkeep +1 -0
  314. package/templates/shopify/structure/collectionStructure.ts +9 -0
  315. package/templates/shopify/structure/colorThemeStructure.ts +9 -0
  316. package/templates/shopify/structure/homeStructure.ts +9 -0
  317. package/templates/shopify/structure/index.ts +57 -0
  318. package/templates/shopify/structure/pageStructure.ts +11 -0
  319. package/templates/shopify/structure/productStructure.ts +51 -0
  320. package/templates/shopify/structure/settingStructure.ts +9 -0
  321. package/templates/shopify/utils/blocksToText.ts +20 -0
  322. package/templates/shopify/utils/defineStructure.ts +11 -0
  323. package/templates/shopify/utils/getPriceRange.ts +24 -0
  324. package/templates/shopify/utils/shopifyUrls.ts +22 -0
  325. package/templates/shopify/utils/validateSlug.ts +18 -0
  326. package/templates/shopify-online-storefront/README.md +54 -0
  327. package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
  328. package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
  329. package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
  330. package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
  331. package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
  332. package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
  333. package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
  334. package/templates/shopify-online-storefront/constants.ts +18 -0
  335. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
  336. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
  337. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
  338. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
  339. package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
  340. package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
  341. package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
  342. package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
  343. package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
  344. package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
  345. package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
  346. package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
  347. package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
  348. package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
  349. package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
  350. package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
  351. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
  352. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
  353. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
  354. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
  355. package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
  356. package/templates/shopify-online-storefront/structure/index.ts +37 -0
  357. package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
  358. package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
  359. package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
  360. package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
  361. package/dist/actions/build/__tests__/buildApp.test.js +0 -367
  362. package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
  363. package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
  364. package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
  365. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
  366. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
  367. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
  368. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
  369. package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
  370. package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
  371. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
  372. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
  373. package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
  374. package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
  375. package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
  376. package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
  377. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
  378. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
  379. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
  380. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
  381. package/dist/actions/cors/constants.d.ts +0 -1
  382. package/dist/actions/cors/constants.js +0 -3
  383. package/dist/actions/cors/constants.js.map +0 -1
  384. package/dist/actions/cors/types.d.ts +0 -9
  385. package/dist/actions/cors/types.js +0 -3
  386. package/dist/actions/cors/types.js.map +0 -1
  387. package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
  388. package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
  389. package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
  390. package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
  391. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
  392. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
  393. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
  394. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
  395. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
  396. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
  397. package/dist/actions/media/__tests__/importMedia.test.js +0 -182
  398. package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
  399. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
  400. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
  401. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
  402. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
  403. package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
  404. package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
  405. package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
  406. package/dist/actions/schema/schemaStoreConstants.js +0 -4
  407. package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
  408. package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
  409. package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
  410. package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
  411. package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
  412. package/dist/actions/schema/utils/schemaApiClient.js +0 -17
  413. package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
  414. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
  415. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
  416. package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
  417. package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
  418. package/dist/actions/users/apiVersion.d.ts +0 -6
  419. package/dist/actions/users/apiVersion.js +0 -7
  420. package/dist/actions/users/apiVersion.js.map +0 -1
  421. package/dist/commands/__tests__/blueprints.test.js +0 -54
  422. package/dist/commands/__tests__/blueprints.test.js.map +0 -1
  423. package/dist/commands/__tests__/build.test.js +0 -132
  424. package/dist/commands/__tests__/build.test.js.map +0 -1
  425. package/dist/commands/__tests__/codemod.test.js +0 -271
  426. package/dist/commands/__tests__/codemod.test.js.map +0 -1
  427. package/dist/commands/__tests__/debug.test.js +0 -697
  428. package/dist/commands/__tests__/debug.test.js.map +0 -1
  429. package/dist/commands/__tests__/deploy.test.js +0 -1913
  430. package/dist/commands/__tests__/deploy.test.js.map +0 -1
  431. package/dist/commands/__tests__/dev.test.js +0 -410
  432. package/dist/commands/__tests__/dev.test.js.map +0 -1
  433. package/dist/commands/__tests__/exec.test.js +0 -207
  434. package/dist/commands/__tests__/exec.test.js.map +0 -1
  435. package/dist/commands/__tests__/init/init.authentication.test.js +0 -60
  436. package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
  437. package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -196
  438. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
  439. package/dist/commands/__tests__/init/init.plan.test.js +0 -220
  440. package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
  441. package/dist/commands/__tests__/init/init.setup.test.js +0 -279
  442. package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
  443. package/dist/commands/__tests__/install.test.js +0 -258
  444. package/dist/commands/__tests__/install.test.js.map +0 -1
  445. package/dist/commands/__tests__/learn.test.js +0 -29
  446. package/dist/commands/__tests__/learn.test.js.map +0 -1
  447. package/dist/commands/__tests__/logout.test.js +0 -88
  448. package/dist/commands/__tests__/logout.test.js.map +0 -1
  449. package/dist/commands/__tests__/manage.test.js +0 -105
  450. package/dist/commands/__tests__/manage.test.js.map +0 -1
  451. package/dist/commands/__tests__/migration.test.js +0 -119
  452. package/dist/commands/__tests__/migration.test.js.map +0 -1
  453. package/dist/commands/__tests__/preview.test.js +0 -261
  454. package/dist/commands/__tests__/preview.test.js.map +0 -1
  455. package/dist/commands/__tests__/start.test.js +0 -253
  456. package/dist/commands/__tests__/start.test.js.map +0 -1
  457. package/dist/commands/__tests__/undeploy.test.js +0 -382
  458. package/dist/commands/__tests__/undeploy.test.js.map +0 -1
  459. package/dist/commands/__tests__/versions.test.js +0 -134
  460. package/dist/commands/__tests__/versions.test.js.map +0 -1
  461. package/dist/commands/backup/__tests__/disable.test.js +0 -207
  462. package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
  463. package/dist/commands/backup/__tests__/download.test.js +0 -679
  464. package/dist/commands/backup/__tests__/download.test.js.map +0 -1
  465. package/dist/commands/backup/__tests__/enable.test.js +0 -317
  466. package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
  467. package/dist/commands/backup/__tests__/list.test.js +0 -321
  468. package/dist/commands/backup/__tests__/list.test.js.map +0 -1
  469. package/dist/commands/cors/__tests__/add.test.js +0 -346
  470. package/dist/commands/cors/__tests__/add.test.js.map +0 -1
  471. package/dist/commands/cors/__tests__/delete.test.js +0 -293
  472. package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
  473. package/dist/commands/cors/__tests__/list.test.js +0 -218
  474. package/dist/commands/cors/__tests__/list.test.js.map +0 -1
  475. package/dist/commands/dataset/__tests__/copy.test.js +0 -520
  476. package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
  477. package/dist/commands/dataset/__tests__/create.test.js +0 -312
  478. package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
  479. package/dist/commands/dataset/__tests__/delete.test.js +0 -224
  480. package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
  481. package/dist/commands/dataset/__tests__/export.test.js +0 -561
  482. package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
  483. package/dist/commands/dataset/__tests__/import.test.js +0 -53
  484. package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
  485. package/dist/commands/dataset/__tests__/list.test.js +0 -174
  486. package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
  487. package/dist/commands/dataset/alias/__tests__/create.test.js +0 -299
  488. package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
  489. package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -236
  490. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
  491. package/dist/commands/dataset/alias/__tests__/link.test.js +0 -336
  492. package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
  493. package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -298
  494. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
  495. package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -147
  496. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
  497. package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -245
  498. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
  499. package/dist/commands/docs/__tests__/browse.test.js +0 -29
  500. package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
  501. package/dist/commands/docs/__tests__/read.test.js +0 -78
  502. package/dist/commands/docs/__tests__/read.test.js.map +0 -1
  503. package/dist/commands/docs/__tests__/search.test.js +0 -254
  504. package/dist/commands/docs/__tests__/search.test.js.map +0 -1
  505. package/dist/commands/documents/__tests__/create.test.js +0 -967
  506. package/dist/commands/documents/__tests__/create.test.js.map +0 -1
  507. package/dist/commands/documents/__tests__/delete.test.js +0 -268
  508. package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
  509. package/dist/commands/documents/__tests__/get.test.js +0 -209
  510. package/dist/commands/documents/__tests__/get.test.js.map +0 -1
  511. package/dist/commands/documents/__tests__/query.test.js +0 -405
  512. package/dist/commands/documents/__tests__/query.test.js.map +0 -1
  513. package/dist/commands/documents/__tests__/validate.test.js +0 -226
  514. package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
  515. package/dist/commands/graphql/__tests__/list.test.js +0 -228
  516. package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
  517. package/dist/commands/graphql/__tests__/undeploy.test.js +0 -384
  518. package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
  519. package/dist/commands/hook/__tests__/attempt.test.js +0 -260
  520. package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
  521. package/dist/commands/hook/__tests__/create.test.js +0 -121
  522. package/dist/commands/hook/__tests__/create.test.js.map +0 -1
  523. package/dist/commands/hook/__tests__/delete.test.js +0 -220
  524. package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
  525. package/dist/commands/hook/__tests__/list.test.js +0 -138
  526. package/dist/commands/hook/__tests__/list.test.js.map +0 -1
  527. package/dist/commands/hook/__tests__/logs.test.js +0 -770
  528. package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
  529. package/dist/commands/manifest/__tests__/extract.test.js +0 -123
  530. package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
  531. package/dist/commands/mcp/__tests__/configure.test.js +0 -397
  532. package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
  533. package/dist/commands/media/__tests__/create-aspect.test.js +0 -160
  534. package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
  535. package/dist/commands/media/__tests__/delete-aspect.test.js +0 -333
  536. package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
  537. package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -632
  538. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
  539. package/dist/commands/media/__tests__/export.test.js +0 -398
  540. package/dist/commands/media/__tests__/export.test.js.map +0 -1
  541. package/dist/commands/media/__tests__/import.test.js +0 -281
  542. package/dist/commands/media/__tests__/import.test.js.map +0 -1
  543. package/dist/commands/openapi/__tests__/get.test.js +0 -149
  544. package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
  545. package/dist/commands/openapi/__tests__/list.test.js +0 -113
  546. package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
  547. package/dist/commands/projects/__tests__/list.test.js +0 -153
  548. package/dist/commands/projects/__tests__/list.test.js.map +0 -1
  549. package/dist/commands/schema/__tests__/delete.test.js +0 -209
  550. package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
  551. package/dist/commands/schema/__tests__/extract.test.js +0 -113
  552. package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
  553. package/dist/commands/schema/__tests__/validate.test.js +0 -104
  554. package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
  555. package/dist/commands/telemetry/__tests__/disable.test.js +0 -145
  556. package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
  557. package/dist/commands/telemetry/__tests__/enable.test.js +0 -131
  558. package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
  559. package/dist/commands/telemetry/__tests__/status.test.js +0 -153
  560. package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
  561. package/dist/commands/tokens/__tests__/add.test.js +0 -420
  562. package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
  563. package/dist/commands/tokens/__tests__/delete.test.js +0 -375
  564. package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
  565. package/dist/commands/tokens/__tests__/list.test.js +0 -368
  566. package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
  567. package/dist/commands/users/__tests__/invite.test.js +0 -341
  568. package/dist/commands/users/__tests__/invite.test.js.map +0 -1
  569. package/dist/commands/users/__tests__/list.test.js +0 -401
  570. package/dist/commands/users/__tests__/list.test.js.map +0 -1
  571. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
  572. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
  573. package/dist/services/__tests__/datasetAliases.test.js +0 -131
  574. package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
  575. package/dist/services/__tests__/datasets.test.js +0 -436
  576. package/dist/services/__tests__/datasets.test.js.map +0 -1
  577. package/dist/services/__tests__/graphql.test.js +0 -43
  578. package/dist/services/__tests__/graphql.test.js.map +0 -1
  579. package/dist/services/__tests__/mediaLibraries.test.js +0 -88
  580. package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
  581. package/dist/services/__tests__/projects.test.js +0 -41
  582. package/dist/services/__tests__/projects.test.js.map +0 -1
  583. package/dist/services/__tests__/userApplications.test.js +0 -113
  584. package/dist/services/__tests__/userApplications.test.js.map +0 -1
  585. package/dist/util/__tests__/appId.test.js +0 -31
  586. package/dist/util/__tests__/appId.test.js.map +0 -1
  587. package/dist/util/__tests__/cliClient.test.js +0 -184
  588. package/dist/util/__tests__/cliClient.test.js.map +0 -1
  589. package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
  590. package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
  591. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
  592. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
  593. package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
  594. package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
  595. package/dist/util/__tests__/getCliVersion.test.js +0 -28
  596. package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
  597. package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
  598. package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
  599. package/dist/util/__tests__/getWorkspace.test.js +0 -37
  600. package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
  601. package/dist/util/__tests__/readPackageJson.test.js +0 -69
  602. package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
  603. package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
  604. package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
  605. package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
  606. package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
  607. package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
  608. package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
@@ -1,281 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { testCommand } from '@sanity/cli-test';
3
- import { of, throwError } from 'rxjs';
4
- import { afterEach, describe, expect, test, vi } from 'vitest';
5
- import { MediaImportCommand } from '../import.js';
6
- const mocks = vi.hoisted(()=>({
7
- getCliConfig: vi.fn(),
8
- getMediaLibraries: vi.fn(),
9
- getProjectCliClient: vi.fn(),
10
- importer: vi.fn(),
11
- select: vi.fn(),
12
- spinner: vi.fn()
13
- }));
14
- vi.mock('../../../services/mediaLibraries.js', ()=>({
15
- getMediaLibraries: mocks.getMediaLibraries
16
- }));
17
- vi.mock('@sanity/cli-core/ux', async ()=>{
18
- const actual = await vi.importActual('@sanity/cli-core/ux');
19
- return {
20
- ...actual,
21
- select: mocks.select,
22
- spinner: mocks.spinner
23
- };
24
- });
25
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
26
- findProjectRoot: vi.fn().mockResolvedValue({
27
- directory: '/test/path',
28
- root: '/test/path',
29
- type: 'studio'
30
- })
31
- }));
32
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
33
- getCliConfig: mocks.getCliConfig
34
- }));
35
- vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
36
- getProjectCliClient: mocks.getProjectCliClient
37
- }));
38
- vi.mock('../../../actions/media/importMedia.js', ()=>({
39
- importer: mocks.importer
40
- }));
41
- const mockGetMediaLibraries = mocks.getMediaLibraries;
42
- const mockGetCliConfig = mocks.getCliConfig;
43
- const mockGetProjectCliClient = mocks.getProjectCliClient;
44
- const mockSelect = mocks.select;
45
- const mockSpinner = mocks.spinner;
46
- // Setup CLI config
47
- const apiConfig = {
48
- projectId: '1234'
49
- };
50
- mockGetCliConfig.mockResolvedValue({
51
- api: apiConfig
52
- });
53
- mockGetProjectCliClient.mockResolvedValue({});
54
- describe('#media:import', ()=>{
55
- afterEach(()=>{
56
- vi.clearAllMocks();
57
- });
58
- test('should show help text correctly', async ()=>{
59
- const { stdout } = await runCommand([
60
- 'media',
61
- 'import',
62
- '--help'
63
- ]);
64
- expect(stdout).toMatchInlineSnapshot(`
65
- "Import a set of assets to the target media library.
66
-
67
- USAGE
68
- $ sanity media import SOURCE [--media-library-id <value>]
69
- [--replace-aspects]
70
-
71
- ARGUMENTS
72
- SOURCE Image file or folder to import from
73
-
74
- FLAGS
75
- --media-library-id=<value> The id of the target media library
76
- --replace-aspects Replace existing aspect data. All versions will be
77
- replaced (e.g. published and draft aspect data)
78
-
79
- DESCRIPTION
80
- Import a set of assets to the target media library.
81
-
82
- EXAMPLES
83
- Import all assets from the "products" directory
84
-
85
- $ sanity media import products
86
-
87
- Import all assets from "gallery" archive
88
-
89
- $ sanity media import gallery.tar.gz
90
-
91
- Import all assets from the "products" directory and replace aspects
92
-
93
- $ sanity media import products --replace-aspects
94
-
95
- "
96
- `);
97
- });
98
- test('show console error when no projectId is found', async ()=>{
99
- mockGetCliConfig.mockResolvedValueOnce({
100
- api: {}
101
- });
102
- const { error } = await testCommand(MediaImportCommand, [
103
- 'test-source'
104
- ]);
105
- expect(error?.message).toContain('does not contain a project identifier');
106
- expect(error?.oclif?.exit).toBe(1);
107
- });
108
- test('show console error when getMediaLibraries fails', async ()=>{
109
- mockGetMediaLibraries.mockRejectedValue(new Error('API request failed'));
110
- const { error } = await testCommand(MediaImportCommand, [
111
- 'test-source'
112
- ]);
113
- expect(error?.message).toContain('Failed to list media libraries');
114
- expect(error?.message).toContain('API request failed');
115
- expect(error?.oclif?.exit).toBe(1);
116
- });
117
- test('show console error when no active media libraries are found', async ()=>{
118
- mockGetMediaLibraries.mockResolvedValue([]);
119
- const { error } = await testCommand(MediaImportCommand, [
120
- 'test-source'
121
- ]);
122
- expect(error?.message).toContain('No active media libraries found in this project');
123
- expect(error?.oclif?.exit).toBe(1);
124
- });
125
- test('prompt user when there is no media flag', async ()=>{
126
- const mediaLibraries = [
127
- {
128
- id: 'test-media-library',
129
- organizationId: 'org-1',
130
- status: 'active'
131
- },
132
- {
133
- id: 'another-library',
134
- organizationId: 'org-1',
135
- status: 'active'
136
- }
137
- ];
138
- mockGetMediaLibraries.mockResolvedValue(mediaLibraries);
139
- mockSelect.mockResolvedValue('test-media-library');
140
- await testCommand(MediaImportCommand, [
141
- 'test-source'
142
- ]);
143
- expect(mockSelect).toHaveBeenCalledWith(expect.objectContaining({
144
- message: 'Select media library:'
145
- }));
146
- });
147
- test('show console error when there is an error selecting a media library', async ()=>{
148
- const mediaLibraries = [
149
- {
150
- id: 'test-media-library',
151
- organizationId: 'org-1',
152
- status: 'active'
153
- }
154
- ];
155
- mockGetMediaLibraries.mockResolvedValue(mediaLibraries);
156
- mockSelect.mockRejectedValue(new Error('User cancelled selection'));
157
- const { error } = await testCommand(MediaImportCommand, [
158
- 'test-source'
159
- ]);
160
- expect(error?.message).toContain('Failed to select media library');
161
- expect(error?.message).toContain('User cancelled selection');
162
- expect(error?.oclif?.exit).toBe(1);
163
- });
164
- test('show console error when the media library id flag is not valid', async ()=>{
165
- const mediaLibraries = [
166
- {
167
- id: 'test-media-library',
168
- organizationId: 'org-1',
169
- status: 'active'
170
- }
171
- ];
172
- mockGetMediaLibraries.mockResolvedValue(mediaLibraries);
173
- const { error } = await testCommand(MediaImportCommand, [
174
- 'test-source',
175
- '--media-library-id',
176
- 'non-existent-library'
177
- ]);
178
- expect(error?.message).toContain('Media library with id "non-existent-library" not found');
179
- expect(error?.oclif?.exit).toBe(1);
180
- });
181
- test('getProjectApiClient is instantiated with the correct values', async ()=>{
182
- const mediaLibraries = [
183
- {
184
- id: 'test-media-library',
185
- organizationId: 'org-1',
186
- status: 'active'
187
- }
188
- ];
189
- mockGetMediaLibraries.mockResolvedValue(mediaLibraries);
190
- const mockSpinnerInstance = {
191
- start: vi.fn().mockReturnThis(),
192
- stop: vi.fn().mockReturnThis(),
193
- succeed: vi.fn().mockReturnThis()
194
- };
195
- mockSpinner.mockReturnValue(mockSpinnerInstance);
196
- await testCommand(MediaImportCommand, [
197
- 'test-source',
198
- '--media-library-id',
199
- 'test-media-library'
200
- ]);
201
- expect(mockGetProjectCliClient).toHaveBeenCalledWith({
202
- apiVersion: 'v2025-02-19',
203
- dataset: undefined,
204
- perspective: 'drafts',
205
- projectId: '1234',
206
- requestTagPrefix: 'sanity.mediaLibraryCli.import',
207
- requireUser: true,
208
- '~experimental_resource': {
209
- id: 'test-media-library',
210
- type: 'media-library'
211
- }
212
- });
213
- });
214
- test('show success message when cli imports asset successfully', async ()=>{
215
- mockGetMediaLibraries.mockResolvedValue([
216
- {
217
- id: 'test-media-library',
218
- organizationId: 'org-1',
219
- status: 'active'
220
- }
221
- ]);
222
- const mockSpinnerInstance = {
223
- start: vi.fn().mockReturnThis(),
224
- succeed: vi.fn().mockReturnThis(),
225
- text: ''
226
- };
227
- mockSpinner.mockReturnValue(mockSpinnerInstance);
228
- // Mock importer to emit 3 assets
229
- mocks.importer.mockReturnValue(of({
230
- asset: {
231
- originalFilename: 'img1.jpg'
232
- },
233
- fileCount: 3
234
- }, {
235
- asset: {
236
- originalFilename: 'img2.jpg'
237
- },
238
- fileCount: 3
239
- }, {
240
- asset: {
241
- originalFilename: 'img3.jpg'
242
- },
243
- fileCount: 3
244
- }));
245
- await testCommand(MediaImportCommand, [
246
- 'test-source',
247
- '--media-library-id',
248
- 'test-media-library'
249
- ]);
250
- expect(mockSpinner).toHaveBeenCalledWith('Beginning import…');
251
- expect(mockSpinnerInstance.start).toHaveBeenCalled();
252
- expect(mockSpinnerInstance.succeed).toHaveBeenCalledWith('Imported 3 assets');
253
- });
254
- test('show failure in console if importer fails', async ()=>{
255
- mockGetMediaLibraries.mockResolvedValue([
256
- {
257
- id: 'test-media-library',
258
- organizationId: 'org-1',
259
- status: 'active'
260
- }
261
- ]);
262
- const mockSpinnerInstance = {
263
- start: vi.fn().mockReturnThis(),
264
- stop: vi.fn().mockReturnThis()
265
- };
266
- mockSpinner.mockReturnValue(mockSpinnerInstance);
267
- // Mock importer to throw an error
268
- mocks.importer.mockReturnValue(throwError(()=>new Error('Failed to upload asset')));
269
- const { error } = await testCommand(MediaImportCommand, [
270
- 'test-source',
271
- '--media-library-id',
272
- 'test-media-library'
273
- ]);
274
- expect(mockSpinnerInstance.stop).toHaveBeenCalled();
275
- expect(error).toBeDefined();
276
- expect(error?.message).toBe('Failed to upload asset');
277
- expect(error?.oclif?.exit).toBe(1);
278
- });
279
- });
280
-
281
- //# sourceMappingURL=import.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/media/__tests__/import.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {type CliConfig} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {SanityClient} from '@sanity/client'\nimport {of, throwError} from 'rxjs'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {MediaImportCommand} from '../import.js'\n\nconst mocks = vi.hoisted(() => ({\n getCliConfig: vi.fn(),\n getMediaLibraries: vi.fn(),\n getProjectCliClient: vi.fn(),\n importer: vi.fn(),\n select: vi.fn(),\n spinner: vi.fn(),\n}))\n\nvi.mock('../../../services/mediaLibraries.js', () => ({\n getMediaLibraries: mocks.getMediaLibraries,\n}))\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n select: mocks.select,\n spinner: mocks.spinner,\n }\n})\n\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: mocks.getCliConfig,\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: mocks.getProjectCliClient,\n}))\n\nvi.mock('../../../actions/media/importMedia.js', () => ({\n importer: mocks.importer,\n}))\n\nconst mockGetMediaLibraries = mocks.getMediaLibraries\nconst mockGetCliConfig = mocks.getCliConfig\nconst mockGetProjectCliClient = mocks.getProjectCliClient\nconst mockSelect = mocks.select\nconst mockSpinner = mocks.spinner\n\n// Setup CLI config\nconst apiConfig: CliConfig['api'] = {projectId: '1234'}\nmockGetCliConfig.mockResolvedValue({api: apiConfig})\nmockGetProjectCliClient.mockResolvedValue({} as SanityClient)\n\ndescribe('#media:import', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('should show help text correctly', async () => {\n const {stdout} = await runCommand(['media', 'import', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Import a set of assets to the target media library.\n\n USAGE\n $ sanity media import SOURCE [--media-library-id <value>]\n [--replace-aspects]\n\n ARGUMENTS\n SOURCE Image file or folder to import from\n\n FLAGS\n --media-library-id=<value> The id of the target media library\n --replace-aspects Replace existing aspect data. All versions will be\n replaced (e.g. published and draft aspect data)\n\n DESCRIPTION\n Import a set of assets to the target media library.\n\n EXAMPLES\n Import all assets from the \"products\" directory\n\n $ sanity media import products\n\n Import all assets from \"gallery\" archive\n\n $ sanity media import gallery.tar.gz\n\n Import all assets from the \"products\" directory and replace aspects\n\n $ sanity media import products --replace-aspects\n\n \"\n `)\n })\n\n test('show console error when no projectId is found', async () => {\n mockGetCliConfig.mockResolvedValueOnce({api: {}})\n\n const {error} = await testCommand(MediaImportCommand, ['test-source'])\n\n expect(error?.message).toContain('does not contain a project identifier')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('show console error when getMediaLibraries fails', async () => {\n mockGetMediaLibraries.mockRejectedValue(new Error('API request failed'))\n\n const {error} = await testCommand(MediaImportCommand, ['test-source'])\n\n expect(error?.message).toContain('Failed to list media libraries')\n expect(error?.message).toContain('API request failed')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('show console error when no active media libraries are found', async () => {\n mockGetMediaLibraries.mockResolvedValue([])\n\n const {error} = await testCommand(MediaImportCommand, ['test-source'])\n\n expect(error?.message).toContain('No active media libraries found in this project')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('prompt user when there is no media flag', async () => {\n const mediaLibraries = [\n {id: 'test-media-library', organizationId: 'org-1', status: 'active' as const},\n {id: 'another-library', organizationId: 'org-1', status: 'active' as const},\n ]\n mockGetMediaLibraries.mockResolvedValue(mediaLibraries)\n mockSelect.mockResolvedValue('test-media-library')\n\n await testCommand(MediaImportCommand, ['test-source'])\n\n expect(mockSelect).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Select media library:',\n }),\n )\n })\n\n test('show console error when there is an error selecting a media library', async () => {\n const mediaLibraries = [\n {id: 'test-media-library', organizationId: 'org-1', status: 'active' as const},\n ]\n mockGetMediaLibraries.mockResolvedValue(mediaLibraries)\n mockSelect.mockRejectedValue(new Error('User cancelled selection'))\n\n const {error} = await testCommand(MediaImportCommand, ['test-source'])\n\n expect(error?.message).toContain('Failed to select media library')\n expect(error?.message).toContain('User cancelled selection')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('show console error when the media library id flag is not valid', async () => {\n const mediaLibraries = [\n {id: 'test-media-library', organizationId: 'org-1', status: 'active' as const},\n ]\n mockGetMediaLibraries.mockResolvedValue(mediaLibraries)\n\n const {error} = await testCommand(MediaImportCommand, [\n 'test-source',\n '--media-library-id',\n 'non-existent-library',\n ])\n\n expect(error?.message).toContain('Media library with id \"non-existent-library\" not found')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('getProjectApiClient is instantiated with the correct values', async () => {\n const mediaLibraries = [\n {id: 'test-media-library', organizationId: 'org-1', status: 'active' as const},\n ]\n mockGetMediaLibraries.mockResolvedValue(mediaLibraries)\n\n const mockSpinnerInstance = {\n start: vi.fn().mockReturnThis(),\n stop: vi.fn().mockReturnThis(),\n succeed: vi.fn().mockReturnThis(),\n }\n mockSpinner.mockReturnValue(mockSpinnerInstance as never)\n\n await testCommand(MediaImportCommand, [\n 'test-source',\n '--media-library-id',\n 'test-media-library',\n ])\n\n expect(mockGetProjectCliClient).toHaveBeenCalledWith({\n apiVersion: 'v2025-02-19',\n dataset: undefined,\n perspective: 'drafts',\n projectId: '1234',\n requestTagPrefix: 'sanity.mediaLibraryCli.import',\n requireUser: true,\n '~experimental_resource': {\n id: 'test-media-library',\n type: 'media-library',\n },\n })\n })\n\n test('show success message when cli imports asset successfully', async () => {\n mockGetMediaLibraries.mockResolvedValue([\n {id: 'test-media-library', organizationId: 'org-1', status: 'active' as const},\n ])\n\n const mockSpinnerInstance = {\n start: vi.fn().mockReturnThis(),\n succeed: vi.fn().mockReturnThis(),\n text: '',\n }\n mockSpinner.mockReturnValue(mockSpinnerInstance as never)\n\n // Mock importer to emit 3 assets\n mocks.importer.mockReturnValue(\n of(\n {asset: {originalFilename: 'img1.jpg'}, fileCount: 3},\n {asset: {originalFilename: 'img2.jpg'}, fileCount: 3},\n {asset: {originalFilename: 'img3.jpg'}, fileCount: 3},\n ),\n )\n\n await testCommand(MediaImportCommand, [\n 'test-source',\n '--media-library-id',\n 'test-media-library',\n ])\n\n expect(mockSpinner).toHaveBeenCalledWith('Beginning import…')\n expect(mockSpinnerInstance.start).toHaveBeenCalled()\n expect(mockSpinnerInstance.succeed).toHaveBeenCalledWith('Imported 3 assets')\n })\n\n test('show failure in console if importer fails', async () => {\n mockGetMediaLibraries.mockResolvedValue([\n {id: 'test-media-library', organizationId: 'org-1', status: 'active' as const},\n ])\n\n const mockSpinnerInstance = {\n start: vi.fn().mockReturnThis(),\n stop: vi.fn().mockReturnThis(),\n }\n mockSpinner.mockReturnValue(mockSpinnerInstance as never)\n\n // Mock importer to throw an error\n mocks.importer.mockReturnValue(throwError(() => new Error('Failed to upload asset')))\n\n const {error} = await testCommand(MediaImportCommand, [\n 'test-source',\n '--media-library-id',\n 'test-media-library',\n ])\n\n expect(mockSpinnerInstance.stop).toHaveBeenCalled()\n expect(error).toBeDefined()\n expect(error?.message).toBe('Failed to upload asset')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","testCommand","of","throwError","afterEach","describe","expect","test","vi","MediaImportCommand","mocks","hoisted","getCliConfig","fn","getMediaLibraries","getProjectCliClient","importer","select","spinner","mock","actual","importActual","findProjectRoot","mockResolvedValue","directory","root","type","mockGetMediaLibraries","mockGetCliConfig","mockGetProjectCliClient","mockSelect","mockSpinner","apiConfig","projectId","api","clearAllMocks","stdout","toMatchInlineSnapshot","mockResolvedValueOnce","error","message","toContain","oclif","exit","toBe","mockRejectedValue","Error","mediaLibraries","id","organizationId","status","toHaveBeenCalledWith","objectContaining","mockSpinnerInstance","start","mockReturnThis","stop","succeed","mockReturnValue","apiVersion","dataset","undefined","perspective","requestTagPrefix","requireUser","text","asset","originalFilename","fileCount","toHaveBeenCalled","toBeDefined"],"mappings":"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"}
@@ -1,149 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { testCommand } from '@sanity/cli-test';
3
- import nock from 'nock';
4
- import open from 'open';
5
- import { afterEach, describe, expect, test, vi } from 'vitest';
6
- import { GetOpenApiCommand } from '../get.js';
7
- const mockYamlSpec = `
8
- openapi: 3.0.0
9
- info:
10
- title: Query API
11
- version: 1.0.0
12
- paths:
13
- /query:
14
- get:
15
- summary: Query documents
16
- `.trim();
17
- const mockJsonSpec = JSON.stringify({
18
- info: {
19
- title: 'Query API',
20
- version: '1.0.0'
21
- },
22
- openapi: '3.0.0',
23
- paths: {
24
- '/query': {
25
- get: {
26
- summary: 'Query documents'
27
- }
28
- }
29
- }
30
- });
31
- describe('#openapi:get', ()=>{
32
- afterEach(()=>{
33
- vi.clearAllMocks();
34
- const pending = nock.pendingMocks();
35
- nock.cleanAll();
36
- expect(pending, 'pending mocks').toEqual([]);
37
- });
38
- test('--help works', async ()=>{
39
- const { stdout } = await runCommand([
40
- 'openapi get',
41
- '--help'
42
- ]);
43
- expect(stdout).toContain('Get an OpenAPI specification by slug');
44
- });
45
- test('gets YAML spec by default', async ()=>{
46
- nock('https://www.sanity.io').get('/docs/api/openapi/query').query({
47
- format: 'yaml'
48
- }).reply(200, mockYamlSpec, {
49
- 'Content-Type': 'text/yaml'
50
- });
51
- const { stdout } = await testCommand(GetOpenApiCommand, [
52
- 'query'
53
- ]);
54
- expect(stdout).toContain(mockYamlSpec);
55
- });
56
- test('gets JSON spec with --format=json', async ()=>{
57
- nock('https://www.sanity.io').get('/docs/api/openapi/query').query({
58
- format: 'json'
59
- }).reply(200, mockJsonSpec, {
60
- 'Content-Type': 'application/json'
61
- });
62
- const { stdout } = await testCommand(GetOpenApiCommand, [
63
- 'query',
64
- '--format=json'
65
- ]);
66
- expect(stdout).toContain(mockJsonSpec);
67
- });
68
- test('gets YAML spec with explicit --format=yaml', async ()=>{
69
- nock('https://www.sanity.io').get('/docs/api/openapi/query').query({
70
- format: 'yaml'
71
- }).reply(200, mockYamlSpec, {
72
- 'Content-Type': 'text/yaml'
73
- });
74
- const { stdout } = await testCommand(GetOpenApiCommand, [
75
- 'query',
76
- '--format=yaml'
77
- ]);
78
- expect(stdout).toContain(mockYamlSpec);
79
- });
80
- test('opens web browser with --web flag', async ()=>{
81
- const { stdout } = await testCommand(GetOpenApiCommand, [
82
- 'query',
83
- '--web'
84
- ]);
85
- expect(stdout).toContain('Opening https://www.sanity.io/docs/http-reference/query');
86
- expect(open).toHaveBeenCalledWith('https://www.sanity.io/docs/http-reference/query');
87
- });
88
- test('handles 404 not found', async ()=>{
89
- nock('https://www.sanity.io').get('/docs/api/openapi/nonexistent').query({
90
- format: 'yaml'
91
- }).reply(404, 'Not Found');
92
- const { error } = await testCommand(GetOpenApiCommand, [
93
- 'nonexistent'
94
- ]);
95
- expect(error).toBeInstanceOf(Error);
96
- expect(error?.message).toContain('OpenAPI specification not found. nonexistent');
97
- expect(error?.oclif?.exit).toBe(1);
98
- });
99
- test('handles server error', async ()=>{
100
- nock('https://www.sanity.io').get('/docs/api/openapi/query').query({
101
- format: 'yaml'
102
- }).reply(500, 'Server Error');
103
- const { error } = await testCommand(GetOpenApiCommand, [
104
- 'query'
105
- ]);
106
- expect(error).toBeInstanceOf(Error);
107
- expect(error?.message).toContain('The OpenAPI service is currently unavailable. Please try again later.');
108
- expect(error?.oclif?.exit).toBe(1);
109
- });
110
- test('handles network error', async ()=>{
111
- nock('https://www.sanity.io').get('/docs/api/openapi/query').query({
112
- format: 'yaml'
113
- }).replyWithError('Network error');
114
- const { error } = await testCommand(GetOpenApiCommand, [
115
- 'query'
116
- ]);
117
- expect(error).toBeInstanceOf(Error);
118
- expect(error?.message).toContain('The OpenAPI service is currently unavailable. Please try again later.');
119
- expect(error?.oclif?.exit).toBe(1);
120
- });
121
- test('requires slug argument', async ()=>{
122
- const { error } = await testCommand(GetOpenApiCommand, []);
123
- expect(error).toBeInstanceOf(Error);
124
- expect(error?.message).toContain('Missing 1 required arg');
125
- expect(error?.message).toContain('slug');
126
- expect(error?.oclif?.exit).toBe(2);
127
- });
128
- test('handles different slug formats', async ()=>{
129
- nock('https://www.sanity.io').get('/docs/api/openapi/admin-api').query({
130
- format: 'yaml'
131
- }).reply(200, mockYamlSpec, {
132
- 'Content-Type': 'text/yaml'
133
- });
134
- const { stdout } = await testCommand(GetOpenApiCommand, [
135
- 'admin-api'
136
- ]);
137
- expect(stdout).toContain(mockYamlSpec);
138
- });
139
- test('combines --web with slug in URL', async ()=>{
140
- const { stdout } = await testCommand(GetOpenApiCommand, [
141
- 'admin-api',
142
- '--web'
143
- ]);
144
- expect(stdout).toContain('Opening https://www.sanity.io/docs/http-reference/admin-api');
145
- expect(open).toHaveBeenCalledWith('https://www.sanity.io/docs/http-reference/admin-api');
146
- });
147
- });
148
-
149
- //# sourceMappingURL=get.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/openapi/__tests__/get.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport open from 'open'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {GetOpenApiCommand} from '../get.js'\n\nconst mockYamlSpec = `\nopenapi: 3.0.0\ninfo:\n title: Query API\n version: 1.0.0\npaths:\n /query:\n get:\n summary: Query documents\n`.trim()\n\nconst mockJsonSpec = JSON.stringify({\n info: {\n title: 'Query API',\n version: '1.0.0',\n },\n openapi: '3.0.0',\n paths: {\n '/query': {\n get: {\n summary: 'Query documents',\n },\n },\n },\n})\n\ndescribe('#openapi:get', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['openapi get', '--help'])\n\n expect(stdout).toContain('Get an OpenAPI specification by slug')\n })\n\n test('gets YAML spec by default', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi/query')\n .query({format: 'yaml'})\n .reply(200, mockYamlSpec, {'Content-Type': 'text/yaml'})\n\n const {stdout} = await testCommand(GetOpenApiCommand, ['query'])\n\n expect(stdout).toContain(mockYamlSpec)\n })\n\n test('gets JSON spec with --format=json', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi/query')\n .query({format: 'json'})\n .reply(200, mockJsonSpec, {'Content-Type': 'application/json'})\n\n const {stdout} = await testCommand(GetOpenApiCommand, ['query', '--format=json'])\n\n expect(stdout).toContain(mockJsonSpec)\n })\n\n test('gets YAML spec with explicit --format=yaml', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi/query')\n .query({format: 'yaml'})\n .reply(200, mockYamlSpec, {'Content-Type': 'text/yaml'})\n\n const {stdout} = await testCommand(GetOpenApiCommand, ['query', '--format=yaml'])\n\n expect(stdout).toContain(mockYamlSpec)\n })\n\n test('opens web browser with --web flag', async () => {\n const {stdout} = await testCommand(GetOpenApiCommand, ['query', '--web'])\n\n expect(stdout).toContain('Opening https://www.sanity.io/docs/http-reference/query')\n expect(open).toHaveBeenCalledWith('https://www.sanity.io/docs/http-reference/query')\n })\n\n test('handles 404 not found', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi/nonexistent')\n .query({format: 'yaml'})\n .reply(404, 'Not Found')\n\n const {error} = await testCommand(GetOpenApiCommand, ['nonexistent'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('OpenAPI specification not found. nonexistent')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles server error', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi/query')\n .query({format: 'yaml'})\n .reply(500, 'Server Error')\n\n const {error} = await testCommand(GetOpenApiCommand, ['query'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(\n 'The OpenAPI service is currently unavailable. Please try again later.',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles network error', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi/query')\n .query({format: 'yaml'})\n .replyWithError('Network error')\n\n const {error} = await testCommand(GetOpenApiCommand, ['query'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(\n 'The OpenAPI service is currently unavailable. Please try again later.',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('requires slug argument', async () => {\n const {error} = await testCommand(GetOpenApiCommand, [])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Missing 1 required arg')\n expect(error?.message).toContain('slug')\n expect(error?.oclif?.exit).toBe(2)\n })\n\n test('handles different slug formats', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi/admin-api')\n .query({format: 'yaml'})\n .reply(200, mockYamlSpec, {'Content-Type': 'text/yaml'})\n\n const {stdout} = await testCommand(GetOpenApiCommand, ['admin-api'])\n\n expect(stdout).toContain(mockYamlSpec)\n })\n\n test('combines --web with slug in URL', async () => {\n const {stdout} = await testCommand(GetOpenApiCommand, ['admin-api', '--web'])\n\n expect(stdout).toContain('Opening https://www.sanity.io/docs/http-reference/admin-api')\n expect(open).toHaveBeenCalledWith('https://www.sanity.io/docs/http-reference/admin-api')\n })\n})\n"],"names":["runCommand","testCommand","nock","open","afterEach","describe","expect","test","vi","GetOpenApiCommand","mockYamlSpec","trim","mockJsonSpec","JSON","stringify","info","title","version","openapi","paths","get","summary","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toContain","query","format","reply","toHaveBeenCalledWith","error","toBeInstanceOf","Error","message","oclif","exit","toBe","replyWithError"],"mappings":"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"}
@@ -1,113 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { testCommand } from '@sanity/cli-test';
3
- import nock from 'nock';
4
- import open from 'open';
5
- import { afterEach, describe, expect, test, vi } from 'vitest';
6
- import { ListOpenApiCommand } from '../list.js';
7
- const mockSpecs = [
8
- {
9
- description: 'Query documents and other content',
10
- slug: 'query',
11
- title: 'Query API'
12
- },
13
- {
14
- description: 'Create, update and delete documents',
15
- slug: 'mutate',
16
- title: 'Mutate API'
17
- }
18
- ];
19
- describe('#openapi:list', ()=>{
20
- afterEach(()=>{
21
- vi.clearAllMocks();
22
- const pending = nock.pendingMocks();
23
- nock.cleanAll();
24
- expect(pending, 'pending mocks').toEqual([]);
25
- });
26
- test('--help works', async ()=>{
27
- const { stdout } = await runCommand([
28
- 'openapi list',
29
- '--help'
30
- ]);
31
- expect(stdout).toContain('List all available OpenAPI specifications');
32
- });
33
- test('displays OpenAPI specs correctly', async ()=>{
34
- nock('https://www.sanity.io').get('/docs/api/openapi').reply(200, {
35
- specs: mockSpecs
36
- }, {
37
- 'Content-Type': 'application/json'
38
- });
39
- const { stdout } = await testCommand(ListOpenApiCommand);
40
- expect(stdout).toContain('Title: Query API');
41
- expect(stdout).toContain('Description: Query documents and other content');
42
- expect(stdout).toContain('Slug: query');
43
- expect(stdout).toContain('Title: Mutate API');
44
- expect(stdout).toContain('Description: Create, update and delete documents');
45
- expect(stdout).toContain('Slug: mutate');
46
- });
47
- test('displays specs in JSON format with --json flag', async ()=>{
48
- nock('https://www.sanity.io').get('/docs/api/openapi').reply(200, {
49
- specs: mockSpecs
50
- }, {
51
- 'Content-Type': 'application/json'
52
- });
53
- const { stdout } = await testCommand(ListOpenApiCommand, [
54
- '--json'
55
- ]);
56
- expect(stdout).toContain(JSON.stringify(mockSpecs, null, 2));
57
- });
58
- test('opens web browser with --web flag', async ()=>{
59
- const { stdout } = await testCommand(ListOpenApiCommand, [
60
- '--web'
61
- ]);
62
- expect(stdout).toContain('Opening https://www.sanity.io/docs/http-reference');
63
- expect(open).toHaveBeenCalledWith('https://www.sanity.io/docs/http-reference');
64
- });
65
- test('handles empty specs list', async ()=>{
66
- nock('https://www.sanity.io').get('/docs/api/openapi').reply(200, {
67
- specs: []
68
- }, {
69
- 'Content-Type': 'application/json'
70
- });
71
- const { stdout } = await testCommand(ListOpenApiCommand);
72
- expect(stdout).toContain('No OpenAPI specifications available.');
73
- });
74
- test('handles missing specs property', async ()=>{
75
- nock('https://www.sanity.io').get('/docs/api/openapi').reply(200, {}, {
76
- 'Content-Type': 'application/json'
77
- });
78
- const { stdout } = await testCommand(ListOpenApiCommand);
79
- expect(stdout).toContain('No OpenAPI specifications available.');
80
- });
81
- test('handles specs without description', async ()=>{
82
- const specsWithoutDesc = [
83
- {
84
- slug: 'test',
85
- title: 'Test API'
86
- }
87
- ];
88
- nock('https://www.sanity.io').get('/docs/api/openapi').reply(200, {
89
- specs: specsWithoutDesc
90
- }, {
91
- 'Content-Type': 'application/json'
92
- });
93
- const { stdout } = await testCommand(ListOpenApiCommand);
94
- expect(stdout).toContain('Title: Test API');
95
- expect(stdout).not.toContain(' ');
96
- });
97
- test('handles API server error', async ()=>{
98
- nock('https://www.sanity.io').get('/docs/api/openapi').reply(500, 'Server Error');
99
- const { error } = await testCommand(ListOpenApiCommand);
100
- expect(error).toBeInstanceOf(Error);
101
- expect(error?.message).toContain('The OpenAPI service is currently unavailable. Please try again later.');
102
- expect(error?.oclif?.exit).toBe(1);
103
- });
104
- test('handles network error', async ()=>{
105
- nock('https://www.sanity.io').get('/docs/api/openapi').replyWithError('Network error');
106
- const { error } = await testCommand(ListOpenApiCommand);
107
- expect(error).toBeInstanceOf(Error);
108
- expect(error?.message).toContain('The OpenAPI service is currently unavailable. Please try again later.');
109
- expect(error?.oclif?.exit).toBe(1);
110
- });
111
- });
112
-
113
- //# sourceMappingURL=list.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/openapi/__tests__/list.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport open from 'open'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {ListOpenApiCommand} from '../list.js'\n\nconst mockSpecs = [\n {\n description: 'Query documents and other content',\n slug: 'query',\n title: 'Query API',\n },\n {\n description: 'Create, update and delete documents',\n slug: 'mutate',\n title: 'Mutate API',\n },\n]\n\ndescribe('#openapi:list', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['openapi list', '--help'])\n\n expect(stdout).toContain('List all available OpenAPI specifications')\n })\n\n test('displays OpenAPI specs correctly', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi')\n .reply(200, {specs: mockSpecs}, {'Content-Type': 'application/json'})\n\n const {stdout} = await testCommand(ListOpenApiCommand)\n\n expect(stdout).toContain('Title: Query API')\n expect(stdout).toContain('Description: Query documents and other content')\n expect(stdout).toContain('Slug: query')\n expect(stdout).toContain('Title: Mutate API')\n expect(stdout).toContain('Description: Create, update and delete documents')\n expect(stdout).toContain('Slug: mutate')\n })\n\n test('displays specs in JSON format with --json flag', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi')\n .reply(200, {specs: mockSpecs}, {'Content-Type': 'application/json'})\n\n const {stdout} = await testCommand(ListOpenApiCommand, ['--json'])\n\n expect(stdout).toContain(JSON.stringify(mockSpecs, null, 2))\n })\n\n test('opens web browser with --web flag', async () => {\n const {stdout} = await testCommand(ListOpenApiCommand, ['--web'])\n\n expect(stdout).toContain('Opening https://www.sanity.io/docs/http-reference')\n expect(open).toHaveBeenCalledWith('https://www.sanity.io/docs/http-reference')\n })\n\n test('handles empty specs list', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi')\n .reply(200, {specs: []}, {'Content-Type': 'application/json'})\n\n const {stdout} = await testCommand(ListOpenApiCommand)\n\n expect(stdout).toContain('No OpenAPI specifications available.')\n })\n\n test('handles missing specs property', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/openapi')\n .reply(200, {}, {'Content-Type': 'application/json'})\n\n const {stdout} = await testCommand(ListOpenApiCommand)\n\n expect(stdout).toContain('No OpenAPI specifications available.')\n })\n\n test('handles specs without description', async () => {\n const specsWithoutDesc = [{slug: 'test', title: 'Test API'}]\n nock('https://www.sanity.io')\n .get('/docs/api/openapi')\n .reply(200, {specs: specsWithoutDesc}, {'Content-Type': 'application/json'})\n\n const {stdout} = await testCommand(ListOpenApiCommand)\n\n expect(stdout).toContain('Title: Test API')\n expect(stdout).not.toContain(' ')\n })\n\n test('handles API server error', async () => {\n nock('https://www.sanity.io').get('/docs/api/openapi').reply(500, 'Server Error')\n\n const {error} = await testCommand(ListOpenApiCommand)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(\n 'The OpenAPI service is currently unavailable. Please try again later.',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles network error', async () => {\n nock('https://www.sanity.io').get('/docs/api/openapi').replyWithError('Network error')\n\n const {error} = await testCommand(ListOpenApiCommand)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(\n 'The OpenAPI service is currently unavailable. Please try again later.',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","testCommand","nock","open","afterEach","describe","expect","test","vi","ListOpenApiCommand","mockSpecs","description","slug","title","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toContain","get","reply","specs","JSON","stringify","toHaveBeenCalledWith","specsWithoutDesc","not","error","toBeInstanceOf","Error","message","oclif","exit","toBe","replyWithError"],"mappings":"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"}