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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/README.md +2907 -109
  2. package/dist/actions/dataset/create.d.ts +49 -0
  3. package/dist/actions/dataset/create.js +48 -0
  4. package/dist/actions/dataset/create.js.map +1 -0
  5. package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
  6. package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
  7. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
  8. package/dist/actions/debug/gatherDebugInfo.js +15 -21
  9. package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
  10. package/dist/actions/debug/types.d.ts +0 -2
  11. package/dist/actions/debug/types.js.map +1 -1
  12. package/dist/actions/deploy/deployApp.js +13 -0
  13. package/dist/actions/deploy/deployApp.js.map +1 -1
  14. package/dist/actions/init/remoteTemplate.js +1 -1
  15. package/dist/actions/init/remoteTemplate.js.map +1 -1
  16. package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
  17. package/dist/actions/manifest/extractAppManifest.js +51 -0
  18. package/dist/actions/manifest/extractAppManifest.js.map +1 -0
  19. package/dist/actions/manifest/extractManifest.js +1 -1
  20. package/dist/actions/manifest/extractManifest.js.map +1 -1
  21. package/dist/actions/manifest/types.d.ts +6 -1
  22. package/dist/actions/manifest/types.js.map +1 -1
  23. package/dist/actions/media/importAspects.js +2 -1
  24. package/dist/actions/media/importAspects.js.map +1 -1
  25. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +1 -1
  26. package/dist/actions/telemetry/resolveConsent.d.ts +1 -9
  27. package/dist/actions/telemetry/resolveConsent.js +2 -2
  28. package/dist/actions/telemetry/resolveConsent.js.map +1 -1
  29. package/dist/actions/telemetry/setConsent.d.ts +1 -4
  30. package/dist/actions/telemetry/setConsent.js +4 -8
  31. package/dist/actions/telemetry/setConsent.js.map +1 -1
  32. package/dist/commands/dataset/create.d.ts +0 -2
  33. package/dist/commands/dataset/create.js +8 -54
  34. package/dist/commands/dataset/create.js.map +1 -1
  35. package/dist/commands/debug.js +5 -9
  36. package/dist/commands/debug.js.map +1 -1
  37. package/dist/commands/init.d.ts +6 -1
  38. package/dist/commands/init.js +358 -20
  39. package/dist/commands/init.js.map +1 -1
  40. package/dist/commands/manifest/extract.js +7 -8
  41. package/dist/commands/manifest/extract.js.map +1 -1
  42. package/dist/commands/telemetry/disable.js +0 -1
  43. package/dist/commands/telemetry/disable.js.map +1 -1
  44. package/dist/commands/telemetry/enable.js +0 -1
  45. package/dist/commands/telemetry/enable.js.map +1 -1
  46. package/dist/commands/telemetry/status.js +1 -3
  47. package/dist/commands/telemetry/status.js.map +1 -1
  48. package/dist/config/createCliConfig.d.ts +9 -0
  49. package/dist/hooks/prerun/flushTelemetry.worker.d.ts +2 -0
  50. package/dist/hooks/prerun/flushTelemetry.worker.js +22 -0
  51. package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -0
  52. package/dist/hooks/prerun/setupTelemetry.js +65 -1
  53. package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
  54. package/dist/prompts/init/promptForTypescript.d.ts +2 -0
  55. package/dist/prompts/init/promptForTypescript.js +15 -0
  56. package/dist/prompts/init/promptForTypescript.js.map +1 -0
  57. package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
  58. package/dist/prompts/promptForDatasetAclMode.js +27 -0
  59. package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
  60. package/dist/prompts/promptForDatasetName.d.ts +1 -1
  61. package/dist/prompts/promptForDatasetName.js +4 -1
  62. package/dist/prompts/promptForDatasetName.js.map +1 -1
  63. package/dist/services/organizations.d.ts +3 -1
  64. package/dist/services/organizations.js +2 -1
  65. package/dist/services/organizations.js.map +1 -1
  66. package/dist/services/telemetry.d.ts +2 -0
  67. package/dist/services/telemetry.js +20 -0
  68. package/dist/services/telemetry.js.map +1 -0
  69. package/dist/services/user.d.ts +5 -0
  70. package/dist/services/user.js +12 -1
  71. package/dist/services/user.js.map +1 -1
  72. package/dist/services/userApplications.d.ts +3 -1
  73. package/dist/services/userApplications.js +5 -1
  74. package/dist/services/userApplications.js.map +1 -1
  75. package/dist/telemetry/cli.telemetry.d.ts +20 -0
  76. package/dist/telemetry/cli.telemetry.js +8 -0
  77. package/dist/telemetry/cli.telemetry.js.map +1 -0
  78. package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +5 -0
  79. package/dist/telemetry/store/cleanupOldTelemetryFiles.js +30 -0
  80. package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +1 -0
  81. package/dist/telemetry/store/createTelemetryStore.d.ts +39 -0
  82. package/dist/telemetry/store/createTelemetryStore.js +95 -0
  83. package/dist/telemetry/store/createTelemetryStore.js.map +1 -0
  84. package/dist/telemetry/store/createTraceId.d.ts +10 -0
  85. package/dist/telemetry/store/createTraceId.js +10 -0
  86. package/dist/telemetry/store/createTraceId.js.map +1 -0
  87. package/dist/telemetry/store/debug.d.ts +5 -0
  88. package/dist/telemetry/store/debug.js +7 -0
  89. package/dist/telemetry/store/debug.js.map +1 -0
  90. package/dist/telemetry/store/findTelemetryFiles.d.ts +13 -0
  91. package/dist/telemetry/store/findTelemetryFiles.js +34 -0
  92. package/dist/telemetry/store/findTelemetryFiles.js.map +1 -0
  93. package/dist/telemetry/store/flushTelemetryFiles.d.ts +20 -0
  94. package/dist/telemetry/store/flushTelemetryFiles.js +107 -0
  95. package/dist/telemetry/store/flushTelemetryFiles.js.map +1 -0
  96. package/dist/telemetry/store/generateTelemetryFilePath.d.ts +17 -0
  97. package/dist/telemetry/store/generateTelemetryFilePath.js +30 -0
  98. package/dist/telemetry/store/generateTelemetryFilePath.js.map +1 -0
  99. package/dist/telemetry/store/getTelemetryBaseInfo.d.ts +27 -0
  100. package/dist/telemetry/store/getTelemetryBaseInfo.js +34 -0
  101. package/dist/telemetry/store/getTelemetryBaseInfo.js.map +1 -0
  102. package/dist/telemetry/store/logger.d.ts +6 -0
  103. package/dist/telemetry/store/logger.js +54 -0
  104. package/dist/telemetry/store/logger.js.map +1 -0
  105. package/dist/telemetry/store/trace.d.ts +6 -0
  106. package/dist/telemetry/store/trace.js +150 -0
  107. package/dist/telemetry/store/trace.js.map +1 -0
  108. package/dist/telemetry/utils/readNDJSON.d.ts +10 -0
  109. package/dist/telemetry/utils/readNDJSON.js +18 -0
  110. package/dist/telemetry/utils/readNDJSON.js.map +1 -0
  111. package/dist/util/detectRuntime.d.ts +8 -0
  112. package/dist/util/detectRuntime.js +20 -0
  113. package/dist/util/detectRuntime.js.map +1 -0
  114. package/dist/util/isStaging.d.ts +7 -0
  115. package/dist/util/isStaging.js +10 -0
  116. package/dist/util/isStaging.js.map +1 -0
  117. package/dist/util/parseArguments.d.ts +35 -0
  118. package/dist/util/parseArguments.js +42 -0
  119. package/dist/util/parseArguments.js.map +1 -0
  120. package/oclif.manifest.json +7 -1
  121. package/package.json +25 -18
  122. package/templates/app-quickstart/src/App.css +20 -0
  123. package/templates/app-quickstart/src/App.tsx +25 -0
  124. package/templates/app-quickstart/src/ExampleComponent.css +90 -0
  125. package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
  126. package/templates/app-sanity-ui/src/App.tsx +34 -0
  127. package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
  128. package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
  129. package/templates/blog/README.md +11 -0
  130. package/templates/blog/schemaTypes/author.js +50 -0
  131. package/templates/blog/schemaTypes/blockContent.js +67 -0
  132. package/templates/blog/schemaTypes/category.js +19 -0
  133. package/templates/blog/schemaTypes/index.js +6 -0
  134. package/templates/blog/schemaTypes/post.js +65 -0
  135. package/templates/blog/static/.gitkeep +1 -0
  136. package/templates/clean/README.md +9 -0
  137. package/templates/clean/schemaTypes/index.js +1 -0
  138. package/templates/clean/static/.gitkeep +1 -0
  139. package/templates/ecommerce/README.md +11 -0
  140. package/templates/ecommerce/plugins/.gitkeep +1 -0
  141. package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
  142. package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
  143. package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
  144. package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
  145. package/templates/ecommerce/schemaTypes/category.js +39 -0
  146. package/templates/ecommerce/schemaTypes/index.js +23 -0
  147. package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
  148. package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
  149. package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
  150. package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
  151. package/templates/ecommerce/schemaTypes/product.js +83 -0
  152. package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
  153. package/templates/ecommerce/schemaTypes/vendor.js +39 -0
  154. package/templates/ecommerce/static/.gitkeep +1 -0
  155. package/templates/get-started/README.md +9 -0
  156. package/templates/get-started/plugins/.gitkeep +1 -0
  157. package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
  158. package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
  159. package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
  160. package/templates/get-started/schemaTypes/index.ts +1 -0
  161. package/templates/get-started/static/.gitkeep +1 -0
  162. package/templates/moviedb/README.md +10 -0
  163. package/templates/moviedb/schemaTypes/blockContent.js +67 -0
  164. package/templates/moviedb/schemaTypes/castMember.js +37 -0
  165. package/templates/moviedb/schemaTypes/crewMember.js +52 -0
  166. package/templates/moviedb/schemaTypes/index.js +22 -0
  167. package/templates/moviedb/schemaTypes/movie.js +85 -0
  168. package/templates/moviedb/schemaTypes/person.js +37 -0
  169. package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
  170. package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
  171. package/templates/moviedb/schemaTypes/screening.js +81 -0
  172. package/templates/moviedb/static/.gitkeep +1 -0
  173. package/templates/quickstart/README.md +9 -0
  174. package/templates/quickstart/schemaTypes/index.js +1 -0
  175. package/templates/quickstart/static/.gitkeep +1 -0
  176. package/templates/shared/gitignore.txt +29 -0
  177. package/templates/shared/tsconfig.json +17 -0
  178. package/templates/shopify/README.md +85 -0
  179. package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
  180. package/templates/shopify/components/icons/Shopify.tsx +20 -0
  181. package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
  182. package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
  183. package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
  184. package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
  185. package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
  186. package/templates/shopify/components/media/ColorTheme.tsx +38 -0
  187. package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
  188. package/templates/shopify/components/studio/Navbar.tsx +29 -0
  189. package/templates/shopify/constants.ts +61 -0
  190. package/templates/shopify/docs/features.md +158 -0
  191. package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
  192. package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
  193. package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
  194. package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
  195. package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
  196. package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
  197. package/templates/shopify/schemaTypes/documents/page.ts +70 -0
  198. package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
  199. package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
  200. package/templates/shopify/schemaTypes/index.ts +108 -0
  201. package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
  202. package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
  203. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
  204. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
  205. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
  206. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
  207. package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
  208. package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
  209. package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
  210. package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
  211. package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
  212. package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
  213. package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
  214. package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
  215. package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
  216. package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
  217. package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
  218. package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
  219. package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
  220. package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
  221. package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
  222. package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
  223. package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
  224. package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
  225. package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
  226. package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
  227. package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
  228. package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
  229. package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
  230. package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
  231. package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
  232. package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
  233. package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
  234. package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
  235. package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
  236. package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
  237. package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
  238. package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
  239. package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
  240. package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
  241. package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
  242. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
  243. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
  244. package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
  245. package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
  246. package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
  247. package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
  248. package/templates/shopify/static/.gitkeep +1 -0
  249. package/templates/shopify/structure/collectionStructure.ts +9 -0
  250. package/templates/shopify/structure/colorThemeStructure.ts +9 -0
  251. package/templates/shopify/structure/homeStructure.ts +9 -0
  252. package/templates/shopify/structure/index.ts +57 -0
  253. package/templates/shopify/structure/pageStructure.ts +11 -0
  254. package/templates/shopify/structure/productStructure.ts +51 -0
  255. package/templates/shopify/structure/settingStructure.ts +9 -0
  256. package/templates/shopify/utils/blocksToText.ts +20 -0
  257. package/templates/shopify/utils/defineStructure.ts +11 -0
  258. package/templates/shopify/utils/getPriceRange.ts +24 -0
  259. package/templates/shopify/utils/shopifyUrls.ts +22 -0
  260. package/templates/shopify/utils/validateSlug.ts +18 -0
  261. package/templates/shopify-online-storefront/README.md +54 -0
  262. package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
  263. package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
  264. package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
  265. package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
  266. package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
  267. package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
  268. package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
  269. package/templates/shopify-online-storefront/constants.ts +18 -0
  270. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
  271. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
  272. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
  273. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
  274. package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
  275. package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
  276. package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
  277. package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
  278. package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
  279. package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
  280. package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
  281. package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
  282. package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
  283. package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
  284. package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
  285. package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
  286. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
  287. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
  288. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
  289. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
  290. package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
  291. package/templates/shopify-online-storefront/structure/index.ts +37 -0
  292. package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
  293. package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
  294. package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
  295. package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
  296. package/dist/actions/build/__tests__/buildApp.test.js +0 -367
  297. package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
  298. package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
  299. package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
  300. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
  301. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
  302. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
  303. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
  304. package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
  305. package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
  306. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
  307. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
  308. package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
  309. package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
  310. package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
  311. package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
  312. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
  313. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
  314. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
  315. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
  316. package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
  317. package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
  318. package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
  319. package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
  320. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
  321. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
  322. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
  323. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
  324. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
  325. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
  326. package/dist/actions/media/__tests__/importMedia.test.js +0 -182
  327. package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
  328. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
  329. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
  330. package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
  331. package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
  332. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
  333. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
  334. package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
  335. package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
  336. package/dist/commands/__tests__/blueprints.test.js +0 -54
  337. package/dist/commands/__tests__/blueprints.test.js.map +0 -1
  338. package/dist/commands/__tests__/build.test.js +0 -132
  339. package/dist/commands/__tests__/build.test.js.map +0 -1
  340. package/dist/commands/__tests__/codemod.test.js +0 -271
  341. package/dist/commands/__tests__/codemod.test.js.map +0 -1
  342. package/dist/commands/__tests__/debug.test.js +0 -590
  343. package/dist/commands/__tests__/debug.test.js.map +0 -1
  344. package/dist/commands/__tests__/deploy.test.js +0 -1945
  345. package/dist/commands/__tests__/deploy.test.js.map +0 -1
  346. package/dist/commands/__tests__/dev.test.js +0 -453
  347. package/dist/commands/__tests__/dev.test.js.map +0 -1
  348. package/dist/commands/__tests__/exec.test.js +0 -207
  349. package/dist/commands/__tests__/exec.test.js.map +0 -1
  350. package/dist/commands/__tests__/init/init.authentication.test.js +0 -73
  351. package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
  352. package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -195
  353. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
  354. package/dist/commands/__tests__/init/init.plan.test.js +0 -279
  355. package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
  356. package/dist/commands/__tests__/init/init.setup.test.js +0 -335
  357. package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
  358. package/dist/commands/__tests__/install.test.js +0 -282
  359. package/dist/commands/__tests__/install.test.js.map +0 -1
  360. package/dist/commands/__tests__/learn.test.js +0 -29
  361. package/dist/commands/__tests__/learn.test.js.map +0 -1
  362. package/dist/commands/__tests__/logout.test.js +0 -91
  363. package/dist/commands/__tests__/logout.test.js.map +0 -1
  364. package/dist/commands/__tests__/manage.test.js +0 -110
  365. package/dist/commands/__tests__/manage.test.js.map +0 -1
  366. package/dist/commands/__tests__/migration.test.js +0 -119
  367. package/dist/commands/__tests__/migration.test.js.map +0 -1
  368. package/dist/commands/__tests__/preview.test.js +0 -261
  369. package/dist/commands/__tests__/preview.test.js.map +0 -1
  370. package/dist/commands/__tests__/start.test.js +0 -253
  371. package/dist/commands/__tests__/start.test.js.map +0 -1
  372. package/dist/commands/__tests__/undeploy.test.js +0 -382
  373. package/dist/commands/__tests__/undeploy.test.js.map +0 -1
  374. package/dist/commands/__tests__/versions.test.js +0 -142
  375. package/dist/commands/__tests__/versions.test.js.map +0 -1
  376. package/dist/commands/backup/__tests__/disable.test.js +0 -204
  377. package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
  378. package/dist/commands/backup/__tests__/download.test.js +0 -768
  379. package/dist/commands/backup/__tests__/download.test.js.map +0 -1
  380. package/dist/commands/backup/__tests__/enable.test.js +0 -286
  381. package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
  382. package/dist/commands/backup/__tests__/list.test.js +0 -330
  383. package/dist/commands/backup/__tests__/list.test.js.map +0 -1
  384. package/dist/commands/cors/__tests__/add.test.js +0 -376
  385. package/dist/commands/cors/__tests__/add.test.js.map +0 -1
  386. package/dist/commands/cors/__tests__/delete.test.js +0 -308
  387. package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
  388. package/dist/commands/cors/__tests__/list.test.js +0 -241
  389. package/dist/commands/cors/__tests__/list.test.js.map +0 -1
  390. package/dist/commands/dataset/__tests__/copy.test.js +0 -628
  391. package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
  392. package/dist/commands/dataset/__tests__/create.test.js +0 -342
  393. package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
  394. package/dist/commands/dataset/__tests__/delete.test.js +0 -231
  395. package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
  396. package/dist/commands/dataset/__tests__/export.test.js +0 -601
  397. package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
  398. package/dist/commands/dataset/__tests__/import.test.js +0 -53
  399. package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
  400. package/dist/commands/dataset/__tests__/list.test.js +0 -216
  401. package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
  402. package/dist/commands/dataset/alias/__tests__/create.test.js +0 -339
  403. package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
  404. package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -247
  405. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
  406. package/dist/commands/dataset/alias/__tests__/link.test.js +0 -376
  407. package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
  408. package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -313
  409. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
  410. package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -128
  411. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
  412. package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -198
  413. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
  414. package/dist/commands/docs/__tests__/browse.test.js +0 -29
  415. package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
  416. package/dist/commands/docs/__tests__/read.test.js +0 -78
  417. package/dist/commands/docs/__tests__/read.test.js.map +0 -1
  418. package/dist/commands/docs/__tests__/search.test.js +0 -255
  419. package/dist/commands/docs/__tests__/search.test.js.map +0 -1
  420. package/dist/commands/documents/__tests__/create.test.js +0 -1030
  421. package/dist/commands/documents/__tests__/create.test.js.map +0 -1
  422. package/dist/commands/documents/__tests__/delete.test.js +0 -300
  423. package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
  424. package/dist/commands/documents/__tests__/get.test.js +0 -182
  425. package/dist/commands/documents/__tests__/get.test.js.map +0 -1
  426. package/dist/commands/documents/__tests__/query.test.js +0 -300
  427. package/dist/commands/documents/__tests__/query.test.js.map +0 -1
  428. package/dist/commands/documents/__tests__/validate.test.js +0 -249
  429. package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
  430. package/dist/commands/graphql/__tests__/list.test.js +0 -240
  431. package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
  432. package/dist/commands/graphql/__tests__/undeploy.test.js +0 -410
  433. package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
  434. package/dist/commands/hook/__tests__/attempt.test.js +0 -275
  435. package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
  436. package/dist/commands/hook/__tests__/create.test.js +0 -119
  437. package/dist/commands/hook/__tests__/create.test.js.map +0 -1
  438. package/dist/commands/hook/__tests__/delete.test.js +0 -233
  439. package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
  440. package/dist/commands/hook/__tests__/list.test.js +0 -145
  441. package/dist/commands/hook/__tests__/list.test.js.map +0 -1
  442. package/dist/commands/hook/__tests__/logs.test.js +0 -798
  443. package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
  444. package/dist/commands/manifest/__tests__/extract.test.js +0 -132
  445. package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
  446. package/dist/commands/mcp/__tests__/configure.test.js +0 -397
  447. package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
  448. package/dist/commands/media/__tests__/create-aspect.test.js +0 -173
  449. package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
  450. package/dist/commands/media/__tests__/delete-aspect.test.js +0 -342
  451. package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
  452. package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -619
  453. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
  454. package/dist/commands/media/__tests__/export.test.js +0 -697
  455. package/dist/commands/media/__tests__/export.test.js.map +0 -1
  456. package/dist/commands/media/__tests__/import.test.js +0 -347
  457. package/dist/commands/media/__tests__/import.test.js.map +0 -1
  458. package/dist/commands/openapi/__tests__/get.test.js +0 -149
  459. package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
  460. package/dist/commands/openapi/__tests__/list.test.js +0 -113
  461. package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
  462. package/dist/commands/projects/__tests__/list.test.js +0 -154
  463. package/dist/commands/projects/__tests__/list.test.js.map +0 -1
  464. package/dist/commands/schema/__tests__/delete.test.js +0 -454
  465. package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
  466. package/dist/commands/schema/__tests__/deploy.test.js +0 -348
  467. package/dist/commands/schema/__tests__/deploy.test.js.map +0 -1
  468. package/dist/commands/schema/__tests__/extract.test.js +0 -121
  469. package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
  470. package/dist/commands/schema/__tests__/list.test.js +0 -399
  471. package/dist/commands/schema/__tests__/list.test.js.map +0 -1
  472. package/dist/commands/schema/__tests__/validate.test.js +0 -121
  473. package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
  474. package/dist/commands/telemetry/__tests__/disable.test.js +0 -147
  475. package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
  476. package/dist/commands/telemetry/__tests__/enable.test.js +0 -133
  477. package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
  478. package/dist/commands/telemetry/__tests__/status.test.js +0 -155
  479. package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
  480. package/dist/commands/tokens/__tests__/add.test.js +0 -435
  481. package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
  482. package/dist/commands/tokens/__tests__/delete.test.js +0 -405
  483. package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
  484. package/dist/commands/tokens/__tests__/list.test.js +0 -395
  485. package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
  486. package/dist/commands/users/__tests__/invite.test.js +0 -362
  487. package/dist/commands/users/__tests__/invite.test.js.map +0 -1
  488. package/dist/commands/users/__tests__/list.test.js +0 -407
  489. package/dist/commands/users/__tests__/list.test.js.map +0 -1
  490. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
  491. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
  492. package/dist/services/__tests__/datasetAliases.test.js +0 -131
  493. package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
  494. package/dist/services/__tests__/datasets.test.js +0 -436
  495. package/dist/services/__tests__/datasets.test.js.map +0 -1
  496. package/dist/services/__tests__/graphql.test.js +0 -43
  497. package/dist/services/__tests__/graphql.test.js.map +0 -1
  498. package/dist/services/__tests__/mediaLibraries.test.js +0 -88
  499. package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
  500. package/dist/services/__tests__/projects.test.js +0 -41
  501. package/dist/services/__tests__/projects.test.js.map +0 -1
  502. package/dist/services/__tests__/userApplications.test.js +0 -113
  503. package/dist/services/__tests__/userApplications.test.js.map +0 -1
  504. package/dist/util/__tests__/appId.test.js +0 -31
  505. package/dist/util/__tests__/appId.test.js.map +0 -1
  506. package/dist/util/__tests__/cliClient.test.js +0 -184
  507. package/dist/util/__tests__/cliClient.test.js.map +0 -1
  508. package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
  509. package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
  510. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
  511. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
  512. package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
  513. package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
  514. package/dist/util/__tests__/getCliVersion.test.js +0 -28
  515. package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
  516. package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
  517. package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
  518. package/dist/util/__tests__/getWorkspace.test.js +0 -37
  519. package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
  520. package/dist/util/__tests__/readPackageJson.test.js +0 -69
  521. package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
  522. package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
  523. package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
  524. package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
  525. package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
  526. package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
  527. package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
