@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.
- package/README.md +2907 -109
- package/dist/actions/dataset/create.d.ts +49 -0
- package/dist/actions/dataset/create.js +48 -0
- package/dist/actions/dataset/create.js.map +1 -0
- package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
- package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
- package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
- package/dist/actions/debug/gatherDebugInfo.js +15 -21
- package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
- package/dist/actions/debug/types.d.ts +0 -2
- package/dist/actions/debug/types.js.map +1 -1
- package/dist/actions/deploy/deployApp.js +13 -0
- package/dist/actions/deploy/deployApp.js.map +1 -1
- package/dist/actions/init/remoteTemplate.js +1 -1
- package/dist/actions/init/remoteTemplate.js.map +1 -1
- package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
- package/dist/actions/manifest/extractAppManifest.js +51 -0
- package/dist/actions/manifest/extractAppManifest.js.map +1 -0
- package/dist/actions/manifest/extractManifest.js +1 -1
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/manifest/types.d.ts +6 -1
- package/dist/actions/manifest/types.js.map +1 -1
- package/dist/actions/media/importAspects.js +2 -1
- package/dist/actions/media/importAspects.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +1 -1
- package/dist/actions/telemetry/resolveConsent.d.ts +1 -9
- package/dist/actions/telemetry/resolveConsent.js +2 -2
- package/dist/actions/telemetry/resolveConsent.js.map +1 -1
- package/dist/actions/telemetry/setConsent.d.ts +1 -4
- package/dist/actions/telemetry/setConsent.js +4 -8
- package/dist/actions/telemetry/setConsent.js.map +1 -1
- package/dist/commands/dataset/create.d.ts +0 -2
- package/dist/commands/dataset/create.js +8 -54
- package/dist/commands/dataset/create.js.map +1 -1
- package/dist/commands/debug.js +5 -9
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/init.d.ts +6 -1
- package/dist/commands/init.js +358 -20
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/manifest/extract.js +7 -8
- package/dist/commands/manifest/extract.js.map +1 -1
- package/dist/commands/telemetry/disable.js +0 -1
- package/dist/commands/telemetry/disable.js.map +1 -1
- package/dist/commands/telemetry/enable.js +0 -1
- package/dist/commands/telemetry/enable.js.map +1 -1
- package/dist/commands/telemetry/status.js +1 -3
- package/dist/commands/telemetry/status.js.map +1 -1
- package/dist/config/createCliConfig.d.ts +9 -0
- package/dist/hooks/prerun/flushTelemetry.worker.d.ts +2 -0
- package/dist/hooks/prerun/flushTelemetry.worker.js +22 -0
- package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -0
- package/dist/hooks/prerun/setupTelemetry.js +65 -1
- package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
- package/dist/prompts/init/promptForTypescript.d.ts +2 -0
- package/dist/prompts/init/promptForTypescript.js +15 -0
- package/dist/prompts/init/promptForTypescript.js.map +1 -0
- package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
- package/dist/prompts/promptForDatasetAclMode.js +27 -0
- package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
- package/dist/prompts/promptForDatasetName.d.ts +1 -1
- package/dist/prompts/promptForDatasetName.js +4 -1
- package/dist/prompts/promptForDatasetName.js.map +1 -1
- package/dist/services/organizations.d.ts +3 -1
- package/dist/services/organizations.js +2 -1
- package/dist/services/organizations.js.map +1 -1
- package/dist/services/telemetry.d.ts +2 -0
- package/dist/services/telemetry.js +20 -0
- package/dist/services/telemetry.js.map +1 -0
- package/dist/services/user.d.ts +5 -0
- package/dist/services/user.js +12 -1
- package/dist/services/user.js.map +1 -1
- package/dist/services/userApplications.d.ts +3 -1
- package/dist/services/userApplications.js +5 -1
- package/dist/services/userApplications.js.map +1 -1
- package/dist/telemetry/cli.telemetry.d.ts +20 -0
- package/dist/telemetry/cli.telemetry.js +8 -0
- package/dist/telemetry/cli.telemetry.js.map +1 -0
- package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +5 -0
- package/dist/telemetry/store/cleanupOldTelemetryFiles.js +30 -0
- package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +1 -0
- package/dist/telemetry/store/createTelemetryStore.d.ts +39 -0
- package/dist/telemetry/store/createTelemetryStore.js +95 -0
- package/dist/telemetry/store/createTelemetryStore.js.map +1 -0
- package/dist/telemetry/store/createTraceId.d.ts +10 -0
- package/dist/telemetry/store/createTraceId.js +10 -0
- package/dist/telemetry/store/createTraceId.js.map +1 -0
- package/dist/telemetry/store/debug.d.ts +5 -0
- package/dist/telemetry/store/debug.js +7 -0
- package/dist/telemetry/store/debug.js.map +1 -0
- package/dist/telemetry/store/findTelemetryFiles.d.ts +13 -0
- package/dist/telemetry/store/findTelemetryFiles.js +34 -0
- package/dist/telemetry/store/findTelemetryFiles.js.map +1 -0
- package/dist/telemetry/store/flushTelemetryFiles.d.ts +20 -0
- package/dist/telemetry/store/flushTelemetryFiles.js +107 -0
- package/dist/telemetry/store/flushTelemetryFiles.js.map +1 -0
- package/dist/telemetry/store/generateTelemetryFilePath.d.ts +17 -0
- package/dist/telemetry/store/generateTelemetryFilePath.js +30 -0
- package/dist/telemetry/store/generateTelemetryFilePath.js.map +1 -0
- package/dist/telemetry/store/getTelemetryBaseInfo.d.ts +27 -0
- package/dist/telemetry/store/getTelemetryBaseInfo.js +34 -0
- package/dist/telemetry/store/getTelemetryBaseInfo.js.map +1 -0
- package/dist/telemetry/store/logger.d.ts +6 -0
- package/dist/telemetry/store/logger.js +54 -0
- package/dist/telemetry/store/logger.js.map +1 -0
- package/dist/telemetry/store/trace.d.ts +6 -0
- package/dist/telemetry/store/trace.js +150 -0
- package/dist/telemetry/store/trace.js.map +1 -0
- package/dist/telemetry/utils/readNDJSON.d.ts +10 -0
- package/dist/telemetry/utils/readNDJSON.js +18 -0
- package/dist/telemetry/utils/readNDJSON.js.map +1 -0
- package/dist/util/detectRuntime.d.ts +8 -0
- package/dist/util/detectRuntime.js +20 -0
- package/dist/util/detectRuntime.js.map +1 -0
- package/dist/util/isStaging.d.ts +7 -0
- package/dist/util/isStaging.js +10 -0
- package/dist/util/isStaging.js.map +1 -0
- package/dist/util/parseArguments.d.ts +35 -0
- package/dist/util/parseArguments.js +42 -0
- package/dist/util/parseArguments.js.map +1 -0
- package/oclif.manifest.json +7 -1
- package/package.json +25 -18
- package/templates/app-quickstart/src/App.css +20 -0
- package/templates/app-quickstart/src/App.tsx +25 -0
- package/templates/app-quickstart/src/ExampleComponent.css +90 -0
- package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
- package/templates/app-sanity-ui/src/App.tsx +34 -0
- package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
- package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
- package/templates/blog/README.md +11 -0
- package/templates/blog/schemaTypes/author.js +50 -0
- package/templates/blog/schemaTypes/blockContent.js +67 -0
- package/templates/blog/schemaTypes/category.js +19 -0
- package/templates/blog/schemaTypes/index.js +6 -0
- package/templates/blog/schemaTypes/post.js +65 -0
- package/templates/blog/static/.gitkeep +1 -0
- package/templates/clean/README.md +9 -0
- package/templates/clean/schemaTypes/index.js +1 -0
- package/templates/clean/static/.gitkeep +1 -0
- package/templates/ecommerce/README.md +11 -0
- package/templates/ecommerce/plugins/.gitkeep +1 -0
- package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
- package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
- package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
- package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
- package/templates/ecommerce/schemaTypes/category.js +39 -0
- package/templates/ecommerce/schemaTypes/index.js +23 -0
- package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
- package/templates/ecommerce/schemaTypes/product.js +83 -0
- package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
- package/templates/ecommerce/schemaTypes/vendor.js +39 -0
- package/templates/ecommerce/static/.gitkeep +1 -0
- package/templates/get-started/README.md +9 -0
- package/templates/get-started/plugins/.gitkeep +1 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
- package/templates/get-started/schemaTypes/index.ts +1 -0
- package/templates/get-started/static/.gitkeep +1 -0
- package/templates/moviedb/README.md +10 -0
- package/templates/moviedb/schemaTypes/blockContent.js +67 -0
- package/templates/moviedb/schemaTypes/castMember.js +37 -0
- package/templates/moviedb/schemaTypes/crewMember.js +52 -0
- package/templates/moviedb/schemaTypes/index.js +22 -0
- package/templates/moviedb/schemaTypes/movie.js +85 -0
- package/templates/moviedb/schemaTypes/person.js +37 -0
- package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
- package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
- package/templates/moviedb/schemaTypes/screening.js +81 -0
- package/templates/moviedb/static/.gitkeep +1 -0
- package/templates/quickstart/README.md +9 -0
- package/templates/quickstart/schemaTypes/index.js +1 -0
- package/templates/quickstart/static/.gitkeep +1 -0
- package/templates/shared/gitignore.txt +29 -0
- package/templates/shared/tsconfig.json +17 -0
- package/templates/shopify/README.md +85 -0
- package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
- package/templates/shopify/components/icons/Shopify.tsx +20 -0
- package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
- package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
- package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
- package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
- package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
- package/templates/shopify/components/media/ColorTheme.tsx +38 -0
- package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
- package/templates/shopify/components/studio/Navbar.tsx +29 -0
- package/templates/shopify/constants.ts +61 -0
- package/templates/shopify/docs/features.md +158 -0
- package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
- package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
- package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
- package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
- package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
- package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
- package/templates/shopify/schemaTypes/documents/page.ts +70 -0
- package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
- package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
- package/templates/shopify/schemaTypes/index.ts +108 -0
- package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
- package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
- package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
- package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
- package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
- package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
- package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
- package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
- package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
- package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
- package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
- package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
- package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
- package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
- package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
- package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
- package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
- package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
- package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
- package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
- package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
- package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
- package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
- package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
- package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
- package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
- package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
- package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
- package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
- package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
- package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
- package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
- package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
- package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
- package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
- package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
- package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
- package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
- package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
- package/templates/shopify/static/.gitkeep +1 -0
- package/templates/shopify/structure/collectionStructure.ts +9 -0
- package/templates/shopify/structure/colorThemeStructure.ts +9 -0
- package/templates/shopify/structure/homeStructure.ts +9 -0
- package/templates/shopify/structure/index.ts +57 -0
- package/templates/shopify/structure/pageStructure.ts +11 -0
- package/templates/shopify/structure/productStructure.ts +51 -0
- package/templates/shopify/structure/settingStructure.ts +9 -0
- package/templates/shopify/utils/blocksToText.ts +20 -0
- package/templates/shopify/utils/defineStructure.ts +11 -0
- package/templates/shopify/utils/getPriceRange.ts +24 -0
- package/templates/shopify/utils/shopifyUrls.ts +22 -0
- package/templates/shopify/utils/validateSlug.ts +18 -0
- package/templates/shopify-online-storefront/README.md +54 -0
- package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
- package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
- package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
- package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
- package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
- package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
- package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
- package/templates/shopify-online-storefront/constants.ts +18 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
- package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
- package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
- package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
- package/templates/shopify-online-storefront/structure/index.ts +37 -0
- package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
- package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
- package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
- package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
- package/dist/actions/build/__tests__/buildApp.test.js +0 -367
- package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
- package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
- package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
- package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
- package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
- package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
- package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
- package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
- package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
- package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
- package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
- package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
- package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
- package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
- package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
- package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
- package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
- package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
- package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
- package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
- package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
- package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
- package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
- package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
- package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
- package/dist/actions/media/__tests__/importMedia.test.js +0 -182
- package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
- package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
- package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
- package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
- package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
- package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
- package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
- package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
- package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
- package/dist/commands/__tests__/blueprints.test.js +0 -54
- package/dist/commands/__tests__/blueprints.test.js.map +0 -1
- package/dist/commands/__tests__/build.test.js +0 -132
- package/dist/commands/__tests__/build.test.js.map +0 -1
- package/dist/commands/__tests__/codemod.test.js +0 -271
- package/dist/commands/__tests__/codemod.test.js.map +0 -1
- package/dist/commands/__tests__/debug.test.js +0 -590
- package/dist/commands/__tests__/debug.test.js.map +0 -1
- package/dist/commands/__tests__/deploy.test.js +0 -1945
- package/dist/commands/__tests__/deploy.test.js.map +0 -1
- package/dist/commands/__tests__/dev.test.js +0 -453
- package/dist/commands/__tests__/dev.test.js.map +0 -1
- package/dist/commands/__tests__/exec.test.js +0 -207
- package/dist/commands/__tests__/exec.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.authentication.test.js +0 -73
- package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -195
- package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.plan.test.js +0 -279
- package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.setup.test.js +0 -335
- package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
- package/dist/commands/__tests__/install.test.js +0 -282
- package/dist/commands/__tests__/install.test.js.map +0 -1
- package/dist/commands/__tests__/learn.test.js +0 -29
- package/dist/commands/__tests__/learn.test.js.map +0 -1
- package/dist/commands/__tests__/logout.test.js +0 -91
- package/dist/commands/__tests__/logout.test.js.map +0 -1
- package/dist/commands/__tests__/manage.test.js +0 -110
- package/dist/commands/__tests__/manage.test.js.map +0 -1
- package/dist/commands/__tests__/migration.test.js +0 -119
- package/dist/commands/__tests__/migration.test.js.map +0 -1
- package/dist/commands/__tests__/preview.test.js +0 -261
- package/dist/commands/__tests__/preview.test.js.map +0 -1
- package/dist/commands/__tests__/start.test.js +0 -253
- package/dist/commands/__tests__/start.test.js.map +0 -1
- package/dist/commands/__tests__/undeploy.test.js +0 -382
- package/dist/commands/__tests__/undeploy.test.js.map +0 -1
- package/dist/commands/__tests__/versions.test.js +0 -142
- package/dist/commands/__tests__/versions.test.js.map +0 -1
- package/dist/commands/backup/__tests__/disable.test.js +0 -204
- package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
- package/dist/commands/backup/__tests__/download.test.js +0 -768
- package/dist/commands/backup/__tests__/download.test.js.map +0 -1
- package/dist/commands/backup/__tests__/enable.test.js +0 -286
- package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
- package/dist/commands/backup/__tests__/list.test.js +0 -330
- package/dist/commands/backup/__tests__/list.test.js.map +0 -1
- package/dist/commands/cors/__tests__/add.test.js +0 -376
- package/dist/commands/cors/__tests__/add.test.js.map +0 -1
- package/dist/commands/cors/__tests__/delete.test.js +0 -308
- package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
- package/dist/commands/cors/__tests__/list.test.js +0 -241
- package/dist/commands/cors/__tests__/list.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/copy.test.js +0 -628
- package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/create.test.js +0 -342
- package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/delete.test.js +0 -231
- package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/export.test.js +0 -601
- package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/import.test.js +0 -53
- package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/list.test.js +0 -216
- package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/create.test.js +0 -339
- package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -247
- package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/link.test.js +0 -376
- package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -313
- package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
- package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -128
- package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
- package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -198
- package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
- package/dist/commands/docs/__tests__/browse.test.js +0 -29
- package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
- package/dist/commands/docs/__tests__/read.test.js +0 -78
- package/dist/commands/docs/__tests__/read.test.js.map +0 -1
- package/dist/commands/docs/__tests__/search.test.js +0 -255
- package/dist/commands/docs/__tests__/search.test.js.map +0 -1
- package/dist/commands/documents/__tests__/create.test.js +0 -1030
- package/dist/commands/documents/__tests__/create.test.js.map +0 -1
- package/dist/commands/documents/__tests__/delete.test.js +0 -300
- package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
- package/dist/commands/documents/__tests__/get.test.js +0 -182
- package/dist/commands/documents/__tests__/get.test.js.map +0 -1
- package/dist/commands/documents/__tests__/query.test.js +0 -300
- package/dist/commands/documents/__tests__/query.test.js.map +0 -1
- package/dist/commands/documents/__tests__/validate.test.js +0 -249
- package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
- package/dist/commands/graphql/__tests__/list.test.js +0 -240
- package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
- package/dist/commands/graphql/__tests__/undeploy.test.js +0 -410
- package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
- package/dist/commands/hook/__tests__/attempt.test.js +0 -275
- package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
- package/dist/commands/hook/__tests__/create.test.js +0 -119
- package/dist/commands/hook/__tests__/create.test.js.map +0 -1
- package/dist/commands/hook/__tests__/delete.test.js +0 -233
- package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
- package/dist/commands/hook/__tests__/list.test.js +0 -145
- package/dist/commands/hook/__tests__/list.test.js.map +0 -1
- package/dist/commands/hook/__tests__/logs.test.js +0 -798
- package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
- package/dist/commands/manifest/__tests__/extract.test.js +0 -132
- package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
- package/dist/commands/mcp/__tests__/configure.test.js +0 -397
- package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
- package/dist/commands/media/__tests__/create-aspect.test.js +0 -173
- package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/delete-aspect.test.js +0 -342
- package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -619
- package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/export.test.js +0 -697
- package/dist/commands/media/__tests__/export.test.js.map +0 -1
- package/dist/commands/media/__tests__/import.test.js +0 -347
- package/dist/commands/media/__tests__/import.test.js.map +0 -1
- package/dist/commands/openapi/__tests__/get.test.js +0 -149
- package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
- package/dist/commands/openapi/__tests__/list.test.js +0 -113
- package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
- package/dist/commands/projects/__tests__/list.test.js +0 -154
- package/dist/commands/projects/__tests__/list.test.js.map +0 -1
- package/dist/commands/schema/__tests__/delete.test.js +0 -454
- package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
- package/dist/commands/schema/__tests__/deploy.test.js +0 -348
- package/dist/commands/schema/__tests__/deploy.test.js.map +0 -1
- package/dist/commands/schema/__tests__/extract.test.js +0 -121
- package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
- package/dist/commands/schema/__tests__/list.test.js +0 -399
- package/dist/commands/schema/__tests__/list.test.js.map +0 -1
- package/dist/commands/schema/__tests__/validate.test.js +0 -121
- package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/disable.test.js +0 -147
- package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/enable.test.js +0 -133
- package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/status.test.js +0 -155
- package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/add.test.js +0 -435
- package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/delete.test.js +0 -405
- package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/list.test.js +0 -395
- package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
- package/dist/commands/users/__tests__/invite.test.js +0 -362
- package/dist/commands/users/__tests__/invite.test.js.map +0 -1
- package/dist/commands/users/__tests__/list.test.js +0 -407
- package/dist/commands/users/__tests__/list.test.js.map +0 -1
- package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
- package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
- package/dist/services/__tests__/datasetAliases.test.js +0 -131
- package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
- package/dist/services/__tests__/datasets.test.js +0 -436
- package/dist/services/__tests__/datasets.test.js.map +0 -1
- package/dist/services/__tests__/graphql.test.js +0 -43
- package/dist/services/__tests__/graphql.test.js.map +0 -1
- package/dist/services/__tests__/mediaLibraries.test.js +0 -88
- package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
- package/dist/services/__tests__/projects.test.js +0 -41
- package/dist/services/__tests__/projects.test.js.map +0 -1
- package/dist/services/__tests__/userApplications.test.js +0 -113
- package/dist/services/__tests__/userApplications.test.js.map +0 -1
- package/dist/util/__tests__/appId.test.js +0 -31
- package/dist/util/__tests__/appId.test.js.map +0 -1
- package/dist/util/__tests__/cliClient.test.js +0 -184
- package/dist/util/__tests__/cliClient.test.js.map +0 -1
- package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
- package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
- package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
- package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
- package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
- package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
- package/dist/util/__tests__/getCliVersion.test.js +0 -28
- package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
- package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
- package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
- package/dist/util/__tests__/getWorkspace.test.js +0 -37
- package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
- package/dist/util/__tests__/readPackageJson.test.js +0 -69
- package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
- package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
- package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
- package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
- package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
- package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
- package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
package/dist/commands/init.js
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
// @Todo will remove by time migration of this command is complete
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unused-vars */ import { Args, Flags } from '@oclif/core';
|
|
3
|
+
import { CLIError } from '@oclif/core/errors';
|
|
3
4
|
import { getCliToken, SanityCommand, subdebug } from '@sanity/cli-core';
|
|
4
|
-
import { confirm, input, logSymbols, select, spinner } from '@sanity/cli-core/ux';
|
|
5
|
+
import { chalk, confirm, input, logSymbols, select, Separator, spinner } from '@sanity/cli-core/ux';
|
|
5
6
|
import { isHttpError } from '@sanity/client';
|
|
6
7
|
import { frameworks } from '@vercel/frameworks';
|
|
7
8
|
import { detectFrameworkRecord, LocalFileSystemDetector } from '@vercel/fs-detectors';
|
|
8
9
|
import { getProviderName } from '../actions/auth/getProviderName.js';
|
|
9
10
|
import { login } from '../actions/auth/login/login.js';
|
|
11
|
+
import { createDataset } from '../actions/dataset/create.js';
|
|
10
12
|
import { determineAppTemplate } from '../actions/init/determineAppTemplate.js';
|
|
11
13
|
import { checkIsRemoteTemplate, getGitHubRepoInfo } from '../actions/init/remoteTemplate.js';
|
|
12
14
|
import { getOrganizationChoices } from '../actions/organizations/getOrganizationChoices.js';
|
|
13
15
|
import { getOrganizationsWithAttachGrantInfo } from '../actions/organizations/getOrganizationsWithAttachGrantInfo.js';
|
|
14
|
-
import {
|
|
16
|
+
import { hasProjectAttachGrant } from '../actions/organizations/hasProjectAttachGrant.js';
|
|
17
|
+
import { promptForDatasetName } from '../prompts/promptForDatasetName.js';
|
|
18
|
+
import { createDataset as createDatasetService, listDatasets } from '../services/datasets.js';
|
|
19
|
+
import { getProjectFeatures } from '../services/getProjectFeatures.js';
|
|
15
20
|
import { createOrganization, listOrganizations } from '../services/organizations.js';
|
|
16
21
|
import { getPlanId, getPlanIdFromCoupon } from '../services/plans.js';
|
|
17
|
-
import { createProject } from '../services/projects.js';
|
|
22
|
+
import { createProject, listProjects } from '../services/projects.js';
|
|
18
23
|
import { getCliUser } from '../services/user.js';
|
|
19
24
|
const debug = subdebug('init');
|
|
20
25
|
export class InitCommand extends SanityCommand {
|
|
@@ -85,7 +90,7 @@ export class InitCommand extends SanityCommand {
|
|
|
85
90
|
helpValue: '<filename>',
|
|
86
91
|
parse: async (input)=>{
|
|
87
92
|
if (!input.startsWith('.env')) {
|
|
88
|
-
throw new
|
|
93
|
+
throw new CLIError('Env filename (`--env`) must start with `.env`');
|
|
89
94
|
}
|
|
90
95
|
return input;
|
|
91
96
|
}
|
|
@@ -249,12 +254,14 @@ export class InitCommand extends SanityCommand {
|
|
|
249
254
|
}
|
|
250
255
|
// Oclif doesn't support custom exclusive error messaging
|
|
251
256
|
if (this.flags.project && this.flags.organization) {
|
|
252
|
-
|
|
257
|
+
this.error('You have specified both a project and an organization. To move a project to an organization please visit https://www.sanity.io/manage', {
|
|
258
|
+
exit: 1
|
|
259
|
+
});
|
|
253
260
|
}
|
|
254
261
|
const defaultConfig = this.flags['dataset-default'];
|
|
255
|
-
let
|
|
262
|
+
let showDefaultConfigPrompt = !defaultConfig;
|
|
256
263
|
if (this.flags.dataset || this.flags.visibility || this.flags['dataset-default'] || this.isUnattended()) {
|
|
257
|
-
|
|
264
|
+
showDefaultConfigPrompt = false;
|
|
258
265
|
}
|
|
259
266
|
const detectedFramework = await detectFrameworkRecord({
|
|
260
267
|
frameworkList: frameworks,
|
|
@@ -313,29 +320,52 @@ export class InitCommand extends SanityCommand {
|
|
|
313
320
|
this.log(`${logSymbols.success} Fetching existing projects`);
|
|
314
321
|
this.log('');
|
|
315
322
|
}
|
|
316
|
-
const _newProjectId = createProjectName && await this.
|
|
323
|
+
const _newProjectId = createProjectName && await this.createProjectFromName({
|
|
317
324
|
createProjectName,
|
|
318
325
|
planId,
|
|
319
326
|
user
|
|
320
327
|
});
|
|
328
|
+
const { datasetName, projectId } = await this.getProjectDetails({
|
|
329
|
+
isAppTemplate,
|
|
330
|
+
planId,
|
|
331
|
+
showDefaultConfigPrompt,
|
|
332
|
+
user
|
|
333
|
+
});
|
|
334
|
+
// If user doesn't want to output any template code
|
|
335
|
+
if (this.flags.bare) {
|
|
336
|
+
this.log(`${logSymbols.success} Below are your project details`);
|
|
337
|
+
this.log('');
|
|
338
|
+
this.log(`Project ID: ${chalk.cyan(projectId)}`);
|
|
339
|
+
this.log(`Dataset: ${chalk.cyan(datasetName)}`);
|
|
340
|
+
this.log(`\nYou can find your project on Sanity Manage — https://www.sanity.io/manage/project/${projectId}\n`);
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
321
343
|
}
|
|
322
344
|
checkFlagsInUnattendedMode({ createProjectName, isNextJs }) {
|
|
323
345
|
debug('Unattended mode, validating required options');
|
|
324
346
|
if (!this.flags['dataset']) {
|
|
325
|
-
|
|
347
|
+
this.error(`\`--dataset\` must be specified in unattended mode`, {
|
|
348
|
+
exit: 1
|
|
349
|
+
});
|
|
326
350
|
}
|
|
327
351
|
// output-path is required in unattended mode when not using nextjs
|
|
328
352
|
if (!isNextJs && !this.flags['output-path']) {
|
|
329
|
-
|
|
353
|
+
this.error(`\`--output-path\` must be specified in unattended mode`, {
|
|
354
|
+
exit: 1
|
|
355
|
+
});
|
|
330
356
|
}
|
|
331
357
|
if (!this.flags.project && !createProjectName) {
|
|
332
|
-
|
|
358
|
+
this.error('`--project <id>` or `--create-project <name>` must be specified in unattended mode', {
|
|
359
|
+
exit: 1
|
|
360
|
+
});
|
|
333
361
|
}
|
|
334
362
|
if (createProjectName && !this.flags.organization) {
|
|
335
|
-
|
|
363
|
+
this.error('--create-project is not supported in unattended mode without an organization, please specify an organization with `--organization <id>`', {
|
|
364
|
+
exit: 1
|
|
365
|
+
});
|
|
336
366
|
}
|
|
337
367
|
}
|
|
338
|
-
async
|
|
368
|
+
async createProjectFromName({ createProjectName, planId, user }) {
|
|
339
369
|
debug('--create-project specified, creating a new project');
|
|
340
370
|
let orgForCreateProjectFlag = this.flags.organization;
|
|
341
371
|
if (!orgForCreateProjectFlag) {
|
|
@@ -361,7 +391,7 @@ export class InitCommand extends SanityCommand {
|
|
|
361
391
|
if (this.flags.dataset) {
|
|
362
392
|
debug('--dataset specified, creating dataset (%s)', this.flags.dataset);
|
|
363
393
|
const spin = spinner('Creating dataset').start();
|
|
364
|
-
await
|
|
394
|
+
await createDatasetService({
|
|
365
395
|
aclMode: this.flags.visibility,
|
|
366
396
|
datasetName: this.flags.dataset,
|
|
367
397
|
projectId: createdProject.projectId
|
|
@@ -390,7 +420,9 @@ export class InitCommand extends SanityCommand {
|
|
|
390
420
|
// trace.log({ step: 'login', alreadyLoggedIn: true })
|
|
391
421
|
} else {
|
|
392
422
|
if (this.isUnattended()) {
|
|
393
|
-
|
|
423
|
+
this.error('Must be logged in to run this command in unattended mode, run `sanity login`', {
|
|
424
|
+
exit: 1
|
|
425
|
+
});
|
|
394
426
|
}
|
|
395
427
|
// @todo telemetry
|
|
396
428
|
//trace.log({step: 'login'})
|
|
@@ -405,6 +437,220 @@ export class InitCommand extends SanityCommand {
|
|
|
405
437
|
user
|
|
406
438
|
};
|
|
407
439
|
}
|
|
440
|
+
async getOrCreateDataset(opts) {
|
|
441
|
+
const visibility = this.flags.visibility;
|
|
442
|
+
const dataset = this.flags.dataset;
|
|
443
|
+
let defaultConfig = this.flags['dataset-default'];
|
|
444
|
+
if (dataset && this.isUnattended()) {
|
|
445
|
+
return {
|
|
446
|
+
datasetName: dataset,
|
|
447
|
+
userAction: 'none'
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
const [datasets, projectFeatures] = await Promise.all([
|
|
451
|
+
listDatasets(opts.projectId),
|
|
452
|
+
getProjectFeatures(opts.projectId)
|
|
453
|
+
]);
|
|
454
|
+
if (dataset) {
|
|
455
|
+
debug('User has specified dataset through a flag (%s)', dataset);
|
|
456
|
+
const existing = datasets.find((ds)=>ds.name === dataset);
|
|
457
|
+
if (!existing) {
|
|
458
|
+
debug('Specified dataset not found, creating it');
|
|
459
|
+
await createDataset({
|
|
460
|
+
datasetName: dataset,
|
|
461
|
+
forcePublic: defaultConfig,
|
|
462
|
+
output: this.output,
|
|
463
|
+
projectFeatures,
|
|
464
|
+
projectId: opts.projectId,
|
|
465
|
+
visibility
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
return {
|
|
469
|
+
datasetName: dataset,
|
|
470
|
+
userAction: 'none'
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
const datasetInfo = 'Your content will be stored in a dataset that can be public or private, depending on\nwhether you want to query your content with or without authentication.\nThe default dataset configuration has a public dataset named "production".';
|
|
474
|
+
if (datasets.length === 0) {
|
|
475
|
+
debug('No datasets found for project, prompting for name');
|
|
476
|
+
if (opts.showDefaultConfigPrompt) {
|
|
477
|
+
this.log(datasetInfo);
|
|
478
|
+
defaultConfig = await this.promptForDefaultConfig();
|
|
479
|
+
}
|
|
480
|
+
const name = defaultConfig ? 'production' : await promptForDatasetName({
|
|
481
|
+
message: 'Name of your first dataset:'
|
|
482
|
+
});
|
|
483
|
+
await createDataset({
|
|
484
|
+
datasetName: name,
|
|
485
|
+
forcePublic: defaultConfig,
|
|
486
|
+
output: this.output,
|
|
487
|
+
projectFeatures,
|
|
488
|
+
projectId: opts.projectId,
|
|
489
|
+
visibility
|
|
490
|
+
});
|
|
491
|
+
return {
|
|
492
|
+
datasetName: name,
|
|
493
|
+
userAction: 'create'
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
debug(`User has ${datasets.length} dataset(s) already, showing list of choices`);
|
|
497
|
+
const datasetChoices = datasets.map((dataset)=>({
|
|
498
|
+
value: dataset.name
|
|
499
|
+
}));
|
|
500
|
+
const selected = await select({
|
|
501
|
+
choices: [
|
|
502
|
+
{
|
|
503
|
+
name: 'Create new dataset',
|
|
504
|
+
value: 'new'
|
|
505
|
+
},
|
|
506
|
+
new Separator(),
|
|
507
|
+
...datasetChoices
|
|
508
|
+
],
|
|
509
|
+
message: 'Select dataset to use'
|
|
510
|
+
});
|
|
511
|
+
if (selected === 'new') {
|
|
512
|
+
const existingDatasetNames = datasets.map((ds)=>ds.name);
|
|
513
|
+
debug('User wants to create a new dataset, prompting for name');
|
|
514
|
+
if (opts.showDefaultConfigPrompt && !existingDatasetNames.includes('production')) {
|
|
515
|
+
this.log(datasetInfo);
|
|
516
|
+
defaultConfig = await this.promptForDefaultConfig();
|
|
517
|
+
}
|
|
518
|
+
const newDatasetName = defaultConfig ? 'production' : await promptForDatasetName({
|
|
519
|
+
message: 'Dataset name:'
|
|
520
|
+
}, existingDatasetNames);
|
|
521
|
+
await createDataset({
|
|
522
|
+
datasetName: newDatasetName,
|
|
523
|
+
forcePublic: defaultConfig,
|
|
524
|
+
output: this.output,
|
|
525
|
+
projectFeatures,
|
|
526
|
+
projectId: opts.projectId,
|
|
527
|
+
visibility
|
|
528
|
+
});
|
|
529
|
+
return {
|
|
530
|
+
datasetName: newDatasetName,
|
|
531
|
+
userAction: 'create'
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
debug(`Returning selected dataset (${selected})`);
|
|
535
|
+
return {
|
|
536
|
+
datasetName: selected,
|
|
537
|
+
userAction: 'select'
|
|
538
|
+
};
|
|
539
|
+
}
|
|
540
|
+
async getOrCreateProject({ planId, user }) {
|
|
541
|
+
const projectId = this.flags.project;
|
|
542
|
+
const organizationId = this.flags.organization;
|
|
543
|
+
let projects;
|
|
544
|
+
let organizations;
|
|
545
|
+
try {
|
|
546
|
+
const [allProjects, allOrgs] = await Promise.all([
|
|
547
|
+
listProjects(),
|
|
548
|
+
listOrganizations()
|
|
549
|
+
]);
|
|
550
|
+
projects = allProjects.toSorted((a, b)=>b.createdAt.localeCompare(a.createdAt));
|
|
551
|
+
organizations = allOrgs;
|
|
552
|
+
} catch (err) {
|
|
553
|
+
if (this.isUnattended() && projectId) {
|
|
554
|
+
return {
|
|
555
|
+
displayName: 'Unknown project',
|
|
556
|
+
isFirstProject: false,
|
|
557
|
+
projectId,
|
|
558
|
+
userAction: 'select'
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
this.error(`Failed to communicate with the Sanity API:\n${err.message}`, {
|
|
562
|
+
exit: 1
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
if (projects.length === 0 && this.isUnattended()) {
|
|
566
|
+
this.error('No projects found for current user', {
|
|
567
|
+
exit: 1
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
if (projectId) {
|
|
571
|
+
const project = projects.find((proj)=>proj.id === projectId);
|
|
572
|
+
if (!project && !this.isUnattended()) {
|
|
573
|
+
this.error(`Given project ID (${projectId}) not found, or you do not have access to it`, {
|
|
574
|
+
exit: 1
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
return {
|
|
578
|
+
displayName: project ? project.displayName : 'Unknown project',
|
|
579
|
+
isFirstProject: false,
|
|
580
|
+
projectId,
|
|
581
|
+
userAction: 'select'
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
if (organizationId) {
|
|
585
|
+
const organization = organizations.find((org)=>org.id === organizationId) || organizations.find((org)=>org.slug === organizationId);
|
|
586
|
+
if (!organization) {
|
|
587
|
+
this.error(`Given organization ID (${organizationId}) not found, or you do not have access to it`, {
|
|
588
|
+
exit: 1
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
if (!await hasProjectAttachGrant(organizationId)) {
|
|
592
|
+
this.error('You lack the necessary permissions to attach a project to this organization', {
|
|
593
|
+
exit: 1
|
|
594
|
+
});
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
// If the user has no projects or is using a coupon (which can only be applied to new projects)
|
|
598
|
+
// just ask for project details instead of showing a list of projects
|
|
599
|
+
const isUsersFirstProject = projects.length === 0;
|
|
600
|
+
if (isUsersFirstProject || this.flags.coupon) {
|
|
601
|
+
debug(isUsersFirstProject ? 'No projects found for user, prompting for name' : 'Using a coupon - skipping project selection');
|
|
602
|
+
const newProject = await this.promptForProjectCreation({
|
|
603
|
+
isUsersFirstProject,
|
|
604
|
+
organizationId,
|
|
605
|
+
organizations,
|
|
606
|
+
planId,
|
|
607
|
+
user
|
|
608
|
+
});
|
|
609
|
+
return {
|
|
610
|
+
...newProject,
|
|
611
|
+
isFirstProject: isUsersFirstProject,
|
|
612
|
+
userAction: 'create'
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
debug(`User has ${projects.length} project(s) already, showing list of choices`);
|
|
616
|
+
const projectChoices = projects.map((project)=>({
|
|
617
|
+
name: `${project.displayName} (${project.id})`,
|
|
618
|
+
value: project.id
|
|
619
|
+
}));
|
|
620
|
+
const selected = await select({
|
|
621
|
+
choices: [
|
|
622
|
+
{
|
|
623
|
+
name: 'Create new project',
|
|
624
|
+
value: 'new'
|
|
625
|
+
},
|
|
626
|
+
new Separator(),
|
|
627
|
+
...projectChoices
|
|
628
|
+
],
|
|
629
|
+
message: 'Create a new project or select an existing one'
|
|
630
|
+
});
|
|
631
|
+
if (selected === 'new') {
|
|
632
|
+
debug('User wants to create a new project, prompting for name');
|
|
633
|
+
const newProject = await this.promptForProjectCreation({
|
|
634
|
+
isUsersFirstProject,
|
|
635
|
+
organizationId,
|
|
636
|
+
organizations,
|
|
637
|
+
planId,
|
|
638
|
+
user
|
|
639
|
+
});
|
|
640
|
+
return {
|
|
641
|
+
...newProject,
|
|
642
|
+
isFirstProject: isUsersFirstProject,
|
|
643
|
+
userAction: 'create'
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
debug(`Returning selected project (${selected})`);
|
|
647
|
+
return {
|
|
648
|
+
displayName: projects.find((proj)=>proj.id === selected)?.displayName || '',
|
|
649
|
+
isFirstProject: isUsersFirstProject,
|
|
650
|
+
projectId: selected,
|
|
651
|
+
userAction: 'select'
|
|
652
|
+
};
|
|
653
|
+
}
|
|
408
654
|
async getPlan() {
|
|
409
655
|
const intendedPlan = this.flags['project-plan'];
|
|
410
656
|
const intendedCoupon = this.flags.coupon;
|
|
@@ -416,6 +662,92 @@ export class InitCommand extends SanityCommand {
|
|
|
416
662
|
return undefined;
|
|
417
663
|
}
|
|
418
664
|
}
|
|
665
|
+
async getProjectDetails({ isAppTemplate, planId, showDefaultConfigPrompt, user }) {
|
|
666
|
+
if (isAppTemplate) {
|
|
667
|
+
const organizations = await listOrganizations({
|
|
668
|
+
includeImplicitMemberships: 'true',
|
|
669
|
+
includeMembers: 'true'
|
|
670
|
+
});
|
|
671
|
+
const appOrganizationId = await this.promptUserForOrganization({
|
|
672
|
+
organizations,
|
|
673
|
+
user
|
|
674
|
+
});
|
|
675
|
+
return {
|
|
676
|
+
datasetName: '',
|
|
677
|
+
displayName: '',
|
|
678
|
+
isFirstProject: false,
|
|
679
|
+
organizationId: appOrganizationId,
|
|
680
|
+
projectId: ''
|
|
681
|
+
};
|
|
682
|
+
}
|
|
683
|
+
debug('Prompting user to select or create a project');
|
|
684
|
+
const project = await this.getOrCreateProject({
|
|
685
|
+
planId,
|
|
686
|
+
user
|
|
687
|
+
});
|
|
688
|
+
debug(`Project with name ${project.displayName} selected`);
|
|
689
|
+
// Now let's pick or create a dataset
|
|
690
|
+
debug('Prompting user to select or create a dataset');
|
|
691
|
+
const dataset = await this.getOrCreateDataset({
|
|
692
|
+
displayName: project.displayName,
|
|
693
|
+
projectId: project.projectId,
|
|
694
|
+
showDefaultConfigPrompt
|
|
695
|
+
});
|
|
696
|
+
debug(`Dataset with name ${dataset.datasetName} selected`);
|
|
697
|
+
// @todo
|
|
698
|
+
// trace.log({
|
|
699
|
+
// step: 'createOrSelectDataset',
|
|
700
|
+
// selectedOption: dataset.userAction,
|
|
701
|
+
// datasetName: dataset.datasetName,
|
|
702
|
+
// visibility: flags.visibility as 'private' | 'public',
|
|
703
|
+
// })
|
|
704
|
+
return {
|
|
705
|
+
datasetName: dataset.datasetName,
|
|
706
|
+
displayName: project.displayName,
|
|
707
|
+
isFirstProject: project.isFirstProject,
|
|
708
|
+
projectId: project.projectId
|
|
709
|
+
};
|
|
710
|
+
}
|
|
711
|
+
async promptForDefaultConfig() {
|
|
712
|
+
return confirm({
|
|
713
|
+
default: true,
|
|
714
|
+
message: 'Use the default dataset configuration?'
|
|
715
|
+
});
|
|
716
|
+
}
|
|
717
|
+
async promptForProjectCreation({ isUsersFirstProject, organizationId, organizations, planId, user }) {
|
|
718
|
+
const projectName = await input({
|
|
719
|
+
default: 'My Sanity Project',
|
|
720
|
+
message: 'Project name:',
|
|
721
|
+
validate (input) {
|
|
722
|
+
if (!input || input.trim() === '') {
|
|
723
|
+
return 'Project name cannot be empty';
|
|
724
|
+
}
|
|
725
|
+
if (input.length > 80) {
|
|
726
|
+
return 'Project name cannot be longer than 80 characters';
|
|
727
|
+
}
|
|
728
|
+
return true;
|
|
729
|
+
}
|
|
730
|
+
});
|
|
731
|
+
const organization = organizationId || await this.promptUserForOrganization({
|
|
732
|
+
organizations,
|
|
733
|
+
user
|
|
734
|
+
});
|
|
735
|
+
const newProject = await createProject({
|
|
736
|
+
displayName: projectName,
|
|
737
|
+
metadata: {
|
|
738
|
+
coupon: this.flags.coupon
|
|
739
|
+
},
|
|
740
|
+
organizationId: organization,
|
|
741
|
+
subscription: planId ? {
|
|
742
|
+
planId
|
|
743
|
+
} : undefined
|
|
744
|
+
});
|
|
745
|
+
return {
|
|
746
|
+
...newProject,
|
|
747
|
+
isFirstProject: isUsersFirstProject,
|
|
748
|
+
userAction: 'create'
|
|
749
|
+
};
|
|
750
|
+
}
|
|
419
751
|
async promptUserForNewOrganization(user) {
|
|
420
752
|
const name = await input({
|
|
421
753
|
default: user ? user.name : undefined,
|
|
@@ -472,7 +804,9 @@ export class InitCommand extends SanityCommand {
|
|
|
472
804
|
} catch (err) {
|
|
473
805
|
if (!isHttpError(err) || err.statusCode !== 404) {
|
|
474
806
|
const message = err instanceof Error ? err.message : `${err}`;
|
|
475
|
-
|
|
807
|
+
this.error(`Unable to validate coupon, please try again later:\n\n${message}`, {
|
|
808
|
+
exit: 1
|
|
809
|
+
});
|
|
476
810
|
}
|
|
477
811
|
const useDefaultPlan = this.isUnattended() || await confirm({
|
|
478
812
|
default: true,
|
|
@@ -490,7 +824,9 @@ export class InitCommand extends SanityCommand {
|
|
|
490
824
|
if (useDefaultPlan) {
|
|
491
825
|
this.log('Using default plan.');
|
|
492
826
|
} else {
|
|
493
|
-
|
|
827
|
+
this.error(`Coupon "${intendedCoupon}" does not exist`, {
|
|
828
|
+
exit: 1
|
|
829
|
+
});
|
|
494
830
|
}
|
|
495
831
|
}
|
|
496
832
|
}
|
|
@@ -501,8 +837,8 @@ export class InitCommand extends SanityCommand {
|
|
|
501
837
|
} catch (err) {
|
|
502
838
|
if (!isHttpError(err) || err.statusCode !== 404) {
|
|
503
839
|
const message = err instanceof Error ? err.message : `${err}`;
|
|
504
|
-
|
|
505
|
-
|
|
840
|
+
this.error(`Unable to validate plan, please try again later:\n\n${message}`, {
|
|
841
|
+
exit: 1
|
|
506
842
|
});
|
|
507
843
|
}
|
|
508
844
|
const useDefaultPlan = this.isUnattended() || await confirm({
|
|
@@ -521,7 +857,9 @@ export class InitCommand extends SanityCommand {
|
|
|
521
857
|
if (useDefaultPlan) {
|
|
522
858
|
this.log('Using default plan.');
|
|
523
859
|
} else {
|
|
524
|
-
|
|
860
|
+
this.error(`Plan id "${intendedPlan}" does not exist`, {
|
|
861
|
+
exit: 1
|
|
862
|
+
});
|
|
525
863
|
}
|
|
526
864
|
}
|
|
527
865
|
}
|