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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/README.md +2907 -109
  2. package/dist/actions/dataset/create.d.ts +49 -0
  3. package/dist/actions/dataset/create.js +48 -0
  4. package/dist/actions/dataset/create.js.map +1 -0
  5. package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
  6. package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
  7. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
  8. package/dist/actions/debug/gatherDebugInfo.js +15 -21
  9. package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
  10. package/dist/actions/debug/types.d.ts +0 -2
  11. package/dist/actions/debug/types.js.map +1 -1
  12. package/dist/actions/deploy/deployApp.js +13 -0
  13. package/dist/actions/deploy/deployApp.js.map +1 -1
  14. package/dist/actions/init/remoteTemplate.js +1 -1
  15. package/dist/actions/init/remoteTemplate.js.map +1 -1
  16. package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
  17. package/dist/actions/manifest/extractAppManifest.js +51 -0
  18. package/dist/actions/manifest/extractAppManifest.js.map +1 -0
  19. package/dist/actions/manifest/extractManifest.js +1 -1
  20. package/dist/actions/manifest/extractManifest.js.map +1 -1
  21. package/dist/actions/manifest/types.d.ts +6 -1
  22. package/dist/actions/manifest/types.js.map +1 -1
  23. package/dist/actions/media/importAspects.js +2 -1
  24. package/dist/actions/media/importAspects.js.map +1 -1
  25. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +1 -1
  26. package/dist/actions/telemetry/resolveConsent.d.ts +1 -9
  27. package/dist/actions/telemetry/resolveConsent.js +2 -2
  28. package/dist/actions/telemetry/resolveConsent.js.map +1 -1
  29. package/dist/actions/telemetry/setConsent.d.ts +1 -4
  30. package/dist/actions/telemetry/setConsent.js +4 -8
  31. package/dist/actions/telemetry/setConsent.js.map +1 -1
  32. package/dist/commands/dataset/create.d.ts +0 -2
  33. package/dist/commands/dataset/create.js +8 -54
  34. package/dist/commands/dataset/create.js.map +1 -1
  35. package/dist/commands/debug.js +5 -9
  36. package/dist/commands/debug.js.map +1 -1
  37. package/dist/commands/init.d.ts +6 -1
  38. package/dist/commands/init.js +358 -20
  39. package/dist/commands/init.js.map +1 -1
  40. package/dist/commands/manifest/extract.js +7 -8
  41. package/dist/commands/manifest/extract.js.map +1 -1
  42. package/dist/commands/telemetry/disable.js +0 -1
  43. package/dist/commands/telemetry/disable.js.map +1 -1
  44. package/dist/commands/telemetry/enable.js +0 -1
  45. package/dist/commands/telemetry/enable.js.map +1 -1
  46. package/dist/commands/telemetry/status.js +1 -3
  47. package/dist/commands/telemetry/status.js.map +1 -1
  48. package/dist/config/createCliConfig.d.ts +9 -0
  49. package/dist/hooks/prerun/flushTelemetry.worker.d.ts +2 -0
  50. package/dist/hooks/prerun/flushTelemetry.worker.js +22 -0
  51. package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -0
  52. package/dist/hooks/prerun/setupTelemetry.js +65 -1
  53. package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
  54. package/dist/prompts/init/promptForTypescript.d.ts +2 -0
  55. package/dist/prompts/init/promptForTypescript.js +15 -0
  56. package/dist/prompts/init/promptForTypescript.js.map +1 -0
  57. package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
  58. package/dist/prompts/promptForDatasetAclMode.js +27 -0
  59. package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
  60. package/dist/prompts/promptForDatasetName.d.ts +1 -1
  61. package/dist/prompts/promptForDatasetName.js +4 -1
  62. package/dist/prompts/promptForDatasetName.js.map +1 -1
  63. package/dist/services/organizations.d.ts +3 -1
  64. package/dist/services/organizations.js +2 -1
  65. package/dist/services/organizations.js.map +1 -1
  66. package/dist/services/telemetry.d.ts +2 -0
  67. package/dist/services/telemetry.js +20 -0
  68. package/dist/services/telemetry.js.map +1 -0
  69. package/dist/services/user.d.ts +5 -0
  70. package/dist/services/user.js +12 -1
  71. package/dist/services/user.js.map +1 -1
  72. package/dist/services/userApplications.d.ts +3 -1
  73. package/dist/services/userApplications.js +5 -1
  74. package/dist/services/userApplications.js.map +1 -1
  75. package/dist/telemetry/cli.telemetry.d.ts +20 -0
  76. package/dist/telemetry/cli.telemetry.js +8 -0
  77. package/dist/telemetry/cli.telemetry.js.map +1 -0
  78. package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +5 -0
  79. package/dist/telemetry/store/cleanupOldTelemetryFiles.js +30 -0
  80. package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +1 -0
  81. package/dist/telemetry/store/createTelemetryStore.d.ts +39 -0
  82. package/dist/telemetry/store/createTelemetryStore.js +95 -0
  83. package/dist/telemetry/store/createTelemetryStore.js.map +1 -0
  84. package/dist/telemetry/store/createTraceId.d.ts +10 -0
  85. package/dist/telemetry/store/createTraceId.js +10 -0
  86. package/dist/telemetry/store/createTraceId.js.map +1 -0
  87. package/dist/telemetry/store/debug.d.ts +5 -0
  88. package/dist/telemetry/store/debug.js +7 -0
  89. package/dist/telemetry/store/debug.js.map +1 -0
  90. package/dist/telemetry/store/findTelemetryFiles.d.ts +13 -0
  91. package/dist/telemetry/store/findTelemetryFiles.js +34 -0
  92. package/dist/telemetry/store/findTelemetryFiles.js.map +1 -0
  93. package/dist/telemetry/store/flushTelemetryFiles.d.ts +20 -0
  94. package/dist/telemetry/store/flushTelemetryFiles.js +107 -0
  95. package/dist/telemetry/store/flushTelemetryFiles.js.map +1 -0
  96. package/dist/telemetry/store/generateTelemetryFilePath.d.ts +17 -0
  97. package/dist/telemetry/store/generateTelemetryFilePath.js +30 -0
  98. package/dist/telemetry/store/generateTelemetryFilePath.js.map +1 -0
  99. package/dist/telemetry/store/getTelemetryBaseInfo.d.ts +27 -0
  100. package/dist/telemetry/store/getTelemetryBaseInfo.js +34 -0
  101. package/dist/telemetry/store/getTelemetryBaseInfo.js.map +1 -0
  102. package/dist/telemetry/store/logger.d.ts +6 -0
  103. package/dist/telemetry/store/logger.js +54 -0
  104. package/dist/telemetry/store/logger.js.map +1 -0
  105. package/dist/telemetry/store/trace.d.ts +6 -0
  106. package/dist/telemetry/store/trace.js +150 -0
  107. package/dist/telemetry/store/trace.js.map +1 -0
  108. package/dist/telemetry/utils/readNDJSON.d.ts +10 -0
  109. package/dist/telemetry/utils/readNDJSON.js +18 -0
  110. package/dist/telemetry/utils/readNDJSON.js.map +1 -0
  111. package/dist/util/detectRuntime.d.ts +8 -0
  112. package/dist/util/detectRuntime.js +20 -0
  113. package/dist/util/detectRuntime.js.map +1 -0
  114. package/dist/util/isStaging.d.ts +7 -0
  115. package/dist/util/isStaging.js +10 -0
  116. package/dist/util/isStaging.js.map +1 -0
  117. package/dist/util/parseArguments.d.ts +35 -0
  118. package/dist/util/parseArguments.js +42 -0
  119. package/dist/util/parseArguments.js.map +1 -0
  120. package/oclif.manifest.json +7 -1
  121. package/package.json +25 -18
  122. package/templates/app-quickstart/src/App.css +20 -0
  123. package/templates/app-quickstart/src/App.tsx +25 -0
  124. package/templates/app-quickstart/src/ExampleComponent.css +90 -0
  125. package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
  126. package/templates/app-sanity-ui/src/App.tsx +34 -0
  127. package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
  128. package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
  129. package/templates/blog/README.md +11 -0
  130. package/templates/blog/schemaTypes/author.js +50 -0
  131. package/templates/blog/schemaTypes/blockContent.js +67 -0
  132. package/templates/blog/schemaTypes/category.js +19 -0
  133. package/templates/blog/schemaTypes/index.js +6 -0
  134. package/templates/blog/schemaTypes/post.js +65 -0
  135. package/templates/blog/static/.gitkeep +1 -0
  136. package/templates/clean/README.md +9 -0
  137. package/templates/clean/schemaTypes/index.js +1 -0
  138. package/templates/clean/static/.gitkeep +1 -0
  139. package/templates/ecommerce/README.md +11 -0
  140. package/templates/ecommerce/plugins/.gitkeep +1 -0
  141. package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
  142. package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
  143. package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
  144. package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
  145. package/templates/ecommerce/schemaTypes/category.js +39 -0
  146. package/templates/ecommerce/schemaTypes/index.js +23 -0
  147. package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
  148. package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
  149. package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
  150. package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
  151. package/templates/ecommerce/schemaTypes/product.js +83 -0
  152. package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
  153. package/templates/ecommerce/schemaTypes/vendor.js +39 -0
  154. package/templates/ecommerce/static/.gitkeep +1 -0
  155. package/templates/get-started/README.md +9 -0
  156. package/templates/get-started/plugins/.gitkeep +1 -0
  157. package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
  158. package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
  159. package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
  160. package/templates/get-started/schemaTypes/index.ts +1 -0
  161. package/templates/get-started/static/.gitkeep +1 -0
  162. package/templates/moviedb/README.md +10 -0
  163. package/templates/moviedb/schemaTypes/blockContent.js +67 -0
  164. package/templates/moviedb/schemaTypes/castMember.js +37 -0
  165. package/templates/moviedb/schemaTypes/crewMember.js +52 -0
  166. package/templates/moviedb/schemaTypes/index.js +22 -0
  167. package/templates/moviedb/schemaTypes/movie.js +85 -0
  168. package/templates/moviedb/schemaTypes/person.js +37 -0
  169. package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
  170. package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
  171. package/templates/moviedb/schemaTypes/screening.js +81 -0
  172. package/templates/moviedb/static/.gitkeep +1 -0
  173. package/templates/quickstart/README.md +9 -0
  174. package/templates/quickstart/schemaTypes/index.js +1 -0
  175. package/templates/quickstart/static/.gitkeep +1 -0
  176. package/templates/shared/gitignore.txt +29 -0
  177. package/templates/shared/tsconfig.json +17 -0
  178. package/templates/shopify/README.md +85 -0
  179. package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
  180. package/templates/shopify/components/icons/Shopify.tsx +20 -0
  181. package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
  182. package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
  183. package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
  184. package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
  185. package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
  186. package/templates/shopify/components/media/ColorTheme.tsx +38 -0
  187. package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
  188. package/templates/shopify/components/studio/Navbar.tsx +29 -0
  189. package/templates/shopify/constants.ts +61 -0
  190. package/templates/shopify/docs/features.md +158 -0
  191. package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
  192. package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
  193. package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
  194. package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
  195. package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
  196. package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
  197. package/templates/shopify/schemaTypes/documents/page.ts +70 -0
  198. package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
  199. package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
  200. package/templates/shopify/schemaTypes/index.ts +108 -0
  201. package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
  202. package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
  203. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
  204. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
  205. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
  206. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
  207. package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
  208. package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
  209. package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
  210. package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
  211. package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
  212. package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
  213. package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
  214. package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
  215. package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
  216. package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
  217. package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
  218. package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
  219. package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
  220. package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
  221. package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
  222. package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
  223. package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
  224. package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
  225. package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
  226. package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
  227. package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
  228. package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
  229. package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
  230. package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
  231. package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
  232. package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
  233. package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
  234. package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
  235. package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
  236. package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
  237. package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
  238. package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
  239. package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
  240. package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
  241. package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
  242. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
  243. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
  244. package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
  245. package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
  246. package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
  247. package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
  248. package/templates/shopify/static/.gitkeep +1 -0
  249. package/templates/shopify/structure/collectionStructure.ts +9 -0
  250. package/templates/shopify/structure/colorThemeStructure.ts +9 -0
  251. package/templates/shopify/structure/homeStructure.ts +9 -0
  252. package/templates/shopify/structure/index.ts +57 -0
  253. package/templates/shopify/structure/pageStructure.ts +11 -0
  254. package/templates/shopify/structure/productStructure.ts +51 -0
  255. package/templates/shopify/structure/settingStructure.ts +9 -0
  256. package/templates/shopify/utils/blocksToText.ts +20 -0
  257. package/templates/shopify/utils/defineStructure.ts +11 -0
  258. package/templates/shopify/utils/getPriceRange.ts +24 -0
  259. package/templates/shopify/utils/shopifyUrls.ts +22 -0
  260. package/templates/shopify/utils/validateSlug.ts +18 -0
  261. package/templates/shopify-online-storefront/README.md +54 -0
  262. package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
  263. package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
  264. package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
  265. package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
  266. package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
  267. package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
  268. package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
  269. package/templates/shopify-online-storefront/constants.ts +18 -0
  270. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
  271. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
  272. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
  273. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
  274. package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
  275. package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
  276. package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
  277. package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
  278. package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
  279. package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
  280. package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
  281. package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
  282. package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
  283. package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
  284. package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
  285. package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
  286. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
  287. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
  288. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
  289. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
  290. package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
  291. package/templates/shopify-online-storefront/structure/index.ts +37 -0
  292. package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
  293. package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
  294. package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
  295. package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
  296. package/dist/actions/build/__tests__/buildApp.test.js +0 -367
  297. package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
  298. package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
  299. package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
  300. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
  301. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
  302. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
  303. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
  304. package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
  305. package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
  306. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
  307. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
  308. package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
  309. package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
  310. package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
  311. package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
  312. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
  313. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
  314. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
  315. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
  316. package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
  317. package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
  318. package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
  319. package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
  320. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
  321. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
  322. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
  323. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
  324. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
  325. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
  326. package/dist/actions/media/__tests__/importMedia.test.js +0 -182
  327. package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
  328. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
  329. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
  330. package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
  331. package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
  332. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
  333. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
  334. package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
  335. package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
  336. package/dist/commands/__tests__/blueprints.test.js +0 -54
  337. package/dist/commands/__tests__/blueprints.test.js.map +0 -1
  338. package/dist/commands/__tests__/build.test.js +0 -132
  339. package/dist/commands/__tests__/build.test.js.map +0 -1
  340. package/dist/commands/__tests__/codemod.test.js +0 -271
  341. package/dist/commands/__tests__/codemod.test.js.map +0 -1
  342. package/dist/commands/__tests__/debug.test.js +0 -590
  343. package/dist/commands/__tests__/debug.test.js.map +0 -1
  344. package/dist/commands/__tests__/deploy.test.js +0 -1945
  345. package/dist/commands/__tests__/deploy.test.js.map +0 -1
  346. package/dist/commands/__tests__/dev.test.js +0 -453
  347. package/dist/commands/__tests__/dev.test.js.map +0 -1
  348. package/dist/commands/__tests__/exec.test.js +0 -207
  349. package/dist/commands/__tests__/exec.test.js.map +0 -1
  350. package/dist/commands/__tests__/init/init.authentication.test.js +0 -73
  351. package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
  352. package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -195
  353. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
  354. package/dist/commands/__tests__/init/init.plan.test.js +0 -279
  355. package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
  356. package/dist/commands/__tests__/init/init.setup.test.js +0 -335
  357. package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
  358. package/dist/commands/__tests__/install.test.js +0 -282
  359. package/dist/commands/__tests__/install.test.js.map +0 -1
  360. package/dist/commands/__tests__/learn.test.js +0 -29
  361. package/dist/commands/__tests__/learn.test.js.map +0 -1
  362. package/dist/commands/__tests__/logout.test.js +0 -91
  363. package/dist/commands/__tests__/logout.test.js.map +0 -1
  364. package/dist/commands/__tests__/manage.test.js +0 -110
  365. package/dist/commands/__tests__/manage.test.js.map +0 -1
  366. package/dist/commands/__tests__/migration.test.js +0 -119
  367. package/dist/commands/__tests__/migration.test.js.map +0 -1
  368. package/dist/commands/__tests__/preview.test.js +0 -261
  369. package/dist/commands/__tests__/preview.test.js.map +0 -1
  370. package/dist/commands/__tests__/start.test.js +0 -253
  371. package/dist/commands/__tests__/start.test.js.map +0 -1
  372. package/dist/commands/__tests__/undeploy.test.js +0 -382
  373. package/dist/commands/__tests__/undeploy.test.js.map +0 -1
  374. package/dist/commands/__tests__/versions.test.js +0 -142
  375. package/dist/commands/__tests__/versions.test.js.map +0 -1
  376. package/dist/commands/backup/__tests__/disable.test.js +0 -204
  377. package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
  378. package/dist/commands/backup/__tests__/download.test.js +0 -768
  379. package/dist/commands/backup/__tests__/download.test.js.map +0 -1
  380. package/dist/commands/backup/__tests__/enable.test.js +0 -286
  381. package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
  382. package/dist/commands/backup/__tests__/list.test.js +0 -330
  383. package/dist/commands/backup/__tests__/list.test.js.map +0 -1
  384. package/dist/commands/cors/__tests__/add.test.js +0 -376
  385. package/dist/commands/cors/__tests__/add.test.js.map +0 -1
  386. package/dist/commands/cors/__tests__/delete.test.js +0 -308
  387. package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
  388. package/dist/commands/cors/__tests__/list.test.js +0 -241
  389. package/dist/commands/cors/__tests__/list.test.js.map +0 -1
  390. package/dist/commands/dataset/__tests__/copy.test.js +0 -628
  391. package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
  392. package/dist/commands/dataset/__tests__/create.test.js +0 -342
  393. package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
  394. package/dist/commands/dataset/__tests__/delete.test.js +0 -231
  395. package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
  396. package/dist/commands/dataset/__tests__/export.test.js +0 -601
  397. package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
  398. package/dist/commands/dataset/__tests__/import.test.js +0 -53
  399. package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
  400. package/dist/commands/dataset/__tests__/list.test.js +0 -216
  401. package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
  402. package/dist/commands/dataset/alias/__tests__/create.test.js +0 -339
  403. package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
  404. package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -247
  405. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
  406. package/dist/commands/dataset/alias/__tests__/link.test.js +0 -376
  407. package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
  408. package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -313
  409. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
  410. package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -128
  411. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
  412. package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -198
  413. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
  414. package/dist/commands/docs/__tests__/browse.test.js +0 -29
  415. package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
  416. package/dist/commands/docs/__tests__/read.test.js +0 -78
  417. package/dist/commands/docs/__tests__/read.test.js.map +0 -1
  418. package/dist/commands/docs/__tests__/search.test.js +0 -255
  419. package/dist/commands/docs/__tests__/search.test.js.map +0 -1
  420. package/dist/commands/documents/__tests__/create.test.js +0 -1030
  421. package/dist/commands/documents/__tests__/create.test.js.map +0 -1
  422. package/dist/commands/documents/__tests__/delete.test.js +0 -300
  423. package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
  424. package/dist/commands/documents/__tests__/get.test.js +0 -182
  425. package/dist/commands/documents/__tests__/get.test.js.map +0 -1
  426. package/dist/commands/documents/__tests__/query.test.js +0 -300
  427. package/dist/commands/documents/__tests__/query.test.js.map +0 -1
  428. package/dist/commands/documents/__tests__/validate.test.js +0 -249
  429. package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
  430. package/dist/commands/graphql/__tests__/list.test.js +0 -240
  431. package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
  432. package/dist/commands/graphql/__tests__/undeploy.test.js +0 -410
  433. package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
  434. package/dist/commands/hook/__tests__/attempt.test.js +0 -275
  435. package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
  436. package/dist/commands/hook/__tests__/create.test.js +0 -119
  437. package/dist/commands/hook/__tests__/create.test.js.map +0 -1
  438. package/dist/commands/hook/__tests__/delete.test.js +0 -233
  439. package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
  440. package/dist/commands/hook/__tests__/list.test.js +0 -145
  441. package/dist/commands/hook/__tests__/list.test.js.map +0 -1
  442. package/dist/commands/hook/__tests__/logs.test.js +0 -798
  443. package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
  444. package/dist/commands/manifest/__tests__/extract.test.js +0 -132
  445. package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
  446. package/dist/commands/mcp/__tests__/configure.test.js +0 -397
  447. package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
  448. package/dist/commands/media/__tests__/create-aspect.test.js +0 -173
  449. package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
  450. package/dist/commands/media/__tests__/delete-aspect.test.js +0 -342
  451. package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
  452. package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -619
  453. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
  454. package/dist/commands/media/__tests__/export.test.js +0 -697
  455. package/dist/commands/media/__tests__/export.test.js.map +0 -1
  456. package/dist/commands/media/__tests__/import.test.js +0 -347
  457. package/dist/commands/media/__tests__/import.test.js.map +0 -1
  458. package/dist/commands/openapi/__tests__/get.test.js +0 -149
  459. package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
  460. package/dist/commands/openapi/__tests__/list.test.js +0 -113
  461. package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
  462. package/dist/commands/projects/__tests__/list.test.js +0 -154
  463. package/dist/commands/projects/__tests__/list.test.js.map +0 -1
  464. package/dist/commands/schema/__tests__/delete.test.js +0 -454
  465. package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
  466. package/dist/commands/schema/__tests__/deploy.test.js +0 -348
  467. package/dist/commands/schema/__tests__/deploy.test.js.map +0 -1
  468. package/dist/commands/schema/__tests__/extract.test.js +0 -121
  469. package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
  470. package/dist/commands/schema/__tests__/list.test.js +0 -399
  471. package/dist/commands/schema/__tests__/list.test.js.map +0 -1
  472. package/dist/commands/schema/__tests__/validate.test.js +0 -121
  473. package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
  474. package/dist/commands/telemetry/__tests__/disable.test.js +0 -147
  475. package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
  476. package/dist/commands/telemetry/__tests__/enable.test.js +0 -133
  477. package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
  478. package/dist/commands/telemetry/__tests__/status.test.js +0 -155
  479. package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
  480. package/dist/commands/tokens/__tests__/add.test.js +0 -435
  481. package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
  482. package/dist/commands/tokens/__tests__/delete.test.js +0 -405
  483. package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
  484. package/dist/commands/tokens/__tests__/list.test.js +0 -395
  485. package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
  486. package/dist/commands/users/__tests__/invite.test.js +0 -362
  487. package/dist/commands/users/__tests__/invite.test.js.map +0 -1
  488. package/dist/commands/users/__tests__/list.test.js +0 -407
  489. package/dist/commands/users/__tests__/list.test.js.map +0 -1
  490. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
  491. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
  492. package/dist/services/__tests__/datasetAliases.test.js +0 -131
  493. package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
  494. package/dist/services/__tests__/datasets.test.js +0 -436
  495. package/dist/services/__tests__/datasets.test.js.map +0 -1
  496. package/dist/services/__tests__/graphql.test.js +0 -43
  497. package/dist/services/__tests__/graphql.test.js.map +0 -1
  498. package/dist/services/__tests__/mediaLibraries.test.js +0 -88
  499. package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
  500. package/dist/services/__tests__/projects.test.js +0 -41
  501. package/dist/services/__tests__/projects.test.js.map +0 -1
  502. package/dist/services/__tests__/userApplications.test.js +0 -113
  503. package/dist/services/__tests__/userApplications.test.js.map +0 -1
  504. package/dist/util/__tests__/appId.test.js +0 -31
  505. package/dist/util/__tests__/appId.test.js.map +0 -1
  506. package/dist/util/__tests__/cliClient.test.js +0 -184
  507. package/dist/util/__tests__/cliClient.test.js.map +0 -1
  508. package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
  509. package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
  510. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
  511. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
  512. package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
  513. package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
  514. package/dist/util/__tests__/getCliVersion.test.js +0 -28
  515. package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
  516. package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
  517. package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
  518. package/dist/util/__tests__/getWorkspace.test.js +0 -37
  519. package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
  520. package/dist/util/__tests__/readPackageJson.test.js +0 -69
  521. package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
  522. package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
  523. package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
  524. package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
  525. package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
  526. package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
  527. package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/graphql/__tests__/undeploy.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {createSchema} from 'sanity'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {getGraphQLAPIs} from '../../../actions/graphql/getGraphQLAPIs.js'\nimport {GRAPHQL_API_VERSION} from '../../../services/graphql.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {Undeploy} from '../undeploy.js'\n\n// Mock getGraphQLAPIs\nvi.mock('../../../actions/graphql/getGraphQLAPIs.js', () => ({\n getGraphQLAPIs: vi.fn(),\n}))\n\nconst testProjectId = 'test-project'\n\nconst defaultMocks = {\n cliConfig: {api: {dataset: 'production', 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\nconst mockGetGraphQLAPIs = vi.mocked(getGraphQLAPIs)\nconst mockConfirm = vi.hoisted(() => vi.fn())\nconst schema = createSchema({name: 'default', types: []})\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 confirm: mockConfirm,\n }\n})\n\ndescribe('graphql undeploy', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n afterEach(() => {\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 undeploy', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Remove a deployed GraphQL API\n\n USAGE\n $ sanity graphql undeploy [--api <value>] [--dataset <value>] [--force]\n [--project <value>] [--tag <value>]\n\n FLAGS\n --api=<value> Undeploy API with this ID (project, dataset and tag flags\n take precedence)\n --dataset=<value> Dataset to undeploy GraphQL API from\n --force Skip confirmation prompt\n --project=<value> Project ID to delete GraphQL API for\n --tag=<value> [default: default] Tag to undeploy GraphQL API from\n\n DESCRIPTION\n Remove a deployed GraphQL API\n\n EXAMPLES\n Undeploy GraphQL API for current project and dataset\n\n $ sanity graphql undeploy\n\n Undeploy API with ID \"ios\"\n\n $ sanity graphql undeploy --api ios\n\n Undeploy GraphQL API for staging dataset\n\n $ sanity graphql undeploy --dataset staging\n\n Undeploy GraphQL API for staging dataset with \"next\" tag\n\n $ sanity graphql undeploy --dataset staging --tag next\n\n Undeploy GraphQL API without confirmation prompt\n\n $ sanity graphql undeploy --force\n\n \"\n `)\n })\n\n test('successfully undeploys GraphQL API with default tag', async () => {\n mockConfirm.mockResolvedValueOnce(true)\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/production/default',\n }).reply(204)\n\n const {stdout} = await testCommand(Undeploy, [], {mocks: defaultMocks})\n\n expect(mockConfirm).toHaveBeenCalledWith({\n default: false,\n message:\n 'Are you absolutely sure you want to delete the current GraphQL API connected to the \"production\" dataset in project test-project?',\n })\n expect(stdout).toBe('GraphQL API deleted\\n')\n })\n\n test('successfully undeploys GraphQL API with custom tag', async () => {\n mockConfirm.mockResolvedValueOnce(true)\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/production/beta',\n }).reply(204)\n\n const {stdout} = await testCommand(Undeploy, ['--tag', 'beta'], {mocks: defaultMocks})\n\n expect(mockConfirm).toHaveBeenCalledWith({\n default: false,\n message:\n 'Are you absolutely sure you want to delete the GraphQL API connected to the \"production\" dataset in project test-project, tagged \"beta\"?',\n })\n expect(stdout).toBe('GraphQL API deleted\\n')\n })\n\n test('successfully undeploys with --dataset flag', async () => {\n mockConfirm.mockResolvedValueOnce(true)\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/staging/default',\n }).reply(204)\n\n const {stdout} = await testCommand(Undeploy, ['--dataset', 'staging'], {mocks: defaultMocks})\n\n expect(stdout).toBe('GraphQL API deleted\\n')\n })\n\n test('uses --project flag when specified', async () => {\n mockConfirm.mockResolvedValueOnce(true)\n\n mockApi({\n apiHost: 'https://custom-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/production/default',\n }).reply(204)\n\n const {stdout} = await testCommand(Undeploy, ['--project', 'custom-project', '--force'], {mocks: defaultMocks})\n\n expect(stdout).toBe('GraphQL API deleted\\n')\n })\n\n test('successfully undeploys with all flags combined', async () => {\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiHost: 'https://custom-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/staging/experimental',\n }).reply(204)\n\n const {stdout} = await testCommand(Undeploy, [\n '--project',\n 'custom-project',\n '--dataset',\n 'staging',\n '--tag',\n 'experimental',\n ], {mocks: defaultMocks})\n\n expect(stdout).toBe('GraphQL API deleted\\n')\n expect(mockConfirm).toHaveBeenCalledWith({\n default: false,\n message:\n 'Are you absolutely sure you want to delete the GraphQL API connected to the \"staging\" dataset in project custom-project, tagged \"experimental\"?',\n })\n })\n\n test('successfully undeploys with --force flag (skips confirmation)', async () => {\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/production/default',\n }).reply(204)\n\n const {stdout} = await testCommand(Undeploy, ['--force'], {mocks: defaultMocks})\n\n expect(stdout).toBe('GraphQL API deleted\\n')\n expect(mockConfirm).not.toHaveBeenCalled()\n })\n\n test('cancels deletion when user declines confirmation', async () => {\n mockConfirm.mockResolvedValue(false)\n const {stdout} = await testCommand(Undeploy, [], {mocks: defaultMocks})\n expect(stdout).toBe('Operation cancelled\\n')\n expect(nock.pendingMocks()).toHaveLength(0) // No API call should be made\n })\n\n test('successfully undeploys with --api flag', async () => {\n mockConfirm.mockResolvedValue(true)\n\n mockGetGraphQLAPIs.mockResolvedValueOnce([\n {\n dataset: 'ios-dataset',\n id: 'ios',\n projectId: 'test-project',\n schema,\n tag: 'mobile',\n },\n ])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/ios-dataset/mobile',\n }).reply(204)\n\n const {stdout} = await testCommand(Undeploy, ['--api', 'ios'], {mocks: defaultMocks})\n\n expect(stdout).toBe('GraphQL API deleted\\n')\n expect(mockGetGraphQLAPIs).toHaveBeenCalledWith(process.cwd())\n })\n\n test('throws error when --api flag references non-existent API', async () => {\n mockGetGraphQLAPIs.mockResolvedValueOnce([\n {\n dataset: 'production',\n id: 'web',\n projectId: 'test-project',\n schema,\n tag: 'default',\n },\n ])\n\n const {error} = await testCommand(Undeploy, ['--api', 'ios'], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('GraphQL API \"ios\" not found')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('warns when both --api and --dataset are specified', async () => {\n mockConfirm.mockResolvedValue(true)\n\n mockGetGraphQLAPIs.mockResolvedValueOnce([\n {\n dataset: 'ios-dataset',\n id: 'ios',\n projectId: 'test-project',\n schema,\n tag: 'default',\n },\n ])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/staging/default',\n }).reply(204)\n\n const {stderr, stdout} = await testCommand(Undeploy, ['--api', 'ios', '--dataset', 'staging'], {mocks: defaultMocks})\n\n expect(stdout).toBe('GraphQL API deleted\\n')\n expect(stderr).toContain('Both --api and --dataset specified, using --dataset staging')\n })\n\n test('warns when both --api and --project are specified', async () => {\n mockConfirm.mockResolvedValue(true)\n\n mockGetGraphQLAPIs.mockResolvedValueOnce([\n {\n dataset: 'production',\n id: 'ios',\n projectId: 'ios-project',\n schema,\n tag: 'default',\n },\n ])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/production/default',\n }).reply(204)\n\n const {stderr, stdout} = await testCommand(Undeploy, [\n '--api',\n 'ios',\n '--project',\n 'test-project',\n ], {mocks: defaultMocks})\n\n expect(stdout).toBe('GraphQL API deleted\\n')\n expect(stderr).toContain('Both --api and --project specified, using --project test-project')\n })\n\n test('warns when both --api and --tag are specified', async () => {\n mockConfirm.mockResolvedValue(true)\n\n mockGetGraphQLAPIs.mockResolvedValueOnce([\n {\n dataset: 'production',\n id: 'ios',\n projectId: 'test-project',\n schema,\n tag: 'mobile',\n },\n ])\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/production/beta',\n }).reply(204)\n\n const {stderr, stdout} = await testCommand(Undeploy, ['--api', 'ios', '--tag', 'beta'], {mocks: defaultMocks})\n\n expect(stdout).toBe('GraphQL API deleted\\n')\n expect(stderr).toContain('Both --api and --tag specified, using --tag beta')\n })\n\n test('throws error when project ID is not defined', async () => {\n const {error} = await testCommand(Undeploy, ['--force'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: 'production', 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('throws error when dataset is not defined and not in config', async () => {\n const {error} = await testCommand(Undeploy, ['--force'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: undefined, projectId: testProjectId}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(\n 'Dataset is required. Specify it with --dataset or configure it in your project.',\n )\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles API deletion error', async () => {\n mockConfirm.mockResolvedValue(true)\n\n mockApi({\n apiHost: 'https://test-project.api.sanity.io',\n apiVersion: GRAPHQL_API_VERSION,\n method: 'delete',\n uri: '/apis/graphql/production/default',\n }).reply(404, {message: 'GraphQL API not found'})\n\n const {error} = await testCommand(Undeploy, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('GraphQL API deletion failed')\n expect(error?.message).toContain('GraphQL API not found')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles user cancelling confirmation prompt', async () => {\n mockConfirm.mockRejectedValue(new Error('User cancelled'))\n\n const {error} = await testCommand(Undeploy, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toBe('Operation cancelled')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","mockApi","testCommand","nock","createSchema","afterEach","beforeEach","describe","expect","test","vi","getGraphQLAPIs","GRAPHQL_API_VERSION","NO_PROJECT_ID","Undeploy","mock","fn","testProjectId","defaultMocks","cliConfig","api","dataset","projectId","projectRoot","directory","path","type","token","mockGetGraphQLAPIs","mocked","mockConfirm","hoisted","schema","name","types","actual","importActual","confirm","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","mockResolvedValueOnce","apiHost","apiVersion","method","uri","reply","mocks","toHaveBeenCalledWith","default","message","toBe","mockResolvedValue","not","toHaveBeenCalled","toHaveLength","id","tag","process","cwd","error","toBeInstanceOf","Error","toContain","oclif","exit","stderr","undefined","mockRejectedValue"],"mappings":"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"}