@@ -1,279 +0,0 @@
1
- import { createTestClient, mockApi, testCommand } from '@sanity/cli-test';
2
- import { afterEach, describe, expect, test, vi } from 'vitest';
3
- import { INIT_API_VERSION } from '../../../actions/init/constants.js';
4
- import { InitCommand } from '../../init';
5
- const mockConfirm = vi.hoisted(()=>vi.fn());
6
- vi.mock('@sanity/cli-core/ux', async ()=>{
7
- const actual = await vi.importActual('@sanity/cli-core/ux');
8
- return {
9
- ...actual,
10
- confirm: mockConfirm
11
- };
12
- });
13
- vi.mock('@vercel/fs-detectors', ()=>({
14
- detectFrameworkRecord: vi.fn().mockResolvedValue({
15
- name: 'Next.js',
16
- slug: 'nextjs'
17
- }),
18
- LocalFileSystemDetector: vi.fn()
19
- }));
20
- vi.mock('@sanity/cli-core', async ()=>{
21
- const actual = await vi.importActual('@sanity/cli-core');
22
- const testClient = createTestClient({
23
- apiVersion: INIT_API_VERSION,
24
- token: 'test-token'
25
- });
26
- return {
27
- ...actual,
28
- getGlobalCliClient: vi.fn().mockResolvedValue({
29
- request: testClient.request,
30
- users: {
31
- getById: vi.fn().mockResolvedValue({
32
- email: 'test@example.com',
33
- id: 'user-123',
34
- name: 'Test User',
35
- provider: 'saml-123'
36
- })
37
- }
38
- })
39
- };
40
- });
41
- describe('#init: retrieving plan', ()=>{
42
- afterEach(()=>{
43
- vi.clearAllMocks();
44
- });
45
- test('validates coupon when --coupon flag is provided', async ()=>{
46
- mockApi({
47
- apiVersion: 'v2025-06-01',
48
- method: 'get',
49
- uri: '/plans/coupon/TESTCOUPON123'
50
- }).reply(200, [
51
- {
52
- id: 'test-plan-id'
53
- }
54
- ]);
55
- const { error, stdout } = await testCommand(InitCommand, [
56
- '--coupon=TESTCOUPON123'
57
- ], {
58
- mocks: {
59
- isInteractive: true,
60
- token: 'test-token'
61
- }
62
- });
63
- expect(error).toBeUndefined();
64
- expect(stdout).toContain('Coupon "TESTCOUPON123" validated!');
65
- });
66
- test('throws error if coupon not found with provided code', async ()=>{
67
- mockApi({
68
- apiVersion: 'v2025-06-01',
69
- method: 'get',
70
- uri: '/plans/coupon/TESTCOUPON123'
71
- }).reply(200, []);
72
- const { error } = await testCommand(InitCommand, [
73
- '--coupon=TESTCOUPON123',
74
- '--bare'
75
- ], {
76
- mocks: {
77
- isInteractive: true,
78
- token: 'test-token'
79
- }
80
- });
81
- expect(error?.message).toContain('Unable to validate coupon, please try again later:');
82
- expect(error?.message).toContain('No plans found for coupon code "TESTCOUPON123"');
83
- });
84
- test('throws error if coupon does not have attached plan id', async ()=>{
85
- mockApi({
86
- apiVersion: INIT_API_VERSION,
87
- method: 'get',
88
- uri: '/plans/coupon/TESTCOUPON123'
89
- }).reply(200, [
90
- {
91
- id: undefined
92
- }
93
- ]);
94
- const { error } = await testCommand(InitCommand, [
95
- '--coupon=TESTCOUPON123',
96
- '--bare'
97
- ], {
98
- mocks: {
99
- isInteractive: true,
100
- token: 'test-token'
101
- }
102
- });
103
- expect(error?.message).toContain('Unable to validate coupon, please try again later:');
104
- expect(error?.message).toContain('Unable to find a plan from coupon code');
105
- });
106
- test('uses default plan when coupon does not exist and cli in unattended mode', async ()=>{
107
- mockApi({
108
- apiVersion: INIT_API_VERSION,
109
- method: 'get',
110
- uri: '/plans/coupon/INVALID123'
111
- }).reply(404, {
112
- message: 'Coupon not found'
113
- });
114
- const { error, stderr, stdout } = await testCommand(InitCommand, [
115
- '--coupon=INVALID123',
116
- '--yes',
117
- '--dataset=test',
118
- '--project=test'
119
- ], {
120
- mocks: {
121
- token: 'test-token'
122
- }
123
- });
124
- expect(error).toBe(undefined);
125
- expect(stderr).toContain('Warning: Coupon "INVALID123" is not available - using default plan');
126
- expect(stdout).toContain('Using default plan.');
127
- });
128
- test('uses default plan when coupon invalid and user confirms default plan', async ()=>{
129
- mockApi({
130
- apiVersion: INIT_API_VERSION,
131
- method: 'get',
132
- uri: '/plans/coupon/INVALID123'
133
- }).reply(404, {
134
- message: 'Coupon not found'
135
- });
136
- mockConfirm.mockResolvedValue(true);
137
- const { error, stdout } = await testCommand(InitCommand, [
138
- '--coupon=INVALID123'
139
- ], {
140
- mocks: {
141
- isInteractive: true,
142
- token: 'test-token'
143
- }
144
- });
145
- expect(error).toBeUndefined();
146
- expect(mockConfirm).toHaveBeenCalledWith({
147
- default: true,
148
- message: 'Coupon "INVALID123" is not available, use default plan instead?'
149
- });
150
- expect(stdout).toContain('Using default plan.');
151
- });
152
- test('throws error when coupon invalid and user declines the default plan', async ()=>{
153
- mockApi({
154
- apiVersion: INIT_API_VERSION,
155
- method: 'get',
156
- uri: '/plans/coupon/INVALID123'
157
- }).reply(404, {
158
- message: 'Coupon not found'
159
- });
160
- mockConfirm.mockResolvedValue(false);
161
- const { error } = await testCommand(InitCommand, [
162
- '--coupon=INVALID123'
163
- ], {
164
- mocks: {
165
- isInteractive: true,
166
- token: 'test-token'
167
- }
168
- });
169
- expect(error?.message).toContain('Coupon "INVALID123" does not exist');
170
- });
171
- test('returns when client request for plan is successful', async ()=>{
172
- mockApi({
173
- apiVersion: INIT_API_VERSION,
174
- method: 'get',
175
- uri: '/plans/growth'
176
- }).reply(200, [
177
- {
178
- id: 'test-plan-id'
179
- }
180
- ]);
181
- const { error } = await testCommand(InitCommand, [
182
- '--project-plan=growth'
183
- ], {
184
- mocks: {
185
- isInteractive: true,
186
- token: 'test-token'
187
- }
188
- });
189
- expect(error).toBeUndefined();
190
- });
191
- test('throw error when no plan id is returned by request', async ()=>{
192
- mockApi({
193
- apiVersion: INIT_API_VERSION,
194
- method: 'get',
195
- uri: '/plans/growth'
196
- }).reply(200, [
197
- {
198
- id: undefined
199
- }
200
- ]);
201
- const { error } = await testCommand(InitCommand, [
202
- '--project-plan=growth'
203
- ], {
204
- mocks: {
205
- isInteractive: true,
206
- token: 'test-token'
207
- }
208
- });
209
- expect(error?.message).toContain('Unable to validate plan, please try again later:');
210
- expect(error?.message).toContain('Unable to find a plan with id growth');
211
- });
212
- test('uses default plan when plan id does not exist and cli in unattended mode', async ()=>{
213
- mockApi({
214
- apiVersion: INIT_API_VERSION,
215
- method: 'get',
216
- uri: '/plans/growth'
217
- }).reply(404, {
218
- message: 'Plan not found'
219
- });
220
- const { error, stderr, stdout } = await testCommand(InitCommand, [
221
- '--project-plan=growth',
222
- '--yes',
223
- '--dataset=test',
224
- '--project==test'
225
- ], {
226
- mocks: {
227
- token: 'test-token'
228
- }
229
- });
230
- expect(error).toBe(undefined);
231
- expect(stderr).toContain('Warning: Project plan "growth" does not exist - using default plan');
232
- expect(stdout).toContain('Using default plan.');
233
- });
234
- test('uses default plan when plan ID not found and user confirms default plan', async ()=>{
235
- mockApi({
236
- apiVersion: INIT_API_VERSION,
237
- method: 'get',
238
- uri: '/plans/growth'
239
- }).reply(404, {
240
- message: 'Plan not found'
241
- });
242
- mockConfirm.mockResolvedValue(true);
243
- const { error, stdout } = await testCommand(InitCommand, [
244
- '--project-plan=growth'
245
- ], {
246
- mocks: {
247
- isInteractive: true,
248
- token: 'test-token'
249
- }
250
- });
251
- expect(error).toBeUndefined();
252
- expect(mockConfirm).toHaveBeenCalledWith({
253
- default: true,
254
- message: 'Project plan "growth" does not exist, use default plan instead?'
255
- });
256
- expect(stdout).toContain('Using default plan.');
257
- });
258
- test('throws error when plan ID not found and user declines default plan', async ()=>{
259
- mockApi({
260
- apiVersion: INIT_API_VERSION,
261
- method: 'get',
262
- uri: '/plans/growth'
263
- }).reply(404, {
264
- message: 'Plan not found'
265
- });
266
- mockConfirm.mockResolvedValue(false);
267
- const { error } = await testCommand(InitCommand, [
268
- '--project-plan=growth'
269
- ], {
270
- mocks: {
271
- isInteractive: true,
272
- token: 'test-token'
273
- }
274
- });
275
- expect(error?.message).toContain('Plan id "growth" does not exist');
276
- });
277
- });
278
-
279
- //# sourceMappingURL=init.plan.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/__tests__/init/init.plan.test.ts"],"sourcesContent":["import {createTestClient, mockApi, testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {INIT_API_VERSION} from '../../../actions/init/constants.js'\nimport {InitCommand} from '../../init'\n\nconst mockConfirm = vi.hoisted(() => vi.fn())\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual('@sanity/cli-core/ux')\n\n return {\n ...actual,\n confirm: mockConfirm,\n }\n})\n\nvi.mock('@vercel/fs-detectors', () => ({\n detectFrameworkRecord: vi.fn().mockResolvedValue({\n name: 'Next.js',\n slug: 'nextjs',\n }),\n LocalFileSystemDetector: vi.fn(),\n}))\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n const testClient = createTestClient({\n apiVersion: INIT_API_VERSION,\n token: 'test-token',\n })\n\n return {\n ...actual,\n getGlobalCliClient: vi.fn().mockResolvedValue({\n request: testClient.request,\n users: {\n getById: vi.fn().mockResolvedValue({\n email: 'test@example.com',\n id: 'user-123',\n name: 'Test User',\n provider: 'saml-123',\n }),\n } as never,\n }),\n }\n})\n\ndescribe('#init: retrieving plan', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('validates coupon when --coupon flag is provided', async () => {\n mockApi({\n apiVersion: 'v2025-06-01',\n method: 'get',\n uri: '/plans/coupon/TESTCOUPON123',\n }).reply(200, [{id: 'test-plan-id'}])\n\n const {error, stdout} = await testCommand(InitCommand, ['--coupon=TESTCOUPON123'], {\n mocks: {\n isInteractive: true,\n token: 'test-token',\n },\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('Coupon \"TESTCOUPON123\" validated!')\n })\n\n test('throws error if coupon not found with provided code', async () => {\n mockApi({\n apiVersion: 'v2025-06-01',\n method: 'get',\n uri: '/plans/coupon/TESTCOUPON123',\n }).reply(200, [])\n\n const {error} = await testCommand(InitCommand, ['--coupon=TESTCOUPON123', '--bare'], {\n mocks: {\n isInteractive: true,\n token: 'test-token',\n },\n })\n\n expect(error?.message).toContain('Unable to validate coupon, please try again later:')\n expect(error?.message).toContain('No plans found for coupon code \"TESTCOUPON123\"')\n })\n\n test('throws error if coupon does not have attached plan id', async () => {\n mockApi({\n apiVersion: INIT_API_VERSION,\n method: 'get',\n uri: '/plans/coupon/TESTCOUPON123',\n }).reply(200, [{id: undefined}])\n\n const {error} = await testCommand(InitCommand, ['--coupon=TESTCOUPON123', '--bare'], {\n mocks: {\n isInteractive: true,\n token: 'test-token',\n },\n })\n\n expect(error?.message).toContain('Unable to validate coupon, please try again later:')\n expect(error?.message).toContain('Unable to find a plan from coupon code')\n })\n\n test('uses default plan when coupon does not exist and cli in unattended mode', async () => {\n mockApi({\n apiVersion: INIT_API_VERSION,\n method: 'get',\n uri: '/plans/coupon/INVALID123',\n }).reply(404, {message: 'Coupon not found'})\n\n const {error, stderr, stdout} = await testCommand(\n InitCommand,\n ['--coupon=INVALID123', '--yes', '--dataset=test', '--project=test'],\n {\n mocks: {\n token: 'test-token',\n },\n },\n )\n\n expect(error).toBe(undefined)\n expect(stderr).toContain('Warning: Coupon \"INVALID123\" is not available - using default plan')\n expect(stdout).toContain('Using default plan.')\n })\n\n test('uses default plan when coupon invalid and user confirms default plan', async () => {\n mockApi({\n apiVersion: INIT_API_VERSION,\n method: 'get',\n uri: '/plans/coupon/INVALID123',\n }).reply(404, {message: 'Coupon not found'})\n\n mockConfirm.mockResolvedValue(true)\n\n const {error, stdout} = await testCommand(InitCommand, ['--coupon=INVALID123'], {\n mocks: {\n isInteractive: true,\n token: 'test-token',\n },\n })\n\n expect(error).toBeUndefined()\n expect(mockConfirm).toHaveBeenCalledWith({\n default: true,\n message: 'Coupon \"INVALID123\" is not available, use default plan instead?',\n })\n expect(stdout).toContain('Using default plan.')\n })\n\n test('throws error when coupon invalid and user declines the default plan', async () => {\n mockApi({\n apiVersion: INIT_API_VERSION,\n method: 'get',\n uri: '/plans/coupon/INVALID123',\n }).reply(404, {message: 'Coupon not found'})\n mockConfirm.mockResolvedValue(false)\n\n const {error} = await testCommand(InitCommand, ['--coupon=INVALID123'], {\n mocks: {\n isInteractive: true,\n token: 'test-token',\n },\n })\n\n expect(error?.message).toContain('Coupon \"INVALID123\" does not exist')\n })\n\n test('returns when client request for plan is successful', async () => {\n mockApi({\n apiVersion: INIT_API_VERSION,\n method: 'get',\n uri: '/plans/growth',\n }).reply(200, [{id: 'test-plan-id'}])\n\n const {error} = await testCommand(InitCommand, ['--project-plan=growth'], {\n mocks: {\n isInteractive: true,\n token: 'test-token',\n },\n })\n\n expect(error).toBeUndefined()\n })\n\n test('throw error when no plan id is returned by request', async () => {\n mockApi({\n apiVersion: INIT_API_VERSION,\n method: 'get',\n uri: '/plans/growth',\n }).reply(200, [{id: undefined}])\n\n const {error} = await testCommand(InitCommand, ['--project-plan=growth'], {\n mocks: {\n isInteractive: true,\n token: 'test-token',\n },\n })\n expect(error?.message).toContain('Unable to validate plan, please try again later:')\n expect(error?.message).toContain('Unable to find a plan with id growth')\n })\n\n test('uses default plan when plan id does not exist and cli in unattended mode', async () => {\n mockApi({\n apiVersion: INIT_API_VERSION,\n method: 'get',\n uri: '/plans/growth',\n }).reply(404, {message: 'Plan not found'})\n\n const {error, stderr, stdout} = await testCommand(\n InitCommand,\n ['--project-plan=growth', '--yes', '--dataset=test', '--project==test'],\n {\n mocks: {\n token: 'test-token',\n },\n },\n )\n\n expect(error).toBe(undefined)\n expect(stderr).toContain('Warning: Project plan \"growth\" does not exist - using default plan')\n expect(stdout).toContain('Using default plan.')\n })\n\n test('uses default plan when plan ID not found and user confirms default plan', async () => {\n mockApi({\n apiVersion: INIT_API_VERSION,\n method: 'get',\n uri: '/plans/growth',\n }).reply(404, {message: 'Plan not found'})\n mockConfirm.mockResolvedValue(true)\n\n const {error, stdout} = await testCommand(InitCommand, ['--project-plan=growth'], {\n mocks: {\n isInteractive: true,\n token: 'test-token',\n },\n })\n\n expect(error).toBeUndefined()\n expect(mockConfirm).toHaveBeenCalledWith({\n default: true,\n message: 'Project plan \"growth\" does not exist, use default plan instead?',\n })\n expect(stdout).toContain('Using default plan.')\n })\n\n test('throws error when plan ID not found and user declines default plan', async () => {\n mockApi({\n apiVersion: INIT_API_VERSION,\n method: 'get',\n uri: '/plans/growth',\n }).reply(404, {message: 'Plan not found'})\n mockConfirm.mockResolvedValue(false)\n\n const {error} = await testCommand(InitCommand, ['--project-plan=growth'], {\n mocks: {\n isInteractive: true,\n token: 'test-token',\n },\n })\n\n expect(error?.message).toContain('Plan id \"growth\" does not exist')\n })\n})\n"],"names":["createTestClient","mockApi","testCommand","afterEach","describe","expect","test","vi","INIT_API_VERSION","InitCommand","mockConfirm","hoisted","fn","mock","actual","importActual","confirm","detectFrameworkRecord","mockResolvedValue","name","slug","LocalFileSystemDetector","testClient","apiVersion","token","getGlobalCliClient","request","users","getById","email","id","provider","clearAllMocks","method","uri","reply","error","stdout","mocks","isInteractive","toBeUndefined","toContain","message","undefined","stderr","toBe","toHaveBeenCalledWith","default"],"mappings":"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"}
@@ -1,335 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { testCommand } from '@sanity/cli-test';
3
- import { afterEach, describe, expect, test, vi } from 'vitest';
4
- import { InitCommand } from '../../init';
5
- const mocks = vi.hoisted(()=>({
6
- checkIsRemoteTemplate: vi.fn().mockReturnValue(false),
7
- detectFrameworkRecord: vi.fn(),
8
- getById: vi.fn(),
9
- getGitHubRepoInfo: vi.fn()
10
- }));
11
- vi.mock('@vercel/fs-detectors', ()=>({
12
- detectFrameworkRecord: mocks.detectFrameworkRecord,
13
- LocalFileSystemDetector: vi.fn()
14
- }));
15
- vi.mock('../../../actions/init/remoteTemplate.js', ()=>({
16
- checkIsRemoteTemplate: mocks.checkIsRemoteTemplate,
17
- getGitHubRepoInfo: mocks.getGitHubRepoInfo
18
- }));
19
- vi.mock('@sanity/cli-core', async (importOriginal)=>{
20
- const actual = await importOriginal();
21
- return {
22
- ...actual,
23
- getGlobalCliClient: vi.fn().mockResolvedValue({
24
- users: {
25
- getById: mocks.getById
26
- }
27
- })
28
- };
29
- });
30
- // Set default mock behavior for getById
31
- mocks.getById.mockResolvedValue({
32
- email: 'test@example.com',
33
- id: 'user-123',
34
- name: 'Test User',
35
- provider: 'saml-123'
36
- });
37
- describe('#init: oclif command setup', ()=>{
38
- afterEach(()=>{
39
- vi.clearAllMocks();
40
- });
41
- test('--help works', async ()=>{
42
- const { stdout } = await runCommand('init --help');
43
- expect(stdout).toMatchInlineSnapshot(String.raw`
44
- "Initialize a new Sanity Studio, project and/or app
45
-
46
- USAGE
47
- $ sanity init [--json] [--auto-updates | --bare] [--coupon
48
- <code> | --project-plan <name>] [--dataset <name> | --dataset-default]
49
- [--env <filename> | ] [--git <message> | ] [--mcp]
50
- [--nextjs-add-config-files] [--nextjs-append-env] [--nextjs-embed-studio]
51
- [--organization <id>] [--output-path <path> | ] [--overwrite-files]
52
- [--package-manager <manager> | ] [--project <id> | --create-project <name>]
53
- [--provider <provider>] [--template <template> | ] [--typescript | ]
54
- [--visibility <mode>] [-y]
55
-
56
- FLAGS
57
- -y, --yes Unattended mode, answers "yes" to any
58
- "yes/no" prompt and otherwise uses defaults
59
- --[no-]auto-updates Enable auto updates of studio versions
60
- --bare Skip the Studio initialization and only print
61
- the selected project ID and dataset name to
62
- stdout
63
- --coupon=<code> Optionally select a coupon for a new project
64
- (cannot be used with --project-plan)
65
- --create-project=<name> Create a new project with the given name
66
- --dataset=<name> Dataset name for the studio
67
- --dataset-default Set up a project with a public dataset named
68
- "production"
69
- --env=<filename> Write environment variables to file
70
- --[no-]git=<message> Specify a commit message for initial commit,
71
- or disable git init
72
- --[no-]mcp Enable AI editor integration (MCP) setup
73
- --organization=<id> Organization ID to use for the project
74
- --output-path=<path> Path to write studio project to
75
- --overwrite-files Overwrite existing files
76
- --package-manager=<manager> Specify which package manager to use
77
- [allowed: npm, yarn, pnpm]
78
- --project=<id> Project ID to use for the studio
79
- --project-plan=<name> Optionally select a plan for a new project
80
- --provider=<provider> Login provider to use
81
- --template=<template> [default: clean] Project template to use
82
- [default: "clean"]
83
- --[no-]typescript Enable TypeScript support
84
- --visibility=<mode> Visibility mode for dataset
85
-
86
- GLOBAL FLAGS
87
- --json Format output as json.
88
-
89
- NEXT.JS FLAGS
90
- --[no-]nextjs-add-config-files Add config files to Next.js project
91
- --[no-]nextjs-append-env Append project ID and dataset to .env file
92
- --[no-]nextjs-embed-studio Embed the Studio in Next.js application
93
-
94
- DESCRIPTION
95
- Initialize a new Sanity Studio, project and/or app
96
-
97
- EXAMPLES
98
- $ sanity init
99
-
100
- Initialize a new project with a public dataset named "production"
101
-
102
- $ sanity init --dataset-default
103
-
104
- Initialize a project with the given project ID and dataset to the given path
105
-
106
- $ sanity init -y --project abc123 --dataset production --output-path \
107
- ~/myproj
108
-
109
- Initialize a project with the given project ID and dataset using the moviedb
110
- template to the given path
111
-
112
- $ sanity init -y --project abc123 --dataset staging --template moviedb \
113
- --output-path .
114
-
115
- Create a brand new project with name "Movies Unlimited"
116
-
117
- $ sanity init -y --create-project "Movies Unlimited" --dataset moviedb \
118
- --visibility private --template moviedb --output-path \
119
- /Users/espenh/movies-unlimited
120
-
121
- "
122
- `);
123
- });
124
- test.each([
125
- {
126
- flag1: 'auto-updates',
127
- flag2: 'bare'
128
- },
129
- {
130
- flag1: 'coupon=123',
131
- flag2: 'project-plan=123'
132
- },
133
- {
134
- flag1: 'dataset="123',
135
- flag2: 'dataset-default'
136
- },
137
- {
138
- flag1: 'env=.env',
139
- flag2: 'bare'
140
- },
141
- {
142
- flag1: 'git=test',
143
- flag2: 'bare'
144
- },
145
- {
146
- flag1: 'no-git',
147
- flag2: 'git=test'
148
- },
149
- {
150
- flag1: 'output-path=/test-path',
151
- flag2: 'bare'
152
- },
153
- {
154
- flag1: 'package-manager=pnpm',
155
- flag2: 'bare'
156
- },
157
- {
158
- flag1: 'template=test',
159
- flag2: 'bare'
160
- },
161
- {
162
- flag1: 'typescript',
163
- flag2: 'bare'
164
- },
165
- {
166
- flag1: 'project=test',
167
- flag2: 'create-project=test'
168
- }
169
- ])('throws error when `$flag1` and `$flag2` flags are both passed', async ({ flag1, flag2 })=>{
170
- const { error } = await testCommand(InitCommand, [
171
- `--${flag1}`,
172
- `--${flag2}`
173
- ], {
174
- mocks: {
175
- isInteractive: true,
176
- token: 'test-token'
177
- }
178
- });
179
- const [name1] = flag1.split('=');
180
- const [name2, value2 = 'true'] = flag2.split('=');
181
- expect(error?.message).toContain(`--${name2}=${value2} cannot also be provided when using --${name1}`);
182
- });
183
- test.each([
184
- {
185
- flag: 'env',
186
- message: 'Env filename (`--env`) must start with `.env`',
187
- value: 'invalid.txt'
188
- },
189
- {
190
- flag: 'visibility',
191
- message: 'Expected --visibility=opaque to be one of: public, private',
192
- value: 'opaque'
193
- },
194
- {
195
- flag: 'package-manager',
196
- message: 'Expected --package-manager=pnm to be one of: npm, yarn, pnpm',
197
- value: 'pnm'
198
- }
199
- ])('throws error when `$flag` value is invalid', async ({ flag, message, value })=>{
200
- const { error } = await testCommand(InitCommand, [
201
- `--${flag}=${value}`
202
- ], {
203
- mocks: {
204
- isInteractive: true,
205
- token: 'test-token'
206
- }
207
- });
208
- expect(error?.message).toContain(message);
209
- });
210
- test('throws error when type argument is passed', async ()=>{
211
- const { error } = await testCommand(InitCommand, [
212
- 'bad-argument'
213
- ], {
214
- mocks: {
215
- isInteractive: true,
216
- token: 'test-token'
217
- }
218
- });
219
- expect(error?.message).toContain('Unknown init type "bad-argument"');
220
- });
221
- test('throws deprecation error when type argument is passed with `plugin`', async ()=>{
222
- const { error } = await testCommand(InitCommand, [
223
- 'plugin'
224
- ], {
225
- mocks: {
226
- isInteractive: true,
227
- token: 'test-token'
228
- }
229
- });
230
- expect(error?.message).toContain('Initializing plugins through the CLI is no longer supported');
231
- });
232
- test('throws error when `reconfigure` flag is passed', async ()=>{
233
- const { error } = await testCommand(InitCommand, [
234
- '--reconfigure'
235
- ], {
236
- mocks: {
237
- isInteractive: true,
238
- token: 'test-token'
239
- }
240
- });
241
- expect(error?.message).toContain('--reconfigure is deprecated - manual configuration is now required');
242
- });
243
- test('throws error when framework and remote template are used together', async ()=>{
244
- mocks.detectFrameworkRecord.mockResolvedValueOnce({
245
- name: 'Next.js',
246
- slug: 'nextjs'
247
- });
248
- mocks.checkIsRemoteTemplate.mockReturnValueOnce(true);
249
- mocks.getGitHubRepoInfo.mockResolvedValueOnce({
250
- branch: 'main',
251
- owner: 'sanity-io',
252
- repo: 'sanity'
253
- });
254
- const { error } = await testCommand(InitCommand, [
255
- '--template=https://github.com/sanity-io/sanity'
256
- ], {
257
- mocks: {
258
- isInteractive: true,
259
- token: 'test-token'
260
- }
261
- });
262
- expect(error?.message).toContain('A remote template cannot be used with a detected framework. Detected: Next.js');
263
- });
264
- test('throws error when in unattended mode and `dataset` is not set', async ()=>{
265
- const { error } = await testCommand(InitCommand, [
266
- '--yes'
267
- ], {
268
- mocks: {
269
- token: 'test-token'
270
- }
271
- });
272
- expect(error?.message).toContain('`--dataset` must be specified in unattended mode');
273
- });
274
- test('throws error when `output-path` is not used in unattended mode with non-nextjs project', async ()=>{
275
- // Mock no framework or a non-Next.js framework
276
- mocks.detectFrameworkRecord.mockResolvedValueOnce(null);
277
- const { error } = await testCommand(InitCommand, [
278
- '--yes',
279
- '--dataset=production',
280
- '--project=test-project'
281
- ], {
282
- mocks: {
283
- token: 'test-token'
284
- }
285
- });
286
- // Should throw output-path error for non-Next.js projects
287
- expect(error?.message).toContain('`--output-path` must be specified in unattended mode');
288
- });
289
- test('throws error when in unattended mode and `project` and `create-project` not set', async ()=>{
290
- mocks.detectFrameworkRecord.mockResolvedValueOnce({
291
- name: 'Next.js',
292
- slug: 'nextjs'
293
- });
294
- const { error } = await testCommand(InitCommand, [
295
- '--yes',
296
- '--dataset=production'
297
- ], {
298
- mocks: {
299
- token: 'test-token'
300
- }
301
- });
302
- expect(error?.message).toContain('`--project <id>` or `--create-project <name>` must be specified in unattended mode');
303
- });
304
- test('throws error when in unattended mode and `create-project` not set with `organization`', async ()=>{
305
- mocks.detectFrameworkRecord.mockResolvedValueOnce({
306
- name: 'Next.js',
307
- slug: 'nextjs'
308
- });
309
- const { error } = await testCommand(InitCommand, [
310
- '--yes',
311
- '--dataset=production',
312
- '--create-project=test'
313
- ], {
314
- mocks: {
315
- token: 'test-token'
316
- }
317
- });
318
- expect(error?.message).toContain('--create-project is not supported in unattended mode without an organization, please specify an organization with `--organization <id>`');
319
- });
320
- test('logs properly if app template flag is not valid', async ()=>{
321
- mocks.detectFrameworkRecord.mockResolvedValueOnce(null);
322
- const { stdout } = await testCommand(InitCommand, [
323
- '--template=invalid-template-name'
324
- ], {
325
- mocks: {
326
- isInteractive: true,
327
- token: 'test-token'
328
- }
329
- });
330
- // When template is not an app template, it should log "Fetching existing projects"
331
- expect(stdout).toContain('Fetching existing projects');
332
- });
333
- });
334
-
335
- //# sourceMappingURL=init.setup.test.js.map