@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,240 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { mockApi, testCommand } from '@sanity/cli-test';
3
- import nock from 'nock';
4
- import { afterEach, describe, expect, test, vi } from 'vitest';
5
- import { GRAPHQL_API_VERSION } from '../../../services/graphql.js';
6
- import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
7
- import { List } from '../list.js';
8
- const testProjectId = 'test-project';
9
- const defaultMocks = {
10
- cliConfig: {
11
- api: {
12
- projectId: testProjectId
13
- }
14
- },
15
- projectRoot: {
16
- directory: '/test/path',
17
- path: '/test/path/sanity.config.ts',
18
- type: 'studio'
19
- },
20
- token: 'test-token'
21
- };
22
- describe('#list', ()=>{
23
- afterEach(()=>{
24
- vi.clearAllMocks();
25
- const pending = nock.pendingMocks();
26
- nock.cleanAll();
27
- expect(pending, 'pending mocks').toEqual([]);
28
- });
29
- test('--help works', async ()=>{
30
- const { stdout } = await runCommand([
31
- 'graphql list',
32
- '--help'
33
- ]);
34
- expect(stdout).toMatchInlineSnapshot(`
35
- "List all GraphQL endpoints deployed for this project
36
-
37
- USAGE
38
- $ sanity graphql list
39
-
40
- DESCRIPTION
41
- List all GraphQL endpoints deployed for this project
42
-
43
- EXAMPLES
44
- List GraphQL endpoints for the current project
45
-
46
- $ sanity graphql list
47
-
48
- "
49
- `);
50
- });
51
- test('displays GraphQL endpoints correctly with multiple endpoints', async ()=>{
52
- mockApi({
53
- apiHost: `https://${testProjectId}.api.sanity.io`,
54
- apiVersion: GRAPHQL_API_VERSION,
55
- uri: '/apis/graphql'
56
- }).reply(200, [
57
- {
58
- dataset: 'production',
59
- generation: 'gen2',
60
- playgroundEnabled: true,
61
- projectId: testProjectId,
62
- tag: 'default'
63
- },
64
- {
65
- dataset: 'staging',
66
- generation: 'gen3',
67
- playgroundEnabled: false,
68
- projectId: testProjectId,
69
- tag: 'latest'
70
- }
71
- ]);
72
- const { stdout } = await testCommand(List, [], {
73
- mocks: defaultMocks
74
- });
75
- expect(stdout).toMatchInlineSnapshot(`
76
- "Here are the GraphQL endpoints deployed for this project:
77
- 1. Dataset: production
78
- Tag: default
79
- Generation: gen2
80
- Playground: true
81
- URL: https://test-project.api.sanity.io/v2025-09-19/graphql/production/default
82
-
83
- 2. Dataset: staging
84
- Tag: latest
85
- Generation: gen3
86
- Playground: false
87
- URL: https://test-project.api.sanity.io/v2025-09-19/graphql/staging/latest
88
-
89
- "
90
- `);
91
- });
92
- test('displays single GraphQL endpoint correctly', async ()=>{
93
- mockApi({
94
- apiHost: `https://${testProjectId}.api.sanity.io`,
95
- apiVersion: GRAPHQL_API_VERSION,
96
- uri: '/apis/graphql'
97
- }).reply(200, [
98
- {
99
- dataset: 'production',
100
- generation: 'gen2',
101
- playgroundEnabled: true,
102
- projectId: testProjectId,
103
- tag: 'default'
104
- }
105
- ]);
106
- const { stdout } = await testCommand(List, [], {
107
- mocks: defaultMocks
108
- });
109
- expect(stdout).toMatchInlineSnapshot(`
110
- "Here are the GraphQL endpoints deployed for this project:
111
- 1. Dataset: production
112
- Tag: default
113
- Generation: gen2
114
- Playground: true
115
- URL: https://test-project.api.sanity.io/v2025-09-19/graphql/production/default
116
-
117
- "
118
- `);
119
- });
120
- test('handles empty GraphQL endpoints list', async ()=>{
121
- mockApi({
122
- apiHost: `https://${testProjectId}.api.sanity.io`,
123
- apiVersion: GRAPHQL_API_VERSION,
124
- uri: '/apis/graphql'
125
- }).reply(200, []);
126
- const { stdout } = await testCommand(List, [], {
127
- mocks: defaultMocks
128
- });
129
- expect(stdout).toBe("This project doesn't have any GraphQL endpoints deployed.\n");
130
- });
131
- test('handles null/undefined GraphQL endpoints response', async ()=>{
132
- mockApi({
133
- apiHost: `https://${testProjectId}.api.sanity.io`,
134
- apiVersion: GRAPHQL_API_VERSION,
135
- uri: '/apis/graphql'
136
- }).reply(200, undefined);
137
- const { stdout } = await testCommand(List, [], {
138
- mocks: defaultMocks
139
- });
140
- expect(stdout).toBe("This project doesn't have any GraphQL endpoints deployed.\n");
141
- });
142
- test.each([
143
- [
144
- 404,
145
- 'Project not found'
146
- ],
147
- [
148
- 500,
149
- 'Internal Server Error'
150
- ]
151
- ])('displays error when API request fails with %i status and message "%s"', async (status, message)=>{
152
- mockApi({
153
- apiHost: `https://${testProjectId}.api.sanity.io`,
154
- apiVersion: GRAPHQL_API_VERSION,
155
- uri: '/apis/graphql'
156
- }).reply(status, {
157
- message
158
- });
159
- const { error } = await testCommand(List, [], {
160
- mocks: defaultMocks
161
- });
162
- expect(error).toBeInstanceOf(Error);
163
- expect(error?.message).toContain('GraphQL endpoints list retrieval failed');
164
- expect(error?.message).toContain(message);
165
- expect(error?.oclif?.exit).toBe(1);
166
- });
167
- test('throws error when project ID is not defined', async ()=>{
168
- const { error } = await testCommand(List, [], {
169
- mocks: {
170
- ...defaultMocks,
171
- cliConfig: {
172
- api: {
173
- projectId: undefined
174
- }
175
- }
176
- }
177
- });
178
- expect(error).toBeInstanceOf(Error);
179
- expect(error?.message).toEqual(NO_PROJECT_ID);
180
- expect(error?.oclif?.exit).toBe(1);
181
- });
182
- test('displays endpoints correctly when dataset names contain special characters', async ()=>{
183
- mockApi({
184
- apiHost: `https://${testProjectId}.api.sanity.io`,
185
- apiVersion: GRAPHQL_API_VERSION,
186
- uri: '/apis/graphql'
187
- }).reply(200, [
188
- {
189
- dataset: 'my-dataset-123',
190
- generation: 'gen2',
191
- playgroundEnabled: true,
192
- projectId: testProjectId,
193
- tag: 'v1.0.0'
194
- },
195
- {
196
- dataset: 'test_dataset',
197
- generation: 'gen3',
198
- playgroundEnabled: false,
199
- projectId: testProjectId,
200
- tag: 'beta-2'
201
- }
202
- ]);
203
- const { stdout } = await testCommand(List, [], {
204
- mocks: defaultMocks
205
- });
206
- expect(stdout).toContain('Dataset: my-dataset-123');
207
- expect(stdout).toContain('Tag: v1.0.0');
208
- expect(stdout).toContain('Dataset: test_dataset');
209
- expect(stdout).toContain('Tag: beta-2');
210
- });
211
- test('displays endpoints with various generation values correctly', async ()=>{
212
- mockApi({
213
- apiHost: `https://${testProjectId}.api.sanity.io`,
214
- apiVersion: GRAPHQL_API_VERSION,
215
- uri: '/apis/graphql'
216
- }).reply(200, [
217
- {
218
- dataset: 'production',
219
- generation: 'gen1',
220
- playgroundEnabled: true,
221
- projectId: testProjectId,
222
- tag: 'default'
223
- },
224
- {
225
- dataset: 'staging',
226
- generation: 'gen3',
227
- playgroundEnabled: false,
228
- projectId: testProjectId,
229
- tag: 'default'
230
- }
231
- ]);
232
- const { stdout } = await testCommand(List, [], {
233
- mocks: defaultMocks
234
- });
235
- expect(stdout).toContain('Generation: gen1');
236
- expect(stdout).toContain('Generation: gen3');
237
- });
238
- });
239
-
240
- //# sourceMappingURL=list.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/graphql/__tests__/list.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {GRAPHQL_API_VERSION} from '../../../services/graphql.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {List} from '../list.js'\n\nconst testProjectId = 'test-project'\n\nconst defaultMocks = {\n cliConfig: {api: {projectId: testProjectId}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\ndescribe('#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(['graphql list', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"List all GraphQL endpoints deployed for this project\n\n USAGE\n $ sanity graphql list\n\n DESCRIPTION\n List all GraphQL endpoints deployed for this project\n\n EXAMPLES\n List GraphQL endpoints for the current project\n\n $ sanity graphql list\n\n \"\n `)\n })\n\n test('displays GraphQL endpoints correctly with multiple endpoints', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'production',\n generation: 'gen2',\n playgroundEnabled: true,\n projectId: testProjectId,\n tag: 'default',\n },\n {\n dataset: 'staging',\n generation: 'gen3',\n playgroundEnabled: false,\n projectId: testProjectId,\n tag: 'latest',\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Here are the GraphQL endpoints deployed for this project:\n 1. Dataset: production\n Tag: default\n Generation: gen2\n Playground: true\n URL: https://test-project.api.sanity.io/v2025-09-19/graphql/production/default\n\n 2. Dataset: staging\n Tag: latest\n Generation: gen3\n Playground: false\n URL: https://test-project.api.sanity.io/v2025-09-19/graphql/staging/latest\n\n \"\n `)\n })\n\n test('displays single GraphQL endpoint correctly', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'production',\n generation: 'gen2',\n playgroundEnabled: true,\n projectId: testProjectId,\n tag: 'default',\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Here are the GraphQL endpoints deployed for this project:\n 1. Dataset: production\n Tag: default\n Generation: gen2\n Playground: true\n URL: https://test-project.api.sanity.io/v2025-09-19/graphql/production/default\n\n \"\n `)\n })\n\n test('handles empty GraphQL endpoints list', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toBe(\"This project doesn't have any GraphQL endpoints deployed.\\n\")\n })\n\n test('handles null/undefined GraphQL endpoints response', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, undefined)\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toBe(\"This project doesn't have any GraphQL endpoints deployed.\\n\")\n })\n\n test.each([\n [404, 'Project not found'],\n [500, 'Internal Server Error'],\n ])(\n 'displays error when API request fails with %i status and message \"%s\"',\n async (status, message) => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(status, {message})\n\n const {error} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('GraphQL endpoints list retrieval failed')\n expect(error?.message).toContain(message)\n expect(error?.oclif?.exit).toBe(1)\n },\n )\n\n test('throws error when project ID is not defined', async () => {\n const {error} = await testCommand(List, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('displays endpoints correctly when dataset names contain special characters', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'my-dataset-123',\n generation: 'gen2',\n playgroundEnabled: true,\n projectId: testProjectId,\n tag: 'v1.0.0',\n },\n {\n dataset: 'test_dataset',\n generation: 'gen3',\n playgroundEnabled: false,\n projectId: testProjectId,\n tag: 'beta-2',\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Dataset: my-dataset-123')\n expect(stdout).toContain('Tag: v1.0.0')\n expect(stdout).toContain('Dataset: test_dataset')\n expect(stdout).toContain('Tag: beta-2')\n })\n\n test('displays endpoints with various generation values correctly', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: GRAPHQL_API_VERSION,\n uri: '/apis/graphql',\n }).reply(200, [\n {\n dataset: 'production',\n generation: 'gen1',\n playgroundEnabled: true,\n projectId: testProjectId,\n tag: 'default',\n },\n {\n dataset: 'staging',\n generation: 'gen3',\n playgroundEnabled: false,\n projectId: testProjectId,\n tag: 'default',\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Generation: gen1')\n expect(stdout).toContain('Generation: gen3')\n })\n})\n"],"names":["runCommand","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","GRAPHQL_API_VERSION","NO_PROJECT_ID","List","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","apiHost","apiVersion","uri","reply","dataset","generation","playgroundEnabled","tag","mocks","toBe","undefined","each","status","message","error","toBeInstanceOf","Error","toContain","oclif","exit"],"mappings":"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"}
@@ -1,410 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { mockApi, testCommand } from '@sanity/cli-test';
3
- import nock from 'nock';
4
- import { createSchema } from 'sanity';
5
- import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
6
- import { getGraphQLAPIs } from '../../../actions/graphql/getGraphQLAPIs.js';
7
- import { GRAPHQL_API_VERSION } from '../../../services/graphql.js';
8
- import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
9
- import { Undeploy } from '../undeploy.js';
10
- // Mock getGraphQLAPIs
11
- vi.mock('../../../actions/graphql/getGraphQLAPIs.js', ()=>({
12
- getGraphQLAPIs: vi.fn()
13
- }));
14
- const testProjectId = 'test-project';
15
- const defaultMocks = {
16
- cliConfig: {
17
- api: {
18
- dataset: 'production',
19
- projectId: testProjectId
20
- }
21
- },
22
- projectRoot: {
23
- directory: '/test/path',
24
- path: '/test/path/sanity.config.ts',
25
- type: 'studio'
26
- },
27
- token: 'test-token'
28
- };
29
- const mockGetGraphQLAPIs = vi.mocked(getGraphQLAPIs);
30
- const mockConfirm = vi.hoisted(()=>vi.fn());
31
- const schema = createSchema({
32
- name: 'default',
33
- types: []
34
- });
35
- vi.mock('@sanity/cli-core/ux', async ()=>{
36
- const actual = await vi.importActual('@sanity/cli-core/ux');
37
- return {
38
- ...actual,
39
- confirm: mockConfirm
40
- };
41
- });
42
- describe('graphql undeploy', ()=>{
43
- beforeEach(()=>{
44
- vi.clearAllMocks();
45
- });
46
- afterEach(()=>{
47
- const pending = nock.pendingMocks();
48
- nock.cleanAll();
49
- expect(pending, 'pending mocks').toEqual([]);
50
- });
51
- test('--help works', async ()=>{
52
- const { stdout } = await runCommand([
53
- 'graphql undeploy',
54
- '--help'
55
- ]);
56
- expect(stdout).toMatchInlineSnapshot(`
57
- "Remove a deployed GraphQL API
58
-
59
- USAGE
60
- $ sanity graphql undeploy [--api <value>] [--dataset <value>] [--force]
61
- [--project <value>] [--tag <value>]
62
-
63
- FLAGS
64
- --api=<value> Undeploy API with this ID (project, dataset and tag flags
65
- take precedence)
66
- --dataset=<value> Dataset to undeploy GraphQL API from
67
- --force Skip confirmation prompt
68
- --project=<value> Project ID to delete GraphQL API for
69
- --tag=<value> [default: default] Tag to undeploy GraphQL API from
70
-
71
- DESCRIPTION
72
- Remove a deployed GraphQL API
73
-
74
- EXAMPLES
75
- Undeploy GraphQL API for current project and dataset
76
-
77
- $ sanity graphql undeploy
78
-
79
- Undeploy API with ID "ios"
80
-
81
- $ sanity graphql undeploy --api ios
82
-
83
- Undeploy GraphQL API for staging dataset
84
-
85
- $ sanity graphql undeploy --dataset staging
86
-
87
- Undeploy GraphQL API for staging dataset with "next" tag
88
-
89
- $ sanity graphql undeploy --dataset staging --tag next
90
-
91
- Undeploy GraphQL API without confirmation prompt
92
-
93
- $ sanity graphql undeploy --force
94
-
95
- "
96
- `);
97
- });
98
- test('successfully undeploys GraphQL API with default tag', async ()=>{
99
- mockConfirm.mockResolvedValueOnce(true);
100
- mockApi({
101
- apiHost: 'https://test-project.api.sanity.io',
102
- apiVersion: GRAPHQL_API_VERSION,
103
- method: 'delete',
104
- uri: '/apis/graphql/production/default'
105
- }).reply(204);
106
- const { stdout } = await testCommand(Undeploy, [], {
107
- mocks: defaultMocks
108
- });
109
- expect(mockConfirm).toHaveBeenCalledWith({
110
- default: false,
111
- message: 'Are you absolutely sure you want to delete the current GraphQL API connected to the "production" dataset in project test-project?'
112
- });
113
- expect(stdout).toBe('GraphQL API deleted\n');
114
- });
115
- test('successfully undeploys GraphQL API with custom tag', async ()=>{
116
- mockConfirm.mockResolvedValueOnce(true);
117
- mockApi({
118
- apiHost: 'https://test-project.api.sanity.io',
119
- apiVersion: GRAPHQL_API_VERSION,
120
- method: 'delete',
121
- uri: '/apis/graphql/production/beta'
122
- }).reply(204);
123
- const { stdout } = await testCommand(Undeploy, [
124
- '--tag',
125
- 'beta'
126
- ], {
127
- mocks: defaultMocks
128
- });
129
- expect(mockConfirm).toHaveBeenCalledWith({
130
- default: false,
131
- message: 'Are you absolutely sure you want to delete the GraphQL API connected to the "production" dataset in project test-project, tagged "beta"?'
132
- });
133
- expect(stdout).toBe('GraphQL API deleted\n');
134
- });
135
- test('successfully undeploys with --dataset flag', async ()=>{
136
- mockConfirm.mockResolvedValueOnce(true);
137
- mockApi({
138
- apiHost: 'https://test-project.api.sanity.io',
139
- apiVersion: GRAPHQL_API_VERSION,
140
- method: 'delete',
141
- uri: '/apis/graphql/staging/default'
142
- }).reply(204);
143
- const { stdout } = await testCommand(Undeploy, [
144
- '--dataset',
145
- 'staging'
146
- ], {
147
- mocks: defaultMocks
148
- });
149
- expect(stdout).toBe('GraphQL API deleted\n');
150
- });
151
- test('uses --project flag when specified', async ()=>{
152
- mockConfirm.mockResolvedValueOnce(true);
153
- mockApi({
154
- apiHost: 'https://custom-project.api.sanity.io',
155
- apiVersion: GRAPHQL_API_VERSION,
156
- method: 'delete',
157
- uri: '/apis/graphql/production/default'
158
- }).reply(204);
159
- const { stdout } = await testCommand(Undeploy, [
160
- '--project',
161
- 'custom-project',
162
- '--force'
163
- ], {
164
- mocks: defaultMocks
165
- });
166
- expect(stdout).toBe('GraphQL API deleted\n');
167
- });
168
- test('successfully undeploys with all flags combined', async ()=>{
169
- mockConfirm.mockResolvedValue(true);
170
- mockApi({
171
- apiHost: 'https://custom-project.api.sanity.io',
172
- apiVersion: GRAPHQL_API_VERSION,
173
- method: 'delete',
174
- uri: '/apis/graphql/staging/experimental'
175
- }).reply(204);
176
- const { stdout } = await testCommand(Undeploy, [
177
- '--project',
178
- 'custom-project',
179
- '--dataset',
180
- 'staging',
181
- '--tag',
182
- 'experimental'
183
- ], {
184
- mocks: defaultMocks
185
- });
186
- expect(stdout).toBe('GraphQL API deleted\n');
187
- expect(mockConfirm).toHaveBeenCalledWith({
188
- default: false,
189
- message: 'Are you absolutely sure you want to delete the GraphQL API connected to the "staging" dataset in project custom-project, tagged "experimental"?'
190
- });
191
- });
192
- test('successfully undeploys with --force flag (skips confirmation)', async ()=>{
193
- mockApi({
194
- apiHost: 'https://test-project.api.sanity.io',
195
- apiVersion: GRAPHQL_API_VERSION,
196
- method: 'delete',
197
- uri: '/apis/graphql/production/default'
198
- }).reply(204);
199
- const { stdout } = await testCommand(Undeploy, [
200
- '--force'
201
- ], {
202
- mocks: defaultMocks
203
- });
204
- expect(stdout).toBe('GraphQL API deleted\n');
205
- expect(mockConfirm).not.toHaveBeenCalled();
206
- });
207
- test('cancels deletion when user declines confirmation', async ()=>{
208
- mockConfirm.mockResolvedValue(false);
209
- const { stdout } = await testCommand(Undeploy, [], {
210
- mocks: defaultMocks
211
- });
212
- expect(stdout).toBe('Operation cancelled\n');
213
- expect(nock.pendingMocks()).toHaveLength(0); // No API call should be made
214
- });
215
- test('successfully undeploys with --api flag', async ()=>{
216
- mockConfirm.mockResolvedValue(true);
217
- mockGetGraphQLAPIs.mockResolvedValueOnce([
218
- {
219
- dataset: 'ios-dataset',
220
- id: 'ios',
221
- projectId: 'test-project',
222
- schema,
223
- tag: 'mobile'
224
- }
225
- ]);
226
- mockApi({
227
- apiHost: 'https://test-project.api.sanity.io',
228
- apiVersion: GRAPHQL_API_VERSION,
229
- method: 'delete',
230
- uri: '/apis/graphql/ios-dataset/mobile'
231
- }).reply(204);
232
- const { stdout } = await testCommand(Undeploy, [
233
- '--api',
234
- 'ios'
235
- ], {
236
- mocks: defaultMocks
237
- });
238
- expect(stdout).toBe('GraphQL API deleted\n');
239
- expect(mockGetGraphQLAPIs).toHaveBeenCalledWith(process.cwd());
240
- });
241
- test('throws error when --api flag references non-existent API', async ()=>{
242
- mockGetGraphQLAPIs.mockResolvedValueOnce([
243
- {
244
- dataset: 'production',
245
- id: 'web',
246
- projectId: 'test-project',
247
- schema,
248
- tag: 'default'
249
- }
250
- ]);
251
- const { error } = await testCommand(Undeploy, [
252
- '--api',
253
- 'ios'
254
- ], {
255
- mocks: defaultMocks
256
- });
257
- expect(error).toBeInstanceOf(Error);
258
- expect(error?.message).toContain('GraphQL API "ios" not found');
259
- expect(error?.oclif?.exit).toBe(1);
260
- });
261
- test('warns when both --api and --dataset are specified', async ()=>{
262
- mockConfirm.mockResolvedValue(true);
263
- mockGetGraphQLAPIs.mockResolvedValueOnce([
264
- {
265
- dataset: 'ios-dataset',
266
- id: 'ios',
267
- projectId: 'test-project',
268
- schema,
269
- tag: 'default'
270
- }
271
- ]);
272
- mockApi({
273
- apiHost: 'https://test-project.api.sanity.io',
274
- apiVersion: GRAPHQL_API_VERSION,
275
- method: 'delete',
276
- uri: '/apis/graphql/staging/default'
277
- }).reply(204);
278
- const { stderr, stdout } = await testCommand(Undeploy, [
279
- '--api',
280
- 'ios',
281
- '--dataset',
282
- 'staging'
283
- ], {
284
- mocks: defaultMocks
285
- });
286
- expect(stdout).toBe('GraphQL API deleted\n');
287
- expect(stderr).toContain('Both --api and --dataset specified, using --dataset staging');
288
- });
289
- test('warns when both --api and --project are specified', async ()=>{
290
- mockConfirm.mockResolvedValue(true);
291
- mockGetGraphQLAPIs.mockResolvedValueOnce([
292
- {
293
- dataset: 'production',
294
- id: 'ios',
295
- projectId: 'ios-project',
296
- schema,
297
- tag: 'default'
298
- }
299
- ]);
300
- mockApi({
301
- apiHost: 'https://test-project.api.sanity.io',
302
- apiVersion: GRAPHQL_API_VERSION,
303
- method: 'delete',
304
- uri: '/apis/graphql/production/default'
305
- }).reply(204);
306
- const { stderr, stdout } = await testCommand(Undeploy, [
307
- '--api',
308
- 'ios',
309
- '--project',
310
- 'test-project'
311
- ], {
312
- mocks: defaultMocks
313
- });
314
- expect(stdout).toBe('GraphQL API deleted\n');
315
- expect(stderr).toContain('Both --api and --project specified, using --project test-project');
316
- });
317
- test('warns when both --api and --tag are specified', async ()=>{
318
- mockConfirm.mockResolvedValue(true);
319
- mockGetGraphQLAPIs.mockResolvedValueOnce([
320
- {
321
- dataset: 'production',
322
- id: 'ios',
323
- projectId: 'test-project',
324
- schema,
325
- tag: 'mobile'
326
- }
327
- ]);
328
- mockApi({
329
- apiHost: 'https://test-project.api.sanity.io',
330
- apiVersion: GRAPHQL_API_VERSION,
331
- method: 'delete',
332
- uri: '/apis/graphql/production/beta'
333
- }).reply(204);
334
- const { stderr, stdout } = await testCommand(Undeploy, [
335
- '--api',
336
- 'ios',
337
- '--tag',
338
- 'beta'
339
- ], {
340
- mocks: defaultMocks
341
- });
342
- expect(stdout).toBe('GraphQL API deleted\n');
343
- expect(stderr).toContain('Both --api and --tag specified, using --tag beta');
344
- });
345
- test('throws error when project ID is not defined', async ()=>{
346
- const { error } = await testCommand(Undeploy, [
347
- '--force'
348
- ], {
349
- mocks: {
350
- ...defaultMocks,
351
- cliConfig: {
352
- api: {
353
- dataset: 'production',
354
- projectId: undefined
355
- }
356
- }
357
- }
358
- });
359
- expect(error).toBeInstanceOf(Error);
360
- expect(error?.message).toEqual(NO_PROJECT_ID);
361
- expect(error?.oclif?.exit).toBe(1);
362
- });
363
- test('throws error when dataset is not defined and not in config', async ()=>{
364
- const { error } = await testCommand(Undeploy, [
365
- '--force'
366
- ], {
367
- mocks: {
368
- ...defaultMocks,
369
- cliConfig: {
370
- api: {
371
- dataset: undefined,
372
- projectId: testProjectId
373
- }
374
- }
375
- }
376
- });
377
- expect(error).toBeInstanceOf(Error);
378
- expect(error?.message).toContain('Dataset is required. Specify it with --dataset or configure it in your project.');
379
- expect(error?.oclif?.exit).toBe(1);
380
- });
381
- test('handles API deletion error', async ()=>{
382
- mockConfirm.mockResolvedValue(true);
383
- mockApi({
384
- apiHost: 'https://test-project.api.sanity.io',
385
- apiVersion: GRAPHQL_API_VERSION,
386
- method: 'delete',
387
- uri: '/apis/graphql/production/default'
388
- }).reply(404, {
389
- message: 'GraphQL API not found'
390
- });
391
- const { error } = await testCommand(Undeploy, [], {
392
- mocks: defaultMocks
393
- });
394
- expect(error).toBeInstanceOf(Error);
395
- expect(error?.message).toContain('GraphQL API deletion failed');
396
- expect(error?.message).toContain('GraphQL API not found');
397
- expect(error?.oclif?.exit).toBe(1);
398
- });
399
- test('handles user cancelling confirmation prompt', async ()=>{
400
- mockConfirm.mockRejectedValue(new Error('User cancelled'));
401
- const { error } = await testCommand(Undeploy, [], {
402
- mocks: defaultMocks
403
- });
404
- expect(error).toBeInstanceOf(Error);
405
- expect(error?.message).toBe('Operation cancelled');
406
- expect(error?.oclif?.exit).toBe(1);
407
- });
408
- });
409
-
410
- //# sourceMappingURL=undeploy.test.js.map