@@ -1,275 +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 { HOOK_API_VERSION } from '../../../actions/hook/constants.js';
6
- import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
7
- import { AttemptHookCommand } from '../attempt.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('#attempt', ()=>{
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
- 'hook attempt',
32
- '--help'
33
- ]);
34
- expect(stdout).toContain('Print details of a given webhook delivery attempt');
35
- expect(stdout).toMatchInlineSnapshot(`
36
- "Print details of a given webhook delivery attempt
37
-
38
- USAGE
39
- $ sanity hook attempt ATTEMPTID
40
-
41
- ARGUMENTS
42
- ATTEMPTID The delivery attempt ID to get details for
43
-
44
- DESCRIPTION
45
- Print details of a given webhook delivery attempt
46
-
47
- EXAMPLES
48
- Print details of webhook delivery attempt with ID abc123
49
-
50
- $ sanity hook attempt abc123
51
-
52
- "
53
- `);
54
- });
55
- test('displays successful delivery attempt details', async ()=>{
56
- const mockAttempt = {
57
- createdAt: '2023-01-01T12:00:00Z',
58
- duration: 1500,
59
- failureReason: '',
60
- hookId: 'hook123',
61
- id: 'attempt123',
62
- inProgress: false,
63
- isFailure: false,
64
- messageId: 'msg123',
65
- projectId: 'proj123',
66
- resultBody: 'Success response body',
67
- resultCode: 200,
68
- updatedAt: '2023-01-01T12:00:01Z'
69
- };
70
- mockApi({
71
- apiVersion: HOOK_API_VERSION,
72
- uri: '/hooks/projects/test-project/attempts/attempt123'
73
- }).reply(200, mockAttempt);
74
- const { stdout } = await testCommand(AttemptHookCommand, [
75
- 'attempt123'
76
- ], {
77
- mocks: defaultMocks
78
- });
79
- expect(stdout).toContain('Date: 2023-01-01T12:00:00Z');
80
- expect(stdout).toContain('Status: Delivered');
81
- expect(stdout).toContain('Status code: 200');
82
- expect(stdout).toContain('Response body:');
83
- expect(stdout).toContain('Success response body');
84
- });
85
- test('displays failed delivery attempt with HTTP error', async ()=>{
86
- const mockAttempt = {
87
- createdAt: '2023-01-01T12:00:00Z',
88
- duration: 500,
89
- failureReason: 'http',
90
- hookId: 'hook123',
91
- id: 'attempt123',
92
- inProgress: false,
93
- isFailure: true,
94
- messageId: 'msg123',
95
- projectId: 'proj123',
96
- resultBody: 'Error response body',
97
- resultCode: 404,
98
- updatedAt: '2023-01-01T12:00:01Z'
99
- };
100
- mockApi({
101
- apiVersion: HOOK_API_VERSION,
102
- uri: '/hooks/projects/test-project/attempts/attempt123'
103
- }).reply(200, mockAttempt);
104
- const { stdout } = await testCommand(AttemptHookCommand, [
105
- 'attempt123'
106
- ], {
107
- mocks: defaultMocks
108
- });
109
- expect(stdout).toContain('Date: 2023-01-01T12:00:00Z');
110
- expect(stdout).toContain('Status: Failed');
111
- expect(stdout).toContain('Status code: 404');
112
- expect(stdout).toContain('Failure: HTTP 404');
113
- expect(stdout).toContain('Response body:');
114
- expect(stdout).toContain('Error response body');
115
- });
116
- test('displays failed delivery attempt with network error', async ()=>{
117
- const mockAttempt = {
118
- createdAt: '2023-01-01T12:00:00Z',
119
- duration: null,
120
- failureReason: 'network',
121
- hookId: 'hook123',
122
- id: 'attempt123',
123
- inProgress: false,
124
- isFailure: true,
125
- messageId: 'msg123',
126
- projectId: 'proj123',
127
- resultBody: '',
128
- resultCode: 0,
129
- updatedAt: '2023-01-01T12:00:01Z'
130
- };
131
- mockApi({
132
- apiVersion: HOOK_API_VERSION,
133
- uri: '/hooks/projects/test-project/attempts/attempt123'
134
- }).reply(200, mockAttempt);
135
- const { stdout } = await testCommand(AttemptHookCommand, [
136
- 'attempt123'
137
- ], {
138
- mocks: defaultMocks
139
- });
140
- expect(stdout).toContain('Date: 2023-01-01T12:00:00Z');
141
- expect(stdout).toContain('Status: Failed');
142
- expect(stdout).toContain('Status code: 0');
143
- expect(stdout).toContain('Failure: Network error');
144
- expect(stdout).not.toContain('Response body:');
145
- });
146
- test('displays failed delivery attempt with timeout', async ()=>{
147
- const mockAttempt = {
148
- createdAt: '2023-01-01T12:00:00Z',
149
- duration: null,
150
- failureReason: 'timeout',
151
- hookId: 'hook123',
152
- id: 'attempt123',
153
- inProgress: false,
154
- isFailure: true,
155
- messageId: 'msg123',
156
- projectId: 'proj123',
157
- resultBody: '',
158
- resultCode: 0,
159
- updatedAt: '2023-01-01T12:00:01Z'
160
- };
161
- mockApi({
162
- apiVersion: HOOK_API_VERSION,
163
- uri: '/hooks/projects/test-project/attempts/attempt123'
164
- }).reply(200, mockAttempt);
165
- const { stdout } = await testCommand(AttemptHookCommand, [
166
- 'attempt123'
167
- ], {
168
- mocks: defaultMocks
169
- });
170
- expect(stdout).toContain('Date: 2023-01-01T12:00:00Z');
171
- expect(stdout).toContain('Status: Failed');
172
- expect(stdout).toContain('Status code: 0');
173
- expect(stdout).toContain('Failure: Request timed out');
174
- expect(stdout).not.toContain('Response body:');
175
- });
176
- test('displays in-progress delivery attempt', async ()=>{
177
- const mockAttempt = {
178
- createdAt: '2023-01-01T12:00:00Z',
179
- duration: null,
180
- failureReason: '',
181
- hookId: 'hook123',
182
- id: 'attempt123',
183
- inProgress: true,
184
- isFailure: false,
185
- messageId: 'msg123',
186
- projectId: 'proj123',
187
- resultBody: '',
188
- resultCode: 0,
189
- updatedAt: null
190
- };
191
- mockApi({
192
- apiVersion: HOOK_API_VERSION,
193
- uri: '/hooks/projects/test-project/attempts/attempt123'
194
- }).reply(200, mockAttempt);
195
- const { stdout } = await testCommand(AttemptHookCommand, [
196
- 'attempt123'
197
- ], {
198
- mocks: defaultMocks
199
- });
200
- expect(stdout).toContain('Date: 2023-01-01T12:00:00Z');
201
- expect(stdout).toContain('Status: In progress');
202
- expect(stdout).toContain('Status code: 0');
203
- expect(stdout).not.toContain('Failure:');
204
- expect(stdout).not.toContain('Response body:');
205
- });
206
- test('handles empty response body', async ()=>{
207
- const mockAttempt = {
208
- createdAt: '2023-01-01T12:00:00Z',
209
- duration: 1000,
210
- failureReason: '',
211
- hookId: 'hook123',
212
- id: 'attempt123',
213
- inProgress: false,
214
- isFailure: false,
215
- messageId: 'msg123',
216
- projectId: 'proj123',
217
- resultBody: '',
218
- resultCode: 204,
219
- updatedAt: '2023-01-01T12:00:01Z'
220
- };
221
- mockApi({
222
- apiVersion: HOOK_API_VERSION,
223
- uri: '/hooks/projects/test-project/attempts/attempt123'
224
- }).reply(200, mockAttempt);
225
- const { stdout } = await testCommand(AttemptHookCommand, [
226
- 'attempt123'
227
- ], {
228
- mocks: defaultMocks
229
- });
230
- expect(stdout).toContain('Date: 2023-01-01T12:00:00Z');
231
- expect(stdout).toContain('Status: Delivered');
232
- expect(stdout).toContain('Status code: 204');
233
- expect(stdout).toContain('Response body: <empty>');
234
- });
235
- test('displays error when API request fails', async ()=>{
236
- mockApi({
237
- apiVersion: HOOK_API_VERSION,
238
- uri: '/hooks/projects/test-project/attempts/attempt123'
239
- }).reply(404, {
240
- message: 'Attempt not found'
241
- });
242
- const { error } = await testCommand(AttemptHookCommand, [
243
- 'attempt123'
244
- ], {
245
- mocks: defaultMocks
246
- });
247
- expect(error).toBeInstanceOf(Error);
248
- expect(error?.message).toContain('Hook attempt retrieval failed');
249
- });
250
- test('requires attempt ID argument', async ()=>{
251
- const { error } = await testCommand(AttemptHookCommand, [], {
252
- mocks: defaultMocks
253
- });
254
- expect(error).toBeInstanceOf(Error);
255
- expect(error?.message).toContain('Missing 1 required arg');
256
- });
257
- test('throws error when no project ID is found', async ()=>{
258
- const { error } = await testCommand(AttemptHookCommand, [
259
- 'attempt123'
260
- ], {
261
- mocks: {
262
- ...defaultMocks,
263
- cliConfig: {
264
- api: {
265
- projectId: undefined
266
- }
267
- }
268
- }
269
- });
270
- expect(error).toBeInstanceOf(Error);
271
- expect(error?.message).toEqual(NO_PROJECT_ID);
272
- });
273
- });
274
-
275
- //# sourceMappingURL=attempt.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/hook/__tests__/attempt.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 {HOOK_API_VERSION} from '../../../actions/hook/constants.js'\nimport {type DeliveryAttempt} from '../../../actions/hook/types.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {AttemptHookCommand} from '../attempt.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('#attempt', () => {\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(['hook attempt', '--help'])\n\n expect(stdout).toContain('Print details of a given webhook delivery attempt')\n expect(stdout).toMatchInlineSnapshot(`\n \"Print details of a given webhook delivery attempt\n\n USAGE\n $ sanity hook attempt ATTEMPTID\n\n ARGUMENTS\n ATTEMPTID The delivery attempt ID to get details for\n\n DESCRIPTION\n Print details of a given webhook delivery attempt\n\n EXAMPLES\n Print details of webhook delivery attempt with ID abc123\n\n $ sanity hook attempt abc123\n\n \"\n `)\n })\n\n test('displays successful delivery attempt details', async () => {\n const mockAttempt: DeliveryAttempt = {\n createdAt: '2023-01-01T12:00:00Z',\n duration: 1500,\n failureReason: '',\n hookId: 'hook123',\n id: 'attempt123',\n inProgress: false,\n isFailure: false,\n messageId: 'msg123',\n projectId: 'proj123',\n resultBody: 'Success response body',\n resultCode: 200,\n updatedAt: '2023-01-01T12:00:01Z',\n }\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project/attempts/attempt123',\n }).reply(200, mockAttempt)\n\n const {stdout} = await testCommand(AttemptHookCommand, ['attempt123'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Date: 2023-01-01T12:00:00Z')\n expect(stdout).toContain('Status: Delivered')\n expect(stdout).toContain('Status code: 200')\n expect(stdout).toContain('Response body:')\n expect(stdout).toContain('Success response body')\n })\n\n test('displays failed delivery attempt with HTTP error', async () => {\n const mockAttempt: DeliveryAttempt = {\n createdAt: '2023-01-01T12:00:00Z',\n duration: 500,\n failureReason: 'http',\n hookId: 'hook123',\n id: 'attempt123',\n inProgress: false,\n isFailure: true,\n messageId: 'msg123',\n projectId: 'proj123',\n resultBody: 'Error response body',\n resultCode: 404,\n updatedAt: '2023-01-01T12:00:01Z',\n }\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project/attempts/attempt123',\n }).reply(200, mockAttempt)\n\n const {stdout} = await testCommand(AttemptHookCommand, ['attempt123'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Date: 2023-01-01T12:00:00Z')\n expect(stdout).toContain('Status: Failed')\n expect(stdout).toContain('Status code: 404')\n expect(stdout).toContain('Failure: HTTP 404')\n expect(stdout).toContain('Response body:')\n expect(stdout).toContain('Error response body')\n })\n\n test('displays failed delivery attempt with network error', async () => {\n const mockAttempt: DeliveryAttempt = {\n createdAt: '2023-01-01T12:00:00Z',\n duration: null,\n failureReason: 'network',\n hookId: 'hook123',\n id: 'attempt123',\n inProgress: false,\n isFailure: true,\n messageId: 'msg123',\n projectId: 'proj123',\n resultBody: '',\n resultCode: 0,\n updatedAt: '2023-01-01T12:00:01Z',\n }\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project/attempts/attempt123',\n }).reply(200, mockAttempt)\n\n const {stdout} = await testCommand(AttemptHookCommand, ['attempt123'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Date: 2023-01-01T12:00:00Z')\n expect(stdout).toContain('Status: Failed')\n expect(stdout).toContain('Status code: 0')\n expect(stdout).toContain('Failure: Network error')\n expect(stdout).not.toContain('Response body:')\n })\n\n test('displays failed delivery attempt with timeout', async () => {\n const mockAttempt: DeliveryAttempt = {\n createdAt: '2023-01-01T12:00:00Z',\n duration: null,\n failureReason: 'timeout',\n hookId: 'hook123',\n id: 'attempt123',\n inProgress: false,\n isFailure: true,\n messageId: 'msg123',\n projectId: 'proj123',\n resultBody: '',\n resultCode: 0,\n updatedAt: '2023-01-01T12:00:01Z',\n }\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project/attempts/attempt123',\n }).reply(200, mockAttempt)\n\n const {stdout} = await testCommand(AttemptHookCommand, ['attempt123'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Date: 2023-01-01T12:00:00Z')\n expect(stdout).toContain('Status: Failed')\n expect(stdout).toContain('Status code: 0')\n expect(stdout).toContain('Failure: Request timed out')\n expect(stdout).not.toContain('Response body:')\n })\n\n test('displays in-progress delivery attempt', async () => {\n const mockAttempt: DeliveryAttempt = {\n createdAt: '2023-01-01T12:00:00Z',\n duration: null,\n failureReason: '',\n hookId: 'hook123',\n id: 'attempt123',\n inProgress: true,\n isFailure: false,\n messageId: 'msg123',\n projectId: 'proj123',\n resultBody: '',\n resultCode: 0,\n updatedAt: null,\n }\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project/attempts/attempt123',\n }).reply(200, mockAttempt)\n\n const {stdout} = await testCommand(AttemptHookCommand, ['attempt123'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Date: 2023-01-01T12:00:00Z')\n expect(stdout).toContain('Status: In progress')\n expect(stdout).toContain('Status code: 0')\n expect(stdout).not.toContain('Failure:')\n expect(stdout).not.toContain('Response body:')\n })\n\n test('handles empty response body', async () => {\n const mockAttempt: DeliveryAttempt = {\n createdAt: '2023-01-01T12:00:00Z',\n duration: 1000,\n failureReason: '',\n hookId: 'hook123',\n id: 'attempt123',\n inProgress: false,\n isFailure: false,\n messageId: 'msg123',\n projectId: 'proj123',\n resultBody: '',\n resultCode: 204,\n updatedAt: '2023-01-01T12:00:01Z',\n }\n\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project/attempts/attempt123',\n }).reply(200, mockAttempt)\n\n const {stdout} = await testCommand(AttemptHookCommand, ['attempt123'], {mocks: defaultMocks})\n\n expect(stdout).toContain('Date: 2023-01-01T12:00:00Z')\n expect(stdout).toContain('Status: Delivered')\n expect(stdout).toContain('Status code: 204')\n expect(stdout).toContain('Response body: <empty>')\n })\n\n test('displays error when API request fails', async () => {\n mockApi({\n apiVersion: HOOK_API_VERSION,\n uri: '/hooks/projects/test-project/attempts/attempt123',\n }).reply(404, {message: 'Attempt not found'})\n\n const {error} = await testCommand(AttemptHookCommand, ['attempt123'], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Hook attempt retrieval failed')\n })\n\n test('requires attempt ID argument', async () => {\n const {error} = await testCommand(AttemptHookCommand, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Missing 1 required arg')\n })\n\n test('throws error when no project ID is found', async () => {\n const {error} = await testCommand(AttemptHookCommand, ['attempt123'], {\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 })\n})\n"],"names":["runCommand","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","HOOK_API_VERSION","NO_PROJECT_ID","AttemptHookCommand","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toContain","toMatchInlineSnapshot","mockAttempt","createdAt","duration","failureReason","hookId","id","inProgress","isFailure","messageId","resultBody","resultCode","updatedAt","apiVersion","uri","reply","mocks","not","message","error","toBeInstanceOf","Error","undefined"],"mappings":"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"}
@@ -1,119 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { testCommand } from '@sanity/cli-test';
3
- import open from 'open';
4
- import { afterEach, describe, expect, test, vi } from 'vitest';
5
- import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
6
- import { CreateHookCommand } from '../create.js';
7
- vi.mock('open', ()=>({
8
- default: vi.fn().mockResolvedValue(undefined)
9
- }));
10
- const testProjectId = 'test-project';
11
- const defaultMocks = {
12
- cliConfig: {
13
- api: {
14
- projectId: testProjectId
15
- }
16
- },
17
- projectRoot: {
18
- directory: '/test/path',
19
- path: '/test/path/sanity.config.ts',
20
- type: 'studio'
21
- },
22
- token: 'test-token'
23
- };
24
- const mockGetById = vi.hoisted(()=>vi.fn());
25
- vi.mock('@sanity/cli-core', async ()=>{
26
- const actual = await vi.importActual('@sanity/cli-core');
27
- return {
28
- ...actual,
29
- getProjectCliClient: vi.fn().mockResolvedValue({
30
- projects: {
31
- getById: mockGetById
32
- }
33
- })
34
- };
35
- });
36
- describe('#hook:create', ()=>{
37
- afterEach(()=>{
38
- vi.clearAllMocks();
39
- });
40
- test('--help works', async ()=>{
41
- const { stdout } = await runCommand([
42
- 'hook create',
43
- '--help'
44
- ]);
45
- expect(stdout).toMatchInlineSnapshot(`
46
- "Create a new webhook for the current project
47
-
48
- USAGE
49
- $ sanity hook create
50
-
51
- DESCRIPTION
52
- Create a new webhook for the current project
53
-
54
- EXAMPLES
55
- Create a new webhook for the current project
56
-
57
- $ sanity hook create
58
-
59
- "
60
- `);
61
- });
62
- test('opens webhook creation URL for project with organization', async ()=>{
63
- mockGetById.mockResolvedValueOnce({
64
- id: 'test-project',
65
- organizationId: 'test-org'
66
- });
67
- const { stdout } = await testCommand(CreateHookCommand, [], {
68
- mocks: defaultMocks
69
- });
70
- expect(open).toHaveBeenCalledWith('https://www.sanity.io/organizations/test-org/project/test-project/api/webhooks/new');
71
- expect(stdout).toContain('Opening https://www.sanity.io/organizations/test-org/project/test-project/api/webhooks/new');
72
- });
73
- test('opens webhook creation URL for project without organization (personal)', async ()=>{
74
- mockGetById.mockResolvedValueOnce({
75
- id: 'test-project'
76
- });
77
- const { stdout } = await testCommand(CreateHookCommand, [], {
78
- mocks: defaultMocks
79
- });
80
- expect(open).toHaveBeenCalledWith('https://www.sanity.io/organizations/personal/project/test-project/api/webhooks/new');
81
- expect(stdout).toContain('Opening https://www.sanity.io/organizations/personal/project/test-project/api/webhooks/new');
82
- });
83
- test('displays an error if the project fetch fails', async ()=>{
84
- mockGetById.mockRejectedValueOnce(new Error('Internal Server Error'));
85
- const { error } = await testCommand(CreateHookCommand, [], {
86
- mocks: defaultMocks
87
- });
88
- expect(error).toBeInstanceOf(Error);
89
- expect(error?.message).toContain('Failed to fetch project information');
90
- });
91
- test('throws error when no project ID is found', async ()=>{
92
- const { error } = await testCommand(CreateHookCommand, [], {
93
- mocks: {
94
- ...defaultMocks,
95
- cliConfig: {
96
- api: {
97
- projectId: undefined
98
- }
99
- }
100
- }
101
- });
102
- expect(error).toBeInstanceOf(Error);
103
- expect(error?.message).toEqual(NO_PROJECT_ID);
104
- });
105
- test('handles open failure gracefully', async ()=>{
106
- vi.mocked(open).mockRejectedValueOnce(new Error('Failed to open browser'));
107
- mockGetById.mockResolvedValueOnce({
108
- id: 'test-project',
109
- organizationId: 'test-org'
110
- });
111
- const { error } = await testCommand(CreateHookCommand, [], {
112
- mocks: defaultMocks
113
- });
114
- expect(error).toBeInstanceOf(Error);
115
- expect(error?.message).toContain('Failed to open browser');
116
- });
117
- });
118
-
119
- //# sourceMappingURL=create.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/hook/__tests__/create.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport open from 'open'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {CreateHookCommand} from '../create.js'\n\nvi.mock('open', () => ({\n default: vi.fn().mockResolvedValue(undefined),\n}))\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\nconst mockGetById = vi.hoisted(() => vi.fn())\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: vi.fn().mockResolvedValue({\n projects: {\n getById: mockGetById,\n },\n }),\n }\n})\n\ndescribe('#hook:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['hook create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a new webhook for the current project\n\n USAGE\n $ sanity hook create\n\n DESCRIPTION\n Create a new webhook for the current project\n\n EXAMPLES\n Create a new webhook for the current project\n\n $ sanity hook create\n\n \"\n `)\n })\n\n test('opens webhook creation URL for project with organization', async () => {\n mockGetById.mockResolvedValueOnce({\n id: 'test-project',\n organizationId: 'test-org',\n })\n\n const {stdout} = await testCommand(CreateHookCommand, [], {mocks: defaultMocks})\n\n expect(open).toHaveBeenCalledWith(\n 'https://www.sanity.io/organizations/test-org/project/test-project/api/webhooks/new',\n )\n expect(stdout).toContain(\n 'Opening https://www.sanity.io/organizations/test-org/project/test-project/api/webhooks/new',\n )\n })\n\n test('opens webhook creation URL for project without organization (personal)', async () => {\n mockGetById.mockResolvedValueOnce({\n id: 'test-project',\n })\n\n const {stdout} = await testCommand(CreateHookCommand, [], {mocks: defaultMocks})\n\n expect(open).toHaveBeenCalledWith(\n 'https://www.sanity.io/organizations/personal/project/test-project/api/webhooks/new',\n )\n expect(stdout).toContain(\n 'Opening https://www.sanity.io/organizations/personal/project/test-project/api/webhooks/new',\n )\n })\n\n test('displays an error if the project fetch fails', async () => {\n mockGetById.mockRejectedValueOnce(new Error('Internal Server Error'))\n\n const {error} = await testCommand(CreateHookCommand, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to fetch project information')\n })\n\n test('throws error when no project ID is found', async () => {\n const {error} = await testCommand(CreateHookCommand, [], {\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 })\n\n test('handles open failure gracefully', async () => {\n vi.mocked(open).mockRejectedValueOnce(new Error('Failed to open browser'))\n\n mockGetById.mockResolvedValueOnce({\n id: 'test-project',\n organizationId: 'test-org',\n })\n\n const {error} = await testCommand(CreateHookCommand, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to open browser')\n })\n})\n"],"names":["runCommand","testCommand","open","afterEach","describe","expect","test","vi","NO_PROJECT_ID","CreateHookCommand","mock","default","fn","mockResolvedValue","undefined","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","mockGetById","hoisted","actual","importActual","getProjectCliClient","projects","getById","clearAllMocks","stdout","toMatchInlineSnapshot","mockResolvedValueOnce","id","organizationId","mocks","toHaveBeenCalledWith","toContain","mockRejectedValueOnce","Error","error","toBeInstanceOf","message","toEqual","mocked"],"mappings":"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"}