@sanity/cli 6.0.0-alpha.8 → 6.0.0
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 +728 -258
- package/bin/run.js +2 -0
- package/dist/SanityHelp.js +51 -23
- package/dist/SanityHelp.js.map +1 -1
- package/dist/actions/auth/authServer.js +28 -22
- package/dist/actions/auth/authServer.js.map +1 -1
- package/dist/actions/auth/login/getProvider.js +49 -38
- package/dist/actions/auth/login/getProvider.js.map +1 -1
- package/dist/actions/auth/login/getSSOProvider.js +25 -19
- package/dist/actions/auth/login/getSSOProvider.js.map +1 -1
- package/dist/actions/auth/login/login.js +24 -37
- package/dist/actions/auth/login/login.js.map +1 -1
- package/dist/actions/auth/types.js.map +1 -1
- package/dist/actions/backup/downloadAsset.js +9 -9
- package/dist/actions/backup/downloadAsset.js.map +1 -1
- package/dist/actions/backup/downloadDocument.js +8 -8
- package/dist/actions/backup/downloadDocument.js.map +1 -1
- package/dist/actions/build/buildApp.js +65 -28
- package/dist/actions/build/buildApp.js.map +1 -1
- package/dist/actions/build/buildStaticFiles.js +3 -2
- package/dist/actions/build/buildStaticFiles.js.map +1 -1
- package/dist/actions/build/buildStudio.js +82 -54
- package/dist/actions/build/buildStudio.js.map +1 -1
- package/dist/actions/build/buildVendorDependencies.js +18 -52
- package/dist/actions/build/buildVendorDependencies.js.map +1 -1
- package/dist/actions/build/checkRequiredDependencies.js +13 -8
- package/dist/actions/build/checkRequiredDependencies.js.map +1 -1
- package/dist/actions/build/checkStudioDependencyVersions.js +19 -17
- package/dist/actions/build/checkStudioDependencyVersions.js.map +1 -1
- package/dist/actions/build/createExternalFromImportMap.js +1 -1
- package/dist/actions/build/createExternalFromImportMap.js.map +1 -1
- package/dist/actions/build/determineBasePath.js +5 -2
- package/dist/actions/build/determineBasePath.js.map +1 -1
- package/dist/actions/build/getStudioEnvironmentVariables.js +1 -1
- package/dist/actions/build/getStudioEnvironmentVariables.js.map +1 -1
- package/dist/actions/build/getViteConfig.js +48 -5
- package/dist/actions/build/getViteConfig.js.map +1 -1
- package/dist/actions/build/handlePrereleaseVersions.js +44 -0
- package/dist/actions/build/handlePrereleaseVersions.js.map +1 -0
- package/dist/actions/build/renderDocument.js +6 -10
- package/dist/actions/build/renderDocument.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js +4 -4
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js +3 -3
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js +1 -0
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js +2 -2
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js +1 -1
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js.map +1 -1
- package/dist/actions/build/shouldAutoUpdate.js +5 -3
- package/dist/actions/build/shouldAutoUpdate.js.map +1 -1
- package/dist/actions/build/types.js.map +1 -1
- package/dist/actions/build/writeFavicons.js +3 -5
- package/dist/actions/build/writeFavicons.js.map +1 -1
- package/dist/actions/build/writeSanityRuntime.js +6 -5
- package/dist/actions/build/writeSanityRuntime.js.map +1 -1
- package/dist/actions/codemods/reactIconsV3.js +2 -2
- package/dist/actions/codemods/reactIconsV3.js.map +1 -1
- package/dist/actions/dataset/create.js +10 -6
- package/dist/actions/dataset/create.js.map +1 -1
- package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -1
- package/dist/actions/dataset/resolveDataset.js +26 -0
- package/dist/actions/dataset/resolveDataset.js.map +1 -0
- package/dist/actions/debug/formatters.js +22 -0
- package/dist/actions/debug/formatters.js.map +1 -0
- package/dist/actions/deploy/createStudioUserApplication.js +17 -4
- package/dist/actions/deploy/createStudioUserApplication.js.map +1 -1
- package/dist/actions/deploy/deployApp.js +52 -22
- package/dist/actions/deploy/deployApp.js.map +1 -1
- package/dist/actions/deploy/deployStudio.js +95 -46
- package/dist/actions/deploy/deployStudio.js.map +1 -1
- package/dist/actions/deploy/deployStudioSchemasAndManifests.js +55 -0
- package/dist/actions/deploy/deployStudioSchemasAndManifests.js.map +1 -0
- package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js +120 -0
- package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js.map +1 -0
- package/dist/actions/deploy/findUserApplicationForStudio.js +35 -12
- package/dist/actions/deploy/findUserApplicationForStudio.js.map +1 -1
- package/dist/actions/deploy/types.js +10 -1
- package/dist/actions/deploy/types.js.map +1 -1
- package/dist/actions/deploy/urlUtils.js +21 -0
- package/dist/actions/deploy/urlUtils.js.map +1 -0
- package/dist/actions/dev/getDashboardAppUrl.js +48 -0
- package/dist/actions/dev/getDashboardAppUrl.js.map +1 -0
- package/dist/actions/dev/getDevServerConfig.js +7 -3
- package/dist/actions/dev/getDevServerConfig.js.map +1 -1
- package/dist/actions/dev/startAppDevServer.js +7 -4
- package/dist/actions/dev/startAppDevServer.js.map +1 -1
- package/dist/actions/dev/startStudioDevServer.js +23 -19
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/doctor/checks/cliInstallation.js +56 -0
- package/dist/actions/doctor/checks/cliInstallation.js.map +1 -0
- package/dist/actions/doctor/checks/index.js +16 -0
- package/dist/actions/doctor/checks/index.js.map +1 -0
- package/dist/actions/doctor/runDoctorChecks.js +56 -0
- package/dist/actions/doctor/runDoctorChecks.js.map +1 -0
- package/dist/actions/doctor/types.js.map +1 -0
- package/dist/actions/documents/types.js.map +1 -1
- package/dist/actions/documents/validate.js +15 -17
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/{threads/validateDocuments.js → actions/documents/validateDocuments.worker.js} +37 -37
- package/dist/actions/documents/validateDocuments.worker.js.map +1 -0
- package/dist/actions/documents/validation/reporters/jsonReporter.js +1 -1
- package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -1
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js +1 -1
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js +9 -8
- package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js.map +1 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.js.map +1 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/tree.js +108 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/tree.js.map +1 -0
- package/dist/{threads/configClient.js → actions/exec/configClient.worker.js} +2 -2
- package/dist/actions/exec/configClient.worker.js.map +1 -0
- package/dist/actions/exec/execScript.js +29 -25
- package/dist/actions/exec/execScript.js.map +1 -1
- package/dist/{threads/registerBrowserEnv.js → actions/exec/registerBrowserEnv.worker.js} +1 -1
- package/dist/actions/exec/registerBrowserEnv.worker.js.map +1 -0
- package/dist/actions/graphql/SchemaError.js +15 -0
- package/dist/actions/graphql/SchemaError.js.map +1 -0
- package/dist/actions/graphql/__tests__/fixtures/many-self-refs.js +540 -0
- package/dist/actions/graphql/__tests__/fixtures/many-self-refs.js.map +1 -0
- package/dist/actions/graphql/__tests__/fixtures/test-studio.js +1143 -0
- package/dist/actions/graphql/__tests__/fixtures/test-studio.js.map +1 -0
- package/dist/actions/graphql/__tests__/fixtures/union-refs.js +591 -0
- package/dist/actions/graphql/__tests__/fixtures/union-refs.js.map +1 -0
- package/dist/actions/graphql/__tests__/helpers.js +23 -0
- package/dist/actions/graphql/__tests__/helpers.js.map +1 -0
- package/dist/actions/graphql/extractFromSanitySchema.js +659 -0
- package/dist/actions/graphql/extractFromSanitySchema.js.map +1 -0
- package/dist/actions/graphql/extractGraphQLAPIs.js +150 -0
- package/dist/actions/graphql/extractGraphQLAPIs.js.map +1 -0
- package/dist/actions/graphql/extractGraphQLAPIs.worker.js +12 -0
- package/dist/actions/graphql/extractGraphQLAPIs.worker.js.map +1 -0
- package/dist/actions/graphql/gen1/generateTypeFilters.js +226 -0
- package/dist/actions/graphql/gen1/generateTypeFilters.js.map +1 -0
- package/dist/actions/graphql/gen1/generateTypeQueries.js +86 -0
- package/dist/actions/graphql/gen1/generateTypeQueries.js.map +1 -0
- package/dist/actions/graphql/gen1/index.js +19 -0
- package/dist/actions/graphql/gen1/index.js.map +1 -0
- package/dist/actions/graphql/gen2/filters/booleanFilters.js +26 -0
- package/dist/actions/graphql/gen2/filters/booleanFilters.js.map +1 -0
- package/dist/actions/graphql/gen2/filters/dateFilters.js +46 -0
- package/dist/actions/graphql/gen2/filters/dateFilters.js.map +1 -0
- package/dist/actions/graphql/gen2/filters/dateTimeFilters.js +46 -0
- package/dist/actions/graphql/gen2/filters/dateTimeFilters.js.map +1 -0
- package/dist/actions/graphql/gen2/filters/documentFilters.js +21 -0
- package/dist/actions/graphql/gen2/filters/documentFilters.js.map +1 -0
- package/dist/actions/graphql/gen2/filters/floatFilters.js +46 -0
- package/dist/actions/graphql/gen2/filters/floatFilters.js.map +1 -0
- package/dist/actions/graphql/gen2/filters/idFilters.js +44 -0
- package/dist/actions/graphql/gen2/filters/idFilters.js.map +1 -0
- package/dist/actions/graphql/gen2/filters/integerFilters.js +46 -0
- package/dist/actions/graphql/gen2/filters/integerFilters.js.map +1 -0
- package/dist/actions/graphql/gen2/filters/stringFilters.js +49 -0
- package/dist/actions/graphql/gen2/filters/stringFilters.js.map +1 -0
- package/dist/actions/graphql/gen2/generateTypeFilters.js +85 -0
- package/dist/actions/graphql/gen2/generateTypeFilters.js.map +1 -0
- package/dist/actions/graphql/gen2/generateTypeQueries.js +107 -0
- package/dist/actions/graphql/gen2/generateTypeQueries.js.map +1 -0
- package/dist/actions/graphql/gen2/generateTypeSortings.js +70 -0
- package/dist/actions/graphql/gen2/generateTypeSortings.js.map +1 -0
- package/dist/actions/graphql/gen2/index.js +22 -0
- package/dist/actions/graphql/gen2/index.js.map +1 -0
- package/dist/actions/graphql/gen3/filters/documentFilters.js +21 -0
- package/dist/actions/graphql/gen3/filters/documentFilters.js.map +1 -0
- package/dist/actions/graphql/gen3/generateTypeFilters.js +101 -0
- package/dist/actions/graphql/gen3/generateTypeFilters.js.map +1 -0
- package/dist/actions/graphql/gen3/generateTypeQueries.js +103 -0
- package/dist/actions/graphql/gen3/generateTypeQueries.js.map +1 -0
- package/dist/actions/graphql/gen3/generateTypeSortings.js +70 -0
- package/dist/actions/graphql/gen3/generateTypeSortings.js.map +1 -0
- package/dist/actions/graphql/gen3/index.js +30 -0
- package/dist/actions/graphql/gen3/index.js.map +1 -0
- package/dist/actions/graphql/gen3/utils.js +12 -0
- package/dist/actions/graphql/gen3/utils.js.map +1 -0
- package/dist/actions/graphql/getGraphQLAPIs.js +15 -57
- package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.worker.js +75 -106
- package/dist/actions/graphql/getGraphQLAPIs.worker.js.map +1 -1
- package/dist/actions/graphql/graphqlDebug.js +4 -0
- package/dist/actions/graphql/graphqlDebug.js.map +1 -0
- package/dist/actions/graphql/helpUrls.js +3 -0
- package/dist/actions/graphql/helpUrls.js.map +1 -0
- package/dist/actions/graphql/helpers.js +24 -0
- package/dist/actions/graphql/helpers.js.map +1 -0
- package/dist/actions/graphql/resolveApiGeneration.js +43 -0
- package/dist/actions/graphql/resolveApiGeneration.js.map +1 -0
- package/dist/actions/graphql/resolveGraphQLApisFromWorkspaces.js +187 -0
- package/dist/actions/graphql/resolveGraphQLApisFromWorkspaces.js.map +1 -0
- package/dist/actions/graphql/types.js.map +1 -1
- package/dist/actions/init/bootstrapLocalTemplate.js +13 -10
- package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -1
- package/dist/actions/init/bootstrapRemoteTemplate.js +6 -5
- package/dist/actions/init/bootstrapRemoteTemplate.js.map +1 -1
- package/dist/actions/init/bootstrapTemplate.js.map +1 -1
- package/dist/actions/init/checkNextJsReactCompatibility.js +1 -1
- package/dist/actions/init/checkNextJsReactCompatibility.js.map +1 -1
- package/dist/actions/init/createAppCliConfig.js.map +1 -1
- package/dist/actions/init/createCliConfig.js.map +1 -1
- package/dist/actions/init/createPackageManifest.js +21 -9
- package/dist/actions/init/createPackageManifest.js.map +1 -1
- package/dist/actions/init/env/createOrAppendEnvVars.js +2 -2
- package/dist/actions/init/env/createOrAppendEnvVars.js.map +1 -1
- package/dist/actions/init/env/writeEnvVarsToFile.js +2 -2
- package/dist/actions/init/env/writeEnvVarsToFile.js.map +1 -1
- package/dist/actions/init/fetchPostInitPrompt.js +2 -2
- package/dist/actions/init/fetchPostInitPrompt.js.map +1 -1
- package/dist/actions/init/remoteTemplate.js +1 -2
- package/dist/actions/init/remoteTemplate.js.map +1 -1
- package/dist/actions/init/resolvePackageManager.js +2 -2
- package/dist/actions/init/resolvePackageManager.js.map +1 -1
- package/dist/actions/init/sdkAppDependencies.js +19 -0
- package/dist/actions/init/sdkAppDependencies.js.map +1 -0
- package/dist/actions/init/studioDependencies.js.map +1 -0
- package/dist/actions/init/templates/appQuickstart.js +1 -22
- package/dist/actions/init/templates/appQuickstart.js.map +1 -1
- package/dist/actions/init/templates/appSanityUi.js +3 -22
- package/dist/actions/init/templates/appSanityUi.js.map +1 -1
- package/dist/actions/init/types.js.map +1 -1
- package/dist/actions/manifest/SchemaIcon.js +6 -4
- package/dist/actions/manifest/SchemaIcon.js.map +1 -1
- package/dist/actions/manifest/blockTypeTransformer.js +67 -0
- package/dist/actions/manifest/blockTypeTransformer.js.map +1 -0
- package/dist/actions/manifest/debug.js +4 -0
- package/dist/actions/manifest/debug.js.map +1 -0
- package/dist/actions/manifest/extractAppManifest.js +39 -22
- package/dist/actions/manifest/extractAppManifest.js.map +1 -1
- package/dist/actions/manifest/extractManifest.js +27 -78
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/manifest/extractManifest.worker.js +30 -0
- package/dist/actions/manifest/extractManifest.worker.js.map +1 -0
- package/dist/actions/manifest/extractWorkspaceManifest.js +31 -372
- package/dist/actions/manifest/extractWorkspaceManifest.js.map +1 -1
- package/dist/actions/manifest/iconResolver.js +30 -0
- package/dist/actions/manifest/iconResolver.js.map +1 -0
- package/dist/actions/manifest/referenceTransformer.js +51 -0
- package/dist/actions/manifest/referenceTransformer.js.map +1 -0
- package/dist/actions/manifest/schemaTypeHelpers.js +2 -2
- package/dist/actions/manifest/schemaTypeHelpers.js.map +1 -1
- package/dist/actions/manifest/schemaTypeTransformer.js +168 -0
- package/dist/actions/manifest/schemaTypeTransformer.js.map +1 -0
- package/dist/actions/manifest/transformerUtils.js +40 -0
- package/dist/actions/manifest/transformerUtils.js.map +1 -0
- package/dist/actions/manifest/types.js +5 -0
- package/dist/actions/manifest/types.js.map +1 -1
- package/dist/actions/manifest/validationTransformer.js +84 -0
- package/dist/actions/manifest/validationTransformer.js.map +1 -0
- package/dist/actions/manifest/writeManifestFile.js +30 -0
- package/dist/actions/manifest/writeManifestFile.js.map +1 -0
- package/dist/actions/manifest/writeWorkspaceFiles.js +30 -0
- package/dist/actions/manifest/writeWorkspaceFiles.js.map +1 -0
- package/dist/actions/mcp/detectAvailableEditors.js +75 -58
- package/dist/actions/mcp/detectAvailableEditors.js.map +1 -1
- package/dist/actions/mcp/editorConfigs.js +205 -0
- package/dist/actions/mcp/editorConfigs.js.map +1 -0
- package/dist/actions/mcp/promptForMCPSetup.js +24 -0
- package/dist/actions/mcp/promptForMCPSetup.js.map +1 -0
- package/dist/actions/mcp/setupMCP.js +88 -0
- package/dist/actions/mcp/setupMCP.js.map +1 -0
- package/dist/actions/mcp/types.js +3 -0
- package/dist/actions/mcp/types.js.map +1 -0
- package/dist/actions/mcp/writeMCPConfig.js +35 -28
- package/dist/actions/mcp/writeMCPConfig.js.map +1 -1
- package/dist/actions/media/buildNdjsonIndex.js +32 -0
- package/dist/actions/media/buildNdjsonIndex.js.map +1 -0
- package/dist/actions/media/importAspects.js +2 -11
- package/dist/actions/media/importAspects.js.map +1 -1
- package/dist/actions/media/importMedia.js +24 -20
- package/dist/actions/media/importMedia.js.map +1 -1
- package/dist/actions/organizations/findOrganizationByUserName.js +5 -0
- package/dist/actions/organizations/findOrganizationByUserName.js.map +1 -0
- package/dist/actions/organizations/getOrganization.js +68 -0
- package/dist/actions/organizations/getOrganization.js.map +1 -0
- package/dist/actions/organizations/getOrganizationChoices.js +27 -19
- package/dist/actions/organizations/getOrganizationChoices.js.map +1 -1
- package/dist/actions/organizations/hasProjectAttachGrant.js +1 -1
- package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -1
- package/dist/actions/organizations/types.js +3 -0
- package/dist/actions/organizations/types.js.map +1 -0
- package/dist/actions/organizations/validateOrganizationName.js +10 -0
- package/dist/actions/organizations/validateOrganizationName.js.map +1 -0
- package/dist/actions/preview/previewAction.js +2 -1
- package/dist/actions/preview/previewAction.js.map +1 -1
- package/dist/actions/projects/getManageUrl.js +6 -0
- package/dist/actions/projects/getManageUrl.js.map +1 -0
- package/dist/actions/projects/validateProjectName.js +11 -0
- package/dist/actions/projects/validateProjectName.js.map +1 -0
- package/dist/actions/schema/deleteSchemaAction.js +16 -32
- package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
- package/dist/actions/schema/deploySchemas.js +22 -91
- package/dist/actions/schema/deploySchemas.js.map +1 -1
- package/dist/actions/schema/extractSanitySchema.worker.js +33 -0
- package/dist/actions/schema/extractSanitySchema.worker.js.map +1 -0
- package/dist/actions/schema/extractSanityWorkspace.worker.js +24 -0
- package/dist/actions/schema/extractSanityWorkspace.worker.js.map +1 -0
- package/dist/actions/schema/extractSchema.js +45 -0
- package/dist/actions/schema/extractSchema.js.map +1 -0
- package/dist/actions/schema/extractSchemaWatcher.js +128 -0
- package/dist/actions/schema/extractSchemaWatcher.js.map +1 -0
- package/dist/actions/schema/formatSchemaValidation.js +22 -6
- package/dist/actions/schema/formatSchemaValidation.js.map +1 -1
- package/dist/actions/schema/getExtractOptions.js +16 -0
- package/dist/actions/schema/getExtractOptions.js.map +1 -0
- package/dist/actions/schema/listSchemas.js +54 -57
- package/dist/actions/schema/listSchemas.js.map +1 -1
- package/dist/actions/schema/matchSchemaPattern.js +22 -0
- package/dist/actions/schema/matchSchemaPattern.js.map +1 -0
- package/dist/actions/schema/metafile.js.map +1 -1
- package/dist/actions/schema/runSchemaExtraction.js +39 -0
- package/dist/actions/schema/runSchemaExtraction.js.map +1 -0
- package/dist/actions/schema/types.js +17 -0
- package/dist/actions/schema/types.js.map +1 -0
- package/dist/actions/schema/uniqueWorkspaces.worker.js +24 -0
- package/dist/actions/schema/uniqueWorkspaces.worker.js.map +1 -0
- package/dist/actions/schema/updateWorkspaceSchema.js +63 -0
- package/dist/actions/schema/updateWorkspaceSchema.js.map +1 -0
- package/dist/actions/schema/uploadSchemaToLexicon.js +87 -0
- package/dist/actions/schema/uploadSchemaToLexicon.js.map +1 -0
- package/dist/actions/schema/utils/SchemaExtractionError.js +10 -0
- package/dist/actions/schema/utils/SchemaExtractionError.js.map +1 -0
- package/dist/actions/schema/utils/debug.js +1 -0
- package/dist/actions/schema/utils/debug.js.map +1 -1
- package/dist/actions/schema/utils/extractValidationFromSchemaError.js +12 -0
- package/dist/actions/schema/utils/extractValidationFromSchemaError.js.map +1 -0
- package/dist/actions/schema/utils/schemaStoreValidation.js +1 -15
- package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -1
- package/dist/actions/schema/validateAction.js +7 -17
- package/dist/actions/schema/validateAction.js.map +1 -1
- package/dist/{threads/validateSchema.js → actions/schema/validateSchema.worker.js} +28 -26
- package/dist/actions/schema/validateSchema.worker.js.map +1 -0
- package/dist/actions/schema/watchExtractSchema.js +72 -0
- package/dist/actions/schema/watchExtractSchema.js.map +1 -0
- package/dist/actions/telemetry/getLearnMoreMessage.js.map +1 -1
- package/dist/actions/telemetry/getStatusDisplay.js.map +1 -1
- package/dist/actions/telemetry/getStatusMessage.js.map +1 -1
- package/dist/actions/telemetry/isTrueish.js +10 -0
- package/dist/actions/telemetry/isTrueish.js.map +1 -0
- package/dist/actions/telemetry/resolveConsent.js +3 -3
- package/dist/actions/telemetry/resolveConsent.js.map +1 -1
- package/dist/actions/telemetry/setConsent.js +3 -2
- package/dist/actions/telemetry/setConsent.js.map +1 -1
- package/dist/actions/telemetry/telemetryDisclosure.js +3 -3
- package/dist/actions/telemetry/telemetryDisclosure.js.map +1 -1
- package/dist/actions/users/getMembersForProject.js.map +1 -1
- package/dist/actions/users/getPendingInvitations.js +1 -1
- package/dist/actions/users/getPendingInvitations.js.map +1 -1
- package/dist/actions/users/types.js.map +1 -1
- package/dist/actions/versions/filterSanityModules.js.map +1 -1
- package/dist/actions/versions/findSanityModulesVersions.js +2 -3
- package/dist/actions/versions/findSanityModulesVersions.js.map +1 -1
- package/dist/actions/versions/getFormatters.js +3 -3
- package/dist/actions/versions/getFormatters.js.map +1 -1
- package/dist/actions/versions/tryFindLatestVersion.js +1 -1
- package/dist/actions/versions/tryFindLatestVersion.js.map +1 -1
- package/dist/commands/backup/disable.js +26 -10
- package/dist/commands/backup/disable.js.map +1 -1
- package/dist/commands/backup/download.js +26 -17
- package/dist/commands/backup/download.js.map +1 -1
- package/dist/commands/backup/enable.js +25 -10
- package/dist/commands/backup/enable.js.map +1 -1
- package/dist/commands/backup/list.js +20 -8
- package/dist/commands/backup/list.js.map +1 -1
- package/dist/commands/build.js +2 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/cors/add.js +33 -16
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/cors/delete.js +22 -7
- package/dist/commands/cors/delete.js.map +1 -1
- package/dist/commands/cors/list.js +22 -7
- package/dist/commands/cors/list.js.map +1 -1
- package/dist/commands/dataset/alias/create.js +26 -7
- package/dist/commands/dataset/alias/create.js.map +1 -1
- package/dist/commands/dataset/alias/delete.js +20 -7
- package/dist/commands/dataset/alias/delete.js.map +1 -1
- package/dist/commands/dataset/alias/link.js +20 -7
- package/dist/commands/dataset/alias/link.js.map +1 -1
- package/dist/commands/dataset/alias/unlink.js +20 -7
- package/dist/commands/dataset/alias/unlink.js.map +1 -1
- package/dist/commands/dataset/copy.js +51 -35
- package/dist/commands/dataset/copy.js.map +1 -1
- package/dist/commands/dataset/create.js +46 -14
- package/dist/commands/dataset/create.js.map +1 -1
- package/dist/commands/dataset/delete.js +28 -9
- package/dist/commands/dataset/delete.js.map +1 -1
- package/dist/commands/dataset/embeddings/disable.js +77 -0
- package/dist/commands/dataset/embeddings/disable.js.map +1 -0
- package/dist/commands/dataset/embeddings/enable.js +141 -0
- package/dist/commands/dataset/embeddings/enable.js.map +1 -0
- package/dist/commands/dataset/embeddings/status.js +72 -0
- package/dist/commands/dataset/embeddings/status.js.map +1 -0
- package/dist/commands/dataset/export.js +26 -18
- package/dist/commands/dataset/export.js.map +1 -1
- package/dist/commands/dataset/import.js +306 -1
- package/dist/commands/dataset/import.js.map +1 -1
- package/dist/commands/dataset/list.js +22 -7
- package/dist/commands/dataset/list.js.map +1 -1
- package/dist/commands/dataset/visibility/get.js +18 -7
- package/dist/commands/dataset/visibility/get.js.map +1 -1
- package/dist/commands/dataset/visibility/set.js +22 -7
- package/dist/commands/dataset/visibility/set.js.map +1 -1
- package/dist/commands/debug.js +9 -7
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/deploy.js +22 -11
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.js +7 -6
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs/search.js +3 -2
- package/dist/commands/docs/search.js.map +1 -1
- package/dist/commands/doctor.js +125 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/documents/create.js +19 -12
- package/dist/commands/documents/create.js.map +1 -1
- package/dist/commands/documents/delete.js +19 -12
- package/dist/commands/documents/delete.js.map +1 -1
- package/dist/commands/documents/get.js +17 -12
- package/dist/commands/documents/get.js.map +1 -1
- package/dist/commands/documents/query.js +26 -18
- package/dist/commands/documents/query.js.map +1 -1
- package/dist/commands/documents/validate.js +74 -48
- package/dist/commands/documents/validate.js.map +1 -1
- package/dist/commands/graphql/deploy.js +457 -0
- package/dist/commands/graphql/deploy.js.map +1 -0
- package/dist/commands/graphql/list.js +21 -13
- package/dist/commands/graphql/list.js.map +1 -1
- package/dist/commands/graphql/undeploy.js +37 -19
- package/dist/commands/graphql/undeploy.js.map +1 -1
- package/dist/commands/hook/attempt.js +22 -7
- package/dist/commands/hook/attempt.js.map +1 -1
- package/dist/commands/hook/create.js +23 -8
- package/dist/commands/hook/create.js.map +1 -1
- package/dist/commands/hook/delete.js +22 -7
- package/dist/commands/hook/delete.js.map +1 -1
- package/dist/commands/hook/list.js +22 -7
- package/dist/commands/hook/list.js.map +1 -1
- package/dist/commands/hook/logs.js +25 -12
- package/dist/commands/hook/logs.js.map +1 -1
- package/dist/commands/init.js +164 -143
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +19 -6
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +8 -6
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/manage.js +2 -2
- package/dist/commands/manage.js.map +1 -1
- package/dist/commands/manifest/extract.js +14 -10
- package/dist/commands/manifest/extract.js.map +1 -1
- package/dist/commands/mcp/configure.js +14 -75
- package/dist/commands/mcp/configure.js.map +1 -1
- package/dist/commands/media/create-aspect.js +11 -10
- package/dist/commands/media/create-aspect.js.map +1 -1
- package/dist/commands/media/delete-aspect.js +14 -11
- package/dist/commands/media/delete-aspect.js.map +1 -1
- package/dist/commands/media/deploy-aspect.js +31 -17
- package/dist/commands/media/deploy-aspect.js.map +1 -1
- package/dist/commands/media/export.js +10 -9
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/media/import.js +14 -12
- package/dist/commands/media/import.js.map +1 -1
- package/dist/commands/preview.js +12 -28
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/projects/create.js +181 -0
- package/dist/commands/projects/create.js.map +1 -0
- package/dist/commands/projects/list.js +4 -3
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schema/delete.js +33 -34
- package/dist/commands/schema/delete.js.map +1 -1
- package/dist/commands/schema/deploy.js +19 -30
- package/dist/commands/schema/deploy.js.map +1 -1
- package/dist/commands/schema/extract.js +34 -11
- package/dist/commands/schema/extract.js.map +1 -1
- package/dist/commands/schema/list.js +10 -31
- package/dist/commands/schema/list.js.map +1 -1
- package/dist/commands/schema/validate.js +10 -2
- package/dist/commands/schema/validate.js.map +1 -1
- package/dist/commands/tokens/add.js +24 -7
- package/dist/commands/tokens/add.js.map +1 -1
- package/dist/commands/tokens/delete.js +20 -7
- package/dist/commands/tokens/delete.js.map +1 -1
- package/dist/commands/tokens/list.js +20 -7
- package/dist/commands/tokens/list.js.map +1 -1
- package/dist/commands/undeploy.js +9 -8
- package/dist/commands/undeploy.js.map +1 -1
- package/dist/commands/users/invite.js +24 -7
- package/dist/commands/users/invite.js.map +1 -1
- package/dist/commands/users/list.js +77 -34
- package/dist/commands/users/list.js.map +1 -1
- package/dist/commands/versions.js +3 -3
- package/dist/commands/versions.js.map +1 -1
- package/dist/config/createCliConfig.js +2 -2
- package/dist/config/createCliConfig.js.map +1 -1
- package/dist/exports/_internal.d.ts +132 -0
- package/dist/exports/_internal.js +4 -0
- package/dist/exports/_internal.js.map +1 -0
- package/dist/exports/index.d.ts +113 -0
- package/dist/exports/index.js +6 -0
- package/dist/exports/index.js.map +1 -0
- package/dist/hooks/init/checkForUpdates.js +14 -0
- package/dist/hooks/init/checkForUpdates.js.map +1 -0
- package/dist/hooks/prerun/flushTelemetry.worker.js +1 -1
- package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -1
- package/dist/hooks/prerun/injectEnvVariables.js +39 -0
- package/dist/hooks/prerun/injectEnvVariables.js.map +1 -0
- package/dist/hooks/prerun/setupTelemetry.js +14 -7
- package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
- package/dist/hooks/prerun/warnings.js +6 -0
- package/dist/hooks/prerun/warnings.js.map +1 -0
- package/dist/prompts/promptForDefaultConfig.js +12 -0
- package/dist/prompts/promptForDefaultConfig.js.map +1 -0
- package/dist/prompts/promptForOrganizationName.js +11 -0
- package/dist/prompts/promptForOrganizationName.js.map +1 -0
- package/dist/prompts/promptForProject.js +64 -0
- package/dist/prompts/promptForProject.js.map +1 -0
- package/dist/prompts/promptForProjectName.js +11 -0
- package/dist/prompts/promptForProjectName.js.map +1 -0
- package/dist/{actions/auth/login/promptProviders.js → prompts/promptForProviders.js} +3 -3
- package/dist/prompts/promptForProviders.js.map +1 -0
- package/dist/prompts/selectMediaLibrary.js +1 -1
- package/dist/prompts/selectMediaLibrary.js.map +1 -1
- package/dist/server/devServer.js +4 -2
- package/dist/server/devServer.js.map +1 -1
- package/dist/server/previewServer.js +17 -11
- package/dist/server/previewServer.js.map +1 -1
- package/dist/server/vite/plugin-schema-extraction.js +201 -0
- package/dist/server/vite/plugin-schema-extraction.js.map +1 -0
- package/dist/server/vite/plugin-typegen.js +217 -0
- package/dist/server/vite/plugin-typegen.js.map +1 -0
- package/dist/services/auth.js +42 -3
- package/dist/services/auth.js.map +1 -1
- package/dist/services/datasets.js +7 -5
- package/dist/services/datasets.js.map +1 -1
- package/dist/services/docs.js +2 -2
- package/dist/services/docs.js.map +1 -1
- package/dist/services/documents.js +56 -0
- package/dist/services/documents.js.map +1 -0
- package/dist/services/embeddings.js +25 -0
- package/dist/services/embeddings.js.map +1 -0
- package/dist/services/getUrlHeaders.js +25 -0
- package/dist/services/getUrlHeaders.js.map +1 -0
- package/dist/services/grants.js +13 -0
- package/dist/services/grants.js.map +1 -0
- package/dist/services/graphql.js +64 -0
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/mcp.js.map +1 -1
- package/dist/services/organizations.js +1 -1
- package/dist/services/organizations.js.map +1 -1
- package/dist/services/projects.js +4 -2
- package/dist/services/projects.js.map +1 -1
- package/dist/services/schemas.js +1 -1
- package/dist/services/schemas.js.map +1 -1
- package/dist/services/telemetry.js +63 -2
- package/dist/services/telemetry.js.map +1 -1
- package/dist/services/userApplications.js +21 -6
- package/dist/services/userApplications.js.map +1 -1
- package/dist/telemetry/build.telemetry.js +13 -0
- package/dist/telemetry/build.telemetry.js.map +1 -0
- package/dist/telemetry/extractSchema.telemetry.js +18 -0
- package/dist/telemetry/extractSchema.telemetry.js.map +1 -0
- package/dist/telemetry/init.telemetry.js +8 -0
- package/dist/telemetry/init.telemetry.js.map +1 -0
- package/dist/telemetry/login.telemetry.js +8 -0
- package/dist/telemetry/login.telemetry.js.map +1 -0
- package/dist/telemetry/mcp.telemetry.js +8 -0
- package/dist/telemetry/mcp.telemetry.js.map +1 -0
- package/dist/types/grants.js +3 -0
- package/dist/types/grants.js.map +1 -0
- package/dist/types.js +6 -1
- package/dist/types.js.map +1 -1
- package/dist/util/appId.js +5 -5
- package/dist/util/appId.js.map +1 -1
- package/dist/util/checkProjectPermissions.js +21 -0
- package/dist/util/checkProjectPermissions.js.map +1 -0
- package/dist/util/cliClient.js +13 -10
- package/dist/util/cliClient.js.map +1 -1
- package/dist/util/compareDependencyVersions.js +74 -38
- package/dist/util/compareDependencyVersions.js.map +1 -1
- package/dist/util/createExpiringConfig.js +64 -0
- package/dist/util/createExpiringConfig.js.map +1 -0
- package/dist/util/detectFramework.js +135 -0
- package/dist/util/detectFramework.js.map +1 -0
- package/dist/util/errorMessages.js +0 -1
- package/dist/util/errorMessages.js.map +1 -1
- package/dist/util/extractDocumentsFromNdjsonOrTarball.js +1 -2
- package/dist/util/extractDocumentsFromNdjsonOrTarball.js.map +1 -1
- package/dist/util/formatSize.js +2 -2
- package/dist/util/formatSize.js.map +1 -1
- package/dist/util/getCliVersion.js +1 -1
- package/dist/util/getCliVersion.js.map +1 -1
- package/dist/util/getLocalPackageVersion.js +31 -23
- package/dist/util/getLocalPackageVersion.js.map +1 -1
- package/dist/util/getProjectDefaults.js.map +1 -1
- package/dist/util/getSanityEnv.js +3 -0
- package/dist/util/getSanityEnv.js.map +1 -0
- package/dist/util/getSharedServerConfig.js +1 -0
- package/dist/util/getSharedServerConfig.js.map +1 -1
- package/dist/util/getWorkspace.js +1 -1
- package/dist/util/getWorkspace.js.map +1 -1
- package/dist/util/isSchemaError.js +11 -0
- package/dist/util/isSchemaError.js.map +1 -0
- package/dist/util/isTar.js +8 -0
- package/dist/util/isTar.js.map +1 -0
- package/dist/util/loadEnv.js +1 -6
- package/dist/util/loadEnv.js.map +1 -1
- package/dist/util/packageManager/getPeerDependencies.js +44 -0
- package/dist/util/packageManager/getPeerDependencies.js.map +1 -0
- package/dist/util/packageManager/installationInfo/analyzeIssues.js +225 -0
- package/dist/util/packageManager/installationInfo/analyzeIssues.js.map +1 -0
- package/dist/util/packageManager/installationInfo/commands.js +73 -0
- package/dist/util/packageManager/installationInfo/commands.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectCliInstallation.js +66 -0
- package/dist/util/packageManager/installationInfo/detectCliInstallation.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectGlobals.js +295 -0
- package/dist/util/packageManager/installationInfo/detectGlobals.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectPackages.js +190 -0
- package/dist/util/packageManager/installationInfo/detectPackages.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectWorkspace.js +192 -0
- package/dist/util/packageManager/installationInfo/detectWorkspace.js.map +1 -0
- package/dist/util/packageManager/installationInfo/index.js +4 -0
- package/dist/util/packageManager/installationInfo/index.js.map +1 -0
- package/dist/util/packageManager/installationInfo/readJsonFile.js +14 -0
- package/dist/util/packageManager/installationInfo/readJsonFile.js.map +1 -0
- package/dist/util/packageManager/installationInfo/resolveVersionRange.js +42 -0
- package/dist/util/packageManager/installationInfo/resolveVersionRange.js.map +1 -0
- package/dist/util/packageManager/installationInfo/types.js +3 -0
- package/dist/util/packageManager/installationInfo/types.js.map +1 -0
- package/dist/util/packageManager/packageManagerChoice.js +1 -20
- package/dist/util/packageManager/packageManagerChoice.js.map +1 -1
- package/dist/util/packageManager/upgradePackages.js +4 -1
- package/dist/util/packageManager/upgradePackages.js.map +1 -1
- package/dist/util/promiseRaceWithTimeout.js +28 -0
- package/dist/util/promiseRaceWithTimeout.js.map +1 -0
- package/dist/util/readdirRecursive.js.map +1 -1
- package/dist/util/resolveLatestVersions.js +2 -2
- package/dist/util/resolveLatestVersions.js.map +1 -1
- package/dist/util/sharedFlags.js +54 -0
- package/dist/util/sharedFlags.js.map +1 -0
- package/dist/{telemetry/store → util/telemetry}/cleanupOldTelemetryFiles.js +1 -1
- package/dist/util/telemetry/cleanupOldTelemetryFiles.js.map +1 -0
- package/dist/{telemetry/store → util/telemetry}/createTelemetryStore.js +4 -4
- package/dist/util/telemetry/createTelemetryStore.js.map +1 -0
- package/dist/util/telemetry/createTraceId.js.map +1 -0
- package/dist/{telemetry/store → util/telemetry}/findTelemetryFiles.js +4 -3
- package/dist/util/telemetry/findTelemetryFiles.js.map +1 -0
- package/dist/{telemetry/store → util/telemetry}/flushTelemetryFiles.js +29 -18
- package/dist/util/telemetry/flushTelemetryFiles.js.map +1 -0
- package/dist/{telemetry/store → util/telemetry}/generateTelemetryFilePath.js +2 -2
- package/dist/util/telemetry/generateTelemetryFilePath.js.map +1 -0
- package/dist/{telemetry/store → util/telemetry}/logger.js +7 -2
- package/dist/util/telemetry/logger.js.map +1 -0
- package/dist/util/telemetry/readNDJSON.js +28 -0
- package/dist/util/telemetry/readNDJSON.js.map +1 -0
- package/dist/util/telemetry/telemetryStoreDebug.js +7 -0
- package/dist/util/telemetry/telemetryStoreDebug.js.map +1 -0
- package/dist/{telemetry/store → util/telemetry}/trace.js +2 -2
- package/dist/util/telemetry/trace.js.map +1 -0
- package/dist/util/toForwardSlashes.js +8 -0
- package/dist/util/toForwardSlashes.js.map +1 -0
- package/dist/util/update/fetchLatestVersion.js +21 -0
- package/dist/util/update/fetchLatestVersion.js.map +1 -0
- package/dist/util/update/getUpdateCommand.js +20 -0
- package/dist/util/update/getUpdateCommand.js.map +1 -0
- package/dist/util/update/isInstalledUsingYarn.js +17 -0
- package/dist/util/update/isInstalledUsingYarn.js.map +1 -0
- package/dist/util/update/showNotificationUpdate.js +31 -0
- package/dist/util/update/showNotificationUpdate.js.map +1 -0
- package/dist/util/update/updateChecker.js +60 -0
- package/dist/util/update/updateChecker.js.map +1 -0
- package/dist/util/update/updateCheckerDebug.js +4 -0
- package/dist/util/update/updateCheckerDebug.js.map +1 -0
- package/dist/util/warnAboutMissingAppId.js +6 -2
- package/dist/util/warnAboutMissingAppId.js.map +1 -1
- package/dist/util/warnOnNonProductionEnvironment.js +18 -0
- package/dist/util/warnOnNonProductionEnvironment.js.map +1 -0
- package/oclif.config.js +7 -1
- package/oclif.manifest.json +1129 -146
- package/package.json +83 -78
- package/static/favicons/apple-touch-icon.png +0 -0
- package/static/favicons/favicon-192.png +0 -0
- package/static/favicons/favicon-512.png +0 -0
- package/static/favicons/favicon-96.png +0 -0
- package/static/favicons/favicon.ico +0 -0
- package/static/favicons/favicon.svg +12 -0
- package/dist/SanityHelp.d.ts +0 -4
- package/dist/actions/auth/authServer.d.ts +0 -33
- package/dist/actions/auth/getProviderName.d.ts +0 -8
- package/dist/actions/auth/login/getProvider.d.ts +0 -15
- package/dist/actions/auth/login/getSSOProvider.d.ts +0 -13
- package/dist/actions/auth/login/login.d.ts +0 -20
- package/dist/actions/auth/login/promptProviders.d.ts +0 -10
- package/dist/actions/auth/login/promptProviders.js.map +0 -1
- package/dist/actions/auth/login/samlProviderToLoginProvider.d.ts +0 -9
- package/dist/actions/auth/types.d.ts +0 -26
- package/dist/actions/backup/archiveDir.d.ts +0 -10
- package/dist/actions/backup/assertDatasetExist.d.ts +0 -8
- package/dist/actions/backup/backupDownloadDebug.d.ts +0 -1
- package/dist/actions/backup/cleanupTmpDir.d.ts +0 -6
- package/dist/actions/backup/constants.d.ts +0 -1
- package/dist/actions/backup/downloadAsset.d.ts +0 -9
- package/dist/actions/backup/downloadDocument.d.ts +0 -7
- package/dist/actions/backup/fetchNextBackupPage.d.ts +0 -23
- package/dist/actions/backup/progressSpinner.d.ts +0 -14
- package/dist/actions/build/buildApp.d.ts +0 -7
- package/dist/actions/build/buildDebug.d.ts +0 -1
- package/dist/actions/build/buildStaticFiles.d.ts +0 -35
- package/dist/actions/build/buildStudio.d.ts +0 -7
- package/dist/actions/build/buildVendorDependencies.d.ts +0 -11
- package/dist/actions/build/checkRequiredDependencies.d.ts +0 -22
- package/dist/actions/build/checkStudioDependencyVersions.d.ts +0 -2
- package/dist/actions/build/createExternalFromImportMap.d.ts +0 -11
- package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.d.ts +0 -6
- package/dist/actions/build/decorateIndexWithBridgeScript.d.ts +0 -8
- package/dist/actions/build/determineBasePath.d.ts +0 -7
- package/dist/actions/build/generateWebManifest.d.ts +0 -15
- package/dist/actions/build/getAppEnvVars.d.ts +0 -6
- package/dist/actions/build/getAutoUpdatesImportMap.d.ts +0 -21
- package/dist/actions/build/getEntryModule.d.ts +0 -7
- package/dist/actions/build/getPossibleDocumentComponentLocations.d.ts +0 -4
- package/dist/actions/build/getStudioEnvVars.d.ts +0 -6
- package/dist/actions/build/getStudioEnvironmentVariables.d.ts +0 -52
- package/dist/actions/build/getViteConfig.d.ts +0 -66
- package/dist/actions/build/normalizeBasePath.d.ts +0 -6
- package/dist/actions/build/renderDocument.d.ts +0 -15
- package/dist/actions/build/renderDocument.worker.d.ts +0 -1
- package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.d.ts +0 -6
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.d.ts +0 -19
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.d.ts +0 -13
- package/dist/actions/build/renderDocumentWorker/components/Favicons.d.ts +0 -2
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.d.ts +0 -3
- package/dist/actions/build/renderDocumentWorker/components/NoJavascript.d.ts +0 -3
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.d.ts +0 -5
- package/dist/actions/build/renderDocumentWorker/getDocumentHtml.d.ts +0 -8
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.d.ts +0 -21
- package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.d.ts +0 -8
- package/dist/actions/build/renderDocumentWorker/types.d.ts +0 -8
- package/dist/actions/build/shouldAutoUpdate.d.ts +0 -16
- package/dist/actions/build/types.d.ts +0 -13
- package/dist/actions/build/writeFavicons.d.ts +0 -1
- package/dist/actions/build/writeSanityRuntime.d.ts +0 -19
- package/dist/actions/build/writeWebManifest.d.ts +0 -4
- package/dist/actions/codemods/deskRename.d.ts +0 -2
- package/dist/actions/codemods/index.d.ts +0 -5
- package/dist/actions/codemods/partsTypeDirective.d.ts +0 -2
- package/dist/actions/codemods/reactIconsV3.d.ts +0 -2
- package/dist/actions/codemods/types.d.ts +0 -8
- package/dist/actions/cors/filterAndValidateOrigin.d.ts +0 -7
- package/dist/actions/dataset/create.d.ts +0 -49
- package/dist/actions/dataset/determineDatasetAclMode.d.ts +0 -37
- package/dist/actions/dataset/processAliasName.d.ts +0 -9
- package/dist/actions/dataset/validateDatasetAliasName.d.ts +0 -1
- package/dist/actions/dataset/validateDatasetName.d.ts +0 -13
- package/dist/actions/debug/gatherDebugInfo.d.ts +0 -2
- package/dist/actions/debug/getGlobalConfigLocation.d.ts +0 -1
- package/dist/actions/debug/types.d.ts +0 -30
- package/dist/actions/deploy/checkDir.d.ts +0 -8
- package/dist/actions/deploy/createStudioUserApplication.d.ts +0 -2
- package/dist/actions/deploy/createUserApplicationForApp.d.ts +0 -2
- package/dist/actions/deploy/deployApp.d.ts +0 -7
- package/dist/actions/deploy/deployDebug.d.ts +0 -1
- package/dist/actions/deploy/deployStudio.d.ts +0 -2
- package/dist/actions/deploy/findUserApplicationForApp.d.ts +0 -15
- package/dist/actions/deploy/findUserApplicationForStudio.d.ts +0 -13
- package/dist/actions/deploy/types.d.ts +0 -11
- package/dist/actions/dev/devAction.d.ts +0 -4
- package/dist/actions/dev/devDebug.d.ts +0 -1
- package/dist/actions/dev/getCoreAppUrl.d.ts +0 -5
- package/dist/actions/dev/getCoreAppUrl.js +0 -10
- package/dist/actions/dev/getCoreAppUrl.js.map +0 -1
- package/dist/actions/dev/getDevServerConfig.d.ts +0 -9
- package/dist/actions/dev/startAppDevServer.d.ts +0 -4
- package/dist/actions/dev/startStudioDevServer.d.ts +0 -4
- package/dist/actions/dev/types.d.ts +0 -10
- package/dist/actions/docs/normalizeDocsPath.d.ts +0 -8
- package/dist/actions/documents/constants.d.ts +0 -1
- package/dist/actions/documents/editor.d.ts +0 -11
- package/dist/actions/documents/types.d.ts +0 -2
- package/dist/actions/documents/validate.d.ts +0 -26
- package/dist/actions/documents/validation/reporters/index.d.ts +0 -5
- package/dist/actions/documents/validation/reporters/jsonReporter.d.ts +0 -2
- package/dist/actions/documents/validation/reporters/ndjsonReporter.d.ts +0 -2
- package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.d.ts +0 -10
- package/dist/actions/documents/validation/reporters/prettyReporter/index.d.ts +0 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.d.ts +0 -5
- package/dist/actions/documents/validation/reporters/prettyReporter/util.d.ts +0 -53
- package/dist/actions/exec/execScript.d.ts +0 -11
- package/dist/actions/graphql/getGraphQLAPIs.d.ts +0 -2
- package/dist/actions/graphql/getGraphQLAPIs.worker.d.ts +0 -1
- package/dist/actions/graphql/types.d.ts +0 -68
- package/dist/actions/hook/constants.d.ts +0 -1
- package/dist/actions/hook/formatFailure.d.ts +0 -4
- package/dist/actions/hook/types.d.ts +0 -78
- package/dist/actions/init/bootstrapLocalTemplate.d.ts +0 -13
- package/dist/actions/init/bootstrapRemoteTemplate.d.ts +0 -12
- package/dist/actions/init/bootstrapTemplate.d.ts +0 -18
- package/dist/actions/init/checkNextJsReactCompatibility.d.ts +0 -9
- package/dist/actions/init/constants.d.ts +0 -1
- package/dist/actions/init/countNestedFolders.d.ts +0 -1
- package/dist/actions/init/createAppCliConfig.d.ts +0 -5
- package/dist/actions/init/createCliConfig.d.ts +0 -6
- package/dist/actions/init/createPackageManifest.d.ts +0 -6
- package/dist/actions/init/createStudioConfig.d.ts +0 -13
- package/dist/actions/init/determineAppTemplate.d.ts +0 -9
- package/dist/actions/init/env/createOrAppendEnvVars.d.ts +0 -12
- package/dist/actions/init/env/parseAndUpdateEnvVars.d.ts +0 -9
- package/dist/actions/init/env/writeEnvVarsToFile.d.ts +0 -12
- package/dist/actions/init/fetchPostInitPrompt.d.ts +0 -6
- package/dist/actions/init/git.d.ts +0 -1
- package/dist/actions/init/processTemplate.d.ts +0 -7
- package/dist/actions/init/remoteTemplate.d.ts +0 -20
- package/dist/actions/init/resolvePackageManager.d.ts +0 -10
- package/dist/actions/init/setupMCP.d.ts +0 -21
- package/dist/actions/init/setupMCP.js +0 -258
- package/dist/actions/init/setupMCP.js.map +0 -1
- package/dist/actions/init/templates/appQuickstart.d.ts +0 -3
- package/dist/actions/init/templates/appSanityUi.d.ts +0 -3
- package/dist/actions/init/templates/blog.d.ts +0 -3
- package/dist/actions/init/templates/clean.d.ts +0 -3
- package/dist/actions/init/templates/getStarted.d.ts +0 -3
- package/dist/actions/init/templates/index.d.ts +0 -3
- package/dist/actions/init/templates/moviedb.d.ts +0 -3
- package/dist/actions/init/templates/nextjs/index.d.ts +0 -6
- package/dist/actions/init/templates/nextjs/schemaTypes/blog.d.ts +0 -3
- package/dist/actions/init/templates/quickstart.d.ts +0 -3
- package/dist/actions/init/templates/shopify.d.ts +0 -3
- package/dist/actions/init/templates/shopifyOnline.d.ts +0 -3
- package/dist/actions/init/types.d.ts +0 -15
- package/dist/actions/init/updateInitialTemplateMetadata.d.ts +0 -1
- package/dist/actions/manifest/SchemaIcon.d.ts +0 -9
- package/dist/actions/manifest/extractAppManifest.d.ts +0 -20
- package/dist/actions/manifest/extractManifest.d.ts +0 -14
- package/dist/actions/manifest/extractWorkspaceManifest.d.ts +0 -3
- package/dist/actions/manifest/purifyConfig.d.ts +0 -10
- package/dist/actions/manifest/schemaTypeHelpers.d.ts +0 -17
- package/dist/actions/manifest/types.d.ts +0 -119
- package/dist/actions/mcp/detectAvailableEditors.d.ts +0 -8
- package/dist/actions/mcp/getEditorsWithExistingConfig.d.ts +0 -8
- package/dist/actions/mcp/getEditorsWithExistingConfig.js +0 -29
- package/dist/actions/mcp/getEditorsWithExistingConfig.js.map +0 -1
- package/dist/actions/mcp/writeMCPConfig.d.ts +0 -9
- package/dist/actions/media/getMediaLibraryConfig.d.ts +0 -2
- package/dist/actions/media/importAspects.d.ts +0 -52
- package/dist/actions/media/importMedia.d.ts +0 -55
- package/dist/actions/media/importMediaDebug.d.ts +0 -1
- package/dist/actions/organizations/getOrganizationChoices.d.ts +0 -6
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +0 -2
- package/dist/actions/organizations/hasProjectAttachGrant.d.ts +0 -1
- package/dist/actions/preview/getPreviewServerConfig.d.ts +0 -15
- package/dist/actions/preview/previewAction.d.ts +0 -10
- package/dist/actions/preview/types.d.ts +0 -2
- package/dist/actions/schema/deleteSchemaAction.d.ts +0 -23
- package/dist/actions/schema/deploySchemas.d.ts +0 -15
- package/dist/actions/schema/extract.d.ts +0 -7
- package/dist/actions/schema/extract.js +0 -38
- package/dist/actions/schema/extract.js.map +0 -1
- package/dist/actions/schema/formatSchemaValidation.d.ts +0 -3
- package/dist/actions/schema/listSchemas.d.ts +0 -12
- package/dist/actions/schema/metafile.d.ts +0 -21
- package/dist/actions/schema/schemaStoreTypes.d.ts +0 -18
- package/dist/actions/schema/schemaStoreTypes.js +0 -19
- package/dist/actions/schema/schemaStoreTypes.js.map +0 -1
- package/dist/actions/schema/utils/debug.d.ts +0 -2
- package/dist/actions/schema/utils/manifestExtractor.d.ts +0 -9
- package/dist/actions/schema/utils/manifestExtractor.js +0 -33
- package/dist/actions/schema/utils/manifestExtractor.js.map +0 -1
- package/dist/actions/schema/utils/manifestReader.d.ts +0 -17
- package/dist/actions/schema/utils/manifestReader.js +0 -71
- package/dist/actions/schema/utils/manifestReader.js.map +0 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -2
- package/dist/actions/schema/utils/schemaStoreValidation.d.ts +0 -29
- package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +0 -14
- package/dist/actions/schema/utils/workspaceSchemaId.d.ts +0 -8
- package/dist/actions/schema/validateAction.d.ts +0 -11
- package/dist/actions/telemetry/fetchTelemetryConsent.d.ts +0 -11
- package/dist/actions/telemetry/fetchTelemetryConsent.js +0 -38
- package/dist/actions/telemetry/fetchTelemetryConsent.js.map +0 -1
- package/dist/actions/telemetry/getLearnMoreMessage.d.ts +0 -2
- package/dist/actions/telemetry/getStatusDisplay.d.ts +0 -2
- package/dist/actions/telemetry/getStatusMessage.d.ts +0 -2
- package/dist/actions/telemetry/isValidApiConsentStatus.d.ts +0 -20
- package/dist/actions/telemetry/isValidApiConsentStatus.js +0 -25
- package/dist/actions/telemetry/isValidApiConsentStatus.js.map +0 -1
- package/dist/actions/telemetry/resolveConsent.d.ts +0 -2
- package/dist/actions/telemetry/setConsent.d.ts +0 -13
- package/dist/actions/telemetry/telemetryDebug.d.ts +0 -1
- package/dist/actions/telemetry/telemetryDisclosure.d.ts +0 -1
- package/dist/actions/telemetry/telemetryLearnMoreMessage.d.ts +0 -2
- package/dist/actions/telemetry/types.d.ts +0 -14
- package/dist/actions/telemetry/types.js.map +0 -1
- package/dist/actions/tokens/constants.d.ts +0 -4
- package/dist/actions/tokens/types.d.ts +0 -32
- package/dist/actions/tokens/validateRole.d.ts +0 -9
- package/dist/actions/undeploy/getStudioOrAppUserApplication.d.ts +0 -9
- package/dist/actions/users/getMembersForProject.d.ts +0 -24
- package/dist/actions/users/getPendingInvitations.d.ts +0 -13
- package/dist/actions/users/types.d.ts +0 -39
- package/dist/actions/users/usersDebug.d.ts +0 -1
- package/dist/actions/users/validateEmail.d.ts +0 -1
- package/dist/actions/versions/buildPackageArray.d.ts +0 -18
- package/dist/actions/versions/filterSanityModules.d.ts +0 -8
- package/dist/actions/versions/findSanityModulesVersions.d.ts +0 -14
- package/dist/actions/versions/getFormatters.d.ts +0 -17
- package/dist/actions/versions/tryFindLatestVersion.d.ts +0 -8
- package/dist/actions/versions/types.d.ts +0 -14
- package/dist/actions/versions/versionsDebug.d.ts +0 -1
- package/dist/commands/backup/disable.d.ts +0 -13
- package/dist/commands/backup/download.d.ts +0 -21
- package/dist/commands/backup/enable.d.ts +0 -12
- package/dist/commands/backup/list.d.ts +0 -19
- package/dist/commands/build.d.ts +0 -18
- package/dist/commands/codemod.d.ts +0 -19
- package/dist/commands/cors/add.d.ts +0 -29
- package/dist/commands/cors/delete.d.ts +0 -13
- package/dist/commands/cors/list.d.ts +0 -9
- package/dist/commands/dataset/alias/create.d.ts +0 -13
- package/dist/commands/dataset/alias/delete.d.ts +0 -16
- package/dist/commands/dataset/alias/link.d.ts +0 -17
- package/dist/commands/dataset/alias/unlink.d.ts +0 -16
- package/dist/commands/dataset/copy.d.ts +0 -27
- package/dist/commands/dataset/create.d.ts +0 -15
- package/dist/commands/dataset/delete.d.ts +0 -15
- package/dist/commands/dataset/export.d.ts +0 -26
- package/dist/commands/dataset/import.d.ts +0 -1
- package/dist/commands/dataset/list.d.ts +0 -9
- package/dist/commands/dataset/visibility/get.d.ts +0 -12
- package/dist/commands/dataset/visibility/set.d.ts +0 -13
- package/dist/commands/debug.d.ts +0 -9
- package/dist/commands/deploy.d.ts +0 -23
- package/dist/commands/dev.d.ts +0 -14
- package/dist/commands/docs/browse.d.ts +0 -6
- package/dist/commands/docs/read.d.ts +0 -15
- package/dist/commands/docs/search.d.ts +0 -15
- package/dist/commands/documents/create.d.ts +0 -39
- package/dist/commands/documents/delete.d.ts +0 -17
- package/dist/commands/documents/get.d.ts +0 -16
- package/dist/commands/documents/query.d.ts +0 -19
- package/dist/commands/documents/validate.d.ts +0 -29
- package/dist/commands/exec.d.ts +0 -19
- package/dist/commands/graphql/list.d.ts +0 -9
- package/dist/commands/graphql/undeploy.d.ts +0 -16
- package/dist/commands/hook/attempt.d.ts +0 -13
- package/dist/commands/hook/create.d.ts +0 -9
- package/dist/commands/hook/delete.d.ts +0 -13
- package/dist/commands/hook/list.d.ts +0 -9
- package/dist/commands/hook/logs.d.ts +0 -19
- package/dist/commands/init.d.ts +0 -65
- package/dist/commands/install.d.ts +0 -10
- package/dist/commands/learn.d.ts +0 -6
- package/dist/commands/login.d.ts +0 -13
- package/dist/commands/logout.d.ts +0 -6
- package/dist/commands/manage.d.ts +0 -6
- package/dist/commands/manifest/extract.d.ts +0 -12
- package/dist/commands/mcp/configure.d.ts +0 -9
- package/dist/commands/media/create-aspect.d.ts +0 -9
- package/dist/commands/media/delete-aspect.d.ts +0 -16
- package/dist/commands/media/deploy-aspect.d.ts +0 -20
- package/dist/commands/media/export.d.ts +0 -21
- package/dist/commands/media/import.d.ts +0 -18
- package/dist/commands/openapi/get.d.ts +0 -17
- package/dist/commands/openapi/list.d.ts +0 -14
- package/dist/commands/preview.d.ts +0 -17
- package/dist/commands/projects/list.d.ts +0 -13
- package/dist/commands/schema/delete.d.ts +0 -16
- package/dist/commands/schema/deploy.d.ts +0 -16
- package/dist/commands/schema/extract.d.ts +0 -15
- package/dist/commands/schema/list.d.ts +0 -15
- package/dist/commands/schema/validate.d.ts +0 -15
- package/dist/commands/telemetry/disable.d.ts +0 -8
- package/dist/commands/telemetry/enable.d.ts +0 -8
- package/dist/commands/telemetry/status.d.ts +0 -8
- package/dist/commands/tokens/add.d.ts +0 -19
- package/dist/commands/tokens/delete.d.ts +0 -17
- package/dist/commands/tokens/list.d.ts +0 -12
- package/dist/commands/undeploy.d.ts +0 -8
- package/dist/commands/users/invite.d.ts +0 -17
- package/dist/commands/users/list.d.ts +0 -16
- package/dist/commands/versions.d.ts +0 -6
- package/dist/config/createCliConfig.d.ts +0 -73
- package/dist/config/defineCliConfig.d.ts +0 -3
- package/dist/hooks/prerun/flushTelemetry.worker.d.ts +0 -2
- package/dist/hooks/prerun/setupTelemetry.d.ts +0 -2
- package/dist/index.d.ts +0 -6
- package/dist/index.js +0 -7
- package/dist/index.js.map +0 -1
- package/dist/prompts/init/nextjs.d.ts +0 -5
- package/dist/prompts/init/promptForTypescript.d.ts +0 -1
- package/dist/prompts/promptForDataset.d.ts +0 -17
- package/dist/prompts/promptForDatasetAclMode.d.ts +0 -9
- package/dist/prompts/promptForDatasetAliasName.d.ts +0 -4
- package/dist/prompts/promptForDatasetName.d.ts +0 -4
- package/dist/prompts/promptForMediaLibrary.d.ts +0 -15
- package/dist/prompts/selectDataset.d.ts +0 -3
- package/dist/prompts/selectMediaLibrary.d.ts +0 -5
- package/dist/server/devServer.d.ts +0 -24
- package/dist/server/gracefulServerDeath.d.ts +0 -3
- package/dist/server/previewServer.d.ts +0 -19
- package/dist/server/serverDebug.d.ts +0 -1
- package/dist/server/vite/plugin-sanity-basepath-redirect.d.ts +0 -2
- package/dist/server/vite/plugin-sanity-build-entries.d.ts +0 -9
- package/dist/server/vite/plugin-sanity-favicons.d.ts +0 -17
- package/dist/server/vite/plugin-sanity-runtime-rewrite.d.ts +0 -2
- package/dist/services/auth.d.ts +0 -2
- package/dist/services/backup.d.ts +0 -37
- package/dist/services/cors.d.ts +0 -23
- package/dist/services/datasetAliases.d.ts +0 -31
- package/dist/services/datasets.d.ts +0 -64
- package/dist/services/docs.d.ts +0 -15
- package/dist/services/getProjectFeatures.d.ts +0 -5
- package/dist/services/graphql.d.ts +0 -23
- package/dist/services/hooks.d.ts +0 -16
- package/dist/services/mcp.d.ts +0 -39
- package/dist/services/mediaLibraries.d.ts +0 -52
- package/dist/services/organizations.d.ts +0 -42
- package/dist/services/plans.d.ts +0 -2
- package/dist/services/projects.d.ts +0 -36
- package/dist/services/schemas.d.ts +0 -4
- package/dist/services/telemetry.d.ts +0 -2
- package/dist/services/tokens.d.ts +0 -43
- package/dist/services/user.d.ts +0 -15
- package/dist/services/userApplications.d.ts +0 -77
- package/dist/studioDependencies.d.ts +0 -16
- package/dist/studioDependencies.js.map +0 -1
- package/dist/telemetry/cli.telemetry.d.ts +0 -20
- package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +0 -5
- package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +0 -1
- package/dist/telemetry/store/createTelemetryStore.d.ts +0 -39
- package/dist/telemetry/store/createTelemetryStore.js.map +0 -1
- package/dist/telemetry/store/createTraceId.d.ts +0 -10
- package/dist/telemetry/store/createTraceId.js.map +0 -1
- package/dist/telemetry/store/debug.d.ts +0 -5
- package/dist/telemetry/store/debug.js +0 -7
- package/dist/telemetry/store/debug.js.map +0 -1
- package/dist/telemetry/store/findTelemetryFiles.d.ts +0 -13
- package/dist/telemetry/store/findTelemetryFiles.js.map +0 -1
- package/dist/telemetry/store/flushTelemetryFiles.d.ts +0 -20
- package/dist/telemetry/store/flushTelemetryFiles.js.map +0 -1
- package/dist/telemetry/store/generateTelemetryFilePath.d.ts +0 -17
- package/dist/telemetry/store/generateTelemetryFilePath.js.map +0 -1
- package/dist/telemetry/store/getTelemetryBaseInfo.d.ts +0 -27
- package/dist/telemetry/store/getTelemetryBaseInfo.js +0 -34
- package/dist/telemetry/store/getTelemetryBaseInfo.js.map +0 -1
- package/dist/telemetry/store/logger.d.ts +0 -6
- package/dist/telemetry/store/logger.js.map +0 -1
- package/dist/telemetry/store/trace.d.ts +0 -6
- package/dist/telemetry/store/trace.js.map +0 -1
- package/dist/telemetry/utils/readNDJSON.d.ts +0 -10
- package/dist/telemetry/utils/readNDJSON.js +0 -18
- package/dist/telemetry/utils/readNDJSON.js.map +0 -1
- package/dist/threads/configClient.d.ts +0 -1
- package/dist/threads/configClient.js.map +0 -1
- package/dist/threads/registerBrowserEnv.d.ts +0 -1
- package/dist/threads/registerBrowserEnv.js.map +0 -1
- package/dist/threads/validateDocuments.d.ts +0 -45
- package/dist/threads/validateDocuments.js.map +0 -1
- package/dist/threads/validateSchema.d.ts +0 -35
- package/dist/threads/validateSchema.js.map +0 -1
- package/dist/types.d.ts +0 -49
- package/dist/typings/deepSortObject.d.js +0 -2
- package/dist/typings/deepSortObject.d.js.map +0 -1
- package/dist/util/absolutify.d.ts +0 -6
- package/dist/util/appId.d.ts +0 -18
- package/dist/util/canLaunchBrowser.d.ts +0 -1
- package/dist/util/cliClient.d.ts +0 -13
- package/dist/util/compareDependencyVersions.d.ts +0 -35
- package/dist/util/copy.d.ts +0 -5
- package/dist/util/copyDir.d.ts +0 -20
- package/dist/util/detectRuntime.d.ts +0 -8
- package/dist/util/determineIsApp.d.ts +0 -7
- package/dist/util/dirIsEmptyOrNonExistent.d.ts +0 -1
- package/dist/util/ensureTrailingSlash.d.ts +0 -9
- package/dist/util/errorMessages.d.ts +0 -4
- package/dist/util/extractDocumentsFromNdjsonOrTarball.d.ts +0 -6
- package/dist/util/findNdjsonEntry.d.ts +0 -7
- package/dist/util/findNdjsonEntry.js +0 -21
- package/dist/util/findNdjsonEntry.js.map +0 -1
- package/dist/util/formatSize.d.ts +0 -6
- package/dist/util/frameworkPort.d.ts +0 -12
- package/dist/util/fsUtils.d.ts +0 -2
- package/dist/util/getCliVersion.d.ts +0 -7
- package/dist/util/getErrorMessage.d.ts +0 -8
- package/dist/util/getLocalPackageVersion.d.ts +0 -9
- package/dist/util/getProjectDefaults.d.ts +0 -11
- package/dist/util/getSharedServerConfig.d.ts +0 -30
- package/dist/util/getWorkspace.d.ts +0 -3
- package/dist/util/humanFileSize.d.ts +0 -1
- package/dist/util/importStudioConfig.d.ts +0 -1
- package/dist/util/importStudioConfig.js +0 -43
- package/dist/util/importStudioConfig.js.map +0 -1
- package/dist/util/isPathDirName.d.ts +0 -1
- package/dist/util/isSanityDocumentish.d.ts +0 -19
- package/dist/util/isStaging.d.ts +0 -7
- package/dist/util/isStaging.js +0 -10
- package/dist/util/isStaging.js.map +0 -1
- package/dist/util/loadEnv.d.ts +0 -1
- package/dist/util/moduleFormatUtils.d.ts +0 -3
- package/dist/util/packageManager/installPackages.d.ts +0 -18
- package/dist/util/packageManager/packageManagerChoice.d.ts +0 -31
- package/dist/util/packageManager/upgradePackages.d.ts +0 -17
- package/dist/util/parseArguments.d.ts +0 -35
- package/dist/util/pluralize.d.ts +0 -8
- package/dist/util/readModuleVersion.d.ts +0 -8
- package/dist/util/readModuleVersion.js +0 -15
- package/dist/util/readModuleVersion.js.map +0 -1
- package/dist/util/readPackageJson.d.ts +0 -31
- package/dist/util/readPackageJson.js +0 -42
- package/dist/util/readPackageJson.js.map +0 -1
- package/dist/util/readPackageManifest.d.ts +0 -21
- package/dist/util/readPackageManifest.js +0 -46
- package/dist/util/readPackageManifest.js.map +0 -1
- package/dist/util/readdirRecursive.d.ts +0 -5
- package/dist/util/resolveLatestVersions.d.ts +0 -7
- package/dist/util/toInt.d.ts +0 -1
- package/dist/util/trimHashFromVersion.d.ts +0 -5
- package/dist/util/uniqBy.d.ts +0 -1
- package/dist/util/uniqBy.js +0 -14
- package/dist/util/uniqBy.js.map +0 -1
- package/dist/util/validation/validateDocumentsUtils.d.ts +0 -12
- package/dist/util/warnAboutMissingAppId.d.ts +0 -7
- package/dist/util/workerChannels.d.ts +0 -59
- package/dist/util/workerChannels.js +0 -172
- package/dist/util/workerChannels.js.map +0 -1
- /package/dist/actions/{telemetry → doctor}/types.js +0 -0
- /package/dist/{studioDependencies.js → actions/init/studioDependencies.js} +0 -0
- /package/dist/{telemetry/store → util/telemetry}/createTraceId.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/init.ts"],"sourcesContent":["// @Todo will remove by time migration of this command is complete\nimport {existsSync} from 'node:fs'\nimport {mkdir, writeFile} from 'node:fs/promises'\nimport path from 'node:path'\n\nimport {Args, Command, Flags} from '@oclif/core'\nimport {CLIError} from '@oclif/core/errors'\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 {DatasetImportCommand} from '@sanity/import'\nimport {type Framework, frameworks} from '@vercel/frameworks'\nimport {detectFrameworkRecord, LocalFileSystemDetector} from '@vercel/fs-detectors'\nimport {execa, type Options} from 'execa'\nimport {deburr} from 'lodash-es'\n\nimport {getProviderName} from '../actions/auth/getProviderName.js'\nimport {login} from '../actions/auth/login/login.js'\nimport {createDataset} from '../actions/dataset/create.js'\nimport {bootstrapTemplate} from '../actions/init/bootstrapTemplate.js'\nimport {checkNextJsReactCompatibility} from '../actions/init/checkNextJsReactCompatibility.js'\nimport {countNestedFolders} from '../actions/init/countNestedFolders.js'\nimport {determineAppTemplate} from '../actions/init/determineAppTemplate.js'\nimport {createOrAppendEnvVars} from '../actions/init/env/createOrAppendEnvVars.js'\nimport {fetchPostInitPrompt} from '../actions/init/fetchPostInitPrompt.js'\nimport {tryGitInit} from '../actions/init/git.js'\nimport {\n checkIsRemoteTemplate,\n getGitHubRepoInfo,\n type RepoInfo,\n} from '../actions/init/remoteTemplate.js'\nimport {resolvePackageManager} from '../actions/init/resolvePackageManager.js'\nimport {type EditorName, setupMCP} from '../actions/init/setupMCP.js'\nimport templates from '../actions/init/templates/index.js'\nimport {\n sanityCliTemplate,\n sanityConfigTemplate,\n sanityFolder,\n sanityStudioTemplate,\n} from '../actions/init/templates/nextjs/index.js'\nimport {type VersionedFramework} from '../actions/init/types.js'\nimport {getOrganizationChoices} from '../actions/organizations/getOrganizationChoices.js'\nimport {getOrganizationsWithAttachGrantInfo} from '../actions/organizations/getOrganizationsWithAttachGrantInfo.js'\nimport {hasProjectAttachGrant} from '../actions/organizations/hasProjectAttachGrant.js'\nimport {\n promptForAppendEnv,\n promptForConfigFiles,\n promptForEmbeddedStudio,\n promptForNextTemplate,\n promptForStudioPath,\n} from '../prompts/init/nextjs.js'\nimport {promptForTypeScript} from '../prompts/init/promptForTypescript.js'\nimport {promptForDatasetName} from '../prompts/promptForDatasetName.js'\nimport {createCorsOrigin, listCorsOrigins} from '../services/cors.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, updateProjectInitializedAt} from '../services/projects.js'\nimport {getCliUser} from '../services/user.js'\nimport {absolutify, validateEmptyPath} from '../util/fsUtils.js'\nimport {getProjectDefaults} from '../util/getProjectDefaults.js'\nimport {\n installDeclaredPackages,\n installNewPackages,\n} from '../util/packageManager/installPackages.js'\nimport {\n getPartialEnvWithNpmPath,\n type PackageManager,\n} from '../util/packageManager/packageManagerChoice.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: undefined,\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: undefined,\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: undefined,\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 allowNo: true,\n default: undefined,\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 quickstart: Flags.boolean({\n deprecated: true,\n description:\n 'Used for initializing a project from a server schema that is saved in the Journey API',\n hidden: true,\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 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: undefined,\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 }\n\n public async run(): Promise<void> {\n const workDir = process.cwd()\n\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 (this.args.type) {\n this.error(\n this.args.type === 'plugin'\n ? 'Initializing plugins through the CLI is no longer supported'\n : `Unknown init type \"${this.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 = 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 (this.flags.template && checkIsRemoteTemplate(this.flags.template)) {\n remoteTemplateInfo = await getGitHubRepoInfo(\n this.flags.template,\n this.flags['template-token'],\n )\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 this.flags.env === 'string' ? this.flags.env : envFilenameDefault\n\n // If the user isn't already autenticated, make it so\n const {user} = await this.ensureAuthenticated()\n\n const isAppTemplate = this.flags.template ? determineAppTemplate(this.flags.template) : false // Default to false\n if (!isAppTemplate) {\n this.log(`${logSymbols.success} Fetching existing projects`)\n this.log('')\n }\n\n let newProject: string | undefined\n if (createProjectName) {\n newProject = await this.createProjectFromName({createProjectName, planId, user})\n }\n\n const {datasetName, displayName, isFirstProject, organizationId, projectId} =\n await this.getProjectDetails({\n isAppTemplate,\n newProject,\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 let initNext = this.flagOrDefault('nextjs-add-config-files', false)\n if (isNextJs && this.promptForUndefinedFlag(this.flags['nextjs-add-config-files'])) {\n initNext = await promptForConfigFiles()\n }\n\n // @todo\n // trace.log({\n // step: 'useDetectedFramework',\n // selectedOption: initNext ? 'yes' : 'no',\n // detectedFramework: detectedFramework?.name,\n // })\n\n const sluggedName = deburr(displayName.toLowerCase())\n .replaceAll(/\\s+/g, '-')\n .replaceAll(/[^a-z0-9-]/g, '')\n\n // add more frameworks to this as we add support for them\n // this is used to skip the getProjectInfo prompt\n const initFramework = initNext\n\n // Gather project defaults based on environment\n const defaults = await getProjectDefaults({isPlugin: false, workDir})\n\n // Prompt the user for required information\n const outputPath = await this.getProjectOutputPath({\n initFramework,\n sluggedName,\n workDir,\n })\n\n // Set up MCP integration\n const mcpResult = await setupMCP({mcp: this.flags.mcp, output: this.output})\n // @todo\n // trace.log({\n // step: 'mcpSetup',\n // detectedEditors: mcpResult.detectedEditors,\n // configuredEditors: mcpResult.configuredEditors,\n // skipped: mcpResult.skipped,\n // })\n // if (mcpResult.error) {\n // trace.error(mcpResult.error)\n // }\n const mcpConfigured = mcpResult.configuredEditors\n\n if (isNextJs) {\n await checkNextJsReactCompatibility({\n detectedFramework,\n output: this.output,\n outputPath,\n })\n }\n\n if (initNext) {\n await this.initNextJs({\n datasetName,\n detectedFramework,\n envFilename,\n mcpConfigured,\n projectId,\n workDir,\n })\n }\n\n // user wants to write environment variables to file\n if (this.flags.env) {\n await createOrAppendEnvVars({\n envVars: {\n DATASET: datasetName,\n PROJECT_ID: projectId,\n },\n filename: envFilename,\n framework: detectedFramework,\n log: false,\n output: this.output,\n outputPath,\n })\n this.exit(0)\n }\n\n // Prompt for template to use\n const templateName = await this.promptForTemplate()\n // @todo\n // trace.log({step: 'selectProjectTemplate', selectedOption: templateName})\n const template = templates[templateName]\n if (!remoteTemplateInfo && !template) {\n this.error(`Template \"${templateName}\" not found`, {exit: 1})\n }\n\n let useTypeScript = this.flags.typescript\n if (!remoteTemplateInfo && template && template.typescriptOnly === true) {\n useTypeScript = true\n } else if (this.promptForUndefinedFlag(this.flags.typescript)) {\n useTypeScript = await promptForTypeScript()\n // @todo\n // trace.log({step: 'useTypeScript', selectedOption: useTypeScript ? 'yes' : 'no'})\n }\n\n // If the template has a sample dataset, prompt the user whether or not we should import it\n const shouldImport =\n !this.isUnattended() &&\n template?.datasetUrl &&\n (await this.promptForDatasetImport(template.importPrompt))\n\n // @todo\n // trace.log({step: 'importTemplateDataset', selectedOption: shouldImport ? 'yes' : 'no'})\n\n try {\n await updateProjectInitializedAt(projectId)\n } catch (err) {\n // Non-critical update\n debug('Failed to update cliInitializedAt metadata', err)\n }\n\n try {\n await bootstrapTemplate({\n autoUpdates: this.flags['auto-updates'],\n bearerToken: this.flags['template-token'],\n dataset: datasetName,\n organizationId,\n output: this.output,\n outputPath,\n overwriteFiles: this.flags['overwrite-files'],\n packageName: sluggedName,\n projectId,\n projectName: displayName || defaults.projectName,\n remoteTemplateInfo,\n templateName,\n useTypeScript,\n })\n } catch (error) {\n if (error instanceof Error) {\n throw error\n }\n throw new Error(String(error))\n }\n\n const pkgManager = await resolvePackageManager({\n interactive: !this.isUnattended(),\n output: this.output,\n packageManager: this.flags['package-manager'] as PackageManager,\n targetDir: outputPath,\n })\n\n // @todo\n // trace.log({selectedOption: pkgManager, step: 'selectPackageManager', })\n\n // Now for the slow part... installing dependencies\n await installDeclaredPackages(outputPath, pkgManager, {output: this.output, workDir})\n\n const useGit = this.flags.git === undefined || Boolean(this.flags.git)\n const commitMessage = this.flags.git\n // Try initializing a git repository\n if (useGit) {\n tryGitInit(outputPath, typeof commitMessage === 'string' ? commitMessage : undefined)\n }\n\n // Prompt for dataset import (if a dataset is defined)\n if (shouldImport && template?.datasetUrl) {\n const token = await getCliToken()\n if (!token) {\n this.error('Authentication required to import dataset', {exit: 1})\n }\n await DatasetImportCommand.run(\n [template.datasetUrl, '--project', projectId, '--dataset', datasetName, '--token', token],\n {\n root: outputPath,\n },\n )\n\n this.log('')\n this.log('If you want to delete the imported data, use')\n this.log(` ${chalk.cyan(`npx sanity dataset delete ${datasetName}`)}`)\n this.log('and create a new clean dataset with')\n this.log(` ${chalk.cyan(`npx sanity dataset create <name>`)}\\n`)\n }\n\n const devCommandMap: Record<PackageManager, string> = {\n bun: 'bun dev',\n manual: 'npm run dev',\n npm: 'npm run dev',\n pnpm: 'pnpm dev',\n yarn: 'yarn dev',\n }\n const devCommand = devCommandMap[pkgManager]\n\n const isCurrentDir = outputPath === process.cwd()\n const goToProjectDir = `\\n(${chalk.cyan(`cd ${outputPath}`)} to navigate to your new project directory)`\n\n if (isAppTemplate) {\n //output for custom apps here\n this.log(\n `${logSymbols.success} ${chalk.green.bold('Success!')} Your custom app has been scaffolded.`,\n )\n if (!isCurrentDir) this.log(goToProjectDir)\n this.log(\n `\\n${chalk.bold('Next')}, configure the project(s) and dataset(s) your app should work with.`,\n )\n this.log('\\nGet started in `src/App.tsx`, or refer to our documentation for a walkthrough:')\n this.log(chalk.blue.underline('https://www.sanity.io/docs/app-sdk/sdk-configuration'))\n if (mcpConfigured && mcpConfigured.length > 0) {\n const message = await this.getPostInitMCPPrompt(mcpConfigured)\n this.log(`\\n${message}`)\n this.log(`\\nLearn more: ${chalk.cyan('https://mcp.sanity.io')}`)\n this.log(\n `\\nHave feedback? Tell us in the community: ${chalk.cyan('https://www.sanity.io/community/join')}`,\n )\n }\n this.log('\\n')\n this.log(`Other helpful commands:`)\n this.log(`npx sanity docs browse to open the documentation in a browser`)\n this.log(`npx sanity dev to start the development server for your app`)\n this.log(`npx sanity deploy to deploy your app`)\n } else {\n //output for Studios here\n this.log(`✅ ${chalk.green.bold('Success!')} Your Studio has been created.`)\n if (!isCurrentDir) this.log(goToProjectDir)\n this.log(\n `\\nGet started by running ${chalk.cyan(devCommand)} to launch your Studio's development server`,\n )\n if (mcpConfigured && mcpConfigured.length > 0) {\n const message = await this.getPostInitMCPPrompt(mcpConfigured)\n this.log(`\\n${message}`)\n this.log(`\\nLearn more: ${chalk.cyan('https://mcp.sanity.io')}`)\n this.log(\n `\\nHave feedback? Tell us in the community: ${chalk.cyan('https://www.sanity.io/community/join')}`,\n )\n }\n this.log('\\n')\n this.log(`Other helpful commands:`)\n this.log(`npx sanity docs browse to open the documentation in a browser`)\n this.log(`npx sanity manage to open the project settings in a browser`)\n this.log(`npx sanity help to explore the CLI manual`)\n }\n\n if (isFirstProject) {\n // @todo\n // trace.log({step: 'sendCommunityInvite', selectedOption: 'yes'})\n\n const DISCORD_INVITE_LINK = 'https://www.sanity.io/community/join'\n\n this.log(`\\nJoin the Sanity community: ${chalk.cyan(DISCORD_INVITE_LINK)}`)\n this.log('We look forward to seeing you there!\\n')\n }\n\n // @todo\n // trace.complete()\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 }) {\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 flagOrDefault(flag: keyof typeof this.flags, defaultValue: boolean): boolean {\n return typeof this.flags[flag] === 'boolean' ? this.flags[flag] : defaultValue\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 newProject,\n planId,\n user,\n }: {\n newProject: string | undefined\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 || newProject\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 getPostInitMCPPrompt(editorsNames: EditorName[]): Promise<string> {\n return fetchPostInitPrompt(new Intl.ListFormat('en').format(editorsNames))\n }\n\n private async getProjectDetails({\n isAppTemplate,\n newProject,\n planId,\n showDefaultConfigPrompt,\n user,\n }: {\n isAppTemplate: boolean\n newProject: string | undefined\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({newProject, 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 getProjectOutputPath({\n initFramework,\n sluggedName,\n workDir,\n }: {\n initFramework: boolean\n sluggedName: string\n workDir: string\n }): Promise<string> {\n const outputPath = this.flags['output-path']\n const specifiedPath = outputPath && path.resolve(outputPath)\n if (this.isUnattended() || specifiedPath || this.flags.env || initFramework) {\n return specifiedPath || workDir\n }\n\n const inputPath = await input({\n default: path.join(workDir, sluggedName),\n message: 'Project output path:',\n validate: validateEmptyPath,\n })\n\n return absolutify(inputPath)\n }\n\n private async initNextJs({\n datasetName,\n detectedFramework,\n envFilename,\n mcpConfigured,\n projectId,\n workDir,\n }: {\n datasetName: string\n detectedFramework: VersionedFramework | null\n envFilename: string\n mcpConfigured: EditorName[]\n projectId: string\n workDir: string\n }) {\n let useTypeScript = this.flagOrDefault('typescript', true)\n if (this.promptForUndefinedFlag(this.flags.typescript)) {\n useTypeScript = await promptForTypeScript()\n }\n // @todo\n // trace.log({step: 'useTypeScript', selectedOption: useTypeScript ? 'yes' : 'no'})\n\n const fileExtension = useTypeScript ? 'ts' : 'js'\n let embeddedStudio = this.flagOrDefault('nextjs-embed-studio', true)\n if (this.promptForUndefinedFlag(this.flags['nextjs-embed-studio'])) {\n embeddedStudio = await promptForEmbeddedStudio()\n }\n let hasSrcFolder = false\n\n if (embeddedStudio) {\n // find source path (app or src/app)\n const appDir = 'app'\n let srcPath = path.join(workDir, appDir)\n\n if (!existsSync(srcPath)) {\n srcPath = path.join(workDir, 'src', appDir)\n hasSrcFolder = true\n if (!existsSync(srcPath)) {\n try {\n await mkdir(srcPath, {recursive: true})\n } catch {\n debug('Error creating folder %s', srcPath)\n }\n }\n }\n\n const studioPath = this.isUnattended() ? '/studio' : await promptForStudioPath()\n\n const embeddedStudioRouteFilePath = path.join(\n srcPath,\n `${studioPath}/`,\n `[[...tool]]/page.${fileExtension}x`,\n )\n\n // this selects the correct template string based on whether the user is using the app or pages directory and\n // replaces the \":configPath:\" placeholder in the template with the correct path to the sanity.config.ts file.\n // we account for the user-defined embeddedStudioPath (default /studio) is accounted for by creating enough \"../\"\n // relative paths to reach the root level of the project\n await this.writeOrOverwrite(\n embeddedStudioRouteFilePath,\n sanityStudioTemplate.replace(\n ':configPath:',\n `${'../'.repeat(countNestedFolders(embeddedStudioRouteFilePath.slice(workDir.length)))}sanity.config`,\n ),\n workDir,\n )\n\n const sanityConfigPath = path.join(workDir, `sanity.config.${fileExtension}`)\n await this.writeOrOverwrite(\n sanityConfigPath,\n sanityConfigTemplate(hasSrcFolder)\n .replace(':route:', embeddedStudioRouteFilePath.slice(workDir.length).replace('src/', ''))\n .replace(':basePath:', studioPath),\n workDir,\n )\n }\n\n const sanityCliPath = path.join(workDir, `sanity.cli.${fileExtension}`)\n await this.writeOrOverwrite(sanityCliPath, sanityCliTemplate, workDir)\n\n let templateToUse = this.flags.template ?? 'clean'\n if (this.promptForUndefinedFlag(this.flags.template)) {\n templateToUse = await promptForNextTemplate()\n }\n\n await this.writeSourceFiles({\n fileExtension,\n files: sanityFolder(useTypeScript, templateToUse as 'blog' | 'clean'),\n folderPath: undefined,\n srcFolderPrefix: hasSrcFolder,\n workDir,\n })\n\n let appendEnv = this.flagOrDefault('nextjs-append-env', true)\n if (this.promptForUndefinedFlag(this.flags['nextjs-append-env'])) {\n appendEnv = await promptForAppendEnv(envFilename)\n }\n\n if (appendEnv) {\n await createOrAppendEnvVars({\n envVars: {\n DATASET: datasetName,\n PROJECT_ID: projectId,\n },\n filename: envFilename,\n framework: detectedFramework,\n log: true,\n output: this.output,\n outputPath: workDir,\n })\n }\n\n if (embeddedStudio) {\n const nextjsLocalDevOrigin = 'http://localhost:3000'\n const existingCorsOrigins = await listCorsOrigins(projectId)\n const hasExistingCorsOrigin = existingCorsOrigins.some(\n (item: {origin: string}) => item.origin === nextjsLocalDevOrigin,\n )\n if (!hasExistingCorsOrigin) {\n try {\n const createCorsRes = await createCorsOrigin({\n allowCredentials: true,\n origin: nextjsLocalDevOrigin,\n projectId,\n })\n\n this.log(\n createCorsRes.id\n ? `Added ${nextjsLocalDevOrigin} to CORS origins`\n : `Failed to add ${nextjsLocalDevOrigin} to CORS origins`,\n )\n } catch (error) {\n debug(`Error creating new CORS Origin ${nextjsLocalDevOrigin}: ${error}`)\n this.error(`Failed to add ${nextjsLocalDevOrigin} to CORS origins: ${error}`, {exit: 1})\n }\n }\n }\n\n const chosen = await resolvePackageManager({\n interactive: !this.isUnattended(),\n output: this.output,\n packageManager: this.flags['package-manager'] as PackageManager,\n targetDir: workDir,\n })\n // @todo\n // trace.log({step: 'selectPackageManager', selectedOption: chosen})\n const packages = ['@sanity/vision@4', 'sanity@4', '@sanity/image-url@1', 'styled-components@6']\n if (templateToUse === 'blog') {\n packages.push('@sanity/icons')\n }\n await installNewPackages(\n {\n packageManager: chosen,\n packages,\n },\n {\n output: this.output,\n workDir,\n },\n )\n\n // will refactor this later\n const execOptions: Options = {\n cwd: workDir,\n encoding: 'utf8',\n env: getPartialEnvWithNpmPath(workDir),\n stdio: 'inherit',\n }\n\n switch (chosen) {\n case 'npm': {\n await execa('npm', ['install', '--legacy-peer-deps', 'next-sanity@11'], execOptions)\n break\n }\n case 'pnpm': {\n await execa('pnpm', ['install', 'next-sanity@11'], execOptions)\n break\n }\n case 'yarn': {\n await execa('npx', ['install-peerdeps', '--yarn', 'next-sanity@11'], execOptions)\n break\n }\n default: {\n // bun and manual - do nothing or handle differently\n break\n }\n }\n\n this.log(\n `\\n${chalk.green('Success!')} Your Sanity configuration files has been added to this project`,\n )\n if (mcpConfigured && mcpConfigured.length > 0) {\n const message = await this.getPostInitMCPPrompt(mcpConfigured)\n this.log(`\\n${message}`)\n this.log(`\\nLearn more: ${chalk.cyan('https://mcp.sanity.io')}`)\n this.log(\n `\\nHave feedback? Tell us in the community: ${chalk.cyan('https://www.sanity.io/community/join')}`,\n )\n }\n\n this.exit(0)\n }\n\n private async promptForDatasetImport(message?: string) {\n return confirm({\n default: true,\n message: message || 'This template includes a sample dataset, would you like to use it?',\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 promptForTemplate() {\n const template = this.flags.template\n\n const defaultTemplate = this.isUnattended() || template ? template || 'clean' : null\n if (defaultTemplate) {\n return defaultTemplate\n }\n\n return select({\n choices: [\n {\n name: 'Clean project with no predefined schema types',\n value: 'clean',\n },\n {\n name: 'Blog (schema)',\n value: 'blog',\n },\n {\n name: 'E-commerce (Shopify)',\n value: 'shopify',\n },\n {\n name: 'Movie project (schema + sample data)',\n value: 'moviedb',\n },\n ],\n message: 'Select project template',\n })\n }\n\n private promptForUndefinedFlag(flag: unknown) {\n return !this.isUnattended() && flag === undefined\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 private async writeOrOverwrite(filePath: string, content: string, workDir: string) {\n if (existsSync(filePath)) {\n let overwrite = this.flagOrDefault('overwrite-files', false)\n if (this.promptForUndefinedFlag(this.flags['overwrite-files'])) {\n overwrite = await confirm({\n default: false,\n message: `File ${chalk.yellow(\n filePath.replace(workDir, ''),\n )} already exists. Do you want to overwrite it?`,\n })\n }\n\n if (!overwrite) {\n return\n }\n }\n\n // make folder if not exists\n const folderPath = path.dirname(filePath)\n\n try {\n await mkdir(folderPath, {recursive: true})\n } catch {\n debug('Error creating folder %s', folderPath)\n }\n\n await writeFile(filePath, content, {\n encoding: 'utf8',\n })\n }\n\n // write sanity folder files\n private async writeSourceFiles({\n fileExtension,\n files,\n folderPath,\n srcFolderPrefix,\n workDir,\n }: {\n fileExtension: string\n files: Record<string, Record<string, string> | string>\n folderPath?: string\n srcFolderPrefix?: boolean\n workDir: string\n }) {\n for (const [filePath, content] of Object.entries(files)) {\n // check if file ends with full stop to indicate it's file and not directory (this only works with our template tree structure)\n if (filePath.includes('.') && typeof content === 'string') {\n await this.writeOrOverwrite(\n path.join(\n workDir,\n srcFolderPrefix ? 'src' : '',\n 'sanity',\n folderPath || '',\n `${filePath}${fileExtension}`,\n ),\n content,\n workDir,\n )\n } else {\n await mkdir(path.join(workDir, srcFolderPrefix ? 'src' : '', 'sanity', filePath), {\n recursive: true,\n })\n if (typeof content === 'object') {\n await this.writeSourceFiles({\n fileExtension,\n files: content,\n folderPath: filePath,\n srcFolderPrefix,\n workDir,\n })\n }\n }\n }\n }\n}\n"],"names":["existsSync","mkdir","writeFile","path","Args","Flags","CLIError","getCliToken","SanityCommand","subdebug","chalk","confirm","input","logSymbols","select","Separator","spinner","isHttpError","DatasetImportCommand","frameworks","detectFrameworkRecord","LocalFileSystemDetector","execa","deburr","getProviderName","login","createDataset","bootstrapTemplate","checkNextJsReactCompatibility","countNestedFolders","determineAppTemplate","createOrAppendEnvVars","fetchPostInitPrompt","tryGitInit","checkIsRemoteTemplate","getGitHubRepoInfo","resolvePackageManager","setupMCP","templates","sanityCliTemplate","sanityConfigTemplate","sanityFolder","sanityStudioTemplate","getOrganizationChoices","getOrganizationsWithAttachGrantInfo","hasProjectAttachGrant","promptForAppendEnv","promptForConfigFiles","promptForEmbeddedStudio","promptForNextTemplate","promptForStudioPath","promptForTypeScript","promptForDatasetName","createCorsOrigin","listCorsOrigins","createDatasetService","listDatasets","getProjectFeatures","createOrganization","listOrganizations","getPlanId","getPlanIdFromCoupon","createProject","listProjects","updateProjectInitializedAt","getCliUser","absolutify","validateEmptyPath","getProjectDefaults","installDeclaredPackages","installNewPackages","getPartialEnvWithNpmPath","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","quickstart","deprecated","reconfigure","message","version","template","typescript","visibility","yes","char","run","workDir","process","cwd","createProjectName","error","exit","defaultConfig","showDefaultConfigPrompt","isUnattended","detectedFramework","frameworkList","fs","isNextJs","slug","remoteTemplateInfo","name","checkFlagsInUnattendedMode","planId","getPlan","envFilenameDefault","envFilename","user","ensureAuthenticated","isAppTemplate","log","success","newProject","createProjectFromName","datasetName","displayName","isFirstProject","organizationId","projectId","getProjectDetails","cyan","initNext","flagOrDefault","promptForUndefinedFlag","sluggedName","toLowerCase","replaceAll","initFramework","defaults","isPlugin","outputPath","getProjectOutputPath","mcpResult","output","mcpConfigured","configuredEditors","initNextJs","envVars","DATASET","PROJECT_ID","filename","framework","templateName","promptForTemplate","useTypeScript","typescriptOnly","shouldImport","datasetUrl","promptForDatasetImport","importPrompt","err","autoUpdates","bearerToken","overwriteFiles","packageName","projectName","Error","String","pkgManager","interactive","packageManager","targetDir","useGit","Boolean","commitMessage","token","root","devCommandMap","bun","manual","npm","pnpm","yarn","devCommand","isCurrentDir","goToProjectDir","green","bold","blue","underline","length","getPostInitMCPPrompt","DISCORD_INVITE_LINK","orgForCreateProjectFlag","organizations","promptUserForOrganization","createdProject","trim","metadata","subscription","spin","start","aclMode","succeed","isAuthenticated","email","flag","defaultValue","getOrCreateDataset","opts","userAction","datasets","projectFeatures","Promise","all","existing","find","ds","forcePublic","datasetInfo","promptForDefaultConfig","datasetChoices","map","value","selected","choices","existingDatasetNames","includes","newDatasetName","getOrCreateProject","projects","allProjects","allOrgs","toSorted","a","b","createdAt","localeCompare","proj","id","org","isUsersFirstProject","promptForProjectCreation","projectChoices","intendedPlan","intendedCoupon","verifyCoupon","verifyPlan","editorsNames","Intl","ListFormat","format","includeImplicitMemberships","includeMembers","appOrganizationId","specifiedPath","resolve","inputPath","join","validate","fileExtension","embeddedStudio","hasSrcFolder","appDir","srcPath","recursive","studioPath","embeddedStudioRouteFilePath","writeOrOverwrite","replace","repeat","slice","sanityConfigPath","sanityCliPath","templateToUse","writeSourceFiles","files","folderPath","srcFolderPrefix","appendEnv","nextjsLocalDevOrigin","existingCorsOrigins","hasExistingCorsOrigin","some","item","origin","createCorsRes","allowCredentials","chosen","packages","push","execOptions","encoding","stdio","defaultTemplate","promptUserForNewOrganization","newOrganization","withGrantInfo","withAttach","filter","hasAttachGrant","organizationChoices","defaultOrganizationId","chosenOrg","statusCode","useDefaultPlan","warn","filePath","content","overwrite","yellow","dirname","Object","entries"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/commands/init.ts"],"sourcesContent":["import {existsSync} from 'node:fs'\nimport {mkdir, writeFile} from 'node:fs/promises'\nimport path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {Args, Command, Flags} from '@oclif/core'\nimport {CLIError} from '@oclif/core/errors'\nimport {\n getCliToken,\n SanityCommand,\n type SanityOrgUser,\n subdebug,\n type TelemetryUserProperties,\n} from '@sanity/cli-core'\nimport {confirm, input, logSymbols, select, Separator, spinner} from '@sanity/cli-core/ux'\nimport {type DatasetAclMode, isHttpError} from '@sanity/client'\nimport {type TelemetryTrace} from '@sanity/telemetry'\nimport {type Framework, frameworks} from '@vercel/frameworks'\nimport {execa, type Options} from 'execa'\nimport deburr from 'lodash-es/deburr.js'\n\nimport {getProviderName} from '../actions/auth/getProviderName.js'\nimport {login} from '../actions/auth/login/login.js'\nimport {createDataset} from '../actions/dataset/create.js'\nimport {bootstrapTemplate} from '../actions/init/bootstrapTemplate.js'\nimport {checkNextJsReactCompatibility} from '../actions/init/checkNextJsReactCompatibility.js'\nimport {countNestedFolders} from '../actions/init/countNestedFolders.js'\nimport {determineAppTemplate} from '../actions/init/determineAppTemplate.js'\nimport {createOrAppendEnvVars} from '../actions/init/env/createOrAppendEnvVars.js'\nimport {fetchPostInitPrompt} from '../actions/init/fetchPostInitPrompt.js'\nimport {tryGitInit} from '../actions/init/git.js'\nimport {\n checkIsRemoteTemplate,\n getGitHubRepoInfo,\n type RepoInfo,\n} from '../actions/init/remoteTemplate.js'\nimport {resolvePackageManager} from '../actions/init/resolvePackageManager.js'\nimport templates from '../actions/init/templates/index.js'\nimport {\n sanityCliTemplate,\n sanityConfigTemplate,\n sanityFolder,\n sanityStudioTemplate,\n} from '../actions/init/templates/nextjs/index.js'\nimport {type VersionedFramework} from '../actions/init/types.js'\nimport {EditorName} from '../actions/mcp/editorConfigs.js'\nimport {setupMCP} from '../actions/mcp/setupMCP.js'\nimport {findOrganizationByUserName} from '../actions/organizations/findOrganizationByUserName.js'\nimport {getOrganizationChoices} from '../actions/organizations/getOrganizationChoices.js'\nimport {getOrganizationsWithAttachGrantInfo} from '../actions/organizations/getOrganizationsWithAttachGrantInfo.js'\nimport {hasProjectAttachGrant} from '../actions/organizations/hasProjectAttachGrant.js'\nimport {type OrganizationChoices} from '../actions/organizations/types.js'\nimport {\n promptForAppendEnv,\n promptForConfigFiles,\n promptForEmbeddedStudio,\n promptForNextTemplate,\n promptForStudioPath,\n} from '../prompts/init/nextjs.js'\nimport {promptForTypeScript} from '../prompts/init/promptForTypescript.js'\nimport {promptForDatasetName} from '../prompts/promptForDatasetName.js'\nimport {promptForDefaultConfig} from '../prompts/promptForDefaultConfig.js'\nimport {promptForOrganizationName} from '../prompts/promptForOrganizationName.js'\nimport {createCorsOrigin, listCorsOrigins} from '../services/cors.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, updateProjectInitializedAt} from '../services/projects.js'\nimport {getCliUser} from '../services/user.js'\nimport {CLIInitStepCompleted, type InitStepResult} from '../telemetry/init.telemetry.js'\nimport {detectFrameworkRecord} from '../util/detectFramework.js'\nimport {absolutify, validateEmptyPath} from '../util/fsUtils.js'\nimport {getProjectDefaults} from '../util/getProjectDefaults.js'\nimport {getPeerDependencies} from '../util/packageManager/getPeerDependencies.js'\nimport {\n installDeclaredPackages,\n installNewPackages,\n} from '../util/packageManager/installPackages.js'\nimport {\n getPartialEnvWithNpmPath,\n type PackageManager,\n} from '../util/packageManager/packageManagerChoice.js'\nimport {ImportDatasetCommand} from './dataset/import.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: undefined,\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: undefined,\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: undefined,\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 allowNo: true,\n default: undefined,\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 quickstart: Flags.boolean({\n deprecated: true,\n description:\n 'Used for initializing a project from a server schema that is saved in the Journey API',\n hidden: true,\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 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: undefined,\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 }\n\n _trace!: TelemetryTrace<TelemetryUserProperties, InitStepResult>\n\n public async run(): Promise<void> {\n const workDir = process.cwd()\n\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 (this.args.type) {\n this.error(\n this.args.type === 'plugin'\n ? 'Initializing plugins through the CLI is no longer supported'\n : `Unknown init type \"${this.args.type}\"`,\n {exit: 1},\n )\n }\n\n this._trace = this.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 = await detectFrameworkRecord({\n frameworkList: frameworks as readonly Framework[],\n rootPath: process.cwd(),\n })\n const isNextJs = detectedFramework?.slug === 'nextjs'\n\n let remoteTemplateInfo: RepoInfo | undefined\n if (this.flags.template && checkIsRemoteTemplate(this.flags.template)) {\n remoteTemplateInfo = await getGitHubRepoInfo(\n this.flags.template,\n this.flags['template-token'],\n )\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 this._trace.start()\n this._trace.log({\n flags: {\n bare: this.flags.bare,\n coupon: this.flags.coupon,\n defaultConfig,\n env: this.flags.env,\n git: this.flags.git,\n plan: this.flags['project-plan'],\n reconfigure: this.flags.reconfigure,\n unattended: this.isUnattended(),\n },\n step: 'start',\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 this.flags.env === 'string' ? this.flags.env : envFilenameDefault\n\n // If the user isn't already autenticated, make it so\n const {user} = await this.ensureAuthenticated()\n\n const isAppTemplate = this.flags.template ? determineAppTemplate(this.flags.template) : false // Default to false\n if (!isAppTemplate) {\n this.log(`${logSymbols.success} Fetching existing projects`)\n this.log('')\n }\n\n let newProject: string | undefined\n if (createProjectName) {\n newProject = await this.createProjectFromName({createProjectName, planId, user})\n }\n\n const {datasetName, displayName, isFirstProject, organizationId, projectId} =\n await this.getProjectDetails({\n isAppTemplate,\n newProject,\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: ${styleText('cyan', projectId)}`)\n this.log(`Dataset: ${styleText('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 let initNext = this.flagOrDefault('nextjs-add-config-files', false)\n if (isNextJs && this.promptForUndefinedFlag(this.flags['nextjs-add-config-files'])) {\n initNext = await promptForConfigFiles()\n }\n\n this._trace.log({\n detectedFramework: detectedFramework?.name,\n selectedOption: initNext ? 'yes' : 'no',\n step: 'useDetectedFramework',\n })\n\n const sluggedName = deburr(displayName.toLowerCase())\n .replaceAll(/\\s+/g, '-')\n .replaceAll(/[^a-z0-9-]/g, '')\n\n // add more frameworks to this as we add support for them\n // this is used to skip the getProjectInfo prompt\n const initFramework = initNext\n\n // Gather project defaults based on environment\n const defaults = await getProjectDefaults({isPlugin: false, workDir})\n\n // Prompt the user for required information\n const outputPath = await this.getProjectOutputPath({\n initFramework,\n sluggedName,\n workDir,\n })\n\n // Set up MCP integration\n const mcpResult = await setupMCP(this.flags.mcp)\n\n this._trace.log({\n configuredEditors: mcpResult.configuredEditors,\n detectedEditors: mcpResult.detectedEditors,\n skipped: mcpResult.skipped,\n step: 'mcpSetup',\n })\n if (mcpResult.error) {\n this._trace.error(mcpResult.error)\n }\n const mcpConfigured = mcpResult.configuredEditors\n\n if (isNextJs) {\n await checkNextJsReactCompatibility({\n detectedFramework,\n output: this.output,\n outputPath,\n })\n }\n\n if (initNext) {\n await this.initNextJs({\n datasetName,\n detectedFramework,\n envFilename,\n mcpConfigured,\n projectId,\n workDir,\n })\n }\n\n // user wants to write environment variables to file\n if (this.flags.env) {\n await createOrAppendEnvVars({\n envVars: {\n DATASET: datasetName,\n PROJECT_ID: projectId,\n },\n filename: envFilename,\n framework: detectedFramework,\n log: false,\n output: this.output,\n outputPath,\n })\n this.exit(0)\n }\n\n // Prompt for template to use\n const templateName = await this.promptForTemplate()\n this._trace.log({selectedOption: templateName, step: 'selectProjectTemplate'})\n const template = templates[templateName]\n if (!remoteTemplateInfo && !template) {\n this.error(`Template \"${templateName}\" not found`, {exit: 1})\n }\n\n let useTypeScript = this.flags.typescript\n if (!remoteTemplateInfo && template && template.typescriptOnly === true) {\n useTypeScript = true\n } else if (this.promptForUndefinedFlag(this.flags.typescript)) {\n useTypeScript = await promptForTypeScript()\n this._trace.log({selectedOption: useTypeScript ? 'yes' : 'no', step: 'useTypeScript'})\n }\n\n // If the template has a sample dataset, prompt the user whether or not we should import it\n const shouldImport =\n !this.isUnattended() &&\n template?.datasetUrl &&\n (await this.promptForDatasetImport(template.importPrompt))\n\n this._trace.log({selectedOption: shouldImport ? 'yes' : 'no', step: 'importTemplateDataset'})\n\n try {\n await updateProjectInitializedAt(projectId)\n } catch (err) {\n // Non-critical update\n debug('Failed to update cliInitializedAt metadata', err)\n }\n\n try {\n await bootstrapTemplate({\n autoUpdates: this.flags['auto-updates'],\n bearerToken: this.flags['template-token'],\n dataset: datasetName,\n organizationId,\n output: this.output,\n outputPath,\n overwriteFiles: this.flags['overwrite-files'],\n packageName: sluggedName,\n projectId,\n projectName: displayName || defaults.projectName,\n remoteTemplateInfo,\n templateName,\n useTypeScript,\n })\n } catch (error) {\n if (error instanceof Error) {\n throw error\n }\n throw new Error(String(error))\n }\n\n const pkgManager = await resolvePackageManager({\n interactive: !this.isUnattended(),\n output: this.output,\n packageManager: this.flags['package-manager'] as PackageManager,\n targetDir: outputPath,\n })\n\n this._trace.log({selectedOption: pkgManager, step: 'selectPackageManager'})\n\n // Now for the slow part... installing dependencies\n await installDeclaredPackages(outputPath, pkgManager, {output: this.output, workDir})\n\n const useGit = this.flags.git === undefined || Boolean(this.flags.git)\n const commitMessage = this.flags.git\n // Try initializing a git repository\n if (useGit) {\n tryGitInit(outputPath, typeof commitMessage === 'string' ? commitMessage : undefined)\n }\n\n // Prompt for dataset import (if a dataset is defined)\n if (shouldImport && template?.datasetUrl) {\n const token = await getCliToken()\n if (!token) {\n this.error('Authentication required to import dataset', {exit: 1})\n }\n await ImportDatasetCommand.run(\n [template.datasetUrl, '--project', projectId, '--dataset', datasetName, '--token', token],\n {\n root: outputPath,\n },\n )\n\n this.log('')\n this.log('If you want to delete the imported data, use')\n this.log(` ${styleText('cyan', `npx sanity dataset delete ${datasetName}`)}`)\n this.log('and create a new clean dataset with')\n this.log(` ${styleText('cyan', `npx sanity dataset create <name>`)}\\n`)\n }\n\n const devCommandMap: Record<PackageManager, string> = {\n bun: 'bun dev',\n manual: 'npm run dev',\n npm: 'npm run dev',\n pnpm: 'pnpm dev',\n yarn: 'yarn dev',\n }\n const devCommand = devCommandMap[pkgManager]\n\n const isCurrentDir = outputPath === process.cwd()\n const goToProjectDir = `\\n(${styleText('cyan', `cd ${outputPath}`)} to navigate to your new project directory)`\n\n if (isAppTemplate) {\n //output for custom apps here\n this.log(\n `${logSymbols.success} ${styleText(['green', 'bold'], 'Success!')} Your custom app has been scaffolded.`,\n )\n if (!isCurrentDir) this.log(goToProjectDir)\n this.log(\n `\\n${styleText('bold', 'Next')}, configure the project(s) and dataset(s) your app should work with.`,\n )\n this.log('\\nGet started in `src/App.tsx`, or refer to our documentation for a walkthrough:')\n this.log(\n styleText(['blue', 'underline'], 'https://www.sanity.io/docs/app-sdk/sdk-configuration'),\n )\n if (mcpConfigured && mcpConfigured.length > 0) {\n const message = await this.getPostInitMCPPrompt(mcpConfigured)\n this.log(`\\n${message}`)\n this.log(`\\nLearn more: ${styleText('cyan', 'https://mcp.sanity.io')}`)\n this.log(\n `\\nHave feedback? Tell us in the community: ${styleText('cyan', 'https://www.sanity.io/community/join')}`,\n )\n }\n this.log('\\n')\n this.log(`Other helpful commands:`)\n this.log(`npx sanity docs browse to open the documentation in a browser`)\n this.log(`npx sanity dev to start the development server for your app`)\n this.log(`npx sanity deploy to deploy your app`)\n } else {\n //output for Studios here\n this.log(`✅ ${styleText(['green', 'bold'], 'Success!')} Your Studio has been created.`)\n if (!isCurrentDir) this.log(goToProjectDir)\n this.log(\n `\\nGet started by running ${styleText('cyan', devCommand)} to launch your Studio's development server`,\n )\n if (mcpConfigured && mcpConfigured.length > 0) {\n const message = await this.getPostInitMCPPrompt(mcpConfigured)\n this.log(`\\n${message}`)\n this.log(`\\nLearn more: ${styleText('cyan', 'https://mcp.sanity.io')}`)\n this.log(\n `\\nHave feedback? Tell us in the community: ${styleText('cyan', 'https://www.sanity.io/community/join')}`,\n )\n }\n this.log('\\n')\n this.log(`Other helpful commands:`)\n this.log(`npx sanity docs browse to open the documentation in a browser`)\n this.log(`npx sanity manage to open the project settings in a browser`)\n this.log(`npx sanity help to explore the CLI manual`)\n }\n\n if (isFirstProject) {\n this._trace.log({selectedOption: 'yes', step: 'sendCommunityInvite'})\n\n const DISCORD_INVITE_LINK = 'https://www.sanity.io/community/join'\n\n this.log(`\\nJoin the Sanity community: ${styleText('cyan', DISCORD_INVITE_LINK)}`)\n this.log('We look forward to seeing you there!\\n')\n }\n\n this._trace.complete()\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 }) {\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 this._trace.log({alreadyLoggedIn: true, step: 'login'})\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 this._trace.log({step: 'login'})\n\n try {\n await login({output: this.output, telemetry: this._trace.newContext('login')})\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n this.error(`Login failed: ${message}`, {exit: 1})\n }\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 flagOrDefault(flag: keyof typeof this.flags, defaultValue: boolean): boolean {\n return typeof this.flags[flag] === 'boolean' ? this.flags[flag] : defaultValue\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 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 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 newProject,\n planId,\n user,\n }: {\n newProject: string | undefined\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 || newProject\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 getPostInitMCPPrompt(editorsNames: EditorName[]): Promise<string> {\n return fetchPostInitPrompt(new Intl.ListFormat('en').format(editorsNames))\n }\n\n private async getProjectDetails({\n isAppTemplate,\n newProject,\n planId,\n showDefaultConfigPrompt,\n user,\n }: {\n isAppTemplate: boolean\n newProject: string | undefined\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({\n isAppTemplate: true,\n organizations,\n user,\n })\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({newProject, 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 this._trace.log({\n datasetName: dataset.datasetName,\n selectedOption: dataset.userAction,\n step: 'createOrSelectDataset',\n visibility: this.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 getProjectOutputPath({\n initFramework,\n sluggedName,\n workDir,\n }: {\n initFramework: boolean\n sluggedName: string\n workDir: string\n }): Promise<string> {\n const outputPath = this.flags['output-path']\n const specifiedPath = outputPath && path.resolve(outputPath)\n if (this.isUnattended() || specifiedPath || this.flags.env || initFramework) {\n return specifiedPath || workDir\n }\n\n const inputPath = await input({\n default: path.join(workDir, sluggedName),\n message: 'Project output path:',\n validate: validateEmptyPath,\n })\n\n return absolutify(inputPath)\n }\n\n private async initNextJs({\n datasetName,\n detectedFramework,\n envFilename,\n mcpConfigured,\n projectId,\n workDir,\n }: {\n datasetName: string\n detectedFramework: VersionedFramework | null\n envFilename: string\n mcpConfigured: EditorName[]\n projectId: string\n workDir: string\n }) {\n let useTypeScript = this.flagOrDefault('typescript', true)\n if (this.promptForUndefinedFlag(this.flags.typescript)) {\n useTypeScript = await promptForTypeScript()\n }\n this._trace.log({selectedOption: useTypeScript ? 'yes' : 'no', step: 'useTypeScript'})\n\n const fileExtension = useTypeScript ? 'ts' : 'js'\n let embeddedStudio = this.flagOrDefault('nextjs-embed-studio', true)\n if (this.promptForUndefinedFlag(this.flags['nextjs-embed-studio'])) {\n embeddedStudio = await promptForEmbeddedStudio()\n }\n let hasSrcFolder = false\n\n if (embeddedStudio) {\n // find source path (app or src/app)\n const appDir = 'app'\n let srcPath = path.join(workDir, appDir)\n\n if (!existsSync(srcPath)) {\n srcPath = path.join(workDir, 'src', appDir)\n hasSrcFolder = true\n if (!existsSync(srcPath)) {\n try {\n await mkdir(srcPath, {recursive: true})\n } catch {\n debug('Error creating folder %s', srcPath)\n }\n }\n }\n\n const studioPath = this.isUnattended() ? '/studio' : await promptForStudioPath()\n\n const embeddedStudioRouteFilePath = path.join(\n srcPath,\n `${studioPath}/`,\n `[[...tool]]/page.${fileExtension}x`,\n )\n\n // this selects the correct template string based on whether the user is using the app or pages directory and\n // replaces the \":configPath:\" placeholder in the template with the correct path to the sanity.config.ts file.\n // we account for the user-defined embeddedStudioPath (default /studio) is accounted for by creating enough \"../\"\n // relative paths to reach the root level of the project\n await this.writeOrOverwrite(\n embeddedStudioRouteFilePath,\n sanityStudioTemplate.replace(\n ':configPath:',\n `${'../'.repeat(countNestedFolders(embeddedStudioRouteFilePath.slice(workDir.length)))}sanity.config`,\n ),\n workDir,\n )\n\n const sanityConfigPath = path.join(workDir, `sanity.config.${fileExtension}`)\n await this.writeOrOverwrite(\n sanityConfigPath,\n sanityConfigTemplate(hasSrcFolder)\n .replace(':route:', embeddedStudioRouteFilePath.slice(workDir.length).replace('src/', ''))\n .replace(':basePath:', studioPath),\n workDir,\n )\n }\n\n const sanityCliPath = path.join(workDir, `sanity.cli.${fileExtension}`)\n await this.writeOrOverwrite(sanityCliPath, sanityCliTemplate, workDir)\n\n let templateToUse = this.flags.template ?? 'clean'\n if (this.promptForUndefinedFlag(this.flags.template)) {\n templateToUse = await promptForNextTemplate()\n }\n\n await this.writeSourceFiles({\n fileExtension,\n files: sanityFolder(useTypeScript, templateToUse as 'blog' | 'clean'),\n folderPath: undefined,\n srcFolderPrefix: hasSrcFolder,\n workDir,\n })\n\n let appendEnv = this.flagOrDefault('nextjs-append-env', true)\n if (this.promptForUndefinedFlag(this.flags['nextjs-append-env'])) {\n appendEnv = await promptForAppendEnv(envFilename)\n }\n\n if (appendEnv) {\n await createOrAppendEnvVars({\n envVars: {\n DATASET: datasetName,\n PROJECT_ID: projectId,\n },\n filename: envFilename,\n framework: detectedFramework,\n log: true,\n output: this.output,\n outputPath: workDir,\n })\n }\n\n if (embeddedStudio) {\n const nextjsLocalDevOrigin = 'http://localhost:3000'\n const existingCorsOrigins = await listCorsOrigins(projectId)\n const hasExistingCorsOrigin = existingCorsOrigins.some(\n (item: {origin: string}) => item.origin === nextjsLocalDevOrigin,\n )\n if (!hasExistingCorsOrigin) {\n try {\n const createCorsRes = await createCorsOrigin({\n allowCredentials: true,\n origin: nextjsLocalDevOrigin,\n projectId,\n })\n\n this.log(\n createCorsRes.id\n ? `Added ${nextjsLocalDevOrigin} to CORS origins`\n : `Failed to add ${nextjsLocalDevOrigin} to CORS origins`,\n )\n } catch (error) {\n debug(`Error creating new CORS Origin ${nextjsLocalDevOrigin}: ${error}`)\n this.error(`Failed to add ${nextjsLocalDevOrigin} to CORS origins: ${error}`, {exit: 1})\n }\n }\n }\n\n const chosen = await resolvePackageManager({\n interactive: !this.isUnattended(),\n output: this.output,\n packageManager: this.flags['package-manager'] as PackageManager,\n targetDir: workDir,\n })\n this._trace.log({selectedOption: chosen, step: 'selectPackageManager'})\n const packages = ['@sanity/vision@4', 'sanity@4', '@sanity/image-url@1', 'styled-components@6']\n if (templateToUse === 'blog') {\n packages.push('@sanity/icons')\n }\n await installNewPackages(\n {\n packageManager: chosen,\n packages,\n },\n {\n output: this.output,\n workDir,\n },\n )\n\n // will refactor this later\n const execOptions: Options = {\n cwd: workDir,\n encoding: 'utf8',\n env: getPartialEnvWithNpmPath(workDir),\n stdio: 'inherit',\n }\n\n switch (chosen) {\n case 'npm': {\n await execa('npm', ['install', '--legacy-peer-deps', 'next-sanity@11'], execOptions)\n break\n }\n case 'pnpm': {\n await execa('pnpm', ['install', 'next-sanity@11'], execOptions)\n break\n }\n case 'yarn': {\n const peerDeps = await getPeerDependencies('next-sanity@11', workDir)\n await installNewPackages(\n {packageManager: 'yarn', packages: ['next-sanity@11', ...peerDeps]},\n {output: this.output, workDir},\n )\n break\n }\n default: {\n // bun and manual - do nothing or handle differently\n break\n }\n }\n\n this.log(\n `\\n${styleText('green', 'Success!')} Your Sanity configuration files has been added to this project`,\n )\n if (mcpConfigured && mcpConfigured.length > 0) {\n const message = await this.getPostInitMCPPrompt(mcpConfigured)\n this.log(`\\n${message}`)\n this.log(`\\nLearn more: ${styleText('cyan', 'https://mcp.sanity.io')}`)\n this.log(\n `\\nHave feedback? Tell us in the community: ${styleText('cyan', 'https://www.sanity.io/community/join')}`,\n )\n }\n\n this.exit(0)\n }\n\n private async promptForDatasetImport(message?: string) {\n return confirm({\n default: true,\n message: message || 'This template includes a sample dataset, would you like to use it?',\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 promptForTemplate() {\n const template = this.flags.template\n\n const defaultTemplate = this.isUnattended() || template ? template || 'clean' : null\n if (defaultTemplate) {\n return defaultTemplate\n }\n\n return select({\n choices: [\n {\n name: 'Clean project with no predefined schema types',\n value: 'clean',\n },\n {\n name: 'Blog (schema)',\n value: 'blog',\n },\n {\n name: 'E-commerce (Shopify)',\n value: 'shopify',\n },\n {\n name: 'Movie project (schema + sample data)',\n value: 'moviedb',\n },\n ],\n message: 'Select project template',\n })\n }\n\n private promptForUndefinedFlag(flag: unknown) {\n return !this.isUnattended() && flag === undefined\n }\n\n private async promptUserForNewOrganization(\n user: SanityOrgUser,\n ): Promise<OrganizationCreateResponse> {\n const name = await promptForOrganizationName(user)\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 isAppTemplate = false,\n organizations,\n user,\n }: {\n isAppTemplate?: boolean\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 let organizationChoices: OrganizationChoices\n let defaultOrganizationId: string | undefined\n\n if (isAppTemplate) {\n // For app templates, all organizations are valid — no attach grant check needed\n organizationChoices = getOrganizationChoices(organizations)\n defaultOrganizationId =\n organizations.length === 1\n ? organizations[0].id\n : findOrganizationByUserName(organizations, user)\n } else {\n // For studio projects, check which organizations the user can attach projects to\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 organizationChoices = getOrganizationChoices(withGrantInfo)\n defaultOrganizationId =\n withAttach.length === 1\n ? withAttach[0].organization.id\n : findOrganizationByUserName(organizations, user)\n }\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 this._trace.log({\n coupon: intendedCoupon,\n selectedOption: useDefaultPlan ? 'yes' : 'no',\n step: 'useDefaultPlanCoupon',\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 this._trace.log({\n planId: intendedPlan,\n selectedOption: useDefaultPlan ? 'yes' : 'no',\n step: 'useDefaultPlanId',\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 private async writeOrOverwrite(filePath: string, content: string, workDir: string) {\n if (existsSync(filePath)) {\n let overwrite = this.flagOrDefault('overwrite-files', false)\n if (this.promptForUndefinedFlag(this.flags['overwrite-files'])) {\n overwrite = await confirm({\n default: false,\n message: `File ${styleText(\n 'yellow',\n filePath.replace(workDir, ''),\n )} already exists. Do you want to overwrite it?`,\n })\n }\n\n if (!overwrite) {\n return\n }\n }\n\n // make folder if not exists\n const folderPath = path.dirname(filePath)\n\n try {\n await mkdir(folderPath, {recursive: true})\n } catch {\n debug('Error creating folder %s', folderPath)\n }\n\n await writeFile(filePath, content, {\n encoding: 'utf8',\n })\n }\n\n // write sanity folder files\n private async writeSourceFiles({\n fileExtension,\n files,\n folderPath,\n srcFolderPrefix,\n workDir,\n }: {\n fileExtension: string\n files: Record<string, Record<string, string> | string>\n folderPath?: string\n srcFolderPrefix?: boolean\n workDir: string\n }) {\n for (const [filePath, content] of Object.entries(files)) {\n // check if file ends with full stop to indicate it's file and not directory (this only works with our template tree structure)\n if (filePath.includes('.') && typeof content === 'string') {\n await this.writeOrOverwrite(\n path.join(\n workDir,\n srcFolderPrefix ? 'src' : '',\n 'sanity',\n folderPath || '',\n `${filePath}${fileExtension}`,\n ),\n content,\n workDir,\n )\n } else {\n await mkdir(path.join(workDir, srcFolderPrefix ? 'src' : '', 'sanity', filePath), {\n recursive: true,\n })\n if (typeof content === 'object') {\n await this.writeSourceFiles({\n fileExtension,\n files: content,\n folderPath: filePath,\n srcFolderPrefix,\n workDir,\n })\n }\n }\n }\n }\n}\n"],"names":["existsSync","mkdir","writeFile","path","styleText","Args","Flags","CLIError","getCliToken","SanityCommand","subdebug","confirm","input","logSymbols","select","Separator","spinner","isHttpError","frameworks","execa","deburr","getProviderName","login","createDataset","bootstrapTemplate","checkNextJsReactCompatibility","countNestedFolders","determineAppTemplate","createOrAppendEnvVars","fetchPostInitPrompt","tryGitInit","checkIsRemoteTemplate","getGitHubRepoInfo","resolvePackageManager","templates","sanityCliTemplate","sanityConfigTemplate","sanityFolder","sanityStudioTemplate","setupMCP","findOrganizationByUserName","getOrganizationChoices","getOrganizationsWithAttachGrantInfo","hasProjectAttachGrant","promptForAppendEnv","promptForConfigFiles","promptForEmbeddedStudio","promptForNextTemplate","promptForStudioPath","promptForTypeScript","promptForDatasetName","promptForDefaultConfig","promptForOrganizationName","createCorsOrigin","listCorsOrigins","createDatasetService","listDatasets","getProjectFeatures","createOrganization","listOrganizations","getPlanId","getPlanIdFromCoupon","createProject","listProjects","updateProjectInitializedAt","getCliUser","CLIInitStepCompleted","detectFrameworkRecord","absolutify","validateEmptyPath","getProjectDefaults","getPeerDependencies","installDeclaredPackages","installNewPackages","getPartialEnvWithNpmPath","ImportDatasetCommand","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","quickstart","deprecated","reconfigure","message","version","template","typescript","visibility","yes","char","_trace","run","workDir","process","cwd","createProjectName","error","exit","telemetry","trace","defaultConfig","showDefaultConfigPrompt","isUnattended","detectedFramework","frameworkList","rootPath","isNextJs","slug","remoteTemplateInfo","name","checkFlagsInUnattendedMode","start","log","plan","unattended","step","planId","getPlan","envFilenameDefault","envFilename","user","ensureAuthenticated","isAppTemplate","success","newProject","createProjectFromName","datasetName","displayName","isFirstProject","organizationId","projectId","getProjectDetails","initNext","flagOrDefault","promptForUndefinedFlag","selectedOption","sluggedName","toLowerCase","replaceAll","initFramework","defaults","isPlugin","outputPath","getProjectOutputPath","mcpResult","configuredEditors","detectedEditors","skipped","mcpConfigured","output","initNextJs","envVars","DATASET","PROJECT_ID","filename","framework","templateName","promptForTemplate","useTypeScript","typescriptOnly","shouldImport","datasetUrl","promptForDatasetImport","importPrompt","err","autoUpdates","bearerToken","overwriteFiles","packageName","projectName","Error","String","pkgManager","interactive","packageManager","targetDir","useGit","Boolean","commitMessage","token","root","devCommandMap","bun","manual","npm","pnpm","yarn","devCommand","isCurrentDir","goToProjectDir","length","getPostInitMCPPrompt","DISCORD_INVITE_LINK","complete","orgForCreateProjectFlag","organizations","promptUserForOrganization","createdProject","trim","metadata","subscription","spin","aclMode","succeed","isAuthenticated","alreadyLoggedIn","newContext","email","flag","defaultValue","getOrCreateDataset","opts","userAction","datasets","projectFeatures","Promise","all","existing","find","ds","forcePublic","datasetInfo","datasetChoices","map","value","selected","choices","existingDatasetNames","includes","newDatasetName","getOrCreateProject","projects","allProjects","allOrgs","toSorted","a","b","createdAt","localeCompare","proj","id","org","isUsersFirstProject","promptForProjectCreation","projectChoices","intendedPlan","intendedCoupon","verifyCoupon","verifyPlan","editorsNames","Intl","ListFormat","format","includeImplicitMemberships","includeMembers","appOrganizationId","specifiedPath","resolve","inputPath","join","validate","fileExtension","embeddedStudio","hasSrcFolder","appDir","srcPath","recursive","studioPath","embeddedStudioRouteFilePath","writeOrOverwrite","replace","repeat","slice","sanityConfigPath","sanityCliPath","templateToUse","writeSourceFiles","files","folderPath","srcFolderPrefix","appendEnv","nextjsLocalDevOrigin","existingCorsOrigins","hasExistingCorsOrigin","some","item","origin","createCorsRes","allowCredentials","chosen","packages","push","execOptions","encoding","stdio","peerDeps","defaultTemplate","promptUserForNewOrganization","newOrganization","organizationChoices","defaultOrganizationId","withGrantInfo","withAttach","filter","hasAttachGrant","chosenOrg","statusCode","useDefaultPlan","warn","filePath","content","overwrite","dirname","Object","entries"],"mappings":"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"}
|
package/dist/commands/login.js
CHANGED
|
@@ -29,21 +29,34 @@ export class LoginCommand extends SanityCommand {
|
|
|
29
29
|
}),
|
|
30
30
|
provider: Flags.string({
|
|
31
31
|
description: 'Log in using the given provider',
|
|
32
|
+
exclusive: [
|
|
33
|
+
'sso'
|
|
34
|
+
],
|
|
32
35
|
helpValue: '<providerId>'
|
|
33
36
|
}),
|
|
34
37
|
sso: Flags.string({
|
|
35
38
|
description: 'Log in using Single Sign-On, using the given organization slug',
|
|
39
|
+
exclusive: [
|
|
40
|
+
'provider'
|
|
41
|
+
],
|
|
36
42
|
helpValue: '<slug>'
|
|
37
43
|
})
|
|
38
44
|
};
|
|
39
45
|
async run() {
|
|
40
46
|
const { flags } = await this.parse(LoginCommand);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
try {
|
|
48
|
+
await login({
|
|
49
|
+
...flags,
|
|
50
|
+
output: this.output,
|
|
51
|
+
telemetry: this.telemetry
|
|
52
|
+
});
|
|
53
|
+
this.log('Login successful');
|
|
54
|
+
} catch (error) {
|
|
55
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
56
|
+
this.error(`Login failed: ${message}`, {
|
|
57
|
+
exit: 1
|
|
58
|
+
});
|
|
59
|
+
}
|
|
47
60
|
}
|
|
48
61
|
}
|
|
49
62
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/login.ts"],"sourcesContent":["import {Command, Flags} from '@oclif/core'\nimport {type FlagInput} from '@oclif/core/interfaces'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {login} from '../actions/auth/login/login.js'\n\nexport class LoginCommand extends SanityCommand<typeof LoginCommand> {\n static override description = 'Authenticates the CLI for access to Sanity projects'\n static override examples: Array<Command.Example> = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Log in using default settings',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --sso my-organization',\n description: 'Log in using Single Sign-On with the \"my-organization\" slug',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --provider github --no-open',\n description: 'Login with GitHub provider, but do not open a browser window automatically',\n },\n ]\n static override flags = {\n experimental: Flags.boolean({\n default: false,\n hidden: true,\n }),\n open: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Open a browser window to log in (`--no-open` only prints URL)',\n }),\n provider: Flags.string({\n description: 'Log in using the given provider',\n helpValue: '<providerId>',\n }),\n sso: Flags.string({\n description: 'Log in using Single Sign-On, using the given organization slug',\n helpValue: '<slug>',\n }),\n } satisfies FlagInput\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(LoginCommand)\n\n await login({...flags, output: this.output})\n
|
|
1
|
+
{"version":3,"sources":["../../src/commands/login.ts"],"sourcesContent":["import {Command, Flags} from '@oclif/core'\nimport {type FlagInput} from '@oclif/core/interfaces'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {login} from '../actions/auth/login/login.js'\n\nexport class LoginCommand extends SanityCommand<typeof LoginCommand> {\n static override description = 'Authenticates the CLI for access to Sanity projects'\n static override examples: Array<Command.Example> = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Log in using default settings',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --sso my-organization',\n description: 'Log in using Single Sign-On with the \"my-organization\" slug',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --provider github --no-open',\n description: 'Login with GitHub provider, but do not open a browser window automatically',\n },\n ]\n static override flags = {\n experimental: Flags.boolean({\n default: false,\n hidden: true,\n }),\n open: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Open a browser window to log in (`--no-open` only prints URL)',\n }),\n provider: Flags.string({\n description: 'Log in using the given provider',\n exclusive: ['sso'],\n helpValue: '<providerId>',\n }),\n sso: Flags.string({\n description: 'Log in using Single Sign-On, using the given organization slug',\n exclusive: ['provider'],\n helpValue: '<slug>',\n }),\n } satisfies FlagInput\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(LoginCommand)\n\n try {\n await login({...flags, output: this.output, telemetry: this.telemetry})\n this.log('Login successful')\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n this.error(`Login failed: ${message}`, {exit: 1})\n }\n }\n}\n"],"names":["Flags","SanityCommand","login","LoginCommand","description","examples","command","flags","experimental","boolean","default","hidden","open","allowNo","provider","string","exclusive","helpValue","sso","run","parse","output","telemetry","log","error","message","Error","String","exit"],"mappings":"AAAA,SAAiBA,KAAK,QAAO,cAAa;AAE1C,SAAQC,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,KAAK,QAAO,iCAAgC;AAEpD,OAAO,MAAMC,qBAAqBF;IAChC,OAAgBG,cAAc,sDAAqD;IACnF,OAAgBC,WAAmC;QACjD;YACEC,SAAS;YACTF,aAAa;QACf;QACA;YACEE,SAAS;YACTF,aAAa;QACf;QACA;YACEE,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IACD,OAAgBG,QAAQ;QACtBC,cAAcR,MAAMS,OAAO,CAAC;YAC1BC,SAAS;YACTC,QAAQ;QACV;QACAC,MAAMZ,MAAMS,OAAO,CAAC;YAClBI,SAAS;YACTH,SAAS;YACTN,aAAa;QACf;QACAU,UAAUd,MAAMe,MAAM,CAAC;YACrBX,aAAa;YACbY,WAAW;gBAAC;aAAM;YAClBC,WAAW;QACb;QACAC,KAAKlB,MAAMe,MAAM,CAAC;YAChBX,aAAa;YACbY,WAAW;gBAAC;aAAW;YACvBC,WAAW;QACb;IACF,EAAqB;IAErB,MAAaE,MAAqB;QAChC,MAAM,EAACZ,KAAK,EAAC,GAAG,MAAM,IAAI,CAACa,KAAK,CAACjB;QAEjC,IAAI;YACF,MAAMD,MAAM;gBAAC,GAAGK,KAAK;gBAAEc,QAAQ,IAAI,CAACA,MAAM;gBAAEC,WAAW,IAAI,CAACA,SAAS;YAAA;YACrE,IAAI,CAACC,GAAG,CAAC;QACX,EAAE,OAAOC,OAAO;YACd,MAAMC,UAAUD,iBAAiBE,QAAQF,MAAMC,OAAO,GAAGE,OAAOH;YAChE,IAAI,CAACA,KAAK,CAAC,CAAC,cAAc,EAAEC,SAAS,EAAE;gBAACG,MAAM;YAAC;QACjD;IACF;AACF"}
|
package/dist/commands/logout.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getCliToken, SanityCommand,
|
|
1
|
+
import { getCliToken, SanityCommand, setCliUserConfig } from '@sanity/cli-core';
|
|
2
2
|
import { isHttpError } from '@sanity/client';
|
|
3
3
|
import { logout } from '../services/auth.js';
|
|
4
4
|
export class LogoutCommand extends SanityCommand {
|
|
@@ -12,13 +12,13 @@ export class LogoutCommand extends SanityCommand {
|
|
|
12
12
|
}
|
|
13
13
|
try {
|
|
14
14
|
await logout();
|
|
15
|
-
this.clearConfig();
|
|
15
|
+
await this.clearConfig();
|
|
16
16
|
} catch (error) {
|
|
17
17
|
// In the case of session timeouts or missing sessions, we'll get a 401
|
|
18
18
|
// This is an acceptable situation seen from a logout perspective - all we
|
|
19
19
|
// need to do in this case is clear the session from the view of the CLI
|
|
20
20
|
if (isHttpError(error) && error.response.statusCode === 401) {
|
|
21
|
-
this.clearConfig();
|
|
21
|
+
await this.clearConfig();
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
24
|
const err = error instanceof Error ? error : new Error(`${error}`);
|
|
@@ -27,9 +27,11 @@ export class LogoutCommand extends SanityCommand {
|
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
clearConfig() {
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
async clearConfig() {
|
|
31
|
+
await Promise.all([
|
|
32
|
+
setCliUserConfig('authToken', undefined),
|
|
33
|
+
setCliUserConfig('telemetryConsent', undefined)
|
|
34
|
+
]);
|
|
33
35
|
this.log('Logged out successfully');
|
|
34
36
|
}
|
|
35
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/logout.ts"],"sourcesContent":["import {getCliToken, SanityCommand,
|
|
1
|
+
{"version":3,"sources":["../../src/commands/logout.ts"],"sourcesContent":["import {getCliToken, SanityCommand, setCliUserConfig} from '@sanity/cli-core'\nimport {isHttpError} from '@sanity/client'\n\nimport {logout} from '../services/auth.js'\n\nexport class LogoutCommand extends SanityCommand<typeof LogoutCommand> {\n static override description = 'Logs out the CLI from the current user session'\n\n public async run(): Promise<void> {\n await this.parse(LogoutCommand)\n\n const previousToken = await getCliToken()\n if (!previousToken) {\n this.log('No login credentials found')\n return\n }\n\n try {\n await logout()\n\n await this.clearConfig()\n } catch (error) {\n // In the case of session timeouts or missing sessions, we'll get a 401\n // This is an acceptable situation seen from a logout perspective - all we\n // need to do in this case is clear the session from the view of the CLI\n if (isHttpError(error) && error.response.statusCode === 401) {\n await this.clearConfig()\n return\n }\n const err = error instanceof Error ? error : new Error(`${error}`)\n this.error(`Failed to logout: ${err.message}`, {exit: 1})\n }\n }\n\n private async clearConfig() {\n await Promise.all([\n setCliUserConfig('authToken', undefined),\n setCliUserConfig('telemetryConsent', undefined),\n ])\n\n this.log('Logged out successfully')\n }\n}\n"],"names":["getCliToken","SanityCommand","setCliUserConfig","isHttpError","logout","LogoutCommand","description","run","parse","previousToken","log","clearConfig","error","response","statusCode","err","Error","message","exit","Promise","all","undefined"],"mappings":"AAAA,SAAQA,WAAW,EAAEC,aAAa,EAAEC,gBAAgB,QAAO,mBAAkB;AAC7E,SAAQC,WAAW,QAAO,iBAAgB;AAE1C,SAAQC,MAAM,QAAO,sBAAqB;AAE1C,OAAO,MAAMC,sBAAsBJ;IACjC,OAAgBK,cAAc,iDAAgD;IAE9E,MAAaC,MAAqB;QAChC,MAAM,IAAI,CAACC,KAAK,CAACH;QAEjB,MAAMI,gBAAgB,MAAMT;QAC5B,IAAI,CAACS,eAAe;YAClB,IAAI,CAACC,GAAG,CAAC;YACT;QACF;QAEA,IAAI;YACF,MAAMN;YAEN,MAAM,IAAI,CAACO,WAAW;QACxB,EAAE,OAAOC,OAAO;YACd,uEAAuE;YACvE,0EAA0E;YAC1E,wEAAwE;YACxE,IAAIT,YAAYS,UAAUA,MAAMC,QAAQ,CAACC,UAAU,KAAK,KAAK;gBAC3D,MAAM,IAAI,CAACH,WAAW;gBACtB;YACF;YACA,MAAMI,MAAMH,iBAAiBI,QAAQJ,QAAQ,IAAII,MAAM,GAAGJ,OAAO;YACjE,IAAI,CAACA,KAAK,CAAC,CAAC,kBAAkB,EAAEG,IAAIE,OAAO,EAAE,EAAE;gBAACC,MAAM;YAAC;QACzD;IACF;IAEA,MAAcP,cAAc;QAC1B,MAAMQ,QAAQC,GAAG,CAAC;YAChBlB,iBAAiB,aAAamB;YAC9BnB,iBAAiB,oBAAoBmB;SACtC;QAED,IAAI,CAACX,GAAG,CAAC;IACX;AACF"}
|