@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 +1 @@
1
- {"version":3,"sources":["../../src/commands/init.ts"],"sourcesContent":["// @Todo will remove by time migration of this command is complete\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {Args, Command, Flags} from '@oclif/core'\nimport {type FlagInput} from '@oclif/core/interfaces'\nimport {getCliToken, SanityCommand, type SanityOrgUser, subdebug} from '@sanity/cli-core'\nimport {confirm, input, logSymbols, select, spinner} from '@sanity/cli-core/ux'\nimport {type DatasetAclMode, isHttpError} from '@sanity/client'\nimport {type Framework, frameworks} from '@vercel/frameworks'\nimport {detectFrameworkRecord, LocalFileSystemDetector} from '@vercel/fs-detectors'\n\nimport {getProviderName} from '../actions/auth/getProviderName.js'\nimport {login} from '../actions/auth/login/login.js'\nimport {determineAppTemplate} from '../actions/init/determineAppTemplate.js'\nimport {\n checkIsRemoteTemplate,\n getGitHubRepoInfo,\n type RepoInfo,\n} from '../actions/init/remoteTemplate.js'\nimport {getOrganizationChoices} from '../actions/organizations/getOrganizationChoices.js'\nimport {getOrganizationsWithAttachGrantInfo} from '../actions/organizations/getOrganizationsWithAttachGrantInfo.js'\nimport {createDataset} from '../services/datasets.js'\nimport {\n createOrganization,\n listOrganizations,\n type OrganizationCreateResponse,\n type ProjectOrganization,\n} from '../services/organizations.js'\nimport {getPlanId, getPlanIdFromCoupon} from '../services/plans.js'\nimport {createProject} from '../services/projects.js'\nimport {getCliUser} from '../services/user.js'\n\nconst debug = subdebug('init')\n\nexport class InitCommand extends SanityCommand<typeof InitCommand> {\n static override args = {type: Args.string({hidden: true})}\n static override description = 'Initialize a new Sanity Studio, project and/or app'\n static override enableJsonFlag = true\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n {\n command: '<%= config.bin %> <%= command.id %> --dataset-default',\n description: 'Initialize a new project with a public dataset named \"production\"',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --project abc123 --dataset production --output-path ~/myproj',\n description: 'Initialize a project with the given project ID and dataset to the given path',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --project abc123 --dataset staging --template moviedb --output-path .',\n description:\n 'Initialize a project with the given project ID and dataset using the moviedb template to the given path',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --create-project \"Movies Unlimited\" --dataset moviedb --visibility private --template moviedb --output-path /Users/espenh/movies-unlimited',\n description: 'Create a brand new project with name \"Movies Unlimited\"',\n },\n ] satisfies Array<Command.Example>\n\n static override flags = {\n 'auto-updates': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Enable auto updates of studio versions',\n exclusive: ['bare'],\n }),\n bare: Flags.boolean({\n description:\n 'Skip the Studio initialization and only print the selected project ID and dataset name to stdout',\n }),\n coupon: Flags.string({\n description:\n 'Optionally select a coupon for a new project (cannot be used with --project-plan)',\n exclusive: ['project-plan'],\n helpValue: '<code>',\n }),\n 'create-project': Flags.string({\n description: 'Create a new project with the given name',\n helpValue: '<name>',\n }),\n dataset: Flags.string({\n description: 'Dataset name for the studio',\n exclusive: ['dataset-default'],\n helpValue: '<name>',\n }),\n 'dataset-default': Flags.boolean({\n description: 'Set up a project with a public dataset named \"production\"',\n }),\n env: Flags.string({\n description: 'Write environment variables to file',\n exclusive: ['bare'],\n helpValue: '<filename>',\n parse: async (input) => {\n if (!input.startsWith('.env')) {\n throw new Error('Env filename (`--env`) must start with `.env`')\n }\n return input\n },\n }),\n 'from-create': Flags.boolean({\n description: 'Internal flag to indicate that the command is run from create-sanity',\n hidden: true,\n }),\n git: Flags.string({\n default: undefined,\n description: 'Specify a commit message for initial commit, or disable git init',\n exclusive: ['bare'],\n // oclif doesn't indent correctly with custom help labels, thus leading space :/\n helpLabel: ' --[no-]git',\n helpValue: '<message>',\n }),\n mcp: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Enable AI editor integration (MCP) setup',\n }),\n 'nextjs-add-config-files': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Add config files to Next.js project',\n helpGroup: 'Next.js',\n }),\n 'nextjs-append-env': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Append project ID and dataset to .env file',\n helpGroup: 'Next.js',\n }),\n 'nextjs-embed-studio': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Embed the Studio in Next.js application',\n helpGroup: 'Next.js',\n }),\n // oclif doesn't support a boolean/string flag combination, but listing both a\n // `--git` and a `--no-git` flag in help breaks conventions, so we hide this one,\n // but use it to \"combine\" the two in the actual logic.\n 'no-git': Flags.boolean({\n description: 'Disable git initialization',\n exclusive: ['git'],\n hidden: true,\n }),\n organization: Flags.string({\n description: 'Organization ID to use for the project',\n helpValue: '<id>',\n }),\n 'output-path': Flags.string({\n description: 'Path to write studio project to',\n exclusive: ['bare'],\n helpValue: '<path>',\n }),\n 'overwrite-files': Flags.boolean({\n default: false,\n description: 'Overwrite existing files',\n }),\n 'package-manager': Flags.string({\n description: 'Specify which package manager to use [allowed: npm, yarn, pnpm]',\n exclusive: ['bare'],\n helpValue: '<manager>',\n options: ['npm', 'yarn', 'pnpm'],\n }),\n project: Flags.string({\n aliases: ['project-id'],\n description: 'Project ID to use for the studio',\n exclusive: ['create-project'],\n helpValue: '<id>',\n }),\n 'project-plan': Flags.string({\n description: 'Optionally select a plan for a new project',\n helpValue: '<name>',\n }),\n provider: Flags.string({\n description: 'Login provider to use',\n helpValue: '<provider>',\n }),\n reconfigure: Flags.boolean({\n deprecated: {message: 'This flag is no longer supported', version: '3.0.0'},\n description: 'Reconfigure an existing project',\n hidden: true,\n }),\n template: Flags.string({\n default: 'clean',\n description: 'Project template to use [default: \"clean\"]',\n exclusive: ['bare'],\n helpValue: '<template>',\n }),\n // Porting over a beta flag\n // Oclif doesn't seem to support something in beta so hiding for now\n 'template-token': Flags.string({\n description: 'Used for accessing private GitHub repo templates',\n hidden: true,\n }),\n typescript: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Enable TypeScript support',\n exclusive: ['bare'],\n }),\n visibility: Flags.string({\n description: 'Visibility mode for dataset',\n helpValue: '<mode>',\n options: ['public', 'private'],\n }),\n yes: Flags.boolean({\n char: 'y',\n default: false,\n description:\n 'Unattended mode, answers \"yes\" to any \"yes/no\" prompt and otherwise uses defaults',\n }),\n } satisfies FlagInput\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(InitCommand)\n const createProjectName = this.flags['create-project']\n // For backwards \"compatibility\" - we used to allow `sanity init plugin`,\n // and no longer do - but instead of printing an error about an unknown\n // _command_, we want to acknowledge that the user is trying to do something\n // that no longer exists but might have at some point in the past.\n if (args.type) {\n this.error(\n args.type === 'plugin'\n ? 'Initializing plugins through the CLI is no longer supported'\n : `Unknown init type \"${args.type}\"`,\n {exit: 1},\n )\n }\n\n // @todo\n //const trace = telemetry.trace(CLIInitStepCompleted)\n\n // Slightly more helpful message for removed flags rather than just saying the flag\n // does not exist.\n if (this.flags.reconfigure) {\n this.error('--reconfigure is deprecated - manual configuration is now required', {exit: 1})\n }\n\n // Oclif doesn't support custom exclusive error messaging\n if (this.flags.project && this.flags.organization) {\n throw new Error(\n 'You have specified both a project and an organization. To move a project to an organization please visit https://www.sanity.io/manage',\n )\n }\n\n const defaultConfig = this.flags['dataset-default']\n let _showDefaultConfigPrompt = !defaultConfig\n if (\n this.flags.dataset ||\n this.flags.visibility ||\n this.flags['dataset-default'] ||\n this.isUnattended()\n ) {\n _showDefaultConfigPrompt = false\n }\n\n const detectedFramework: Framework | null = await detectFrameworkRecord({\n frameworkList: frameworks as readonly Framework[],\n fs: new LocalFileSystemDetector(process.cwd()),\n })\n const isNextJs = detectedFramework?.slug === 'nextjs'\n\n let remoteTemplateInfo: RepoInfo | undefined\n if (flags.template && checkIsRemoteTemplate(flags.template)) {\n remoteTemplateInfo = await getGitHubRepoInfo(flags.template, flags['template-token'])\n }\n\n if (detectedFramework && detectedFramework.slug !== 'sanity' && remoteTemplateInfo) {\n this.error(\n `A remote template cannot be used with a detected framework. Detected: ${detectedFramework.name}`,\n {exit: 1},\n )\n }\n\n // Checks flags are present when in unattended mode\n if (this.isUnattended()) {\n this.checkFlagsInUnattendedMode({createProjectName, isNextJs})\n }\n\n // @todo\n // trace.start()\n // trace.log({\n // step: 'start',\n // flags: {\n // defaultConfig,\n // unattended,\n // plan: intendedPlan,\n // coupon: intendedCoupon,\n // reconfigure,\n // git: commitMessage,\n // bare: bareOutput,\n // env,\n // },\n // })\n\n // Plan can be set through `--project-plan`, or implied through `--coupon`.\n // As coupons can expire and project plans might change/be removed, we need to\n // verify that the passed flags are valid. The complexity of this is hidden in the\n // below plan methods, eventually returning a plan ID or undefined if we are told to\n // use the default plan.\n\n const planId = await this.getPlan()\n\n let envFilenameDefault = '.env'\n if (detectedFramework && detectedFramework.slug === 'nextjs') {\n envFilenameDefault = '.env.local'\n }\n const _envFilename = typeof flags.env === 'string' ? flags.env : envFilenameDefault\n\n // If the user isn't already autenticated, make it so\n const {user} = await this.ensureAuthenticated()\n\n // skip project / dataset prompting\n const template = this.flags.template\n const isAppTemplate = template ? determineAppTemplate(template) : false // Default to false\n if (!isAppTemplate) {\n this.log(`${logSymbols.success} Fetching existing projects`)\n this.log('')\n }\n\n const _newProjectId =\n createProjectName && (await this.createProject({createProjectName, planId, user}))\n }\n\n private checkFlagsInUnattendedMode({\n createProjectName,\n isNextJs,\n }: {\n createProjectName: string | undefined\n isNextJs: boolean\n }) {\n debug('Unattended mode, validating required options')\n\n if (!this.flags['dataset']) {\n throw new Error(`\\`--dataset\\` must be specified in unattended mode`)\n }\n\n // output-path is required in unattended mode when not using nextjs\n if (!isNextJs && !this.flags['output-path']) {\n throw new Error(`\\`--output-path\\` must be specified in unattended mode`)\n }\n\n if (!this.flags.project && !createProjectName) {\n throw new Error(\n '`--project <id>` or `--create-project <name>` must be specified in unattended mode',\n )\n }\n\n if (createProjectName && !this.flags.organization) {\n throw new Error(\n '--create-project is not supported in unattended mode without an organization, please specify an organization with `--organization <id>`',\n )\n }\n }\n\n private async createProject({\n createProjectName,\n planId,\n user,\n }: {\n createProjectName: string\n planId: string | undefined\n user: SanityOrgUser\n }): Promise<string> {\n debug('--create-project specified, creating a new project')\n\n let orgForCreateProjectFlag = this.flags.organization\n\n if (!orgForCreateProjectFlag) {\n debug('no organization specified, selecting one')\n const organizations = await listOrganizations()\n orgForCreateProjectFlag = await this.promptUserForOrganization({organizations, user})\n }\n\n debug('creating a new project')\n const createdProject = await createProject({\n displayName: createProjectName.trim(),\n metadata: {coupon: this.flags.coupon},\n organizationId: orgForCreateProjectFlag,\n subscription: planId ? {planId} : undefined,\n })\n\n debug('Project with ID %s created', createdProject.projectId)\n if (this.flags.dataset) {\n debug('--dataset specified, creating dataset (%s)', this.flags.dataset)\n const spin = spinner('Creating dataset').start()\n await createDataset({\n aclMode: this.flags.visibility as DatasetAclMode,\n datasetName: this.flags.dataset,\n projectId: createdProject.projectId,\n })\n spin.succeed()\n }\n\n return createdProject.projectId\n }\n\n // @todo do we actually need to be authenticated for init? check flags and determine.\n private async ensureAuthenticated(): Promise<{user: SanityOrgUser}> {\n let isAuthenticated = (await getCliToken()) !== undefined\n debug(isAuthenticated ? 'User already has a token' : 'User has no token')\n\n let user: SanityOrgUser | undefined\n if (isAuthenticated) {\n // It _appears_ we are authenticated, but the token might be invalid/expired,\n // so we need to verify that we can actually make an authenticated request.\n try {\n user = await getCliUser()\n } catch {\n // assume that any error means that the token is invalid\n isAuthenticated = false\n }\n }\n\n if (isAuthenticated) {\n // @todo telemetry\n // trace.log({ step: 'login', alreadyLoggedIn: true })\n } else {\n if (this.isUnattended()) {\n throw new Error(\n 'Must be logged in to run this command in unattended mode, run `sanity login`',\n )\n }\n\n // @todo telemetry\n //trace.log({step: 'login'})\n\n // @todo trigger login action, then get and return user info\n await login({output: this.output})\n }\n\n user = await getCliUser()\n\n this.log(\n `${logSymbols.success} You are logged in as ${user.email} using ${getProviderName(user.provider)}`,\n )\n return {user}\n }\n\n private async getPlan(): Promise<string | undefined> {\n const intendedPlan = this.flags['project-plan']\n const intendedCoupon = this.flags.coupon\n\n if (intendedCoupon) {\n return this.verifyCoupon(intendedCoupon)\n } else if (intendedPlan) {\n return this.verifyPlan(intendedPlan)\n } else {\n return undefined\n }\n }\n\n private async promptUserForNewOrganization(\n user: SanityOrgUser,\n ): Promise<OrganizationCreateResponse> {\n const name = await input({\n default: user ? user.name : undefined,\n message: 'Organization name:',\n validate(input) {\n if (input.length === 0) {\n return 'Organization name cannot be empty'\n } else if (input.length > 100) {\n return 'Organization name cannot be longer than 100 characters'\n }\n return true\n },\n })\n\n const spin = spinner('Creating organization').start()\n const organization = await createOrganization(name)\n spin.succeed()\n\n return organization\n }\n\n private async promptUserForOrganization({\n organizations,\n user,\n }: {\n organizations: ProjectOrganization[]\n user: SanityOrgUser\n }) {\n // If the user has no organizations, prompt them to create one with the same name as\n // their user, but allow them to customize it if they want\n if (organizations.length === 0) {\n const newOrganization = await this.promptUserForNewOrganization(user)\n return newOrganization.id\n }\n\n // If the user has organizations, let them choose from them, but also allow them to\n // create a new one in case they do not have access to any of them, or they want to\n // create a personal/other organization.\n debug(`User has ${organizations.length} organization(s), checking attach access`)\n const withGrantInfo = await getOrganizationsWithAttachGrantInfo(organizations)\n const withAttach = withGrantInfo.filter(({hasAttachGrant}) => hasAttachGrant)\n\n debug('User has attach access to %d organizations.', withAttach.length)\n const organizationChoices = getOrganizationChoices(withAttach)\n\n // If the user only has a single organization (and they have attach access to it),\n // we'll default to that one. Otherwise, we'll default to the organization with the\n // same name as the user if it exists.\n const defaultOrganizationId =\n withAttach.length === 1\n ? withAttach[0].organization.id\n : organizations.find((org) => org.name === user?.name)?.id\n\n const chosenOrg = await select({\n choices: organizationChoices,\n default: defaultOrganizationId || undefined,\n message: 'Select organization:',\n })\n\n if (chosenOrg === '-new-') {\n const newOrganization = await this.promptUserForNewOrganization(user)\n return newOrganization.id\n }\n\n return chosenOrg || undefined\n }\n\n private async verifyCoupon(intendedCoupon: string): Promise<string | undefined> {\n try {\n const planId = await getPlanIdFromCoupon(intendedCoupon)\n this.log(`Coupon \"${intendedCoupon}\" validated!\\n`)\n return planId\n } catch (err: unknown) {\n if (!isHttpError(err) || err.statusCode !== 404) {\n const message = err instanceof Error ? err.message : `${err}`\n throw new Error(`Unable to validate coupon, please try again later:\\n\\n${message}`)\n }\n\n const useDefaultPlan =\n this.isUnattended() ||\n (await confirm({\n default: true,\n message: `Coupon \"${intendedCoupon}\" is not available, use default plan instead?`,\n }))\n\n if (this.isUnattended()) {\n this.warn(`Coupon \"${intendedCoupon}\" is not available - using default plan`)\n }\n\n // @todo\n // trace.log({\n // step: 'useDefaultPlanCoupon',\n // selectedOption: useDefaultPlan ? 'yes' : 'no',\n // coupon: intendedCoupon,\n // })\n\n if (useDefaultPlan) {\n this.log('Using default plan.')\n } else {\n throw new Error(`Coupon \"${intendedCoupon}\" does not exist`)\n }\n }\n }\n\n private async verifyPlan(intendedPlan: string): Promise<string | undefined> {\n try {\n const planId = await getPlanId(intendedPlan)\n return planId\n } catch (err: unknown) {\n if (!isHttpError(err) || err.statusCode !== 404) {\n const message = err instanceof Error ? err.message : `${err}`\n throw new Error(`Unable to validate plan, please try again later:\\n\\n${message}`, {\n cause: err,\n })\n }\n\n const useDefaultPlan =\n this.isUnattended() ||\n (await confirm({\n default: true,\n message: `Project plan \"${intendedPlan}\" does not exist, use default plan instead?`,\n }))\n\n if (this.isUnattended()) {\n this.warn(`Project plan \"${intendedPlan}\" does not exist - using default plan`)\n }\n\n // @todo\n // trace.log({\n // step: 'useDefaultPlanId',\n // selectedOption: useDefaultPlan ? 'yes' : 'no',\n // planId: intendedPlan,\n // })\n\n if (useDefaultPlan) {\n this.log('Using default plan.')\n } else {\n throw new Error(`Plan id \"${intendedPlan}\" does not exist`)\n }\n }\n }\n}\n"],"names":["Args","Flags","getCliToken","SanityCommand","subdebug","confirm","input","logSymbols","select","spinner","isHttpError","frameworks","detectFrameworkRecord","LocalFileSystemDetector","getProviderName","login","determineAppTemplate","checkIsRemoteTemplate","getGitHubRepoInfo","getOrganizationChoices","getOrganizationsWithAttachGrantInfo","createDataset","createOrganization","listOrganizations","getPlanId","getPlanIdFromCoupon","createProject","getCliUser","debug","InitCommand","args","type","string","hidden","description","enableJsonFlag","examples","command","flags","boolean","allowNo","default","exclusive","bare","coupon","helpValue","dataset","env","parse","startsWith","Error","git","undefined","helpLabel","mcp","helpGroup","organization","options","project","aliases","provider","reconfigure","deprecated","message","version","template","typescript","visibility","yes","char","run","createProjectName","error","exit","defaultConfig","_showDefaultConfigPrompt","isUnattended","detectedFramework","frameworkList","fs","process","cwd","isNextJs","slug","remoteTemplateInfo","name","checkFlagsInUnattendedMode","planId","getPlan","envFilenameDefault","_envFilename","user","ensureAuthenticated","isAppTemplate","log","success","_newProjectId","orgForCreateProjectFlag","organizations","promptUserForOrganization","createdProject","displayName","trim","metadata","organizationId","subscription","projectId","spin","start","aclMode","datasetName","succeed","isAuthenticated","output","email","intendedPlan","intendedCoupon","verifyCoupon","verifyPlan","promptUserForNewOrganization","validate","length","newOrganization","id","withGrantInfo","withAttach","filter","hasAttachGrant","organizationChoices","defaultOrganizationId","find","org","chosenOrg","choices","err","statusCode","useDefaultPlan","warn","cause"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/commands/init.ts"],"sourcesContent":["// @Todo will remove by time migration of this command is complete\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {Args, Command, Flags} from '@oclif/core'\nimport {CLIError} from '@oclif/core/errors'\nimport {type FlagInput} from '@oclif/core/interfaces'\nimport {getCliToken, SanityCommand, type SanityOrgUser, subdebug} from '@sanity/cli-core'\nimport {chalk, confirm, input, logSymbols, select, Separator, spinner} from '@sanity/cli-core/ux'\nimport {type DatasetAclMode, isHttpError} from '@sanity/client'\nimport {type Framework, frameworks} from '@vercel/frameworks'\nimport {detectFrameworkRecord, LocalFileSystemDetector} from '@vercel/fs-detectors'\n\nimport {getProviderName} from '../actions/auth/getProviderName.js'\nimport {login} from '../actions/auth/login/login.js'\nimport {createDataset} from '../actions/dataset/create.js'\nimport {determineAppTemplate} from '../actions/init/determineAppTemplate.js'\nimport {\n checkIsRemoteTemplate,\n getGitHubRepoInfo,\n type RepoInfo,\n} from '../actions/init/remoteTemplate.js'\nimport {getOrganizationChoices} from '../actions/organizations/getOrganizationChoices.js'\nimport {getOrganizationsWithAttachGrantInfo} from '../actions/organizations/getOrganizationsWithAttachGrantInfo.js'\nimport {hasProjectAttachGrant} from '../actions/organizations/hasProjectAttachGrant.js'\nimport {promptForDatasetName} from '../prompts/promptForDatasetName.js'\nimport {createDataset as createDatasetService, listDatasets} from '../services/datasets.js'\nimport {getProjectFeatures} from '../services/getProjectFeatures.js'\nimport {\n createOrganization,\n listOrganizations,\n type OrganizationCreateResponse,\n type ProjectOrganization,\n} from '../services/organizations.js'\nimport {getPlanId, getPlanIdFromCoupon} from '../services/plans.js'\nimport {createProject, listProjects} from '../services/projects.js'\nimport {getCliUser} from '../services/user.js'\n\nconst debug = subdebug('init')\n\nexport class InitCommand extends SanityCommand<typeof InitCommand> {\n static override args = {type: Args.string({hidden: true})}\n static override description = 'Initialize a new Sanity Studio, project and/or app'\n static override enableJsonFlag = true\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n {\n command: '<%= config.bin %> <%= command.id %> --dataset-default',\n description: 'Initialize a new project with a public dataset named \"production\"',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --project abc123 --dataset production --output-path ~/myproj',\n description: 'Initialize a project with the given project ID and dataset to the given path',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --project abc123 --dataset staging --template moviedb --output-path .',\n description:\n 'Initialize a project with the given project ID and dataset using the moviedb template to the given path',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> -y --create-project \"Movies Unlimited\" --dataset moviedb --visibility private --template moviedb --output-path /Users/espenh/movies-unlimited',\n description: 'Create a brand new project with name \"Movies Unlimited\"',\n },\n ] satisfies Array<Command.Example>\n\n static override flags = {\n 'auto-updates': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Enable auto updates of studio versions',\n exclusive: ['bare'],\n }),\n bare: Flags.boolean({\n description:\n 'Skip the Studio initialization and only print the selected project ID and dataset name to stdout',\n }),\n coupon: Flags.string({\n description:\n 'Optionally select a coupon for a new project (cannot be used with --project-plan)',\n exclusive: ['project-plan'],\n helpValue: '<code>',\n }),\n 'create-project': Flags.string({\n description: 'Create a new project with the given name',\n helpValue: '<name>',\n }),\n dataset: Flags.string({\n description: 'Dataset name for the studio',\n exclusive: ['dataset-default'],\n helpValue: '<name>',\n }),\n 'dataset-default': Flags.boolean({\n description: 'Set up a project with a public dataset named \"production\"',\n }),\n env: Flags.string({\n description: 'Write environment variables to file',\n exclusive: ['bare'],\n helpValue: '<filename>',\n parse: async (input) => {\n if (!input.startsWith('.env')) {\n throw new CLIError('Env filename (`--env`) must start with `.env`')\n }\n return input\n },\n }),\n 'from-create': Flags.boolean({\n description: 'Internal flag to indicate that the command is run from create-sanity',\n hidden: true,\n }),\n git: Flags.string({\n default: undefined,\n description: 'Specify a commit message for initial commit, or disable git init',\n exclusive: ['bare'],\n // oclif doesn't indent correctly with custom help labels, thus leading space :/\n helpLabel: ' --[no-]git',\n helpValue: '<message>',\n }),\n mcp: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Enable AI editor integration (MCP) setup',\n }),\n 'nextjs-add-config-files': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Add config files to Next.js project',\n helpGroup: 'Next.js',\n }),\n 'nextjs-append-env': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Append project ID and dataset to .env file',\n helpGroup: 'Next.js',\n }),\n 'nextjs-embed-studio': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Embed the Studio in Next.js application',\n helpGroup: 'Next.js',\n }),\n // oclif doesn't support a boolean/string flag combination, but listing both a\n // `--git` and a `--no-git` flag in help breaks conventions, so we hide this one,\n // but use it to \"combine\" the two in the actual logic.\n 'no-git': Flags.boolean({\n description: 'Disable git initialization',\n exclusive: ['git'],\n hidden: true,\n }),\n organization: Flags.string({\n description: 'Organization ID to use for the project',\n helpValue: '<id>',\n }),\n 'output-path': Flags.string({\n description: 'Path to write studio project to',\n exclusive: ['bare'],\n helpValue: '<path>',\n }),\n 'overwrite-files': Flags.boolean({\n default: false,\n description: 'Overwrite existing files',\n }),\n 'package-manager': Flags.string({\n description: 'Specify which package manager to use [allowed: npm, yarn, pnpm]',\n exclusive: ['bare'],\n helpValue: '<manager>',\n options: ['npm', 'yarn', 'pnpm'],\n }),\n project: Flags.string({\n aliases: ['project-id'],\n description: 'Project ID to use for the studio',\n exclusive: ['create-project'],\n helpValue: '<id>',\n }),\n 'project-plan': Flags.string({\n description: 'Optionally select a plan for a new project',\n helpValue: '<name>',\n }),\n provider: Flags.string({\n description: 'Login provider to use',\n helpValue: '<provider>',\n }),\n reconfigure: Flags.boolean({\n deprecated: {message: 'This flag is no longer supported', version: '3.0.0'},\n description: 'Reconfigure an existing project',\n hidden: true,\n }),\n template: Flags.string({\n default: 'clean',\n description: 'Project template to use [default: \"clean\"]',\n exclusive: ['bare'],\n helpValue: '<template>',\n }),\n // Porting over a beta flag\n // Oclif doesn't seem to support something in beta so hiding for now\n 'template-token': Flags.string({\n description: 'Used for accessing private GitHub repo templates',\n hidden: true,\n }),\n typescript: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Enable TypeScript support',\n exclusive: ['bare'],\n }),\n visibility: Flags.string({\n description: 'Visibility mode for dataset',\n helpValue: '<mode>',\n options: ['public', 'private'],\n }),\n yes: Flags.boolean({\n char: 'y',\n default: false,\n description:\n 'Unattended mode, answers \"yes\" to any \"yes/no\" prompt and otherwise uses defaults',\n }),\n } satisfies FlagInput\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(InitCommand)\n const createProjectName = this.flags['create-project']\n // For backwards \"compatibility\" - we used to allow `sanity init plugin`,\n // and no longer do - but instead of printing an error about an unknown\n // _command_, we want to acknowledge that the user is trying to do something\n // that no longer exists but might have at some point in the past.\n if (args.type) {\n this.error(\n args.type === 'plugin'\n ? 'Initializing plugins through the CLI is no longer supported'\n : `Unknown init type \"${args.type}\"`,\n {exit: 1},\n )\n }\n\n // @todo\n //const trace = telemetry.trace(CLIInitStepCompleted)\n\n // Slightly more helpful message for removed flags rather than just saying the flag\n // does not exist.\n if (this.flags.reconfigure) {\n this.error('--reconfigure is deprecated - manual configuration is now required', {exit: 1})\n }\n\n // Oclif doesn't support custom exclusive error messaging\n if (this.flags.project && this.flags.organization) {\n this.error(\n 'You have specified both a project and an organization. To move a project to an organization please visit https://www.sanity.io/manage',\n {exit: 1},\n )\n }\n\n const defaultConfig = this.flags['dataset-default']\n let showDefaultConfigPrompt = !defaultConfig\n if (\n this.flags.dataset ||\n this.flags.visibility ||\n this.flags['dataset-default'] ||\n this.isUnattended()\n ) {\n showDefaultConfigPrompt = false\n }\n\n const detectedFramework: Framework | null = await detectFrameworkRecord({\n frameworkList: frameworks as readonly Framework[],\n fs: new LocalFileSystemDetector(process.cwd()),\n })\n const isNextJs = detectedFramework?.slug === 'nextjs'\n\n let remoteTemplateInfo: RepoInfo | undefined\n if (flags.template && checkIsRemoteTemplate(flags.template)) {\n remoteTemplateInfo = await getGitHubRepoInfo(flags.template, flags['template-token'])\n }\n\n if (detectedFramework && detectedFramework.slug !== 'sanity' && remoteTemplateInfo) {\n this.error(\n `A remote template cannot be used with a detected framework. Detected: ${detectedFramework.name}`,\n {exit: 1},\n )\n }\n\n // Checks flags are present when in unattended mode\n if (this.isUnattended()) {\n this.checkFlagsInUnattendedMode({createProjectName, isNextJs})\n }\n\n // @todo\n // trace.start()\n // trace.log({\n // step: 'start',\n // flags: {\n // defaultConfig,\n // unattended,\n // plan: intendedPlan,\n // coupon: intendedCoupon,\n // reconfigure,\n // git: commitMessage,\n // bare: bareOutput,\n // env,\n // },\n // })\n\n // Plan can be set through `--project-plan`, or implied through `--coupon`.\n // As coupons can expire and project plans might change/be removed, we need to\n // verify that the passed flags are valid. The complexity of this is hidden in the\n // below plan methods, eventually returning a plan ID or undefined if we are told to\n // use the default plan.\n\n const planId = await this.getPlan()\n\n let envFilenameDefault = '.env'\n if (detectedFramework && detectedFramework.slug === 'nextjs') {\n envFilenameDefault = '.env.local'\n }\n const _envFilename = typeof flags.env === 'string' ? flags.env : envFilenameDefault\n\n // If the user isn't already autenticated, make it so\n const {user} = await this.ensureAuthenticated()\n\n // skip project / dataset prompting\n const template = this.flags.template\n const isAppTemplate = template ? determineAppTemplate(template) : false // Default to false\n if (!isAppTemplate) {\n this.log(`${logSymbols.success} Fetching existing projects`)\n this.log('')\n }\n\n const _newProjectId =\n createProjectName && (await this.createProjectFromName({createProjectName, planId, user}))\n\n const {datasetName, projectId} = await this.getProjectDetails({\n isAppTemplate,\n planId,\n showDefaultConfigPrompt,\n user,\n })\n\n // If user doesn't want to output any template code\n if (this.flags.bare) {\n this.log(`${logSymbols.success} Below are your project details`)\n this.log('')\n this.log(`Project ID: ${chalk.cyan(projectId)}`)\n this.log(`Dataset: ${chalk.cyan(datasetName)}`)\n this.log(\n `\\nYou can find your project on Sanity Manage — https://www.sanity.io/manage/project/${projectId}\\n`,\n )\n return\n }\n }\n\n private checkFlagsInUnattendedMode({\n createProjectName,\n isNextJs,\n }: {\n createProjectName: string | undefined\n isNextJs: boolean\n }) {\n debug('Unattended mode, validating required options')\n\n if (!this.flags['dataset']) {\n this.error(`\\`--dataset\\` must be specified in unattended mode`, {exit: 1})\n }\n\n // output-path is required in unattended mode when not using nextjs\n if (!isNextJs && !this.flags['output-path']) {\n this.error(`\\`--output-path\\` must be specified in unattended mode`, {exit: 1})\n }\n\n if (!this.flags.project && !createProjectName) {\n this.error(\n '`--project <id>` or `--create-project <name>` must be specified in unattended mode',\n {exit: 1},\n )\n }\n\n if (createProjectName && !this.flags.organization) {\n this.error(\n '--create-project is not supported in unattended mode without an organization, please specify an organization with `--organization <id>`',\n {exit: 1},\n )\n }\n }\n\n private async createProjectFromName({\n createProjectName,\n planId,\n user,\n }: {\n createProjectName: string\n planId: string | undefined\n user: SanityOrgUser\n }): Promise<string> {\n debug('--create-project specified, creating a new project')\n\n let orgForCreateProjectFlag = this.flags.organization\n\n if (!orgForCreateProjectFlag) {\n debug('no organization specified, selecting one')\n const organizations = await listOrganizations()\n orgForCreateProjectFlag = await this.promptUserForOrganization({organizations, user})\n }\n\n debug('creating a new project')\n const createdProject = await createProject({\n displayName: createProjectName.trim(),\n metadata: {coupon: this.flags.coupon},\n organizationId: orgForCreateProjectFlag,\n subscription: planId ? {planId} : undefined,\n })\n\n debug('Project with ID %s created', createdProject.projectId)\n if (this.flags.dataset) {\n debug('--dataset specified, creating dataset (%s)', this.flags.dataset)\n const spin = spinner('Creating dataset').start()\n await createDatasetService({\n aclMode: this.flags.visibility as DatasetAclMode,\n datasetName: this.flags.dataset,\n projectId: createdProject.projectId,\n })\n spin.succeed()\n }\n\n return createdProject.projectId\n }\n\n // @todo do we actually need to be authenticated for init? check flags and determine.\n private async ensureAuthenticated(): Promise<{user: SanityOrgUser}> {\n let isAuthenticated = (await getCliToken()) !== undefined\n debug(isAuthenticated ? 'User already has a token' : 'User has no token')\n\n let user: SanityOrgUser | undefined\n if (isAuthenticated) {\n // It _appears_ we are authenticated, but the token might be invalid/expired,\n // so we need to verify that we can actually make an authenticated request.\n try {\n user = await getCliUser()\n } catch {\n // assume that any error means that the token is invalid\n isAuthenticated = false\n }\n }\n\n if (isAuthenticated) {\n // @todo telemetry\n // trace.log({ step: 'login', alreadyLoggedIn: true })\n } else {\n if (this.isUnattended()) {\n this.error('Must be logged in to run this command in unattended mode, run `sanity login`', {\n exit: 1,\n })\n }\n\n // @todo telemetry\n //trace.log({step: 'login'})\n\n // @todo trigger login action, then get and return user info\n await login({output: this.output})\n }\n\n user = await getCliUser()\n\n this.log(\n `${logSymbols.success} You are logged in as ${user.email} using ${getProviderName(user.provider)}`,\n )\n return {user}\n }\n\n private async getOrCreateDataset(opts: {\n displayName: string\n projectId: string\n showDefaultConfigPrompt: boolean\n }): Promise<{datasetName: string; userAction: 'create' | 'none' | 'select'}> {\n const visibility = this.flags.visibility\n const dataset = this.flags.dataset\n let defaultConfig = this.flags['dataset-default']\n\n if (dataset && this.isUnattended()) {\n return {datasetName: dataset, userAction: 'none'}\n }\n\n const [datasets, projectFeatures] = await Promise.all([\n listDatasets(opts.projectId),\n getProjectFeatures(opts.projectId),\n ])\n\n if (dataset) {\n debug('User has specified dataset through a flag (%s)', dataset)\n const existing = datasets.find((ds) => ds.name === dataset)\n if (!existing) {\n debug('Specified dataset not found, creating it')\n await createDataset({\n datasetName: dataset,\n forcePublic: defaultConfig,\n output: this.output,\n projectFeatures,\n projectId: opts.projectId,\n visibility,\n })\n }\n\n return {datasetName: dataset, userAction: 'none'}\n }\n\n const datasetInfo =\n '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\".'\n\n if (datasets.length === 0) {\n debug('No datasets found for project, prompting for name')\n if (opts.showDefaultConfigPrompt) {\n this.log(datasetInfo)\n defaultConfig = await this.promptForDefaultConfig()\n }\n const name = defaultConfig\n ? 'production'\n : await promptForDatasetName({\n message: 'Name of your first dataset:',\n })\n await createDataset({\n datasetName: name,\n forcePublic: defaultConfig,\n output: this.output,\n projectFeatures,\n projectId: opts.projectId,\n visibility,\n })\n return {datasetName: name, userAction: 'create'}\n }\n\n debug(`User has ${datasets.length} dataset(s) already, showing list of choices`)\n const datasetChoices = datasets.map((dataset) => ({value: dataset.name}))\n\n const selected = await select({\n choices: [{name: 'Create new dataset', value: 'new'}, new Separator(), ...datasetChoices],\n message: 'Select dataset to use',\n })\n\n if (selected === 'new') {\n const existingDatasetNames = datasets.map((ds) => ds.name)\n debug('User wants to create a new dataset, prompting for name')\n if (opts.showDefaultConfigPrompt && !existingDatasetNames.includes('production')) {\n this.log(datasetInfo)\n defaultConfig = await this.promptForDefaultConfig()\n }\n\n const newDatasetName = defaultConfig\n ? 'production'\n : await promptForDatasetName(\n {\n message: 'Dataset name:',\n },\n existingDatasetNames,\n )\n await createDataset({\n datasetName: newDatasetName,\n forcePublic: defaultConfig,\n output: this.output,\n projectFeatures,\n projectId: opts.projectId,\n visibility,\n })\n return {datasetName: newDatasetName, userAction: 'create'}\n }\n\n debug(`Returning selected dataset (${selected})`)\n return {datasetName: selected, userAction: 'select'}\n }\n\n private async getOrCreateProject({\n planId,\n user,\n }: {\n planId: string | undefined\n user: SanityOrgUser\n }): Promise<{\n displayName: string\n isFirstProject: boolean\n projectId: string\n userAction: 'create' | 'select'\n }> {\n const projectId = this.flags.project\n const organizationId = this.flags.organization\n let projects\n let organizations: ProjectOrganization[]\n\n try {\n const [allProjects, allOrgs] = await Promise.all([listProjects(), listOrganizations()])\n projects = allProjects.toSorted((a, b) => b.createdAt.localeCompare(a.createdAt))\n organizations = allOrgs\n } catch (err) {\n if (this.isUnattended() && projectId) {\n return {\n displayName: 'Unknown project',\n isFirstProject: false,\n projectId,\n userAction: 'select',\n }\n }\n this.error(`Failed to communicate with the Sanity API:\\n${err.message}`, {exit: 1})\n }\n\n if (projects.length === 0 && this.isUnattended()) {\n this.error('No projects found for current user', {exit: 1})\n }\n\n if (projectId) {\n const project = projects.find((proj) => proj.id === projectId)\n if (!project && !this.isUnattended()) {\n this.error(`Given project ID (${projectId}) not found, or you do not have access to it`, {\n exit: 1,\n })\n }\n\n return {\n displayName: project ? project.displayName : 'Unknown project',\n isFirstProject: false,\n projectId,\n userAction: 'select',\n }\n }\n\n if (organizationId) {\n const organization =\n organizations.find((org) => org.id === organizationId) ||\n organizations.find((org) => org.slug === organizationId)\n\n if (!organization) {\n this.error(\n `Given organization ID (${organizationId}) not found, or you do not have access to it`,\n {exit: 1},\n )\n }\n\n if (!(await hasProjectAttachGrant(organizationId))) {\n this.error('You lack the necessary permissions to attach a project to this organization', {\n exit: 1,\n })\n }\n }\n\n // If the user has no projects or is using a coupon (which can only be applied to new projects)\n // just ask for project details instead of showing a list of projects\n const isUsersFirstProject = projects.length === 0\n if (isUsersFirstProject || this.flags.coupon) {\n debug(\n isUsersFirstProject\n ? 'No projects found for user, prompting for name'\n : 'Using a coupon - skipping project selection',\n )\n\n const newProject = await this.promptForProjectCreation({\n isUsersFirstProject,\n organizationId,\n organizations,\n planId,\n user,\n })\n\n return {\n ...newProject,\n isFirstProject: isUsersFirstProject,\n userAction: 'create',\n }\n }\n\n debug(`User has ${projects.length} project(s) already, showing list of choices`)\n\n const projectChoices = projects.map((project) => ({\n name: `${project.displayName} (${project.id})`,\n value: project.id,\n }))\n\n const selected = await select({\n choices: [{name: 'Create new project', value: 'new'}, new Separator(), ...projectChoices],\n message: 'Create a new project or select an existing one',\n })\n\n if (selected === 'new') {\n debug('User wants to create a new project, prompting for name')\n\n const newProject = await this.promptForProjectCreation({\n isUsersFirstProject,\n organizationId,\n organizations,\n planId,\n user,\n })\n\n return {\n ...newProject,\n isFirstProject: isUsersFirstProject,\n userAction: 'create',\n }\n }\n\n debug(`Returning selected project (${selected})`)\n return {\n displayName: projects.find((proj) => proj.id === selected)?.displayName || '',\n isFirstProject: isUsersFirstProject,\n projectId: selected,\n userAction: 'select',\n }\n }\n\n private async getPlan(): Promise<string | undefined> {\n const intendedPlan = this.flags['project-plan']\n const intendedCoupon = this.flags.coupon\n\n if (intendedCoupon) {\n return this.verifyCoupon(intendedCoupon)\n } else if (intendedPlan) {\n return this.verifyPlan(intendedPlan)\n } else {\n return undefined\n }\n }\n\n private async getProjectDetails({\n isAppTemplate,\n planId,\n showDefaultConfigPrompt,\n user,\n }: {\n isAppTemplate: boolean\n planId: string | undefined\n showDefaultConfigPrompt: boolean\n user: SanityOrgUser\n }): Promise<{\n datasetName: string\n displayName: string\n isFirstProject: boolean\n organizationId?: string\n projectId: string\n schemaUrl?: string\n }> {\n if (isAppTemplate) {\n const organizations = await listOrganizations({\n includeImplicitMemberships: 'true',\n includeMembers: 'true',\n })\n\n const appOrganizationId = await this.promptUserForOrganization({organizations, user})\n\n return {\n datasetName: '',\n displayName: '',\n isFirstProject: false,\n organizationId: appOrganizationId,\n projectId: '',\n }\n }\n\n debug('Prompting user to select or create a project')\n const project = await this.getOrCreateProject({planId, user})\n debug(`Project with name ${project.displayName} selected`)\n\n // Now let's pick or create a dataset\n debug('Prompting user to select or create a dataset')\n const dataset = await this.getOrCreateDataset({\n displayName: project.displayName,\n projectId: project.projectId,\n showDefaultConfigPrompt,\n })\n debug(`Dataset with name ${dataset.datasetName} selected`)\n\n // @todo\n // trace.log({\n // step: 'createOrSelectDataset',\n // selectedOption: dataset.userAction,\n // datasetName: dataset.datasetName,\n // visibility: flags.visibility as 'private' | 'public',\n // })\n\n return {\n datasetName: dataset.datasetName,\n displayName: project.displayName,\n isFirstProject: project.isFirstProject,\n projectId: project.projectId,\n }\n }\n\n private async promptForDefaultConfig(): Promise<boolean> {\n return confirm({\n default: true,\n message: 'Use the default dataset configuration?',\n })\n }\n\n private async promptForProjectCreation({\n isUsersFirstProject,\n organizationId,\n organizations,\n planId,\n user,\n }: {\n isUsersFirstProject: boolean\n organizationId: string | undefined\n organizations: ProjectOrganization[]\n planId: string | undefined\n user: SanityOrgUser\n }) {\n const projectName = await input({\n default: 'My Sanity Project',\n message: 'Project name:',\n validate(input) {\n if (!input || input.trim() === '') {\n return 'Project name cannot be empty'\n }\n\n if (input.length > 80) {\n return 'Project name cannot be longer than 80 characters'\n }\n\n return true\n },\n })\n\n const organization =\n organizationId || (await this.promptUserForOrganization({organizations, user}))\n\n const newProject = await createProject({\n displayName: projectName,\n metadata: {coupon: this.flags.coupon},\n organizationId: organization,\n subscription: planId ? {planId} : undefined,\n })\n\n return {\n ...newProject,\n isFirstProject: isUsersFirstProject,\n userAction: 'create',\n }\n }\n\n private async promptUserForNewOrganization(\n user: SanityOrgUser,\n ): Promise<OrganizationCreateResponse> {\n const name = await input({\n default: user ? user.name : undefined,\n message: 'Organization name:',\n validate(input) {\n if (input.length === 0) {\n return 'Organization name cannot be empty'\n } else if (input.length > 100) {\n return 'Organization name cannot be longer than 100 characters'\n }\n return true\n },\n })\n\n const spin = spinner('Creating organization').start()\n const organization = await createOrganization(name)\n spin.succeed()\n\n return organization\n }\n\n private async promptUserForOrganization({\n organizations,\n user,\n }: {\n organizations: ProjectOrganization[]\n user: SanityOrgUser\n }) {\n // If the user has no organizations, prompt them to create one with the same name as\n // their user, but allow them to customize it if they want\n if (organizations.length === 0) {\n const newOrganization = await this.promptUserForNewOrganization(user)\n return newOrganization.id\n }\n\n // If the user has organizations, let them choose from them, but also allow them to\n // create a new one in case they do not have access to any of them, or they want to\n // create a personal/other organization.\n debug(`User has ${organizations.length} organization(s), checking attach access`)\n const withGrantInfo = await getOrganizationsWithAttachGrantInfo(organizations)\n const withAttach = withGrantInfo.filter(({hasAttachGrant}) => hasAttachGrant)\n\n debug('User has attach access to %d organizations.', withAttach.length)\n const organizationChoices = getOrganizationChoices(withAttach)\n\n // If the user only has a single organization (and they have attach access to it),\n // we'll default to that one. Otherwise, we'll default to the organization with the\n // same name as the user if it exists.\n const defaultOrganizationId =\n withAttach.length === 1\n ? withAttach[0].organization.id\n : organizations.find((org) => org.name === user?.name)?.id\n\n const chosenOrg = await select({\n choices: organizationChoices,\n default: defaultOrganizationId || undefined,\n message: 'Select organization:',\n })\n\n if (chosenOrg === '-new-') {\n const newOrganization = await this.promptUserForNewOrganization(user)\n return newOrganization.id\n }\n\n return chosenOrg || undefined\n }\n\n private async verifyCoupon(intendedCoupon: string): Promise<string | undefined> {\n try {\n const planId = await getPlanIdFromCoupon(intendedCoupon)\n this.log(`Coupon \"${intendedCoupon}\" validated!\\n`)\n return planId\n } catch (err: unknown) {\n if (!isHttpError(err) || err.statusCode !== 404) {\n const message = err instanceof Error ? err.message : `${err}`\n this.error(`Unable to validate coupon, please try again later:\\n\\n${message}`, {exit: 1})\n }\n\n const useDefaultPlan =\n this.isUnattended() ||\n (await confirm({\n default: true,\n message: `Coupon \"${intendedCoupon}\" is not available, use default plan instead?`,\n }))\n\n if (this.isUnattended()) {\n this.warn(`Coupon \"${intendedCoupon}\" is not available - using default plan`)\n }\n\n // @todo\n // trace.log({\n // step: 'useDefaultPlanCoupon',\n // selectedOption: useDefaultPlan ? 'yes' : 'no',\n // coupon: intendedCoupon,\n // })\n\n if (useDefaultPlan) {\n this.log('Using default plan.')\n } else {\n this.error(`Coupon \"${intendedCoupon}\" does not exist`, {exit: 1})\n }\n }\n }\n\n private async verifyPlan(intendedPlan: string): Promise<string | undefined> {\n try {\n const planId = await getPlanId(intendedPlan)\n return planId\n } catch (err: unknown) {\n if (!isHttpError(err) || err.statusCode !== 404) {\n const message = err instanceof Error ? err.message : `${err}`\n this.error(`Unable to validate plan, please try again later:\\n\\n${message}`, {exit: 1})\n }\n\n const useDefaultPlan =\n this.isUnattended() ||\n (await confirm({\n default: true,\n message: `Project plan \"${intendedPlan}\" does not exist, use default plan instead?`,\n }))\n\n if (this.isUnattended()) {\n this.warn(`Project plan \"${intendedPlan}\" does not exist - using default plan`)\n }\n\n // @todo\n // trace.log({\n // step: 'useDefaultPlanId',\n // selectedOption: useDefaultPlan ? 'yes' : 'no',\n // planId: intendedPlan,\n // })\n\n if (useDefaultPlan) {\n this.log('Using default plan.')\n } else {\n this.error(`Plan id \"${intendedPlan}\" does not exist`, {exit: 1})\n }\n }\n }\n}\n"],"names":["Args","Flags","CLIError","getCliToken","SanityCommand","subdebug","chalk","confirm","input","logSymbols","select","Separator","spinner","isHttpError","frameworks","detectFrameworkRecord","LocalFileSystemDetector","getProviderName","login","createDataset","determineAppTemplate","checkIsRemoteTemplate","getGitHubRepoInfo","getOrganizationChoices","getOrganizationsWithAttachGrantInfo","hasProjectAttachGrant","promptForDatasetName","createDatasetService","listDatasets","getProjectFeatures","createOrganization","listOrganizations","getPlanId","getPlanIdFromCoupon","createProject","listProjects","getCliUser","debug","InitCommand","args","type","string","hidden","description","enableJsonFlag","examples","command","flags","boolean","allowNo","default","exclusive","bare","coupon","helpValue","dataset","env","parse","startsWith","git","undefined","helpLabel","mcp","helpGroup","organization","options","project","aliases","provider","reconfigure","deprecated","message","version","template","typescript","visibility","yes","char","run","createProjectName","error","exit","defaultConfig","showDefaultConfigPrompt","isUnattended","detectedFramework","frameworkList","fs","process","cwd","isNextJs","slug","remoteTemplateInfo","name","checkFlagsInUnattendedMode","planId","getPlan","envFilenameDefault","_envFilename","user","ensureAuthenticated","isAppTemplate","log","success","_newProjectId","createProjectFromName","datasetName","projectId","getProjectDetails","cyan","orgForCreateProjectFlag","organizations","promptUserForOrganization","createdProject","displayName","trim","metadata","organizationId","subscription","spin","start","aclMode","succeed","isAuthenticated","output","email","getOrCreateDataset","opts","userAction","datasets","projectFeatures","Promise","all","existing","find","ds","forcePublic","datasetInfo","length","promptForDefaultConfig","datasetChoices","map","value","selected","choices","existingDatasetNames","includes","newDatasetName","getOrCreateProject","projects","allProjects","allOrgs","toSorted","a","b","createdAt","localeCompare","err","isFirstProject","proj","id","org","isUsersFirstProject","newProject","promptForProjectCreation","projectChoices","intendedPlan","intendedCoupon","verifyCoupon","verifyPlan","includeImplicitMemberships","includeMembers","appOrganizationId","projectName","validate","promptUserForNewOrganization","newOrganization","withGrantInfo","withAttach","filter","hasAttachGrant","organizationChoices","defaultOrganizationId","chosenOrg","statusCode","Error","useDefaultPlan","warn"],"mappings":"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"}
@@ -27,14 +27,13 @@ export class ExtractManifestCommand extends SanityCommand {
27
27
  async run() {
28
28
  const { flags } = await this.parse(ExtractManifestCommand);
29
29
  const workDir = (await this.getProjectRoot()).directory;
30
- try {
31
- await extractManifestSafe({
32
- flags,
33
- output: this.output,
34
- workDir
35
- });
36
- } catch (error) {
37
- this.error(`Failed to extract manifest:\n${error}`, {
30
+ const error = await extractManifestSafe({
31
+ flags,
32
+ output: this.output,
33
+ workDir
34
+ });
35
+ if (error) {
36
+ this.error(`Failed to extract manifest:\n${error.message}`, {
38
37
  exit: 1
39
38
  });
40
39
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/manifest/extract.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {extractManifestSafe} from '../../actions/manifest/extractManifest.js'\n\nconst description = `\nExtracts the studio configuration as one or more JSON manifest files.\n\n**Note**: This command is experimental and subject to change. It is currently intended for use with Create only.\n`.trim()\n\nexport class ExtractManifestCommand extends SanityCommand<typeof ExtractManifestCommand> {\n static override description = description\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Extracts manifests',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --path /public/static',\n description: 'Extracts manifests into /public/static',\n },\n ]\n\n static override flags = {\n path: Flags.string({\n default: '/dist/static',\n description: 'Optional path to specify destination directory of the manifest files',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(ExtractManifestCommand)\n const workDir = (await this.getProjectRoot()).directory\n\n try {\n await extractManifestSafe({\n flags,\n output: this.output,\n workDir,\n })\n } catch (error) {\n this.error(`Failed to extract manifest:\\n${error}`, {exit: 1})\n }\n }\n}\n"],"names":["Flags","SanityCommand","extractManifestSafe","description","trim","ExtractManifestCommand","examples","command","flags","path","string","default","run","parse","workDir","getProjectRoot","directory","output","error","exit"],"mappings":"AAAA,SAAQA,KAAK,QAAO,cAAa;AACjC,SAAQC,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,mBAAmB,QAAO,4CAA2C;AAE7E,MAAMC,cAAc,CAAC;;;;AAIrB,CAAC,CAACC,IAAI;AAEN,OAAO,MAAMC,+BAA+BJ;IAC1C,OAAgBE,cAAcA,YAAW;IAEzC,OAAgBG,WAAW;QACzB;YACEC,SAAS;YACTJ,aAAa;QACf;QACA;YACEI,SAAS;YACTJ,aAAa;QACf;KACD,CAAA;IAED,OAAgBK,QAAQ;QACtBC,MAAMT,MAAMU,MAAM,CAAC;YACjBC,SAAS;YACTR,aAAa;QACf;IACF,EAAC;IAED,MAAaS,MAAqB;QAChC,MAAM,EAACJ,KAAK,EAAC,GAAG,MAAM,IAAI,CAACK,KAAK,CAACR;QACjC,MAAMS,UAAU,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGC,SAAS;QAEvD,IAAI;YACF,MAAMd,oBAAoB;gBACxBM;gBACAS,QAAQ,IAAI,CAACA,MAAM;gBACnBH;YACF;QACF,EAAE,OAAOI,OAAO;YACd,IAAI,CAACA,KAAK,CAAC,CAAC,6BAA6B,EAAEA,OAAO,EAAE;gBAACC,MAAM;YAAC;QAC9D;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/commands/manifest/extract.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {extractManifestSafe} from '../../actions/manifest/extractManifest.js'\n\nconst description = `\nExtracts the studio configuration as one or more JSON manifest files.\n\n**Note**: This command is experimental and subject to change. It is currently intended for use with Create only.\n`.trim()\n\nexport class ExtractManifestCommand extends SanityCommand<typeof ExtractManifestCommand> {\n static override description = description\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Extracts manifests',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --path /public/static',\n description: 'Extracts manifests into /public/static',\n },\n ]\n\n static override flags = {\n path: Flags.string({\n default: '/dist/static',\n description: 'Optional path to specify destination directory of the manifest files',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(ExtractManifestCommand)\n const workDir = (await this.getProjectRoot()).directory\n\n const error = await extractManifestSafe({\n flags,\n output: this.output,\n workDir,\n })\n\n if (error) {\n this.error(`Failed to extract manifest:\\n${error.message}`, {exit: 1})\n }\n }\n}\n"],"names":["Flags","SanityCommand","extractManifestSafe","description","trim","ExtractManifestCommand","examples","command","flags","path","string","default","run","parse","workDir","getProjectRoot","directory","error","output","message","exit"],"mappings":"AAAA,SAAQA,KAAK,QAAO,cAAa;AACjC,SAAQC,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,mBAAmB,QAAO,4CAA2C;AAE7E,MAAMC,cAAc,CAAC;;;;AAIrB,CAAC,CAACC,IAAI;AAEN,OAAO,MAAMC,+BAA+BJ;IAC1C,OAAgBE,cAAcA,YAAW;IAEzC,OAAgBG,WAAW;QACzB;YACEC,SAAS;YACTJ,aAAa;QACf;QACA;YACEI,SAAS;YACTJ,aAAa;QACf;KACD,CAAA;IAED,OAAgBK,QAAQ;QACtBC,MAAMT,MAAMU,MAAM,CAAC;YACjBC,SAAS;YACTR,aAAa;QACf;IACF,EAAC;IAED,MAAaS,MAAqB;QAChC,MAAM,EAACJ,KAAK,EAAC,GAAG,MAAM,IAAI,CAACK,KAAK,CAACR;QACjC,MAAMS,UAAU,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGC,SAAS;QAEvD,MAAMC,QAAQ,MAAMf,oBAAoB;YACtCM;YACAU,QAAQ,IAAI,CAACA,MAAM;YACnBJ;QACF;QAEA,IAAIG,OAAO;YACT,IAAI,CAACA,KAAK,CAAC,CAAC,6BAA6B,EAAEA,MAAME,OAAO,EAAE,EAAE;gBAACC,MAAM;YAAC;QACtE;IACF;AACF"}
@@ -15,7 +15,6 @@ export class Disable extends SanityCommand {
15
15
  await this.parse(Disable);
16
16
  try {
17
17
  const result = await setConsent({
18
- env: process.env,
19
18
  status: 'denied'
20
19
  });
21
20
  this.log(result.message);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/telemetry/disable.ts"],"sourcesContent":["import {Command} from '@oclif/core'\nimport {type FlagInput} from '@oclif/core/interfaces'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {setConsent} from '../../actions/telemetry/setConsent.js'\nimport {telemetryLearnMoreMessage} from '../../actions/telemetry/telemetryLearnMoreMessage.js'\n\nexport class Disable extends SanityCommand<typeof Disable> {\n static override description = 'Disable telemetry for your logged in user'\n\n static override examples: Array<Command.Example> = [\n {\n command: '<%= config.bin %> telemetry <%= command.id %>',\n description: 'Disable telemetry for your logged in user',\n },\n ]\n\n static override flags = {} satisfies FlagInput\n\n public async run(): Promise<void> {\n // Parse to ensure no invalid flags are passed\n await this.parse(Disable)\n\n try {\n const result = await setConsent({\n env: process.env,\n status: 'denied',\n })\n\n this.log(result.message)\n\n if (result.changed) {\n this.log(`\\n${telemetryLearnMoreMessage('denied')}`)\n }\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : 'An unknown error occurred'\n this.error(message, {exit: 1})\n }\n }\n}\n"],"names":["SanityCommand","setConsent","telemetryLearnMoreMessage","Disable","description","examples","command","flags","run","parse","result","env","process","status","log","message","changed","err","Error","error","exit"],"mappings":"AAEA,SAAQA,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,UAAU,QAAO,wCAAuC;AAChE,SAAQC,yBAAyB,QAAO,uDAAsD;AAE9F,OAAO,MAAMC,gBAAgBH;IAC3B,OAAgBI,cAAc,4CAA2C;IAEzE,OAAgBC,WAAmC;QACjD;YACEC,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,OAAgBG,QAAQ,CAAC,EAAqB;IAE9C,MAAaC,MAAqB;QAChC,8CAA8C;QAC9C,MAAM,IAAI,CAACC,KAAK,CAACN;QAEjB,IAAI;YACF,MAAMO,SAAS,MAAMT,WAAW;gBAC9BU,KAAKC,QAAQD,GAAG;gBAChBE,QAAQ;YACV;YAEA,IAAI,CAACC,GAAG,CAACJ,OAAOK,OAAO;YAEvB,IAAIL,OAAOM,OAAO,EAAE;gBAClB,IAAI,CAACF,GAAG,CAAC,CAAC,EAAE,EAAEZ,0BAA0B,WAAW;YACrD;QACF,EAAE,OAAOe,KAAc;YACrB,MAAMF,UAAUE,eAAeC,QAAQD,IAAIF,OAAO,GAAG;YACrD,IAAI,CAACI,KAAK,CAACJ,SAAS;gBAACK,MAAM;YAAC;QAC9B;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/commands/telemetry/disable.ts"],"sourcesContent":["import {Command} from '@oclif/core'\nimport {type FlagInput} from '@oclif/core/interfaces'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {setConsent} from '../../actions/telemetry/setConsent.js'\nimport {telemetryLearnMoreMessage} from '../../actions/telemetry/telemetryLearnMoreMessage.js'\n\nexport class Disable extends SanityCommand<typeof Disable> {\n static override description = 'Disable telemetry for your logged in user'\n\n static override examples: Array<Command.Example> = [\n {\n command: '<%= config.bin %> telemetry <%= command.id %>',\n description: 'Disable telemetry for your logged in user',\n },\n ]\n\n static override flags = {} satisfies FlagInput\n\n public async run(): Promise<void> {\n // Parse to ensure no invalid flags are passed\n await this.parse(Disable)\n\n try {\n const result = await setConsent({\n status: 'denied',\n })\n\n this.log(result.message)\n\n if (result.changed) {\n this.log(`\\n${telemetryLearnMoreMessage('denied')}`)\n }\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : 'An unknown error occurred'\n this.error(message, {exit: 1})\n }\n }\n}\n"],"names":["SanityCommand","setConsent","telemetryLearnMoreMessage","Disable","description","examples","command","flags","run","parse","result","status","log","message","changed","err","Error","error","exit"],"mappings":"AAEA,SAAQA,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,UAAU,QAAO,wCAAuC;AAChE,SAAQC,yBAAyB,QAAO,uDAAsD;AAE9F,OAAO,MAAMC,gBAAgBH;IAC3B,OAAgBI,cAAc,4CAA2C;IAEzE,OAAgBC,WAAmC;QACjD;YACEC,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,OAAgBG,QAAQ,CAAC,EAAqB;IAE9C,MAAaC,MAAqB;QAChC,8CAA8C;QAC9C,MAAM,IAAI,CAACC,KAAK,CAACN;QAEjB,IAAI;YACF,MAAMO,SAAS,MAAMT,WAAW;gBAC9BU,QAAQ;YACV;YAEA,IAAI,CAACC,GAAG,CAACF,OAAOG,OAAO;YAEvB,IAAIH,OAAOI,OAAO,EAAE;gBAClB,IAAI,CAACF,GAAG,CAAC,CAAC,EAAE,EAAEV,0BAA0B,WAAW;YACrD;QACF,EAAE,OAAOa,KAAc;YACrB,MAAMF,UAAUE,eAAeC,QAAQD,IAAIF,OAAO,GAAG;YACrD,IAAI,CAACI,KAAK,CAACJ,SAAS;gBAACK,MAAM;YAAC;QAC9B;IACF;AACF"}
@@ -15,7 +15,6 @@ export class Enable extends SanityCommand {
15
15
  await this.parse(Enable);
16
16
  try {
17
17
  const result = await setConsent({
18
- env: process.env,
19
18
  status: 'granted'
20
19
  });
21
20
  this.log(result.message);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/telemetry/enable.ts"],"sourcesContent":["import {Command} from '@oclif/core'\nimport {type FlagInput} from '@oclif/core/interfaces'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {setConsent} from '../../actions/telemetry/setConsent.js'\nimport {telemetryLearnMoreMessage} from '../../actions/telemetry/telemetryLearnMoreMessage.js'\n\nexport class Enable extends SanityCommand<typeof Enable> {\n static override description = 'Enable telemetry for your logged in user'\n\n static override examples: Array<Command.Example> = [\n {\n command: '<%= config.bin %> telemetry <%= command.id %>',\n description: 'Enable telemetry for your logged in user',\n },\n ]\n\n static override flags = {} satisfies FlagInput\n\n public async run(): Promise<void> {\n // Parse to ensure no invalid flags are passed\n await this.parse(Enable)\n\n try {\n const result = await setConsent({\n env: process.env,\n status: 'granted',\n })\n\n this.log(result.message)\n\n if (result.changed) {\n this.log(`\\n${telemetryLearnMoreMessage('granted')}`)\n }\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : 'An unknown error occurred'\n this.error(message, {exit: 1})\n }\n }\n}\n"],"names":["SanityCommand","setConsent","telemetryLearnMoreMessage","Enable","description","examples","command","flags","run","parse","result","env","process","status","log","message","changed","err","Error","error","exit"],"mappings":"AAEA,SAAQA,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,UAAU,QAAO,wCAAuC;AAChE,SAAQC,yBAAyB,QAAO,uDAAsD;AAE9F,OAAO,MAAMC,eAAeH;IAC1B,OAAgBI,cAAc,2CAA0C;IAExE,OAAgBC,WAAmC;QACjD;YACEC,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,OAAgBG,QAAQ,CAAC,EAAqB;IAE9C,MAAaC,MAAqB;QAChC,8CAA8C;QAC9C,MAAM,IAAI,CAACC,KAAK,CAACN;QAEjB,IAAI;YACF,MAAMO,SAAS,MAAMT,WAAW;gBAC9BU,KAAKC,QAAQD,GAAG;gBAChBE,QAAQ;YACV;YAEA,IAAI,CAACC,GAAG,CAACJ,OAAOK,OAAO;YAEvB,IAAIL,OAAOM,OAAO,EAAE;gBAClB,IAAI,CAACF,GAAG,CAAC,CAAC,EAAE,EAAEZ,0BAA0B,YAAY;YACtD;QACF,EAAE,OAAOe,KAAc;YACrB,MAAMF,UAAUE,eAAeC,QAAQD,IAAIF,OAAO,GAAG;YACrD,IAAI,CAACI,KAAK,CAACJ,SAAS;gBAACK,MAAM;YAAC;QAC9B;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/commands/telemetry/enable.ts"],"sourcesContent":["import {Command} from '@oclif/core'\nimport {type FlagInput} from '@oclif/core/interfaces'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {setConsent} from '../../actions/telemetry/setConsent.js'\nimport {telemetryLearnMoreMessage} from '../../actions/telemetry/telemetryLearnMoreMessage.js'\n\nexport class Enable extends SanityCommand<typeof Enable> {\n static override description = 'Enable telemetry for your logged in user'\n\n static override examples: Array<Command.Example> = [\n {\n command: '<%= config.bin %> telemetry <%= command.id %>',\n description: 'Enable telemetry for your logged in user',\n },\n ]\n\n static override flags = {} satisfies FlagInput\n\n public async run(): Promise<void> {\n // Parse to ensure no invalid flags are passed\n await this.parse(Enable)\n\n try {\n const result = await setConsent({\n status: 'granted',\n })\n\n this.log(result.message)\n\n if (result.changed) {\n this.log(`\\n${telemetryLearnMoreMessage('granted')}`)\n }\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : 'An unknown error occurred'\n this.error(message, {exit: 1})\n }\n }\n}\n"],"names":["SanityCommand","setConsent","telemetryLearnMoreMessage","Enable","description","examples","command","flags","run","parse","result","status","log","message","changed","err","Error","error","exit"],"mappings":"AAEA,SAAQA,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,UAAU,QAAO,wCAAuC;AAChE,SAAQC,yBAAyB,QAAO,uDAAsD;AAE9F,OAAO,MAAMC,eAAeH;IAC1B,OAAgBI,cAAc,2CAA0C;IAExE,OAAgBC,WAAmC;QACjD;YACEC,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,OAAgBG,QAAQ,CAAC,EAAqB;IAE9C,MAAaC,MAAqB;QAChC,8CAA8C;QAC9C,MAAM,IAAI,CAACC,KAAK,CAACN;QAEjB,IAAI;YACF,MAAMO,SAAS,MAAMT,WAAW;gBAC9BU,QAAQ;YACV;YAEA,IAAI,CAACC,GAAG,CAACF,OAAOG,OAAO;YAEvB,IAAIH,OAAOI,OAAO,EAAE;gBAClB,IAAI,CAACF,GAAG,CAAC,CAAC,EAAE,EAAEV,0BAA0B,YAAY;YACtD;QACF,EAAE,OAAOa,KAAc;YACrB,MAAMF,UAAUE,eAAeC,QAAQD,IAAIF,OAAO,GAAG;YACrD,IAAI,CAACI,KAAK,CAACJ,SAAS;gBAACK,MAAM;YAAC;QAC9B;IACF;AACF"}
@@ -14,9 +14,7 @@ export class Status extends SanityCommand {
14
14
  async run() {
15
15
  // Parse to ensure no invalid flags are passed
16
16
  await this.parse(Status);
17
- const consentInfo = await resolveConsent({
18
- env: process.env
19
- });
17
+ const consentInfo = await resolveConsent();
20
18
  const statusMessage = getStatusMessage(consentInfo);
21
19
  const learnMoreMessage = getLearnMoreMessage(consentInfo.status);
22
20
  this.log(statusMessage);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/telemetry/status.ts"],"sourcesContent":["import {Command} from '@oclif/core'\nimport {type FlagInput} from '@oclif/core/interfaces'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {getLearnMoreMessage} from '../../actions/telemetry/getLearnMoreMessage.js'\nimport {getStatusMessage} from '../../actions/telemetry/getStatusMessage.js'\nimport {resolveConsent} from '../../actions/telemetry/resolveConsent.js'\n\nexport class Status extends SanityCommand<typeof Status> {\n static override description = 'Check telemetry consent status for your logged in user'\n\n static override examples: Array<Command.Example> = [\n {\n command: '<%= config.bin %> telemetry <%= command.id %>',\n description: 'Check telemetry consent status for your logged in user',\n },\n ]\n\n static override flags = {} satisfies FlagInput\n\n public async run(): Promise<void> {\n // Parse to ensure no invalid flags are passed\n await this.parse(Status)\n\n const consentInfo = await resolveConsent({env: process.env})\n\n const statusMessage = getStatusMessage(consentInfo)\n const learnMoreMessage = getLearnMoreMessage(consentInfo.status)\n\n this.log(statusMessage)\n this.log(`\\n${learnMoreMessage}`)\n }\n}\n"],"names":["SanityCommand","getLearnMoreMessage","getStatusMessage","resolveConsent","Status","description","examples","command","flags","run","parse","consentInfo","env","process","statusMessage","learnMoreMessage","status","log"],"mappings":"AAEA,SAAQA,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,mBAAmB,QAAO,iDAAgD;AAClF,SAAQC,gBAAgB,QAAO,8CAA6C;AAC5E,SAAQC,cAAc,QAAO,4CAA2C;AAExE,OAAO,MAAMC,eAAeJ;IAC1B,OAAgBK,cAAc,yDAAwD;IAEtF,OAAgBC,WAAmC;QACjD;YACEC,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,OAAgBG,QAAQ,CAAC,EAAqB;IAE9C,MAAaC,MAAqB;QAChC,8CAA8C;QAC9C,MAAM,IAAI,CAACC,KAAK,CAACN;QAEjB,MAAMO,cAAc,MAAMR,eAAe;YAACS,KAAKC,QAAQD,GAAG;QAAA;QAE1D,MAAME,gBAAgBZ,iBAAiBS;QACvC,MAAMI,mBAAmBd,oBAAoBU,YAAYK,MAAM;QAE/D,IAAI,CAACC,GAAG,CAACH;QACT,IAAI,CAACG,GAAG,CAAC,CAAC,EAAE,EAAEF,kBAAkB;IAClC;AACF"}
1
+ {"version":3,"sources":["../../../src/commands/telemetry/status.ts"],"sourcesContent":["import {Command} from '@oclif/core'\nimport {type FlagInput} from '@oclif/core/interfaces'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {getLearnMoreMessage} from '../../actions/telemetry/getLearnMoreMessage.js'\nimport {getStatusMessage} from '../../actions/telemetry/getStatusMessage.js'\nimport {resolveConsent} from '../../actions/telemetry/resolveConsent.js'\n\nexport class Status extends SanityCommand<typeof Status> {\n static override description = 'Check telemetry consent status for your logged in user'\n\n static override examples: Array<Command.Example> = [\n {\n command: '<%= config.bin %> telemetry <%= command.id %>',\n description: 'Check telemetry consent status for your logged in user',\n },\n ]\n\n static override flags = {} satisfies FlagInput\n\n public async run(): Promise<void> {\n // Parse to ensure no invalid flags are passed\n await this.parse(Status)\n\n const consentInfo = await resolveConsent()\n\n const statusMessage = getStatusMessage(consentInfo)\n const learnMoreMessage = getLearnMoreMessage(consentInfo.status)\n\n this.log(statusMessage)\n this.log(`\\n${learnMoreMessage}`)\n }\n}\n"],"names":["SanityCommand","getLearnMoreMessage","getStatusMessage","resolveConsent","Status","description","examples","command","flags","run","parse","consentInfo","statusMessage","learnMoreMessage","status","log"],"mappings":"AAEA,SAAQA,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,mBAAmB,QAAO,iDAAgD;AAClF,SAAQC,gBAAgB,QAAO,8CAA6C;AAC5E,SAAQC,cAAc,QAAO,4CAA2C;AAExE,OAAO,MAAMC,eAAeJ;IAC1B,OAAgBK,cAAc,yDAAwD;IAEtF,OAAgBC,WAAmC;QACjD;YACEC,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,OAAgBG,QAAQ,CAAC,EAAqB;IAE9C,MAAaC,MAAqB;QAChC,8CAA8C;QAC9C,MAAM,IAAI,CAACC,KAAK,CAACN;QAEjB,MAAMO,cAAc,MAAMR;QAE1B,MAAMS,gBAAgBV,iBAAiBS;QACvC,MAAME,mBAAmBZ,oBAAoBU,YAAYG,MAAM;QAE/D,IAAI,CAACC,GAAG,CAACH;QACT,IAAI,CAACG,GAAG,CAAC,CAAC,EAAE,EAAEF,kBAAkB;IAClC;AACF"}
@@ -9,8 +9,10 @@ export declare function createCliConfig(config: CliConfig): {
9
9
  } | undefined;
10
10
  app?: {
11
11
  entry?: string | undefined;
12
+ icon?: string | undefined;
12
13
  id?: string | undefined;
13
14
  organizationId?: string | undefined;
15
+ title?: string | undefined;
14
16
  } | undefined;
15
17
  autoUpdates?: boolean | undefined;
16
18
  deployment?: {
@@ -61,4 +63,11 @@ export declare function createCliConfig(config: CliConfig): {
61
63
  } | undefined;
62
64
  studioHost?: string | undefined;
63
65
  vite?: import("@sanity/cli-core").UserViteConfig | undefined;
66
+ typegen?: {
67
+ path: string | string[];
68
+ schema: string;
69
+ generates: string;
70
+ formatGeneratedCode: boolean;
71
+ overloadClientMethods: boolean;
72
+ } | undefined;
64
73
  };
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export declare function runFlushWorker(): Promise<void>;
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ import { resolveConsent } from '../../actions/telemetry/resolveConsent.js';
3
+ import { sendEvents } from '../../services/telemetry.js';
4
+ import { flushTelemetryFiles } from '../../telemetry/store/flushTelemetryFiles.js';
5
+ export async function runFlushWorker() {
6
+ await flushTelemetryFiles({
7
+ resolveConsent,
8
+ sendEvents
9
+ });
10
+ }
11
+ // Only run if executed directly (not imported)
12
+ if (import.meta.url === `file://${process.argv[1]}`) {
13
+ try {
14
+ await runFlushWorker();
15
+ process.exit(0);
16
+ } catch {
17
+ // Silently exit - don't block parent process
18
+ process.exit(1);
19
+ }
20
+ }
21
+
22
+ //# sourceMappingURL=flushTelemetry.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/prerun/flushTelemetry.worker.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport {resolveConsent} from '../../actions/telemetry/resolveConsent.js'\nimport {sendEvents} from '../../services/telemetry.js'\nimport {flushTelemetryFiles} from '../../telemetry/store/flushTelemetryFiles.js'\n\nexport async function runFlushWorker() {\n await flushTelemetryFiles({resolveConsent, sendEvents})\n}\n\n// Only run if executed directly (not imported)\nif (import.meta.url === `file://${process.argv[1]}`) {\n try {\n await runFlushWorker()\n process.exit(0)\n } catch {\n // Silently exit - don't block parent process\n process.exit(1)\n }\n}\n"],"names":["resolveConsent","sendEvents","flushTelemetryFiles","runFlushWorker","url","process","argv","exit"],"mappings":";AAEA,SAAQA,cAAc,QAAO,4CAA2C;AACxE,SAAQC,UAAU,QAAO,8BAA6B;AACtD,SAAQC,mBAAmB,QAAO,+CAA8C;AAEhF,OAAO,eAAeC;IACpB,MAAMD,oBAAoB;QAACF;QAAgBC;IAAU;AACvD;AAEA,+CAA+C;AAC/C,IAAI,YAAYG,GAAG,KAAK,CAAC,OAAO,EAAEC,QAAQC,IAAI,CAAC,EAAE,EAAE,EAAE;IACnD,IAAI;QACF,MAAMH;QACNE,QAAQE,IAAI,CAAC;IACf,EAAE,OAAM;QACN,6CAA6C;QAC7CF,QAAQE,IAAI,CAAC;IACf;AACF"}
@@ -1,7 +1,71 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { debug, findProjectRoot, getCliConfig } from '@sanity/cli-core';
4
+ import { createSessionId } from '@sanity/telemetry';
5
+ import { resolveConsent } from '../../actions/telemetry/resolveConsent.js';
6
+ import { telemetryDebug } from '../../actions/telemetry/telemetryDebug.js';
1
7
  import { telemetryDisclosure } from '../../actions/telemetry/telemetryDisclosure.js';
2
- export const setupTelemetry = async function() {
8
+ import { CliCommandTelemetry } from '../../telemetry/cli.telemetry.js';
9
+ import { createTelemetryStore } from '../../telemetry/store/createTelemetryStore.js';
10
+ import { detectRuntime } from '../../util/detectRuntime.js';
11
+ import { parseArguments } from '../../util/parseArguments.js';
12
+ export const setupTelemetry = async function({ config }) {
3
13
  // Show telemetry disclosure
4
14
  telemetryDisclosure();
15
+ const sessionId = createSessionId();
16
+ const store = createTelemetryStore(sessionId, {
17
+ resolveConsent
18
+ });
19
+ const projectRoot = await findProjectRoot(process.cwd());
20
+ const cliConfig = await getCliConfig(projectRoot.directory);
21
+ store.logger.updateUserProperties({
22
+ cliVersion: config.version,
23
+ cpuArchitecture: process.arch,
24
+ dataset: cliConfig?.api?.dataset,
25
+ machinePlatform: process.platform,
26
+ projectId: cliConfig?.api?.projectId,
27
+ runtime: detectRuntime(),
28
+ runtimeVersion: process.version
29
+ });
30
+ const args = parseArguments();
31
+ const traceOptions = {
32
+ commandArguments: args.argsWithoutOptions,
33
+ coreOptions: {
34
+ debug: args.coreOptions.debug ?? undefined,
35
+ help: args.coreOptions.help ?? undefined,
36
+ version: args.coreOptions.version ?? undefined
37
+ },
38
+ extraArguments: args.extraArguments,
39
+ groupOrCommand: args.groupOrCommand
40
+ };
41
+ telemetryDebug('Starting command trace', traceOptions);
42
+ const cliCommandTrace = store.logger.trace(CliCommandTelemetry, traceOptions);
43
+ cliCommandTrace.start();
44
+ // Handle process exit - complete trace and spawn worker to flush all telemetry
45
+ process.once('exit', (status)=>{
46
+ if (status === 0) {
47
+ cliCommandTrace.complete();
48
+ } else {
49
+ // TODO: Properly handle errors
50
+ // https://oclif.io/docs/error_handling/#error-handling-in-the-catch-method
51
+ cliCommandTrace.error(new Error('Process exited with status ' + status));
52
+ }
53
+ const workerPath = fileURLToPath(new URL('flushTelemetry.worker.js', import.meta.url));
54
+ telemetryDebug(`Spawning "${process.execPath} ${workerPath}"`);
55
+ // Spawn detached worker to flush all telemetry files
56
+ // unref will ensure the child process can keep doing work even after the parent process exits
57
+ spawn(process.execPath, [
58
+ workerPath
59
+ ], {
60
+ detached: true,
61
+ env: {
62
+ ...process.env,
63
+ SANITY_TELEMETRY_PROJECT_ID: cliConfig?.api?.projectId || ''
64
+ },
65
+ // If debug is enabled, spawn the worker with stdio inherit to see the output
66
+ stdio: debug.enabled ? 'inherit' : 'ignore'
67
+ }).unref();
68
+ });
5
69
  };
6
70
 
7
71
  //# sourceMappingURL=setupTelemetry.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/prerun/setupTelemetry.ts"],"sourcesContent":["import {type Hook} from '@oclif/core'\n\nimport {telemetryDisclosure} from '../../actions/telemetry/telemetryDisclosure.js'\n\nexport const setupTelemetry: Hook.Prerun = async function () {\n // Show telemetry disclosure\n telemetryDisclosure()\n}\n"],"names":["telemetryDisclosure","setupTelemetry"],"mappings":"AAEA,SAAQA,mBAAmB,QAAO,iDAAgD;AAElF,OAAO,MAAMC,iBAA8B;IACzC,4BAA4B;IAC5BD;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/hooks/prerun/setupTelemetry.ts"],"sourcesContent":["import {spawn} from 'node:child_process'\nimport {fileURLToPath} from 'node:url'\n\nimport {type Hook} from '@oclif/core'\nimport {debug, findProjectRoot, getCliConfig} from '@sanity/cli-core'\nimport {createSessionId} from '@sanity/telemetry'\n\nimport {resolveConsent} from '../../actions/telemetry/resolveConsent.js'\nimport {telemetryDebug} from '../../actions/telemetry/telemetryDebug.js'\nimport {telemetryDisclosure} from '../../actions/telemetry/telemetryDisclosure.js'\nimport {CliCommandTelemetry, type CLITraceData} from '../../telemetry/cli.telemetry.js'\nimport {createTelemetryStore} from '../../telemetry/store/createTelemetryStore.js'\nimport {detectRuntime} from '../../util/detectRuntime.js'\nimport {parseArguments} from '../../util/parseArguments.js'\n\nexport const setupTelemetry: Hook.Prerun = async function ({config}) {\n // Show telemetry disclosure\n telemetryDisclosure()\n\n const sessionId = createSessionId()\n\n const store = createTelemetryStore(sessionId, {\n resolveConsent,\n })\n\n const projectRoot = await findProjectRoot(process.cwd())\n const cliConfig = await getCliConfig(projectRoot.directory)\n\n store.logger.updateUserProperties({\n cliVersion: config.version,\n cpuArchitecture: process.arch,\n dataset: cliConfig?.api?.dataset,\n machinePlatform: process.platform,\n projectId: cliConfig?.api?.projectId,\n runtime: detectRuntime(),\n runtimeVersion: process.version,\n })\n\n const args = parseArguments()\n\n const traceOptions: CLITraceData = {\n commandArguments: args.argsWithoutOptions,\n coreOptions: {\n debug: args.coreOptions.debug ?? undefined,\n help: args.coreOptions.help ?? undefined,\n version: args.coreOptions.version ?? undefined,\n },\n extraArguments: args.extraArguments,\n groupOrCommand: args.groupOrCommand,\n }\n\n telemetryDebug('Starting command trace', traceOptions)\n\n const cliCommandTrace = store.logger.trace(CliCommandTelemetry, traceOptions)\n cliCommandTrace.start()\n\n // Handle process exit - complete trace and spawn worker to flush all telemetry\n process.once('exit', (status) => {\n if (status === 0) {\n cliCommandTrace.complete()\n } else {\n // TODO: Properly handle errors\n // https://oclif.io/docs/error_handling/#error-handling-in-the-catch-method\n cliCommandTrace.error(new Error('Process exited with status ' + status))\n }\n\n const workerPath = fileURLToPath(new URL('flushTelemetry.worker.js', import.meta.url))\n telemetryDebug(`Spawning \"${process.execPath} ${workerPath}\"`)\n\n // Spawn detached worker to flush all telemetry files\n // unref will ensure the child process can keep doing work even after the parent process exits\n spawn(process.execPath, [workerPath], {\n detached: true,\n env: {\n ...process.env,\n SANITY_TELEMETRY_PROJECT_ID: cliConfig?.api?.projectId || '',\n },\n // If debug is enabled, spawn the worker with stdio inherit to see the output\n stdio: debug.enabled ? 'inherit' : 'ignore',\n }).unref()\n })\n}\n"],"names":["spawn","fileURLToPath","debug","findProjectRoot","getCliConfig","createSessionId","resolveConsent","telemetryDebug","telemetryDisclosure","CliCommandTelemetry","createTelemetryStore","detectRuntime","parseArguments","setupTelemetry","config","sessionId","store","projectRoot","process","cwd","cliConfig","directory","logger","updateUserProperties","cliVersion","version","cpuArchitecture","arch","dataset","api","machinePlatform","platform","projectId","runtime","runtimeVersion","args","traceOptions","commandArguments","argsWithoutOptions","coreOptions","undefined","help","extraArguments","groupOrCommand","cliCommandTrace","trace","start","once","status","complete","error","Error","workerPath","URL","url","execPath","detached","env","SANITY_TELEMETRY_PROJECT_ID","stdio","enabled","unref"],"mappings":"AAAA,SAAQA,KAAK,QAAO,qBAAoB;AACxC,SAAQC,aAAa,QAAO,WAAU;AAGtC,SAAQC,KAAK,EAAEC,eAAe,EAAEC,YAAY,QAAO,mBAAkB;AACrE,SAAQC,eAAe,QAAO,oBAAmB;AAEjD,SAAQC,cAAc,QAAO,4CAA2C;AACxE,SAAQC,cAAc,QAAO,4CAA2C;AACxE,SAAQC,mBAAmB,QAAO,iDAAgD;AAClF,SAAQC,mBAAmB,QAA0B,mCAAkC;AACvF,SAAQC,oBAAoB,QAAO,gDAA+C;AAClF,SAAQC,aAAa,QAAO,8BAA6B;AACzD,SAAQC,cAAc,QAAO,+BAA8B;AAE3D,OAAO,MAAMC,iBAA8B,eAAgB,EAACC,MAAM,EAAC;IACjE,4BAA4B;IAC5BN;IAEA,MAAMO,YAAYV;IAElB,MAAMW,QAAQN,qBAAqBK,WAAW;QAC5CT;IACF;IAEA,MAAMW,cAAc,MAAMd,gBAAgBe,QAAQC,GAAG;IACrD,MAAMC,YAAY,MAAMhB,aAAaa,YAAYI,SAAS;IAE1DL,MAAMM,MAAM,CAACC,oBAAoB,CAAC;QAChCC,YAAYV,OAAOW,OAAO;QAC1BC,iBAAiBR,QAAQS,IAAI;QAC7BC,SAASR,WAAWS,KAAKD;QACzBE,iBAAiBZ,QAAQa,QAAQ;QACjCC,WAAWZ,WAAWS,KAAKG;QAC3BC,SAAStB;QACTuB,gBAAgBhB,QAAQO,OAAO;IACjC;IAEA,MAAMU,OAAOvB;IAEb,MAAMwB,eAA6B;QACjCC,kBAAkBF,KAAKG,kBAAkB;QACzCC,aAAa;YACXrC,OAAOiC,KAAKI,WAAW,CAACrC,KAAK,IAAIsC;YACjCC,MAAMN,KAAKI,WAAW,CAACE,IAAI,IAAID;YAC/Bf,SAASU,KAAKI,WAAW,CAACd,OAAO,IAAIe;QACvC;QACAE,gBAAgBP,KAAKO,cAAc;QACnCC,gBAAgBR,KAAKQ,cAAc;IACrC;IAEApC,eAAe,0BAA0B6B;IAEzC,MAAMQ,kBAAkB5B,MAAMM,MAAM,CAACuB,KAAK,CAACpC,qBAAqB2B;IAChEQ,gBAAgBE,KAAK;IAErB,+EAA+E;IAC/E5B,QAAQ6B,IAAI,CAAC,QAAQ,CAACC;QACpB,IAAIA,WAAW,GAAG;YAChBJ,gBAAgBK,QAAQ;QAC1B,OAAO;YACL,+BAA+B;YAC/B,2EAA2E;YAC3EL,gBAAgBM,KAAK,CAAC,IAAIC,MAAM,gCAAgCH;QAClE;QAEA,MAAMI,aAAanD,cAAc,IAAIoD,IAAI,4BAA4B,YAAYC,GAAG;QACpF/C,eAAe,CAAC,UAAU,EAAEW,QAAQqC,QAAQ,CAAC,CAAC,EAAEH,WAAW,CAAC,CAAC;QAE7D,qDAAqD;QACrD,8FAA8F;QAC9FpD,MAAMkB,QAAQqC,QAAQ,EAAE;YAACH;SAAW,EAAE;YACpCI,UAAU;YACVC,KAAK;gBACH,GAAGvC,QAAQuC,GAAG;gBACdC,6BAA6BtC,WAAWS,KAAKG,aAAa;YAC5D;YACA,6EAA6E;YAC7E2B,OAAOzD,MAAM0D,OAAO,GAAG,YAAY;QACrC,GAAGC,KAAK;IACV;AACF,EAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function promptForTypeScript(): Promise<boolean>;
2
+ export declare function promptImplicitReconfigure(): Promise<boolean>;
@@ -0,0 +1,15 @@
1
+ import { confirm } from '@sanity/cli-core/ux';
2
+ export function promptForTypeScript() {
3
+ return confirm({
4
+ default: true,
5
+ message: 'Do you want to use TypeScript?'
6
+ });
7
+ }
8
+ export function promptImplicitReconfigure() {
9
+ return confirm({
10
+ default: true,
11
+ message: 'The current folder contains a configured Sanity studio. Would you like to reconfigure it?'
12
+ });
13
+ }
14
+
15
+ //# sourceMappingURL=promptForTypescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/init/promptForTypescript.ts"],"sourcesContent":["import {confirm} from '@sanity/cli-core/ux'\n\nexport function promptForTypeScript(): Promise<boolean> {\n return confirm({\n default: true,\n message: 'Do you want to use TypeScript?',\n })\n}\n\nexport function promptImplicitReconfigure(): Promise<boolean> {\n return confirm({\n default: true,\n message:\n 'The current folder contains a configured Sanity studio. Would you like to reconfigure it?',\n })\n}\n"],"names":["confirm","promptForTypeScript","default","message","promptImplicitReconfigure"],"mappings":"AAAA,SAAQA,OAAO,QAAO,sBAAqB;AAE3C,OAAO,SAASC;IACd,OAAOD,QAAQ;QACbE,SAAS;QACTC,SAAS;IACX;AACF;AAEA,OAAO,SAASC;IACd,OAAOJ,QAAQ;QACbE,SAAS;QACTC,SACE;IACJ;AACF"}
@@ -0,0 +1,9 @@
1
+ import { type Output } from '@sanity/cli-core';
2
+ import { type DatasetAclMode } from '@sanity/client';
3
+ /**
4
+ * Prompts the user to select a dataset ACL mode (visibility)
5
+ *
6
+ * @param output - Optional output instance for logging additional information
7
+ * @returns Promise resolving to the selected ACL mode
8
+ */
9
+ export declare function promptForDatasetAclMode(output?: Output): Promise<DatasetAclMode>;
@@ -0,0 +1,27 @@
1
+ import { select } from '@sanity/cli-core/ux';
2
+ /**
3
+ * Prompts the user to select a dataset ACL mode (visibility)
4
+ *
5
+ * @param output - Optional output instance for logging additional information
6
+ * @returns Promise resolving to the selected ACL mode
7
+ */ export async function promptForDatasetAclMode(output) {
8
+ const mode = await select({
9
+ choices: [
10
+ {
11
+ name: 'Public (world readable)',
12
+ value: 'public'
13
+ },
14
+ {
15
+ name: 'Private (Authenticated user or token needed)',
16
+ value: 'private'
17
+ }
18
+ ],
19
+ message: 'Dataset visibility'
20
+ });
21
+ if (mode === 'private' && output) {
22
+ output.warn('Please note that while documents are private, assets (files and images) are still public');
23
+ }
24
+ return mode;
25
+ }
26
+
27
+ //# sourceMappingURL=promptForDatasetAclMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/prompts/promptForDatasetAclMode.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\nimport {type DatasetAclMode} from '@sanity/client'\n\n/**\n * Prompts the user to select a dataset ACL mode (visibility)\n *\n * @param output - Optional output instance for logging additional information\n * @returns Promise resolving to the selected ACL mode\n */\nexport async function promptForDatasetAclMode(output?: Output): Promise<DatasetAclMode> {\n const mode = await select({\n choices: [\n {\n name: 'Public (world readable)',\n value: 'public' as const,\n },\n {\n name: 'Private (Authenticated user or token needed)',\n value: 'private' as const,\n },\n ],\n message: 'Dataset visibility',\n })\n\n if (mode === 'private' && output) {\n output.warn(\n 'Please note that while documents are private, assets (files and images) are still public',\n )\n }\n\n return mode\n}\n"],"names":["select","promptForDatasetAclMode","output","mode","choices","name","value","message","warn"],"mappings":"AACA,SAAQA,MAAM,QAAO,sBAAqB;AAG1C;;;;;CAKC,GACD,OAAO,eAAeC,wBAAwBC,MAAe;IAC3D,MAAMC,OAAO,MAAMH,OAAO;QACxBI,SAAS;YACP;gBACEC,MAAM;gBACNC,OAAO;YACT;YACA;gBACED,MAAM;gBACNC,OAAO;YACT;SACD;QACDC,SAAS;IACX;IAEA,IAAIJ,SAAS,aAAaD,QAAQ;QAChCA,OAAOM,IAAI,CACT;IAEJ;IAEA,OAAOL;AACT"}
@@ -1,4 +1,4 @@
1
1
  export declare function promptForDatasetName(options?: {
2
2
  default?: string;
3
3
  message?: string;
4
- }): Promise<string>;
4
+ }, existingDatasets?: string[]): Promise<string>;
@@ -1,10 +1,13 @@
1
1
  import { input } from '@sanity/cli-core/ux';
2
2
  import { validateDatasetName } from '../actions/dataset/validateDatasetName.js';
3
- export function promptForDatasetName(options = {}) {
3
+ export function promptForDatasetName(options = {}, existingDatasets = []) {
4
4
  return input({
5
5
  default: options.default,
6
6
  message: options.message || 'Dataset name:',
7
7
  validate: (name)=>{
8
+ if (existingDatasets.includes(name)) {
9
+ return 'Dataset name already exists';
10
+ }
8
11
  const err = validateDatasetName(name);
9
12
  if (err) {
10
13
  return err;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/prompts/promptForDatasetName.ts"],"sourcesContent":["import {input} from '@sanity/cli-core/ux'\n\nimport {validateDatasetName} from '../actions/dataset/validateDatasetName.js'\n\nexport function promptForDatasetName(\n options: {default?: string; message?: string} = {},\n): Promise<string> {\n return input({\n default: options.default,\n message: options.message || 'Dataset name:',\n validate: (name) => {\n const err = validateDatasetName(name)\n if (err) {\n return err\n }\n\n return true\n },\n })\n}\n"],"names":["input","validateDatasetName","promptForDatasetName","options","default","message","validate","name","err"],"mappings":"AAAA,SAAQA,KAAK,QAAO,sBAAqB;AAEzC,SAAQC,mBAAmB,QAAO,4CAA2C;AAE7E,OAAO,SAASC,qBACdC,UAAgD,CAAC,CAAC;IAElD,OAAOH,MAAM;QACXI,SAASD,QAAQC,OAAO;QACxBC,SAASF,QAAQE,OAAO,IAAI;QAC5BC,UAAU,CAACC;YACT,MAAMC,MAAMP,oBAAoBM;YAChC,IAAIC,KAAK;gBACP,OAAOA;YACT;YAEA,OAAO;QACT;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/prompts/promptForDatasetName.ts"],"sourcesContent":["import {input} from '@sanity/cli-core/ux'\n\nimport {validateDatasetName} from '../actions/dataset/validateDatasetName.js'\n\nexport function promptForDatasetName(\n options: {default?: string; message?: string} = {},\n existingDatasets: string[] = [],\n): Promise<string> {\n return input({\n default: options.default,\n message: options.message || 'Dataset name:',\n validate: (name) => {\n if (existingDatasets.includes(name)) {\n return 'Dataset name already exists'\n }\n\n const err = validateDatasetName(name)\n if (err) {\n return err\n }\n\n return true\n },\n })\n}\n"],"names":["input","validateDatasetName","promptForDatasetName","options","existingDatasets","default","message","validate","name","includes","err"],"mappings":"AAAA,SAAQA,KAAK,QAAO,sBAAqB;AAEzC,SAAQC,mBAAmB,QAAO,4CAA2C;AAE7E,OAAO,SAASC,qBACdC,UAAgD,CAAC,CAAC,EAClDC,mBAA6B,EAAE;IAE/B,OAAOJ,MAAM;QACXK,SAASF,QAAQE,OAAO;QACxBC,SAASH,QAAQG,OAAO,IAAI;QAC5BC,UAAU,CAACC;YACT,IAAIJ,iBAAiBK,QAAQ,CAACD,OAAO;gBACnC,OAAO;YACT;YAEA,MAAME,MAAMT,oBAAoBO;YAChC,IAAIE,KAAK;gBACP,OAAOA;YACT;YAEA,OAAO;QACT;IACF;AACF"}