@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,590 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { getCliToken, getConfig } from '@sanity/cli-core';
3
- import { mockApi, testCommand } from '@sanity/cli-test';
4
- import nock from 'nock';
5
- import { afterEach, describe, expect, test, vi } from 'vitest';
6
- import { findSanityModulesVersions } from '../../actions/versions/findSanityModulesVersions.js';
7
- import { Debug } from '../debug.js';
8
- vi.mock('@sanity/cli-core', async ()=>{
9
- const actual = await vi.importActual('@sanity/cli-core');
10
- return {
11
- ...actual,
12
- getCliToken: vi.fn(),
13
- getConfig: vi.fn()
14
- };
15
- });
16
- vi.mock('../../actions/versions/findSanityModulesVersions.js', ()=>({
17
- findSanityModulesVersions: vi.fn()
18
- }));
19
- const defaultProjectRoot = {
20
- directory: '/test/project',
21
- path: '/test/project/sanity.cli.ts',
22
- type: 'studio'
23
- };
24
- const defaultCliConfig = {
25
- api: {
26
- projectId: 'project123'
27
- }
28
- };
29
- const defaultMocks = {
30
- cliConfig: defaultCliConfig,
31
- projectRoot: defaultProjectRoot,
32
- token: 'mock-auth-token'
33
- };
34
- afterEach(()=>{
35
- vi.clearAllMocks();
36
- const pending = nock.pendingMocks();
37
- nock.cleanAll();
38
- expect(pending, 'pending mocks').toEqual([]);
39
- });
40
- describe('#debug', ()=>{
41
- test('help text is correct', async ()=>{
42
- const { stdout } = await runCommand('debug --help');
43
- expect(stdout).toMatchInlineSnapshot(`
44
- "Provides diagnostic info for Sanity Studio troubleshooting
45
-
46
- USAGE
47
- $ sanity debug [--secrets]
48
-
49
- FLAGS
50
- --secrets Include API keys in output
51
-
52
- DESCRIPTION
53
- Provides diagnostic info for Sanity Studio troubleshooting
54
-
55
- EXAMPLES
56
- $ sanity debug
57
-
58
- $ sanity debug --secrets
59
-
60
- "
61
- `);
62
- });
63
- test('shows debug information with authentication and config details', async ()=>{
64
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
65
- vi.mocked(getConfig).mockImplementation(async (key)=>{
66
- if (key === 'authToken') return 'mock-auth-token';
67
- if (key === 'telemetryConsent') return {
68
- updatedAt: 1_234_567_890,
69
- value: {
70
- status: 'granted',
71
- type: 'explicit'
72
- }
73
- };
74
- return undefined;
75
- });
76
- vi.mocked(findSanityModulesVersions).mockResolvedValue([
77
- {
78
- declared: '^3.0.0',
79
- installed: '3.0.0',
80
- isGlobal: false,
81
- isPinned: false,
82
- latest: '3.0.0',
83
- name: 'sanity',
84
- needsUpdate: false
85
- },
86
- {
87
- declared: '^3.0.0',
88
- installed: '3.0.0',
89
- isGlobal: false,
90
- isPinned: false,
91
- latest: '3.1.0',
92
- name: '@sanity/cli',
93
- needsUpdate: true
94
- }
95
- ]);
96
- const { stdout } = await testCommand(Debug, [], {
97
- mocks: {
98
- ...defaultMocks,
99
- cliConfig: {
100
- api: {
101
- dataset: 'production',
102
- projectId: 'project123'
103
- }
104
- }
105
- }
106
- });
107
- expect(stdout).toContain('User:');
108
- expect(stdout).toContain('Authentication:');
109
- expect(stdout).toContain('<redacted>');
110
- expect(stdout).toContain('Global config');
111
- expect(stdout).toContain('Package versions:');
112
- expect(stdout).toContain('sanity');
113
- expect(stdout).toContain('3.0.0');
114
- expect(stdout).toContain('(up to date)');
115
- expect(stdout).toContain('(latest: 3.1.0)');
116
- });
117
- test('shows redacted auth token by default', async ()=>{
118
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
119
- vi.mocked(getConfig).mockImplementation(async (key)=>{
120
- if (key === 'authToken') return 'mock-auth-token';
121
- return undefined;
122
- });
123
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
124
- const { stdout } = await testCommand(Debug, [], {
125
- mocks: defaultMocks
126
- });
127
- expect(stdout).toContain('<redacted>');
128
- expect(stdout).toContain('(run with --secrets to reveal token)');
129
- expect(stdout).not.toContain('mock-auth-token');
130
- });
131
- test('shows actual auth token with --secrets flag', async ()=>{
132
- vi.mocked(getCliToken).mockResolvedValue('secret-token-12345');
133
- vi.mocked(getConfig).mockImplementation(async (key)=>{
134
- if (key === 'authToken') return 'secret-token-12345';
135
- return undefined;
136
- });
137
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
138
- const { stdout } = await testCommand(Debug, [
139
- '--secrets'
140
- ], {
141
- mocks: {
142
- ...defaultMocks,
143
- token: 'secret-token-12345'
144
- }
145
- });
146
- expect(stdout).toContain('secret-token-12345');
147
- expect(stdout).not.toContain('<redacted>');
148
- expect(stdout).not.toContain('(run with --secrets to reveal token)');
149
- });
150
- test('handles unauthenticated user', async ()=>{
151
- vi.mocked(getCliToken).mockResolvedValue(undefined);
152
- vi.mocked(getConfig).mockImplementation(async ()=>undefined);
153
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
154
- const { error, stdout } = await testCommand(Debug, [], {
155
- mocks: {
156
- ...defaultMocks,
157
- token: undefined
158
- }
159
- });
160
- // When not authenticated, either the command errors or shows "Not logged in" message
161
- if (error) {
162
- expect(error.message).toContain('Failed to gather debug information');
163
- } else {
164
- expect(stdout).toContain('Not logged in');
165
- }
166
- });
167
- test('shows package versions with update information', async ()=>{
168
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
169
- vi.mocked(getConfig).mockImplementation(async (key)=>{
170
- if (key === 'authToken') return 'mock-auth-token';
171
- return undefined;
172
- });
173
- vi.mocked(findSanityModulesVersions).mockResolvedValue([
174
- {
175
- declared: '^3.0.0',
176
- installed: '3.0.0',
177
- isGlobal: false,
178
- isPinned: false,
179
- latest: '3.0.0',
180
- name: 'sanity',
181
- needsUpdate: false
182
- },
183
- {
184
- declared: '^2.9.0',
185
- installed: '2.9.0',
186
- isGlobal: false,
187
- isPinned: false,
188
- latest: '3.1.0',
189
- name: '@sanity/cli',
190
- needsUpdate: true
191
- },
192
- {
193
- declared: '^3.0.0',
194
- installed: undefined,
195
- isGlobal: false,
196
- isPinned: false,
197
- latest: '3.0.0',
198
- name: '@sanity/types',
199
- needsUpdate: true
200
- }
201
- ]);
202
- const { stdout } = await testCommand(Debug, [], {
203
- mocks: defaultMocks
204
- });
205
- expect(stdout).toContain('Package versions:');
206
- expect(stdout).toContain('sanity');
207
- expect(stdout).toContain('3.0.0');
208
- expect(stdout).toContain('(up to date)');
209
- expect(stdout).toContain('(latest: 3.1.0)');
210
- expect(stdout).toContain('<missing>');
211
- });
212
- test('handles errors gracefully', async ()=>{
213
- vi.mocked(getCliToken).mockRejectedValue(new Error('Auth system unavailable'));
214
- const { error } = await testCommand(Debug, [], {
215
- mocks: defaultMocks
216
- });
217
- expect(error?.message).toContain('Failed to gather debug information');
218
- expect(error?.message).toContain('Auth system unavailable');
219
- });
220
- test('displays user information when user is present', async ()=>{
221
- // Mock authentication
222
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
223
- vi.mocked(getConfig).mockImplementation(async (key)=>{
224
- if (key === 'authToken') return 'mock-auth-token';
225
- return undefined;
226
- });
227
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
228
- // Mock the /me API endpoint to return user info
229
- mockApi({
230
- apiVersion: 'v2025-08-06',
231
- uri: '/users/me'
232
- }).reply(200, {
233
- email: 'test@example.com',
234
- id: 'user123',
235
- name: 'Test User'
236
- });
237
- // Mock the project API endpoint to return no project (404)
238
- mockApi({
239
- apiVersion: 'v2025-08-06',
240
- uri: '/projects/project123'
241
- }).reply(404);
242
- const { stdout } = await testCommand(Debug, [], {
243
- mocks: defaultMocks
244
- });
245
- expect(stdout).toContain('User:');
246
- expect(stdout).toContain("Email: 'test@example.com'");
247
- expect(stdout).toContain("ID: 'user123'");
248
- expect(stdout).toContain("Name: 'Test User'");
249
- });
250
- test('displays project information when project is present', async ()=>{
251
- // Mock authentication
252
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
253
- vi.mocked(getConfig).mockImplementation(async (key)=>{
254
- if (key === 'authToken') return 'mock-auth-token';
255
- return undefined;
256
- });
257
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
258
- // Mock the /me API endpoint to return user info
259
- mockApi({
260
- apiVersion: 'v2025-08-06',
261
- uri: '/users/me'
262
- }).reply(200, {
263
- email: 'test@example.com',
264
- id: 'user123',
265
- name: 'Test User'
266
- });
267
- // Mock the project API endpoint to return project info
268
- mockApi({
269
- apiVersion: 'v2025-08-06',
270
- uri: '/projects/project123'
271
- }).reply(200, {
272
- displayName: 'Test Project',
273
- id: 'project123',
274
- members: [
275
- {
276
- id: 'user123',
277
- roles: [
278
- {
279
- name: 'administrator'
280
- }
281
- ]
282
- }
283
- ],
284
- studioHost: 'test-project'
285
- });
286
- const { stdout } = await testCommand(Debug, [], {
287
- mocks: defaultMocks
288
- });
289
- expect(stdout).toContain('Project:');
290
- expect(stdout).toContain("Display name: 'Test Project'");
291
- expect(stdout).toContain("ID: 'project123'");
292
- expect(stdout).toContain("Roles: [ 'administrator' ]");
293
- });
294
- test('handles case when no auth token is present', async ()=>{
295
- // Mock no authentication
296
- vi.mocked(getCliToken).mockResolvedValue(undefined);
297
- vi.mocked(getConfig).mockImplementation(async ()=>undefined);
298
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
299
- // Command should fail when no auth token is present since it requires authentication
300
- const { error, stdout } = await testCommand(Debug, [], {
301
- mocks: {
302
- ...defaultMocks,
303
- token: undefined
304
- }
305
- });
306
- // When not authenticated, either the command errors or shows "Not logged in" message
307
- if (error) {
308
- expect(error.message).toContain('Failed to gather debug information');
309
- } else {
310
- expect(stdout).toContain('Not logged in');
311
- }
312
- });
313
- test('handles case when no project config is present', async ()=>{
314
- // Mock authentication
315
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
316
- vi.mocked(getConfig).mockImplementation(async (key)=>{
317
- if (key === 'authToken') return 'mock-auth-token';
318
- return undefined;
319
- });
320
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
321
- // Mock the /me API endpoint to return user info
322
- mockApi({
323
- apiVersion: 'v2025-08-06',
324
- uri: '/users/me'
325
- }).reply(200, {
326
- email: 'test@example.com',
327
- id: 'user123',
328
- name: 'Test User'
329
- });
330
- // No project API mock needed since no valid projectId
331
- const { stdout } = await testCommand(Debug, [], {
332
- mocks: {
333
- ...defaultMocks,
334
- cliConfig: {
335
- api: {
336
- }
337
- }
338
- }
339
- });
340
- expect(stdout).toContain('Global config');
341
- expect(stdout).toContain('Project config');
342
- expect(stdout).toContain('Missing required "api.projectId" key');
343
- });
344
- test('handles case when no versions are present', async ()=>{
345
- // Mock authentication
346
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
347
- vi.mocked(getConfig).mockImplementation(async (key)=>{
348
- if (key === 'authToken') return 'mock-auth-token';
349
- return undefined;
350
- });
351
- // Mock findSanityModulesVersions to return empty array (no versions)
352
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
353
- // Mock the /me API endpoint to return user info
354
- mockApi({
355
- apiVersion: 'v2025-08-06',
356
- uri: '/users/me'
357
- }).reply(200, {
358
- email: 'test@example.com',
359
- id: 'user123',
360
- name: 'Test User'
361
- });
362
- // Mock the project API endpoint to return project info
363
- mockApi({
364
- apiVersion: 'v2025-08-06',
365
- uri: '/projects/project123'
366
- }).reply(200, {
367
- displayName: 'Test Project',
368
- id: 'project123',
369
- members: [
370
- {
371
- id: 'user123',
372
- roles: [
373
- {
374
- name: 'administrator'
375
- }
376
- ]
377
- }
378
- ],
379
- studioHost: 'test-project'
380
- });
381
- const { stdout } = await testCommand(Debug, [], {
382
- mocks: defaultMocks
383
- });
384
- expect(stdout).toContain('Global config');
385
- expect(stdout).toContain('Package versions:');
386
- // Should show the heading but no packages since the array is empty
387
- });
388
- test('handles error case with unknown error type', async ()=>{
389
- // Mock getCliToken to throw a non-Error object to trigger unknown error path
390
- vi.mocked(getCliToken).mockRejectedValue('string error');
391
- const { error } = await testCommand(Debug, [], {
392
- mocks: defaultMocks
393
- });
394
- expect(error).toBeTruthy();
395
- expect(error?.message).toContain('Failed to gather debug information');
396
- expect(error?.message).toContain('Unknown error');
397
- });
398
- test('handles global config error gracefully', async ()=>{
399
- // Mock authentication
400
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
401
- // Mock getConfig to throw an error
402
- vi.mocked(getConfig).mockRejectedValue(new Error('Config access error'));
403
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
404
- // Mock the /me API endpoint to return user info
405
- mockApi({
406
- apiVersion: 'v2025-08-06',
407
- uri: '/users/me'
408
- }).reply(200, {
409
- email: 'test@example.com',
410
- id: 'user123',
411
- name: 'Test User'
412
- });
413
- // Mock the project API endpoint to return project info
414
- mockApi({
415
- apiVersion: 'v2025-08-06',
416
- uri: '/projects/project123'
417
- }).reply(200, {
418
- displayName: 'Test Project',
419
- id: 'project123',
420
- members: [],
421
- studioHost: 'test-project'
422
- });
423
- const { stdout } = await testCommand(Debug, [], {
424
- mocks: defaultMocks
425
- });
426
- // Should continue to work despite global config error
427
- expect(stdout).toContain('Global config');
428
- expect(stdout).toContain('User:');
429
- expect(stdout).toContain('Project:');
430
- });
431
- test('handles user API error and shows error message', async ()=>{
432
- // Mock authentication
433
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
434
- vi.mocked(getConfig).mockImplementation(async (key)=>{
435
- if (key === 'authToken') return 'mock-auth-token';
436
- return undefined;
437
- });
438
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
439
- // Mock the /me API endpoint to return an error
440
- mockApi({
441
- apiVersion: 'v2025-08-06',
442
- uri: '/users/me'
443
- }).reply(500, {
444
- error: 'Internal server error'
445
- });
446
- const { stdout } = await testCommand(Debug, [], {
447
- mocks: defaultMocks
448
- });
449
- expect(stdout).toContain('User:');
450
- // Should show error message in red
451
- expect(stdout).toMatch(/Request failed with status code 500|Failed to fetch user info|Internal server error/);
452
- });
453
- test('handles project API error and continues gracefully', async ()=>{
454
- // Mock authentication
455
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
456
- vi.mocked(getConfig).mockImplementation(async (key)=>{
457
- if (key === 'authToken') return 'mock-auth-token';
458
- return undefined;
459
- });
460
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
461
- // Mock the /me API endpoint to return user info
462
- mockApi({
463
- apiVersion: 'v2025-08-06',
464
- uri: '/users/me'
465
- }).reply(200, {
466
- email: 'test@example.com',
467
- id: 'user123',
468
- name: 'Test User'
469
- });
470
- // Mock the project API endpoint to return an error
471
- mockApi({
472
- apiVersion: 'v2025-08-06',
473
- uri: '/projects/project123'
474
- }).reply(404, {
475
- error: 'Project not found'
476
- });
477
- const { stdout } = await testCommand(Debug, [], {
478
- mocks: defaultMocks
479
- });
480
- expect(stdout).toContain('User:');
481
- expect(stdout).toContain("Email: 'test@example.com'");
482
- // Should not contain Project section since it failed to load
483
- expect(stdout).not.toContain('Project:');
484
- });
485
- test('handles project with null response and shows error', async ()=>{
486
- // Mock authentication
487
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
488
- vi.mocked(getConfig).mockImplementation(async (key)=>{
489
- if (key === 'authToken') return 'mock-auth-token';
490
- return undefined;
491
- });
492
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
493
- // Mock the /me API endpoint to return user info
494
- mockApi({
495
- apiVersion: 'v2025-08-06',
496
- uri: '/users/me'
497
- }).reply(200, {
498
- email: 'test@example.com',
499
- id: 'user123',
500
- name: 'Test User'
501
- });
502
- // Mock the project API endpoint to return null
503
- mockApi({
504
- apiVersion: 'v2025-08-06',
505
- uri: '/projects/project123'
506
- }).reply(200, ()=>{
507
- return null;
508
- });
509
- const { stdout } = await testCommand(Debug, [], {
510
- mocks: defaultMocks
511
- });
512
- expect(stdout).toContain('User:');
513
- expect(stdout).toContain("Email: 'test@example.com'");
514
- // Project error is handled internally but not displayed to user
515
- expect(stdout).not.toContain('Project:');
516
- });
517
- test('handles project with no members array gracefully', async ()=>{
518
- // Mock authentication
519
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
520
- vi.mocked(getConfig).mockImplementation(async (key)=>{
521
- if (key === 'authToken') return 'mock-auth-token';
522
- return undefined;
523
- });
524
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
525
- // Mock the /me API endpoint to return user info
526
- mockApi({
527
- apiVersion: 'v2025-08-06',
528
- uri: '/users/me'
529
- }).reply(200, {
530
- email: 'test@example.com',
531
- id: 'user123',
532
- name: 'Test User'
533
- });
534
- // Mock the project API endpoint to return project with no members
535
- mockApi({
536
- apiVersion: 'v2025-08-06',
537
- uri: '/projects/project123'
538
- }).reply(200, {
539
- displayName: 'Test Project',
540
- id: 'project123',
541
- studioHost: 'test-project'
542
- });
543
- const { stdout } = await testCommand(Debug, [], {
544
- mocks: defaultMocks
545
- });
546
- expect(stdout).toContain('Project:');
547
- expect(stdout).toContain("Display name: 'Test Project'");
548
- expect(stdout).toContain("Roles: [ '<none>' ]");
549
- });
550
- test('handles project member with no roles gracefully', async ()=>{
551
- // Mock authentication
552
- vi.mocked(getCliToken).mockResolvedValue('mock-auth-token');
553
- vi.mocked(getConfig).mockImplementation(async (key)=>{
554
- if (key === 'authToken') return 'mock-auth-token';
555
- return undefined;
556
- });
557
- vi.mocked(findSanityModulesVersions).mockResolvedValue([]);
558
- // Mock the /me API endpoint to return user info
559
- mockApi({
560
- apiVersion: 'v2025-08-06',
561
- uri: '/users/me'
562
- }).reply(200, {
563
- email: 'test@example.com',
564
- id: 'user123',
565
- name: 'Test User'
566
- });
567
- // Mock the project API endpoint to return project with member but no roles
568
- mockApi({
569
- apiVersion: 'v2025-08-06',
570
- uri: '/projects/project123'
571
- }).reply(200, {
572
- displayName: 'Test Project',
573
- id: 'project123',
574
- members: [
575
- {
576
- id: 'user123'
577
- }
578
- ],
579
- studioHost: 'test-project'
580
- });
581
- const { stdout } = await testCommand(Debug, [], {
582
- mocks: defaultMocks
583
- });
584
- expect(stdout).toContain('Project:');
585
- expect(stdout).toContain("Display name: 'Test Project'");
586
- expect(stdout).toContain("Roles: [ '<none>' ]");
587
- });
588
- });
589
-
590
- //# sourceMappingURL=debug.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/commands/__tests__/debug.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliToken, getConfig} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {findSanityModulesVersions} from '../../actions/versions/findSanityModulesVersions.js'\nimport {Debug} from '../debug.js'\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core')>('@sanity/cli-core')\n return {\n ...actual,\n getCliToken: vi.fn(),\n getConfig: vi.fn(),\n }\n})\n\nvi.mock('../../actions/versions/findSanityModulesVersions.js', () => ({\n findSanityModulesVersions: vi.fn(),\n}))\n\nconst defaultProjectRoot = {\n directory: '/test/project',\n path: '/test/project/sanity.cli.ts',\n type: 'studio' as const,\n}\n\nconst defaultCliConfig = {\n api: {\n projectId: 'project123',\n },\n}\n\nconst defaultMocks = {\n cliConfig: defaultCliConfig,\n projectRoot: defaultProjectRoot,\n token: 'mock-auth-token',\n}\n\nafterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n})\n\ndescribe('#debug', () => {\n test('help text is correct', async () => {\n const {stdout} = await runCommand('debug --help')\n expect(stdout).toMatchInlineSnapshot(`\n \"Provides diagnostic info for Sanity Studio troubleshooting\n\n USAGE\n $ sanity debug [--secrets]\n\n FLAGS\n --secrets Include API keys in output\n\n DESCRIPTION\n Provides diagnostic info for Sanity Studio troubleshooting\n\n EXAMPLES\n $ sanity debug\n\n $ sanity debug --secrets\n\n \"\n `)\n })\n\n test('shows debug information with authentication and config details', async () => {\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n if (key === 'telemetryConsent')\n return {\n updatedAt: 1_234_567_890,\n value: {status: 'granted', type: 'explicit'},\n }\n return undefined\n })\n\n vi.mocked(findSanityModulesVersions).mockResolvedValue([\n {\n declared: '^3.0.0',\n installed: '3.0.0',\n isGlobal: false,\n isPinned: false,\n latest: '3.0.0',\n name: 'sanity',\n needsUpdate: false,\n },\n {\n declared: '^3.0.0',\n installed: '3.0.0',\n isGlobal: false,\n isPinned: false,\n latest: '3.1.0',\n name: '@sanity/cli',\n needsUpdate: true,\n },\n ])\n\n const {stdout} = await testCommand(Debug, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {\n api: {\n dataset: 'production',\n projectId: 'project123',\n },\n },\n },\n })\n\n expect(stdout).toContain('User:')\n expect(stdout).toContain('Authentication:')\n expect(stdout).toContain('<redacted>')\n expect(stdout).toContain('Global config')\n expect(stdout).toContain('Package versions:')\n expect(stdout).toContain('sanity')\n expect(stdout).toContain('3.0.0')\n expect(stdout).toContain('(up to date)')\n expect(stdout).toContain('(latest: 3.1.0)')\n })\n\n test('shows redacted auth token by default', async () => {\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('<redacted>')\n expect(stdout).toContain('(run with --secrets to reveal token)')\n expect(stdout).not.toContain('mock-auth-token')\n })\n\n test('shows actual auth token with --secrets flag', async () => {\n vi.mocked(getCliToken).mockResolvedValue('secret-token-12345')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'secret-token-12345'\n return undefined\n })\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n const {stdout} = await testCommand(Debug, ['--secrets'], {\n mocks: {\n ...defaultMocks,\n token: 'secret-token-12345',\n },\n })\n\n expect(stdout).toContain('secret-token-12345')\n expect(stdout).not.toContain('<redacted>')\n expect(stdout).not.toContain('(run with --secrets to reveal token)')\n })\n\n test('handles unauthenticated user', async () => {\n vi.mocked(getCliToken).mockResolvedValue(undefined)\n vi.mocked(getConfig).mockImplementation(async () => undefined)\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n const {error, stdout} = await testCommand(Debug, [], {\n mocks: {\n ...defaultMocks,\n token: undefined,\n },\n })\n\n // When not authenticated, either the command errors or shows \"Not logged in\" message\n if (error) {\n expect(error.message).toContain('Failed to gather debug information')\n } else {\n expect(stdout).toContain('Not logged in')\n }\n })\n\n test('shows package versions with update information', async () => {\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n\n vi.mocked(findSanityModulesVersions).mockResolvedValue([\n {\n declared: '^3.0.0',\n installed: '3.0.0',\n isGlobal: false,\n isPinned: false,\n latest: '3.0.0',\n name: 'sanity',\n needsUpdate: false,\n },\n {\n declared: '^2.9.0',\n installed: '2.9.0',\n isGlobal: false,\n isPinned: false,\n latest: '3.1.0',\n name: '@sanity/cli',\n needsUpdate: true,\n },\n {\n declared: '^3.0.0',\n installed: undefined,\n isGlobal: false,\n isPinned: false,\n latest: '3.0.0',\n name: '@sanity/types',\n needsUpdate: true,\n },\n ])\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Package versions:')\n expect(stdout).toContain('sanity')\n expect(stdout).toContain('3.0.0')\n expect(stdout).toContain('(up to date)')\n expect(stdout).toContain('(latest: 3.1.0)')\n expect(stdout).toContain('<missing>')\n })\n\n test('handles errors gracefully', async () => {\n vi.mocked(getCliToken).mockRejectedValue(new Error('Auth system unavailable'))\n\n const {error} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(error?.message).toContain('Failed to gather debug information')\n expect(error?.message).toContain('Auth system unavailable')\n })\n\n test('displays user information when user is present', async () => {\n // Mock authentication\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Mock the /me API endpoint to return user info\n mockApi({apiVersion: 'v2025-08-06', uri: '/users/me'}).reply(200, {\n email: 'test@example.com',\n id: 'user123',\n name: 'Test User',\n })\n\n // Mock the project API endpoint to return no project (404)\n mockApi({apiVersion: 'v2025-08-06', uri: '/projects/project123'}).reply(404)\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('User:')\n expect(stdout).toContain(\"Email: 'test@example.com'\")\n expect(stdout).toContain(\"ID: 'user123'\")\n expect(stdout).toContain(\"Name: 'Test User'\")\n })\n\n test('displays project information when project is present', async () => {\n // Mock authentication\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Mock the /me API endpoint to return user info\n mockApi({apiVersion: 'v2025-08-06', uri: '/users/me'}).reply(200, {\n email: 'test@example.com',\n id: 'user123',\n name: 'Test User',\n })\n\n // Mock the project API endpoint to return project info\n mockApi({apiVersion: 'v2025-08-06', uri: '/projects/project123'}).reply(200, {\n displayName: 'Test Project',\n id: 'project123',\n members: [\n {\n id: 'user123',\n roles: [{name: 'administrator'}],\n },\n ],\n studioHost: 'test-project',\n })\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Project:')\n expect(stdout).toContain(\"Display name: 'Test Project'\")\n expect(stdout).toContain(\"ID: 'project123'\")\n expect(stdout).toContain(\"Roles: [ 'administrator' ]\")\n })\n\n test('handles case when no auth token is present', async () => {\n // Mock no authentication\n vi.mocked(getCliToken).mockResolvedValue(undefined)\n vi.mocked(getConfig).mockImplementation(async () => undefined)\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Command should fail when no auth token is present since it requires authentication\n const {error, stdout} = await testCommand(Debug, [], {\n mocks: {\n ...defaultMocks,\n token: undefined,\n },\n })\n\n // When not authenticated, either the command errors or shows \"Not logged in\" message\n if (error) {\n expect(error.message).toContain('Failed to gather debug information')\n } else {\n expect(stdout).toContain('Not logged in')\n }\n })\n\n test('handles case when no project config is present', async () => {\n // Mock authentication\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Mock the /me API endpoint to return user info\n mockApi({apiVersion: 'v2025-08-06', uri: '/users/me'}).reply(200, {\n email: 'test@example.com',\n id: 'user123',\n name: 'Test User',\n })\n\n // No project API mock needed since no valid projectId\n\n const {stdout} = await testCommand(Debug, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {\n api: {\n // No projectId - this will cause project config to be invalid\n },\n },\n },\n })\n\n expect(stdout).toContain('Global config')\n expect(stdout).toContain('Project config')\n expect(stdout).toContain('Missing required \"api.projectId\" key')\n })\n\n test('handles case when no versions are present', async () => {\n // Mock authentication\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n // Mock findSanityModulesVersions to return empty array (no versions)\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Mock the /me API endpoint to return user info\n mockApi({apiVersion: 'v2025-08-06', uri: '/users/me'}).reply(200, {\n email: 'test@example.com',\n id: 'user123',\n name: 'Test User',\n })\n\n // Mock the project API endpoint to return project info\n mockApi({apiVersion: 'v2025-08-06', uri: '/projects/project123'}).reply(200, {\n displayName: 'Test Project',\n id: 'project123',\n members: [\n {\n id: 'user123',\n roles: [{name: 'administrator'}],\n },\n ],\n studioHost: 'test-project',\n })\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Global config')\n expect(stdout).toContain('Package versions:')\n // Should show the heading but no packages since the array is empty\n })\n\n test('handles error case with unknown error type', async () => {\n // Mock getCliToken to throw a non-Error object to trigger unknown error path\n vi.mocked(getCliToken).mockRejectedValue('string error')\n\n const {error} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(error).toBeTruthy()\n expect(error?.message).toContain('Failed to gather debug information')\n expect(error?.message).toContain('Unknown error')\n })\n\n test('handles global config error gracefully', async () => {\n // Mock authentication\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n // Mock getConfig to throw an error\n vi.mocked(getConfig).mockRejectedValue(new Error('Config access error'))\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Mock the /me API endpoint to return user info\n mockApi({apiVersion: 'v2025-08-06', uri: '/users/me'}).reply(200, {\n email: 'test@example.com',\n id: 'user123',\n name: 'Test User',\n })\n\n // Mock the project API endpoint to return project info\n mockApi({apiVersion: 'v2025-08-06', uri: '/projects/project123'}).reply(200, {\n displayName: 'Test Project',\n id: 'project123',\n members: [],\n studioHost: 'test-project',\n })\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n // Should continue to work despite global config error\n expect(stdout).toContain('Global config')\n expect(stdout).toContain('User:')\n expect(stdout).toContain('Project:')\n })\n\n test('handles user API error and shows error message', async () => {\n // Mock authentication\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Mock the /me API endpoint to return an error\n mockApi({apiVersion: 'v2025-08-06', uri: '/users/me'}).reply(500, {\n error: 'Internal server error',\n })\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('User:')\n // Should show error message in red\n expect(stdout).toMatch(\n /Request failed with status code 500|Failed to fetch user info|Internal server error/,\n )\n })\n\n test('handles project API error and continues gracefully', async () => {\n // Mock authentication\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Mock the /me API endpoint to return user info\n mockApi({apiVersion: 'v2025-08-06', uri: '/users/me'}).reply(200, {\n email: 'test@example.com',\n id: 'user123',\n name: 'Test User',\n })\n\n // Mock the project API endpoint to return an error\n mockApi({apiVersion: 'v2025-08-06', uri: '/projects/project123'}).reply(404, {\n error: 'Project not found',\n })\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('User:')\n expect(stdout).toContain(\"Email: 'test@example.com'\")\n // Should not contain Project section since it failed to load\n expect(stdout).not.toContain('Project:')\n })\n\n test('handles project with null response and shows error', async () => {\n // Mock authentication\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Mock the /me API endpoint to return user info\n mockApi({apiVersion: 'v2025-08-06', uri: '/users/me'}).reply(200, {\n email: 'test@example.com',\n id: 'user123',\n name: 'Test User',\n })\n\n // Mock the project API endpoint to return null\n mockApi({apiVersion: 'v2025-08-06', uri: '/projects/project123'}).reply(200, () => {\n return null\n })\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('User:')\n expect(stdout).toContain(\"Email: 'test@example.com'\")\n // Project error is handled internally but not displayed to user\n expect(stdout).not.toContain('Project:')\n })\n\n test('handles project with no members array gracefully', async () => {\n // Mock authentication\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Mock the /me API endpoint to return user info\n mockApi({apiVersion: 'v2025-08-06', uri: '/users/me'}).reply(200, {\n email: 'test@example.com',\n id: 'user123',\n name: 'Test User',\n })\n\n // Mock the project API endpoint to return project with no members\n mockApi({apiVersion: 'v2025-08-06', uri: '/projects/project123'}).reply(200, {\n displayName: 'Test Project',\n id: 'project123',\n studioHost: 'test-project',\n // No members array\n })\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Project:')\n expect(stdout).toContain(\"Display name: 'Test Project'\")\n expect(stdout).toContain(\"Roles: [ '<none>' ]\")\n })\n\n test('handles project member with no roles gracefully', async () => {\n // Mock authentication\n vi.mocked(getCliToken).mockResolvedValue('mock-auth-token')\n vi.mocked(getConfig).mockImplementation(async (key: string) => {\n if (key === 'authToken') return 'mock-auth-token'\n return undefined\n })\n vi.mocked(findSanityModulesVersions).mockResolvedValue([])\n\n // Mock the /me API endpoint to return user info\n mockApi({apiVersion: 'v2025-08-06', uri: '/users/me'}).reply(200, {\n email: 'test@example.com',\n id: 'user123',\n name: 'Test User',\n })\n\n // Mock the project API endpoint to return project with member but no roles\n mockApi({apiVersion: 'v2025-08-06', uri: '/projects/project123'}).reply(200, {\n displayName: 'Test Project',\n id: 'project123',\n members: [\n {\n id: 'user123',\n // No roles property\n },\n ],\n studioHost: 'test-project',\n })\n\n const {stdout} = await testCommand(Debug, [], {mocks: defaultMocks})\n\n expect(stdout).toContain('Project:')\n expect(stdout).toContain(\"Display name: 'Test Project'\")\n expect(stdout).toContain(\"Roles: [ '<none>' ]\")\n })\n})\n"],"names":["runCommand","getCliToken","getConfig","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","findSanityModulesVersions","Debug","mock","actual","importActual","fn","defaultProjectRoot","directory","path","type","defaultCliConfig","api","projectId","defaultMocks","cliConfig","projectRoot","token","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","mocked","mockResolvedValue","mockImplementation","key","updatedAt","value","status","undefined","declared","installed","isGlobal","isPinned","latest","name","needsUpdate","mocks","dataset","toContain","not","error","message","mockRejectedValue","Error","apiVersion","uri","reply","email","id","displayName","members","roles","studioHost","toBeTruthy","toMatch"],"mappings":"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"}