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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/dist/actions/dataset/create.d.ts +49 -0
  2. package/dist/actions/dataset/create.js +48 -0
  3. package/dist/actions/dataset/create.js.map +1 -0
  4. package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
  5. package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
  6. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
  7. package/dist/actions/debug/gatherDebugInfo.js +15 -21
  8. package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
  9. package/dist/actions/debug/types.d.ts +0 -2
  10. package/dist/actions/debug/types.js.map +1 -1
  11. package/dist/actions/deploy/deployApp.js +13 -0
  12. package/dist/actions/deploy/deployApp.js.map +1 -1
  13. package/dist/actions/init/remoteTemplate.js +1 -1
  14. package/dist/actions/init/remoteTemplate.js.map +1 -1
  15. package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
  16. package/dist/actions/manifest/extractAppManifest.js +51 -0
  17. package/dist/actions/manifest/extractAppManifest.js.map +1 -0
  18. package/dist/actions/manifest/extractManifest.js +1 -1
  19. package/dist/actions/manifest/extractManifest.js.map +1 -1
  20. package/dist/actions/manifest/types.d.ts +6 -1
  21. package/dist/actions/manifest/types.js.map +1 -1
  22. package/dist/actions/media/importAspects.js +2 -1
  23. package/dist/actions/media/importAspects.js.map +1 -1
  24. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +1 -1
  25. package/dist/commands/dataset/create.d.ts +0 -2
  26. package/dist/commands/dataset/create.js +8 -54
  27. package/dist/commands/dataset/create.js.map +1 -1
  28. package/dist/commands/debug.js +5 -9
  29. package/dist/commands/debug.js.map +1 -1
  30. package/dist/commands/init.d.ts +6 -1
  31. package/dist/commands/init.js +358 -20
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/commands/manifest/extract.js +7 -8
  34. package/dist/commands/manifest/extract.js.map +1 -1
  35. package/dist/config/createCliConfig.d.ts +9 -0
  36. package/dist/prompts/init/promptForTypescript.d.ts +2 -0
  37. package/dist/prompts/init/promptForTypescript.js +15 -0
  38. package/dist/prompts/init/promptForTypescript.js.map +1 -0
  39. package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
  40. package/dist/prompts/promptForDatasetAclMode.js +27 -0
  41. package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
  42. package/dist/prompts/promptForDatasetName.d.ts +1 -1
  43. package/dist/prompts/promptForDatasetName.js +4 -1
  44. package/dist/prompts/promptForDatasetName.js.map +1 -1
  45. package/dist/services/organizations.d.ts +3 -1
  46. package/dist/services/organizations.js +2 -1
  47. package/dist/services/organizations.js.map +1 -1
  48. package/dist/services/user.d.ts +5 -0
  49. package/dist/services/user.js +12 -1
  50. package/dist/services/user.js.map +1 -1
  51. package/dist/services/userApplications.d.ts +3 -1
  52. package/dist/services/userApplications.js +5 -1
  53. package/dist/services/userApplications.js.map +1 -1
  54. package/oclif.manifest.json +113 -113
  55. package/package.json +16 -12
  56. package/templates/app-quickstart/src/App.css +20 -0
  57. package/templates/app-quickstart/src/App.tsx +25 -0
  58. package/templates/app-quickstart/src/ExampleComponent.css +90 -0
  59. package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
  60. package/templates/app-sanity-ui/src/App.tsx +34 -0
  61. package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
  62. package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
  63. package/templates/blog/README.md +11 -0
  64. package/templates/blog/schemaTypes/author.js +50 -0
  65. package/templates/blog/schemaTypes/blockContent.js +67 -0
  66. package/templates/blog/schemaTypes/category.js +19 -0
  67. package/templates/blog/schemaTypes/index.js +6 -0
  68. package/templates/blog/schemaTypes/post.js +65 -0
  69. package/templates/blog/static/.gitkeep +1 -0
  70. package/templates/clean/README.md +9 -0
  71. package/templates/clean/schemaTypes/index.js +1 -0
  72. package/templates/clean/static/.gitkeep +1 -0
  73. package/templates/ecommerce/README.md +11 -0
  74. package/templates/ecommerce/plugins/.gitkeep +1 -0
  75. package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
  76. package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
  77. package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
  78. package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
  79. package/templates/ecommerce/schemaTypes/category.js +39 -0
  80. package/templates/ecommerce/schemaTypes/index.js +23 -0
  81. package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
  82. package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
  83. package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
  84. package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
  85. package/templates/ecommerce/schemaTypes/product.js +83 -0
  86. package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
  87. package/templates/ecommerce/schemaTypes/vendor.js +39 -0
  88. package/templates/ecommerce/static/.gitkeep +1 -0
  89. package/templates/get-started/README.md +9 -0
  90. package/templates/get-started/plugins/.gitkeep +1 -0
  91. package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
  92. package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
  93. package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
  94. package/templates/get-started/schemaTypes/index.ts +1 -0
  95. package/templates/get-started/static/.gitkeep +1 -0
  96. package/templates/moviedb/README.md +10 -0
  97. package/templates/moviedb/schemaTypes/blockContent.js +67 -0
  98. package/templates/moviedb/schemaTypes/castMember.js +37 -0
  99. package/templates/moviedb/schemaTypes/crewMember.js +52 -0
  100. package/templates/moviedb/schemaTypes/index.js +22 -0
  101. package/templates/moviedb/schemaTypes/movie.js +85 -0
  102. package/templates/moviedb/schemaTypes/person.js +37 -0
  103. package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
  104. package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
  105. package/templates/moviedb/schemaTypes/screening.js +81 -0
  106. package/templates/moviedb/static/.gitkeep +1 -0
  107. package/templates/quickstart/README.md +9 -0
  108. package/templates/quickstart/schemaTypes/index.js +1 -0
  109. package/templates/quickstart/static/.gitkeep +1 -0
  110. package/templates/shared/gitignore.txt +29 -0
  111. package/templates/shared/tsconfig.json +17 -0
  112. package/templates/shopify/README.md +85 -0
  113. package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
  114. package/templates/shopify/components/icons/Shopify.tsx +20 -0
  115. package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
  116. package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
  117. package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
  118. package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
  119. package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
  120. package/templates/shopify/components/media/ColorTheme.tsx +38 -0
  121. package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
  122. package/templates/shopify/components/studio/Navbar.tsx +29 -0
  123. package/templates/shopify/constants.ts +61 -0
  124. package/templates/shopify/docs/features.md +158 -0
  125. package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
  126. package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
  127. package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
  128. package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
  129. package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
  130. package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
  131. package/templates/shopify/schemaTypes/documents/page.ts +70 -0
  132. package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
  133. package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
  134. package/templates/shopify/schemaTypes/index.ts +108 -0
  135. package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
  136. package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
  137. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
  138. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
  139. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
  140. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
  141. package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
  142. package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
  143. package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
  144. package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
  145. package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
  146. package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
  147. package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
  148. package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
  149. package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
  150. package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
  151. package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
  152. package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
  153. package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
  154. package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
  155. package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
  156. package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
  157. package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
  158. package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
  159. package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
  160. package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
  161. package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
  162. package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
  163. package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
  164. package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
  165. package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
  166. package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
  167. package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
  168. package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
  169. package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
  170. package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
  171. package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
  172. package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
  173. package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
  174. package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
  175. package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
  176. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
  177. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
  178. package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
  179. package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
  180. package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
  181. package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
  182. package/templates/shopify/static/.gitkeep +1 -0
  183. package/templates/shopify/structure/collectionStructure.ts +9 -0
  184. package/templates/shopify/structure/colorThemeStructure.ts +9 -0
  185. package/templates/shopify/structure/homeStructure.ts +9 -0
  186. package/templates/shopify/structure/index.ts +57 -0
  187. package/templates/shopify/structure/pageStructure.ts +11 -0
  188. package/templates/shopify/structure/productStructure.ts +51 -0
  189. package/templates/shopify/structure/settingStructure.ts +9 -0
  190. package/templates/shopify/utils/blocksToText.ts +20 -0
  191. package/templates/shopify/utils/defineStructure.ts +11 -0
  192. package/templates/shopify/utils/getPriceRange.ts +24 -0
  193. package/templates/shopify/utils/shopifyUrls.ts +22 -0
  194. package/templates/shopify/utils/validateSlug.ts +18 -0
  195. package/templates/shopify-online-storefront/README.md +54 -0
  196. package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
  197. package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
  198. package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
  199. package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
  200. package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
  201. package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
  202. package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
  203. package/templates/shopify-online-storefront/constants.ts +18 -0
  204. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
  205. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
  206. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
  207. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
  208. package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
  209. package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
  210. package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
  211. package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
  212. package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
  213. package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
  214. package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
  215. package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
  216. package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
  217. package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
  218. package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
  219. package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
  220. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
  221. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
  222. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
  223. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
  224. package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
  225. package/templates/shopify-online-storefront/structure/index.ts +37 -0
  226. package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
  227. package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
  228. package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
  229. package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
  230. package/dist/actions/build/__tests__/buildApp.test.js +0 -367
  231. package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
  232. package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
  233. package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
  234. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
  235. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
  236. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
  237. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
  238. package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
  239. package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
  240. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
  241. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
  242. package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
  243. package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
  244. package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
  245. package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
  246. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
  247. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
  248. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
  249. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
  250. package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
  251. package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
  252. package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
  253. package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
  254. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
  255. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
  256. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
  257. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
  258. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
  259. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
  260. package/dist/actions/media/__tests__/importMedia.test.js +0 -182
  261. package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
  262. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
  263. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
  264. package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
  265. package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
  266. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
  267. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
  268. package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
  269. package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
  270. package/dist/commands/__tests__/blueprints.test.js +0 -54
  271. package/dist/commands/__tests__/blueprints.test.js.map +0 -1
  272. package/dist/commands/__tests__/build.test.js +0 -132
  273. package/dist/commands/__tests__/build.test.js.map +0 -1
  274. package/dist/commands/__tests__/codemod.test.js +0 -271
  275. package/dist/commands/__tests__/codemod.test.js.map +0 -1
  276. package/dist/commands/__tests__/debug.test.js +0 -590
  277. package/dist/commands/__tests__/debug.test.js.map +0 -1
  278. package/dist/commands/__tests__/deploy.test.js +0 -1945
  279. package/dist/commands/__tests__/deploy.test.js.map +0 -1
  280. package/dist/commands/__tests__/dev.test.js +0 -453
  281. package/dist/commands/__tests__/dev.test.js.map +0 -1
  282. package/dist/commands/__tests__/exec.test.js +0 -207
  283. package/dist/commands/__tests__/exec.test.js.map +0 -1
  284. package/dist/commands/__tests__/init/init.authentication.test.js +0 -73
  285. package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
  286. package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -195
  287. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
  288. package/dist/commands/__tests__/init/init.plan.test.js +0 -279
  289. package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
  290. package/dist/commands/__tests__/init/init.setup.test.js +0 -335
  291. package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
  292. package/dist/commands/__tests__/install.test.js +0 -282
  293. package/dist/commands/__tests__/install.test.js.map +0 -1
  294. package/dist/commands/__tests__/learn.test.js +0 -29
  295. package/dist/commands/__tests__/learn.test.js.map +0 -1
  296. package/dist/commands/__tests__/logout.test.js +0 -91
  297. package/dist/commands/__tests__/logout.test.js.map +0 -1
  298. package/dist/commands/__tests__/manage.test.js +0 -110
  299. package/dist/commands/__tests__/manage.test.js.map +0 -1
  300. package/dist/commands/__tests__/migration.test.js +0 -119
  301. package/dist/commands/__tests__/migration.test.js.map +0 -1
  302. package/dist/commands/__tests__/preview.test.js +0 -261
  303. package/dist/commands/__tests__/preview.test.js.map +0 -1
  304. package/dist/commands/__tests__/start.test.js +0 -253
  305. package/dist/commands/__tests__/start.test.js.map +0 -1
  306. package/dist/commands/__tests__/undeploy.test.js +0 -382
  307. package/dist/commands/__tests__/undeploy.test.js.map +0 -1
  308. package/dist/commands/__tests__/versions.test.js +0 -142
  309. package/dist/commands/__tests__/versions.test.js.map +0 -1
  310. package/dist/commands/backup/__tests__/disable.test.js +0 -204
  311. package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
  312. package/dist/commands/backup/__tests__/download.test.js +0 -768
  313. package/dist/commands/backup/__tests__/download.test.js.map +0 -1
  314. package/dist/commands/backup/__tests__/enable.test.js +0 -286
  315. package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
  316. package/dist/commands/backup/__tests__/list.test.js +0 -330
  317. package/dist/commands/backup/__tests__/list.test.js.map +0 -1
  318. package/dist/commands/cors/__tests__/add.test.js +0 -376
  319. package/dist/commands/cors/__tests__/add.test.js.map +0 -1
  320. package/dist/commands/cors/__tests__/delete.test.js +0 -308
  321. package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
  322. package/dist/commands/cors/__tests__/list.test.js +0 -241
  323. package/dist/commands/cors/__tests__/list.test.js.map +0 -1
  324. package/dist/commands/dataset/__tests__/copy.test.js +0 -628
  325. package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
  326. package/dist/commands/dataset/__tests__/create.test.js +0 -342
  327. package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
  328. package/dist/commands/dataset/__tests__/delete.test.js +0 -231
  329. package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
  330. package/dist/commands/dataset/__tests__/export.test.js +0 -601
  331. package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
  332. package/dist/commands/dataset/__tests__/import.test.js +0 -53
  333. package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
  334. package/dist/commands/dataset/__tests__/list.test.js +0 -216
  335. package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
  336. package/dist/commands/dataset/alias/__tests__/create.test.js +0 -339
  337. package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
  338. package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -247
  339. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
  340. package/dist/commands/dataset/alias/__tests__/link.test.js +0 -376
  341. package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
  342. package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -313
  343. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
  344. package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -128
  345. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
  346. package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -198
  347. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
  348. package/dist/commands/docs/__tests__/browse.test.js +0 -29
  349. package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
  350. package/dist/commands/docs/__tests__/read.test.js +0 -78
  351. package/dist/commands/docs/__tests__/read.test.js.map +0 -1
  352. package/dist/commands/docs/__tests__/search.test.js +0 -255
  353. package/dist/commands/docs/__tests__/search.test.js.map +0 -1
  354. package/dist/commands/documents/__tests__/create.test.js +0 -1030
  355. package/dist/commands/documents/__tests__/create.test.js.map +0 -1
  356. package/dist/commands/documents/__tests__/delete.test.js +0 -300
  357. package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
  358. package/dist/commands/documents/__tests__/get.test.js +0 -182
  359. package/dist/commands/documents/__tests__/get.test.js.map +0 -1
  360. package/dist/commands/documents/__tests__/query.test.js +0 -300
  361. package/dist/commands/documents/__tests__/query.test.js.map +0 -1
  362. package/dist/commands/documents/__tests__/validate.test.js +0 -249
  363. package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
  364. package/dist/commands/graphql/__tests__/list.test.js +0 -240
  365. package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
  366. package/dist/commands/graphql/__tests__/undeploy.test.js +0 -410
  367. package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
  368. package/dist/commands/hook/__tests__/attempt.test.js +0 -275
  369. package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
  370. package/dist/commands/hook/__tests__/create.test.js +0 -119
  371. package/dist/commands/hook/__tests__/create.test.js.map +0 -1
  372. package/dist/commands/hook/__tests__/delete.test.js +0 -233
  373. package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
  374. package/dist/commands/hook/__tests__/list.test.js +0 -145
  375. package/dist/commands/hook/__tests__/list.test.js.map +0 -1
  376. package/dist/commands/hook/__tests__/logs.test.js +0 -798
  377. package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
  378. package/dist/commands/manifest/__tests__/extract.test.js +0 -132
  379. package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
  380. package/dist/commands/mcp/__tests__/configure.test.js +0 -397
  381. package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
  382. package/dist/commands/media/__tests__/create-aspect.test.js +0 -173
  383. package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
  384. package/dist/commands/media/__tests__/delete-aspect.test.js +0 -342
  385. package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
  386. package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -619
  387. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
  388. package/dist/commands/media/__tests__/export.test.js +0 -697
  389. package/dist/commands/media/__tests__/export.test.js.map +0 -1
  390. package/dist/commands/media/__tests__/import.test.js +0 -347
  391. package/dist/commands/media/__tests__/import.test.js.map +0 -1
  392. package/dist/commands/openapi/__tests__/get.test.js +0 -149
  393. package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
  394. package/dist/commands/openapi/__tests__/list.test.js +0 -113
  395. package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
  396. package/dist/commands/projects/__tests__/list.test.js +0 -154
  397. package/dist/commands/projects/__tests__/list.test.js.map +0 -1
  398. package/dist/commands/schema/__tests__/delete.test.js +0 -454
  399. package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
  400. package/dist/commands/schema/__tests__/deploy.test.js +0 -348
  401. package/dist/commands/schema/__tests__/deploy.test.js.map +0 -1
  402. package/dist/commands/schema/__tests__/extract.test.js +0 -121
  403. package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
  404. package/dist/commands/schema/__tests__/list.test.js +0 -399
  405. package/dist/commands/schema/__tests__/list.test.js.map +0 -1
  406. package/dist/commands/schema/__tests__/validate.test.js +0 -121
  407. package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
  408. package/dist/commands/telemetry/__tests__/disable.test.js +0 -147
  409. package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
  410. package/dist/commands/telemetry/__tests__/enable.test.js +0 -133
  411. package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
  412. package/dist/commands/telemetry/__tests__/status.test.js +0 -155
  413. package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
  414. package/dist/commands/tokens/__tests__/add.test.js +0 -435
  415. package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
  416. package/dist/commands/tokens/__tests__/delete.test.js +0 -405
  417. package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
  418. package/dist/commands/tokens/__tests__/list.test.js +0 -395
  419. package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
  420. package/dist/commands/users/__tests__/invite.test.js +0 -362
  421. package/dist/commands/users/__tests__/invite.test.js.map +0 -1
  422. package/dist/commands/users/__tests__/list.test.js +0 -407
  423. package/dist/commands/users/__tests__/list.test.js.map +0 -1
  424. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
  425. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
  426. package/dist/services/__tests__/datasetAliases.test.js +0 -131
  427. package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
  428. package/dist/services/__tests__/datasets.test.js +0 -436
  429. package/dist/services/__tests__/datasets.test.js.map +0 -1
  430. package/dist/services/__tests__/graphql.test.js +0 -43
  431. package/dist/services/__tests__/graphql.test.js.map +0 -1
  432. package/dist/services/__tests__/mediaLibraries.test.js +0 -88
  433. package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
  434. package/dist/services/__tests__/projects.test.js +0 -41
  435. package/dist/services/__tests__/projects.test.js.map +0 -1
  436. package/dist/services/__tests__/userApplications.test.js +0 -113
  437. package/dist/services/__tests__/userApplications.test.js.map +0 -1
  438. package/dist/util/__tests__/appId.test.js +0 -31
  439. package/dist/util/__tests__/appId.test.js.map +0 -1
  440. package/dist/util/__tests__/cliClient.test.js +0 -184
  441. package/dist/util/__tests__/cliClient.test.js.map +0 -1
  442. package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
  443. package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
  444. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
  445. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
  446. package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
  447. package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
  448. package/dist/util/__tests__/getCliVersion.test.js +0 -28
  449. package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
  450. package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
  451. package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
  452. package/dist/util/__tests__/getWorkspace.test.js +0 -37
  453. package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
  454. package/dist/util/__tests__/readPackageJson.test.js +0 -69
  455. package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
  456. package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
  457. package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
  458. package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
  459. package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
  460. package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
  461. 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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"}