@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,20 +1,25 @@
1
1
  // @Todo will remove by time migration of this command is complete
2
2
  /* eslint-disable @typescript-eslint/no-unused-vars */ import { Args, Flags } from '@oclif/core';
3
+ import { CLIError } from '@oclif/core/errors';
3
4
  import { getCliToken, SanityCommand, subdebug } from '@sanity/cli-core';
4
- import { confirm, input, logSymbols, select, spinner } from '@sanity/cli-core/ux';
5
+ import { chalk, confirm, input, logSymbols, select, Separator, spinner } from '@sanity/cli-core/ux';
5
6
  import { isHttpError } from '@sanity/client';
6
7
  import { frameworks } from '@vercel/frameworks';
7
8
  import { detectFrameworkRecord, LocalFileSystemDetector } from '@vercel/fs-detectors';
8
9
  import { getProviderName } from '../actions/auth/getProviderName.js';
9
10
  import { login } from '../actions/auth/login/login.js';
11
+ import { createDataset } from '../actions/dataset/create.js';
10
12
  import { determineAppTemplate } from '../actions/init/determineAppTemplate.js';
11
13
  import { checkIsRemoteTemplate, getGitHubRepoInfo } from '../actions/init/remoteTemplate.js';
12
14
  import { getOrganizationChoices } from '../actions/organizations/getOrganizationChoices.js';
13
15
  import { getOrganizationsWithAttachGrantInfo } from '../actions/organizations/getOrganizationsWithAttachGrantInfo.js';
14
- import { createDataset } from '../services/datasets.js';
16
+ import { hasProjectAttachGrant } from '../actions/organizations/hasProjectAttachGrant.js';
17
+ import { promptForDatasetName } from '../prompts/promptForDatasetName.js';
18
+ import { createDataset as createDatasetService, listDatasets } from '../services/datasets.js';
19
+ import { getProjectFeatures } from '../services/getProjectFeatures.js';
15
20
  import { createOrganization, listOrganizations } from '../services/organizations.js';
16
21
  import { getPlanId, getPlanIdFromCoupon } from '../services/plans.js';
17
- import { createProject } from '../services/projects.js';
22
+ import { createProject, listProjects } from '../services/projects.js';
18
23
  import { getCliUser } from '../services/user.js';
19
24
  const debug = subdebug('init');
