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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/dist/actions/dataset/create.d.ts +49 -0
  2. package/dist/actions/dataset/create.js +48 -0
  3. package/dist/actions/dataset/create.js.map +1 -0
  4. package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
  5. package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
  6. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
  7. package/dist/actions/debug/gatherDebugInfo.js +15 -21
  8. package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
  9. package/dist/actions/debug/types.d.ts +0 -2
  10. package/dist/actions/debug/types.js.map +1 -1
  11. package/dist/actions/deploy/deployApp.js +13 -0
  12. package/dist/actions/deploy/deployApp.js.map +1 -1
  13. package/dist/actions/dev/startStudioDevServer.js +3 -8
  14. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  15. package/dist/actions/dev/types.d.ts +1 -3
  16. package/dist/actions/dev/types.js.map +1 -1
  17. package/dist/actions/documents/validate.d.ts +0 -2
  18. package/dist/actions/documents/validate.js +21 -1
  19. package/dist/actions/documents/validate.js.map +1 -1
  20. package/dist/actions/exec/execScript.js +1 -1
  21. package/dist/actions/exec/execScript.js.map +1 -1
  22. package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
  23. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
  24. package/dist/actions/init/remoteTemplate.js +1 -1
  25. package/dist/actions/init/remoteTemplate.js.map +1 -1
  26. package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
  27. package/dist/actions/manifest/extractAppManifest.js +51 -0
  28. package/dist/actions/manifest/extractAppManifest.js.map +1 -0
  29. package/dist/actions/manifest/extractManifest.js +2 -5
  30. package/dist/actions/manifest/extractManifest.js.map +1 -1
  31. package/dist/actions/manifest/types.d.ts +6 -1
  32. package/dist/actions/manifest/types.js.map +1 -1
  33. package/dist/actions/media/importAspects.js +2 -1
  34. package/dist/actions/media/importAspects.js.map +1 -1
  35. package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
  36. package/dist/actions/schema/deleteSchemaAction.js +12 -17
  37. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  38. package/dist/actions/schema/deploySchemas.d.ts +15 -0
  39. package/dist/actions/schema/deploySchemas.js +98 -0
  40. package/dist/actions/schema/deploySchemas.js.map +1 -0
  41. package/dist/actions/schema/listSchemas.d.ts +12 -0
  42. package/dist/actions/schema/listSchemas.js +119 -0
  43. package/dist/actions/schema/listSchemas.js.map +1 -0
  44. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
  45. package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
  46. package/dist/actions/schema/utils/debug.d.ts +2 -0
  47. package/dist/actions/schema/utils/debug.js +5 -0
  48. package/dist/actions/schema/utils/debug.js.map +1 -0
  49. package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
  50. package/dist/actions/schema/utils/manifestExtractor.js +12 -17
  51. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  52. package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
  53. package/dist/actions/schema/utils/manifestReader.js +6 -12
  54. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  55. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
  56. package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
  57. package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
  58. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
  59. package/dist/actions/schema/utils/schemaStoreValidation.js +38 -125
  60. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
  61. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
  62. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
  63. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
  64. package/dist/actions/users/getMembersForProject.d.ts +1 -3
  65. package/dist/actions/users/getMembersForProject.js +6 -17
  66. package/dist/actions/users/getMembersForProject.js.map +1 -1
  67. package/dist/actions/users/types.d.ts +0 -11
  68. package/dist/actions/users/types.js.map +1 -1
  69. package/dist/commands/backup/disable.js +5 -11
  70. package/dist/commands/backup/disable.js.map +1 -1
  71. package/dist/commands/backup/enable.js +5 -11
  72. package/dist/commands/backup/enable.js.map +1 -1
  73. package/dist/commands/backup/list.js +7 -8
  74. package/dist/commands/backup/list.js.map +1 -1
  75. package/dist/commands/cors/add.js +5 -13
  76. package/dist/commands/cors/add.js.map +1 -1
  77. package/dist/commands/cors/delete.js +7 -15
  78. package/dist/commands/cors/delete.js.map +1 -1
  79. package/dist/commands/cors/list.js +2 -10
  80. package/dist/commands/cors/list.js.map +1 -1
  81. package/dist/commands/dataset/create.d.ts +0 -2
  82. package/dist/commands/dataset/create.js +8 -54
  83. package/dist/commands/dataset/create.js.map +1 -1
  84. package/dist/commands/dataset/export.js +4 -4
  85. package/dist/commands/dataset/export.js.map +1 -1
  86. package/dist/commands/debug.js +5 -9
  87. package/dist/commands/debug.js.map +1 -1
  88. package/dist/commands/dev.js +0 -1
  89. package/dist/commands/dev.js.map +1 -1
  90. package/dist/commands/documents/create.d.ts +1 -0
  91. package/dist/commands/documents/create.js +10 -9
  92. package/dist/commands/documents/create.js.map +1 -1
  93. package/dist/commands/documents/delete.js +2 -3
  94. package/dist/commands/documents/delete.js.map +1 -1
  95. package/dist/commands/documents/get.js +2 -3
  96. package/dist/commands/documents/get.js.map +1 -1
  97. package/dist/commands/documents/query.js +2 -3
  98. package/dist/commands/documents/query.js.map +1 -1
  99. package/dist/commands/documents/validate.js +0 -20
  100. package/dist/commands/documents/validate.js.map +1 -1
  101. package/dist/commands/graphql/list.js +2 -2
  102. package/dist/commands/graphql/list.js.map +1 -1
  103. package/dist/commands/graphql/undeploy.js +4 -9
  104. package/dist/commands/graphql/undeploy.js.map +1 -1
  105. package/dist/commands/hook/create.js +2 -6
  106. package/dist/commands/hook/create.js.map +1 -1
  107. package/dist/commands/hook/delete.js +5 -17
  108. package/dist/commands/hook/delete.js.map +1 -1
  109. package/dist/commands/hook/list.js +2 -8
  110. package/dist/commands/hook/list.js.map +1 -1
  111. package/dist/commands/init.d.ts +6 -1
  112. package/dist/commands/init.js +358 -20
  113. package/dist/commands/init.js.map +1 -1
  114. package/dist/commands/manifest/extract.js +7 -8
  115. package/dist/commands/manifest/extract.js.map +1 -1
  116. package/dist/commands/media/export.js +2 -2
  117. package/dist/commands/media/export.js.map +1 -1
  118. package/dist/commands/media/import.js +2 -2
  119. package/dist/commands/media/import.js.map +1 -1
  120. package/dist/commands/projects/list.js +2 -6
  121. package/dist/commands/projects/list.js.map +1 -1
  122. package/dist/commands/schema/delete.d.ts +1 -1
  123. package/dist/commands/schema/delete.js +20 -23
  124. package/dist/commands/schema/delete.js.map +1 -1
  125. package/dist/commands/schema/deploy.d.ts +16 -0
  126. package/dist/commands/schema/deploy.js +98 -0
  127. package/dist/commands/schema/deploy.js.map +1 -0
  128. package/dist/commands/schema/list.d.ts +15 -0
  129. package/dist/commands/schema/list.js +104 -0
  130. package/dist/commands/schema/list.js.map +1 -0
  131. package/dist/commands/tokens/add.js +3 -5
  132. package/dist/commands/tokens/add.js.map +1 -1
  133. package/dist/commands/users/invite.js +6 -17
  134. package/dist/commands/users/invite.js.map +1 -1
  135. package/dist/commands/users/list.js +4 -7
  136. package/dist/commands/users/list.js.map +1 -1
  137. package/dist/config/createCliConfig.d.ts +13 -4
  138. package/dist/prompts/init/promptForTypescript.d.ts +2 -0
  139. package/dist/prompts/init/promptForTypescript.js +15 -0
  140. package/dist/prompts/init/promptForTypescript.js.map +1 -0
  141. package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
  142. package/dist/prompts/promptForDatasetAclMode.js +27 -0
  143. package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
  144. package/dist/prompts/promptForDatasetName.d.ts +1 -1
  145. package/dist/prompts/promptForDatasetName.js +4 -1
  146. package/dist/prompts/promptForDatasetName.js.map +1 -1
  147. package/dist/services/backup.d.ts +8 -0
  148. package/dist/services/backup.js +19 -0
  149. package/dist/services/backup.js.map +1 -1
  150. package/dist/services/cors.d.ts +23 -0
  151. package/dist/services/cors.js +38 -0
  152. package/dist/services/cors.js.map +1 -0
  153. package/dist/services/graphql.d.ts +7 -0
  154. package/dist/services/graphql.js +11 -0
  155. package/dist/services/graphql.js.map +1 -1
  156. package/dist/services/hooks.d.ts +2 -0
  157. package/dist/services/hooks.js +19 -0
  158. package/dist/services/hooks.js.map +1 -1
  159. package/dist/services/organizations.d.ts +4 -2
  160. package/dist/services/organizations.js +3 -2
  161. package/dist/services/organizations.js.map +1 -1
  162. package/dist/services/projects.d.ts +11 -0
  163. package/dist/services/projects.js +41 -0
  164. package/dist/services/projects.js.map +1 -1
  165. package/dist/services/schemas.d.ts +4 -0
  166. package/dist/services/schemas.js +40 -0
  167. package/dist/services/schemas.js.map +1 -0
  168. package/dist/services/user.d.ts +13 -0
  169. package/dist/services/user.js +27 -3
  170. package/dist/services/user.js.map +1 -1
  171. package/dist/services/userApplications.d.ts +3 -1
  172. package/dist/services/userApplications.js +5 -1
  173. package/dist/services/userApplications.js.map +1 -1
  174. package/dist/util/errorMessages.d.ts +1 -0
  175. package/dist/util/errorMessages.js +1 -0
  176. package/dist/util/errorMessages.js.map +1 -1
  177. package/dist/util/getCliVersion.js +1 -1
  178. package/dist/util/getCliVersion.js.map +1 -1
  179. package/dist/util/readPackageJson.d.ts +1 -15
  180. package/dist/util/readPackageJson.js +1 -1
  181. package/dist/util/readPackageJson.js.map +1 -1
  182. package/dist/util/uniqBy.d.ts +1 -0
  183. package/dist/util/uniqBy.js +14 -0
  184. package/dist/util/uniqBy.js.map +1 -0
  185. package/oclif.manifest.json +284 -139
  186. package/package.json +36 -33
  187. package/templates/app-quickstart/src/App.css +20 -0
  188. package/templates/app-quickstart/src/App.tsx +25 -0
  189. package/templates/app-quickstart/src/ExampleComponent.css +90 -0
  190. package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
  191. package/templates/app-sanity-ui/src/App.tsx +34 -0
  192. package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
  193. package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
  194. package/templates/blog/README.md +11 -0
  195. package/templates/blog/schemaTypes/author.js +50 -0
  196. package/templates/blog/schemaTypes/blockContent.js +67 -0
  197. package/templates/blog/schemaTypes/category.js +19 -0
  198. package/templates/blog/schemaTypes/index.js +6 -0
  199. package/templates/blog/schemaTypes/post.js +65 -0
  200. package/templates/blog/static/.gitkeep +1 -0
  201. package/templates/clean/README.md +9 -0
  202. package/templates/clean/schemaTypes/index.js +1 -0
  203. package/templates/clean/static/.gitkeep +1 -0
  204. package/templates/ecommerce/README.md +11 -0
  205. package/templates/ecommerce/plugins/.gitkeep +1 -0
  206. package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
  207. package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
  208. package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
  209. package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
  210. package/templates/ecommerce/schemaTypes/category.js +39 -0
  211. package/templates/ecommerce/schemaTypes/index.js +23 -0
  212. package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
  213. package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
  214. package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
  215. package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
  216. package/templates/ecommerce/schemaTypes/product.js +83 -0
  217. package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
  218. package/templates/ecommerce/schemaTypes/vendor.js +39 -0
  219. package/templates/ecommerce/static/.gitkeep +1 -0
  220. package/templates/get-started/README.md +9 -0
  221. package/templates/get-started/plugins/.gitkeep +1 -0
  222. package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
  223. package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
  224. package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
  225. package/templates/get-started/schemaTypes/index.ts +1 -0
  226. package/templates/get-started/static/.gitkeep +1 -0
  227. package/templates/moviedb/README.md +10 -0
  228. package/templates/moviedb/schemaTypes/blockContent.js +67 -0
  229. package/templates/moviedb/schemaTypes/castMember.js +37 -0
  230. package/templates/moviedb/schemaTypes/crewMember.js +52 -0
  231. package/templates/moviedb/schemaTypes/index.js +22 -0
  232. package/templates/moviedb/schemaTypes/movie.js +85 -0
  233. package/templates/moviedb/schemaTypes/person.js +37 -0
  234. package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
  235. package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
  236. package/templates/moviedb/schemaTypes/screening.js +81 -0
  237. package/templates/moviedb/static/.gitkeep +1 -0
  238. package/templates/quickstart/README.md +9 -0
  239. package/templates/quickstart/schemaTypes/index.js +1 -0
  240. package/templates/quickstart/static/.gitkeep +1 -0
  241. package/templates/shared/gitignore.txt +29 -0
  242. package/templates/shared/tsconfig.json +17 -0
  243. package/templates/shopify/README.md +85 -0
  244. package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
  245. package/templates/shopify/components/icons/Shopify.tsx +20 -0
  246. package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
  247. package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
  248. package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
  249. package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
  250. package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
  251. package/templates/shopify/components/media/ColorTheme.tsx +38 -0
  252. package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
  253. package/templates/shopify/components/studio/Navbar.tsx +29 -0
  254. package/templates/shopify/constants.ts +61 -0
  255. package/templates/shopify/docs/features.md +158 -0
  256. package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
  257. package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
  258. package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
  259. package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
  260. package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
  261. package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
  262. package/templates/shopify/schemaTypes/documents/page.ts +70 -0
  263. package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
  264. package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
  265. package/templates/shopify/schemaTypes/index.ts +108 -0
  266. package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
  267. package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
  268. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
  269. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
  270. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
  271. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
  272. package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
  273. package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
  274. package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
  275. package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
  276. package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
  277. package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
  278. package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
  279. package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
  280. package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
  281. package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
  282. package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
  283. package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
  284. package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
  285. package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
  286. package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
  287. package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
  288. package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
  289. package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
  290. package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
  291. package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
  292. package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
  293. package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
  294. package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
  295. package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
  296. package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
  297. package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
  298. package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
  299. package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
  300. package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
  301. package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
  302. package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
  303. package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
  304. package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
  305. package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
  306. package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
  307. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
  308. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
  309. package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
  310. package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
  311. package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
  312. package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
  313. package/templates/shopify/static/.gitkeep +1 -0
  314. package/templates/shopify/structure/collectionStructure.ts +9 -0
  315. package/templates/shopify/structure/colorThemeStructure.ts +9 -0
  316. package/templates/shopify/structure/homeStructure.ts +9 -0
  317. package/templates/shopify/structure/index.ts +57 -0
  318. package/templates/shopify/structure/pageStructure.ts +11 -0
  319. package/templates/shopify/structure/productStructure.ts +51 -0
  320. package/templates/shopify/structure/settingStructure.ts +9 -0
  321. package/templates/shopify/utils/blocksToText.ts +20 -0
  322. package/templates/shopify/utils/defineStructure.ts +11 -0
  323. package/templates/shopify/utils/getPriceRange.ts +24 -0
  324. package/templates/shopify/utils/shopifyUrls.ts +22 -0
  325. package/templates/shopify/utils/validateSlug.ts +18 -0
  326. package/templates/shopify-online-storefront/README.md +54 -0
  327. package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
  328. package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
  329. package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
  330. package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
  331. package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
  332. package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
  333. package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
  334. package/templates/shopify-online-storefront/constants.ts +18 -0
  335. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
  336. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
  337. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
  338. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
  339. package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
  340. package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
  341. package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
  342. package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
  343. package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
  344. package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
  345. package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
  346. package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
  347. package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
  348. package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
  349. package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
  350. package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
  351. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
  352. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
  353. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
  354. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
  355. package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
  356. package/templates/shopify-online-storefront/structure/index.ts +37 -0
  357. package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
  358. package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
  359. package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
  360. package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
  361. package/dist/actions/build/__tests__/buildApp.test.js +0 -367
  362. package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
  363. package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
  364. package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
  365. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
  366. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
  367. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
  368. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
  369. package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
  370. package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
  371. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
  372. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
  373. package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
  374. package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
  375. package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
  376. package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
  377. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
  378. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
  379. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
  380. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
  381. package/dist/actions/cors/constants.d.ts +0 -1
  382. package/dist/actions/cors/constants.js +0 -3
  383. package/dist/actions/cors/constants.js.map +0 -1
  384. package/dist/actions/cors/types.d.ts +0 -9
  385. package/dist/actions/cors/types.js +0 -3
  386. package/dist/actions/cors/types.js.map +0 -1
  387. package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
  388. package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
  389. package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
  390. package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
  391. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
  392. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
  393. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
  394. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
  395. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
  396. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
  397. package/dist/actions/media/__tests__/importMedia.test.js +0 -182
  398. package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
  399. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
  400. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
  401. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
  402. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
  403. package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
  404. package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
  405. package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
  406. package/dist/actions/schema/schemaStoreConstants.js +0 -4
  407. package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
  408. package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
  409. package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
  410. package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
  411. package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
  412. package/dist/actions/schema/utils/schemaApiClient.js +0 -17
  413. package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
  414. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
  415. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
  416. package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
  417. package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
  418. package/dist/actions/users/apiVersion.d.ts +0 -6
  419. package/dist/actions/users/apiVersion.js +0 -7
  420. package/dist/actions/users/apiVersion.js.map +0 -1
  421. package/dist/commands/__tests__/blueprints.test.js +0 -54
  422. package/dist/commands/__tests__/blueprints.test.js.map +0 -1
  423. package/dist/commands/__tests__/build.test.js +0 -132
  424. package/dist/commands/__tests__/build.test.js.map +0 -1
  425. package/dist/commands/__tests__/codemod.test.js +0 -271
  426. package/dist/commands/__tests__/codemod.test.js.map +0 -1
  427. package/dist/commands/__tests__/debug.test.js +0 -697
  428. package/dist/commands/__tests__/debug.test.js.map +0 -1
  429. package/dist/commands/__tests__/deploy.test.js +0 -1913
  430. package/dist/commands/__tests__/deploy.test.js.map +0 -1
  431. package/dist/commands/__tests__/dev.test.js +0 -410
  432. package/dist/commands/__tests__/dev.test.js.map +0 -1
  433. package/dist/commands/__tests__/exec.test.js +0 -207
  434. package/dist/commands/__tests__/exec.test.js.map +0 -1
  435. package/dist/commands/__tests__/init/init.authentication.test.js +0 -60
  436. package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
  437. package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -196
  438. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
  439. package/dist/commands/__tests__/init/init.plan.test.js +0 -220
  440. package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
  441. package/dist/commands/__tests__/init/init.setup.test.js +0 -279
  442. package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
  443. package/dist/commands/__tests__/install.test.js +0 -258
  444. package/dist/commands/__tests__/install.test.js.map +0 -1
  445. package/dist/commands/__tests__/learn.test.js +0 -29
  446. package/dist/commands/__tests__/learn.test.js.map +0 -1
  447. package/dist/commands/__tests__/logout.test.js +0 -88
  448. package/dist/commands/__tests__/logout.test.js.map +0 -1
  449. package/dist/commands/__tests__/manage.test.js +0 -105
  450. package/dist/commands/__tests__/manage.test.js.map +0 -1
  451. package/dist/commands/__tests__/migration.test.js +0 -119
  452. package/dist/commands/__tests__/migration.test.js.map +0 -1
  453. package/dist/commands/__tests__/preview.test.js +0 -261
  454. package/dist/commands/__tests__/preview.test.js.map +0 -1
  455. package/dist/commands/__tests__/start.test.js +0 -253
  456. package/dist/commands/__tests__/start.test.js.map +0 -1
  457. package/dist/commands/__tests__/undeploy.test.js +0 -382
  458. package/dist/commands/__tests__/undeploy.test.js.map +0 -1
  459. package/dist/commands/__tests__/versions.test.js +0 -134
  460. package/dist/commands/__tests__/versions.test.js.map +0 -1
  461. package/dist/commands/backup/__tests__/disable.test.js +0 -207
  462. package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
  463. package/dist/commands/backup/__tests__/download.test.js +0 -679
  464. package/dist/commands/backup/__tests__/download.test.js.map +0 -1
  465. package/dist/commands/backup/__tests__/enable.test.js +0 -317
  466. package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
  467. package/dist/commands/backup/__tests__/list.test.js +0 -321
  468. package/dist/commands/backup/__tests__/list.test.js.map +0 -1
  469. package/dist/commands/cors/__tests__/add.test.js +0 -346
  470. package/dist/commands/cors/__tests__/add.test.js.map +0 -1
  471. package/dist/commands/cors/__tests__/delete.test.js +0 -293
  472. package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
  473. package/dist/commands/cors/__tests__/list.test.js +0 -218
  474. package/dist/commands/cors/__tests__/list.test.js.map +0 -1
  475. package/dist/commands/dataset/__tests__/copy.test.js +0 -520
  476. package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
  477. package/dist/commands/dataset/__tests__/create.test.js +0 -312
  478. package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
  479. package/dist/commands/dataset/__tests__/delete.test.js +0 -224
  480. package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
  481. package/dist/commands/dataset/__tests__/export.test.js +0 -561
  482. package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
  483. package/dist/commands/dataset/__tests__/import.test.js +0 -53
  484. package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
  485. package/dist/commands/dataset/__tests__/list.test.js +0 -174
  486. package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
  487. package/dist/commands/dataset/alias/__tests__/create.test.js +0 -299
  488. package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
  489. package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -236
  490. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
  491. package/dist/commands/dataset/alias/__tests__/link.test.js +0 -336
  492. package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
  493. package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -298
  494. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
  495. package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -147
  496. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
  497. package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -245
  498. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
  499. package/dist/commands/docs/__tests__/browse.test.js +0 -29
  500. package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
  501. package/dist/commands/docs/__tests__/read.test.js +0 -78
  502. package/dist/commands/docs/__tests__/read.test.js.map +0 -1
  503. package/dist/commands/docs/__tests__/search.test.js +0 -254
  504. package/dist/commands/docs/__tests__/search.test.js.map +0 -1
  505. package/dist/commands/documents/__tests__/create.test.js +0 -967
  506. package/dist/commands/documents/__tests__/create.test.js.map +0 -1
  507. package/dist/commands/documents/__tests__/delete.test.js +0 -268
  508. package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
  509. package/dist/commands/documents/__tests__/get.test.js +0 -209
  510. package/dist/commands/documents/__tests__/get.test.js.map +0 -1
  511. package/dist/commands/documents/__tests__/query.test.js +0 -405
  512. package/dist/commands/documents/__tests__/query.test.js.map +0 -1
  513. package/dist/commands/documents/__tests__/validate.test.js +0 -226
  514. package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
  515. package/dist/commands/graphql/__tests__/list.test.js +0 -228
  516. package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
  517. package/dist/commands/graphql/__tests__/undeploy.test.js +0 -384
  518. package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
  519. package/dist/commands/hook/__tests__/attempt.test.js +0 -260
  520. package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
  521. package/dist/commands/hook/__tests__/create.test.js +0 -121
  522. package/dist/commands/hook/__tests__/create.test.js.map +0 -1
  523. package/dist/commands/hook/__tests__/delete.test.js +0 -220
  524. package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
  525. package/dist/commands/hook/__tests__/list.test.js +0 -138
  526. package/dist/commands/hook/__tests__/list.test.js.map +0 -1
  527. package/dist/commands/hook/__tests__/logs.test.js +0 -770
  528. package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
  529. package/dist/commands/manifest/__tests__/extract.test.js +0 -123
  530. package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
  531. package/dist/commands/mcp/__tests__/configure.test.js +0 -397
  532. package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
  533. package/dist/commands/media/__tests__/create-aspect.test.js +0 -160
  534. package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
  535. package/dist/commands/media/__tests__/delete-aspect.test.js +0 -333
  536. package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
  537. package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -632
  538. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
  539. package/dist/commands/media/__tests__/export.test.js +0 -398
  540. package/dist/commands/media/__tests__/export.test.js.map +0 -1
  541. package/dist/commands/media/__tests__/import.test.js +0 -281
  542. package/dist/commands/media/__tests__/import.test.js.map +0 -1
  543. package/dist/commands/openapi/__tests__/get.test.js +0 -149
  544. package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
  545. package/dist/commands/openapi/__tests__/list.test.js +0 -113
  546. package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
  547. package/dist/commands/projects/__tests__/list.test.js +0 -153
  548. package/dist/commands/projects/__tests__/list.test.js.map +0 -1
  549. package/dist/commands/schema/__tests__/delete.test.js +0 -209
  550. package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
  551. package/dist/commands/schema/__tests__/extract.test.js +0 -113
  552. package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
  553. package/dist/commands/schema/__tests__/validate.test.js +0 -104
  554. package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
  555. package/dist/commands/telemetry/__tests__/disable.test.js +0 -145
  556. package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
  557. package/dist/commands/telemetry/__tests__/enable.test.js +0 -131
  558. package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
  559. package/dist/commands/telemetry/__tests__/status.test.js +0 -153
  560. package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
  561. package/dist/commands/tokens/__tests__/add.test.js +0 -420
  562. package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
  563. package/dist/commands/tokens/__tests__/delete.test.js +0 -375
  564. package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
  565. package/dist/commands/tokens/__tests__/list.test.js +0 -368
  566. package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
  567. package/dist/commands/users/__tests__/invite.test.js +0 -341
  568. package/dist/commands/users/__tests__/invite.test.js.map +0 -1
  569. package/dist/commands/users/__tests__/list.test.js +0 -401
  570. package/dist/commands/users/__tests__/list.test.js.map +0 -1
  571. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
  572. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
  573. package/dist/services/__tests__/datasetAliases.test.js +0 -131
  574. package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
  575. package/dist/services/__tests__/datasets.test.js +0 -436
  576. package/dist/services/__tests__/datasets.test.js.map +0 -1
  577. package/dist/services/__tests__/graphql.test.js +0 -43
  578. package/dist/services/__tests__/graphql.test.js.map +0 -1
  579. package/dist/services/__tests__/mediaLibraries.test.js +0 -88
  580. package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
  581. package/dist/services/__tests__/projects.test.js +0 -41
  582. package/dist/services/__tests__/projects.test.js.map +0 -1
  583. package/dist/services/__tests__/userApplications.test.js +0 -113
  584. package/dist/services/__tests__/userApplications.test.js.map +0 -1
  585. package/dist/util/__tests__/appId.test.js +0 -31
  586. package/dist/util/__tests__/appId.test.js.map +0 -1
  587. package/dist/util/__tests__/cliClient.test.js +0 -184
  588. package/dist/util/__tests__/cliClient.test.js.map +0 -1
  589. package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
  590. package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
  591. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
  592. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
  593. package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
  594. package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
  595. package/dist/util/__tests__/getCliVersion.test.js +0 -28
  596. package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
  597. package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
  598. package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
  599. package/dist/util/__tests__/getWorkspace.test.js +0 -37
  600. package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
  601. package/dist/util/__tests__/readPackageJson.test.js +0 -69
  602. package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
  603. package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
  604. package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
  605. package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
  606. package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
  607. package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
  608. package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/schema/__tests__/validate.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport {describe, expect, test, vi} from 'vitest'\n\nimport {validateAction} from '../../../actions/schema/validateAction.js'\nimport {SchemaValidate} from '../validate.js'\n\nvi.mock('../../../actions/schema/validateAction.js', () => ({\n validateAction: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/project',\n path: '/test/project/sanity.config.ts',\n type: 'studio',\n }),\n}))\n\ndescribe('#schema:validate', () => {\n test('--help works', async () => {\n const {stdout} = await runCommand(['schema:validate', '--help'])\n expect(stdout).toMatchInlineSnapshot(`\n \"Validates all schema types specified in a workspace\n\n USAGE\n $ sanity schema validate [--debug-metafile-path <value>] [--format\n pretty|ndjson|json] [--level error|warning] [--workspace <value>]\n\n FLAGS\n --format=<option> [default: pretty] The output format used to print schema\n errors and warnings\n <options: pretty|ndjson|json>\n --level=<option> [default: warning] The minimum level reported out\n <options: error|warning>\n --workspace=<value> The name of the workspace to use when validating all\n schema types\n\n DEBUG FLAGS\n --debug-metafile-path=<value> Optional path where a metafile will be written\n for build analysis. Only written on successful\n validation. Can be analyzed at\n https://esbuild.github.io/analyze/\n\n DESCRIPTION\n Validates all schema types specified in a workspace\n\n EXAMPLES\n Validates all schema types in a Sanity project with more than one workspace\n\n $ sanity schema validate --workspace default\n\n Save the results of the report into a file\n\n $ sanity schema validate > report.txt\n\n Report out only errors\n\n $ sanity schema validate --level error\n\n Generate a report which can be analyzed with\n https://esbuild.github.io/analyze/\n\n $ sanity schema validate --debug-metafile-path metafile.json\n\n \"\n `)\n })\n\n test('shows error when user inputs incorrect format flag', async () => {\n const {error} = await testCommand(SchemaValidate, ['--format', 'invalid'])\n\n expect(error?.message).toContain('Expected --format=invalid to be one of: pretty, ndjson, json')\n })\n\n test('shows error when user inputs incorrect level flag', async () => {\n const {error} = await testCommand(SchemaValidate, ['--level', 'invalid'])\n\n expect(error?.message).toContain('Expected --level=invalid to be one of: error, warning')\n })\n\n test('calls validate action with correct parameters', async () => {\n vi.mocked(validateAction).mockResolvedValueOnce(undefined)\n\n const {error} = await testCommand(SchemaValidate, [\n '--format',\n 'json',\n '--level',\n 'error',\n '--workspace',\n 'default',\n ])\n\n expect(error).toBeUndefined()\n expect(validateAction).toHaveBeenCalledWith({\n debugMetafilePath: undefined,\n format: 'json',\n level: 'error',\n output: expect.any(Object),\n workDir: '/test/project',\n workspace: 'default',\n })\n })\n})\n"],"names":["runCommand","testCommand","describe","expect","test","vi","validateAction","SchemaValidate","mock","fn","findProjectRoot","mockResolvedValue","directory","path","type","stdout","toMatchInlineSnapshot","error","message","toContain","mocked","mockResolvedValueOnce","undefined","toBeUndefined","toHaveBeenCalledWith","debugMetafilePath","format","level","output","any","Object","workDir","workspace"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AACtC,SAAQC,WAAW,QAAO,mBAAkB;AAC5C,SAAQC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAEjD,SAAQC,cAAc,QAAO,4CAA2C;AACxE,SAAQC,cAAc,QAAO,iBAAgB;AAE7CF,GAAGG,IAAI,CAAC,6CAA6C,IAAO,CAAA;QAC1DF,gBAAgBD,GAAGI,EAAE;IACvB,CAAA;AAEAJ,GAAGG,IAAI,CAAC,yDAAyD,IAAO,CAAA;QACtEE,iBAAiBL,GAAGI,EAAE,GAAGE,iBAAiB,CAAC;YACzCC,WAAW;YACXC,MAAM;YACNC,MAAM;QACR;IACF,CAAA;AAEAZ,SAAS,oBAAoB;IAC3BE,KAAK,gBAAgB;QACnB,MAAM,EAACW,MAAM,EAAC,GAAG,MAAMf,WAAW;YAAC;YAAmB;SAAS;QAC/DG,OAAOY,QAAQC,qBAAqB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4CtC,CAAC;IACH;IAEAZ,KAAK,sDAAsD;QACzD,MAAM,EAACa,KAAK,EAAC,GAAG,MAAMhB,YAAYM,gBAAgB;YAAC;YAAY;SAAU;QAEzEJ,OAAOc,OAAOC,SAASC,SAAS,CAAC;IACnC;IAEAf,KAAK,qDAAqD;QACxD,MAAM,EAACa,KAAK,EAAC,GAAG,MAAMhB,YAAYM,gBAAgB;YAAC;YAAW;SAAU;QAExEJ,OAAOc,OAAOC,SAASC,SAAS,CAAC;IACnC;IAEAf,KAAK,iDAAiD;QACpDC,GAAGe,MAAM,CAACd,gBAAgBe,qBAAqB,CAACC;QAEhD,MAAM,EAACL,KAAK,EAAC,GAAG,MAAMhB,YAAYM,gBAAgB;YAChD;YACA;YACA;YACA;YACA;YACA;SACD;QAEDJ,OAAOc,OAAOM,aAAa;QAC3BpB,OAAOG,gBAAgBkB,oBAAoB,CAAC;YAC1CC,mBAAmBH;YACnBI,QAAQ;YACRC,OAAO;YACPC,QAAQzB,OAAO0B,GAAG,CAACC;YACnBC,SAAS;YACTC,WAAW;QACb;IACF;AACF"}
@@ -1,145 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { getCliToken, isCi } from '@sanity/cli-core';
3
- import { mockApi, testCommand } from '@sanity/cli-test';
4
- import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
5
- import { fetchTelemetryConsent } from '../../../actions/telemetry/fetchTelemetryConsent.js';
6
- import { Disable } from '../disable.js';
7
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
8
- getCliToken: vi.fn()
9
- }));
10
- vi.mock('../../../../../cli-core/src/util/isCi.js', ()=>({
11
- isCi: vi.fn(()=>false)
12
- }));
13
- vi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', ()=>({
14
- fetchTelemetryConsent: vi.fn()
15
- }));
16
- const mockGetCliToken = vi.mocked(getCliToken);
17
- const mockFetchTelemetryConsent = vi.mocked(fetchTelemetryConsent);
18
- const mockIsCi = vi.mocked(isCi);
19
- describe('#disable', ()=>{
20
- beforeEach(()=>{
21
- vi.clearAllMocks();
22
- });
23
- afterEach(()=>{
24
- vi.unstubAllEnvs();
25
- });
26
- test('help text is correct', async ()=>{
27
- const { stdout } = await runCommand([
28
- 'telemetry',
29
- 'disable',
30
- '--help'
31
- ]);
32
- expect(stdout).toMatchInlineSnapshot(`
33
- "Disable telemetry for your logged in user
34
-
35
- USAGE
36
- $ sanity telemetry disable
37
-
38
- DESCRIPTION
39
- Disable telemetry for your logged in user
40
-
41
- EXAMPLES
42
- Disable telemetry for your logged in user
43
-
44
- $ sanity telemetry telemetry disable
45
-
46
- "
47
- `);
48
- });
49
- test('disables telemetry when user is authenticated and status is different', async ()=>{
50
- // Ensure user is authenticated
51
- mockGetCliToken.mockResolvedValue('test-token');
52
- // Mock current status as granted
53
- mockFetchTelemetryConsent.mockResolvedValueOnce({
54
- status: 'granted'
55
- });
56
- // Mock disable API call
57
- mockApi({
58
- apiVersion: 'v2023-12-18',
59
- method: 'put',
60
- uri: '/users/me/consents/telemetry/status/denied'
61
- }).reply(200);
62
- // Mock updated status fetch
63
- mockFetchTelemetryConsent.mockResolvedValueOnce({
64
- status: 'denied'
65
- });
66
- const { stdout } = await testCommand(Disable, []);
67
- expect(stdout).toContain("You've opted out of telemetry data collection.\nNo data will be collected from your Sanity account.");
68
- expect(stdout).toContain('Learn more here:');
69
- expect(stdout).toContain('https://www.sanity.io/telemetry');
70
- });
71
- test('shows already disabled message when telemetry is already denied', async ()=>{
72
- // Ensure user is authenticated
73
- mockGetCliToken.mockResolvedValue('test-token');
74
- // Mock current status as already denied
75
- mockFetchTelemetryConsent.mockResolvedValueOnce({
76
- status: 'denied'
77
- });
78
- const { stdout } = await testCommand(Disable, []);
79
- expect(stdout).toContain("You've already opted out of telemetry data collection.\nNo data is collected from your Sanity account.");
80
- expect(stdout).not.toContain('Learn more here:');
81
- });
82
- test('shows already disabled message with DO_NOT_TRACK when local override is active', async ()=>{
83
- // Set DO_NOT_TRACK environment variable
84
- vi.stubEnv('DO_NOT_TRACK', '1');
85
- const { stdout } = await testCommand(Disable, []);
86
- expect(stdout).toContain("You've already opted out of telemetry data collection.\nNo data is collected from your machine.\n\nUsing DO_NOT_TRACK environment variable.");
87
- });
88
- test('shows cannot set message in CI environment', async ()=>{
89
- mockIsCi.mockReturnValue(true);
90
- mockFetchTelemetryConsent.mockResolvedValueOnce({
91
- status: 'granted'
92
- });
93
- const { stdout } = await testCommand(Disable, []);
94
- expect(stdout).toContain('Cannot set telemetry consent in CI environment');
95
- mockIsCi.mockRestore();
96
- });
97
- test('shows login required message when user is not authenticated', async ()=>{
98
- // User is not authenticated
99
- mockGetCliToken.mockResolvedValue(undefined);
100
- const { stdout } = await testCommand(Disable, []);
101
- expect(stdout).toContain('You need to log in first to set telemetry preferences.');
102
- });
103
- test('shows error message when API call fails with 403', async ()=>{
104
- // Ensure user is authenticated
105
- mockGetCliToken.mockResolvedValue('test-token');
106
- // Mock current status as granted
107
- mockFetchTelemetryConsent.mockResolvedValueOnce({
108
- status: 'granted'
109
- });
110
- // Mock disable API call to fail with 403
111
- mockApi({
112
- apiVersion: 'v2023-12-18',
113
- method: 'put',
114
- uri: '/users/me/consents/telemetry/status/denied'
115
- }).reply(403, {
116
- message: 'Permission denied'
117
- });
118
- const result = await testCommand(Disable, []);
119
- expect(result.error).toMatchObject({
120
- message: 'Failed to disable telemetry: Permission denied'
121
- });
122
- });
123
- test('shows error message when API call fails with other error', async ()=>{
124
- // Ensure user is authenticated
125
- mockGetCliToken.mockResolvedValue('test-token');
126
- // Mock current status as granted
127
- mockFetchTelemetryConsent.mockResolvedValueOnce({
128
- status: 'granted'
129
- });
130
- // Mock disable API call to fail with 500
131
- mockApi({
132
- apiVersion: 'v2023-12-18',
133
- method: 'put',
134
- uri: '/users/me/consents/telemetry/status/denied'
135
- }).reply(500, {
136
- message: 'Internal server error'
137
- });
138
- const result = await testCommand(Disable, []);
139
- expect(result.error).toMatchObject({
140
- message: 'Failed to disable telemetry: Internal server error'
141
- });
142
- });
143
- });
144
-
145
- //# sourceMappingURL=disable.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/telemetry/__tests__/disable.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliToken, isCi} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {fetchTelemetryConsent} from '../../../actions/telemetry/fetchTelemetryConsent.js'\nimport {Disable} from '../disable.js'\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/util/isCi.js', () => ({\n isCi: vi.fn(() => false),\n}))\n\nvi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', () => ({\n fetchTelemetryConsent: vi.fn(),\n}))\n\nconst mockGetCliToken = vi.mocked(getCliToken)\nconst mockFetchTelemetryConsent = vi.mocked(fetchTelemetryConsent)\nconst mockIsCi = vi.mocked(isCi)\n\ndescribe('#disable', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n afterEach(() => {\n vi.unstubAllEnvs()\n })\n\n test('help text is correct', async () => {\n const {stdout} = await runCommand(['telemetry', 'disable', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Disable telemetry for your logged in user\n\n USAGE\n $ sanity telemetry disable\n\n DESCRIPTION\n Disable telemetry for your logged in user\n\n EXAMPLES\n Disable telemetry for your logged in user\n\n $ sanity telemetry telemetry disable\n\n \"\n `)\n })\n\n test('disables telemetry when user is authenticated and status is different', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock current status as granted\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n // Mock disable API call\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/denied',\n }).reply(200)\n\n // Mock updated status fetch\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'denied'})\n\n const {stdout} = await testCommand(Disable, [])\n\n expect(stdout).toContain(\n \"You've opted out of telemetry data collection.\\nNo data will be collected from your Sanity account.\",\n )\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows already disabled message when telemetry is already denied', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock current status as already denied\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'denied'})\n\n const {stdout} = await testCommand(Disable, [])\n\n expect(stdout).toContain(\n \"You've already opted out of telemetry data collection.\\nNo data is collected from your Sanity account.\",\n )\n expect(stdout).not.toContain('Learn more here:')\n })\n\n test('shows already disabled message with DO_NOT_TRACK when local override is active', async () => {\n // Set DO_NOT_TRACK environment variable\n vi.stubEnv('DO_NOT_TRACK', '1')\n\n const {stdout} = await testCommand(Disable, [])\n\n expect(stdout).toContain(\n \"You've already opted out of telemetry data collection.\\nNo data is collected from your machine.\\n\\nUsing DO_NOT_TRACK environment variable.\",\n )\n })\n\n test('shows cannot set message in CI environment', async () => {\n mockIsCi.mockReturnValue(true)\n\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n const {stdout} = await testCommand(Disable, [])\n\n expect(stdout).toContain('Cannot set telemetry consent in CI environment')\n mockIsCi.mockRestore()\n })\n\n test('shows login required message when user is not authenticated', async () => {\n // User is not authenticated\n mockGetCliToken.mockResolvedValue(undefined)\n\n const {stdout} = await testCommand(Disable, [])\n\n expect(stdout).toContain('You need to log in first to set telemetry preferences.')\n })\n\n test('shows error message when API call fails with 403', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock current status as granted\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n // Mock disable API call to fail with 403\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/denied',\n }).reply(403, {message: 'Permission denied'})\n\n const result = await testCommand(Disable, [])\n\n expect(result.error).toMatchObject({\n message: 'Failed to disable telemetry: Permission denied',\n })\n })\n\n test('shows error message when API call fails with other error', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock current status as granted\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n // Mock disable API call to fail with 500\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/denied',\n }).reply(500, {message: 'Internal server error'})\n\n const result = await testCommand(Disable, [])\n\n expect(result.error).toMatchObject({\n message: 'Failed to disable telemetry: Internal server error',\n })\n })\n})\n"],"names":["runCommand","getCliToken","isCi","mockApi","testCommand","afterEach","beforeEach","describe","expect","test","vi","fetchTelemetryConsent","Disable","mock","fn","mockGetCliToken","mocked","mockFetchTelemetryConsent","mockIsCi","clearAllMocks","unstubAllEnvs","stdout","toMatchInlineSnapshot","mockResolvedValue","mockResolvedValueOnce","status","apiVersion","method","uri","reply","toContain","not","stubEnv","mockReturnValue","mockRestore","undefined","message","result","error","toMatchObject"],"mappings":"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"}
@@ -1,131 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { getCliToken } from '@sanity/cli-core';
3
- import { mockApi, testCommand } from '@sanity/cli-test';
4
- import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
5
- import { fetchTelemetryConsent } from '../../../actions/telemetry/fetchTelemetryConsent.js';
6
- import { Enable } from '../enable.js';
7
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
8
- getCliToken: vi.fn()
9
- }));
10
- vi.mock('../../../../../cli-core/src/util/isCi.js', ()=>({
11
- isCi: ()=>false
12
- }));
13
- vi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', ()=>({
14
- fetchTelemetryConsent: vi.fn()
15
- }));
16
- const mockGetCliToken = vi.mocked(getCliToken);
17
- const mockFetchTelemetryConsent = vi.mocked(fetchTelemetryConsent);
18
- describe('#enable', ()=>{
19
- beforeEach(()=>{
20
- vi.clearAllMocks();
21
- });
22
- afterEach(()=>{
23
- vi.unstubAllEnvs();
24
- });
25
- test('help text is correct', async ()=>{
26
- const { stdout } = await runCommand([
27
- 'telemetry',
28
- 'enable',
29
- '--help'
30
- ]);
31
- expect(stdout).toMatchInlineSnapshot(`
32
- "Enable telemetry for your logged in user
33
-
34
- USAGE
35
- $ sanity telemetry enable
36
-
37
- DESCRIPTION
38
- Enable telemetry for your logged in user
39
-
40
- EXAMPLES
41
- Enable telemetry for your logged in user
42
-
43
- $ sanity telemetry telemetry enable
44
-
45
- "
46
- `);
47
- });
48
- test('enables telemetry when user is authenticated and status is different', async ()=>{
49
- // Ensure user is authenticated
50
- mockGetCliToken.mockResolvedValue('test-token');
51
- mockFetchTelemetryConsent.mockResolvedValueOnce({
52
- status: 'denied'
53
- });
54
- // Mock enable API call
55
- mockApi({
56
- apiVersion: 'v2023-12-18',
57
- method: 'put',
58
- uri: '/users/me/consents/telemetry/status/granted'
59
- }).reply(200);
60
- mockFetchTelemetryConsent.mockResolvedValueOnce({
61
- status: 'granted'
62
- });
63
- const { stdout } = await testCommand(Enable, []);
64
- expect(stdout).toContain("You've now enabled telemetry data collection to help us improve Sanity.");
65
- expect(stdout).toContain('Learn more about the data being collected here:');
66
- expect(stdout).toContain('https://www.sanity.io/telemetry');
67
- });
68
- test('shows already enabled message when telemetry is already granted', async ()=>{
69
- // Ensure user is authenticated
70
- mockGetCliToken.mockResolvedValue('test-token');
71
- mockFetchTelemetryConsent.mockResolvedValueOnce({
72
- status: 'granted'
73
- });
74
- const { stdout } = await testCommand(Enable, []);
75
- expect(stdout).toContain("You've already enabled telemetry data collection to help us improve Sanity.");
76
- expect(stdout).not.toContain('Learn more about the data being collected here:');
77
- });
78
- test('shows login required message when user is not authenticated', async ()=>{
79
- // User is not authenticated
80
- mockGetCliToken.mockResolvedValue(undefined);
81
- const { stdout } = await testCommand(Enable, []);
82
- expect(stdout).toContain('You need to log in first to set telemetry preferences.');
83
- });
84
- test('shows error when DO_NOT_TRACK is set and trying to enable', async ()=>{
85
- // Set DO_NOT_TRACK environment variable
86
- vi.stubEnv('DO_NOT_TRACK', '1');
87
- const { stdout } = await testCommand(Enable, []);
88
- expect(stdout).toContain('Cannot enable telemetry while DO_NOT_TRACK environment variable is set. Unset DO_NOT_TRACK to enable telemetry.');
89
- });
90
- test('shows error message when API call fails with 403', async ()=>{
91
- // Ensure user is authenticated
92
- mockGetCliToken.mockResolvedValue('test-token');
93
- // Mock current status as denied
94
- mockFetchTelemetryConsent.mockResolvedValueOnce({
95
- status: 'denied'
96
- });
97
- // Mock enable API call to fail with 403
98
- mockApi({
99
- apiVersion: 'v2023-12-18',
100
- method: 'put',
101
- uri: '/users/me/consents/telemetry/status/granted'
102
- }).reply(403, {
103
- message: 'Permission denied'
104
- });
105
- const result = await testCommand(Enable, []);
106
- expect(result.error).toMatchObject({
107
- message: 'Failed to enable telemetry: Permission denied'
108
- });
109
- });
110
- test('shows error message when API call fails with other error', async ()=>{
111
- // Ensure user is authenticated
112
- mockGetCliToken.mockResolvedValue('test-token');
113
- mockFetchTelemetryConsent.mockResolvedValueOnce({
114
- status: 'denied'
115
- });
116
- // Mock enable API call to fail with 500
117
- mockApi({
118
- apiVersion: 'v2023-12-18',
119
- method: 'put',
120
- uri: '/users/me/consents/telemetry/status/granted'
121
- }).reply(500, {
122
- message: 'Internal server error'
123
- });
124
- const result = await testCommand(Enable, []);
125
- expect(result.error).toMatchObject({
126
- message: 'Failed to enable telemetry: Internal server error'
127
- });
128
- });
129
- });
130
-
131
- //# sourceMappingURL=enable.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/telemetry/__tests__/enable.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliToken} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {fetchTelemetryConsent} from '../../../actions/telemetry/fetchTelemetryConsent.js'\nimport {Enable} from '../enable.js'\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/util/isCi.js', () => ({\n isCi: () => false,\n}))\n\nvi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', () => ({\n fetchTelemetryConsent: vi.fn(),\n}))\n\nconst mockGetCliToken = vi.mocked(getCliToken)\nconst mockFetchTelemetryConsent = vi.mocked(fetchTelemetryConsent)\n\ndescribe('#enable', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n afterEach(() => {\n vi.unstubAllEnvs()\n })\n\n test('help text is correct', async () => {\n const {stdout} = await runCommand(['telemetry', 'enable', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Enable telemetry for your logged in user\n\n USAGE\n $ sanity telemetry enable\n\n DESCRIPTION\n Enable telemetry for your logged in user\n\n EXAMPLES\n Enable telemetry for your logged in user\n\n $ sanity telemetry telemetry enable\n\n \"\n `)\n })\n\n test('enables telemetry when user is authenticated and status is different', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'denied'})\n\n // Mock enable API call\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/granted',\n }).reply(200)\n\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n const {stdout} = await testCommand(Enable, [])\n\n expect(stdout).toContain(\n \"You've now enabled telemetry data collection to help us improve Sanity.\",\n )\n expect(stdout).toContain('Learn more about the data being collected here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows already enabled message when telemetry is already granted', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n const {stdout} = await testCommand(Enable, [])\n\n expect(stdout).toContain(\n \"You've already enabled telemetry data collection to help us improve Sanity.\",\n )\n expect(stdout).not.toContain('Learn more about the data being collected here:')\n })\n\n test('shows login required message when user is not authenticated', async () => {\n // User is not authenticated\n mockGetCliToken.mockResolvedValue(undefined)\n\n const {stdout} = await testCommand(Enable, [])\n\n expect(stdout).toContain('You need to log in first to set telemetry preferences.')\n })\n\n test('shows error when DO_NOT_TRACK is set and trying to enable', async () => {\n // Set DO_NOT_TRACK environment variable\n vi.stubEnv('DO_NOT_TRACK', '1')\n\n const {stdout} = await testCommand(Enable, [])\n\n expect(stdout).toContain(\n 'Cannot enable telemetry while DO_NOT_TRACK environment variable is set. Unset DO_NOT_TRACK to enable telemetry.',\n )\n })\n\n test('shows error message when API call fails with 403', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock current status as denied\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'denied'})\n\n // Mock enable API call to fail with 403\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/granted',\n }).reply(403, {message: 'Permission denied'})\n\n const result = await testCommand(Enable, [])\n\n expect(result.error).toMatchObject({\n message: 'Failed to enable telemetry: Permission denied',\n })\n })\n\n test('shows error message when API call fails with other error', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'denied'})\n\n // Mock enable API call to fail with 500\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/granted',\n }).reply(500, {message: 'Internal server error'})\n\n const result = await testCommand(Enable, [])\n\n expect(result.error).toMatchObject({\n message: 'Failed to enable telemetry: Internal server error',\n })\n })\n})\n"],"names":["runCommand","getCliToken","mockApi","testCommand","afterEach","beforeEach","describe","expect","test","vi","fetchTelemetryConsent","Enable","mock","fn","isCi","mockGetCliToken","mocked","mockFetchTelemetryConsent","clearAllMocks","unstubAllEnvs","stdout","toMatchInlineSnapshot","mockResolvedValue","mockResolvedValueOnce","status","apiVersion","method","uri","reply","toContain","not","undefined","stubEnv","message","result","error","toMatchObject"],"mappings":"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"}
@@ -1,153 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { getCliToken, isCi } from '@sanity/cli-core';
3
- import { testCommand } from '@sanity/cli-test';
4
- import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
5
- import { fetchTelemetryConsent } from '../../../actions/telemetry/fetchTelemetryConsent.js';
6
- import { Status } from '../status.js';
7
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
8
- getCliToken: vi.fn()
9
- }));
10
- vi.mock('../../../../../cli-core/src/util/isCi.js', ()=>({
11
- isCi: vi.fn(()=>false)
12
- }));
13
- vi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', ()=>({
14
- fetchTelemetryConsent: vi.fn()
15
- }));
16
- const mockGetCliToken = vi.mocked(getCliToken);
17
- const mockFetchTelemetryConsent = vi.mocked(fetchTelemetryConsent);
18
- const mockIsCi = vi.mocked(isCi);
19
- describe('telemetry status', ()=>{
20
- beforeEach(()=>{
21
- vi.clearAllMocks();
22
- });
23
- afterEach(()=>{
24
- vi.unstubAllEnvs();
25
- });
26
- test('help text is correct', async ()=>{
27
- const { stdout } = await runCommand([
28
- 'telemetry',
29
- 'status',
30
- '--help'
31
- ]);
32
- expect(stdout).toMatchInlineSnapshot(`
33
- "Check telemetry consent status for your logged in user
34
-
35
- USAGE
36
- $ sanity telemetry status
37
-
38
- DESCRIPTION
39
- Check telemetry consent status for your logged in user
40
-
41
- EXAMPLES
42
- Check telemetry consent status for your logged in user
43
-
44
- $ sanity telemetry telemetry status
45
-
46
- "
47
- `);
48
- });
49
- test('command handles no flags correctly', async ()=>{
50
- const { error } = await testCommand(Status, [
51
- '--invalid'
52
- ]);
53
- expect(error?.message).toContain('Nonexistent flag: --invalid');
54
- });
55
- test('shows disabled status with DO_NOT_TRACK environment variable', async ()=>{
56
- // Set DO_NOT_TRACK environment variable
57
- vi.stubEnv('DO_NOT_TRACK', '1');
58
- const { stdout } = await testCommand(Status, []);
59
- expect(stdout).toContain('Status: Disabled');
60
- expect(stdout).toContain("You've opted out of telemetry data collection.");
61
- expect(stdout).toContain('No data will be collected from your machine.');
62
- expect(stdout).toContain('Using DO_NOT_TRACK environment variable.');
63
- expect(stdout).toContain('Learn more here:');
64
- expect(stdout).toContain('https://www.sanity.io/telemetry');
65
- });
66
- test('shows status when DO_NOT_TRACK is not set', async ()=>{
67
- // Explicitly ensure DO_NOT_TRACK is not set
68
- vi.stubEnv('DO_NOT_TRACK', undefined);
69
- const { stdout } = await testCommand(Status, []);
70
- // Should show telemetry status or appropriate message
71
- expect(stdout).toContain('Learn more here:');
72
- expect(stdout).toContain('https://www.sanity.io/telemetry');
73
- });
74
- test('shows cannot set message in CI environment', async ()=>{
75
- mockGetCliToken.mockResolvedValue('test-token');
76
- mockIsCi.mockReturnValueOnce(true);
77
- const { stdout } = await testCommand(Status, []);
78
- expect(stdout).toContain('Status: Disabled');
79
- });
80
- // Additional tests for better coverage (using working patterns)
81
- test('ensures unauthenticated case works when no token available', async ()=>{
82
- // Mock no authentication token
83
- mockGetCliToken.mockResolvedValue(undefined);
84
- const { stdout } = await testCommand(Status, []);
85
- expect(stdout).toContain('You need to log in first to see telemetry status.');
86
- expect(stdout).toContain('Learn more here:');
87
- expect(stdout).toContain('https://www.sanity.io/telemetry');
88
- });
89
- // Integration tests with API mocking for different status responses
90
- test('shows granted status when API returns granted', async ()=>{
91
- mockGetCliToken.mockResolvedValue('test-token');
92
- mockFetchTelemetryConsent.mockResolvedValue({
93
- status: 'granted'
94
- });
95
- const { stdout } = await testCommand(Status, []);
96
- expect(stdout).toContain('Status: Enabled');
97
- expect(stdout).toContain('Telemetry data on general usage and errors is collected to help us improve Sanity.');
98
- expect(stdout).toContain('Learn more about the data being collected here:');
99
- expect(stdout).toContain('https://www.sanity.io/telemetry');
100
- });
101
- test('shows unset status when API returns unset', async ()=>{
102
- // Ensure user is authenticated
103
- mockGetCliToken.mockResolvedValue('test-token');
104
- mockFetchTelemetryConsent.mockResolvedValue({
105
- status: 'unset'
106
- });
107
- const { stdout } = await testCommand(Status, []);
108
- expect(stdout).toContain('Status: Not set');
109
- expect(stdout).toContain("You've not set your preference for telemetry collection.");
110
- expect(stdout).toContain("Run 'npx sanity telemetry enable/disable' to opt in or out.");
111
- expect(stdout).toContain('You can also use the DO_NOT_TRACK environment variable to opt out.');
112
- expect(stdout).toContain('Learn more here:');
113
- expect(stdout).toContain('https://www.sanity.io/telemetry');
114
- });
115
- test('shows denied status when API returns denied (without local override)', async ()=>{
116
- // Ensure user is authenticated
117
- mockGetCliToken.mockResolvedValue('test-token');
118
- mockFetchTelemetryConsent.mockResolvedValue({
119
- status: 'denied'
120
- });
121
- const { stdout } = await testCommand(Status, []);
122
- expect(stdout).toContain('Status: Disabled');
123
- expect(stdout).toContain("You've opted out of telemetry data collection.");
124
- expect(stdout).toContain('No data will be collected from your Sanity account.');
125
- expect(stdout).not.toContain('Using DO_NOT_TRACK environment variable.');
126
- expect(stdout).toContain('Learn more here:');
127
- expect(stdout).toContain('https://www.sanity.io/telemetry');
128
- });
129
- test('shows fetch error when API call fails', async ()=>{
130
- // Ensure user is authenticated
131
- mockGetCliToken.mockResolvedValue('test-token');
132
- // Mock the telemetry status API to return an error
133
- mockFetchTelemetryConsent.mockRejectedValue(new Error('API error'));
134
- const { stdout } = await testCommand(Status, []);
135
- expect(stdout).toContain('Could not fetch telemetry consent status.');
136
- expect(stdout).toContain('Learn more here:');
137
- expect(stdout).toContain('https://www.sanity.io/telemetry');
138
- });
139
- test('handles invalid API response gracefully', async ()=>{
140
- // Ensure user is authenticated
141
- mockGetCliToken.mockResolvedValue('test-token');
142
- mockFetchTelemetryConsent.mockResolvedValue({
143
- status: 'invalid-status'
144
- });
145
- const { stdout } = await testCommand(Status, []);
146
- // Invalid API response should be handled as a fetch error
147
- expect(stdout).toContain('Could not fetch telemetry consent status.');
148
- expect(stdout).toContain('Learn more here:');
149
- expect(stdout).toContain('https://www.sanity.io/telemetry');
150
- });
151
- });
152
-
153
- //# sourceMappingURL=status.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/telemetry/__tests__/status.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliToken, isCi} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {fetchTelemetryConsent} from '../../../actions/telemetry/fetchTelemetryConsent.js'\nimport {type ValidApiConsentStatus} from '../../../actions/telemetry/isValidApiConsentStatus.js'\nimport {Status} from '../status.js'\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/util/isCi.js', () => ({\n isCi: vi.fn(() => false),\n}))\n\nvi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', () => ({\n fetchTelemetryConsent: vi.fn(),\n}))\n\nconst mockGetCliToken = vi.mocked(getCliToken)\nconst mockFetchTelemetryConsent = vi.mocked(fetchTelemetryConsent)\nconst mockIsCi = vi.mocked(isCi)\n\ndescribe('telemetry status', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n afterEach(() => {\n vi.unstubAllEnvs()\n })\n\n test('help text is correct', async () => {\n const {stdout} = await runCommand(['telemetry', 'status', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Check telemetry consent status for your logged in user\n\n USAGE\n $ sanity telemetry status\n\n DESCRIPTION\n Check telemetry consent status for your logged in user\n\n EXAMPLES\n Check telemetry consent status for your logged in user\n\n $ sanity telemetry telemetry status\n\n \"\n `)\n })\n\n test('command handles no flags correctly', async () => {\n const {error} = await testCommand(Status, ['--invalid'])\n\n expect(error?.message).toContain('Nonexistent flag: --invalid')\n })\n\n test('shows disabled status with DO_NOT_TRACK environment variable', async () => {\n // Set DO_NOT_TRACK environment variable\n vi.stubEnv('DO_NOT_TRACK', '1')\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Disabled')\n expect(stdout).toContain(\"You've opted out of telemetry data collection.\")\n expect(stdout).toContain('No data will be collected from your machine.')\n expect(stdout).toContain('Using DO_NOT_TRACK environment variable.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows status when DO_NOT_TRACK is not set', async () => {\n // Explicitly ensure DO_NOT_TRACK is not set\n vi.stubEnv('DO_NOT_TRACK', undefined)\n\n const {stdout} = await testCommand(Status, [])\n\n // Should show telemetry status or appropriate message\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows cannot set message in CI environment', async () => {\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockIsCi.mockReturnValueOnce(true)\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Disabled')\n })\n\n // Additional tests for better coverage (using working patterns)\n test('ensures unauthenticated case works when no token available', async () => {\n // Mock no authentication token\n mockGetCliToken.mockResolvedValue(undefined)\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('You need to log in first to see telemetry status.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n // Integration tests with API mocking for different status responses\n test('shows granted status when API returns granted', async () => {\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'granted'})\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Enabled')\n expect(stdout).toContain(\n 'Telemetry data on general usage and errors is collected to help us improve Sanity.',\n )\n expect(stdout).toContain('Learn more about the data being collected here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows unset status when API returns unset', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'unset'})\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Not set')\n expect(stdout).toContain(\"You've not set your preference for telemetry collection.\")\n expect(stdout).toContain(\"Run 'npx sanity telemetry enable/disable' to opt in or out.\")\n expect(stdout).toContain('You can also use the DO_NOT_TRACK environment variable to opt out.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows denied status when API returns denied (without local override)', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'denied'})\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Disabled')\n expect(stdout).toContain(\"You've opted out of telemetry data collection.\")\n expect(stdout).toContain('No data will be collected from your Sanity account.')\n expect(stdout).not.toContain('Using DO_NOT_TRACK environment variable.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows fetch error when API call fails', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock the telemetry status API to return an error\n mockFetchTelemetryConsent.mockRejectedValue(new Error('API error'))\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Could not fetch telemetry consent status.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('handles invalid API response gracefully', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'invalid-status' as ValidApiConsentStatus})\n\n const {stdout} = await testCommand(Status, [])\n\n // Invalid API response should be handled as a fetch error\n expect(stdout).toContain('Could not fetch telemetry consent status.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n})\n"],"names":["runCommand","getCliToken","isCi","testCommand","afterEach","beforeEach","describe","expect","test","vi","fetchTelemetryConsent","Status","mock","fn","mockGetCliToken","mocked","mockFetchTelemetryConsent","mockIsCi","clearAllMocks","unstubAllEnvs","stdout","toMatchInlineSnapshot","error","message","toContain","stubEnv","undefined","mockResolvedValue","mockReturnValueOnce","status","not","mockRejectedValue","Error"],"mappings":"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"}