@sanity/cli 5.9.0-next.8 → 6.0.0-alpha.11
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/LICENSE +1 -1
- package/README.md +3212 -2
- package/bin/run.cmd +3 -0
- package/bin/run.js +33 -0
- package/codemods/deskRename.js +115 -96
- package/codemods/partsTypeDirective.js +7 -7
- package/codemods/reactIconsV3.js +78 -51
- package/dist/SanityHelp.js +43 -0
- package/dist/SanityHelp.js.map +1 -0
- package/dist/actions/auth/authServer.js +153 -0
- package/dist/actions/auth/authServer.js.map +1 -0
- package/dist/actions/auth/getProviderName.js +15 -0
- package/dist/actions/auth/getProviderName.js.map +1 -0
- package/dist/actions/auth/login/getProvider.js +54 -0
- package/dist/actions/auth/login/getProvider.js.map +1 -0
- package/dist/actions/auth/login/getSSOProvider.js +30 -0
- package/dist/actions/auth/login/getSSOProvider.js.map +1 -0
- package/dist/actions/auth/login/login.js +101 -0
- package/dist/actions/auth/login/login.js.map +1 -0
- package/dist/actions/auth/login/promptProviders.js +23 -0
- package/dist/actions/auth/login/promptProviders.js.map +1 -0
- package/dist/actions/auth/login/samlProviderToLoginProvider.js +15 -0
- package/dist/actions/auth/login/samlProviderToLoginProvider.js.map +1 -0
- package/dist/actions/auth/types.js +7 -0
- package/dist/actions/auth/types.js.map +1 -0
- package/dist/actions/backup/archiveDir.js +43 -0
- package/dist/actions/backup/archiveDir.js.map +1 -0
- package/dist/actions/backup/assertDatasetExist.js +16 -0
- package/dist/actions/backup/assertDatasetExist.js.map +1 -0
- package/dist/actions/backup/backupDownloadDebug.js +4 -0
- package/dist/actions/backup/backupDownloadDebug.js.map +1 -0
- package/dist/actions/backup/cleanupTmpDir.js +19 -0
- package/dist/actions/backup/cleanupTmpDir.js.map +1 -0
- package/dist/actions/backup/constants.js +3 -0
- package/dist/actions/backup/constants.js.map +1 -0
- package/dist/actions/backup/downloadAsset.js +54 -0
- package/dist/actions/backup/downloadAsset.js.map +1 -0
- package/dist/actions/backup/downloadDocument.js +32 -0
- package/dist/actions/backup/downloadDocument.js.map +1 -0
- package/dist/actions/backup/fetchNextBackupPage.js +48 -0
- package/dist/actions/backup/fetchNextBackupPage.js.map +1 -0
- package/dist/actions/backup/progressSpinner.js +40 -0
- package/dist/actions/backup/progressSpinner.js.map +1 -0
- package/dist/actions/build/buildApp.js +159 -0
- package/dist/actions/build/buildApp.js.map +1 -0
- package/dist/actions/build/buildDebug.js +4 -0
- package/dist/actions/build/buildDebug.js.map +1 -0
- package/dist/actions/build/buildStaticFiles.js +82 -0
- package/dist/actions/build/buildStaticFiles.js.map +1 -0
- package/dist/actions/build/buildStudio.js +202 -0
- package/dist/actions/build/buildStudio.js.map +1 -0
- package/dist/actions/build/buildVendorDependencies.js +179 -0
- package/dist/actions/build/buildVendorDependencies.js.map +1 -0
- package/dist/actions/build/checkRequiredDependencies.js +122 -0
- package/dist/actions/build/checkRequiredDependencies.js.map +1 -0
- package/dist/actions/build/checkStudioDependencyVersions.js +154 -0
- package/dist/actions/build/checkStudioDependencyVersions.js.map +1 -0
- package/dist/actions/build/createExternalFromImportMap.js +11 -0
- package/dist/actions/build/createExternalFromImportMap.js.map +1 -0
- package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.js +13 -0
- package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.js.map +1 -0
- package/dist/actions/build/decorateIndexWithBridgeScript.js +17 -0
- package/dist/actions/build/decorateIndexWithBridgeScript.js.map +1 -0
- package/dist/actions/build/determineBasePath.js +20 -0
- package/dist/actions/build/determineBasePath.js.map +1 -0
- package/dist/actions/build/generateWebManifest.js +27 -0
- package/dist/actions/build/generateWebManifest.js.map +1 -0
- package/dist/actions/build/getAppEnvVars.js +9 -0
- package/dist/actions/build/getAppEnvVars.js.map +1 -0
- package/dist/actions/build/getAutoUpdatesImportMap.js +57 -0
- package/dist/actions/build/getAutoUpdatesImportMap.js.map +1 -0
- package/dist/actions/build/getEntryModule.js +46 -0
- package/dist/actions/build/getEntryModule.js.map +1 -0
- package/dist/actions/build/getPossibleDocumentComponentLocations.js +11 -0
- package/dist/actions/build/getPossibleDocumentComponentLocations.js.map +1 -0
- package/dist/actions/build/getStudioEnvVars.js +9 -0
- package/dist/actions/build/getStudioEnvVars.js.map +1 -0
- package/dist/actions/build/getStudioEnvironmentVariables.js +58 -0
- package/dist/actions/build/getStudioEnvironmentVariables.js.map +1 -0
- package/dist/actions/build/getViteConfig.js +180 -0
- package/dist/actions/build/getViteConfig.js.map +1 -0
- package/dist/actions/build/normalizeBasePath.js +9 -0
- package/dist/actions/build/normalizeBasePath.js.map +1 -0
- package/dist/actions/build/renderDocument.js +54 -0
- package/dist/actions/build/renderDocument.js.map +1 -0
- package/dist/actions/build/renderDocument.worker.js +9 -0
- package/dist/actions/build/renderDocument.worker.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.js +59 -0
- package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js +61 -0
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js +165 -0
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/components/Favicons.js +28 -0
- package/dist/actions/build/renderDocumentWorker/components/Favicons.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js +177 -0
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/components/NoJavascript.js +51 -0
- package/dist/actions/build/renderDocumentWorker/components/NoJavascript.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js +41 -0
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/getDocumentHtml.js +55 -0
- package/dist/actions/build/renderDocumentWorker/getDocumentHtml.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js +31 -0
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js +30 -0
- package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js.map +1 -0
- package/dist/actions/build/renderDocumentWorker/types.js +5 -0
- package/dist/actions/build/renderDocumentWorker/types.js.map +1 -0
- package/dist/actions/build/shouldAutoUpdate.js +35 -0
- package/dist/actions/build/shouldAutoUpdate.js.map +1 -0
- package/dist/actions/build/types.js +3 -0
- package/dist/actions/build/types.js.map +1 -0
- package/dist/actions/build/writeFavicons.js +26 -0
- package/dist/actions/build/writeFavicons.js.map +1 -0
- package/dist/actions/build/writeSanityRuntime.js +61 -0
- package/dist/actions/build/writeSanityRuntime.js.map +1 -0
- package/dist/actions/build/writeWebManifest.js +12 -0
- package/dist/actions/build/writeWebManifest.js.map +1 -0
- package/dist/actions/codemods/deskRename.js +18 -0
- package/dist/actions/codemods/deskRename.js.map +1 -0
- package/dist/actions/codemods/index.js +10 -0
- package/dist/actions/codemods/index.js.map +1 -0
- package/dist/actions/codemods/partsTypeDirective.js +27 -0
- package/dist/actions/codemods/partsTypeDirective.js.map +1 -0
- package/dist/actions/codemods/reactIconsV3.js +30 -0
- package/dist/actions/codemods/reactIconsV3.js.map +1 -0
- package/dist/actions/codemods/types.js +3 -0
- package/dist/actions/codemods/types.js.map +1 -0
- package/dist/actions/cors/filterAndValidateOrigin.js +38 -0
- package/dist/actions/cors/filterAndValidateOrigin.js.map +1 -0
- package/dist/actions/dataset/create.js +46 -0
- package/dist/actions/dataset/create.js.map +1 -0
- package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
- package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
- package/dist/actions/dataset/processAliasName.js +20 -0
- package/dist/actions/dataset/processAliasName.js.map +1 -0
- package/dist/actions/dataset/validateDatasetAliasName.js +28 -0
- package/dist/actions/dataset/validateDatasetAliasName.js.map +1 -0
- package/dist/actions/dataset/validateDatasetName.js +39 -0
- package/dist/actions/dataset/validateDatasetName.js.map +1 -0
- package/dist/actions/debug/gatherDebugInfo.js +104 -0
- package/dist/actions/debug/gatherDebugInfo.js.map +1 -0
- package/dist/actions/debug/getGlobalConfigLocation.js +7 -0
- package/dist/actions/debug/getGlobalConfigLocation.js.map +1 -0
- package/dist/actions/debug/types.js +3 -0
- package/dist/actions/debug/types.js.map +1 -0
- package/dist/actions/deploy/checkDir.js +31 -0
- package/dist/actions/deploy/checkDir.js.map +1 -0
- package/dist/actions/deploy/createStudioUserApplication.js +59 -0
- package/dist/actions/deploy/createStudioUserApplication.js.map +1 -0
- package/dist/actions/deploy/createUserApplicationForApp.js +56 -0
- package/dist/actions/deploy/createUserApplicationForApp.js.map +1 -0
- package/dist/actions/deploy/deployApp.js +162 -0
- package/dist/actions/deploy/deployApp.js.map +1 -0
- package/dist/actions/deploy/deployDebug.js +4 -0
- package/dist/actions/deploy/deployDebug.js.map +1 -0
- package/dist/actions/deploy/deployStudio.js +134 -0
- package/dist/actions/deploy/deployStudio.js.map +1 -0
- package/dist/actions/deploy/findUserApplicationForApp.js +110 -0
- package/dist/actions/deploy/findUserApplicationForApp.js.map +1 -0
- package/dist/actions/deploy/findUserApplicationForStudio.js +143 -0
- package/dist/actions/deploy/findUserApplicationForStudio.js.map +1 -0
- package/dist/actions/deploy/types.js +3 -0
- package/dist/actions/deploy/types.js.map +1 -0
- package/dist/actions/dev/devAction.js +7 -0
- package/dist/actions/dev/devAction.js.map +1 -0
- package/dist/actions/dev/devDebug.js +4 -0
- package/dist/actions/dev/devDebug.js.map +1 -0
- package/dist/actions/dev/getCoreAppUrl.js +10 -0
- package/dist/actions/dev/getCoreAppUrl.js.map +1 -0
- package/dist/actions/dev/getDevServerConfig.js +28 -0
- package/dist/actions/dev/getDevServerConfig.js.map +1 -0
- package/dist/actions/dev/startAppDevServer.js +57 -0
- package/dist/actions/dev/startAppDevServer.js.map +1 -0
- package/dist/actions/dev/startStudioDevServer.js +154 -0
- package/dist/actions/dev/startStudioDevServer.js.map +1 -0
- package/dist/actions/dev/types.js +3 -0
- package/dist/actions/dev/types.js.map +1 -0
- package/dist/actions/docs/normalizeDocsPath.js +15 -0
- package/dist/actions/docs/normalizeDocsPath.js.map +1 -0
- package/dist/actions/documents/constants.js +3 -0
- package/dist/actions/documents/constants.js.map +1 -0
- package/dist/actions/documents/editor.js +26 -0
- package/dist/actions/documents/editor.js.map +1 -0
- package/dist/actions/documents/types.js +3 -0
- package/dist/actions/documents/types.js.map +1 -0
- package/dist/actions/documents/validate.js +60 -0
- package/dist/actions/documents/validate.js.map +1 -0
- package/dist/actions/documents/validateDocuments.worker.js +251 -0
- package/dist/actions/documents/validateDocuments.worker.js.map +1 -0
- package/dist/actions/documents/validation/reporters/index.js +10 -0
- package/dist/actions/documents/validation/reporters/index.js.map +1 -0
- package/dist/actions/documents/validation/reporters/jsonReporter.js +25 -0
- package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -0
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js +18 -0
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js +62 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js.map +1 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/index.js +3 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/index.js.map +1 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.js +92 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.js.map +1 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/util.js +45 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/util.js.map +1 -0
- package/dist/actions/exec/configClient.worker.js +9 -0
- package/dist/actions/exec/configClient.worker.js.map +1 -0
- package/dist/actions/exec/execScript.js +77 -0
- package/dist/actions/exec/execScript.js.map +1 -0
- package/dist/actions/exec/registerBrowserEnv.worker.js +17 -0
- 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.js +65 -0
- package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -0
- package/dist/actions/graphql/getGraphQLAPIs.worker.js +126 -0
- package/dist/actions/graphql/getGraphQLAPIs.worker.js.map +1 -0
- 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 +3 -0
- package/dist/actions/graphql/types.js.map +1 -0
- package/dist/actions/hook/constants.js +3 -0
- package/dist/actions/hook/constants.js.map +1 -0
- package/dist/actions/hook/formatFailure.js +29 -0
- package/dist/actions/hook/formatFailure.js.map +1 -0
- package/dist/actions/hook/types.js +3 -0
- package/dist/actions/hook/types.js.map +1 -0
- 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/constants.js +3 -0
- package/dist/actions/init/constants.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/determineAppTemplate.js +16 -0
- package/dist/actions/init/determineAppTemplate.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 +211 -0
- package/dist/actions/init/remoteTemplate.js.map +1 -0
- 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 +3 -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/manifest/SchemaIcon.js +21 -0
- package/dist/actions/manifest/SchemaIcon.js.map +1 -0
- package/dist/actions/manifest/extractAppManifest.js +51 -0
- package/dist/actions/manifest/extractAppManifest.js.map +1 -0
- package/dist/actions/manifest/extractManifest.js +93 -0
- package/dist/actions/manifest/extractManifest.js.map +1 -0
- package/dist/actions/manifest/extractWorkspaceManifest.js +406 -0
- package/dist/actions/manifest/extractWorkspaceManifest.js.map +1 -0
- package/dist/actions/manifest/purifyConfig.js +307 -0
- package/dist/actions/manifest/purifyConfig.js.map +1 -0
- package/dist/actions/manifest/schemaTypeHelpers.js +110 -0
- package/dist/actions/manifest/schemaTypeHelpers.js.map +1 -0
- package/dist/actions/manifest/types.js +5 -0
- package/dist/actions/manifest/types.js.map +1 -0
- package/dist/actions/mcp/detectAvailableEditors.js +75 -0
- package/dist/actions/mcp/detectAvailableEditors.js.map +1 -0
- 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 +41 -0
- package/dist/actions/mcp/writeMCPConfig.js.map +1 -0
- package/dist/actions/media/__tests__/createMockClient.js +32 -0
- package/dist/actions/media/__tests__/createMockClient.js.map +1 -0
- package/dist/actions/media/getMediaLibraryConfig.js +5 -0
- package/dist/actions/media/getMediaLibraryConfig.js.map +1 -0
- package/dist/actions/media/importAspects.js +112 -0
- package/dist/actions/media/importAspects.js.map +1 -0
- package/dist/actions/media/importMedia.js +213 -0
- package/dist/actions/media/importMedia.js.map +1 -0
- package/dist/actions/media/importMediaDebug.js +4 -0
- package/dist/actions/media/importMediaDebug.js.map +1 -0
- package/dist/actions/organizations/getOrganization.js +67 -0
- package/dist/actions/organizations/getOrganization.js.map +1 -0
- package/dist/actions/organizations/getOrganizationChoices.js +23 -0
- package/dist/actions/organizations/getOrganizationChoices.js.map +1 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js +9 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js.map +1 -0
- package/dist/actions/organizations/hasProjectAttachGrant.js +24 -0
- package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -0
- package/dist/actions/organizations/validateOrganizationName.js +10 -0
- package/dist/actions/organizations/validateOrganizationName.js.map +1 -0
- package/dist/actions/preview/getPreviewServerConfig.js +16 -0
- package/dist/actions/preview/getPreviewServerConfig.js.map +1 -0
- package/dist/actions/preview/previewAction.js +20 -0
- package/dist/actions/preview/previewAction.js.map +1 -0
- package/dist/actions/preview/types.js +3 -0
- package/dist/actions/preview/types.js.map +1 -0
- 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 +101 -0
- package/dist/actions/schema/deleteSchemaAction.js.map +1 -0
- package/dist/actions/schema/deploySchemas.js +98 -0
- package/dist/actions/schema/deploySchemas.js.map +1 -0
- 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 +74 -0
- package/dist/actions/schema/formatSchemaValidation.js.map +1 -0
- package/dist/actions/schema/listSchemas.js +119 -0
- package/dist/actions/schema/listSchemas.js.map +1 -0
- package/dist/actions/schema/metafile.js +51 -0
- package/dist/actions/schema/metafile.js.map +1 -0
- package/dist/actions/schema/schemaStoreTypes.js +19 -0
- package/dist/actions/schema/schemaStoreTypes.js.map +1 -0
- package/dist/actions/schema/types.js +9 -0
- package/dist/actions/schema/types.js.map +1 -0
- package/dist/actions/schema/utils/debug.js +6 -0
- package/dist/actions/schema/utils/debug.js.map +1 -0
- 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 +33 -0
- package/dist/actions/schema/utils/manifestExtractor.js.map +1 -0
- package/dist/actions/schema/utils/manifestReader.js +71 -0
- package/dist/actions/schema/utils/manifestReader.js.map +1 -0
- package/dist/actions/schema/utils/schemaStoreOutStrings.js +11 -0
- package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -0
- package/dist/actions/schema/utils/schemaStoreValidation.js +108 -0
- package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
- package/dist/actions/schema/utils/workspaceSchemaId.js +23 -0
- package/dist/actions/schema/utils/workspaceSchemaId.js.map +1 -0
- package/dist/actions/schema/validateAction.js +71 -0
- package/dist/actions/schema/validateAction.js.map +1 -0
- package/dist/actions/schema/validateSchema.worker.js +124 -0
- package/dist/actions/schema/validateSchema.worker.js.map +1 -0
- package/dist/actions/telemetry/getLearnMoreMessage.js +15 -0
- package/dist/actions/telemetry/getLearnMoreMessage.js.map +1 -0
- package/dist/actions/telemetry/getStatusDisplay.js +26 -0
- package/dist/actions/telemetry/getStatusDisplay.js.map +1 -0
- package/dist/actions/telemetry/getStatusMessage.js +36 -0
- package/dist/actions/telemetry/getStatusMessage.js.map +1 -0
- package/dist/actions/telemetry/resolveConsent.js +48 -0
- package/dist/actions/telemetry/resolveConsent.js.map +1 -0
- package/dist/actions/telemetry/setConsent.js +83 -0
- package/dist/actions/telemetry/setConsent.js.map +1 -0
- package/dist/actions/telemetry/telemetryDebug.js +4 -0
- package/dist/actions/telemetry/telemetryDebug.js.map +1 -0
- package/dist/actions/telemetry/telemetryDisclosure.js +33 -0
- package/dist/actions/telemetry/telemetryDisclosure.js.map +1 -0
- package/dist/actions/telemetry/telemetryLearnMoreMessage.js +15 -0
- package/dist/actions/telemetry/telemetryLearnMoreMessage.js.map +1 -0
- package/dist/actions/tokens/constants.js +5 -0
- package/dist/actions/tokens/constants.js.map +1 -0
- package/dist/actions/tokens/types.js +3 -0
- package/dist/actions/tokens/types.js.map +1 -0
- package/dist/actions/tokens/validateRole.js +23 -0
- package/dist/actions/tokens/validateRole.js.map +1 -0
- package/dist/actions/undeploy/getStudioOrAppUserApplication.js +36 -0
- package/dist/actions/undeploy/getStudioOrAppUserApplication.js.map +1 -0
- package/dist/actions/users/getMembersForProject.js +47 -0
- package/dist/actions/users/getMembersForProject.js.map +1 -0
- package/dist/actions/users/getPendingInvitations.js +15 -0
- package/dist/actions/users/getPendingInvitations.js.map +1 -0
- package/dist/actions/users/types.js +3 -0
- package/dist/actions/users/types.js.map +1 -0
- package/dist/actions/users/usersDebug.js +4 -0
- package/dist/actions/users/usersDebug.js.map +1 -0
- package/dist/actions/users/validateEmail.js +14 -0
- package/dist/actions/users/validateEmail.js.map +1 -0
- package/dist/actions/versions/buildPackageArray.js +44 -0
- package/dist/actions/versions/buildPackageArray.js.map +1 -0
- package/dist/actions/versions/filterSanityModules.js +20 -0
- package/dist/actions/versions/filterSanityModules.js.map +1 -0
- package/dist/actions/versions/findSanityModulesVersions.js +47 -0
- package/dist/actions/versions/findSanityModulesVersions.js.map +1 -0
- package/dist/actions/versions/getFormatters.js +30 -0
- package/dist/actions/versions/getFormatters.js.map +1 -0
- package/dist/actions/versions/tryFindLatestVersion.js +21 -0
- package/dist/actions/versions/tryFindLatestVersion.js.map +1 -0
- package/dist/actions/versions/types.js +5 -0
- package/dist/actions/versions/types.js.map +1 -0
- package/dist/actions/versions/versionsDebug.js +4 -0
- package/dist/actions/versions/versionsDebug.js.map +1 -0
- package/dist/commands/backup/disable.js +94 -0
- package/dist/commands/backup/disable.js.map +1 -0
- package/dist/commands/backup/download.js +291 -0
- package/dist/commands/backup/download.js.map +1 -0
- package/dist/commands/backup/enable.js +99 -0
- package/dist/commands/backup/enable.js.map +1 -0
- package/dist/commands/backup/list.js +187 -0
- package/dist/commands/backup/list.js.map +1 -0
- package/dist/commands/build.js +82 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/codemod.js +141 -0
- package/dist/commands/codemod.js.map +1 -0
- package/dist/commands/cors/add.js +154 -0
- package/dist/commands/cors/add.js.map +1 -0
- package/dist/commands/cors/delete.js +90 -0
- package/dist/commands/cors/delete.js.map +1 -0
- package/dist/commands/cors/list.js +40 -0
- package/dist/commands/cors/list.js.map +1 -0
- package/dist/commands/dataset/alias/create.js +118 -0
- package/dist/commands/dataset/alias/create.js.map +1 -0
- package/dist/commands/dataset/alias/delete.js +88 -0
- package/dist/commands/dataset/alias/delete.js.map +1 -0
- package/dist/commands/dataset/alias/link.js +137 -0
- package/dist/commands/dataset/alias/link.js.map +1 -0
- package/dist/commands/dataset/alias/unlink.js +98 -0
- package/dist/commands/dataset/alias/unlink.js.map +1 -0
- package/dist/commands/dataset/copy.js +369 -0
- package/dist/commands/dataset/copy.js.map +1 -0
- package/dist/commands/dataset/create.js +106 -0
- package/dist/commands/dataset/create.js.map +1 -0
- package/dist/commands/dataset/delete.js +104 -0
- package/dist/commands/dataset/delete.js.map +1 -0
- package/dist/commands/dataset/export.js +271 -0
- package/dist/commands/dataset/export.js.map +1 -0
- package/dist/commands/dataset/import.js +3 -0
- package/dist/commands/dataset/import.js.map +1 -0
- package/dist/commands/dataset/list.js +50 -0
- package/dist/commands/dataset/list.js.map +1 -0
- package/dist/commands/dataset/visibility/get.js +55 -0
- package/dist/commands/dataset/visibility/get.js.map +1 -0
- package/dist/commands/dataset/visibility/set.js +88 -0
- package/dist/commands/dataset/visibility/set.js.map +1 -0
- package/dist/commands/debug.js +93 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/deploy.js +115 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.js +65 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/docs/browse.js +15 -0
- package/dist/commands/docs/browse.js.map +1 -0
- package/dist/commands/docs/read.js +81 -0
- package/dist/commands/docs/read.js.map +1 -0
- package/dist/commands/docs/search.js +111 -0
- package/dist/commands/docs/search.js.map +1 -0
- package/dist/commands/documents/create.js +338 -0
- package/dist/commands/documents/create.js.map +1 -0
- package/dist/commands/documents/delete.js +104 -0
- package/dist/commands/documents/delete.js.map +1 -0
- package/dist/commands/documents/get.js +85 -0
- package/dist/commands/documents/get.js.map +1 -0
- package/dist/commands/documents/query.js +105 -0
- package/dist/commands/documents/query.js.map +1 -0
- package/dist/commands/documents/validate.js +142 -0
- package/dist/commands/documents/validate.js.map +1 -0
- package/dist/commands/exec.js +54 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/graphql/deploy.js +429 -0
- package/dist/commands/graphql/deploy.js.map +1 -0
- package/dist/commands/graphql/list.js +53 -0
- package/dist/commands/graphql/list.js.map +1 -0
- package/dist/commands/graphql/undeploy.js +143 -0
- package/dist/commands/graphql/undeploy.js.map +1 -0
- package/dist/commands/hook/attempt.js +66 -0
- package/dist/commands/hook/attempt.js.map +1 -0
- package/dist/commands/hook/create.js +46 -0
- package/dist/commands/hook/create.js.map +1 -0
- package/dist/commands/hook/delete.js +86 -0
- package/dist/commands/hook/delete.js.map +1 -0
- package/dist/commands/hook/list.js +46 -0
- package/dist/commands/hook/list.js.map +1 -0
- package/dist/commands/hook/logs.js +184 -0
- package/dist/commands/hook/logs.js.map +1 -0
- package/dist/commands/init.js +1389 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.js +43 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/learn.js +15 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/login.js +50 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.js +37 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/manage.js +29 -0
- package/dist/commands/manage.js.map +1 -0
- package/dist/commands/manifest/extract.js +43 -0
- package/dist/commands/manifest/extract.js.map +1 -0
- package/dist/commands/mcp/configure.js +28 -0
- package/dist/commands/mcp/configure.js.map +1 -0
- package/dist/commands/media/create-aspect.js +88 -0
- package/dist/commands/media/create-aspect.js.map +1 -0
- package/dist/commands/media/delete-aspect.js +85 -0
- package/dist/commands/media/delete-aspect.js.map +1 -0
- package/dist/commands/media/deploy-aspect.js +151 -0
- package/dist/commands/media/deploy-aspect.js.map +1 -0
- package/dist/commands/media/export.js +210 -0
- package/dist/commands/media/export.js.map +1 -0
- package/dist/commands/media/import.js +160 -0
- package/dist/commands/media/import.js.map +1 -0
- package/dist/commands/openapi/get.js +83 -0
- package/dist/commands/openapi/get.js.map +1 -0
- package/dist/commands/openapi/list.js +80 -0
- package/dist/commands/openapi/list.js.map +1 -0
- package/dist/commands/preview.js +60 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/projects/create.js +181 -0
- package/dist/commands/projects/create.js.map +1 -0
- package/dist/commands/projects/list.js +76 -0
- package/dist/commands/projects/list.js.map +1 -0
- package/dist/commands/schema/delete.js +91 -0
- package/dist/commands/schema/delete.js.map +1 -0
- package/dist/commands/schema/deploy.js +98 -0
- package/dist/commands/schema/deploy.js.map +1 -0
- package/dist/commands/schema/extract.js +46 -0
- package/dist/commands/schema/extract.js.map +1 -0
- package/dist/commands/schema/list.js +104 -0
- package/dist/commands/schema/list.js.map +1 -0
- package/dist/commands/schema/validate.js +73 -0
- package/dist/commands/schema/validate.js.map +1 -0
- package/dist/commands/telemetry/disable.js +33 -0
- package/dist/commands/telemetry/disable.js.map +1 -0
- package/dist/commands/telemetry/enable.js +33 -0
- package/dist/commands/telemetry/enable.js.map +1 -0
- package/dist/commands/telemetry/status.js +25 -0
- package/dist/commands/telemetry/status.js.map +1 -0
- package/dist/commands/tokens/add.js +135 -0
- package/dist/commands/tokens/add.js.map +1 -0
- package/dist/commands/tokens/delete.js +107 -0
- package/dist/commands/tokens/delete.js.map +1 -0
- package/dist/commands/tokens/list.js +92 -0
- package/dist/commands/tokens/list.js.map +1 -0
- package/dist/commands/undeploy.js +93 -0
- package/dist/commands/undeploy.js.map +1 -0
- package/dist/commands/users/invite.js +100 -0
- package/dist/commands/users/invite.js.map +1 -0
- package/dist/commands/users/list.js +101 -0
- package/dist/commands/users/list.js.map +1 -0
- package/dist/commands/versions.js +27 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/config/createCliConfig.js +9 -0
- package/dist/config/createCliConfig.js.map +1 -0
- package/dist/config/defineCliConfig.js +5 -0
- package/dist/config/defineCliConfig.js.map +1 -0
- package/dist/hooks/prerun/flushTelemetry.worker.js +22 -0
- package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -0
- package/dist/hooks/prerun/injectEnvVariables.js +31 -0
- package/dist/hooks/prerun/injectEnvVariables.js.map +1 -0
- package/dist/hooks/prerun/setupTelemetry.js +72 -0
- package/dist/hooks/prerun/setupTelemetry.js.map +1 -0
- package/dist/hooks/prerun/warnings.js +6 -0
- package/dist/hooks/prerun/warnings.js.map +1 -0
- package/dist/index.d.ts +2326 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/init/nextjs.js +56 -0
- package/dist/prompts/init/nextjs.js.map +1 -0
- package/dist/prompts/init/promptForTypescript.js +9 -0
- package/dist/prompts/init/promptForTypescript.js.map +1 -0
- package/dist/prompts/promptForDataset.js +32 -0
- package/dist/prompts/promptForDataset.js.map +1 -0
- package/dist/prompts/promptForDatasetAclMode.js +27 -0
- package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
- package/dist/prompts/promptForDatasetAliasName.js +17 -0
- package/dist/prompts/promptForDatasetAliasName.js.map +1 -0
- package/dist/prompts/promptForDatasetName.js +20 -0
- package/dist/prompts/promptForDatasetName.js.map +1 -0
- package/dist/prompts/promptForDefaultConfig.js +12 -0
- package/dist/prompts/promptForDefaultConfig.js.map +1 -0
- package/dist/prompts/promptForMediaLibrary.js +37 -0
- package/dist/prompts/promptForMediaLibrary.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/prompts/selectDataset.js +12 -0
- package/dist/prompts/selectDataset.js.map +1 -0
- package/dist/prompts/selectMediaLibrary.js +34 -0
- package/dist/prompts/selectMediaLibrary.js.map +1 -0
- package/dist/server/devServer.js +53 -0
- package/dist/server/devServer.js.map +1 -0
- package/dist/server/gracefulServerDeath.js +12 -0
- package/dist/server/gracefulServerDeath.js.map +1 -0
- package/dist/server/previewServer.js +93 -0
- package/dist/server/previewServer.js.map +1 -0
- package/dist/server/serverDebug.js +4 -0
- package/dist/server/serverDebug.js.map +1 -0
- package/dist/server/vite/plugin-sanity-basepath-redirect.js +25 -0
- package/dist/server/vite/plugin-sanity-basepath-redirect.js.map +1 -0
- package/dist/server/vite/plugin-sanity-build-entries.js +65 -0
- package/dist/server/vite/plugin-sanity-build-entries.js.map +1 -0
- package/dist/server/vite/plugin-sanity-favicons.js +72 -0
- package/dist/server/vite/plugin-sanity-favicons.js.map +1 -0
- package/dist/server/vite/plugin-sanity-runtime-rewrite.js +18 -0
- package/dist/server/vite/plugin-sanity-runtime-rewrite.js.map +1 -0
- package/dist/services/auth.js +13 -0
- package/dist/services/auth.js.map +1 -0
- package/dist/services/backup.js +51 -0
- package/dist/services/backup.js.map +1 -0
- package/dist/services/cors.js +38 -0
- package/dist/services/cors.js.map +1 -0
- package/dist/services/datasetAliases.js +64 -0
- package/dist/services/datasetAliases.js.map +1 -0
- package/dist/services/datasets.js +153 -0
- package/dist/services/datasets.js.map +1 -0
- package/dist/services/docs.js +46 -0
- package/dist/services/docs.js.map +1 -0
- package/dist/services/documents.js +56 -0
- package/dist/services/documents.js.map +1 -0
- package/dist/services/getProjectFeatures.js +16 -0
- package/dist/services/getProjectFeatures.js.map +1 -0
- package/dist/services/getUrlHeaders.js +36 -0
- package/dist/services/getUrlHeaders.js.map +1 -0
- package/dist/services/graphql.js +96 -0
- package/dist/services/graphql.js.map +1 -0
- package/dist/services/hooks.js +59 -0
- package/dist/services/hooks.js.map +1 -0
- package/dist/services/mcp.js +50 -0
- package/dist/services/mcp.js.map +1 -0
- package/dist/services/mediaLibraries.js +74 -0
- package/dist/services/mediaLibraries.js.map +1 -0
- package/dist/services/organizations.js +42 -0
- package/dist/services/organizations.js.map +1 -0
- package/dist/services/plans.js +37 -0
- package/dist/services/plans.js.map +1 -0
- package/dist/services/projects.js +119 -0
- package/dist/services/projects.js.map +1 -0
- package/dist/services/schemas.js +40 -0
- package/dist/services/schemas.js.map +1 -0
- package/dist/services/telemetry.js +80 -0
- package/dist/services/telemetry.js.map +1 -0
- package/dist/services/tokens.js +72 -0
- package/dist/services/tokens.js.map +1 -0
- package/dist/services/user.js +35 -0
- package/dist/services/user.js.map +1 -0
- package/dist/services/userApplications.js +164 -0
- package/dist/services/userApplications.js.map +1 -0
- 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/cli.telemetry.js +8 -0
- package/dist/telemetry/cli.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 +5 -0
- package/dist/types.js.map +1 -0
- package/dist/typings/deepSortObject.d.js +2 -0
- package/dist/typings/deepSortObject.d.js.map +1 -0
- package/dist/util/absolutify.js +26 -0
- package/dist/util/absolutify.js.map +1 -0
- package/dist/util/appId.js +58 -0
- package/dist/util/appId.js.map +1 -0
- package/dist/util/canLaunchBrowser.js +14 -0
- package/dist/util/canLaunchBrowser.js.map +1 -0
- package/dist/util/cliClient.js +41 -0
- package/dist/util/cliClient.js.map +1 -0
- package/dist/util/compareDependencyVersions.js +73 -0
- package/dist/util/compareDependencyVersions.js.map +1 -0
- package/dist/util/copy.js +37 -0
- package/dist/util/copy.js.map +1 -0
- package/dist/util/copyDir.js +63 -0
- package/dist/util/copyDir.js.map +1 -0
- package/dist/util/detectRuntime.js +20 -0
- package/dist/util/detectRuntime.js.map +1 -0
- package/dist/util/determineIsApp.js +9 -0
- package/dist/util/determineIsApp.js.map +1 -0
- package/dist/util/dirIsEmptyOrNonExistent.js +18 -0
- package/dist/util/dirIsEmptyOrNonExistent.js.map +1 -0
- package/dist/util/ensureTrailingSlash.js +12 -0
- package/dist/util/ensureTrailingSlash.js.map +1 -0
- package/dist/util/errorMessages.js +6 -0
- package/dist/util/errorMessages.js.map +1 -0
- package/dist/util/extractDocumentsFromNdjsonOrTarball.js +88 -0
- package/dist/util/extractDocumentsFromNdjsonOrTarball.js.map +1 -0
- package/dist/util/findNdjsonEntry.js +21 -0
- package/dist/util/findNdjsonEntry.js.map +1 -0
- package/dist/util/formatSize.js +10 -0
- package/dist/util/formatSize.js.map +1 -0
- 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/getCliVersion.js +28 -0
- package/dist/util/getCliVersion.js.map +1 -0
- package/dist/util/getErrorMessage.js +19 -0
- package/dist/util/getErrorMessage.js.map +1 -0
- package/dist/util/getLocalPackageVersion.js +32 -0
- package/dist/util/getLocalPackageVersion.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/getSharedServerConfig.js +31 -0
- package/dist/util/getSharedServerConfig.js.map +1 -0
- package/dist/util/getWorkspace.js +18 -0
- package/dist/util/getWorkspace.js.map +1 -0
- package/dist/util/humanFileSize.js +12 -0
- package/dist/util/humanFileSize.js.map +1 -0
- package/dist/util/importStudioConfig.js +40 -0
- package/dist/util/importStudioConfig.js.map +1 -0
- package/dist/util/isPathDirName.js +6 -0
- package/dist/util/isPathDirName.js.map +1 -0
- package/dist/util/isSanityDocumentish.js +20 -0
- package/dist/util/isSanityDocumentish.js.map +1 -0
- package/dist/util/loadEnv.js +3 -0
- package/dist/util/loadEnv.js.map +1 -0
- package/dist/util/moduleFormatUtils.js +18 -0
- package/dist/util/moduleFormatUtils.js.map +1 -0
- package/dist/util/packageManager/installPackages.js +87 -0
- package/dist/util/packageManager/installPackages.js.map +1 -0
- package/dist/util/packageManager/packageManagerChoice.js +181 -0
- package/dist/util/packageManager/packageManagerChoice.js.map +1 -0
- package/dist/util/packageManager/upgradePackages.js +69 -0
- package/dist/util/packageManager/upgradePackages.js.map +1 -0
- package/dist/util/parseArguments.js +42 -0
- package/dist/util/parseArguments.js.map +1 -0
- package/dist/util/pluralize.js +11 -0
- package/dist/util/pluralize.js.map +1 -0
- package/dist/util/readModuleVersion.js +15 -0
- package/dist/util/readModuleVersion.js.map +1 -0
- package/dist/util/readPackageJson.js +44 -0
- package/dist/util/readPackageJson.js.map +1 -0
- package/dist/util/readPackageManifest.js +46 -0
- package/dist/util/readPackageManifest.js.map +1 -0
- 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/toInt.js +9 -0
- package/dist/util/toInt.js.map +1 -0
- package/dist/util/trimHashFromVersion.js +8 -0
- package/dist/util/trimHashFromVersion.js.map +1 -0
- package/dist/util/uniqBy.js +14 -0
- package/dist/util/uniqBy.js.map +1 -0
- package/dist/util/validation/validateDocumentsUtils.js +33 -0
- package/dist/util/validation/validateDocumentsUtils.js.map +1 -0
- package/dist/util/warnAboutMissingAppId.js +15 -0
- package/dist/util/warnAboutMissingAppId.js.map +1 -0
- package/dist/util/warnOnNonProductionEnvironment.js +18 -0
- package/dist/util/warnOnNonProductionEnvironment.js.map +1 -0
- package/dist/util/workerChannels.js +172 -0
- package/dist/util/workerChannels.js.map +1 -0
- package/oclif.config.js +21 -0
- package/oclif.manifest.json +4154 -0
- package/package.json +138 -98
- package/templates/app-quickstart/src/App.css +3 -1
- package/templates/app-quickstart/src/App.tsx +1 -1
- package/templates/app-sanity-ui/src/App.tsx +2 -2
- package/templates/app-sanity-ui/src/ExampleComponent.tsx +2 -1
- package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +3 -3
- package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +2 -2
- package/templates/shopify/components/hotspots/ProductTooltip.tsx +1 -1
- package/templates/shopify/components/icons/Shopify.tsx +0 -2
- package/templates/shopify/components/inputs/CollectionHidden.tsx +0 -1
- package/templates/shopify/components/media/ColorTheme.tsx +1 -1
- package/templates/shopify/constants.ts +4 -4
- package/templates/shopify/plugins/customDocumentActions/index.ts +2 -2
- package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +1 -1
- package/templates/shopify/schemaTypes/documents/collection.tsx +1 -2
- package/templates/shopify/schemaTypes/documents/page.ts +1 -1
- package/templates/shopify/schemaTypes/documents/product.tsx +1 -1
- package/templates/shopify/schemaTypes/documents/productVariant.tsx +2 -3
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +0 -1
- package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +1 -3
- package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +0 -1
- package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +2 -3
- package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +1 -1
- package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +1 -2
- package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +1 -2
- package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +7 -7
- package/templates/shopify/schemaTypes/singletons/homeType.ts +8 -8
- package/templates/shopify/structure/collectionStructure.ts +4 -1
- package/templates/shopify/structure/colorThemeStructure.ts +1 -1
- package/templates/shopify/structure/homeStructure.ts +2 -2
- package/templates/shopify/structure/index.ts +1 -1
- package/templates/shopify/structure/pageStructure.ts +2 -2
- package/templates/shopify/structure/productStructure.ts +7 -7
- package/templates/shopify/structure/settingStructure.ts +1 -1
- package/templates/shopify/utils/defineStructure.ts +1 -1
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +1 -1
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +1 -1
- package/templates/shopify-online-storefront/structure/collectionStructure.ts +4 -1
- package/templates/shopify-online-storefront/structure/productStructure.ts +4 -4
- package/templates/shopify-online-storefront/utils/defineStructure.ts +1 -1
- package/bin/dev.js +0 -30
- package/bin/sanity +0 -14
- package/lib/_chunks-cjs/cli.js +0 -70870
- package/lib/_chunks-cjs/cli.js.map +0 -1
- package/lib/_chunks-cjs/cliWorker.js +0 -19
- package/lib/_chunks-cjs/cliWorker.js.map +0 -1
- package/lib/_chunks-cjs/generateAction.js +0 -128
- package/lib/_chunks-cjs/generateAction.js.map +0 -1
- package/lib/_chunks-cjs/getCliConfig.js +0 -89
- package/lib/_chunks-cjs/getCliConfig.js.map +0 -1
- package/lib/_chunks-cjs/index.js +0 -31
- package/lib/_chunks-cjs/index.js.map +0 -1
- package/lib/_chunks-cjs/journeyConfig.js +0 -113
- package/lib/_chunks-cjs/journeyConfig.js.map +0 -1
- package/lib/_chunks-cjs/loadEnv.js +0 -347
- package/lib/_chunks-cjs/loadEnv.js.map +0 -1
- package/lib/_chunks-dts/types.d.ts +0 -432
- package/lib/cli.d.ts +0 -7
- package/lib/cli.js +0 -10
- package/lib/cli.js.map +0 -1
- package/lib/index.d.ts +0 -44
- package/lib/index.js +0 -46
- package/lib/index.js.map +0 -1
- package/lib/run.d.ts +0 -1
- package/lib/run.js +0 -8
- package/lib/run.js.map +0 -1
- package/lib/workers/getAndWriteJourneySchema.d.ts +0 -1
- package/lib/workers/getAndWriteJourneySchema.js +0 -4
- package/lib/workers/getAndWriteJourneySchema.js.map +0 -1
- package/lib/workers/getCliConfig.d.ts +0 -1
- package/lib/workers/getCliConfig.js +0 -10
- package/lib/workers/getCliConfig.js.map +0 -1
- package/lib/workers/typegenGenerate.d.ts +0 -18
- package/lib/workers/typegenGenerate.js +0 -47
- package/lib/workers/typegenGenerate.js.map +0 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createStudioWorker, getGlobalCliClient } from '@sanity/cli-core';
|
|
2
|
+
import { createReceiver } from '../../util/workerChannels.js';
|
|
3
|
+
import { DOCUMENTS_API_VERSION } from './constants.js';
|
|
4
|
+
const defaultReporter = ({ dispose, stream })=>{
|
|
5
|
+
async function* createValidationGenerator() {
|
|
6
|
+
for await (const { documentId, documentType, level, markers, revision } of stream.validation()){
|
|
7
|
+
const result = {
|
|
8
|
+
documentId,
|
|
9
|
+
documentType,
|
|
10
|
+
level,
|
|
11
|
+
markers,
|
|
12
|
+
revision
|
|
13
|
+
};
|
|
14
|
+
yield result;
|
|
15
|
+
}
|
|
16
|
+
await dispose();
|
|
17
|
+
}
|
|
18
|
+
return createValidationGenerator();
|
|
19
|
+
};
|
|
20
|
+
export async function validateDocuments(options) {
|
|
21
|
+
const { dataset, level, maxCustomValidationConcurrency, maxFetchConcurrency, ndjsonFilePath, projectId, reporter = defaultReporter, workDir = process.cwd(), workspace } = options;
|
|
22
|
+
const apiClient = await getGlobalCliClient({
|
|
23
|
+
apiVersion: DOCUMENTS_API_VERSION,
|
|
24
|
+
requireUser: true
|
|
25
|
+
});
|
|
26
|
+
const clientConfig = {
|
|
27
|
+
...apiClient.config(),
|
|
28
|
+
// we set this explictly to true because we pass in a token via the
|
|
29
|
+
// `clientConfiguration` object and also mock a browser environment in
|
|
30
|
+
// this worker which triggers the browser warning
|
|
31
|
+
ignoreBrowserTokenWarning: true,
|
|
32
|
+
// Removing from object so config can be serialized
|
|
33
|
+
// before sent to validation worker
|
|
34
|
+
requester: undefined,
|
|
35
|
+
// we set this explictly to true because the default client configuration
|
|
36
|
+
// from the CLI comes configured with `useProjectHostname: false` when
|
|
37
|
+
// `requireProject` is set to false
|
|
38
|
+
useProjectHostname: true
|
|
39
|
+
};
|
|
40
|
+
const worker = createStudioWorker(new URL('validateDocuments.worker.js', import.meta.url), {
|
|
41
|
+
name: 'validateDocuments',
|
|
42
|
+
studioRootPath: workDir,
|
|
43
|
+
workerData: {
|
|
44
|
+
// removes props in the config that make this object fail to serialize
|
|
45
|
+
clientConfig: structuredClone(clientConfig),
|
|
46
|
+
dataset,
|
|
47
|
+
level,
|
|
48
|
+
maxCustomValidationConcurrency,
|
|
49
|
+
maxFetchConcurrency,
|
|
50
|
+
ndjsonFilePath,
|
|
51
|
+
projectId,
|
|
52
|
+
studioHost: options.studioHost,
|
|
53
|
+
workDir,
|
|
54
|
+
workspace
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return reporter(createReceiver(worker));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/documents/validate.ts"],"sourcesContent":["import {createStudioWorker, getGlobalCliClient} from '@sanity/cli-core'\nimport {type ClientConfig} from '@sanity/client'\nimport {type ValidationMarker} from '@sanity/types'\n\nimport {createReceiver, type WorkerChannelReceiver} from '../../util/workerChannels.js'\nimport {DOCUMENTS_API_VERSION} from './constants.js'\nimport {Level, type ValidateDocumentsWorkerData, type ValidationWorkerChannel} from './types.js'\n\ninterface ValidateDocumentsOptions<TReturn = unknown> {\n dataset?: string // override\n level?: Level\n maxCustomValidationConcurrency?: number\n maxFetchConcurrency?: number\n ndjsonFilePath?: string\n projectId?: string // override\n reporter?: (worker: WorkerChannelReceiver<ValidationWorkerChannel>) => TReturn\n studioHost?: string\n workDir?: string\n workspace?: string\n}\n\ninterface DocumentValidationResult {\n documentId: string\n documentType: string\n level: ValidationMarker['level']\n markers: ValidationMarker[]\n revision: string\n}\n\nconst defaultReporter = ({dispose, stream}: WorkerChannelReceiver<ValidationWorkerChannel>) => {\n async function* createValidationGenerator() {\n for await (const {documentId, documentType, level, markers, revision} of stream.validation()) {\n const result: DocumentValidationResult = {\n documentId,\n documentType,\n level,\n markers,\n revision,\n }\n\n yield result\n }\n\n await dispose()\n }\n\n return createValidationGenerator()\n}\n\nexport function validateDocuments<TReturn>(\n options: Required<Pick<ValidateDocumentsOptions<TReturn>, 'reporter'>> &\n ValidateDocumentsOptions<TReturn>,\n): Promise<TReturn>\nexport function validateDocuments(\n options: ValidateDocumentsOptions,\n): Promise<AsyncIterable<DocumentValidationResult>>\nexport async function validateDocuments(options: ValidateDocumentsOptions): Promise<unknown> {\n const {\n dataset,\n level,\n maxCustomValidationConcurrency,\n maxFetchConcurrency,\n ndjsonFilePath,\n projectId,\n reporter = defaultReporter,\n workDir = process.cwd(),\n workspace,\n } = options\n\n const apiClient = await getGlobalCliClient({\n apiVersion: DOCUMENTS_API_VERSION,\n requireUser: true,\n })\n\n const clientConfig: ClientConfig = {\n ...apiClient.config(),\n // we set this explictly to true because we pass in a token via the\n // `clientConfiguration` object and also mock a browser environment in\n // this worker which triggers the browser warning\n ignoreBrowserTokenWarning: true,\n // Removing from object so config can be serialized\n // before sent to validation worker\n requester: undefined,\n // we set this explictly to true because the default client configuration\n // from the CLI comes configured with `useProjectHostname: false` when\n // `requireProject` is set to false\n useProjectHostname: true,\n }\n\n const worker = createStudioWorker(new URL('validateDocuments.worker.js', import.meta.url), {\n name: 'validateDocuments',\n studioRootPath: workDir,\n workerData: {\n // removes props in the config that make this object fail to serialize\n clientConfig: structuredClone(clientConfig),\n dataset,\n level,\n maxCustomValidationConcurrency,\n maxFetchConcurrency,\n ndjsonFilePath,\n projectId,\n studioHost: options.studioHost,\n workDir,\n workspace,\n } satisfies ValidateDocumentsWorkerData,\n })\n\n return reporter(createReceiver<ValidationWorkerChannel>(worker))\n}\n"],"names":["createStudioWorker","getGlobalCliClient","createReceiver","DOCUMENTS_API_VERSION","defaultReporter","dispose","stream","createValidationGenerator","documentId","documentType","level","markers","revision","validation","result","validateDocuments","options","dataset","maxCustomValidationConcurrency","maxFetchConcurrency","ndjsonFilePath","projectId","reporter","workDir","process","cwd","workspace","apiClient","apiVersion","requireUser","clientConfig","config","ignoreBrowserTokenWarning","requester","undefined","useProjectHostname","worker","URL","url","name","studioRootPath","workerData","structuredClone","studioHost"],"mappings":"AAAA,SAAQA,kBAAkB,EAAEC,kBAAkB,QAAO,mBAAkB;AAIvE,SAAQC,cAAc,QAAmC,+BAA8B;AACvF,SAAQC,qBAAqB,QAAO,iBAAgB;AAwBpD,MAAMC,kBAAkB,CAAC,EAACC,OAAO,EAAEC,MAAM,EAAiD;IACxF,gBAAgBC;QACd,WAAW,MAAM,EAACC,UAAU,EAAEC,YAAY,EAAEC,KAAK,EAAEC,OAAO,EAAEC,QAAQ,EAAC,IAAIN,OAAOO,UAAU,GAAI;YAC5F,MAAMC,SAAmC;gBACvCN;gBACAC;gBACAC;gBACAC;gBACAC;YACF;YAEA,MAAME;QACR;QAEA,MAAMT;IACR;IAEA,OAAOE;AACT;AASA,OAAO,eAAeQ,kBAAkBC,OAAiC;IACvE,MAAM,EACJC,OAAO,EACPP,KAAK,EACLQ,8BAA8B,EAC9BC,mBAAmB,EACnBC,cAAc,EACdC,SAAS,EACTC,WAAWlB,eAAe,EAC1BmB,UAAUC,QAAQC,GAAG,EAAE,EACvBC,SAAS,EACV,GAAGV;IAEJ,MAAMW,YAAY,MAAM1B,mBAAmB;QACzC2B,YAAYzB;QACZ0B,aAAa;IACf;IAEA,MAAMC,eAA6B;QACjC,GAAGH,UAAUI,MAAM,EAAE;QACrB,mEAAmE;QACnE,sEAAsE;QACtE,iDAAiD;QACjDC,2BAA2B;QAC3B,mDAAmD;QACnD,mCAAmC;QACnCC,WAAWC;QACX,yEAAyE;QACzE,sEAAsE;QACtE,mCAAmC;QACnCC,oBAAoB;IACtB;IAEA,MAAMC,SAASpC,mBAAmB,IAAIqC,IAAI,+BAA+B,YAAYC,GAAG,GAAG;QACzFC,MAAM;QACNC,gBAAgBjB;QAChBkB,YAAY;YACV,sEAAsE;YACtEX,cAAcY,gBAAgBZ;YAC9Bb;YACAP;YACAQ;YACAC;YACAC;YACAC;YACAsB,YAAY3B,QAAQ2B,UAAU;YAC9BpB;YACAG;QACF;IACF;IAEA,OAAOJ,SAASpB,eAAwCkC;AAC1D"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import readline from 'node:readline';
|
|
5
|
+
import { Readable } from 'node:stream';
|
|
6
|
+
import { workerData as _workerData, isMainThread, parentPort } from 'node:worker_threads';
|
|
7
|
+
import { getStudioWorkspaces, isRecord, resolveLocalPackage } from '@sanity/cli-core';
|
|
8
|
+
import { createClient } from '@sanity/client';
|
|
9
|
+
import pMap from 'p-map';
|
|
10
|
+
import { checkDocumentAvailability, exportDocuments, getDocumentCount } from '../../services/documents.js';
|
|
11
|
+
import { extractDocumentsFromNdjsonOrTarball } from '../../util/extractDocumentsFromNdjsonOrTarball.js';
|
|
12
|
+
import { getWorkspace } from '../../util/getWorkspace.js';
|
|
13
|
+
import { DOCUMENT_VALIDATION_TIMEOUT, getReferenceIds, isValidId, levelValues, MAX_VALIDATION_CONCURRENCY, REFERENCE_INTEGRITY_BATCH_SIZE, shouldIncludeDocument } from '../../util/validation/validateDocumentsUtils.js';
|
|
14
|
+
import { createReporter } from '../../util/workerChannels.js';
|
|
15
|
+
const { clientConfig, dataset, level, maxCustomValidationConcurrency, maxFetchConcurrency, ndjsonFilePath, projectId, studioHost, workDir, workspace: workspaceName } = _workerData;
|
|
16
|
+
if (isMainThread || !parentPort) {
|
|
17
|
+
throw new Error('This module must be run as a worker thread');
|
|
18
|
+
}
|
|
19
|
+
const report = createReporter(parentPort);
|
|
20
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
21
|
+
async function* readerToGenerator(reader) {
|
|
22
|
+
while(true){
|
|
23
|
+
const { done, value } = await reader.read();
|
|
24
|
+
if (value) yield value;
|
|
25
|
+
if (done) return;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
await main();
|
|
29
|
+
process.exit();
|
|
30
|
+
async function loadWorkspace() {
|
|
31
|
+
const workspaces = await getStudioWorkspaces(workDir);
|
|
32
|
+
const workspace = getWorkspace(workspaces, workspaceName);
|
|
33
|
+
const resolvedDataset = dataset || workspace.dataset;
|
|
34
|
+
const resolvedProjectId = projectId || workspace.projectId;
|
|
35
|
+
const client = createClient({
|
|
36
|
+
...clientConfig,
|
|
37
|
+
dataset: resolvedDataset,
|
|
38
|
+
projectId: resolvedProjectId,
|
|
39
|
+
requestTagPrefix: 'sanity.cli.validate'
|
|
40
|
+
}).config({
|
|
41
|
+
apiVersion: 'v2021-03-25'
|
|
42
|
+
});
|
|
43
|
+
report.event.loadedWorkspace({
|
|
44
|
+
basePath: workspace.basePath,
|
|
45
|
+
dataset: workspace.dataset,
|
|
46
|
+
name: workspace.name,
|
|
47
|
+
projectId: workspace.projectId
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
client,
|
|
51
|
+
dataset: resolvedDataset,
|
|
52
|
+
projectId: resolvedProjectId,
|
|
53
|
+
workspace
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async function downloadFromExport({ dataset: datasetName, projectId: projId }) {
|
|
57
|
+
const documentCount = await getDocumentCount({
|
|
58
|
+
dataset: datasetName,
|
|
59
|
+
projectId: projId
|
|
60
|
+
});
|
|
61
|
+
report.event.loadedDocumentCount({
|
|
62
|
+
documentCount
|
|
63
|
+
});
|
|
64
|
+
const response = await exportDocuments({
|
|
65
|
+
dataset: datasetName,
|
|
66
|
+
projectId: projId
|
|
67
|
+
});
|
|
68
|
+
const reader = response.body?.getReader();
|
|
69
|
+
if (!reader) throw new Error('Could not get reader from response body.');
|
|
70
|
+
let downloadedCount = 0;
|
|
71
|
+
const referencedIds = new Set();
|
|
72
|
+
const documentIds = new Set();
|
|
73
|
+
const lines = readline.createInterface({
|
|
74
|
+
input: Readable.from(readerToGenerator(reader))
|
|
75
|
+
});
|
|
76
|
+
// Note: we stream the export to a file and then re-read from that file to
|
|
77
|
+
// make this less memory intensive.
|
|
78
|
+
// this is a similar pattern to the import/export CLI commands
|
|
79
|
+
const slugDate = new Date().toISOString().replaceAll(/[^a-z0-9]/gi, '-').toLowerCase();
|
|
80
|
+
const tempOutputFile = path.join(os.tmpdir(), `sanity-validate-${slugDate}.ndjson`);
|
|
81
|
+
const outputStream = fs.createWriteStream(tempOutputFile);
|
|
82
|
+
for await (const line of lines){
|
|
83
|
+
const document = JSON.parse(line);
|
|
84
|
+
if (shouldIncludeDocument(document)) {
|
|
85
|
+
documentIds.add(document._id);
|
|
86
|
+
for (const referenceId of getReferenceIds(document)){
|
|
87
|
+
referencedIds.add(referenceId);
|
|
88
|
+
}
|
|
89
|
+
outputStream.write(`${line}\n`);
|
|
90
|
+
}
|
|
91
|
+
downloadedCount++;
|
|
92
|
+
report.stream.exportProgress.emit({
|
|
93
|
+
documentCount,
|
|
94
|
+
downloadedCount
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
await new Promise((resolve, reject)=>outputStream.close((err)=>err ? reject(err) : resolve()));
|
|
98
|
+
report.stream.exportProgress.end();
|
|
99
|
+
report.event.exportFinished({
|
|
100
|
+
totalDocumentsToValidate: documentIds.size
|
|
101
|
+
});
|
|
102
|
+
const getDocuments = ()=>extractDocumentsFromNdjsonOrTarball(fs.createReadStream(tempOutputFile));
|
|
103
|
+
return {
|
|
104
|
+
cleanup: ()=>fs.promises.rm(tempOutputFile),
|
|
105
|
+
documentIds,
|
|
106
|
+
getDocuments,
|
|
107
|
+
referencedIds
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
async function downloadFromFile(filePath) {
|
|
111
|
+
const referencedIds = new Set();
|
|
112
|
+
const documentIds = new Set();
|
|
113
|
+
const getDocuments = ()=>extractDocumentsFromNdjsonOrTarball(fs.createReadStream(filePath));
|
|
114
|
+
for await (const document of getDocuments()){
|
|
115
|
+
if (shouldIncludeDocument(document)) {
|
|
116
|
+
documentIds.add(document._id);
|
|
117
|
+
for (const referenceId of getReferenceIds(document)){
|
|
118
|
+
referencedIds.add(referenceId);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
report.event.exportFinished({
|
|
123
|
+
totalDocumentsToValidate: documentIds.size
|
|
124
|
+
});
|
|
125
|
+
return {
|
|
126
|
+
cleanup: undefined,
|
|
127
|
+
documentIds,
|
|
128
|
+
getDocuments,
|
|
129
|
+
referencedIds
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
async function checkReferenceExistence({ dataset: datasetName, documentIds, projectId: projId, referencedIds: _referencedIds }) {
|
|
133
|
+
const existingIds = new Set(documentIds);
|
|
134
|
+
const idsToCheck = [
|
|
135
|
+
..._referencedIds
|
|
136
|
+
].filter((id)=>!existingIds.has(id) && isValidId(id)).toSorted();
|
|
137
|
+
const batches = [];
|
|
138
|
+
for(let i = 0; i < idsToCheck.length; i += REFERENCE_INTEGRITY_BATCH_SIZE){
|
|
139
|
+
batches.push(idsToCheck.slice(i, i + REFERENCE_INTEGRITY_BATCH_SIZE));
|
|
140
|
+
}
|
|
141
|
+
for (const batch of batches){
|
|
142
|
+
const { omitted } = await checkDocumentAvailability({
|
|
143
|
+
dataset: datasetName,
|
|
144
|
+
documentIds: batch,
|
|
145
|
+
projectId: projId
|
|
146
|
+
});
|
|
147
|
+
const omittedIds = {};
|
|
148
|
+
for (const item of omitted){
|
|
149
|
+
omittedIds[item.id] = item.reason;
|
|
150
|
+
}
|
|
151
|
+
for (const id of batch){
|
|
152
|
+
// unless the document ID is in the `omitted` object explictly due to
|
|
153
|
+
// the reason `'existence'`, then it should exist
|
|
154
|
+
if (omittedIds[id] !== 'existence') {
|
|
155
|
+
existingIds.add(id);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
report.event.loadedReferenceIntegrity();
|
|
160
|
+
return {
|
|
161
|
+
existingIds
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
async function main() {
|
|
165
|
+
let cleanupDownloadedDocuments;
|
|
166
|
+
try {
|
|
167
|
+
const { client, dataset: datasetName, projectId: projId, workspace } = await loadWorkspace();
|
|
168
|
+
const { cleanup, documentIds, getDocuments, referencedIds } = ndjsonFilePath ? await downloadFromFile(ndjsonFilePath) : await downloadFromExport({
|
|
169
|
+
dataset: datasetName,
|
|
170
|
+
projectId: projId
|
|
171
|
+
});
|
|
172
|
+
cleanupDownloadedDocuments = cleanup;
|
|
173
|
+
const { existingIds } = await checkReferenceExistence({
|
|
174
|
+
dataset: datasetName,
|
|
175
|
+
documentIds,
|
|
176
|
+
projectId: projId,
|
|
177
|
+
referencedIds
|
|
178
|
+
});
|
|
179
|
+
const getClient = (options)=>client.withConfig(options);
|
|
180
|
+
const getDocumentExists = ({ id })=>Promise.resolve(existingIds.has(id));
|
|
181
|
+
const getLevel = (markers)=>{
|
|
182
|
+
let foundWarning = false;
|
|
183
|
+
for (const marker of markers){
|
|
184
|
+
if (marker.level === 'error') return 'error';
|
|
185
|
+
if (marker.level === 'warning') foundWarning = true;
|
|
186
|
+
}
|
|
187
|
+
if (foundWarning) return 'warning';
|
|
188
|
+
return 'info';
|
|
189
|
+
};
|
|
190
|
+
let validatedCount = 0;
|
|
191
|
+
const validate = async (document)=>{
|
|
192
|
+
let markers;
|
|
193
|
+
try {
|
|
194
|
+
const timeout = Symbol('timeout');
|
|
195
|
+
const { validateDocument } = await resolveLocalPackage('sanity', workDir);
|
|
196
|
+
const result = await Promise.race([
|
|
197
|
+
validateDocument({
|
|
198
|
+
document,
|
|
199
|
+
environment: 'cli',
|
|
200
|
+
getClient,
|
|
201
|
+
getDocumentExists,
|
|
202
|
+
maxCustomValidationConcurrency,
|
|
203
|
+
maxFetchConcurrency,
|
|
204
|
+
workspace
|
|
205
|
+
}),
|
|
206
|
+
new Promise((resolve)=>setTimeout(()=>resolve(timeout), DOCUMENT_VALIDATION_TIMEOUT))
|
|
207
|
+
]);
|
|
208
|
+
if (result === timeout) {
|
|
209
|
+
throw new Error(`Document '${document._id}' failed to validate within ${DOCUMENT_VALIDATION_TIMEOUT}ms.`);
|
|
210
|
+
}
|
|
211
|
+
markers = result// filter out unwanted levels
|
|
212
|
+
.filter((marker)=>{
|
|
213
|
+
const markerValue = levelValues[marker.level];
|
|
214
|
+
const flagLevelValue = levelValues[level] ?? levelValues.info;
|
|
215
|
+
return markerValue <= flagLevelValue;
|
|
216
|
+
});
|
|
217
|
+
} catch (err) {
|
|
218
|
+
const errorMessage = isRecord(err) && typeof err.message === 'string' ? err.message : 'Unknown error';
|
|
219
|
+
const message = `Exception occurred while validating value: ${errorMessage}`;
|
|
220
|
+
markers = [
|
|
221
|
+
{
|
|
222
|
+
level: 'error',
|
|
223
|
+
message,
|
|
224
|
+
path: []
|
|
225
|
+
}
|
|
226
|
+
];
|
|
227
|
+
}
|
|
228
|
+
validatedCount++;
|
|
229
|
+
const intentUrl = studioHost && `${studioHost}${path.resolve(workspace.basePath, `/intent/edit/id=${encodeURIComponent(document._id)};type=${encodeURIComponent(document._type)}`)}`;
|
|
230
|
+
report.stream.validation.emit({
|
|
231
|
+
documentId: document._id,
|
|
232
|
+
documentType: document._type,
|
|
233
|
+
...intentUrl && {
|
|
234
|
+
intentUrl
|
|
235
|
+
},
|
|
236
|
+
level: getLevel(markers),
|
|
237
|
+
markers,
|
|
238
|
+
revision: document._rev,
|
|
239
|
+
validatedCount
|
|
240
|
+
});
|
|
241
|
+
};
|
|
242
|
+
await pMap(getDocuments(), validate, {
|
|
243
|
+
concurrency: MAX_VALIDATION_CONCURRENCY
|
|
244
|
+
});
|
|
245
|
+
report.stream.validation.end();
|
|
246
|
+
} finally{
|
|
247
|
+
await cleanupDownloadedDocuments?.();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
//# sourceMappingURL=validateDocuments.worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/documents/validateDocuments.worker.ts"],"sourcesContent":["import fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport readline from 'node:readline'\nimport {Readable} from 'node:stream'\nimport {workerData as _workerData, isMainThread, parentPort} from 'node:worker_threads'\n\nimport {getStudioWorkspaces, isRecord, resolveLocalPackage} from '@sanity/cli-core'\nimport {type ClientConfig, createClient, type SanityDocument} from '@sanity/client'\nimport {type ValidationContext, type ValidationMarker} from '@sanity/types'\nimport pMap from 'p-map'\n\nimport {\n type AvailabilityResponse,\n checkDocumentAvailability,\n exportDocuments,\n getDocumentCount,\n} from '../../services/documents.js'\nimport {extractDocumentsFromNdjsonOrTarball} from '../../util/extractDocumentsFromNdjsonOrTarball.js'\nimport {getWorkspace} from '../../util/getWorkspace.js'\nimport {\n DOCUMENT_VALIDATION_TIMEOUT,\n getReferenceIds,\n isValidId,\n levelValues,\n MAX_VALIDATION_CONCURRENCY,\n REFERENCE_INTEGRITY_BATCH_SIZE,\n shouldIncludeDocument,\n} from '../../util/validation/validateDocumentsUtils.js'\nimport {createReporter} from '../../util/workerChannels.js'\nimport {type ValidateDocumentsWorkerData, type ValidationWorkerChannel} from './types.js'\n\nconst {\n clientConfig,\n dataset,\n level,\n maxCustomValidationConcurrency,\n maxFetchConcurrency,\n ndjsonFilePath,\n projectId,\n studioHost,\n workDir,\n workspace: workspaceName,\n} = _workerData as ValidateDocumentsWorkerData\n\nif (isMainThread || !parentPort) {\n throw new Error('This module must be run as a worker thread')\n}\n\nconst report = createReporter<ValidationWorkerChannel>(parentPort)\n\n// eslint-disable-next-line n/no-unsupported-features/node-builtins\nasync function* readerToGenerator(reader: ReadableStreamDefaultReader<Uint8Array>) {\n while (true) {\n const {done, value} = await reader.read()\n if (value) yield value\n if (done) return\n }\n}\n\nawait main()\nprocess.exit()\n\nasync function loadWorkspace() {\n const workspaces = await getStudioWorkspaces(workDir)\n const workspace = getWorkspace(workspaces, workspaceName)\n\n const resolvedDataset = dataset || workspace.dataset\n const resolvedProjectId = projectId || workspace.projectId\n\n const client = createClient({\n ...clientConfig,\n dataset: resolvedDataset,\n projectId: resolvedProjectId,\n requestTagPrefix: 'sanity.cli.validate',\n }).config({apiVersion: 'v2021-03-25'})\n\n report.event.loadedWorkspace({\n basePath: workspace.basePath,\n dataset: workspace.dataset,\n name: workspace.name,\n projectId: workspace.projectId,\n })\n\n return {client, dataset: resolvedDataset, projectId: resolvedProjectId, workspace}\n}\n\ninterface DownloadFromExportOptions {\n dataset: string\n projectId: string\n}\n\nasync function downloadFromExport({\n dataset: datasetName,\n projectId: projId,\n}: DownloadFromExportOptions) {\n const documentCount = await getDocumentCount({dataset: datasetName, projectId: projId})\n report.event.loadedDocumentCount({documentCount})\n\n const response = await exportDocuments({dataset: datasetName, projectId: projId})\n\n const reader = response.body?.getReader()\n if (!reader) throw new Error('Could not get reader from response body.')\n\n let downloadedCount = 0\n const referencedIds = new Set<string>()\n const documentIds = new Set<string>()\n const lines = readline.createInterface({input: Readable.from(readerToGenerator(reader))})\n\n // Note: we stream the export to a file and then re-read from that file to\n // make this less memory intensive.\n // this is a similar pattern to the import/export CLI commands\n const slugDate = new Date()\n .toISOString()\n .replaceAll(/[^a-z0-9]/gi, '-')\n .toLowerCase()\n const tempOutputFile = path.join(os.tmpdir(), `sanity-validate-${slugDate}.ndjson`)\n const outputStream = fs.createWriteStream(tempOutputFile)\n\n for await (const line of lines) {\n const document = JSON.parse(line) as SanityDocument\n\n if (shouldIncludeDocument(document)) {\n documentIds.add(document._id)\n for (const referenceId of getReferenceIds(document)) {\n referencedIds.add(referenceId)\n }\n\n outputStream.write(`${line}\\n`)\n }\n\n downloadedCount++\n report.stream.exportProgress.emit({documentCount, downloadedCount})\n }\n\n await new Promise<void>((resolve, reject) =>\n outputStream.close((err) => (err ? reject(err) : resolve())),\n )\n\n report.stream.exportProgress.end()\n report.event.exportFinished({totalDocumentsToValidate: documentIds.size})\n\n const getDocuments = () =>\n extractDocumentsFromNdjsonOrTarball(fs.createReadStream(tempOutputFile))\n\n return {cleanup: () => fs.promises.rm(tempOutputFile), documentIds, getDocuments, referencedIds}\n}\n\nasync function downloadFromFile(filePath: string) {\n const referencedIds = new Set<string>()\n const documentIds = new Set<string>()\n const getDocuments = () => extractDocumentsFromNdjsonOrTarball(fs.createReadStream(filePath))\n\n for await (const document of getDocuments()) {\n if (shouldIncludeDocument(document)) {\n documentIds.add(document._id)\n for (const referenceId of getReferenceIds(document)) {\n referencedIds.add(referenceId)\n }\n }\n }\n\n report.event.exportFinished({totalDocumentsToValidate: documentIds.size})\n\n return {cleanup: undefined, documentIds, getDocuments, referencedIds}\n}\n\ninterface CheckReferenceExistenceOptions {\n dataset: string\n documentIds: Set<string>\n projectId: string\n referencedIds: Set<string>\n}\n\nasync function checkReferenceExistence({\n dataset: datasetName,\n documentIds,\n projectId: projId,\n referencedIds: _referencedIds,\n}: CheckReferenceExistenceOptions) {\n const existingIds = new Set(documentIds)\n const idsToCheck = [..._referencedIds]\n .filter((id) => !existingIds.has(id) && isValidId(id))\n .toSorted()\n\n const batches: string[][] = []\n for (let i = 0; i < idsToCheck.length; i += REFERENCE_INTEGRITY_BATCH_SIZE) {\n batches.push(idsToCheck.slice(i, i + REFERENCE_INTEGRITY_BATCH_SIZE))\n }\n\n for (const batch of batches) {\n const {omitted} = await checkDocumentAvailability({\n dataset: datasetName,\n documentIds: batch,\n projectId: projId,\n })\n\n const omittedIds: Record<string, AvailabilityResponse['omitted'][number]['reason']> = {}\n for (const item of omitted) {\n omittedIds[item.id] = item.reason\n }\n\n for (const id of batch) {\n // unless the document ID is in the `omitted` object explictly due to\n // the reason `'existence'`, then it should exist\n if (omittedIds[id] !== 'existence') {\n existingIds.add(id)\n }\n }\n }\n report.event.loadedReferenceIntegrity()\n\n return {existingIds}\n}\n\nasync function main() {\n let cleanupDownloadedDocuments: (() => Promise<void>) | undefined\n\n try {\n const {client, dataset: datasetName, projectId: projId, workspace} = await loadWorkspace()\n const {cleanup, documentIds, getDocuments, referencedIds} = ndjsonFilePath\n ? await downloadFromFile(ndjsonFilePath)\n : await downloadFromExport({dataset: datasetName, projectId: projId})\n cleanupDownloadedDocuments = cleanup\n const {existingIds} = await checkReferenceExistence({\n dataset: datasetName,\n documentIds,\n projectId: projId,\n referencedIds,\n })\n\n const getClient = <TOptions extends Partial<ClientConfig>>(options: TOptions) =>\n client.withConfig(options)\n\n const getDocumentExists: ValidationContext['getDocumentExists'] = ({id}) =>\n Promise.resolve(existingIds.has(id))\n\n const getLevel = (markers: ValidationMarker[]) => {\n let foundWarning = false\n for (const marker of markers) {\n if (marker.level === 'error') return 'error'\n if (marker.level === 'warning') foundWarning = true\n }\n\n if (foundWarning) return 'warning'\n return 'info'\n }\n\n let validatedCount = 0\n\n const validate = async (document: SanityDocument) => {\n let markers: ValidationMarker[]\n\n try {\n const timeout = Symbol('timeout')\n\n const {validateDocument} = await resolveLocalPackage<typeof import('sanity')>(\n 'sanity',\n workDir,\n )\n\n const result = await Promise.race([\n validateDocument({\n document,\n environment: 'cli',\n getClient,\n getDocumentExists,\n maxCustomValidationConcurrency,\n maxFetchConcurrency,\n workspace,\n }),\n new Promise<typeof timeout>((resolve) =>\n setTimeout(() => resolve(timeout), DOCUMENT_VALIDATION_TIMEOUT),\n ),\n ])\n\n if (result === timeout) {\n throw new Error(\n `Document '${document._id}' failed to validate within ${DOCUMENT_VALIDATION_TIMEOUT}ms.`,\n )\n }\n\n markers = result\n // filter out unwanted levels\n .filter((marker) => {\n const markerValue = levelValues[marker.level]\n const flagLevelValue =\n levelValues[level as keyof typeof levelValues] ?? levelValues.info\n return markerValue <= flagLevelValue\n })\n } catch (err) {\n const errorMessage =\n isRecord(err) && typeof err.message === 'string' ? err.message : 'Unknown error'\n\n const message = `Exception occurred while validating value: ${errorMessage}`\n\n markers = [\n {\n level: 'error',\n message,\n path: [],\n },\n ]\n }\n\n validatedCount++\n\n const intentUrl =\n studioHost &&\n `${studioHost}${path.resolve(\n workspace.basePath,\n `/intent/edit/id=${encodeURIComponent(document._id)};type=${encodeURIComponent(\n document._type,\n )}`,\n )}`\n\n report.stream.validation.emit({\n documentId: document._id,\n documentType: document._type,\n ...(intentUrl && {intentUrl}),\n level: getLevel(markers),\n markers,\n revision: document._rev,\n validatedCount,\n })\n }\n\n await pMap(getDocuments(), validate, {concurrency: MAX_VALIDATION_CONCURRENCY})\n\n report.stream.validation.end()\n } finally {\n await cleanupDownloadedDocuments?.()\n }\n}\n"],"names":["fs","os","path","readline","Readable","workerData","_workerData","isMainThread","parentPort","getStudioWorkspaces","isRecord","resolveLocalPackage","createClient","pMap","checkDocumentAvailability","exportDocuments","getDocumentCount","extractDocumentsFromNdjsonOrTarball","getWorkspace","DOCUMENT_VALIDATION_TIMEOUT","getReferenceIds","isValidId","levelValues","MAX_VALIDATION_CONCURRENCY","REFERENCE_INTEGRITY_BATCH_SIZE","shouldIncludeDocument","createReporter","clientConfig","dataset","level","maxCustomValidationConcurrency","maxFetchConcurrency","ndjsonFilePath","projectId","studioHost","workDir","workspace","workspaceName","Error","report","readerToGenerator","reader","done","value","read","main","process","exit","loadWorkspace","workspaces","resolvedDataset","resolvedProjectId","client","requestTagPrefix","config","apiVersion","event","loadedWorkspace","basePath","name","downloadFromExport","datasetName","projId","documentCount","loadedDocumentCount","response","body","getReader","downloadedCount","referencedIds","Set","documentIds","lines","createInterface","input","from","slugDate","Date","toISOString","replaceAll","toLowerCase","tempOutputFile","join","tmpdir","outputStream","createWriteStream","line","document","JSON","parse","add","_id","referenceId","write","stream","exportProgress","emit","Promise","resolve","reject","close","err","end","exportFinished","totalDocumentsToValidate","size","getDocuments","createReadStream","cleanup","promises","rm","downloadFromFile","filePath","undefined","checkReferenceExistence","_referencedIds","existingIds","idsToCheck","filter","id","has","toSorted","batches","i","length","push","slice","batch","omitted","omittedIds","item","reason","loadedReferenceIntegrity","cleanupDownloadedDocuments","getClient","options","withConfig","getDocumentExists","getLevel","markers","foundWarning","marker","validatedCount","validate","timeout","Symbol","validateDocument","result","race","environment","setTimeout","markerValue","flagLevelValue","info","errorMessage","message","intentUrl","encodeURIComponent","_type","validation","documentId","documentType","revision","_rev","concurrency"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/actions/documents/validation/reporters/index.ts"],"sourcesContent":["import {json} from './jsonReporter.js'\nimport {ndjson} from './ndjsonReporter.js'\nimport {pretty} from './prettyReporter/index.js'\n\nexport const reporters = {json, ndjson, pretty}\n"],"names":["json","ndjson","pretty","reporters"],"mappings":"AAAA,SAAQA,IAAI,QAAO,oBAAmB;AACtC,SAAQC,MAAM,QAAO,sBAAqB;AAC1C,SAAQC,MAAM,QAAO,4BAA2B;AAEhD,OAAO,MAAMC,YAAY;IAACH;IAAMC;IAAQC;AAAM,EAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { omit } from 'lodash-es';
|
|
2
|
+
// TODO: replace with Array.fromAsync when it's out of stage3
|
|
3
|
+
async function arrayFromAsync(iterable) {
|
|
4
|
+
const results = [];
|
|
5
|
+
for await (const item of iterable)results.push(item);
|
|
6
|
+
return results;
|
|
7
|
+
}
|
|
8
|
+
export const json = async ({ output, worker })=>{
|
|
9
|
+
const results = await arrayFromAsync(worker.stream.validation());
|
|
10
|
+
const formatted = results// report out only documents with some markers
|
|
11
|
+
.filter(({ markers })=>markers.length)// remove validatedCount from the results
|
|
12
|
+
.map((result)=>omit(result, [
|
|
13
|
+
'validatedCount'
|
|
14
|
+
]));
|
|
15
|
+
await worker.dispose();
|
|
16
|
+
output.log(JSON.stringify(formatted));
|
|
17
|
+
let overallLevel = 'info';
|
|
18
|
+
for (const { level } of formatted){
|
|
19
|
+
if (level === 'error') overallLevel = 'error';
|
|
20
|
+
if (level === 'warning' && overallLevel !== 'error') overallLevel = 'warning';
|
|
21
|
+
}
|
|
22
|
+
return overallLevel;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=jsonReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/actions/documents/validation/reporters/jsonReporter.ts"],"sourcesContent":["import {omit} from 'lodash-es'\n\nimport {type BuiltInValidationReporter, Level} from '../../types.js'\n\n// TODO: replace with Array.fromAsync when it's out of stage3\nasync function arrayFromAsync<T>(iterable: AsyncIterable<T>) {\n const results: T[] = []\n for await (const item of iterable) results.push(item)\n return results\n}\n\nexport const json: BuiltInValidationReporter = async ({output, worker}) => {\n const results = await arrayFromAsync(worker.stream.validation())\n const formatted = results\n // report out only documents with some markers\n .filter(({markers}) => markers.length)\n // remove validatedCount from the results\n .map((result) => omit(result, ['validatedCount']))\n\n await worker.dispose()\n\n output.log(JSON.stringify(formatted))\n\n let overallLevel: Level = 'info'\n\n for (const {level} of formatted) {\n if (level === 'error') overallLevel = 'error'\n if (level === 'warning' && overallLevel !== 'error') overallLevel = 'warning'\n }\n\n return overallLevel\n}\n"],"names":["omit","arrayFromAsync","iterable","results","item","push","json","output","worker","stream","validation","formatted","filter","markers","length","map","result","dispose","log","JSON","stringify","overallLevel","level"],"mappings":"AAAA,SAAQA,IAAI,QAAO,YAAW;AAI9B,6DAA6D;AAC7D,eAAeC,eAAkBC,QAA0B;IACzD,MAAMC,UAAe,EAAE;IACvB,WAAW,MAAMC,QAAQF,SAAUC,QAAQE,IAAI,CAACD;IAChD,OAAOD;AACT;AAEA,OAAO,MAAMG,OAAkC,OAAO,EAACC,MAAM,EAAEC,MAAM,EAAC;IACpE,MAAML,UAAU,MAAMF,eAAeO,OAAOC,MAAM,CAACC,UAAU;IAC7D,MAAMC,YAAYR,OAChB,8CAA8C;KAC7CS,MAAM,CAAC,CAAC,EAACC,OAAO,EAAC,GAAKA,QAAQC,MAAM,CACrC,yCAAyC;KACxCC,GAAG,CAAC,CAACC,SAAWhB,KAAKgB,QAAQ;YAAC;SAAiB;IAElD,MAAMR,OAAOS,OAAO;IAEpBV,OAAOW,GAAG,CAACC,KAAKC,SAAS,CAACT;IAE1B,IAAIU,eAAsB;IAE1B,KAAK,MAAM,EAACC,KAAK,EAAC,IAAIX,UAAW;QAC/B,IAAIW,UAAU,SAASD,eAAe;QACtC,IAAIC,UAAU,aAAaD,iBAAiB,SAASA,eAAe;IACtE;IAEA,OAAOA;AACT,EAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { omit } from 'lodash-es';
|
|
2
|
+
export const ndjson = async ({ output, worker })=>{
|
|
3
|
+
let overallLevel = 'info';
|
|
4
|
+
for await (const item of worker.stream.validation()){
|
|
5
|
+
const result = omit(item, [
|
|
6
|
+
'validatedCount'
|
|
7
|
+
]);
|
|
8
|
+
if (result.level === 'error') overallLevel = 'error';
|
|
9
|
+
if (result.level === 'warning' && overallLevel !== 'error') overallLevel = 'warning';
|
|
10
|
+
if (result.markers.length > 0) {
|
|
11
|
+
output.log(JSON.stringify(result));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
await worker.dispose();
|
|
15
|
+
return overallLevel;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=ndjsonReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/actions/documents/validation/reporters/ndjsonReporter.ts"],"sourcesContent":["import {omit} from 'lodash-es'\n\nimport {type BuiltInValidationReporter, Level} from '../../types.js'\n\nexport const ndjson: BuiltInValidationReporter = async ({output, worker}) => {\n let overallLevel: Level = 'info'\n\n for await (const item of worker.stream.validation()) {\n const result = omit(item, ['validatedCount'])\n\n if (result.level === 'error') overallLevel = 'error'\n if (result.level === 'warning' && overallLevel !== 'error') overallLevel = 'warning'\n\n if (result.markers.length > 0) {\n output.log(JSON.stringify(result))\n }\n }\n\n await worker.dispose()\n\n return overallLevel\n}\n"],"names":["omit","ndjson","output","worker","overallLevel","item","stream","validation","result","level","markers","length","log","JSON","stringify","dispose"],"mappings":"AAAA,SAAQA,IAAI,QAAO,YAAW;AAI9B,OAAO,MAAMC,SAAoC,OAAO,EAACC,MAAM,EAAEC,MAAM,EAAC;IACtE,IAAIC,eAAsB;IAE1B,WAAW,MAAMC,QAAQF,OAAOG,MAAM,CAACC,UAAU,GAAI;QACnD,MAAMC,SAASR,KAAKK,MAAM;YAAC;SAAiB;QAE5C,IAAIG,OAAOC,KAAK,KAAK,SAASL,eAAe;QAC7C,IAAII,OAAOC,KAAK,KAAK,aAAaL,iBAAiB,SAASA,eAAe;QAE3E,IAAII,OAAOE,OAAO,CAACC,MAAM,GAAG,GAAG;YAC7BT,OAAOU,GAAG,CAACC,KAAKC,SAAS,CAACN;QAC5B;IACF;IAEA,MAAML,OAAOY,OAAO;IAEpB,OAAOX;AACT,EAAC"}
|
package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { styleText } from 'node:util';
|
|
2
|
+
import { convertToTree, formatTree, maxKeyLength } from '@sanity/cli-core/tree';
|
|
3
|
+
import { logSymbols } from '@sanity/cli-core/ux';
|
|
4
|
+
import { isTty, levelValues } from './util.js';
|
|
5
|
+
const levelHeaders = {
|
|
6
|
+
error: isTty ? styleText('bold', styleText('bgRed', styleText('black', ' ERROR '))) : styleText('red', '[ERROR]'),
|
|
7
|
+
info: isTty ? styleText('bold', styleText('cyan', styleText('black', ' INFO '))) : styleText('cyan', '[INFO]'),
|
|
8
|
+
warning: isTty ? styleText('bold', styleText('bgYellow', styleText('black', ' WARN '))) : styleText('yellow', '[WARN]')
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Creates a terminal hyperlink. Only outputs a hyperlink if the output is
|
|
12
|
+
* determined to be a TTY
|
|
13
|
+
*/ const link = (linkText, url)=>isTty ? `\u001B]8;;${url}\u0007${linkText}\u001B]8;;\u0007` : styleText('underline', linkText);
|
|
14
|
+
/**
|
|
15
|
+
* For sorting markers
|
|
16
|
+
*/ const compareLevels = (a, b)=>levelValues[a.level] - levelValues[b.level];
|
|
17
|
+
/**
|
|
18
|
+
* Formats the markers at the root of the validation tree
|
|
19
|
+
*/ const formatRootErrors = (root, hasChildren, paddingLength)=>{
|
|
20
|
+
if (!root.nodes) return '';
|
|
21
|
+
const [first, ...rest] = [
|
|
22
|
+
...root.nodes
|
|
23
|
+
].toSorted(compareLevels);
|
|
24
|
+
if (!first) return '';
|
|
25
|
+
const firstElbow = hasChildren ? '│ ' : '└─';
|
|
26
|
+
const firstPadding = '.'.repeat(paddingLength - 6);
|
|
27
|
+
const firstLine = `${firstElbow} (root) ${firstPadding} ${logSymbols[first.level]} ${first.message}`;
|
|
28
|
+
const subsequentPadding = ' '.repeat(paddingLength + 2);
|
|
29
|
+
const subsequentElbow = hasChildren ? '│ ' : ' ';
|
|
30
|
+
const restOfLines = rest.map((marker)=>`${subsequentElbow}${subsequentPadding} ${logSymbols[marker.level]} ${marker.message}`).join('\n');
|
|
31
|
+
return [
|
|
32
|
+
firstLine,
|
|
33
|
+
restOfLines
|
|
34
|
+
].filter(Boolean).join('\n');
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Formats document validation results into a user-friendly tree structure
|
|
38
|
+
*/ export function formatDocumentValidation({ documentId, documentType, intentUrl, level, markers }) {
|
|
39
|
+
const tree = convertToTree(markers);
|
|
40
|
+
const documentTypeHeader = isTty ? styleText('bgWhite', styleText('black', ` ${documentType} `)) : `[${documentType}]`;
|
|
41
|
+
const header = `${levelHeaders[level]} ${documentTypeHeader} ${intentUrl ? link(documentId, intentUrl) : styleText('underline', documentId)}`;
|
|
42
|
+
const paddingLength = Math.max(maxKeyLength(tree.children) + 2, 30);
|
|
43
|
+
const childErrors = formatTree({
|
|
44
|
+
getMessage: (marker)=>[
|
|
45
|
+
logSymbols[marker.level],
|
|
46
|
+
marker.message
|
|
47
|
+
].join(' '),
|
|
48
|
+
getNodes: ({ nodes })=>[
|
|
49
|
+
...nodes ?? []
|
|
50
|
+
].toSorted(compareLevels),
|
|
51
|
+
node: tree.children,
|
|
52
|
+
paddingLength
|
|
53
|
+
});
|
|
54
|
+
const rootErrors = formatRootErrors(tree, childErrors.length > 0, paddingLength);
|
|
55
|
+
return [
|
|
56
|
+
header,
|
|
57
|
+
rootErrors,
|
|
58
|
+
childErrors
|
|
59
|
+
].filter(Boolean).join('\n');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=formatDocumentValidation.js.map
|
package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {convertToTree, formatTree, maxKeyLength, type Tree} from '@sanity/cli-core/tree'\nimport {logSymbols} from '@sanity/cli-core/ux'\nimport {type Path, type ValidationMarker} from '@sanity/types'\n\nimport {Level} from '../../../types'\nimport {type DocumentValidationResult, isTty, levelValues} from './util.js'\n\ninterface FormatDocumentValidationOptions extends DocumentValidationResult {\n basePath?: string\n studioHost?: string\n}\n\ninterface Marker extends Pick<ValidationMarker, 'level' | 'message'> {\n path: Path\n}\n\ntype ValidationTree = Tree<Marker>\n\nconst levelHeaders = {\n error: isTty\n ? styleText('bold', styleText('bgRed', styleText('black', ' ERROR ')))\n : styleText('red', '[ERROR]'),\n info: isTty\n ? styleText('bold', styleText('cyan', styleText('black', ' INFO ')))\n : styleText('cyan', '[INFO]'),\n warning: isTty\n ? styleText('bold', styleText('bgYellow', styleText('black', ' WARN ')))\n : styleText('yellow', '[WARN]'),\n}\n/**\n * Creates a terminal hyperlink. Only outputs a hyperlink if the output is\n * determined to be a TTY\n */\nconst link = (linkText: string, url: string) =>\n isTty ? `\\u001B]8;;${url}\\u0007${linkText}\\u001B]8;;\\u0007` : styleText('underline', linkText)\n\n/**\n * For sorting markers\n */\nconst compareLevels = <T extends {level: Level; message: string}>(a: T, b: T) =>\n levelValues[a.level] - levelValues[b.level]\n\n/**\n * Formats the markers at the root of the validation tree\n */\nconst formatRootErrors = (root: ValidationTree, hasChildren: boolean, paddingLength: number) => {\n if (!root.nodes) return ''\n\n const [first, ...rest] = [...root.nodes].toSorted(compareLevels)\n if (!first) return ''\n\n const firstElbow = hasChildren ? '│ ' : '└─'\n const firstPadding = '.'.repeat(paddingLength - 6)\n const firstLine = `${firstElbow} (root) ${firstPadding} ${logSymbols[first.level]} ${\n first.message\n }`\n const subsequentPadding = ' '.repeat(paddingLength + 2)\n const subsequentElbow = hasChildren ? '│ ' : ' '\n\n const restOfLines = rest\n .map(\n (marker) =>\n `${subsequentElbow}${subsequentPadding} ${logSymbols[marker.level]} ${marker.message}`,\n )\n .join('\\n')\n return [firstLine, restOfLines].filter(Boolean).join('\\n')\n}\n\n/**\n * Formats document validation results into a user-friendly tree structure\n */\nexport function formatDocumentValidation({\n documentId,\n documentType,\n intentUrl,\n level,\n markers,\n}: FormatDocumentValidationOptions): string {\n const tree = convertToTree<Marker>(markers)\n\n const documentTypeHeader = isTty\n ? styleText('bgWhite', styleText('black', ` ${documentType} `))\n : `[${documentType}]`\n\n const header = `${levelHeaders[level]} ${documentTypeHeader} ${\n intentUrl ? link(documentId, intentUrl) : styleText('underline', documentId)\n }`\n\n const paddingLength = Math.max(maxKeyLength(tree.children) + 2, 30)\n\n const childErrors = formatTree<Marker>({\n getMessage: (marker) => [logSymbols[marker.level], marker.message].join(' '),\n getNodes: ({nodes}) => [...(nodes ?? [])].toSorted(compareLevels),\n node: tree.children,\n paddingLength,\n })\n\n const rootErrors = formatRootErrors(tree, childErrors.length > 0, paddingLength)\n\n return [header, rootErrors, childErrors].filter(Boolean).join('\\n')\n}\n"],"names":["styleText","convertToTree","formatTree","maxKeyLength","logSymbols","isTty","levelValues","levelHeaders","error","info","warning","link","linkText","url","compareLevels","a","b","level","formatRootErrors","root","hasChildren","paddingLength","nodes","first","rest","toSorted","firstElbow","firstPadding","repeat","firstLine","message","subsequentPadding","subsequentElbow","restOfLines","map","marker","join","filter","Boolean","formatDocumentValidation","documentId","documentType","intentUrl","markers","tree","documentTypeHeader","header","Math","max","children","childErrors","getMessage","getNodes","node","rootErrors","length"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/actions/documents/validation/reporters/prettyReporter/index.ts"],"sourcesContent":["export {pretty} from './prettyReporter.js'\n"],"names":["pretty"],"mappings":"AAAA,SAAQA,MAAM,QAAO,sBAAqB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { spinner } from '@sanity/cli-core/ux';
|
|
2
|
+
import { formatDocumentValidation } from './formatDocumentValidation.js';
|
|
3
|
+
import { count, levelValues, percent, seconds, summary } from './util.js';
|
|
4
|
+
/**
|
|
5
|
+
* Represents the default stylish/pretty reporter
|
|
6
|
+
*/ export const pretty = async ({ flags, output, worker })=>{
|
|
7
|
+
const workspaceLoadStart = Date.now();
|
|
8
|
+
// Report workspace loaded
|
|
9
|
+
const spin = spinner(flags.workspace ? `Loading workspace '${flags.workspace}'…` : 'Loading workspace…').start();
|
|
10
|
+
const workspace = await worker.event.loadedWorkspace();
|
|
11
|
+
spin.succeed(`Loaded workspace '${workspace.name}' using project '${workspace.projectId}' and dataset '${flags.dataset || workspace.dataset}' ${seconds(workspaceLoadStart)}`);
|
|
12
|
+
if (!flags.file) {
|
|
13
|
+
// Report document count
|
|
14
|
+
spin.start('Calculating documents to be validated…');
|
|
15
|
+
const { documentCount } = await worker.event.loadedDocumentCount();
|
|
16
|
+
// Report export progress
|
|
17
|
+
const downloadStart = Date.now();
|
|
18
|
+
spin.text = `Downloading ${count(documentCount, 'documents')}…`;
|
|
19
|
+
for await (const { downloadedCount } of worker.stream.exportProgress()){
|
|
20
|
+
const percentage = percent(downloadedCount / documentCount);
|
|
21
|
+
spin.text = `Downloading ${count(documentCount, 'documents')}… ${percentage}`;
|
|
22
|
+
}
|
|
23
|
+
spin.succeed(`Downloaded ${count(documentCount, 'documents')} ${seconds(downloadStart)}`);
|
|
24
|
+
}
|
|
25
|
+
const { totalDocumentsToValidate } = await worker.event.exportFinished();
|
|
26
|
+
const referenceIntegrityStart = Date.now();
|
|
27
|
+
spin.start(`Checking reference existence…`);
|
|
28
|
+
await worker.event.loadedReferenceIntegrity();
|
|
29
|
+
spin.succeed(`Checked all references ${seconds(referenceIntegrityStart)}`);
|
|
30
|
+
// Report validation progress
|
|
31
|
+
const validationStart = Date.now();
|
|
32
|
+
spin.start(`Validating ${count(totalDocumentsToValidate, 'documents')}…`);
|
|
33
|
+
const results = [];
|
|
34
|
+
const totals = {
|
|
35
|
+
errors: {
|
|
36
|
+
documents: 0,
|
|
37
|
+
markers: 0
|
|
38
|
+
},
|
|
39
|
+
infos: {
|
|
40
|
+
documents: 0,
|
|
41
|
+
markers: 0
|
|
42
|
+
},
|
|
43
|
+
valid: {
|
|
44
|
+
documents: 0
|
|
45
|
+
},
|
|
46
|
+
warnings: {
|
|
47
|
+
documents: 0,
|
|
48
|
+
markers: 0
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
for await (const { validatedCount, ...result } of worker.stream.validation()){
|
|
52
|
+
const { markers } = result;
|
|
53
|
+
if (markers.length > 0) {
|
|
54
|
+
results.push(result);
|
|
55
|
+
}
|
|
56
|
+
const errors = markers.filter((marker)=>marker.level === 'error');
|
|
57
|
+
const warnings = markers.filter((marker)=>marker.level === 'warning');
|
|
58
|
+
const infos = markers.filter((marker)=>marker.level === 'info');
|
|
59
|
+
if (markers.length === 0) {
|
|
60
|
+
totals.valid.documents += 1;
|
|
61
|
+
}
|
|
62
|
+
if (errors.length > 0) {
|
|
63
|
+
totals.errors.documents += 1;
|
|
64
|
+
totals.errors.markers += errors.length;
|
|
65
|
+
}
|
|
66
|
+
if (warnings.length > 0) {
|
|
67
|
+
totals.warnings.documents += 1;
|
|
68
|
+
totals.warnings.markers += warnings.length;
|
|
69
|
+
}
|
|
70
|
+
if (infos.length > 0) {
|
|
71
|
+
totals.infos.documents += 1;
|
|
72
|
+
totals.infos.markers += infos.length;
|
|
73
|
+
}
|
|
74
|
+
spin.text = `Validating ${count(totalDocumentsToValidate, 'documents')}…\n\n` + `Processed ${count(validatedCount, 'documents')} (${percent(validatedCount / totalDocumentsToValidate)}):\n${summary(totals, flags.level)}`;
|
|
75
|
+
}
|
|
76
|
+
spin.succeed(`Validated ${count(totalDocumentsToValidate, 'documents')} ${seconds(validationStart)}`);
|
|
77
|
+
output.log(`\nValidation results:\n${summary(totals, flags.level)}`);
|
|
78
|
+
results.sort((a, b)=>{
|
|
79
|
+
if (a.level === b.level) return a.documentType.localeCompare(b.documentType);
|
|
80
|
+
return levelValues[a.level] - levelValues[b.level];
|
|
81
|
+
});
|
|
82
|
+
let overallLevel = 'info';
|
|
83
|
+
for (const result of results){
|
|
84
|
+
if (result.level === 'error') overallLevel = 'error';
|
|
85
|
+
if (result.level === 'warning' && overallLevel !== 'error') overallLevel = 'warning';
|
|
86
|
+
output.log(`${formatDocumentValidation(result)}\n`);
|
|
87
|
+
}
|
|
88
|
+
await worker.dispose();
|
|
89
|
+
return overallLevel;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=prettyReporter.js.map
|