20
25
  export class InitCommand extends SanityCommand {
@@ -85,7 +90,7 @@ export class InitCommand extends SanityCommand {
85
90
  helpValue: '<filename>',
86
91
  parse: async (input)=>{
87
92
  if (!input.startsWith('.env')) {
88
- throw new Error('Env filename (`--env`) must start with `.env`');
93
+ throw new CLIError('Env filename (`--env`) must start with `.env`');
89
94
  }
90
95
  return input;
91
96
  }
@@ -249,12 +254,14 @@ export class InitCommand extends SanityCommand {
249
254
  }
250
255
  // Oclif doesn't support custom exclusive error messaging
251
256
  if (this.flags.project && this.flags.organization) {
252
- throw new Error('You have specified both a project and an organization. To move a project to an organization please visit https://www.sanity.io/manage');
257
+ this.error('You have specified both a project and an organization. To move a project to an organization please visit https://www.sanity.io/manage', {
258
+ exit: 1
259
+ });
253
260
  }
254
261
  const defaultConfig = this.flags['dataset-default'];
255
- let _showDefaultConfigPrompt = !defaultConfig;
262
+ let showDefaultConfigPrompt = !defaultConfig;
256
263
  if (this.flags.dataset || this.flags.visibility || this.flags['dataset-default'] || this.isUnattended()) {
257
- _showDefaultConfigPrompt = false;
264
+ showDefaultConfigPrompt = false;
258
265
  }
259
266
  const detectedFramework = await detectFrameworkRecord({
260
267
  frameworkList: frameworks,
@@ -313,29 +320,52 @@ export class InitCommand extends SanityCommand {
313
320
  this.log(`${logSymbols.success} Fetching existing projects`);
314
321
  this.log('');
315
322
  }
316
- const _newProjectId = createProjectName && await this.createProject({
323
+ const _newProjectId = createProjectName && await this.createProjectFromName({
317
324
  createProjectName,
318
325
  planId,
319
326
  user
320
327
  });
328
+ const { datasetName, projectId } = await this.getProjectDetails({
329
+ isAppTemplate,
330
+ planId,
331
+ showDefaultConfigPrompt,
332
+ user
333
+ });
334
+ // If user doesn't want to output any template code
335
+ if (this.flags.bare) {
336
+ this.log(`${logSymbols.success} Below are your project details`);
337
+ this.log('');
338
+ this.log(`Project ID: ${chalk.cyan(projectId)}`);
339
+ this.log(`Dataset: ${chalk.cyan(datasetName)}`);
340
+ this.log(`\nYou can find your project on Sanity Manage — https://www.sanity.io/manage/project/${projectId}\n`);
341
+ return;
342
+ }
321
343
  }
322
344
  checkFlagsInUnattendedMode({ createProjectName, isNextJs }) {
323
345
  debug('Unattended mode, validating required options');
324
346
  if (!this.flags['dataset']) {
325
- throw new Error(`\`--dataset\` must be specified in unattended mode`);
347
+ this.error(`\`--dataset\` must be specified in unattended mode`, {
348
+ exit: 1
349
+ });
326
350
  }
327
351
  // output-path is required in unattended mode when not using nextjs
328
352
  if (!isNextJs && !this.flags['output-path']) {
329
- throw new Error(`\`--output-path\` must be specified in unattended mode`);
353
+ this.error(`\`--output-path\` must be specified in unattended mode`, {
354
+ exit: 1
355
+ });
330
356
  }
331
357
  if (!this.flags.project && !createProjectName) {
332
- throw new Error('`--project <id>` or `--create-project <name>` must be specified in unattended mode');
358
+ this.error('`--project <id>` or `--create-project <name>` must be specified in unattended mode', {
359
+ exit: 1
360
+ });
333
361
  }
334
362
  if (createProjectName && !this.flags.organization) {
335
- throw new Error('--create-project is not supported in unattended mode without an organization, please specify an organization with `--organization <id>`');
363
+ this.error('--create-project is not supported in unattended mode without an organization, please specify an organization with `--organization <id>`', {
364
+ exit: 1
365
+ });
336
366
  }
337
367
  }
338
- async createProject({ createProjectName, planId, user }) {
368
+ async createProjectFromName({ createProjectName, planId, user }) {
339
369
  debug('--create-project specified, creating a new project');
340
370
  let orgForCreateProjectFlag = this.flags.organization;
341
371
  if (!orgForCreateProjectFlag) {
@@ -361,7 +391,7 @@ export class InitCommand extends SanityCommand {
361
391
  if (this.flags.dataset) {
362
392
  debug('--dataset specified, creating dataset (%s)', this.flags.dataset);
363
393
  const spin = spinner('Creating dataset').start();
364
- await createDataset({
394
+ await createDatasetService({
365
395
  aclMode: this.flags.visibility,
366
396
  datasetName: this.flags.dataset,
367
397
  projectId: createdProject.projectId
@@ -390,7 +420,9 @@ export class InitCommand extends SanityCommand {
390
420
  // trace.log({ step: 'login', alreadyLoggedIn: true })
391
421
  } else {
392
422
  if (this.isUnattended()) {
393
- throw new Error('Must be logged in to run this command in unattended mode, run `sanity login`');
423
+ this.error('Must be logged in to run this command in unattended mode, run `sanity login`', {
424
+ exit: 1
425
+ });
394
426
  }
395
427
  // @todo telemetry
396
428
  //trace.log({step: 'login'})
@@ -405,6 +437,220 @@ export class InitCommand extends SanityCommand {
405
437
  user
406
438
  };
407
439
  }
440
+ async getOrCreateDataset(opts) {
441
+ const visibility = this.flags.visibility;
442
+ const dataset = this.flags.dataset;
443
+ let defaultConfig = this.flags['dataset-default'];
444
+ if (dataset && this.isUnattended()) {
445
+ return {
446
+ datasetName: dataset,
447
+ userAction: 'none'
448
+ };
449
+ }
450
+ const [datasets, projectFeatures] = await Promise.all([
451
+ listDatasets(opts.projectId),
452
+ getProjectFeatures(opts.projectId)
453
+ ]);
454
+ if (dataset) {
455
+ debug('User has specified dataset through a flag (%s)', dataset);
456
+ const existing = datasets.find((ds)=>ds.name === dataset);
457
+ if (!existing) {
458
+ debug('Specified dataset not found, creating it');
459
+ await createDataset({
460
+ datasetName: dataset,
461
+ forcePublic: defaultConfig,
462
+ output: this.output,
463
+ projectFeatures,
464
+ projectId: opts.projectId,
465
+ visibility
466
+ });
467
+ }
468
+ return {
469
+ datasetName: dataset,
470
+ userAction: 'none'
471
+ };
472
+ }
473
+ const datasetInfo = 'Your content will be stored in a dataset that can be public or private, depending on\nwhether you want to query your content with or without authentication.\nThe default dataset configuration has a public dataset named "production".';
474
+ if (datasets.length === 0) {
475
+ debug('No datasets found for project, prompting for name');
476
+ if (opts.showDefaultConfigPrompt) {
477
+ this.log(datasetInfo);
478
+ defaultConfig = await this.promptForDefaultConfig();
479
+ }
480
+ const name = defaultConfig ? 'production' : await promptForDatasetName({
481
+ message: 'Name of your first dataset:'
482
+ });
483
+ await createDataset({
484
+ datasetName: name,
485
+ forcePublic: defaultConfig,
486
+ output: this.output,
487
+ projectFeatures,
488
+ projectId: opts.projectId,
489
+ visibility
490
+ });
491
+ return {
492
+ datasetName: name,
493
+ userAction: 'create'
494
+ };
495
+ }
496
+ debug(`User has ${datasets.length} dataset(s) already, showing list of choices`);
497
+ const datasetChoices = datasets.map((dataset)=>({
498
+ value: dataset.name
499
+ }));
500
+ const selected = await select({
501
+ choices: [
502
+ {
503
+ name: 'Create new dataset',
504
+ value: 'new'
505
+ },
506
+ new Separator(),
507
+ ...datasetChoices
508
+ ],
509
+ message: 'Select dataset to use'
510
+ });
511
+ if (selected === 'new') {
512
+ const existingDatasetNames = datasets.map((ds)=>ds.name);
513
+ debug('User wants to create a new dataset, prompting for name');
514
+ if (opts.showDefaultConfigPrompt && !existingDatasetNames.includes('production')) {
515
+ this.log(datasetInfo);
516
+ defaultConfig = await this.promptForDefaultConfig();
517
+ }
518
+ const newDatasetName = defaultConfig ? 'production' : await promptForDatasetName({
519
+ message: 'Dataset name:'
520
+ }, existingDatasetNames);
521
+ await createDataset({
522
+ datasetName: newDatasetName,
523
+ forcePublic: defaultConfig,
524
+ output: this.output,
525
+ projectFeatures,
526
+ projectId: opts.projectId,
527
+ visibility
528
+ });
529
+ return {
530
+ datasetName: newDatasetName,
531
+ userAction: 'create'
532
+ };
533
+ }
534
+ debug(`Returning selected dataset (${selected})`);
535
+ return {
536
+ datasetName: selected,
537
+ userAction: 'select'
538
+ };
539
+ }
540
+ async getOrCreateProject({ planId, user }) {
541
+ const projectId = this.flags.project;
542
+ const organizationId = this.flags.organization;
543
+ let projects;
544
+ let organizations;
545
+ try {
546
+ const [allProjects, allOrgs] = await Promise.all([
547
+ listProjects(),
548
+ listOrganizations()
549
+ ]);
550
+ projects = allProjects.toSorted((a, b)=>b.createdAt.localeCompare(a.createdAt));
551
+ organizations = allOrgs;
552
+ } catch (err) {
553
+ if (this.isUnattended() && projectId) {
554
+ return {
555
+ displayName: 'Unknown project',
556
+ isFirstProject: false,
557
+ projectId,
558
+ userAction: 'select'
559
+ };
560
+ }
561
+ this.error(`Failed to communicate with the Sanity API:\n${err.message}`, {
562
+ exit: 1
563
+ });
564
+ }
565
+ if (projects.length === 0 && this.isUnattended()) {
566
+ this.error('No projects found for current user', {
567
+ exit: 1
568
+ });
569
+ }
570
+ if (projectId) {
571
+ const project = projects.find((proj)=>proj.id === projectId);
572
+ if (!project && !this.isUnattended()) {
573
+ this.error(`Given project ID (${projectId}) not found, or you do not have access to it`, {
574
+ exit: 1
575
+ });
576
+ }
577
+ return {
578
+ displayName: project ? project.displayName : 'Unknown project',
579
+ isFirstProject: false,
580
+ projectId,
581
+ userAction: 'select'
582
+ };
583
+ }
584
+ if (organizationId) {
585
+ const organization = organizations.find((org)=>org.id === organizationId) || organizations.find((org)=>org.slug === organizationId);
586
+ if (!organization) {
587
+ this.error(`Given organization ID (${organizationId}) not found, or you do not have access to it`, {
588
+ exit: 1
589
+ });
590
+ }
591
+ if (!await hasProjectAttachGrant(organizationId)) {
592
+ this.error('You lack the necessary permissions to attach a project to this organization', {
593
+ exit: 1
594
+ });
595
+ }
596
+ }
597
+ // If the user has no projects or is using a coupon (which can only be applied to new projects)
598
+ // just ask for project details instead of showing a list of projects
599
+ const isUsersFirstProject = projects.length === 0;
600
+ if (isUsersFirstProject || this.flags.coupon) {
601
+ debug(isUsersFirstProject ? 'No projects found for user, prompting for name' : 'Using a coupon - skipping project selection');
602
+ const newProject = await this.promptForProjectCreation({
603
+ isUsersFirstProject,
604
+ organizationId,
605
+ organizations,
606
+ planId,
607
+ user
608
+ });
609
+ return {
610
+ ...newProject,
611
+ isFirstProject: isUsersFirstProject,
612
+ userAction: 'create'
613
+ };
614
+ }
615
+ debug(`User has ${projects.length} project(s) already, showing list of choices`);
616
+ const projectChoices = projects.map((project)=>({
617
+ name: `${project.displayName} (${project.id})`,
618
+ value: project.id
619
+ }));
620
+ const selected = await select({
621
+ choices: [
622
+ {
623
+ name: 'Create new project',
624
+ value: 'new'
625
+ },
626
+ new Separator(),
627
+ ...projectChoices
628
+ ],
629
+ message: 'Create a new project or select an existing one'
630
+ });
631
+ if (selected === 'new') {
632
+ debug('User wants to create a new project, prompting for name');
633
+ const newProject = await this.promptForProjectCreation({
634
+ isUsersFirstProject,
635
+ organizationId,
636
+ organizations,
637
+ planId,
638
+ user
639
+ });
640
+ return {
641
+ ...newProject,
642
+ isFirstProject: isUsersFirstProject,
643
+ userAction: 'create'
644
+ };
645
+ }
646
+ debug(`Returning selected project (${selected})`);
647
+ return {
648
+ displayName: projects.find((proj)=>proj.id === selected)?.displayName || '',
649
+ isFirstProject: isUsersFirstProject,
650
+ projectId: selected,
651
+ userAction: 'select'
652
+ };
653
+ }
408
654
  async getPlan() {
409
655
  const intendedPlan = this.flags['project-plan'];
410
656
  const intendedCoupon = this.flags.coupon;
@@ -416,6 +662,92 @@ export class InitCommand extends SanityCommand {
416
662
  return undefined;
417
663
  }
418
664
  }
665
+ async getProjectDetails({ isAppTemplate, planId, showDefaultConfigPrompt, user }) {
666
+ if (isAppTemplate) {
667
+ const organizations = await listOrganizations({
668
+ includeImplicitMemberships: 'true',
669
+ includeMembers: 'true'
670
+ });
671
+ const appOrganizationId = await this.promptUserForOrganization({
672
+ organizations,
673
+ user
674
+ });
675
+ return {
676
+ datasetName: '',
677
+ displayName: '',
678
+ isFirstProject: false,
679
+ organizationId: appOrganizationId,
680
+ projectId: ''
681
+ };
682
+ }
683
+ debug('Prompting user to select or create a project');
684
+ const project = await this.getOrCreateProject({
685
+ planId,
686
+ user
687
+ });
688
+ debug(`Project with name ${project.displayName} selected`);
689
+ // Now let's pick or create a dataset
690
+ debug('Prompting user to select or create a dataset');
691
+ const dataset = await this.getOrCreateDataset({
692
+ displayName: project.displayName,
693
+ projectId: project.projectId,
694
+ showDefaultConfigPrompt
695
+ });
696
+ debug(`Dataset with name ${dataset.datasetName} selected`);
697
+ // @todo
698
+ // trace.log({
699
+ // step: 'createOrSelectDataset',
700
+ // selectedOption: dataset.userAction,
701
+ // datasetName: dataset.datasetName,
702
+ // visibility: flags.visibility as 'private' | 'public',
703
+ // })
704
+ return {
705
+ datasetName: dataset.datasetName,
706
+ displayName: project.displayName,
707
+ isFirstProject: project.isFirstProject,
708
+ projectId: project.projectId
709
+ };
710
+ }
711
+ async promptForDefaultConfig() {
712
+ return confirm({
713
+ default: true,
714
+ message: 'Use the default dataset configuration?'
715
+ });
716
+ }
717
+ async promptForProjectCreation({ isUsersFirstProject, organizationId, organizations, planId, user }) {
718
+ const projectName = await input({
719
+ default: 'My Sanity Project',
720
+ message: 'Project name:',
721
+ validate (input) {
722
+ if (!input || input.trim() === '') {
723
+ return 'Project name cannot be empty';
724
+ }
725
+ if (input.length > 80) {
726
+ return 'Project name cannot be longer than 80 characters';
727
+ }
728
+ return true;
729
+ }
730
+ });
731
+ const organization = organizationId || await this.promptUserForOrganization({
732
+ organizations,
733
+ user
734
+ });
735
+ const newProject = await createProject({
736
+ displayName: projectName,
737
+ metadata: {
738
+ coupon: this.flags.coupon
739
+ },
740
+ organizationId: organization,
741
+ subscription: planId ? {
742
+ planId
743
+ } : undefined
744
+ });
745
+ return {
746
+ ...newProject,
747
+ isFirstProject: isUsersFirstProject,
748
+ userAction: 'create'
749
+ };
750
+ }
419
751
  async promptUserForNewOrganization(user) {
420
752
  const name = await input({
421
753
  default: user ? user.name : undefined,
@@ -472,7 +804,9 @@ export class InitCommand extends SanityCommand {
472
804
  } catch (err) {
473
805
  if (!isHttpError(err) || err.statusCode !== 404) {
474
806
  const message = err instanceof Error ? err.message : `${err}`;
475
- throw new Error(`Unable to validate coupon, please try again later:\n\n${message}`);
807
+ this.error(`Unable to validate coupon, please try again later:\n\n${message}`, {
808
+ exit: 1
809
+ });
476
810
  }
477
811
  const useDefaultPlan = this.isUnattended() || await confirm({
478
812
  default: true,
@@ -490,7 +824,9 @@ export class InitCommand extends SanityCommand {
490
824
  if (useDefaultPlan) {
491
825
  this.log('Using default plan.');
492
826
  } else {
493
- throw new Error(`Coupon "${intendedCoupon}" does not exist`);
827
+ this.error(`Coupon "${intendedCoupon}" does not exist`, {
828
+ exit: 1
829
+ });
494
830
  }
495
831
  }
496
832
  }
@@ -501,8 +837,8 @@ export class InitCommand extends SanityCommand {
501
837
  } catch (err) {
502
838
  if (!isHttpError(err) || err.statusCode !== 404) {
503
839
  const message = err instanceof Error ? err.message : `${err}`;
504
- throw new Error(`Unable to validate plan, please try again later:\n\n${message}`, {
505
- cause: err
840
+ this.error(`Unable to validate plan, please try again later:\n\n${message}`, {
841
+ exit: 1
506
842
  });
507
843
  }
508
844
  const useDefaultPlan = this.isUnattended() || await confirm({
@@ -521,7 +857,9 @@ export class InitCommand extends SanityCommand {
521
857
  if (useDefaultPlan) {
522
858
  this.log('Using default plan.');
523
859
  } else {
524
- throw new Error(`Plan id "${intendedPlan}" does not exist`);
860
+ this.error(`Plan id "${intendedPlan}" does not exist`, {
861
+ exit: 1
862
+ });
525
863
  }
526
864
  }
527
865
  }