@sanity/cli 6.0.0-alpha.7 → 6.0.0-alpha.9
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 +240 -114
- package/dist/actions/auth/login/login.js +13 -5
- package/dist/actions/auth/login/login.js.map +1 -1
- package/dist/actions/build/buildApp.js +12 -12
- package/dist/actions/build/buildApp.js.map +1 -1
- package/dist/actions/build/buildStudio.js +12 -12
- package/dist/actions/build/buildStudio.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 +1 -1
- package/dist/actions/build/getViteConfig.js.map +1 -1
- package/dist/actions/build/renderDocument.js +3 -3
- package/dist/actions/build/renderDocument.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js +2 -1
- package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js.map +1 -1
- package/dist/actions/build/shouldAutoUpdate.js +3 -3
- package/dist/actions/build/shouldAutoUpdate.js.map +1 -1
- package/dist/actions/build/writeSanityRuntime.js +2 -2
- package/dist/actions/build/writeSanityRuntime.js.map +1 -1
- package/dist/actions/dataset/create.js +3 -5
- package/dist/actions/dataset/create.js.map +1 -1
- package/dist/actions/deploy/deployApp.js +11 -7
- package/dist/actions/deploy/deployApp.js.map +1 -1
- package/dist/actions/deploy/deployStudio.js +5 -4
- package/dist/actions/deploy/deployStudio.js.map +1 -1
- package/dist/actions/dev/startAppDevServer.js +5 -2
- package/dist/actions/dev/startAppDevServer.js.map +1 -1
- package/dist/actions/dev/startStudioDevServer.js +10 -6
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/documents/types.js.map +1 -1
- package/dist/actions/documents/validate.js +4 -15
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/{threads/validateDocuments.js → actions/documents/validateDocuments.worker.js} +35 -35
- package/dist/actions/documents/validateDocuments.worker.js.map +1 -0
- package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -1
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js +8 -7
- 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/{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 +37 -0
- package/dist/actions/graphql/SchemaError.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/gen1/generateTypeFilters.js +226 -0
- package/dist/actions/graphql/gen1/generateTypeFilters.js.map +1 -0
- package/dist/actions/graphql/gen1/generateTypeQueries.js +85 -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 +104 -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 +31 -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.worker.js +1 -1
- 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 +11 -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/types.js +1 -1
- package/dist/actions/graphql/types.js.map +1 -1
- package/dist/actions/init/bootstrapLocalTemplate.js +137 -0
- package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -0
- package/dist/actions/init/bootstrapRemoteTemplate.js +109 -0
- package/dist/actions/init/bootstrapRemoteTemplate.js.map +1 -0
- package/dist/actions/init/bootstrapTemplate.js +32 -0
- package/dist/actions/init/bootstrapTemplate.js.map +1 -0
- package/dist/actions/init/checkNextJsReactCompatibility.js +21 -0
- package/dist/actions/init/checkNextJsReactCompatibility.js.map +1 -0
- package/dist/actions/init/countNestedFolders.js +6 -0
- package/dist/actions/init/countNestedFolders.js.map +1 -0
- package/dist/actions/init/createAppCliConfig.js +19 -0
- package/dist/actions/init/createAppCliConfig.js.map +1 -0
- package/dist/actions/init/createCliConfig.js +27 -0
- package/dist/actions/init/createCliConfig.js.map +1 -0
- package/dist/actions/init/createPackageManifest.js +86 -0
- package/dist/actions/init/createPackageManifest.js.map +1 -0
- package/dist/actions/init/createStudioConfig.js +41 -0
- package/dist/actions/init/createStudioConfig.js.map +1 -0
- package/dist/actions/init/env/createOrAppendEnvVars.js +25 -0
- package/dist/actions/init/env/createOrAppendEnvVars.js.map +1 -0
- package/dist/actions/init/env/parseAndUpdateEnvVars.js +42 -0
- package/dist/actions/init/env/parseAndUpdateEnvVars.js.map +1 -0
- package/dist/actions/init/env/writeEnvVarsToFile.js +49 -0
- package/dist/actions/init/env/writeEnvVarsToFile.js.map +1 -0
- package/dist/actions/init/fetchPostInitPrompt.js +30 -0
- package/dist/actions/init/fetchPostInitPrompt.js.map +1 -0
- package/dist/actions/init/git.js +65 -0
- package/dist/actions/init/git.js.map +1 -0
- package/dist/actions/init/processTemplate.js +56 -0
- package/dist/actions/init/processTemplate.js.map +1 -0
- package/dist/actions/init/remoteTemplate.js +2 -40
- package/dist/actions/init/remoteTemplate.js.map +1 -1
- package/dist/actions/init/resolvePackageManager.js +20 -0
- package/dist/actions/init/resolvePackageManager.js.map +1 -0
- package/dist/actions/init/templates/appQuickstart.js +28 -0
- package/dist/actions/init/templates/appQuickstart.js.map +1 -0
- package/dist/actions/init/templates/appSanityUi.js +30 -0
- package/dist/actions/init/templates/appSanityUi.js.map +1 -0
- package/dist/actions/init/templates/blog.js +4 -0
- package/dist/actions/init/templates/blog.js.map +1 -0
- package/dist/actions/init/templates/clean.js +4 -0
- package/dist/actions/init/templates/clean.js.map +1 -0
- package/dist/actions/init/templates/getStarted.js +35 -0
- package/dist/actions/init/templates/getStarted.js.map +1 -0
- package/dist/actions/init/templates/index.js +23 -0
- package/dist/actions/init/templates/index.js.map +1 -0
- package/dist/actions/init/templates/moviedb.js +34 -0
- package/dist/actions/init/templates/moviedb.js.map +1 -0
- package/dist/actions/init/templates/nextjs/index.js +213 -0
- package/dist/actions/init/templates/nextjs/index.js.map +1 -0
- package/dist/actions/init/templates/nextjs/schemaTypes/blog.js +247 -0
- package/dist/actions/init/templates/nextjs/schemaTypes/blog.js.map +1 -0
- package/dist/actions/init/templates/quickstart.js +4 -0
- package/dist/actions/init/templates/quickstart.js.map +1 -0
- package/dist/actions/init/templates/shopify.js +77 -0
- package/dist/actions/init/templates/shopify.js.map +1 -0
- package/dist/actions/init/templates/shopifyOnline.js +49 -0
- package/dist/actions/init/templates/shopifyOnline.js.map +1 -0
- package/dist/actions/init/types.js.map +1 -0
- package/dist/actions/init/updateInitialTemplateMetadata.js +17 -0
- package/dist/actions/init/updateInitialTemplateMetadata.js.map +1 -0
- package/dist/actions/mcp/detectAvailableEditors.js +64 -59
- package/dist/actions/mcp/detectAvailableEditors.js.map +1 -1
- package/dist/actions/mcp/editorConfigs.js +147 -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 +24 -29
- package/dist/actions/mcp/writeMCPConfig.js.map +1 -1
- package/dist/actions/media/importMedia.js +2 -2
- package/dist/actions/media/importMedia.js.map +1 -1
- package/dist/actions/organizations/getOrganization.js +67 -0
- package/dist/actions/organizations/getOrganization.js.map +1 -0
- package/dist/actions/organizations/hasProjectAttachGrant.js +1 -1
- package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -1
- 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 +7 -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 +2 -2
- package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
- package/dist/actions/schema/deploySchemas.js +5 -5
- package/dist/actions/schema/deploySchemas.js.map +1 -1
- package/dist/actions/schema/extractSanitySchema.worker.js +38 -0
- package/dist/actions/schema/extractSanitySchema.worker.js.map +1 -0
- package/dist/actions/schema/extractSchema.js +77 -0
- package/dist/actions/schema/extractSchema.js.map +1 -0
- package/dist/actions/schema/formatSchemaValidation.js +17 -5
- package/dist/actions/schema/formatSchemaValidation.js.map +1 -1
- package/dist/actions/schema/listSchemas.js +4 -4
- package/dist/actions/schema/listSchemas.js.map +1 -1
- package/dist/actions/schema/metafile.js.map +1 -1
- package/dist/actions/schema/types.js +9 -0
- package/dist/actions/schema/types.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/manifestExtractor.js +2 -2
- package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
- package/dist/actions/schema/utils/manifestReader.js +2 -2
- package/dist/actions/schema/utils/manifestReader.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} +35 -26
- package/dist/actions/schema/validateSchema.worker.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/resolveConsent.js +1 -2
- package/dist/actions/telemetry/resolveConsent.js.map +1 -1
- package/dist/actions/telemetry/setConsent.js +1 -1
- 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/versions/getFormatters.js +2 -2
- package/dist/actions/versions/getFormatters.js.map +1 -1
- package/dist/commands/backup/disable.js +4 -3
- package/dist/commands/backup/disable.js.map +1 -1
- package/dist/commands/backup/download.js +7 -7
- package/dist/commands/backup/download.js.map +1 -1
- package/dist/commands/backup/enable.js +3 -3
- package/dist/commands/backup/enable.js.map +1 -1
- package/dist/commands/cors/add.js +13 -9
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/dataset/copy.js +6 -5
- package/dist/commands/dataset/copy.js.map +1 -1
- package/dist/commands/dataset/create.js +14 -7
- package/dist/commands/dataset/create.js.map +1 -1
- package/dist/commands/dataset/delete.js +12 -2
- package/dist/commands/dataset/delete.js.map +1 -1
- package/dist/commands/dataset/export.js +1 -2
- package/dist/commands/dataset/export.js.map +1 -1
- package/dist/commands/debug.js +5 -5
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/dev.js +5 -2
- 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/documents/validate.js +44 -40
- package/dist/commands/documents/validate.js.map +1 -1
- package/dist/commands/graphql/deploy.js +429 -0
- package/dist/commands/graphql/deploy.js.map +1 -0
- package/dist/commands/graphql/list.js +6 -6
- package/dist/commands/graphql/list.js.map +1 -1
- package/dist/commands/hook/logs.js +4 -4
- package/dist/commands/hook/logs.js.map +1 -1
- package/dist/commands/init.js +607 -86
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +2 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/manage.js +2 -1
- package/dist/commands/manage.js.map +1 -1
- package/dist/commands/mcp/configure.js +13 -74
- package/dist/commands/mcp/configure.js.map +1 -1
- package/dist/commands/media/create-aspect.js +7 -6
- package/dist/commands/media/create-aspect.js.map +1 -1
- package/dist/commands/media/delete-aspect.js +5 -4
- package/dist/commands/media/delete-aspect.js.map +1 -1
- package/dist/commands/media/deploy-aspect.js +9 -8
- package/dist/commands/media/deploy-aspect.js.map +1 -1
- package/dist/commands/media/export.js +1 -2
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/media/import.js +4 -4
- package/dist/commands/media/import.js.map +1 -1
- package/dist/commands/preview.js +10 -24
- 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 +2 -2
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schema/extract.js +7 -12
- package/dist/commands/schema/extract.js.map +1 -1
- package/dist/commands/schema/validate.js +10 -2
- package/dist/commands/schema/validate.js.map +1 -1
- package/dist/commands/undeploy.js +9 -8
- package/dist/commands/undeploy.js.map +1 -1
- package/dist/commands/users/list.js +3 -3
- package/dist/commands/users/list.js.map +1 -1
- package/dist/commands/versions.js +2 -2
- package/dist/commands/versions.js.map +1 -1
- package/dist/config/createCliConfig.js +1 -0
- package/dist/config/createCliConfig.js.map +1 -1
- 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 +31 -0
- package/dist/hooks/prerun/injectEnvVariables.js.map +1 -0
- package/dist/hooks/prerun/setupTelemetry.js +6 -5
- 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/index.d.ts +2326 -6
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/prompts/init/nextjs.js +56 -0
- package/dist/prompts/init/nextjs.js.map +1 -0
- package/dist/prompts/init/promptForTypescript.js +0 -6
- package/dist/prompts/init/promptForTypescript.js.map +1 -1
- 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/promptForProjectName.js +11 -0
- package/dist/prompts/promptForProjectName.js.map +1 -0
- package/dist/server/previewServer.js +15 -9
- package/dist/server/previewServer.js.map +1 -1
- package/dist/services/documents.js +56 -0
- package/dist/services/documents.js.map +1 -0
- package/dist/services/getUrlHeaders.js +36 -0
- package/dist/services/getUrlHeaders.js.map +1 -0
- package/dist/services/graphql.js +64 -0
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/mcp.js +16 -0
- 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 +37 -0
- package/dist/services/projects.js.map +1 -1
- package/dist/services/telemetry.js +62 -2
- package/dist/services/telemetry.js.map +1 -1
- package/dist/studioDependencies.js +24 -0
- package/dist/studioDependencies.js.map +1 -0
- package/dist/telemetry/build.telemetry.js +13 -0
- package/dist/telemetry/build.telemetry.js.map +1 -0
- package/dist/telemetry/extractSchema.telemetry.js +8 -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.js +3 -1
- package/dist/types.js.map +1 -1
- package/dist/typings/deepSortObject.d.js +2 -0
- package/dist/typings/deepSortObject.d.js.map +1 -0
- package/dist/util/appId.js +5 -5
- package/dist/util/appId.js.map +1 -1
- package/dist/util/cliClient.js +8 -7
- package/dist/util/cliClient.js.map +1 -1
- package/dist/util/copy.js +37 -0
- package/dist/util/copy.js.map +1 -0
- package/dist/util/formatSize.js +2 -2
- package/dist/util/formatSize.js.map +1 -1
- package/dist/util/frameworkPort.js +61 -0
- package/dist/util/frameworkPort.js.map +1 -0
- package/dist/util/fsUtils.js +34 -0
- package/dist/util/fsUtils.js.map +1 -0
- package/dist/util/getProjectDefaults.js +77 -0
- package/dist/util/getProjectDefaults.js.map +1 -0
- package/dist/util/getSanityEnv.js +3 -0
- package/dist/util/getSanityEnv.js.map +1 -0
- package/dist/util/importStudioConfig.js +0 -3
- package/dist/util/importStudioConfig.js.map +1 -1
- package/dist/util/loadEnv.js +1 -6
- package/dist/util/loadEnv.js.map +1 -1
- package/dist/util/packageManager/packageManagerChoice.js +8 -0
- package/dist/util/packageManager/packageManagerChoice.js.map +1 -1
- package/dist/util/readPackageJson.js +3 -1
- package/dist/util/readPackageJson.js.map +1 -1
- package/dist/util/readdirRecursive.js +24 -0
- package/dist/util/readdirRecursive.js.map +1 -0
- package/dist/util/resolveLatestVersions.js +21 -0
- package/dist/util/resolveLatestVersions.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 +6 -1
- package/oclif.manifest.json +200 -3
- package/package.json +48 -35
- 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/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/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/constants.d.ts +0 -1
- package/dist/actions/init/determineAppTemplate.d.ts +0 -9
- package/dist/actions/init/remoteTemplate.d.ts +0 -23
- 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/utils/debug.d.ts +0 -2
- package/dist/actions/schema/utils/manifestExtractor.d.ts +0 -9
- package/dist/actions/schema/utils/manifestReader.d.ts +0 -17
- 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 -55
- 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/prompts/init/promptForTypescript.d.ts +0 -2
- 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 -29
- 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 -33
- 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/telemetry/cli.telemetry.d.ts +0 -20
- package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +0 -5
- package/dist/telemetry/store/cleanupOldTelemetryFiles.js +0 -30
- package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +0 -1
- package/dist/telemetry/store/createTelemetryStore.d.ts +0 -39
- package/dist/telemetry/store/createTelemetryStore.js +0 -95
- package/dist/telemetry/store/createTelemetryStore.js.map +0 -1
- package/dist/telemetry/store/createTraceId.d.ts +0 -10
- package/dist/telemetry/store/createTraceId.js +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 +0 -34
- package/dist/telemetry/store/findTelemetryFiles.js.map +0 -1
- package/dist/telemetry/store/flushTelemetryFiles.d.ts +0 -20
- package/dist/telemetry/store/flushTelemetryFiles.js +0 -107
- package/dist/telemetry/store/flushTelemetryFiles.js.map +0 -1
- package/dist/telemetry/store/generateTelemetryFilePath.d.ts +0 -17
- package/dist/telemetry/store/generateTelemetryFilePath.js +0 -30
- 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 +0 -54
- package/dist/telemetry/store/logger.js.map +0 -1
- package/dist/telemetry/store/trace.d.ts +0 -6
- package/dist/telemetry/store/trace.js +0 -150
- 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 -16
- 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/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/formatSize.d.ts +0 -6
- 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/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/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 -29
- 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/readPackageJson.d.ts +0 -31
- package/dist/util/readPackageManifest.d.ts +0 -21
- 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/validation/validateDocumentsUtils.d.ts +0 -12
- package/dist/util/warnAboutMissingAppId.d.ts +0 -7
- package/dist/util/workerChannels.d.ts +0 -59
- /package/dist/actions/{telemetry → init}/types.js +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const configTemplate = `
|
|
2
|
+
import {shopifyAssets} from 'sanity-plugin-shopify-assets'
|
|
3
|
+
import {defineConfig, isDev} from 'sanity'
|
|
4
|
+
import {structureTool} from 'sanity/structure'
|
|
5
|
+
import {visionTool} from '@sanity/vision'
|
|
6
|
+
import {shopifyDocumentActions} from './plugins/shopifyDocumentActions'
|
|
7
|
+
import {schemaTypes} from './schemaTypes'
|
|
8
|
+
import {structure} from './structure'
|
|
9
|
+
import {SHOPIFY_STORE_ID} from './constants'
|
|
10
|
+
|
|
11
|
+
const devOnlyPlugins = [visionTool()]
|
|
12
|
+
|
|
13
|
+
export default defineConfig({
|
|
14
|
+
name: '%sourceName%',
|
|
15
|
+
title: '%projectName%',
|
|
16
|
+
|
|
17
|
+
projectId: '%projectId%',
|
|
18
|
+
dataset: '%dataset%',
|
|
19
|
+
|
|
20
|
+
plugins: [
|
|
21
|
+
structureTool({structure}),
|
|
22
|
+
shopifyDocumentActions(),
|
|
23
|
+
shopifyAssets({
|
|
24
|
+
shopifyDomain: SHOPIFY_STORE_ID,
|
|
25
|
+
}),
|
|
26
|
+
...(isDev ? devOnlyPlugins : []),
|
|
27
|
+
],
|
|
28
|
+
|
|
29
|
+
schema: {
|
|
30
|
+
types: schemaTypes,
|
|
31
|
+
},
|
|
32
|
+
})
|
|
33
|
+
`;
|
|
34
|
+
const shopifyTemplate = {
|
|
35
|
+
configTemplate,
|
|
36
|
+
dependencies: {
|
|
37
|
+
'@portabletext/toolkit': '^2.0.1',
|
|
38
|
+
'@sanity/icons': '^2.11.0',
|
|
39
|
+
'@sanity/ui': '^2.0.0',
|
|
40
|
+
'@types/lodash.get': '^4.4.7',
|
|
41
|
+
'lodash.get': '^4.4.2',
|
|
42
|
+
'pluralize-esm': '^9.0.4',
|
|
43
|
+
'sanity-plugin-shopify-assets': '^1.1.0'
|
|
44
|
+
},
|
|
45
|
+
typescriptOnly: true
|
|
46
|
+
};
|
|
47
|
+
export default shopifyTemplate;
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=shopifyOnline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/actions/init/templates/shopifyOnline.ts"],"sourcesContent":["import {type ProjectTemplate} from '../types.js'\n\nconst configTemplate = `\nimport {shopifyAssets} from 'sanity-plugin-shopify-assets'\nimport {defineConfig, isDev} from 'sanity'\nimport {structureTool} from 'sanity/structure'\nimport {visionTool} from '@sanity/vision'\nimport {shopifyDocumentActions} from './plugins/shopifyDocumentActions'\nimport {schemaTypes} from './schemaTypes'\nimport {structure} from './structure'\nimport {SHOPIFY_STORE_ID} from './constants'\n\nconst devOnlyPlugins = [visionTool()]\n\nexport default defineConfig({\n name: '%sourceName%',\n title: '%projectName%',\n\n projectId: '%projectId%',\n dataset: '%dataset%',\n\n plugins: [\n structureTool({structure}),\n shopifyDocumentActions(),\n shopifyAssets({\n shopifyDomain: SHOPIFY_STORE_ID,\n }),\n ...(isDev ? devOnlyPlugins : []),\n ],\n\n schema: {\n types: schemaTypes,\n },\n})\n`\n\nconst shopifyTemplate: ProjectTemplate = {\n configTemplate,\n dependencies: {\n '@portabletext/toolkit': '^2.0.1',\n '@sanity/icons': '^2.11.0',\n '@sanity/ui': '^2.0.0',\n '@types/lodash.get': '^4.4.7',\n 'lodash.get': '^4.4.2',\n 'pluralize-esm': '^9.0.4',\n 'sanity-plugin-shopify-assets': '^1.1.0',\n },\n typescriptOnly: true,\n}\nexport default shopifyTemplate\n"],"names":["configTemplate","shopifyTemplate","dependencies","typescriptOnly"],"mappings":"AAEA,MAAMA,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCxB,CAAC;AAED,MAAMC,kBAAmC;IACvCD;IACAE,cAAc;QACZ,yBAAyB;QACzB,iBAAiB;QACjB,cAAc;QACd,qBAAqB;QACrB,cAAc;QACd,iBAAiB;QACjB,gCAAgC;IAClC;IACAC,gBAAgB;AAClB;AACA,eAAeF,gBAAe"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/init/types.ts"],"sourcesContent":["import {Framework} from '@vercel/frameworks'\n\nimport {GenerateConfigOptions} from './createStudioConfig'\n\nexport type VersionedFramework = Framework & {\n detectedVersion?: string\n}\n\nexport interface ProjectTemplate {\n configTemplate?: ((variables: GenerateConfigOptions['variables']) => string) | string\n datasetUrl?: string\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n entry?: string\n importPrompt?: string\n scripts?: Record<string, string>\n typescriptOnly?: boolean\n}\n"],"names":[],"mappings":"AAQA,WASC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { subdebug } from '@sanity/cli-core';
|
|
2
|
+
import { updateProjectInitalTemplate } from '../../services/projects.js';
|
|
3
|
+
const debug = subdebug('init:updateInitialTemplateMetadata');
|
|
4
|
+
export async function updateInitialTemplateMetadata(projectId, templateName) {
|
|
5
|
+
try {
|
|
6
|
+
await updateProjectInitalTemplate(projectId, templateName);
|
|
7
|
+
} catch (err) {
|
|
8
|
+
// Non-critical that we update this metadata, and user does not need to be aware
|
|
9
|
+
let message = typeof err === 'string' ? err : '<unknown error>';
|
|
10
|
+
if (err instanceof Error) {
|
|
11
|
+
message = err.message;
|
|
12
|
+
}
|
|
13
|
+
debug('Failed to update initial template metadata for project: %s', message);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=updateInitialTemplateMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/init/updateInitialTemplateMetadata.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core'\n\nimport {updateProjectInitalTemplate} from '../../services/projects.js'\n\nconst debug = subdebug('init:updateInitialTemplateMetadata')\n\nexport async function updateInitialTemplateMetadata(\n projectId: string,\n templateName: string,\n): Promise<void> {\n try {\n await updateProjectInitalTemplate(projectId, templateName)\n } catch (err: unknown) {\n // Non-critical that we update this metadata, and user does not need to be aware\n let message = typeof err === 'string' ? err : '<unknown error>'\n if (err instanceof Error) {\n message = err.message\n }\n\n debug('Failed to update initial template metadata for project: %s', message)\n }\n}\n"],"names":["subdebug","updateProjectInitalTemplate","debug","updateInitialTemplateMetadata","projectId","templateName","err","message","Error"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,mBAAkB;AAEzC,SAAQC,2BAA2B,QAAO,6BAA4B;AAEtE,MAAMC,QAAQF,SAAS;AAEvB,OAAO,eAAeG,8BACpBC,SAAiB,EACjBC,YAAoB;IAEpB,IAAI;QACF,MAAMJ,4BAA4BG,WAAWC;IAC/C,EAAE,OAAOC,KAAc;QACrB,gFAAgF;QAChF,IAAIC,UAAU,OAAOD,QAAQ,WAAWA,MAAM;QAC9C,IAAIA,eAAeE,OAAO;YACxBD,UAAUD,IAAIC,OAAO;QACvB;QAEAL,MAAM,8DAA8DK;IACtE;AACF"}
|
|
@@ -1,68 +1,73 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import { subdebug } from '@sanity/cli-core';
|
|
4
|
+
import { parse as parseJsonc } from 'jsonc-parser';
|
|
5
|
+
import { EDITOR_CONFIGS } from './editorConfigs.js';
|
|
6
|
+
const debug = subdebug('mcp:detectAvailableEditors');
|
|
5
7
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// Cursor detection
|
|
14
|
-
const cursorDir = path.join(homeDir, '.cursor');
|
|
15
|
-
if (existsSync(cursorDir)) {
|
|
16
|
-
editors.push({
|
|
17
|
-
configKey: 'mcpServers',
|
|
18
|
-
configPath: path.join(cursorDir, 'mcp.json'),
|
|
19
|
-
name: 'Cursor'
|
|
20
|
-
});
|
|
8
|
+
* Safely parse JSON/JSONC config file content
|
|
9
|
+
* Returns parsed config or null if unparseable
|
|
10
|
+
*/ function parseConfig(content) {
|
|
11
|
+
const trimmed = content.trim();
|
|
12
|
+
if (trimmed === '') {
|
|
13
|
+
return {} // Empty file - safe to write, treat as empty config
|
|
14
|
+
;
|
|
21
15
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
case 'win32':
|
|
31
|
-
{
|
|
32
|
-
// APPDATA is required on Windows for VS Code config path
|
|
33
|
-
if (process.env.APPDATA) {
|
|
34
|
-
vscodeConfigDir = path.join(process.env.APPDATA, 'Code/User');
|
|
35
|
-
}
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
default:
|
|
39
|
-
{
|
|
40
|
-
// linux
|
|
41
|
-
vscodeConfigDir = path.join(homeDir, '.config/Code/User');
|
|
42
|
-
}
|
|
16
|
+
const errors = [];
|
|
17
|
+
const parsed = parseJsonc(content, errors, {
|
|
18
|
+
allowTrailingComma: true
|
|
19
|
+
});
|
|
20
|
+
if (errors.length > 0 || typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
21
|
+
return null // Parse failed
|
|
22
|
+
;
|
|
43
23
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
24
|
+
return parsed;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if an editor's config is usable and whether Sanity MCP is already configured.
|
|
28
|
+
* Returns null only if config exists but can't be parsed (to avoid data loss).
|
|
29
|
+
*/ async function checkEditorConfig(name, configPath) {
|
|
30
|
+
const { configKey } = EDITOR_CONFIGS[name];
|
|
31
|
+
// Config file doesn't exist - can create it
|
|
32
|
+
if (!existsSync(configPath)) {
|
|
33
|
+
return {
|
|
34
|
+
configPath,
|
|
35
|
+
configured: false,
|
|
36
|
+
name
|
|
37
|
+
};
|
|
50
38
|
}
|
|
51
|
-
//
|
|
39
|
+
// Config exists - try to parse it
|
|
52
40
|
try {
|
|
53
|
-
await
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
41
|
+
const content = await fs.readFile(configPath, 'utf8');
|
|
42
|
+
const config = parseConfig(content);
|
|
43
|
+
if (config === null) {
|
|
44
|
+
debug('Skipping %s: could not parse %s', name, configPath);
|
|
45
|
+
return null // Can't parse - skip this editor
|
|
46
|
+
;
|
|
47
|
+
}
|
|
48
|
+
// Check if Sanity MCP is already configured
|
|
49
|
+
const configured = Boolean(config[configKey]?.Sanity);
|
|
50
|
+
return {
|
|
51
|
+
configPath,
|
|
52
|
+
configured,
|
|
53
|
+
name
|
|
54
|
+
};
|
|
55
|
+
} catch (err) {
|
|
56
|
+
debug('Skipping %s: could not read %s: %s', name, configPath, err);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Detect which editors are installed and have parseable configs.
|
|
62
|
+
* Editors with unparseable configs are skipped to avoid data loss.
|
|
63
|
+
*/ export async function detectAvailableEditors() {
|
|
64
|
+
const editors = [];
|
|
65
|
+
for (const [name, config] of Object.entries(EDITOR_CONFIGS)){
|
|
66
|
+
const configPath = await config.detect();
|
|
67
|
+
if (configPath) {
|
|
68
|
+
const editor = await checkEditorConfig(name, configPath);
|
|
69
|
+
if (editor) editors.push(editor);
|
|
70
|
+
}
|
|
66
71
|
}
|
|
67
72
|
return editors;
|
|
68
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/mcp/detectAvailableEditors.ts"],"sourcesContent":["import {existsSync} from 'node:fs'\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/mcp/detectAvailableEditors.ts"],"sourcesContent":["import {existsSync} from 'node:fs'\nimport fs from 'node:fs/promises'\n\nimport {subdebug} from '@sanity/cli-core'\nimport {type ParseError, parse as parseJsonc} from 'jsonc-parser'\n\nimport {EDITOR_CONFIGS, type EditorName} from './editorConfigs.js'\n\nconst debug = subdebug('mcp:detectAvailableEditors')\n\nexport interface Editor {\n configPath: string\n /** Whether Sanity MCP is already configured for this editor */\n configured: boolean\n name: EditorName\n}\n\ninterface MCPConfig {\n [key: string]: Record<string, unknown> | undefined\n}\n\n/**\n * Safely parse JSON/JSONC config file content\n * Returns parsed config or null if unparseable\n */\nfunction parseConfig(content: string): MCPConfig | null {\n const trimmed = content.trim()\n if (trimmed === '') {\n return {} // Empty file - safe to write, treat as empty config\n }\n\n const errors: ParseError[] = []\n const parsed = parseJsonc(content, errors, {allowTrailingComma: true})\n\n if (errors.length > 0 || typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n return null // Parse failed\n }\n\n return parsed as MCPConfig\n}\n\n/**\n * Check if an editor's config is usable and whether Sanity MCP is already configured.\n * Returns null only if config exists but can't be parsed (to avoid data loss).\n */\nasync function checkEditorConfig(name: EditorName, configPath: string): Promise<Editor | null> {\n const {configKey} = EDITOR_CONFIGS[name]\n\n // Config file doesn't exist - can create it\n if (!existsSync(configPath)) {\n return {configPath, configured: false, name}\n }\n\n // Config exists - try to parse it\n try {\n const content = await fs.readFile(configPath, 'utf8')\n const config = parseConfig(content)\n\n if (config === null) {\n debug('Skipping %s: could not parse %s', name, configPath)\n return null // Can't parse - skip this editor\n }\n\n // Check if Sanity MCP is already configured\n const configured = Boolean(config[configKey]?.Sanity)\n\n return {configPath, configured, name}\n } catch (err) {\n debug('Skipping %s: could not read %s: %s', name, configPath, err)\n return null\n }\n}\n\n/**\n * Detect which editors are installed and have parseable configs.\n * Editors with unparseable configs are skipped to avoid data loss.\n */\nexport async function detectAvailableEditors(): Promise<Editor[]> {\n const editors: Editor[] = []\n\n for (const [name, config] of Object.entries(EDITOR_CONFIGS)) {\n const configPath = await config.detect()\n if (configPath) {\n const editor = await checkEditorConfig(name as EditorName, configPath)\n if (editor) editors.push(editor)\n }\n }\n\n return editors\n}\n"],"names":["existsSync","fs","subdebug","parse","parseJsonc","EDITOR_CONFIGS","debug","parseConfig","content","trimmed","trim","errors","parsed","allowTrailingComma","length","Array","isArray","checkEditorConfig","name","configPath","configKey","configured","readFile","config","Boolean","Sanity","err","detectAvailableEditors","editors","Object","entries","detect","editor","push"],"mappings":"AAAA,SAAQA,UAAU,QAAO,UAAS;AAClC,OAAOC,QAAQ,mBAAkB;AAEjC,SAAQC,QAAQ,QAAO,mBAAkB;AACzC,SAAyBC,SAASC,UAAU,QAAO,eAAc;AAEjE,SAAQC,cAAc,QAAwB,qBAAoB;AAElE,MAAMC,QAAQJ,SAAS;AAavB;;;CAGC,GACD,SAASK,YAAYC,OAAe;IAClC,MAAMC,UAAUD,QAAQE,IAAI;IAC5B,IAAID,YAAY,IAAI;QAClB,OAAO,CAAC,EAAE,oDAAoD;;IAChE;IAEA,MAAME,SAAuB,EAAE;IAC/B,MAAMC,SAASR,WAAWI,SAASG,QAAQ;QAACE,oBAAoB;IAAI;IAEpE,IAAIF,OAAOG,MAAM,GAAG,KAAK,OAAOF,WAAW,YAAYA,WAAW,QAAQG,MAAMC,OAAO,CAACJ,SAAS;QAC/F,OAAO,KAAK,eAAe;;IAC7B;IAEA,OAAOA;AACT;AAEA;;;CAGC,GACD,eAAeK,kBAAkBC,IAAgB,EAAEC,UAAkB;IACnE,MAAM,EAACC,SAAS,EAAC,GAAGf,cAAc,CAACa,KAAK;IAExC,4CAA4C;IAC5C,IAAI,CAAClB,WAAWmB,aAAa;QAC3B,OAAO;YAACA;YAAYE,YAAY;YAAOH;QAAI;IAC7C;IAEA,kCAAkC;IAClC,IAAI;QACF,MAAMV,UAAU,MAAMP,GAAGqB,QAAQ,CAACH,YAAY;QAC9C,MAAMI,SAAShB,YAAYC;QAE3B,IAAIe,WAAW,MAAM;YACnBjB,MAAM,mCAAmCY,MAAMC;YAC/C,OAAO,KAAK,iCAAiC;;QAC/C;QAEA,4CAA4C;QAC5C,MAAME,aAAaG,QAAQD,MAAM,CAACH,UAAU,EAAEK;QAE9C,OAAO;YAACN;YAAYE;YAAYH;QAAI;IACtC,EAAE,OAAOQ,KAAK;QACZpB,MAAM,sCAAsCY,MAAMC,YAAYO;QAC9D,OAAO;IACT;AACF;AAEA;;;CAGC,GACD,OAAO,eAAeC;IACpB,MAAMC,UAAoB,EAAE;IAE5B,KAAK,MAAM,CAACV,MAAMK,OAAO,IAAIM,OAAOC,OAAO,CAACzB,gBAAiB;QAC3D,MAAMc,aAAa,MAAMI,OAAOQ,MAAM;QACtC,IAAIZ,YAAY;YACd,MAAMa,SAAS,MAAMf,kBAAkBC,MAAoBC;YAC3D,IAAIa,QAAQJ,QAAQK,IAAI,CAACD;QAC3B;IACF;IAEA,OAAOJ;AACT"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { execa } from 'execa';
|
|
5
|
+
import { MCP_SERVER_URL } from '../../services/mcp.js';
|
|
6
|
+
const defaultHttpConfig = (token)=>({
|
|
7
|
+
headers: {
|
|
8
|
+
Authorization: `Bearer ${token}`
|
|
9
|
+
},
|
|
10
|
+
type: 'http',
|
|
11
|
+
url: MCP_SERVER_URL
|
|
12
|
+
});
|
|
13
|
+
const homeDir = os.homedir();
|
|
14
|
+
/**
|
|
15
|
+
* Centralized editor configuration including detection logic.
|
|
16
|
+
* To add a new editor: add an entry here - EditorName type is derived automatically.
|
|
17
|
+
*/ export const EDITOR_CONFIGS = {
|
|
18
|
+
'Claude Code': {
|
|
19
|
+
buildServerConfig: defaultHttpConfig,
|
|
20
|
+
configKey: 'mcpServers',
|
|
21
|
+
detect: async ()=>{
|
|
22
|
+
try {
|
|
23
|
+
await execa('claude', [
|
|
24
|
+
'--version'
|
|
25
|
+
], {
|
|
26
|
+
stdio: 'pipe',
|
|
27
|
+
timeout: 5000
|
|
28
|
+
});
|
|
29
|
+
return path.join(homeDir, '.claude.json');
|
|
30
|
+
} catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
Cursor: {
|
|
36
|
+
buildServerConfig: defaultHttpConfig,
|
|
37
|
+
configKey: 'mcpServers',
|
|
38
|
+
detect: async ()=>{
|
|
39
|
+
const cursorDir = path.join(homeDir, '.cursor');
|
|
40
|
+
return existsSync(cursorDir) ? path.join(cursorDir, 'mcp.json') : null;
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
OpenCode: {
|
|
44
|
+
buildServerConfig: (token)=>({
|
|
45
|
+
headers: {
|
|
46
|
+
Authorization: `Bearer ${token}`
|
|
47
|
+
},
|
|
48
|
+
type: 'remote',
|
|
49
|
+
url: MCP_SERVER_URL
|
|
50
|
+
}),
|
|
51
|
+
configKey: 'mcp',
|
|
52
|
+
detect: async ()=>{
|
|
53
|
+
try {
|
|
54
|
+
await execa('opencode', [
|
|
55
|
+
'--version'
|
|
56
|
+
], {
|
|
57
|
+
stdio: 'pipe',
|
|
58
|
+
timeout: 5000
|
|
59
|
+
});
|
|
60
|
+
return path.join(homeDir, '.config/opencode/opencode.json');
|
|
61
|
+
} catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
'VS Code': {
|
|
67
|
+
buildServerConfig: defaultHttpConfig,
|
|
68
|
+
configKey: 'servers',
|
|
69
|
+
detect: async ()=>{
|
|
70
|
+
let configDir = null;
|
|
71
|
+
switch(process.platform){
|
|
72
|
+
case 'darwin':
|
|
73
|
+
{
|
|
74
|
+
configDir = path.join(homeDir, 'Library/Application Support/Code/User');
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case 'win32':
|
|
78
|
+
{
|
|
79
|
+
if (process.env.APPDATA) {
|
|
80
|
+
configDir = path.join(process.env.APPDATA, 'Code/User');
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
default:
|
|
85
|
+
{
|
|
86
|
+
configDir = path.join(homeDir, '.config/Code/User');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return configDir && existsSync(configDir) ? path.join(configDir, 'mcp.json') : null;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
'VS Code Insiders': {
|
|
93
|
+
buildServerConfig: defaultHttpConfig,
|
|
94
|
+
configKey: 'servers',
|
|
95
|
+
detect: async ()=>{
|
|
96
|
+
let configDir = null;
|
|
97
|
+
switch(process.platform){
|
|
98
|
+
case 'darwin':
|
|
99
|
+
{
|
|
100
|
+
configDir = path.join(homeDir, 'Library/Application Support/Code - Insiders/User');
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case 'win32':
|
|
104
|
+
{
|
|
105
|
+
if (process.env.APPDATA) {
|
|
106
|
+
configDir = path.join(process.env.APPDATA, 'Code - Insiders/User');
|
|
107
|
+
}
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
default:
|
|
111
|
+
{
|
|
112
|
+
configDir = path.join(homeDir, '.config/Code - Insiders/User');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return configDir && existsSync(configDir) ? path.join(configDir, 'mcp.json') : null;
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
Zed: {
|
|
119
|
+
buildServerConfig: (token)=>({
|
|
120
|
+
headers: {
|
|
121
|
+
Authorization: `Bearer ${token}`
|
|
122
|
+
},
|
|
123
|
+
settings: {},
|
|
124
|
+
url: MCP_SERVER_URL
|
|
125
|
+
}),
|
|
126
|
+
configKey: 'context_servers',
|
|
127
|
+
detect: async ()=>{
|
|
128
|
+
let configDir = null;
|
|
129
|
+
switch(process.platform){
|
|
130
|
+
case 'win32':
|
|
131
|
+
{
|
|
132
|
+
if (process.env.APPDATA) {
|
|
133
|
+
configDir = path.join(process.env.APPDATA, 'Zed');
|
|
134
|
+
}
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
default:
|
|
138
|
+
{
|
|
139
|
+
configDir = path.join(homeDir, '.config/zed');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return configDir && existsSync(configDir) ? path.join(configDir, 'settings.json') : null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
//# sourceMappingURL=editorConfigs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/mcp/editorConfigs.ts"],"sourcesContent":["import {existsSync} from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport {execa} from 'execa'\n\nimport {MCP_SERVER_URL} from '../../services/mcp.js'\n\ninterface EditorConfig {\n buildServerConfig: (token: string) => Record<string, unknown>\n configKey: string\n /** Returns the config file path if editor is detected, null otherwise */\n detect: () => Promise<string | null>\n}\n\nconst defaultHttpConfig = (token: string) => ({\n headers: {Authorization: `Bearer ${token}`},\n type: 'http',\n url: MCP_SERVER_URL,\n})\n\nconst homeDir = os.homedir()\n\n/**\n * Centralized editor configuration including detection logic.\n * To add a new editor: add an entry here - EditorName type is derived automatically.\n */\nexport const EDITOR_CONFIGS = {\n 'Claude Code': {\n buildServerConfig: defaultHttpConfig,\n configKey: 'mcpServers',\n detect: async () => {\n try {\n await execa('claude', ['--version'], {stdio: 'pipe', timeout: 5000})\n return path.join(homeDir, '.claude.json')\n } catch {\n return null\n }\n },\n },\n Cursor: {\n buildServerConfig: defaultHttpConfig,\n configKey: 'mcpServers',\n detect: async () => {\n const cursorDir = path.join(homeDir, '.cursor')\n return existsSync(cursorDir) ? path.join(cursorDir, 'mcp.json') : null\n },\n },\n OpenCode: {\n buildServerConfig: (token) => ({\n headers: {Authorization: `Bearer ${token}`},\n type: 'remote',\n url: MCP_SERVER_URL,\n }),\n configKey: 'mcp',\n detect: async () => {\n try {\n await execa('opencode', ['--version'], {stdio: 'pipe', timeout: 5000})\n return path.join(homeDir, '.config/opencode/opencode.json')\n } catch {\n return null\n }\n },\n },\n 'VS Code': {\n buildServerConfig: defaultHttpConfig,\n configKey: 'servers',\n detect: async () => {\n let configDir: string | null = null\n switch (process.platform) {\n case 'darwin': {\n configDir = path.join(homeDir, 'Library/Application Support/Code/User')\n break\n }\n case 'win32': {\n if (process.env.APPDATA) {\n configDir = path.join(process.env.APPDATA, 'Code/User')\n }\n break\n }\n default: {\n configDir = path.join(homeDir, '.config/Code/User')\n }\n }\n return configDir && existsSync(configDir) ? path.join(configDir, 'mcp.json') : null\n },\n },\n 'VS Code Insiders': {\n buildServerConfig: defaultHttpConfig,\n configKey: 'servers',\n detect: async () => {\n let configDir: string | null = null\n switch (process.platform) {\n case 'darwin': {\n configDir = path.join(homeDir, 'Library/Application Support/Code - Insiders/User')\n break\n }\n case 'win32': {\n if (process.env.APPDATA) {\n configDir = path.join(process.env.APPDATA, 'Code - Insiders/User')\n }\n break\n }\n default: {\n configDir = path.join(homeDir, '.config/Code - Insiders/User')\n }\n }\n return configDir && existsSync(configDir) ? path.join(configDir, 'mcp.json') : null\n },\n },\n Zed: {\n buildServerConfig: (token) => ({\n headers: {Authorization: `Bearer ${token}`},\n settings: {},\n url: MCP_SERVER_URL,\n }),\n configKey: 'context_servers',\n detect: async () => {\n let configDir: string | null = null\n switch (process.platform) {\n case 'win32': {\n if (process.env.APPDATA) {\n configDir = path.join(process.env.APPDATA, 'Zed')\n }\n break\n }\n default: {\n configDir = path.join(homeDir, '.config/zed')\n }\n }\n return configDir && existsSync(configDir) ? path.join(configDir, 'settings.json') : null\n },\n },\n} satisfies Record<string, EditorConfig>\n\n/** Derived from EDITOR_CONFIGS keys - add a new editor there and this updates automatically */\nexport type EditorName = keyof typeof EDITOR_CONFIGS\n"],"names":["existsSync","os","path","execa","MCP_SERVER_URL","defaultHttpConfig","token","headers","Authorization","type","url","homeDir","homedir","EDITOR_CONFIGS","buildServerConfig","configKey","detect","stdio","timeout","join","Cursor","cursorDir","OpenCode","configDir","process","platform","env","APPDATA","Zed","settings"],"mappings":"AAAA,SAAQA,UAAU,QAAO,UAAS;AAClC,OAAOC,QAAQ,UAAS;AACxB,OAAOC,UAAU,YAAW;AAE5B,SAAQC,KAAK,QAAO,QAAO;AAE3B,SAAQC,cAAc,QAAO,wBAAuB;AASpD,MAAMC,oBAAoB,CAACC,QAAmB,CAAA;QAC5CC,SAAS;YAACC,eAAe,CAAC,OAAO,EAAEF,OAAO;QAAA;QAC1CG,MAAM;QACNC,KAAKN;IACP,CAAA;AAEA,MAAMO,UAAUV,GAAGW,OAAO;AAE1B;;;CAGC,GACD,OAAO,MAAMC,iBAAiB;IAC5B,eAAe;QACbC,mBAAmBT;QACnBU,WAAW;QACXC,QAAQ;YACN,IAAI;gBACF,MAAMb,MAAM,UAAU;oBAAC;iBAAY,EAAE;oBAACc,OAAO;oBAAQC,SAAS;gBAAI;gBAClE,OAAOhB,KAAKiB,IAAI,CAACR,SAAS;YAC5B,EAAE,OAAM;gBACN,OAAO;YACT;QACF;IACF;IACAS,QAAQ;QACNN,mBAAmBT;QACnBU,WAAW;QACXC,QAAQ;YACN,MAAMK,YAAYnB,KAAKiB,IAAI,CAACR,SAAS;YACrC,OAAOX,WAAWqB,aAAanB,KAAKiB,IAAI,CAACE,WAAW,cAAc;QACpE;IACF;IACAC,UAAU;QACRR,mBAAmB,CAACR,QAAW,CAAA;gBAC7BC,SAAS;oBAACC,eAAe,CAAC,OAAO,EAAEF,OAAO;gBAAA;gBAC1CG,MAAM;gBACNC,KAAKN;YACP,CAAA;QACAW,WAAW;QACXC,QAAQ;YACN,IAAI;gBACF,MAAMb,MAAM,YAAY;oBAAC;iBAAY,EAAE;oBAACc,OAAO;oBAAQC,SAAS;gBAAI;gBACpE,OAAOhB,KAAKiB,IAAI,CAACR,SAAS;YAC5B,EAAE,OAAM;gBACN,OAAO;YACT;QACF;IACF;IACA,WAAW;QACTG,mBAAmBT;QACnBU,WAAW;QACXC,QAAQ;YACN,IAAIO,YAA2B;YAC/B,OAAQC,QAAQC,QAAQ;gBACtB,KAAK;oBAAU;wBACbF,YAAYrB,KAAKiB,IAAI,CAACR,SAAS;wBAC/B;oBACF;gBACA,KAAK;oBAAS;wBACZ,IAAIa,QAAQE,GAAG,CAACC,OAAO,EAAE;4BACvBJ,YAAYrB,KAAKiB,IAAI,CAACK,QAAQE,GAAG,CAACC,OAAO,EAAE;wBAC7C;wBACA;oBACF;gBACA;oBAAS;wBACPJ,YAAYrB,KAAKiB,IAAI,CAACR,SAAS;oBACjC;YACF;YACA,OAAOY,aAAavB,WAAWuB,aAAarB,KAAKiB,IAAI,CAACI,WAAW,cAAc;QACjF;IACF;IACA,oBAAoB;QAClBT,mBAAmBT;QACnBU,WAAW;QACXC,QAAQ;YACN,IAAIO,YAA2B;YAC/B,OAAQC,QAAQC,QAAQ;gBACtB,KAAK;oBAAU;wBACbF,YAAYrB,KAAKiB,IAAI,CAACR,SAAS;wBAC/B;oBACF;gBACA,KAAK;oBAAS;wBACZ,IAAIa,QAAQE,GAAG,CAACC,OAAO,EAAE;4BACvBJ,YAAYrB,KAAKiB,IAAI,CAACK,QAAQE,GAAG,CAACC,OAAO,EAAE;wBAC7C;wBACA;oBACF;gBACA;oBAAS;wBACPJ,YAAYrB,KAAKiB,IAAI,CAACR,SAAS;oBACjC;YACF;YACA,OAAOY,aAAavB,WAAWuB,aAAarB,KAAKiB,IAAI,CAACI,WAAW,cAAc;QACjF;IACF;IACAK,KAAK;QACHd,mBAAmB,CAACR,QAAW,CAAA;gBAC7BC,SAAS;oBAACC,eAAe,CAAC,OAAO,EAAEF,OAAO;gBAAA;gBAC1CuB,UAAU,CAAC;gBACXnB,KAAKN;YACP,CAAA;QACAW,WAAW;QACXC,QAAQ;YACN,IAAIO,YAA2B;YAC/B,OAAQC,QAAQC,QAAQ;gBACtB,KAAK;oBAAS;wBACZ,IAAID,QAAQE,GAAG,CAACC,OAAO,EAAE;4BACvBJ,YAAYrB,KAAKiB,IAAI,CAACK,QAAQE,GAAG,CAACC,OAAO,EAAE;wBAC7C;wBACA;oBACF;gBACA;oBAAS;wBACPJ,YAAYrB,KAAKiB,IAAI,CAACR,SAAS;oBACjC;YACF;YACA,OAAOY,aAAavB,WAAWuB,aAAarB,KAAKiB,IAAI,CAACI,WAAW,mBAAmB;QACtF;IACF;AACF,EAAwC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { checkbox } from '@sanity/cli-core/ux';
|
|
2
|
+
/**
|
|
3
|
+
* Prompt user to select which editors to configure
|
|
4
|
+
* Shows existing config status - unconfigured editors are pre-selected,
|
|
5
|
+
* configured editors show "(already installed)" and are not pre-selected
|
|
6
|
+
*/ export async function promptForMCPSetup(editors) {
|
|
7
|
+
const editorChoices = editors.map((e)=>({
|
|
8
|
+
checked: !e.configured,
|
|
9
|
+
name: e.configured ? `${e.name} (already installed)` : e.name,
|
|
10
|
+
value: e.name
|
|
11
|
+
}));
|
|
12
|
+
const result = await checkbox({
|
|
13
|
+
choices: editorChoices,
|
|
14
|
+
message: 'Configure Sanity MCP server?'
|
|
15
|
+
});
|
|
16
|
+
const selectedNames = result;
|
|
17
|
+
// User can deselect all to skip
|
|
18
|
+
if (!selectedNames || selectedNames.length === 0) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return editors.filter((e)=>selectedNames.includes(e.name));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=promptForMCPSetup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/mcp/promptForMCPSetup.ts"],"sourcesContent":["import {checkbox} from '@sanity/cli-core/ux'\n\nimport {type Editor} from './types.js'\n\n/**\n * Prompt user to select which editors to configure\n * Shows existing config status - unconfigured editors are pre-selected,\n * configured editors show \"(already installed)\" and are not pre-selected\n */\nexport async function promptForMCPSetup(editors: Editor[]): Promise<Editor[] | null> {\n const editorChoices = editors.map((e) => ({\n checked: !e.configured, // Only pre-select if NOT already configured\n name: e.configured ? `${e.name} (already installed)` : e.name,\n value: e.name,\n }))\n\n const result = await checkbox({\n choices: editorChoices,\n message: 'Configure Sanity MCP server?',\n })\n\n const selectedNames = result\n\n // User can deselect all to skip\n if (!selectedNames || selectedNames.length === 0) {\n return null\n }\n\n return editors.filter((e) => selectedNames.includes(e.name))\n}\n"],"names":["checkbox","promptForMCPSetup","editors","editorChoices","map","e","checked","configured","name","value","result","choices","message","selectedNames","length","filter","includes"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,sBAAqB;AAI5C;;;;CAIC,GACD,OAAO,eAAeC,kBAAkBC,OAAiB;IACvD,MAAMC,gBAAgBD,QAAQE,GAAG,CAAC,CAACC,IAAO,CAAA;YACxCC,SAAS,CAACD,EAAEE,UAAU;YACtBC,MAAMH,EAAEE,UAAU,GAAG,GAAGF,EAAEG,IAAI,CAAC,oBAAoB,CAAC,GAAGH,EAAEG,IAAI;YAC7DC,OAAOJ,EAAEG,IAAI;QACf,CAAA;IAEA,MAAME,SAAS,MAAMV,SAAS;QAC5BW,SAASR;QACTS,SAAS;IACX;IAEA,MAAMC,gBAAgBH;IAEtB,gCAAgC;IAChC,IAAI,CAACG,iBAAiBA,cAAcC,MAAM,KAAK,GAAG;QAChD,OAAO;IACT;IAEA,OAAOZ,QAAQa,MAAM,CAAC,CAACV,IAAMQ,cAAcG,QAAQ,CAACX,EAAEG,IAAI;AAC5D"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ux } from '@oclif/core';
|
|
2
|
+
import { subdebug } from '@sanity/cli-core';
|
|
3
|
+
import { logSymbols } from '@sanity/cli-core/ux';
|
|
4
|
+
import { createMCPToken, MCP_SERVER_URL } from '../../services/mcp.js';
|
|
5
|
+
import { detectAvailableEditors } from './detectAvailableEditors.js';
|
|
6
|
+
import { promptForMCPSetup } from './promptForMCPSetup.js';
|
|
7
|
+
import { writeMCPConfig } from './writeMCPConfig.js';
|
|
8
|
+
const mcpDebug = subdebug('mcp:setup');
|
|
9
|
+
const NO_EDITORS_DETECTED_MESSAGE = `Couldn't auto-configure Sanity MCP server for your editor. Visit ${MCP_SERVER_URL} for setup instructions.`;
|
|
10
|
+
/**
|
|
11
|
+
* Main MCP setup orchestration
|
|
12
|
+
* Opt-out by default: runs automatically unless skipMcp flag is set
|
|
13
|
+
*/ export async function setupMCP(mcp) {
|
|
14
|
+
// 1. Check for explicit opt-out
|
|
15
|
+
if (mcp === false) {
|
|
16
|
+
ux.warn('Skipping MCP configuration due to --no-mcp flag');
|
|
17
|
+
return {
|
|
18
|
+
configuredEditors: [],
|
|
19
|
+
detectedEditors: [],
|
|
20
|
+
skipped: true
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// 2. Detect available editors (filters out unparseable configs)
|
|
24
|
+
const editors = await detectAvailableEditors();
|
|
25
|
+
const detectedEditors = editors.map((e)=>e.name);
|
|
26
|
+
mcpDebug('Detected %d editors: %s', detectedEditors.length, detectedEditors);
|
|
27
|
+
if (editors.length === 0) {
|
|
28
|
+
ux.warn(NO_EDITORS_DETECTED_MESSAGE);
|
|
29
|
+
return {
|
|
30
|
+
configuredEditors: [],
|
|
31
|
+
detectedEditors,
|
|
32
|
+
skipped: true
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// 3. Prompt user (shows existing config status, only pre-selects unconfigured editors)
|
|
36
|
+
const selected = await promptForMCPSetup(editors);
|
|
37
|
+
if (!selected || selected.length === 0) {
|
|
38
|
+
// User deselected all editors
|
|
39
|
+
ux.stdout('MCP configuration skipped');
|
|
40
|
+
return {
|
|
41
|
+
configuredEditors: [],
|
|
42
|
+
detectedEditors,
|
|
43
|
+
skipped: true
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// 4. Create child token for MCP
|
|
47
|
+
let token;
|
|
48
|
+
try {
|
|
49
|
+
token = await createMCPToken();
|
|
50
|
+
} catch (error) {
|
|
51
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
52
|
+
mcpDebug('Error creating MCP token', error);
|
|
53
|
+
ux.warn(`Could not configure MCP: ${err.message}`);
|
|
54
|
+
ux.warn('You can set up MCP manually later using https://mcp.sanity.io');
|
|
55
|
+
return {
|
|
56
|
+
configuredEditors: [],
|
|
57
|
+
detectedEditors,
|
|
58
|
+
error: err,
|
|
59
|
+
skipped: false
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// 5. Write configs for each selected editor
|
|
63
|
+
try {
|
|
64
|
+
for (const editor of selected){
|
|
65
|
+
await writeMCPConfig(editor, token);
|
|
66
|
+
}
|
|
67
|
+
} catch (error) {
|
|
68
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
69
|
+
mcpDebug('Error writing MCP config', error);
|
|
70
|
+
ux.warn(`Could not configure MCP: ${err.message}`);
|
|
71
|
+
ux.warn('You can set up MCP manually later using https://mcp.sanity.io');
|
|
72
|
+
return {
|
|
73
|
+
configuredEditors: [],
|
|
74
|
+
detectedEditors,
|
|
75
|
+
error: err,
|
|
76
|
+
skipped: false
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const configuredEditors = selected.map((e)=>e.name);
|
|
80
|
+
ux.stdout(`${logSymbols.success} MCP configured for ${configuredEditors.join(', ')}`);
|
|
81
|
+
return {
|
|
82
|
+
configuredEditors,
|
|
83
|
+
detectedEditors,
|
|
84
|
+
skipped: false
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=setupMCP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/mcp/setupMCP.ts"],"sourcesContent":["import {ux} from '@oclif/core'\nimport {subdebug} from '@sanity/cli-core'\nimport {logSymbols} from '@sanity/cli-core/ux'\n\nimport {createMCPToken, MCP_SERVER_URL} from '../../services/mcp.js'\nimport {detectAvailableEditors} from './detectAvailableEditors.js'\nimport {type EditorName} from './editorConfigs.js'\nimport {promptForMCPSetup} from './promptForMCPSetup.js'\nimport {writeMCPConfig} from './writeMCPConfig.js'\n\nconst mcpDebug = subdebug('mcp:setup')\n\nconst NO_EDITORS_DETECTED_MESSAGE = `Couldn't auto-configure Sanity MCP server for your editor. Visit ${MCP_SERVER_URL} for setup instructions.`\n\nexport interface MCPSetupResult {\n configuredEditors: EditorName[]\n detectedEditors: EditorName[]\n skipped: boolean\n\n error?: Error\n}\n\n/**\n * Main MCP setup orchestration\n * Opt-out by default: runs automatically unless skipMcp flag is set\n */\nexport async function setupMCP(mcp?: boolean): Promise<MCPSetupResult> {\n // 1. Check for explicit opt-out\n if (mcp === false) {\n ux.warn('Skipping MCP configuration due to --no-mcp flag')\n return {\n configuredEditors: [],\n detectedEditors: [],\n skipped: true,\n }\n }\n\n // 2. Detect available editors (filters out unparseable configs)\n const editors = await detectAvailableEditors()\n const detectedEditors = editors.map((e) => e.name)\n\n mcpDebug('Detected %d editors: %s', detectedEditors.length, detectedEditors)\n\n if (editors.length === 0) {\n ux.warn(NO_EDITORS_DETECTED_MESSAGE)\n return {\n configuredEditors: [],\n detectedEditors,\n skipped: true,\n }\n }\n\n // 3. Prompt user (shows existing config status, only pre-selects unconfigured editors)\n const selected = await promptForMCPSetup(editors)\n\n if (!selected || selected.length === 0) {\n // User deselected all editors\n ux.stdout('MCP configuration skipped')\n return {\n configuredEditors: [],\n detectedEditors,\n skipped: true,\n }\n }\n\n // 4. Create child token for MCP\n let token: string\n try {\n token = await createMCPToken()\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n mcpDebug('Error creating MCP token', error)\n ux.warn(`Could not configure MCP: ${err.message}`)\n ux.warn('You can set up MCP manually later using https://mcp.sanity.io')\n return {\n configuredEditors: [],\n detectedEditors,\n error: err,\n skipped: false,\n }\n }\n\n // 5. Write configs for each selected editor\n try {\n for (const editor of selected) {\n await writeMCPConfig(editor, token)\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n mcpDebug('Error writing MCP config', error)\n ux.warn(`Could not configure MCP: ${err.message}`)\n ux.warn('You can set up MCP manually later using https://mcp.sanity.io')\n return {\n configuredEditors: [],\n detectedEditors,\n error: err,\n skipped: false,\n }\n }\n\n const configuredEditors = selected.map((e) => e.name)\n ux.stdout(`${logSymbols.success} MCP configured for ${configuredEditors.join(', ')}`)\n\n return {\n configuredEditors,\n detectedEditors,\n skipped: false,\n }\n}\n"],"names":["ux","subdebug","logSymbols","createMCPToken","MCP_SERVER_URL","detectAvailableEditors","promptForMCPSetup","writeMCPConfig","mcpDebug","NO_EDITORS_DETECTED_MESSAGE","setupMCP","mcp","warn","configuredEditors","detectedEditors","skipped","editors","map","e","name","length","selected","stdout","token","error","err","Error","String","message","editor","success","join"],"mappings":"AAAA,SAAQA,EAAE,QAAO,cAAa;AAC9B,SAAQC,QAAQ,QAAO,mBAAkB;AACzC,SAAQC,UAAU,QAAO,sBAAqB;AAE9C,SAAQC,cAAc,EAAEC,cAAc,QAAO,wBAAuB;AACpE,SAAQC,sBAAsB,QAAO,8BAA6B;AAElE,SAAQC,iBAAiB,QAAO,yBAAwB;AACxD,SAAQC,cAAc,QAAO,sBAAqB;AAElD,MAAMC,WAAWP,SAAS;AAE1B,MAAMQ,8BAA8B,CAAC,iEAAiE,EAAEL,eAAe,wBAAwB,CAAC;AAUhJ;;;CAGC,GACD,OAAO,eAAeM,SAASC,GAAa;IAC1C,gCAAgC;IAChC,IAAIA,QAAQ,OAAO;QACjBX,GAAGY,IAAI,CAAC;QACR,OAAO;YACLC,mBAAmB,EAAE;YACrBC,iBAAiB,EAAE;YACnBC,SAAS;QACX;IACF;IAEA,gEAAgE;IAChE,MAAMC,UAAU,MAAMX;IACtB,MAAMS,kBAAkBE,QAAQC,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI;IAEjDX,SAAS,2BAA2BM,gBAAgBM,MAAM,EAAEN;IAE5D,IAAIE,QAAQI,MAAM,KAAK,GAAG;QACxBpB,GAAGY,IAAI,CAACH;QACR,OAAO;YACLI,mBAAmB,EAAE;YACrBC;YACAC,SAAS;QACX;IACF;IAEA,uFAAuF;IACvF,MAAMM,WAAW,MAAMf,kBAAkBU;IAEzC,IAAI,CAACK,YAAYA,SAASD,MAAM,KAAK,GAAG;QACtC,8BAA8B;QAC9BpB,GAAGsB,MAAM,CAAC;QACV,OAAO;YACLT,mBAAmB,EAAE;YACrBC;YACAC,SAAS;QACX;IACF;IAEA,gCAAgC;IAChC,IAAIQ;IACJ,IAAI;QACFA,QAAQ,MAAMpB;IAChB,EAAE,OAAOqB,OAAO;QACd,MAAMC,MAAMD,iBAAiBE,QAAQF,QAAQ,IAAIE,MAAMC,OAAOH;QAC9DhB,SAAS,4BAA4BgB;QACrCxB,GAAGY,IAAI,CAAC,CAAC,yBAAyB,EAAEa,IAAIG,OAAO,EAAE;QACjD5B,GAAGY,IAAI,CAAC;QACR,OAAO;YACLC,mBAAmB,EAAE;YACrBC;YACAU,OAAOC;YACPV,SAAS;QACX;IACF;IAEA,4CAA4C;IAC5C,IAAI;QACF,KAAK,MAAMc,UAAUR,SAAU;YAC7B,MAAMd,eAAesB,QAAQN;QAC/B;IACF,EAAE,OAAOC,OAAO;QACd,MAAMC,MAAMD,iBAAiBE,QAAQF,QAAQ,IAAIE,MAAMC,OAAOH;QAC9DhB,SAAS,4BAA4BgB;QACrCxB,GAAGY,IAAI,CAAC,CAAC,yBAAyB,EAAEa,IAAIG,OAAO,EAAE;QACjD5B,GAAGY,IAAI,CAAC;QACR,OAAO;YACLC,mBAAmB,EAAE;YACrBC;YACAU,OAAOC;YACPV,SAAS;QACX;IACF;IAEA,MAAMF,oBAAoBQ,SAASJ,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI;IACpDnB,GAAGsB,MAAM,CAAC,GAAGpB,WAAW4B,OAAO,CAAC,oBAAoB,EAAEjB,kBAAkBkB,IAAI,CAAC,OAAO;IAEpF,OAAO;QACLlB;QACAC;QACAC,SAAS;IACX;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/mcp/types.ts"],"sourcesContent":["import {type EditorName} from './editorConfigs.js'\n\nexport interface Editor {\n configPath: string\n /** Whether Sanity MCP is already configured for this editor */\n configured: boolean\n name: EditorName\n}\n"],"names":[],"mappings":"AAEA,WAKC"}
|
|
@@ -1,46 +1,41 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import fs from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
const debug = subdebug('mcp:writeMCPConfig');
|
|
4
|
+
import { applyEdits, modify } from 'jsonc-parser';
|
|
5
|
+
import { EDITOR_CONFIGS } from './editorConfigs.js';
|
|
7
6
|
/**
|
|
8
7
|
* Write MCP configuration to editor config file
|
|
9
|
-
*
|
|
8
|
+
* Uses jsonc-parser's modify/applyEdits to preserve comments
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
* @param token - MCP authentication token
|
|
10
|
+
* Note: Config parseability is already validated in detectAvailableEditors()
|
|
13
11
|
*/ export async function writeMCPConfig(editor, token) {
|
|
14
12
|
const configPath = editor.configPath;
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
const { buildServerConfig, configKey } = EDITOR_CONFIGS[editor.name];
|
|
14
|
+
// Read existing content or start with empty object
|
|
15
|
+
let content = '{}';
|
|
17
16
|
if (existsSync(configPath)) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
} catch {
|
|
22
|
-
debug(`Warning: Could not parse ${configPath}. Creating new config.`);
|
|
23
|
-
// Use empty config (will overwrite)
|
|
17
|
+
const fileContent = await fs.readFile(configPath, 'utf8');
|
|
18
|
+
if (fileContent.trim()) {
|
|
19
|
+
content = fileContent;
|
|
24
20
|
}
|
|
25
21
|
}
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
//
|
|
22
|
+
// Modify using jsonc-parser - preserves comments
|
|
23
|
+
// Setting a nested path automatically creates intermediate objects
|
|
24
|
+
const edits = modify(content, [
|
|
25
|
+
configKey,
|
|
26
|
+
'Sanity'
|
|
27
|
+
], buildServerConfig(token), {
|
|
28
|
+
formattingOptions: {
|
|
29
|
+
insertSpaces: true,
|
|
30
|
+
tabSize: 2
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
content = applyEdits(content, edits);
|
|
34
|
+
// Ensure parent directory exists and write
|
|
39
35
|
await fs.mkdir(path.dirname(configPath), {
|
|
40
36
|
recursive: true
|
|
41
37
|
});
|
|
42
|
-
|
|
43
|
-
await fs.writeFile(configPath, JSON.stringify(existingConfig, null, 2), 'utf8');
|
|
38
|
+
await fs.writeFile(configPath, content, 'utf8');
|
|
44
39
|
}
|
|
45
40
|
|
|
46
41
|
//# sourceMappingURL=writeMCPConfig.js.map
|