@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/media/create-aspect.ts"],"sourcesContent":["import fs, {mkdir} from 'node:fs/promises'\nimport path from 'node:path'\n\nimport {fileExists, SanityCommand, subdebug} from '@sanity/cli-core'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/media/create-aspect.ts"],"sourcesContent":["import fs, {mkdir} from 'node:fs/promises'\nimport path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {fileExists, SanityCommand, subdebug} from '@sanity/cli-core'\nimport {input} from '@sanity/cli-core/ux'\nimport {createPublishedId} from '@sanity/id-utils'\nimport {camelCase} from 'lodash-es'\n\nimport {getMediaLibraryConfig} from '../../actions/media/getMediaLibraryConfig.js'\nimport {NO_MEDIA_LIBRARY_ASPECTS_PATH} from '../../util/errorMessages.js'\n\nconst createAspectDebug = subdebug('media:create-aspect')\n\nexport class MediaCreateAspectCommand extends SanityCommand<typeof MediaCreateAspectCommand> {\n static override description = 'Create a new aspect definition file'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Create a new aspect definition file',\n },\n ]\n\n public async run(): Promise<void> {\n const cliConfig = await this.getCliConfig()\n const mediaLibrary = getMediaLibraryConfig(cliConfig)\n if (mediaLibrary?.aspectsPath === undefined) {\n this.error(NO_MEDIA_LIBRARY_ASPECTS_PATH, {exit: 1})\n }\n\n try {\n const title = await input({\n message: 'Title',\n })\n\n const name = await input({\n default: createPublishedId(camelCase(title)),\n message: 'Name',\n })\n\n const safeName = createPublishedId(camelCase(name))\n const destinationPath = path.resolve(mediaLibrary.aspectsPath, `${safeName}.ts`)\n const relativeDestinationPath = path.relative(process.cwd(), destinationPath)\n\n await mkdir(path.resolve(mediaLibrary.aspectsPath), {\n recursive: true,\n })\n\n const destinationPathExists = await fileExists(destinationPath)\n if (destinationPathExists) {\n this.error(`A file already exists at ${styleText('bold', relativeDestinationPath)}`, {\n exit: 1,\n })\n }\n\n await fs.writeFile(\n destinationPath,\n template({\n name: safeName,\n title,\n }),\n )\n\n this.log(\n `${styleText('green', '✓')} Aspect created! ${styleText('bold', relativeDestinationPath)}`,\n )\n this.log()\n this.log('Next steps:')\n this.log(\n `Open ${styleText('bold', relativeDestinationPath)} in your code editor and customize the aspect.`,\n )\n this.log()\n this.log('Deploy this aspect by running:')\n this.log(styleText('bold', `sanity media deploy-aspect ${safeName}`))\n this.log()\n this.log('Deploy all aspects by running:')\n this.log(styleText('bold', `sanity media deploy-aspect --all`))\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n createAspectDebug('Failed to create aspect', error)\n this.error(`Failed to create aspect: ${message}`, {exit: 1})\n }\n }\n}\n\nfunction template({name, title}: {name: string; title: string}) {\n return `import {defineAssetAspect, defineField} from 'sanity'\n\nexport default defineAssetAspect({\n name: '${name}',\n title: '${title}',\n type: 'object',\n fields: [\n defineField({\n name: 'string',\n title: 'Plain String',\n type: 'string',\n }),\n ],\n})\n`\n}\n"],"names":["fs","mkdir","path","styleText","fileExists","SanityCommand","subdebug","input","createPublishedId","camelCase","getMediaLibraryConfig","NO_MEDIA_LIBRARY_ASPECTS_PATH","createAspectDebug","MediaCreateAspectCommand","description","examples","command","run","cliConfig","getCliConfig","mediaLibrary","aspectsPath","undefined","error","exit","title","message","name","default","safeName","destinationPath","resolve","relativeDestinationPath","relative","process","cwd","recursive","destinationPathExists","writeFile","template","log","Error","String"],"mappings":"AAAA,OAAOA,MAAKC,KAAK,QAAO,mBAAkB;AAC1C,OAAOC,UAAU,YAAW;AAC5B,SAAQC,SAAS,QAAO,YAAW;AAEnC,SAAQC,UAAU,EAAEC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AACpE,SAAQC,KAAK,QAAO,sBAAqB;AACzC,SAAQC,iBAAiB,QAAO,mBAAkB;AAClD,SAAQC,SAAS,QAAO,YAAW;AAEnC,SAAQC,qBAAqB,QAAO,+CAA8C;AAClF,SAAQC,6BAA6B,QAAO,8BAA6B;AAEzE,MAAMC,oBAAoBN,SAAS;AAEnC,OAAO,MAAMO,iCAAiCR;IAC5C,OAAgBS,cAAc,sCAAqC;IAEnE,OAAgBC,WAAW;QACzB;YACEC,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,MAAaG,MAAqB;QAChC,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,MAAMC,eAAeV,sBAAsBQ;QAC3C,IAAIE,cAAcC,gBAAgBC,WAAW;YAC3C,IAAI,CAACC,KAAK,CAACZ,+BAA+B;gBAACa,MAAM;YAAC;QACpD;QAEA,IAAI;YACF,MAAMC,QAAQ,MAAMlB,MAAM;gBACxBmB,SAAS;YACX;YAEA,MAAMC,OAAO,MAAMpB,MAAM;gBACvBqB,SAASpB,kBAAkBC,UAAUgB;gBACrCC,SAAS;YACX;YAEA,MAAMG,WAAWrB,kBAAkBC,UAAUkB;YAC7C,MAAMG,kBAAkB5B,KAAK6B,OAAO,CAACX,aAAaC,WAAW,EAAE,GAAGQ,SAAS,GAAG,CAAC;YAC/E,MAAMG,0BAA0B9B,KAAK+B,QAAQ,CAACC,QAAQC,GAAG,IAAIL;YAE7D,MAAM7B,MAAMC,KAAK6B,OAAO,CAACX,aAAaC,WAAW,GAAG;gBAClDe,WAAW;YACb;YAEA,MAAMC,wBAAwB,MAAMjC,WAAW0B;YAC/C,IAAIO,uBAAuB;gBACzB,IAAI,CAACd,KAAK,CAAC,CAAC,yBAAyB,EAAEpB,UAAU,QAAQ6B,0BAA0B,EAAE;oBACnFR,MAAM;gBACR;YACF;YAEA,MAAMxB,GAAGsC,SAAS,CAChBR,iBACAS,SAAS;gBACPZ,MAAME;gBACNJ;YACF;YAGF,IAAI,CAACe,GAAG,CACN,GAAGrC,UAAU,SAAS,KAAK,iBAAiB,EAAEA,UAAU,QAAQ6B,0BAA0B;YAE5F,IAAI,CAACQ,GAAG;YACR,IAAI,CAACA,GAAG,CAAC;YACT,IAAI,CAACA,GAAG,CACN,CAAC,KAAK,EAAErC,UAAU,QAAQ6B,yBAAyB,8CAA8C,CAAC;YAEpG,IAAI,CAACQ,GAAG;YACR,IAAI,CAACA,GAAG,CAAC;YACT,IAAI,CAACA,GAAG,CAACrC,UAAU,QAAQ,CAAC,2BAA2B,EAAE0B,UAAU;YACnE,IAAI,CAACW,GAAG;YACR,IAAI,CAACA,GAAG,CAAC;YACT,IAAI,CAACA,GAAG,CAACrC,UAAU,QAAQ,CAAC,gCAAgC,CAAC;QAC/D,EAAE,OAAOoB,OAAO;YACd,MAAMG,UAAUH,iBAAiBkB,QAAQlB,MAAMG,OAAO,GAAGgB,OAAOnB;YAChEX,kBAAkB,2BAA2BW;YAC7C,IAAI,CAACA,KAAK,CAAC,CAAC,yBAAyB,EAAEG,SAAS,EAAE;gBAACF,MAAM;YAAC;QAC5D;IACF;AACF;AAEA,SAASe,SAAS,EAACZ,IAAI,EAAEF,KAAK,EAAgC;IAC5D,OAAO,CAAC;;;SAGD,EAAEE,KAAK;UACN,EAAEF,MAAM;;;;;;;;;;AAUlB,CAAC;AACD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { styleText } from 'node:util';
|
|
1
2
|
import { Args, Flags } from '@oclif/core';
|
|
2
3
|
import { SanityCommand, subdebug } from '@sanity/cli-core';
|
|
3
|
-
import {
|
|
4
|
+
import { confirm } from '@sanity/cli-core/ux';
|
|
4
5
|
import { selectMediaLibrary } from '../../prompts/selectMediaLibrary.js';
|
|
5
6
|
import { deleteAspect } from '../../services/mediaLibraries.js';
|
|
6
7
|
import { NO_PROJECT_ID } from '../../util/errorMessages.js';
|
|
@@ -62,19 +63,19 @@ export class MediaDeleteAspectCommand extends SanityCommand {
|
|
|
62
63
|
projectId
|
|
63
64
|
});
|
|
64
65
|
if (response.results.length === 0) {
|
|
65
|
-
this.warn(
|
|
66
|
+
this.warn(styleText('bold', `There's no deployed aspect with that name`));
|
|
66
67
|
this.log(` - ${aspectName}`);
|
|
67
68
|
return;
|
|
68
69
|
}
|
|
69
70
|
this.log();
|
|
70
|
-
this.log(`${
|
|
71
|
+
this.log(`${styleText('green', '✓')} ${styleText('bold', 'Deleted aspect')}`);
|
|
71
72
|
this.log(` - ${aspectName}`);
|
|
72
73
|
// TODO: Find existing aspect definition files matching the undeployed aspect name and offer
|
|
73
74
|
// to delete them.
|
|
74
75
|
} catch (error) {
|
|
75
76
|
const err = error;
|
|
76
77
|
deleteAspectDebug('Failed to delete aspect', err);
|
|
77
|
-
this.error(
|
|
78
|
+
this.error(styleText('bold', 'Failed to delete aspect') + `\n - ${aspectName}\n\n${styleText('red', err.message)}`, {
|
|
78
79
|
exit: 1
|
|
79
80
|
});
|
|
80
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/media/delete-aspect.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/media/delete-aspect.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {confirm} from '@sanity/cli-core/ux'\n\nimport {selectMediaLibrary} from '../../prompts/selectMediaLibrary.js'\nimport {deleteAspect} from '../../services/mediaLibraries.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst deleteAspectDebug = subdebug('media:delete-aspect')\n\nexport class MediaDeleteAspectCommand extends SanityCommand<typeof MediaDeleteAspectCommand> {\n static override args = {\n aspectName: Args.string({\n description: 'Name of the aspect to delete',\n required: true,\n }),\n }\n\n static override description = 'Undeploy an aspect'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> someAspect',\n description: 'Delete the aspect named \"someAspect\"',\n },\n ]\n\n static override flags = {\n 'media-library-id': Flags.string({\n description: 'The id of the target media library',\n required: false,\n }),\n yes: Flags.boolean({\n aliases: ['y'],\n description: 'Skip confirmation prompt',\n required: false,\n }),\n }\n\n public async run(): Promise<void> {\n const {aspectName} = this.args\n const {'media-library-id': mediaLibraryIdFlag, yes: skipConfirmation} = this.flags\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n try {\n let mediaLibraryId = mediaLibraryIdFlag\n if (!mediaLibraryId) {\n mediaLibraryId = await selectMediaLibrary(projectId)\n }\n\n if (!skipConfirmation) {\n const confirmed = await confirm({\n default: false,\n message: `Are you absolutely sure you want to undeploy the ${aspectName} aspect from the \"${mediaLibraryId}\" media library?`,\n })\n\n if (!confirmed) {\n this.log('Operation cancelled')\n return\n }\n }\n\n const response = await deleteAspect({\n aspectName,\n mediaLibraryId,\n projectId,\n })\n\n if (response.results.length === 0) {\n this.warn(styleText('bold', `There's no deployed aspect with that name`))\n this.log(` - ${aspectName}`)\n return\n }\n\n this.log()\n this.log(`${styleText('green', '✓')} ${styleText('bold', 'Deleted aspect')}`)\n this.log(` - ${aspectName}`)\n\n // TODO: Find existing aspect definition files matching the undeployed aspect name and offer\n // to delete them.\n } catch (error) {\n const err = error as Error\n deleteAspectDebug('Failed to delete aspect', err)\n this.error(\n styleText('bold', 'Failed to delete aspect') +\n `\\n - ${aspectName}\\n\\n${styleText('red', err.message)}`,\n {\n exit: 1,\n },\n )\n }\n }\n}\n"],"names":["styleText","Args","Flags","SanityCommand","subdebug","confirm","selectMediaLibrary","deleteAspect","NO_PROJECT_ID","deleteAspectDebug","MediaDeleteAspectCommand","args","aspectName","string","description","required","examples","command","flags","yes","boolean","aliases","run","mediaLibraryIdFlag","skipConfirmation","projectId","getProjectId","error","exit","mediaLibraryId","confirmed","default","message","log","response","results","length","warn","err"],"mappings":"AAAA,SAAQA,SAAS,QAAO,YAAW;AAEnC,SAAQC,IAAI,EAAEC,KAAK,QAAO,cAAa;AACvC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AACxD,SAAQC,OAAO,QAAO,sBAAqB;AAE3C,SAAQC,kBAAkB,QAAO,sCAAqC;AACtE,SAAQC,YAAY,QAAO,mCAAkC;AAC7D,SAAQC,aAAa,QAAO,8BAA6B;AAEzD,MAAMC,oBAAoBL,SAAS;AAEnC,OAAO,MAAMM,iCAAiCP;IAC5C,OAAgBQ,OAAO;QACrBC,YAAYX,KAAKY,MAAM,CAAC;YACtBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,qBAAoB;IAElD,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,OAAgBI,QAAQ;QACtB,oBAAoBhB,MAAMW,MAAM,CAAC;YAC/BC,aAAa;YACbC,UAAU;QACZ;QACAI,KAAKjB,MAAMkB,OAAO,CAAC;YACjBC,SAAS;gBAAC;aAAI;YACdP,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,MAAaO,MAAqB;QAChC,MAAM,EAACV,UAAU,EAAC,GAAG,IAAI,CAACD,IAAI;QAC9B,MAAM,EAAC,oBAAoBY,kBAAkB,EAAEJ,KAAKK,gBAAgB,EAAC,GAAG,IAAI,CAACN,KAAK;QAElF,MAAMO,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,IAAI,CAACD,WAAW;YACd,IAAI,CAACE,KAAK,CAACnB,eAAe;gBAACoB,MAAM;YAAC;QACpC;QAEA,IAAI;YACF,IAAIC,iBAAiBN;YACrB,IAAI,CAACM,gBAAgB;gBACnBA,iBAAiB,MAAMvB,mBAAmBmB;YAC5C;YAEA,IAAI,CAACD,kBAAkB;gBACrB,MAAMM,YAAY,MAAMzB,QAAQ;oBAC9B0B,SAAS;oBACTC,SAAS,CAAC,iDAAiD,EAAEpB,WAAW,kBAAkB,EAAEiB,eAAe,gBAAgB,CAAC;gBAC9H;gBAEA,IAAI,CAACC,WAAW;oBACd,IAAI,CAACG,GAAG,CAAC;oBACT;gBACF;YACF;YAEA,MAAMC,WAAW,MAAM3B,aAAa;gBAClCK;gBACAiB;gBACAJ;YACF;YAEA,IAAIS,SAASC,OAAO,CAACC,MAAM,KAAK,GAAG;gBACjC,IAAI,CAACC,IAAI,CAACrC,UAAU,QAAQ,CAAC,yCAAyC,CAAC;gBACvE,IAAI,CAACiC,GAAG,CAAC,CAAC,IAAI,EAAErB,YAAY;gBAC5B;YACF;YAEA,IAAI,CAACqB,GAAG;YACR,IAAI,CAACA,GAAG,CAAC,GAAGjC,UAAU,SAAS,KAAK,CAAC,EAAEA,UAAU,QAAQ,mBAAmB;YAC5E,IAAI,CAACiC,GAAG,CAAC,CAAC,IAAI,EAAErB,YAAY;QAE5B,4FAA4F;QAC5F,kBAAkB;QACpB,EAAE,OAAOe,OAAO;YACd,MAAMW,MAAMX;YACZlB,kBAAkB,2BAA2B6B;YAC7C,IAAI,CAACX,KAAK,CACR3B,UAAU,QAAQ,6BAChB,CAAC,MAAM,EAAEY,WAAW,IAAI,EAAEZ,UAAU,OAAOsC,IAAIN,OAAO,GAAG,EAC3D;gBACEJ,MAAM;YACR;QAEJ;IACF;AACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { styleText } from 'node:util';
|
|
1
2
|
import { Args, Flags } from '@oclif/core';
|
|
2
3
|
import { SanityCommand, subdebug } from '@sanity/cli-core';
|
|
3
|
-
import {
|
|
4
|
+
import { spinner } from '@sanity/cli-core/ux';
|
|
4
5
|
import { isAssetAspect } from '@sanity/types';
|
|
5
6
|
import { getMediaLibraryConfig } from '../../actions/media/getMediaLibraryConfig.js';
|
|
6
7
|
import { importAspects } from '../../actions/media/importAspects.js';
|
|
@@ -89,13 +90,13 @@ export class MediaDeployAspectCommand extends SanityCommand {
|
|
|
89
90
|
// Handle invalid aspects
|
|
90
91
|
if (result.invalid.length > 0) {
|
|
91
92
|
this.logToStderr('');
|
|
92
|
-
this.warn(
|
|
93
|
+
this.warn(styleText('bold', `Skipped ${result.invalid.length} invalid ${pluralize('aspect', result.invalid.length)}`));
|
|
93
94
|
this.logToStderr(this.formatAspectList(result.invalid));
|
|
94
95
|
}
|
|
95
96
|
// Check if we found the requested aspect (when not using --all)
|
|
96
97
|
if (!all && result.valid.length === 0 && result.invalid.length === 0) {
|
|
97
98
|
this.log();
|
|
98
|
-
this.error(`Could not find aspect: ${
|
|
99
|
+
this.error(`Could not find aspect: ${styleText('bold', aspectName ?? '')}`, {
|
|
99
100
|
exit: 1
|
|
100
101
|
});
|
|
101
102
|
}
|
|
@@ -113,7 +114,7 @@ export class MediaDeployAspectCommand extends SanityCommand {
|
|
|
113
114
|
deploySpin.succeed();
|
|
114
115
|
// Display success message
|
|
115
116
|
this.log();
|
|
116
|
-
this.log(`${
|
|
117
|
+
this.log(`${styleText('green', '✓')} ${styleText('bold', `Deployed ${result.valid.length} ${pluralize('aspect', result.valid.length)}`)}`);
|
|
117
118
|
this.log(this.formatAspectList(result.valid));
|
|
118
119
|
deployAspectDebug('Deployed aspects', {
|
|
119
120
|
count: result.valid.length,
|
|
@@ -127,7 +128,7 @@ export class MediaDeployAspectCommand extends SanityCommand {
|
|
|
127
128
|
error: err,
|
|
128
129
|
mediaLibraryId: mediaLibraryIdFlag
|
|
129
130
|
});
|
|
130
|
-
this.error(
|
|
131
|
+
this.error(styleText('bold', 'Failed to deploy aspects') + `\n\n${styleText('red', err.message)}`, {
|
|
131
132
|
exit: 1
|
|
132
133
|
});
|
|
133
134
|
}
|
|
@@ -139,10 +140,10 @@ export class MediaDeployAspectCommand extends SanityCommand {
|
|
|
139
140
|
const label = isAssetAspect(aspect) ? aspect._id : 'Unnamed aspect';
|
|
140
141
|
// Flatten the nested validation errors and extract messages
|
|
141
142
|
const simplifiedErrors = validationErrors.flatMap((group)=>group.map(({ message })=>message));
|
|
142
|
-
const errorLabel = simplifiedErrors.length > 0 ? ` ${
|
|
143
|
+
const errorLabel = simplifiedErrors.length > 0 ? ` ${styleText('bgRed', simplifiedErrors[0])}` : '';
|
|
143
144
|
const remainingErrorsCount = simplifiedErrors.length - 1;
|
|
144
|
-
const remainingErrorsLabel = remainingErrorsCount > 0 ?
|
|
145
|
-
return ` - ${label} ${
|
|
145
|
+
const remainingErrorsLabel = remainingErrorsCount > 0 ? styleText('italic', ` and ${remainingErrorsCount} other ${pluralize('error', remainingErrorsCount)}`) : '';
|
|
146
|
+
return ` - ${label} ${styleText('dim', filename)}${errorLabel}${remainingErrorsLabel}`;
|
|
146
147
|
}).join('\n');
|
|
147
148
|
}
|
|
148
149
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/media/deploy-aspect.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk, spinner} from '@sanity/cli-core/ux'\nimport {isAssetAspect, type SchemaValidationProblem} from '@sanity/types'\n\nimport {getMediaLibraryConfig} from '../../actions/media/getMediaLibraryConfig.js'\nimport {importAspects} from '../../actions/media/importAspects.js'\nimport {selectMediaLibrary} from '../../prompts/selectMediaLibrary.js'\nimport {deployAspects} from '../../services/mediaLibraries.js'\nimport {NO_MEDIA_LIBRARY_ASPECTS_PATH, NO_PROJECT_ID} from '../../util/errorMessages.js'\nimport {pluralize} from '../../util/pluralize.js'\n\nconst deployAspectDebug = subdebug('media:deploy-aspect')\n\nexport class MediaDeployAspectCommand extends SanityCommand<typeof MediaDeployAspectCommand> {\n static override args = {\n aspectName: Args.string({\n description: 'Name of the aspect to deploy',\n required: false,\n }),\n }\n\n static override description = 'Deploy an aspect'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> someAspect',\n description: 'Deploy the aspect named \"someAspect\"',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --all',\n description: 'Deploy all aspects',\n },\n ]\n\n static override flags = {\n all: Flags.boolean({\n description: 'Deploy all aspects',\n required: false,\n }),\n 'media-library-id': Flags.string({\n description: 'The id of the target media library',\n required: false,\n }),\n }\n\n public async run(): Promise<void> {\n const {aspectName} = this.args\n const {all, 'media-library-id': mediaLibraryIdFlag} = this.flags\n\n // Validation: must provide either aspect name or --all flag\n if (!all && !aspectName) {\n this.error(\n 'Specify an aspect name, or use the `--all` option to deploy all aspect definitions.',\n {exit: 1},\n )\n }\n\n // Validation: cannot provide both aspect name and --all flag\n if (all && aspectName) {\n this.error('Specified both an aspect name and `--all`.', {exit: 1})\n }\n\n const cliConfig = await this.getCliConfig()\n const mediaLibrary = getMediaLibraryConfig(cliConfig)\n\n if (!mediaLibrary?.aspectsPath) {\n this.error(NO_MEDIA_LIBRARY_ASPECTS_PATH, {exit: 1})\n }\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n try {\n // Determine target media library\n let mediaLibraryId = mediaLibraryIdFlag\n if (!mediaLibraryId) {\n mediaLibraryId = await selectMediaLibrary(projectId)\n }\n\n // Import and validate aspects\n const spin = spinner('Loading aspect definitions').start()\n const result = await importAspects({\n aspectsPath: mediaLibrary.aspectsPath,\n filterAspects: (aspect) => {\n if (all) {\n return true\n }\n\n if (typeof aspect === 'object' && aspect !== null && '_id' in aspect) {\n return aspect._id === aspectName\n }\n\n return false\n },\n })\n spin.stop()\n\n // Handle invalid aspects\n if (result.invalid.length > 0) {\n this.logToStderr('')\n this.warn(\n chalk.bold(\n `Skipped ${result.invalid.length} invalid ${pluralize('aspect', result.invalid.length)}`,\n ),\n )\n this.logToStderr(this.formatAspectList(result.invalid))\n }\n\n // Check if we found the requested aspect (when not using --all)\n if (!all && result.valid.length === 0 && result.invalid.length === 0) {\n this.log()\n this.error(`Could not find aspect: ${chalk.bold(aspectName)}`, {exit: 1})\n }\n\n // Deploy valid aspects\n if (result.valid.length === 0) {\n this.logToStderr('')\n this.warn('No valid aspects to deploy')\n return\n }\n\n const deploySpin = spinner(\n `Deploying ${result.valid.length} ${pluralize('aspect', result.valid.length)}`,\n ).start()\n\n const deployResponse = await deployAspects({\n aspects: result.valid.map((a) => a.aspect),\n mediaLibraryId,\n })\n\n deploySpin.succeed()\n\n // Display success message\n this.log()\n this.log(\n `${chalk.green('✓')} ${chalk.bold(`Deployed ${result.valid.length} ${pluralize('aspect', result.valid.length)}`)}`,\n )\n this.log(this.formatAspectList(result.valid))\n\n deployAspectDebug('Deployed aspects', {\n count: result.valid.length,\n results: deployResponse.results,\n })\n } catch (error) {\n const err = error as Error\n deployAspectDebug('Failed to deploy aspects', {\n all,\n aspectName,\n error: err,\n mediaLibraryId: mediaLibraryIdFlag,\n })\n this.error(chalk.bold('Failed to deploy aspects') + `\\n\\n${chalk.red(err.message)}`, {\n exit: 1,\n })\n }\n }\n\n /**\n * Format a list of aspects for display\n */\n private formatAspectList(\n aspects: Array<{\n aspect: unknown\n filename: string\n validationErrors?: SchemaValidationProblem[][]\n }>,\n ): string {\n return aspects\n .map(({aspect, filename, validationErrors = []}) => {\n const label = isAssetAspect(aspect) ? aspect._id : 'Unnamed aspect'\n\n // Flatten the nested validation errors and extract messages\n const simplifiedErrors = validationErrors.flatMap((group) =>\n group.map(({message}) => message),\n )\n\n const errorLabel = simplifiedErrors.length > 0 ? ` ${chalk.bgRed(simplifiedErrors[0])}` : ''\n\n const remainingErrorsCount = simplifiedErrors.length - 1\n const remainingErrorsLabel =\n remainingErrorsCount > 0\n ? chalk.italic(\n ` and ${remainingErrorsCount} other ${pluralize('error', remainingErrorsCount)}`,\n )\n : ''\n\n return ` - ${label} ${chalk.dim(filename)}${errorLabel}${remainingErrorsLabel}`\n })\n .join('\\n')\n }\n}\n"],"names":["Args","Flags","SanityCommand","subdebug","chalk","spinner","isAssetAspect","getMediaLibraryConfig","importAspects","selectMediaLibrary","deployAspects","NO_MEDIA_LIBRARY_ASPECTS_PATH","NO_PROJECT_ID","pluralize","deployAspectDebug","MediaDeployAspectCommand","args","aspectName","string","description","required","examples","command","flags","all","boolean","run","mediaLibraryIdFlag","error","exit","cliConfig","getCliConfig","mediaLibrary","aspectsPath","projectId","getProjectId","mediaLibraryId","spin","start","result","filterAspects","aspect","_id","stop","invalid","length","logToStderr","warn","bold","formatAspectList","valid","log","deploySpin","deployResponse","aspects","map","a","succeed","green","count","results","err","red","message","filename","validationErrors","label","simplifiedErrors","flatMap","group","errorLabel","bgRed","remainingErrorsCount","remainingErrorsLabel","italic","dim","join"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/media/deploy-aspect.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\nimport {isAssetAspect, type SchemaValidationProblem} from '@sanity/types'\n\nimport {getMediaLibraryConfig} from '../../actions/media/getMediaLibraryConfig.js'\nimport {importAspects} from '../../actions/media/importAspects.js'\nimport {selectMediaLibrary} from '../../prompts/selectMediaLibrary.js'\nimport {deployAspects} from '../../services/mediaLibraries.js'\nimport {NO_MEDIA_LIBRARY_ASPECTS_PATH, NO_PROJECT_ID} from '../../util/errorMessages.js'\nimport {pluralize} from '../../util/pluralize.js'\n\nconst deployAspectDebug = subdebug('media:deploy-aspect')\n\nexport class MediaDeployAspectCommand extends SanityCommand<typeof MediaDeployAspectCommand> {\n static override args = {\n aspectName: Args.string({\n description: 'Name of the aspect to deploy',\n required: false,\n }),\n }\n\n static override description = 'Deploy an aspect'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> someAspect',\n description: 'Deploy the aspect named \"someAspect\"',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --all',\n description: 'Deploy all aspects',\n },\n ]\n\n static override flags = {\n all: Flags.boolean({\n description: 'Deploy all aspects',\n required: false,\n }),\n 'media-library-id': Flags.string({\n description: 'The id of the target media library',\n required: false,\n }),\n }\n\n public async run(): Promise<void> {\n const {aspectName} = this.args\n const {all, 'media-library-id': mediaLibraryIdFlag} = this.flags\n\n // Validation: must provide either aspect name or --all flag\n if (!all && !aspectName) {\n this.error(\n 'Specify an aspect name, or use the `--all` option to deploy all aspect definitions.',\n {exit: 1},\n )\n }\n\n // Validation: cannot provide both aspect name and --all flag\n if (all && aspectName) {\n this.error('Specified both an aspect name and `--all`.', {exit: 1})\n }\n\n const cliConfig = await this.getCliConfig()\n const mediaLibrary = getMediaLibraryConfig(cliConfig)\n\n if (!mediaLibrary?.aspectsPath) {\n this.error(NO_MEDIA_LIBRARY_ASPECTS_PATH, {exit: 1})\n }\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n try {\n // Determine target media library\n let mediaLibraryId = mediaLibraryIdFlag\n if (!mediaLibraryId) {\n mediaLibraryId = await selectMediaLibrary(projectId)\n }\n\n // Import and validate aspects\n const spin = spinner('Loading aspect definitions').start()\n const result = await importAspects({\n aspectsPath: mediaLibrary.aspectsPath,\n filterAspects: (aspect) => {\n if (all) {\n return true\n }\n\n if (typeof aspect === 'object' && aspect !== null && '_id' in aspect) {\n return aspect._id === aspectName\n }\n\n return false\n },\n })\n spin.stop()\n\n // Handle invalid aspects\n if (result.invalid.length > 0) {\n this.logToStderr('')\n this.warn(\n styleText(\n 'bold',\n `Skipped ${result.invalid.length} invalid ${pluralize('aspect', result.invalid.length)}`,\n ),\n )\n this.logToStderr(this.formatAspectList(result.invalid))\n }\n\n // Check if we found the requested aspect (when not using --all)\n if (!all && result.valid.length === 0 && result.invalid.length === 0) {\n this.log()\n this.error(`Could not find aspect: ${styleText('bold', aspectName ?? '')}`, {exit: 1})\n }\n\n // Deploy valid aspects\n if (result.valid.length === 0) {\n this.logToStderr('')\n this.warn('No valid aspects to deploy')\n return\n }\n\n const deploySpin = spinner(\n `Deploying ${result.valid.length} ${pluralize('aspect', result.valid.length)}`,\n ).start()\n\n const deployResponse = await deployAspects({\n aspects: result.valid.map((a) => a.aspect),\n mediaLibraryId,\n })\n\n deploySpin.succeed()\n\n // Display success message\n this.log()\n this.log(\n `${styleText('green', '✓')} ${styleText('bold', `Deployed ${result.valid.length} ${pluralize('aspect', result.valid.length)}`)}`,\n )\n this.log(this.formatAspectList(result.valid))\n\n deployAspectDebug('Deployed aspects', {\n count: result.valid.length,\n results: deployResponse.results,\n })\n } catch (error) {\n const err = error as Error\n deployAspectDebug('Failed to deploy aspects', {\n all,\n aspectName,\n error: err,\n mediaLibraryId: mediaLibraryIdFlag,\n })\n this.error(\n styleText('bold', 'Failed to deploy aspects') + `\\n\\n${styleText('red', err.message)}`,\n {\n exit: 1,\n },\n )\n }\n }\n\n /**\n * Format a list of aspects for display\n */\n private formatAspectList(\n aspects: Array<{\n aspect: unknown\n filename: string\n validationErrors?: SchemaValidationProblem[][]\n }>,\n ): string {\n return aspects\n .map(({aspect, filename, validationErrors = []}) => {\n const label = isAssetAspect(aspect) ? aspect._id : 'Unnamed aspect'\n\n // Flatten the nested validation errors and extract messages\n const simplifiedErrors = validationErrors.flatMap((group) =>\n group.map(({message}) => message),\n )\n\n const errorLabel =\n simplifiedErrors.length > 0 ? ` ${styleText('bgRed', simplifiedErrors[0])}` : ''\n\n const remainingErrorsCount = simplifiedErrors.length - 1\n const remainingErrorsLabel =\n remainingErrorsCount > 0\n ? styleText(\n 'italic',\n ` and ${remainingErrorsCount} other ${pluralize('error', remainingErrorsCount)}`,\n )\n : ''\n\n return ` - ${label} ${styleText('dim', filename)}${errorLabel}${remainingErrorsLabel}`\n })\n .join('\\n')\n }\n}\n"],"names":["styleText","Args","Flags","SanityCommand","subdebug","spinner","isAssetAspect","getMediaLibraryConfig","importAspects","selectMediaLibrary","deployAspects","NO_MEDIA_LIBRARY_ASPECTS_PATH","NO_PROJECT_ID","pluralize","deployAspectDebug","MediaDeployAspectCommand","args","aspectName","string","description","required","examples","command","flags","all","boolean","run","mediaLibraryIdFlag","error","exit","cliConfig","getCliConfig","mediaLibrary","aspectsPath","projectId","getProjectId","mediaLibraryId","spin","start","result","filterAspects","aspect","_id","stop","invalid","length","logToStderr","warn","formatAspectList","valid","log","deploySpin","deployResponse","aspects","map","a","succeed","count","results","err","message","filename","validationErrors","label","simplifiedErrors","flatMap","group","errorLabel","remainingErrorsCount","remainingErrorsLabel","join"],"mappings":"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"}
|
|
@@ -2,9 +2,8 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { Args, Flags } from '@oclif/core';
|
|
4
4
|
import { getProjectCliClient, SanityCommand, subdebug } from '@sanity/cli-core';
|
|
5
|
-
import { input, spinner } from '@sanity/cli-core/ux';
|
|
5
|
+
import { boxen, input, spinner } from '@sanity/cli-core/ux';
|
|
6
6
|
import { exportDataset } from '@sanity/export';
|
|
7
|
-
import boxen from 'boxen';
|
|
8
7
|
import prettyMs from 'pretty-ms';
|
|
9
8
|
import { promptForMediaLibrary } from '../../prompts/promptForMediaLibrary.js';
|
|
10
9
|
import { getMediaLibraries } from '../../services/mediaLibraries.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/media/export.ts"],"sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport {type Writable} from 'node:stream'\n\nimport {Args, Flags} from '@oclif/core'\nimport {getProjectCliClient, SanityCommand, subdebug} from '@sanity/cli-core'\nimport {input, spinner} from '@sanity/cli-core/ux'\nimport {exportDataset, type ExportOptions, type ExportProgress} from '@sanity/export'\nimport boxen from 'boxen'\nimport prettyMs from 'pretty-ms'\n\nimport {promptForMediaLibrary} from '../../prompts/promptForMediaLibrary.js'\nimport {getMediaLibraries} from '../../services/mediaLibraries.js'\nimport {absolutify} from '../../util/absolutify.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst noop = () => null\nconst exportDebug = subdebug('media:export')\n\nexport class MediaExportCommand extends SanityCommand<typeof MediaExportCommand> {\n static override args = {\n destination: Args.string({\n description: 'Output destination file path',\n }),\n }\n\n static override description =\n 'Export an archive of all file and image assets including their aspect data from the target media library. Video assets are excluded from the export.'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Export media library interactively',\n },\n {\n command: '<%= config.bin %> <%= command.id %> output.tar.gz',\n description: 'Export media library to output.tar.gz',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --media-library-id my-library-id',\n description: 'Export specific media library',\n },\n ]\n\n static override flags = {\n 'asset-concurrency': Flags.integer({\n default: 8,\n description: 'Concurrent number of asset downloads',\n }),\n 'media-library-id': Flags.string({\n description: 'The id of the target media library',\n }),\n 'no-compress': Flags.boolean({\n default: false,\n description: 'Skips compressing tarball entries (still generates a gzip file)',\n }),\n overwrite: Flags.boolean({\n default: false,\n description: 'Overwrite any file with the same name',\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(MediaExportCommand)\n const {destination: targetDestination} = args\n\n const projectId = await this.getProjectId()\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {\n exit: 1,\n })\n }\n\n const projectClient = await getProjectCliClient({\n apiVersion: 'v2025-02-19',\n projectId,\n requireUser: true,\n })\n\n let mediaLibraries\n try {\n mediaLibraries = await getMediaLibraries(projectId)\n } catch (error) {\n exportDebug('Error listing media libraries', error)\n this.error(\n `Failed to list media libraries:\\n${error instanceof Error ? error.message : error}`,\n {\n exit: 1,\n },\n )\n }\n\n if (mediaLibraries.length === 0) {\n this.error('No active media libraries found in this project', {exit: 1})\n }\n\n let mediaLibraryId = flags['media-library-id']\n if (!mediaLibraryId) {\n try {\n mediaLibraryId = await promptForMediaLibrary({mediaLibraries})\n } catch (error) {\n exportDebug('Error selecting media library', error)\n this.error(\n `Failed to select media library:\\n${error instanceof Error ? error.message : error}`,\n {\n exit: 1,\n },\n )\n }\n }\n\n if (!mediaLibraries.some((library) => library.id === mediaLibraryId)) {\n this.error(`Media library with id \"${mediaLibraryId}\" not found`, {exit: 1})\n }\n\n this.log(\n boxen(\n `Exporting from:\nprojectId: ${projectId.padEnd(44)}\nmediaLibraryId: ${mediaLibraryId.padEnd(37)}`,\n {\n borderColor: 'yellow',\n borderStyle: 'round',\n },\n ),\n )\n\n let destinationPath = targetDestination\n if (!destinationPath) {\n destinationPath = await this.promptForDestination({mediaLibraryId})\n }\n\n const outputPath = await this.getOutputPath(destinationPath, mediaLibraryId, flags)\n if (!outputPath) {\n this.error('Cancelled', {exit: 1})\n }\n\n const {fail, onProgress, succeed} = this.createProgressHandler()\n const exportOptions: ExportOptions = {\n assetConcurrency: flags['asset-concurrency'],\n client: projectClient,\n compress: !flags['no-compress'],\n mediaLibraryId,\n onProgress,\n outputPath,\n }\n\n const start = Date.now()\n try {\n await exportDataset(exportOptions)\n succeed()\n this.log(`Export finished (${prettyMs(Date.now() - start)})`)\n } catch (error) {\n fail()\n const err = error instanceof Error ? error : new Error(String(error))\n exportDebug('Export failed', err)\n this.error(`Export failed: ${err.message}`, {exit: 1})\n }\n }\n\n private createProgressHandler() {\n let currentSpinner: ReturnType<typeof spinner> | null = null\n let currentStep = ''\n\n const onProgress = (progress: ExportProgress) => {\n if (progress.step !== currentStep) {\n succeed()\n\n currentStep = progress.step\n currentSpinner = spinner(progress.step).start()\n } else if (progress.step === currentStep && progress.update && currentSpinner) {\n currentSpinner.text = `${progress.step} (${progress.current}/${progress.total})`\n }\n }\n\n const succeed = () => {\n currentSpinner?.succeed()\n }\n\n const fail = () => {\n currentSpinner?.fail()\n }\n\n return {fail, onProgress, succeed}\n }\n\n private async getOutputPath(\n destination: string,\n mediaLibraryId: string,\n flags: {overwrite?: boolean},\n ): Promise<string | Writable> {\n if (destination === '-') {\n return process.stdout\n }\n\n const dstPath = path.isAbsolute(destination)\n ? destination\n : path.resolve(process.cwd(), destination)\n\n const dstStats = await fs.stat(dstPath).catch(noop)\n const looksLikeFile = dstStats ? dstStats.isFile() : path.basename(dstPath).includes('.')\n\n if (!dstStats) {\n const createPath = looksLikeFile ? path.dirname(dstPath) : dstPath\n try {\n await fs.mkdir(createPath, {recursive: true})\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n this.error(`Failed to create directory \"${createPath}\": ${err.message}`, {\n exit: 1,\n })\n }\n }\n\n const finalPath = looksLikeFile\n ? dstPath\n : path.join(dstPath, `${mediaLibraryId}-export.tar.gz`)\n const finalPathStats = await fs.stat(finalPath).catch(noop)\n\n if (!flags.overwrite && finalPathStats && finalPathStats.isFile()) {\n this.error(`File \"${finalPath}\" already exists. Use --overwrite flag to overwrite it.`, {\n exit: 1,\n })\n }\n\n return finalPath\n }\n\n private promptForDestination(options: {\n mediaLibraryId: string\n workDir?: string\n }): Promise<string> {\n const {mediaLibraryId, workDir = process.cwd()} = options\n\n const defaultPath = path.join(workDir, `${mediaLibraryId}-export.tar.gz`)\n\n return input({\n default: defaultPath,\n message: 'Output path:',\n transformer: (value: string) => absolutify(value.trim()),\n validate: (value: string) => {\n const trimmed = value.trim()\n if (!trimmed) {\n return 'Please provide a valid output path'\n }\n return true\n },\n })\n }\n}\n"],"names":["fs","path","Args","Flags","getProjectCliClient","SanityCommand","subdebug","input","spinner","exportDataset","boxen","prettyMs","promptForMediaLibrary","getMediaLibraries","absolutify","NO_PROJECT_ID","noop","exportDebug","MediaExportCommand","args","destination","string","description","examples","command","flags","integer","default","boolean","overwrite","run","parse","targetDestination","projectId","getProjectId","error","exit","projectClient","apiVersion","requireUser","mediaLibraries","Error","message","length","mediaLibraryId","some","library","id","log","padEnd","borderColor","borderStyle","destinationPath","promptForDestination","outputPath","getOutputPath","fail","onProgress","succeed","createProgressHandler","exportOptions","assetConcurrency","client","compress","start","Date","now","err","String","currentSpinner","currentStep","progress","step","update","text","current","total","process","stdout","dstPath","isAbsolute","resolve","cwd","dstStats","stat","catch","looksLikeFile","isFile","basename","includes","createPath","dirname","mkdir","recursive","finalPath","join","finalPathStats","options","workDir","defaultPath","transformer","value","trim","validate","trimmed"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/media/export.ts"],"sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport {type Writable} from 'node:stream'\n\nimport {Args, Flags} from '@oclif/core'\nimport {getProjectCliClient, SanityCommand, subdebug} from '@sanity/cli-core'\nimport {boxen, input, spinner} from '@sanity/cli-core/ux'\nimport {exportDataset, type ExportOptions, type ExportProgress} from '@sanity/export'\nimport prettyMs from 'pretty-ms'\n\nimport {promptForMediaLibrary} from '../../prompts/promptForMediaLibrary.js'\nimport {getMediaLibraries} from '../../services/mediaLibraries.js'\nimport {absolutify} from '../../util/absolutify.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst noop = () => null\nconst exportDebug = subdebug('media:export')\n\nexport class MediaExportCommand extends SanityCommand<typeof MediaExportCommand> {\n static override args = {\n destination: Args.string({\n description: 'Output destination file path',\n }),\n }\n\n static override description =\n 'Export an archive of all file and image assets including their aspect data from the target media library. Video assets are excluded from the export.'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Export media library interactively',\n },\n {\n command: '<%= config.bin %> <%= command.id %> output.tar.gz',\n description: 'Export media library to output.tar.gz',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --media-library-id my-library-id',\n description: 'Export specific media library',\n },\n ]\n\n static override flags = {\n 'asset-concurrency': Flags.integer({\n default: 8,\n description: 'Concurrent number of asset downloads',\n }),\n 'media-library-id': Flags.string({\n description: 'The id of the target media library',\n }),\n 'no-compress': Flags.boolean({\n default: false,\n description: 'Skips compressing tarball entries (still generates a gzip file)',\n }),\n overwrite: Flags.boolean({\n default: false,\n description: 'Overwrite any file with the same name',\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(MediaExportCommand)\n const {destination: targetDestination} = args\n\n const projectId = await this.getProjectId()\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {\n exit: 1,\n })\n }\n\n const projectClient = await getProjectCliClient({\n apiVersion: 'v2025-02-19',\n projectId,\n requireUser: true,\n })\n\n let mediaLibraries\n try {\n mediaLibraries = await getMediaLibraries(projectId)\n } catch (error) {\n exportDebug('Error listing media libraries', error)\n this.error(\n `Failed to list media libraries:\\n${error instanceof Error ? error.message : error}`,\n {\n exit: 1,\n },\n )\n }\n\n if (mediaLibraries.length === 0) {\n this.error('No active media libraries found in this project', {exit: 1})\n }\n\n let mediaLibraryId = flags['media-library-id']\n if (!mediaLibraryId) {\n try {\n mediaLibraryId = await promptForMediaLibrary({mediaLibraries})\n } catch (error) {\n exportDebug('Error selecting media library', error)\n this.error(\n `Failed to select media library:\\n${error instanceof Error ? error.message : error}`,\n {\n exit: 1,\n },\n )\n }\n }\n\n if (!mediaLibraries.some((library) => library.id === mediaLibraryId)) {\n this.error(`Media library with id \"${mediaLibraryId}\" not found`, {exit: 1})\n }\n\n this.log(\n boxen(\n `Exporting from:\nprojectId: ${projectId.padEnd(44)}\nmediaLibraryId: ${mediaLibraryId.padEnd(37)}`,\n {\n borderColor: 'yellow',\n borderStyle: 'round',\n },\n ),\n )\n\n let destinationPath = targetDestination\n if (!destinationPath) {\n destinationPath = await this.promptForDestination({mediaLibraryId})\n }\n\n const outputPath = await this.getOutputPath(destinationPath, mediaLibraryId, flags)\n if (!outputPath) {\n this.error('Cancelled', {exit: 1})\n }\n\n const {fail, onProgress, succeed} = this.createProgressHandler()\n const exportOptions: ExportOptions = {\n assetConcurrency: flags['asset-concurrency'],\n client: projectClient,\n compress: !flags['no-compress'],\n mediaLibraryId,\n onProgress,\n outputPath,\n }\n\n const start = Date.now()\n try {\n await exportDataset(exportOptions)\n succeed()\n this.log(`Export finished (${prettyMs(Date.now() - start)})`)\n } catch (error) {\n fail()\n const err = error instanceof Error ? error : new Error(String(error))\n exportDebug('Export failed', err)\n this.error(`Export failed: ${err.message}`, {exit: 1})\n }\n }\n\n private createProgressHandler() {\n let currentSpinner: ReturnType<typeof spinner> | null = null\n let currentStep = ''\n\n const onProgress = (progress: ExportProgress) => {\n if (progress.step !== currentStep) {\n succeed()\n\n currentStep = progress.step\n currentSpinner = spinner(progress.step).start()\n } else if (progress.step === currentStep && progress.update && currentSpinner) {\n currentSpinner.text = `${progress.step} (${progress.current}/${progress.total})`\n }\n }\n\n const succeed = () => {\n currentSpinner?.succeed()\n }\n\n const fail = () => {\n currentSpinner?.fail()\n }\n\n return {fail, onProgress, succeed}\n }\n\n private async getOutputPath(\n destination: string,\n mediaLibraryId: string,\n flags: {overwrite?: boolean},\n ): Promise<string | Writable> {\n if (destination === '-') {\n return process.stdout\n }\n\n const dstPath = path.isAbsolute(destination)\n ? destination\n : path.resolve(process.cwd(), destination)\n\n const dstStats = await fs.stat(dstPath).catch(noop)\n const looksLikeFile = dstStats ? dstStats.isFile() : path.basename(dstPath).includes('.')\n\n if (!dstStats) {\n const createPath = looksLikeFile ? path.dirname(dstPath) : dstPath\n try {\n await fs.mkdir(createPath, {recursive: true})\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n this.error(`Failed to create directory \"${createPath}\": ${err.message}`, {\n exit: 1,\n })\n }\n }\n\n const finalPath = looksLikeFile\n ? dstPath\n : path.join(dstPath, `${mediaLibraryId}-export.tar.gz`)\n const finalPathStats = await fs.stat(finalPath).catch(noop)\n\n if (!flags.overwrite && finalPathStats && finalPathStats.isFile()) {\n this.error(`File \"${finalPath}\" already exists. Use --overwrite flag to overwrite it.`, {\n exit: 1,\n })\n }\n\n return finalPath\n }\n\n private promptForDestination(options: {\n mediaLibraryId: string\n workDir?: string\n }): Promise<string> {\n const {mediaLibraryId, workDir = process.cwd()} = options\n\n const defaultPath = path.join(workDir, `${mediaLibraryId}-export.tar.gz`)\n\n return input({\n default: defaultPath,\n message: 'Output path:',\n transformer: (value: string) => absolutify(value.trim()),\n validate: (value: string) => {\n const trimmed = value.trim()\n if (!trimmed) {\n return 'Please provide a valid output path'\n }\n return true\n },\n })\n }\n}\n"],"names":["fs","path","Args","Flags","getProjectCliClient","SanityCommand","subdebug","boxen","input","spinner","exportDataset","prettyMs","promptForMediaLibrary","getMediaLibraries","absolutify","NO_PROJECT_ID","noop","exportDebug","MediaExportCommand","args","destination","string","description","examples","command","flags","integer","default","boolean","overwrite","run","parse","targetDestination","projectId","getProjectId","error","exit","projectClient","apiVersion","requireUser","mediaLibraries","Error","message","length","mediaLibraryId","some","library","id","log","padEnd","borderColor","borderStyle","destinationPath","promptForDestination","outputPath","getOutputPath","fail","onProgress","succeed","createProgressHandler","exportOptions","assetConcurrency","client","compress","start","Date","now","err","String","currentSpinner","currentStep","progress","step","update","text","current","total","process","stdout","dstPath","isAbsolute","resolve","cwd","dstStats","stat","catch","looksLikeFile","isFile","basename","includes","createPath","dirname","mkdir","recursive","finalPath","join","finalPathStats","options","workDir","defaultPath","transformer","value","trim","validate","trimmed"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { styleText } from 'node:util';
|
|
1
2
|
import { Args, Flags } from '@oclif/core';
|
|
2
3
|
import { getProjectCliClient, SanityCommand } from '@sanity/cli-core';
|
|
3
|
-
import {
|
|
4
|
-
import boxen from 'boxen';
|
|
4
|
+
import { boxen, spinner } from '@sanity/cli-core/ux';
|
|
5
5
|
import { pipe, scan, tap } from 'rxjs';
|
|
6
6
|
import { importer } from '../../actions/media/importMedia.js';
|
|
7
7
|
import { importMediaDebug } from '../../actions/media/importMediaDebug.js';
|
|
@@ -134,7 +134,7 @@ export class MediaImportCommand extends SanityCommand {
|
|
|
134
134
|
process.exit(130);
|
|
135
135
|
});
|
|
136
136
|
}).catch((error)=>{
|
|
137
|
-
this.error(
|
|
137
|
+
this.error(styleText('red', error.message), {
|
|
138
138
|
exit: 1
|
|
139
139
|
});
|
|
140
140
|
});
|
|
@@ -151,7 +151,7 @@ export class MediaImportCommand extends SanityCommand {
|
|
|
151
151
|
complete: ()=>spin.succeed(`Imported ${previousState?.fileCount} assets`),
|
|
152
152
|
next: ([processedAssetsCount, state])=>{
|
|
153
153
|
previousState = state;
|
|
154
|
-
spin.text = `${processedAssetsCount} of ${state?.fileCount} assets imported ${
|
|
154
|
+
spin.text = `${processedAssetsCount} of ${state?.fileCount} assets imported ${styleText('dim', state?.asset.originalFilename ?? '')}`;
|
|
155
155
|
}
|
|
156
156
|
}));
|
|
157
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/media/import.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {getProjectCliClient, SanityCommand} from '@sanity/cli-core'\nimport {chalk, spinner} from '@sanity/cli-core/ux'\nimport {SanityClient} from '@sanity/client'\nimport boxen from 'boxen'\nimport {type OperatorFunction, pipe, scan, tap} from 'rxjs'\n\nimport {importer, type State} from '../../actions/media/importMedia.js'\nimport {importMediaDebug} from '../../actions/media/importMediaDebug.js'\nimport {promptForMediaLibrary} from '../../prompts/promptForMediaLibrary.js'\nimport {getMediaLibraries} from '../../services/mediaLibraries.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nexport class MediaImportCommand extends SanityCommand<typeof MediaImportCommand> {\n static override args = {\n source: Args.string({\n description: 'Image file or folder to import from',\n required: true,\n }),\n }\n\n static override description = 'Import a set of assets to the target media library.'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> products',\n description: 'Import all assets from the \"products\" directory',\n },\n {\n command: '<%= config.bin %> <%= command.id %> gallery.tar.gz',\n description: 'Import all assets from \"gallery\" archive',\n },\n {\n command: '<%= config.bin %> <%= command.id %> products --replace-aspects',\n description: 'Import all assets from the \"products\" directory and replace aspects',\n },\n ]\n\n static override flags = {\n 'media-library-id': Flags.string({\n description: 'The id of the target media library',\n }),\n 'replace-aspects': Flags.boolean({\n description:\n 'Replace existing aspect data. All versions will be replaced (e.g. published and draft aspect data)',\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(MediaImportCommand)\n const {source} = args\n const replaceAspects = flags['replace-aspects']\n\n const projectId = await this.getProjectId()\n const cliConfig = await this.getCliConfig()\n const dataset = cliConfig.api?.dataset\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {\n exit: 1,\n })\n }\n\n let mediaLibraries\n try {\n mediaLibraries = await getMediaLibraries(projectId)\n } catch (error) {\n importMediaDebug('Error listing media libraries', error)\n this.error(\n `Failed to list media libraries:\\n${error instanceof Error ? error.message : error}`,\n {\n exit: 1,\n },\n )\n }\n\n if (mediaLibraries.length === 0) {\n this.error('No active media libraries found in this project', {exit: 1})\n }\n\n let mediaLibraryId = flags['media-library-id']\n if (!mediaLibraryId) {\n try {\n mediaLibraryId = await promptForMediaLibrary({mediaLibraries})\n } catch (error) {\n importMediaDebug('Error selecting media library', error)\n this.error(\n `Failed to select media library:\\n${error instanceof Error ? error.message : error}`,\n {\n exit: 1,\n },\n )\n }\n }\n\n if (!mediaLibraries.some((library) => library.id === mediaLibraryId)) {\n this.error(`Media library with id \"${mediaLibraryId}\" not found`, {exit: 1})\n }\n\n const projectClient = await getProjectCliClient({\n apiVersion: 'v2025-02-19',\n dataset,\n perspective: 'drafts',\n projectId,\n requestTagPrefix: 'sanity.mediaLibraryCli.import',\n requireUser: true,\n '~experimental_resource': {\n id: mediaLibraryId,\n type: 'media-library',\n },\n })\n\n this.log(\n boxen(\n `\n Importing to media library: ${mediaLibraryId.padEnd(37)}\n Importing from path: ${source}\n `,\n {\n borderColor: 'yellow',\n borderStyle: 'round',\n },\n ),\n )\n\n const spin = spinner('Beginning import…').start()\n\n await this.importAssets({projectClient, replaceAspects, source, spin})\n }\n\n private async importAssets(options: {\n projectClient: SanityClient\n replaceAspects: boolean\n source: string\n spin: ReturnType<typeof spinner>\n }): Promise<void> {\n const {projectClient, replaceAspects, source, spin} = options\n\n return new Promise<void>((resolve, reject) => {\n const subscription = importer({\n client: projectClient,\n replaceAspects,\n sourcePath: source,\n spinner: spin,\n })\n .pipe(this.reportResult(spin))\n .subscribe({\n complete: () => {\n resolve()\n },\n error: (error: unknown) => {\n const message = error instanceof Error ? error.message : String(error)\n spin.stop()\n reject(new Error(message))\n },\n })\n\n // Cleanup on Ctrl+C\n process.once('SIGINT', () => {\n subscription.unsubscribe()\n spin.fail('Import interrupted.')\n process.exit(130)\n })\n }).catch((error) => {\n this.error(chalk.red(error.message), {exit: 1})\n })\n }\n\n private reportResult(\n spin: ReturnType<typeof spinner>,\n ): OperatorFunction<State, [number, State | undefined]> {\n let previousState: State | undefined\n\n return pipe(\n scan<State, [number, State | undefined]>(\n (processedAssetsCount, state) => [processedAssetsCount[0] + 1, state],\n [0, undefined],\n ),\n tap({\n complete: () => spin.succeed(`Imported ${previousState?.fileCount} assets`),\n next: ([processedAssetsCount, state]) => {\n previousState = state\n spin.text = `${processedAssetsCount} of ${state?.fileCount} assets imported ${chalk.dim(state?.asset.originalFilename)}`\n },\n }),\n )\n }\n}\n"],"names":["Args","Flags","getProjectCliClient","SanityCommand","chalk","spinner","boxen","pipe","scan","tap","importer","importMediaDebug","promptForMediaLibrary","getMediaLibraries","NO_PROJECT_ID","MediaImportCommand","args","source","string","description","required","examples","command","flags","boolean","run","parse","replaceAspects","projectId","getProjectId","cliConfig","getCliConfig","dataset","api","error","exit","mediaLibraries","Error","message","length","mediaLibraryId","some","library","id","projectClient","apiVersion","perspective","requestTagPrefix","requireUser","type","log","padEnd","borderColor","borderStyle","spin","start","importAssets","options","Promise","resolve","reject","subscription","client","sourcePath","reportResult","subscribe","complete","String","stop","process","once","unsubscribe","fail","catch","red","previousState","processedAssetsCount","state","undefined","succeed","fileCount","next","text","dim","asset","originalFilename"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/media/import.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Args, Flags} from '@oclif/core'\nimport {getProjectCliClient, SanityCommand} from '@sanity/cli-core'\nimport {boxen, spinner} from '@sanity/cli-core/ux'\nimport {SanityClient} from '@sanity/client'\nimport {type OperatorFunction, pipe, scan, tap} from 'rxjs'\n\nimport {importer, type State} from '../../actions/media/importMedia.js'\nimport {importMediaDebug} from '../../actions/media/importMediaDebug.js'\nimport {promptForMediaLibrary} from '../../prompts/promptForMediaLibrary.js'\nimport {getMediaLibraries} from '../../services/mediaLibraries.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nexport class MediaImportCommand extends SanityCommand<typeof MediaImportCommand> {\n static override args = {\n source: Args.string({\n description: 'Image file or folder to import from',\n required: true,\n }),\n }\n\n static override description = 'Import a set of assets to the target media library.'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> products',\n description: 'Import all assets from the \"products\" directory',\n },\n {\n command: '<%= config.bin %> <%= command.id %> gallery.tar.gz',\n description: 'Import all assets from \"gallery\" archive',\n },\n {\n command: '<%= config.bin %> <%= command.id %> products --replace-aspects',\n description: 'Import all assets from the \"products\" directory and replace aspects',\n },\n ]\n\n static override flags = {\n 'media-library-id': Flags.string({\n description: 'The id of the target media library',\n }),\n 'replace-aspects': Flags.boolean({\n description:\n 'Replace existing aspect data. All versions will be replaced (e.g. published and draft aspect data)',\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(MediaImportCommand)\n const {source} = args\n const replaceAspects = flags['replace-aspects']\n\n const projectId = await this.getProjectId()\n const cliConfig = await this.getCliConfig()\n const dataset = cliConfig.api?.dataset\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {\n exit: 1,\n })\n }\n\n let mediaLibraries\n try {\n mediaLibraries = await getMediaLibraries(projectId)\n } catch (error) {\n importMediaDebug('Error listing media libraries', error)\n this.error(\n `Failed to list media libraries:\\n${error instanceof Error ? error.message : error}`,\n {\n exit: 1,\n },\n )\n }\n\n if (mediaLibraries.length === 0) {\n this.error('No active media libraries found in this project', {exit: 1})\n }\n\n let mediaLibraryId = flags['media-library-id']\n if (!mediaLibraryId) {\n try {\n mediaLibraryId = await promptForMediaLibrary({mediaLibraries})\n } catch (error) {\n importMediaDebug('Error selecting media library', error)\n this.error(\n `Failed to select media library:\\n${error instanceof Error ? error.message : error}`,\n {\n exit: 1,\n },\n )\n }\n }\n\n if (!mediaLibraries.some((library) => library.id === mediaLibraryId)) {\n this.error(`Media library with id \"${mediaLibraryId}\" not found`, {exit: 1})\n }\n\n const projectClient = await getProjectCliClient({\n apiVersion: 'v2025-02-19',\n dataset,\n perspective: 'drafts',\n projectId,\n requestTagPrefix: 'sanity.mediaLibraryCli.import',\n requireUser: true,\n '~experimental_resource': {\n id: mediaLibraryId,\n type: 'media-library',\n },\n })\n\n this.log(\n boxen(\n `\n Importing to media library: ${mediaLibraryId.padEnd(37)}\n Importing from path: ${source}\n `,\n {\n borderColor: 'yellow',\n borderStyle: 'round',\n },\n ),\n )\n\n const spin = spinner('Beginning import…').start()\n\n await this.importAssets({projectClient, replaceAspects, source, spin})\n }\n\n private async importAssets(options: {\n projectClient: SanityClient\n replaceAspects: boolean\n source: string\n spin: ReturnType<typeof spinner>\n }): Promise<void> {\n const {projectClient, replaceAspects, source, spin} = options\n\n return new Promise<void>((resolve, reject) => {\n const subscription = importer({\n client: projectClient,\n replaceAspects,\n sourcePath: source,\n spinner: spin,\n })\n .pipe(this.reportResult(spin))\n .subscribe({\n complete: () => {\n resolve()\n },\n error: (error: unknown) => {\n const message = error instanceof Error ? error.message : String(error)\n spin.stop()\n reject(new Error(message))\n },\n })\n\n // Cleanup on Ctrl+C\n process.once('SIGINT', () => {\n subscription.unsubscribe()\n spin.fail('Import interrupted.')\n process.exit(130)\n })\n }).catch((error) => {\n this.error(styleText('red', error.message), {exit: 1})\n })\n }\n\n private reportResult(\n spin: ReturnType<typeof spinner>,\n ): OperatorFunction<State, [number, State | undefined]> {\n let previousState: State | undefined\n\n return pipe(\n scan<State, [number, State | undefined]>(\n (processedAssetsCount, state) => [processedAssetsCount[0] + 1, state],\n [0, undefined],\n ),\n tap({\n complete: () => spin.succeed(`Imported ${previousState?.fileCount} assets`),\n next: ([processedAssetsCount, state]) => {\n previousState = state\n spin.text = `${processedAssetsCount} of ${state?.fileCount} assets imported ${styleText('dim', state?.asset.originalFilename ?? '')}`\n },\n }),\n )\n }\n}\n"],"names":["styleText","Args","Flags","getProjectCliClient","SanityCommand","boxen","spinner","pipe","scan","tap","importer","importMediaDebug","promptForMediaLibrary","getMediaLibraries","NO_PROJECT_ID","MediaImportCommand","args","source","string","description","required","examples","command","flags","boolean","run","parse","replaceAspects","projectId","getProjectId","cliConfig","getCliConfig","dataset","api","error","exit","mediaLibraries","Error","message","length","mediaLibraryId","some","library","id","projectClient","apiVersion","perspective","requestTagPrefix","requireUser","type","log","padEnd","borderColor","borderStyle","spin","start","importAssets","options","Promise","resolve","reject","subscription","client","sourcePath","reportResult","subscribe","complete","String","stop","process","once","unsubscribe","fail","catch","previousState","processedAssetsCount","state","undefined","succeed","fileCount","next","text","asset","originalFilename"],"mappings":"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"}
|
package/dist/commands/preview.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { Args, Flags } from '@oclif/core';
|
|
3
|
-
import {
|
|
4
|
-
import { chalk, confirm } from '@sanity/cli-core/ux';
|
|
3
|
+
import { SanityCommand, subdebug } from '@sanity/cli-core';
|
|
5
4
|
import { previewAction } from '../actions/preview/previewAction.js';
|
|
6
5
|
export const previewDebug = subdebug('preview');
|
|
7
6
|
export class PreviewCommand extends SanityCommand {
|
|
@@ -38,35 +37,22 @@ export class PreviewCommand extends SanityCommand {
|
|
|
38
37
|
const defaultRootDir = path.resolve(path.join(workDir, 'dist'));
|
|
39
38
|
const outDir = path.resolve(outputDir || defaultRootDir);
|
|
40
39
|
try {
|
|
41
|
-
await previewAction({
|
|
40
|
+
return await previewAction({
|
|
42
41
|
cliConfig,
|
|
43
42
|
flags,
|
|
44
43
|
outDir,
|
|
45
44
|
workDir
|
|
46
45
|
});
|
|
47
46
|
} catch (error) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.output.log(chalk.red.bgBlack(error.message));
|
|
57
|
-
this.output.log(chalk.red.bgBlack('\n'));
|
|
58
|
-
const shouldRunDevServer = isInteractive() && await confirm({
|
|
59
|
-
message: 'Do you want to start a development server instead?'
|
|
47
|
+
const suggestions = error instanceof Error && error.name === 'BUILD_NOT_FOUND' ? [
|
|
48
|
+
'`sanity build` to create a production build',
|
|
49
|
+
'`sanity dev` to run a development server'
|
|
50
|
+
] : undefined;
|
|
51
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
52
|
+
this.output.error(`Failed to start preview server: ${message}`, {
|
|
53
|
+
exit: 1,
|
|
54
|
+
suggestions
|
|
60
55
|
});
|
|
61
|
-
if (shouldRunDevServer) {
|
|
62
|
-
// TODO: Implement dev server
|
|
63
|
-
this.output.log(chalk.green.bgBlack('Starting development server...'));
|
|
64
|
-
} else {
|
|
65
|
-
// Indicate that this isn't an expected exit
|
|
66
|
-
this.output.error(`Failed to start preview server`, {
|
|
67
|
-
exit: 1
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
56
|
}
|
|
71
57
|
}
|
|
72
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/preview.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {Args, Flags} from '@oclif/core'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/commands/preview.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {previewAction} from '../actions/preview/previewAction.js'\nimport {type PreviewServer} from '../server/previewServer.js'\n\nexport const previewDebug = subdebug('preview')\n\nexport class PreviewCommand extends SanityCommand<typeof PreviewCommand> {\n // sanity start is an alias for sanity preview\n static override aliases: string[] = ['start']\n\n static override args = {\n outputDir: Args.directory({description: 'Output directory'}),\n }\n\n static override description = 'Starts a server to preview a production build'\n\n static override examples = [\n '<%= config.bin %> <%= command.id %> --host=0.0.0.0',\n '<%= config.bin %> <%= command.id %> --port=1942',\n '<%= config.bin %> <%= command.id %> some/build-output-dir',\n ]\n\n static override flags = {\n host: Flags.string({\n default: 'localhost',\n description: 'The local network interface at which to listen.',\n }),\n port: Flags.string({\n default: '3333',\n description: 'TCP port to start server on.',\n }),\n }\n\n public async run(): Promise<PreviewServer | void> {\n const {args, flags} = await this.parse(PreviewCommand)\n\n const workDir = (await this.getProjectRoot()).directory\n const cliConfig = await this.getCliConfig()\n\n const {outputDir} = args\n\n const defaultRootDir = path.resolve(path.join(workDir, 'dist'))\n const outDir = path.resolve(outputDir || defaultRootDir)\n\n try {\n return await previewAction({cliConfig, flags, outDir, workDir})\n } catch (error: unknown) {\n const suggestions =\n error instanceof Error && error.name === 'BUILD_NOT_FOUND'\n ? [\n '`sanity build` to create a production build',\n '`sanity dev` to run a development server',\n ]\n : undefined\n\n const message = error instanceof Error ? error.message : String(error)\n this.output.error(`Failed to start preview server: ${message}`, {\n exit: 1,\n suggestions,\n })\n }\n }\n}\n"],"names":["path","Args","Flags","SanityCommand","subdebug","previewAction","previewDebug","PreviewCommand","aliases","args","outputDir","directory","description","examples","flags","host","string","default","port","run","parse","workDir","getProjectRoot","cliConfig","getCliConfig","defaultRootDir","resolve","join","outDir","error","suggestions","Error","name","undefined","message","String","output","exit"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAE5B,SAAQC,IAAI,EAAEC,KAAK,QAAO,cAAa;AACvC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAExD,SAAQC,aAAa,QAAO,sCAAqC;AAGjE,OAAO,MAAMC,eAAeF,SAAS,WAAU;AAE/C,OAAO,MAAMG,uBAAuBJ;IAClC,8CAA8C;IAC9C,OAAgBK,UAAoB;QAAC;KAAQ,CAAA;IAE7C,OAAgBC,OAAO;QACrBC,WAAWT,KAAKU,SAAS,CAAC;YAACC,aAAa;QAAkB;IAC5D,EAAC;IAED,OAAgBA,cAAc,gDAA+C;IAE7E,OAAgBC,WAAW;QACzB;QACA;QACA;KACD,CAAA;IAED,OAAgBC,QAAQ;QACtBC,MAAMb,MAAMc,MAAM,CAAC;YACjBC,SAAS;YACTL,aAAa;QACf;QACAM,MAAMhB,MAAMc,MAAM,CAAC;YACjBC,SAAS;YACTL,aAAa;QACf;IACF,EAAC;IAED,MAAaO,MAAqC;QAChD,MAAM,EAACV,IAAI,EAAEK,KAAK,EAAC,GAAG,MAAM,IAAI,CAACM,KAAK,CAACb;QAEvC,MAAMc,UAAU,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGX,SAAS;QACvD,MAAMY,YAAY,MAAM,IAAI,CAACC,YAAY;QAEzC,MAAM,EAACd,SAAS,EAAC,GAAGD;QAEpB,MAAMgB,iBAAiBzB,KAAK0B,OAAO,CAAC1B,KAAK2B,IAAI,CAACN,SAAS;QACvD,MAAMO,SAAS5B,KAAK0B,OAAO,CAAChB,aAAae;QAEzC,IAAI;YACF,OAAO,MAAMpB,cAAc;gBAACkB;gBAAWT;gBAAOc;gBAAQP;YAAO;QAC/D,EAAE,OAAOQ,OAAgB;YACvB,MAAMC,cACJD,iBAAiBE,SAASF,MAAMG,IAAI,KAAK,oBACrC;gBACE;gBACA;aACD,GACDC;YAEN,MAAMC,UAAUL,iBAAiBE,QAAQF,MAAMK,OAAO,GAAGC,OAAON;YAChE,IAAI,CAACO,MAAM,CAACP,KAAK,CAAC,CAAC,gCAAgC,EAAEK,SAAS,EAAE;gBAC9DG,MAAM;gBACNP;YACF;QACF;IACF;AACF"}
|