@sanity/cli 7.2.1 → 7.2.3

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.
@@ -1,7 +1,7 @@
1
1
  import { rm } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { styleText } from 'node:util';
4
- import { AppBuildTrace, buildDebug, buildVendorDependencies } from '@sanity/cli-build/_internal/build';
4
+ import { AppBuildTrace, buildDebug, resolveVendorBuildConfig } from '@sanity/cli-build/_internal/build';
5
5
  import { getCliTelemetry, getLocalPackageVersion, getTimer, isInteractive } from '@sanity/cli-core';
6
6
  import { confirm, logSymbols, spinner } from '@sanity/cli-core/ux';
7
7
  import { parse as semverParse } from 'semver';
@@ -167,29 +167,25 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
167
167
  spin = spinner(`Building Sanity application`).start();
168
168
  const trace = getCliTelemetry().trace(AppBuildTrace);
169
169
  trace.start();
170
- let importMap;
170
+ let autoUpdates;
171
171
  if (autoUpdatesEnabled) {
172
- importMap = {
173
- imports: {
174
- ...await buildVendorDependencies({
175
- basePath,
176
- cwd: workDir,
177
- isApp: true,
178
- outputDir
179
- }),
180
- ...autoUpdatesImports
181
- }
172
+ autoUpdates = {
173
+ cssUrls: autoUpdatesCssUrls,
174
+ imports: autoUpdatesImports,
175
+ vendor: await resolveVendorBuildConfig({
176
+ cwd: workDir,
177
+ isApp: true
178
+ })
182
179
  };
183
180
  }
184
181
  try {
185
182
  timer.start('bundleStudio');
186
183
  const bundle = await buildStaticFiles({
187
184
  appTitle: options.appTitle,
188
- autoUpdatesCssUrls: autoUpdatesCssUrls.length > 0 ? autoUpdatesCssUrls : undefined,
185
+ autoUpdates,
189
186
  basePath,
190
187
  cwd: workDir,
191
188
  entry: options.entry,
192
- importMap,
193
189
  isApp: true,
194
190
  minify: options.minify,
195
191
  outputDir,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/build/buildApp.ts"],"sourcesContent":["import {rm} from 'node:fs/promises'\nimport path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {AppBuildTrace, buildDebug, buildVendorDependencies} from '@sanity/cli-build/_internal/build'\nimport {\n type CliConfig,\n getCliTelemetry,\n getLocalPackageVersion,\n getTimer,\n isInteractive,\n type Output,\n UserViteConfig,\n} from '@sanity/cli-core'\nimport {confirm, logSymbols, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\nimport {parse as semverParse} from 'semver'\n\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {getAutoUpdatesCssUrls, getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {getAppEnvironmentVariables} from './getEnvironmentVariables.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {type BuildOptions} from './types.js'\n\ninterface InternalBuildOptions {\n appId: string | undefined\n appTitle: string | undefined\n autoUpdatesEnabled: boolean\n calledFromDeploy: boolean | undefined\n determineBasePath: () => string\n entry: string | undefined\n minify: boolean\n outDir: string | undefined\n output: Output\n reactCompiler: CliConfig['reactCompiler']\n schemaExtraction: CliConfig['schemaExtraction']\n sourceMap: boolean\n stats: boolean\n unattendedMode: boolean\n vite: UserViteConfig | undefined\n workDir: string\n}\n\n/**\n * Build the Sanity app.\n *\n * @internal\n */\nexport async function buildApp(options: BuildOptions): Promise<void> {\n const {cliConfig, flags, outDir, output, workDir} = options\n\n await internalBuildApp({\n appId: getAppId(cliConfig),\n appTitle: cliConfig && 'app' in cliConfig ? cliConfig.app?.title : undefined,\n autoUpdatesEnabled: options.autoUpdatesEnabled,\n calledFromDeploy: options.calledFromDeploy,\n determineBasePath: () => determineBasePath(cliConfig, 'app', output),\n entry: cliConfig && 'app' in cliConfig ? cliConfig.app?.entry : undefined,\n minify: flags.minify,\n outDir,\n output,\n reactCompiler: cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,\n schemaExtraction: cliConfig?.schemaExtraction,\n sourceMap: Boolean(flags['source-maps']),\n stats: flags.stats,\n unattendedMode: flags.yes,\n vite: cliConfig.vite,\n workDir,\n })\n}\n\n/**\n * Internal build app that avoids depending on flags for CLI config.\n * @param options - options for the build\n */\nasync function internalBuildApp(options: InternalBuildOptions): Promise<void> {\n buildDebug(`Building app`)\n\n const {appId, determineBasePath, outDir, output, workDir} = options\n let {autoUpdatesEnabled} = options\n const unattendedMode = options.unattendedMode\n\n const timer = getTimer()\n\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n const installedSdkVersion = await getLocalPackageVersion('@sanity/sdk-react', workDir)\n const installedSanityVersion = await getLocalPackageVersion('sanity', workDir)\n\n if (!installedSdkVersion) {\n output.error(`Failed to find installed @sanity/sdk-react version`, {exit: 1})\n return\n }\n\n let autoUpdatesImports = {}\n let autoUpdatesCssUrls: string[] = []\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSDKVersion = semverParse(installedSdkVersion)?.version\n if (!cleanSDKVersion) {\n output.error(`Failed to parse installed SDK version: ${installedSdkVersion}`, {exit: 1})\n return\n }\n\n // Sanity might not be installed, but if it is, we want to auto update it.\n const cleanSanityVersion = semverParse(installedSanityVersion)?.version\n\n const autoUpdatedPackages = [\n {name: '@sanity/sdk', version: cleanSDKVersion},\n {name: '@sanity/sdk-react', version: cleanSDKVersion},\n ...(cleanSanityVersion\n ? [{cssFile: 'index.css', name: 'sanity' as const, version: cleanSanityVersion}]\n : []),\n ]\n autoUpdatesImports = getAutoUpdatesImportMap(autoUpdatedPackages, {appId})\n autoUpdatesCssUrls = getAutoUpdatesCssUrls(autoUpdatedPackages, {appId})\n\n output.log(`${logSymbols.info} Building with auto-updates enabled`)\n\n // Warn if auto updates enabled but no appId configured.\n // Skip when called from deploy, since deploy handles appId itself\n // (prompts the user and tells them to add it to config).\n if (!appId && !options.calledFromDeploy) {\n warnAboutMissingAppId({appType: 'app', output})\n }\n\n // Check the versions\n const {mismatched, unresolvedPrerelease} = await compareDependencyVersions(\n autoUpdatedPackages,\n workDir,\n {appId},\n )\n\n if (unresolvedPrerelease.length > 0) {\n await handlePrereleaseVersions({output, unattendedMode, unresolvedPrerelease})\n autoUpdatesImports = {}\n autoUpdatesCssUrls = []\n autoUpdatesEnabled = false\n }\n\n if (mismatched.length > 0 && autoUpdatesEnabled) {\n const versionMismatchWarning =\n `The following local package versions are different from the versions currently served at runtime.\\n` +\n `When using auto updates, we recommend that you test locally with the same versions before deploying. \\n\\n` +\n `${mismatched.map((mod) => ` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\\n')}`\n\n // If it is non-interactive or in unattended mode, we don't want to prompt\n if (isInteractive() && !unattendedMode) {\n const shouldContinue = await confirm({\n default: false,\n message: styleText('yellow', `${versionMismatchWarning} \\n\\nContinue anyway?`),\n })\n\n if (!shouldContinue) {\n output.error('Declined to continue with build', {exit: 1})\n return\n }\n } else {\n // if non-interactive or unattended, just show the warning\n output.warn(versionMismatchWarning)\n }\n }\n }\n\n const envVarKeys = Object.keys(getAppEnvironmentVariables())\n if (envVarKeys.length > 0) {\n output.log('\\nIncluding the following environment variables as part of the JavaScript bundle:')\n for (const key of envVarKeys) output.log(`- ${key}`)\n output.log('')\n }\n\n let shouldClean = true\n if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {\n shouldClean = await confirm({\n default: true,\n message: `Do you want to delete the existing directory (${outputDir}) first?`,\n })\n }\n\n const basePath = determineBasePath()\n\n let spin: SpinnerInstance\n if (shouldClean) {\n timer.start('cleanOutputFolder')\n spin = spinner('Clean output folder').start()\n await rm(outputDir, {force: true, recursive: true})\n const cleanDuration = timer.end('cleanOutputFolder')\n spin.text = `Clean output folder (${cleanDuration.toFixed(0)}ms)`\n spin.succeed()\n }\n\n spin = spinner(`Building Sanity application`).start()\n\n const trace = getCliTelemetry().trace(AppBuildTrace)\n trace.start()\n\n let importMap: {imports?: Record<string, string>} | undefined\n\n if (autoUpdatesEnabled) {\n importMap = {\n imports: {\n ...(await buildVendorDependencies({basePath, cwd: workDir, isApp: true, outputDir})),\n ...autoUpdatesImports,\n },\n }\n }\n\n try {\n timer.start('bundleStudio')\n\n const bundle = await buildStaticFiles({\n appTitle: options.appTitle,\n autoUpdatesCssUrls: autoUpdatesCssUrls.length > 0 ? autoUpdatesCssUrls : undefined,\n basePath,\n cwd: workDir,\n entry: options.entry,\n importMap,\n isApp: true,\n minify: options.minify,\n outputDir,\n reactCompiler: options.reactCompiler,\n schemaExtraction: options.schemaExtraction,\n sourceMap: options.sourceMap,\n vite: options.vite,\n })\n\n trace.log({\n outputSize: bundle.chunks\n .flatMap((chunk) => chunk.modules.flatMap((mod) => mod.renderedLength))\n .reduce((sum, n) => sum + n, 0),\n })\n const buildDuration = timer.end('bundleStudio')\n\n spin.text = `Build Sanity application (${buildDuration.toFixed(0)}ms)`\n spin.succeed()\n\n if (options.stats) {\n output.log('\\nLargest module files:')\n output.log(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15)))\n }\n\n trace.complete()\n } catch (error) {\n spin.fail()\n trace.error(error)\n const message = error instanceof Error ? error.message : String(error)\n buildDebug(`Failed to build Sanity application`, {error})\n output.error(`Failed to build Sanity application: ${message}`, {exit: 1})\n }\n}\n"],"names":["rm","path","styleText","AppBuildTrace","buildDebug","buildVendorDependencies","getCliTelemetry","getLocalPackageVersion","getTimer","isInteractive","confirm","logSymbols","spinner","parse","semverParse","getAppId","compareDependencyVersions","formatModuleSizes","sortModulesBySize","warnAboutMissingAppId","buildStaticFiles","determineBasePath","getAutoUpdatesCssUrls","getAutoUpdatesImportMap","getAppEnvironmentVariables","handlePrereleaseVersions","buildApp","options","cliConfig","flags","outDir","output","workDir","internalBuildApp","appId","appTitle","app","title","undefined","autoUpdatesEnabled","calledFromDeploy","entry","minify","reactCompiler","schemaExtraction","sourceMap","Boolean","stats","unattendedMode","yes","vite","timer","defaultOutputDir","resolve","join","outputDir","installedSdkVersion","installedSanityVersion","error","exit","autoUpdatesImports","autoUpdatesCssUrls","cleanSDKVersion","version","cleanSanityVersion","autoUpdatedPackages","name","cssFile","log","info","appType","mismatched","unresolvedPrerelease","length","versionMismatchWarning","map","mod","pkg","installed","remote","shouldContinue","default","message","warn","envVarKeys","Object","keys","key","shouldClean","basePath","spin","start","force","recursive","cleanDuration","end","text","toFixed","succeed","trace","importMap","imports","cwd","isApp","bundle","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","slice","complete","fail","Error","String"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/build/buildApp.ts"],"sourcesContent":["import {rm} from 'node:fs/promises'\nimport path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {\n AppBuildTrace,\n buildDebug,\n resolveVendorBuildConfig,\n} from '@sanity/cli-build/_internal/build'\nimport {\n type CliConfig,\n getCliTelemetry,\n getLocalPackageVersion,\n getTimer,\n isInteractive,\n type Output,\n UserViteConfig,\n} from '@sanity/cli-core'\nimport {confirm, logSymbols, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\nimport {parse as semverParse} from 'semver'\n\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {getAutoUpdatesCssUrls, getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {getAppEnvironmentVariables} from './getEnvironmentVariables.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {type BuildOptions} from './types.js'\n\ninterface InternalBuildOptions {\n appId: string | undefined\n appTitle: string | undefined\n autoUpdatesEnabled: boolean\n calledFromDeploy: boolean | undefined\n determineBasePath: () => string\n entry: string | undefined\n minify: boolean\n outDir: string | undefined\n output: Output\n reactCompiler: CliConfig['reactCompiler']\n schemaExtraction: CliConfig['schemaExtraction']\n sourceMap: boolean\n stats: boolean\n unattendedMode: boolean\n vite: UserViteConfig | undefined\n workDir: string\n}\n\n/**\n * Build the Sanity app.\n *\n * @internal\n */\nexport async function buildApp(options: BuildOptions): Promise<void> {\n const {cliConfig, flags, outDir, output, workDir} = options\n\n await internalBuildApp({\n appId: getAppId(cliConfig),\n appTitle: cliConfig && 'app' in cliConfig ? cliConfig.app?.title : undefined,\n autoUpdatesEnabled: options.autoUpdatesEnabled,\n calledFromDeploy: options.calledFromDeploy,\n determineBasePath: () => determineBasePath(cliConfig, 'app', output),\n entry: cliConfig && 'app' in cliConfig ? cliConfig.app?.entry : undefined,\n minify: flags.minify,\n outDir,\n output,\n reactCompiler: cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,\n schemaExtraction: cliConfig?.schemaExtraction,\n sourceMap: Boolean(flags['source-maps']),\n stats: flags.stats,\n unattendedMode: flags.yes,\n vite: cliConfig.vite,\n workDir,\n })\n}\n\n/**\n * Internal build app that avoids depending on flags for CLI config.\n * @param options - options for the build\n */\nasync function internalBuildApp(options: InternalBuildOptions): Promise<void> {\n buildDebug(`Building app`)\n\n const {appId, determineBasePath, outDir, output, workDir} = options\n let {autoUpdatesEnabled} = options\n const unattendedMode = options.unattendedMode\n\n const timer = getTimer()\n\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n const installedSdkVersion = await getLocalPackageVersion('@sanity/sdk-react', workDir)\n const installedSanityVersion = await getLocalPackageVersion('sanity', workDir)\n\n if (!installedSdkVersion) {\n output.error(`Failed to find installed @sanity/sdk-react version`, {exit: 1})\n return\n }\n\n let autoUpdatesImports = {}\n let autoUpdatesCssUrls: string[] = []\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSDKVersion = semverParse(installedSdkVersion)?.version\n if (!cleanSDKVersion) {\n output.error(`Failed to parse installed SDK version: ${installedSdkVersion}`, {exit: 1})\n return\n }\n\n // Sanity might not be installed, but if it is, we want to auto update it.\n const cleanSanityVersion = semverParse(installedSanityVersion)?.version\n\n const autoUpdatedPackages = [\n {name: '@sanity/sdk', version: cleanSDKVersion},\n {name: '@sanity/sdk-react', version: cleanSDKVersion},\n ...(cleanSanityVersion\n ? [{cssFile: 'index.css', name: 'sanity' as const, version: cleanSanityVersion}]\n : []),\n ]\n autoUpdatesImports = getAutoUpdatesImportMap(autoUpdatedPackages, {appId})\n autoUpdatesCssUrls = getAutoUpdatesCssUrls(autoUpdatedPackages, {appId})\n\n output.log(`${logSymbols.info} Building with auto-updates enabled`)\n\n // Warn if auto updates enabled but no appId configured.\n // Skip when called from deploy, since deploy handles appId itself\n // (prompts the user and tells them to add it to config).\n if (!appId && !options.calledFromDeploy) {\n warnAboutMissingAppId({appType: 'app', output})\n }\n\n // Check the versions\n const {mismatched, unresolvedPrerelease} = await compareDependencyVersions(\n autoUpdatedPackages,\n workDir,\n {appId},\n )\n\n if (unresolvedPrerelease.length > 0) {\n await handlePrereleaseVersions({output, unattendedMode, unresolvedPrerelease})\n autoUpdatesImports = {}\n autoUpdatesCssUrls = []\n autoUpdatesEnabled = false\n }\n\n if (mismatched.length > 0 && autoUpdatesEnabled) {\n const versionMismatchWarning =\n `The following local package versions are different from the versions currently served at runtime.\\n` +\n `When using auto updates, we recommend that you test locally with the same versions before deploying. \\n\\n` +\n `${mismatched.map((mod) => ` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\\n')}`\n\n // If it is non-interactive or in unattended mode, we don't want to prompt\n if (isInteractive() && !unattendedMode) {\n const shouldContinue = await confirm({\n default: false,\n message: styleText('yellow', `${versionMismatchWarning} \\n\\nContinue anyway?`),\n })\n\n if (!shouldContinue) {\n output.error('Declined to continue with build', {exit: 1})\n return\n }\n } else {\n // if non-interactive or unattended, just show the warning\n output.warn(versionMismatchWarning)\n }\n }\n }\n\n const envVarKeys = Object.keys(getAppEnvironmentVariables())\n if (envVarKeys.length > 0) {\n output.log('\\nIncluding the following environment variables as part of the JavaScript bundle:')\n for (const key of envVarKeys) output.log(`- ${key}`)\n output.log('')\n }\n\n let shouldClean = true\n if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {\n shouldClean = await confirm({\n default: true,\n message: `Do you want to delete the existing directory (${outputDir}) first?`,\n })\n }\n\n const basePath = determineBasePath()\n\n let spin: SpinnerInstance\n if (shouldClean) {\n timer.start('cleanOutputFolder')\n spin = spinner('Clean output folder').start()\n await rm(outputDir, {force: true, recursive: true})\n const cleanDuration = timer.end('cleanOutputFolder')\n spin.text = `Clean output folder (${cleanDuration.toFixed(0)}ms)`\n spin.succeed()\n }\n\n spin = spinner(`Building Sanity application`).start()\n\n const trace = getCliTelemetry().trace(AppBuildTrace)\n trace.start()\n\n let autoUpdates\n if (autoUpdatesEnabled) {\n autoUpdates = {\n cssUrls: autoUpdatesCssUrls,\n imports: autoUpdatesImports,\n vendor: await resolveVendorBuildConfig({cwd: workDir, isApp: true}),\n }\n }\n\n try {\n timer.start('bundleStudio')\n\n const bundle = await buildStaticFiles({\n appTitle: options.appTitle,\n autoUpdates,\n basePath,\n cwd: workDir,\n entry: options.entry,\n isApp: true,\n minify: options.minify,\n outputDir,\n reactCompiler: options.reactCompiler,\n schemaExtraction: options.schemaExtraction,\n sourceMap: options.sourceMap,\n vite: options.vite,\n })\n\n trace.log({\n outputSize: bundle.chunks\n .flatMap((chunk) => chunk.modules.flatMap((mod) => mod.renderedLength))\n .reduce((sum, n) => sum + n, 0),\n })\n const buildDuration = timer.end('bundleStudio')\n\n spin.text = `Build Sanity application (${buildDuration.toFixed(0)}ms)`\n spin.succeed()\n\n if (options.stats) {\n output.log('\\nLargest module files:')\n output.log(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15)))\n }\n\n trace.complete()\n } catch (error) {\n spin.fail()\n trace.error(error)\n const message = error instanceof Error ? error.message : String(error)\n buildDebug(`Failed to build Sanity application`, {error})\n output.error(`Failed to build Sanity application: ${message}`, {exit: 1})\n }\n}\n"],"names":["rm","path","styleText","AppBuildTrace","buildDebug","resolveVendorBuildConfig","getCliTelemetry","getLocalPackageVersion","getTimer","isInteractive","confirm","logSymbols","spinner","parse","semverParse","getAppId","compareDependencyVersions","formatModuleSizes","sortModulesBySize","warnAboutMissingAppId","buildStaticFiles","determineBasePath","getAutoUpdatesCssUrls","getAutoUpdatesImportMap","getAppEnvironmentVariables","handlePrereleaseVersions","buildApp","options","cliConfig","flags","outDir","output","workDir","internalBuildApp","appId","appTitle","app","title","undefined","autoUpdatesEnabled","calledFromDeploy","entry","minify","reactCompiler","schemaExtraction","sourceMap","Boolean","stats","unattendedMode","yes","vite","timer","defaultOutputDir","resolve","join","outputDir","installedSdkVersion","installedSanityVersion","error","exit","autoUpdatesImports","autoUpdatesCssUrls","cleanSDKVersion","version","cleanSanityVersion","autoUpdatedPackages","name","cssFile","log","info","appType","mismatched","unresolvedPrerelease","length","versionMismatchWarning","map","mod","pkg","installed","remote","shouldContinue","default","message","warn","envVarKeys","Object","keys","key","shouldClean","basePath","spin","start","force","recursive","cleanDuration","end","text","toFixed","succeed","trace","autoUpdates","cssUrls","imports","vendor","cwd","isApp","bundle","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","slice","complete","fail","Error","String"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { getAppEnvironmentVariables, getStudioEnvironmentVariables } from './get
7
7
  *
8
8
  * @internal
9
9
  */ export async function buildStaticFiles(options) {
10
- const { appTitle, autoUpdatesCssUrls, basePath, cwd, entry, importMap, isApp, minify = true, outputDir, reactCompiler, schemaExtraction, sourceMap = false, vite: extendViteConfig } = options;
10
+ const { appTitle, autoUpdates, basePath, cwd, entry, isApp, minify = true, outputDir, reactCompiler, schemaExtraction, sourceMap = false, vite: extendViteConfig } = options;
11
11
  buildDebug('Writing Sanity runtime files');
12
12
  await writeSanityRuntime({
13
13
  appTitle,
@@ -30,11 +30,10 @@ import { getAppEnvironmentVariables, getStudioEnvironmentVariables } from './get
30
30
  buildDebug('Resolving vite config');
31
31
  const mode = 'production';
32
32
  let viteConfig = await getViteConfig({
33
- autoUpdatesCssUrls,
33
+ autoUpdates,
34
34
  basePath,
35
35
  cwd,
36
36
  getEnvironmentVariables,
37
- importMap,
38
37
  isApp,
39
38
  minify,
40
39
  mode,
@@ -44,11 +43,12 @@ import { getAppEnvironmentVariables, getStudioEnvironmentVariables } from './get
44
43
  sourceMap
45
44
  });
46
45
  if (extendViteConfig) {
46
+ const defaultViteConfig = viteConfig;
47
47
  viteConfig = await extendViteConfigWithUserConfig({
48
48
  command: 'build',
49
49
  mode
50
50
  }, viteConfig, extendViteConfig);
51
- viteConfig = await finalizeViteConfig(viteConfig);
51
+ viteConfig = await finalizeViteConfig(viteConfig, defaultViteConfig);
52
52
  }
53
53
  const fromPath = path.join(cwd, 'static');
54
54
  // Copy files placed in /static to the built /static
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/build/buildStaticFiles.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {\n buildDebug,\n copyDir,\n extendViteConfigWithUserConfig,\n finalizeViteConfig,\n getViteConfig,\n writeFavicons,\n writeSanityRuntime,\n} from '@sanity/cli-build/_internal/build'\nimport {type CliConfig, type UserViteConfig} from '@sanity/cli-core'\nimport {type PluginOptions as ReactCompilerConfig} from 'babel-plugin-react-compiler'\nimport {build} from 'vite'\n\nimport {\n getAppEnvironmentVariables,\n getStudioEnvironmentVariables,\n} from './getEnvironmentVariables.js'\n\nexport interface ChunkModule {\n name: string\n renderedLength: number\n}\n\nexport interface ChunkStats {\n modules: ChunkModule[]\n name: string\n}\n\ninterface StaticBuildOptions {\n basePath: string\n cwd: string\n outputDir: string\n\n appTitle?: string\n autoUpdatesCssUrls?: string[]\n entry?: string\n importMap?: {imports?: Record<string, string>}\n isApp?: boolean\n minify?: boolean\n profile?: boolean\n reactCompiler?: ReactCompilerConfig\n schemaExtraction?: CliConfig['schemaExtraction']\n sourceMap?: boolean\n vite?: UserViteConfig\n}\n\n/**\n * Builds static files\n *\n * @internal\n */\nexport async function buildStaticFiles(\n options: StaticBuildOptions,\n): Promise<{chunks: ChunkStats[]}> {\n const {\n appTitle,\n autoUpdatesCssUrls,\n basePath,\n cwd,\n entry,\n importMap,\n isApp,\n minify = true,\n outputDir,\n reactCompiler,\n schemaExtraction,\n sourceMap = false,\n vite: extendViteConfig,\n } = options\n\n buildDebug('Writing Sanity runtime files')\n await writeSanityRuntime({\n appTitle,\n basePath,\n cwd,\n entry,\n isApp,\n reactStrictMode: false,\n watch: false,\n })\n\n function getEnvironmentVariables() {\n return isApp\n ? getAppEnvironmentVariables({jsonEncode: true, prefix: 'process.env.'})\n : getStudioEnvironmentVariables({jsonEncode: true, prefix: 'process.env.'})\n }\n\n buildDebug('Resolving vite config')\n const mode = 'production'\n let viteConfig = await getViteConfig({\n autoUpdatesCssUrls,\n basePath,\n cwd,\n getEnvironmentVariables,\n importMap,\n isApp,\n minify,\n mode,\n outputDir,\n reactCompiler,\n schemaExtraction,\n sourceMap,\n })\n\n if (extendViteConfig) {\n viteConfig = await extendViteConfigWithUserConfig(\n {command: 'build', mode},\n viteConfig,\n extendViteConfig,\n )\n viteConfig = await finalizeViteConfig(viteConfig)\n }\n\n const fromPath = path.join(cwd, 'static')\n // Copy files placed in /static to the built /static\n buildDebug(`Copying static files from ${fromPath} to output dir`)\n const staticPath = path.join(outputDir, 'static')\n await copyDir(fromPath, staticPath)\n\n // Write favicons, not overwriting ones that already exist, to static folder\n buildDebug('Writing favicons to output dir')\n const faviconBasePath = `${basePath.replace(/\\/+$/, '')}/static`\n await writeFavicons(faviconBasePath, staticPath)\n\n buildDebug('Bundling using vite')\n const bundle = await build(viteConfig)\n buildDebug('Bundling complete')\n\n // For typescript only - this shouldn't ever be the case given we're not watching\n if (Array.isArray(bundle) || !('output' in bundle)) {\n return {chunks: []}\n }\n\n const stats: ChunkStats[] = []\n for (const chunk of bundle.output) {\n if (chunk.type !== 'chunk') {\n continue\n }\n\n stats.push({\n modules: Object.entries(chunk.modules).map(([rawFilePath, chunkModule]) => {\n const filePath = rawFilePath.startsWith('\\u0000')\n ? rawFilePath.slice('\\u0000'.length)\n : rawFilePath\n\n return {\n name: path.isAbsolute(filePath) ? path.relative(cwd, filePath) : filePath,\n renderedLength: chunkModule.renderedLength,\n }\n }),\n name: chunk.name,\n })\n }\n\n return {chunks: stats}\n}\n"],"names":["path","buildDebug","copyDir","extendViteConfigWithUserConfig","finalizeViteConfig","getViteConfig","writeFavicons","writeSanityRuntime","build","getAppEnvironmentVariables","getStudioEnvironmentVariables","buildStaticFiles","options","appTitle","autoUpdatesCssUrls","basePath","cwd","entry","importMap","isApp","minify","outputDir","reactCompiler","schemaExtraction","sourceMap","vite","extendViteConfig","reactStrictMode","watch","getEnvironmentVariables","jsonEncode","prefix","mode","viteConfig","command","fromPath","join","staticPath","faviconBasePath","replace","bundle","Array","isArray","chunks","stats","chunk","output","type","push","modules","Object","entries","map","rawFilePath","chunkModule","filePath","startsWith","slice","length","name","isAbsolute","relative","renderedLength"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAE5B,SACEC,UAAU,EACVC,OAAO,EACPC,8BAA8B,EAC9BC,kBAAkB,EAClBC,aAAa,EACbC,aAAa,EACbC,kBAAkB,QACb,oCAAmC;AAG1C,SAAQC,KAAK,QAAO,OAAM;AAE1B,SACEC,0BAA0B,EAC1BC,6BAA6B,QACxB,+BAA8B;AA8BrC;;;;CAIC,GACD,OAAO,eAAeC,iBACpBC,OAA2B;IAE3B,MAAM,EACJC,QAAQ,EACRC,kBAAkB,EAClBC,QAAQ,EACRC,GAAG,EACHC,KAAK,EACLC,SAAS,EACTC,KAAK,EACLC,SAAS,IAAI,EACbC,SAAS,EACTC,aAAa,EACbC,gBAAgB,EAChBC,YAAY,KAAK,EACjBC,MAAMC,gBAAgB,EACvB,GAAGd;IAEJX,WAAW;IACX,MAAMM,mBAAmB;QACvBM;QACAE;QACAC;QACAC;QACAE;QACAQ,iBAAiB;QACjBC,OAAO;IACT;IAEA,SAASC;QACP,OAAOV,QACHV,2BAA2B;YAACqB,YAAY;YAAMC,QAAQ;QAAc,KACpErB,8BAA8B;YAACoB,YAAY;YAAMC,QAAQ;QAAc;IAC7E;IAEA9B,WAAW;IACX,MAAM+B,OAAO;IACb,IAAIC,aAAa,MAAM5B,cAAc;QACnCS;QACAC;QACAC;QACAa;QACAX;QACAC;QACAC;QACAY;QACAX;QACAC;QACAC;QACAC;IACF;IAEA,IAAIE,kBAAkB;QACpBO,aAAa,MAAM9B,+BACjB;YAAC+B,SAAS;YAASF;QAAI,GACvBC,YACAP;QAEFO,aAAa,MAAM7B,mBAAmB6B;IACxC;IAEA,MAAME,WAAWnC,KAAKoC,IAAI,CAACpB,KAAK;IAChC,oDAAoD;IACpDf,WAAW,CAAC,0BAA0B,EAAEkC,SAAS,cAAc,CAAC;IAChE,MAAME,aAAarC,KAAKoC,IAAI,CAACf,WAAW;IACxC,MAAMnB,QAAQiC,UAAUE;IAExB,4EAA4E;IAC5EpC,WAAW;IACX,MAAMqC,kBAAkB,GAAGvB,SAASwB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAChE,MAAMjC,cAAcgC,iBAAiBD;IAErCpC,WAAW;IACX,MAAMuC,SAAS,MAAMhC,MAAMyB;IAC3BhC,WAAW;IAEX,iFAAiF;IACjF,IAAIwC,MAAMC,OAAO,CAACF,WAAW,CAAE,CAAA,YAAYA,MAAK,GAAI;QAClD,OAAO;YAACG,QAAQ,EAAE;QAAA;IACpB;IAEA,MAAMC,QAAsB,EAAE;IAC9B,KAAK,MAAMC,SAASL,OAAOM,MAAM,CAAE;QACjC,IAAID,MAAME,IAAI,KAAK,SAAS;YAC1B;QACF;QAEAH,MAAMI,IAAI,CAAC;YACTC,SAASC,OAAOC,OAAO,CAACN,MAAMI,OAAO,EAAEG,GAAG,CAAC,CAAC,CAACC,aAAaC,YAAY;gBACpE,MAAMC,WAAWF,YAAYG,UAAU,CAAC,YACpCH,YAAYI,KAAK,CAAC,SAASC,MAAM,IACjCL;gBAEJ,OAAO;oBACLM,MAAM3D,KAAK4D,UAAU,CAACL,YAAYvD,KAAK6D,QAAQ,CAAC7C,KAAKuC,YAAYA;oBACjEO,gBAAgBR,YAAYQ,cAAc;gBAC5C;YACF;YACAH,MAAMd,MAAMc,IAAI;QAClB;IACF;IAEA,OAAO;QAAChB,QAAQC;IAAK;AACvB"}
1
+ {"version":3,"sources":["../../../src/actions/build/buildStaticFiles.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {\n type AutoUpdatesBuildConfig,\n buildDebug,\n copyDir,\n extendViteConfigWithUserConfig,\n finalizeViteConfig,\n getViteConfig,\n writeFavicons,\n writeSanityRuntime,\n} from '@sanity/cli-build/_internal/build'\nimport {type CliConfig, type UserViteConfig} from '@sanity/cli-core'\nimport {type PluginOptions as ReactCompilerConfig} from 'babel-plugin-react-compiler'\nimport {build} from 'vite'\n\nimport {\n getAppEnvironmentVariables,\n getStudioEnvironmentVariables,\n} from './getEnvironmentVariables.js'\n\nexport interface ChunkModule {\n name: string\n renderedLength: number\n}\n\nexport interface ChunkStats {\n modules: ChunkModule[]\n name: string\n}\n\ninterface StaticBuildOptions {\n basePath: string\n cwd: string\n outputDir: string\n\n appTitle?: string\n autoUpdates?: AutoUpdatesBuildConfig\n entry?: string\n isApp?: boolean\n minify?: boolean\n profile?: boolean\n reactCompiler?: ReactCompilerConfig\n schemaExtraction?: CliConfig['schemaExtraction']\n sourceMap?: boolean\n vite?: UserViteConfig\n}\n\n/**\n * Builds static files\n *\n * @internal\n */\nexport async function buildStaticFiles(\n options: StaticBuildOptions,\n): Promise<{chunks: ChunkStats[]}> {\n const {\n appTitle,\n autoUpdates,\n basePath,\n cwd,\n entry,\n isApp,\n minify = true,\n outputDir,\n reactCompiler,\n schemaExtraction,\n sourceMap = false,\n vite: extendViteConfig,\n } = options\n\n buildDebug('Writing Sanity runtime files')\n await writeSanityRuntime({\n appTitle,\n basePath,\n cwd,\n entry,\n isApp,\n reactStrictMode: false,\n watch: false,\n })\n\n function getEnvironmentVariables() {\n return isApp\n ? getAppEnvironmentVariables({jsonEncode: true, prefix: 'process.env.'})\n : getStudioEnvironmentVariables({jsonEncode: true, prefix: 'process.env.'})\n }\n\n buildDebug('Resolving vite config')\n const mode = 'production'\n let viteConfig = await getViteConfig({\n autoUpdates,\n basePath,\n cwd,\n getEnvironmentVariables,\n isApp,\n minify,\n mode,\n outputDir,\n reactCompiler,\n schemaExtraction,\n sourceMap,\n })\n\n if (extendViteConfig) {\n const defaultViteConfig = viteConfig\n viteConfig = await extendViteConfigWithUserConfig(\n {command: 'build', mode},\n viteConfig,\n extendViteConfig,\n )\n viteConfig = await finalizeViteConfig(viteConfig, defaultViteConfig)\n }\n\n const fromPath = path.join(cwd, 'static')\n // Copy files placed in /static to the built /static\n buildDebug(`Copying static files from ${fromPath} to output dir`)\n const staticPath = path.join(outputDir, 'static')\n await copyDir(fromPath, staticPath)\n\n // Write favicons, not overwriting ones that already exist, to static folder\n buildDebug('Writing favicons to output dir')\n const faviconBasePath = `${basePath.replace(/\\/+$/, '')}/static`\n await writeFavicons(faviconBasePath, staticPath)\n\n buildDebug('Bundling using vite')\n const bundle = await build(viteConfig)\n buildDebug('Bundling complete')\n\n // For typescript only - this shouldn't ever be the case given we're not watching\n if (Array.isArray(bundle) || !('output' in bundle)) {\n return {chunks: []}\n }\n\n const stats: ChunkStats[] = []\n for (const chunk of bundle.output) {\n if (chunk.type !== 'chunk') {\n continue\n }\n\n stats.push({\n modules: Object.entries(chunk.modules).map(([rawFilePath, chunkModule]) => {\n const filePath = rawFilePath.startsWith('\\u0000')\n ? rawFilePath.slice('\\u0000'.length)\n : rawFilePath\n\n return {\n name: path.isAbsolute(filePath) ? path.relative(cwd, filePath) : filePath,\n renderedLength: chunkModule.renderedLength,\n }\n }),\n name: chunk.name,\n })\n }\n\n return {chunks: stats}\n}\n"],"names":["path","buildDebug","copyDir","extendViteConfigWithUserConfig","finalizeViteConfig","getViteConfig","writeFavicons","writeSanityRuntime","build","getAppEnvironmentVariables","getStudioEnvironmentVariables","buildStaticFiles","options","appTitle","autoUpdates","basePath","cwd","entry","isApp","minify","outputDir","reactCompiler","schemaExtraction","sourceMap","vite","extendViteConfig","reactStrictMode","watch","getEnvironmentVariables","jsonEncode","prefix","mode","viteConfig","defaultViteConfig","command","fromPath","join","staticPath","faviconBasePath","replace","bundle","Array","isArray","chunks","stats","chunk","output","type","push","modules","Object","entries","map","rawFilePath","chunkModule","filePath","startsWith","slice","length","name","isAbsolute","relative","renderedLength"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAE5B,SAEEC,UAAU,EACVC,OAAO,EACPC,8BAA8B,EAC9BC,kBAAkB,EAClBC,aAAa,EACbC,aAAa,EACbC,kBAAkB,QACb,oCAAmC;AAG1C,SAAQC,KAAK,QAAO,OAAM;AAE1B,SACEC,0BAA0B,EAC1BC,6BAA6B,QACxB,+BAA8B;AA6BrC;;;;CAIC,GACD,OAAO,eAAeC,iBACpBC,OAA2B;IAE3B,MAAM,EACJC,QAAQ,EACRC,WAAW,EACXC,QAAQ,EACRC,GAAG,EACHC,KAAK,EACLC,KAAK,EACLC,SAAS,IAAI,EACbC,SAAS,EACTC,aAAa,EACbC,gBAAgB,EAChBC,YAAY,KAAK,EACjBC,MAAMC,gBAAgB,EACvB,GAAGb;IAEJX,WAAW;IACX,MAAMM,mBAAmB;QACvBM;QACAE;QACAC;QACAC;QACAC;QACAQ,iBAAiB;QACjBC,OAAO;IACT;IAEA,SAASC;QACP,OAAOV,QACHT,2BAA2B;YAACoB,YAAY;YAAMC,QAAQ;QAAc,KACpEpB,8BAA8B;YAACmB,YAAY;YAAMC,QAAQ;QAAc;IAC7E;IAEA7B,WAAW;IACX,MAAM8B,OAAO;IACb,IAAIC,aAAa,MAAM3B,cAAc;QACnCS;QACAC;QACAC;QACAY;QACAV;QACAC;QACAY;QACAX;QACAC;QACAC;QACAC;IACF;IAEA,IAAIE,kBAAkB;QACpB,MAAMQ,oBAAoBD;QAC1BA,aAAa,MAAM7B,+BACjB;YAAC+B,SAAS;YAASH;QAAI,GACvBC,YACAP;QAEFO,aAAa,MAAM5B,mBAAmB4B,YAAYC;IACpD;IAEA,MAAME,WAAWnC,KAAKoC,IAAI,CAACpB,KAAK;IAChC,oDAAoD;IACpDf,WAAW,CAAC,0BAA0B,EAAEkC,SAAS,cAAc,CAAC;IAChE,MAAME,aAAarC,KAAKoC,IAAI,CAAChB,WAAW;IACxC,MAAMlB,QAAQiC,UAAUE;IAExB,4EAA4E;IAC5EpC,WAAW;IACX,MAAMqC,kBAAkB,GAAGvB,SAASwB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAChE,MAAMjC,cAAcgC,iBAAiBD;IAErCpC,WAAW;IACX,MAAMuC,SAAS,MAAMhC,MAAMwB;IAC3B/B,WAAW;IAEX,iFAAiF;IACjF,IAAIwC,MAAMC,OAAO,CAACF,WAAW,CAAE,CAAA,YAAYA,MAAK,GAAI;QAClD,OAAO;YAACG,QAAQ,EAAE;QAAA;IACpB;IAEA,MAAMC,QAAsB,EAAE;IAC9B,KAAK,MAAMC,SAASL,OAAOM,MAAM,CAAE;QACjC,IAAID,MAAME,IAAI,KAAK,SAAS;YAC1B;QACF;QAEAH,MAAMI,IAAI,CAAC;YACTC,SAASC,OAAOC,OAAO,CAACN,MAAMI,OAAO,EAAEG,GAAG,CAAC,CAAC,CAACC,aAAaC,YAAY;gBACpE,MAAMC,WAAWF,YAAYG,UAAU,CAAC,YACpCH,YAAYI,KAAK,CAAC,SAASC,MAAM,IACjCL;gBAEJ,OAAO;oBACLM,MAAM3D,KAAK4D,UAAU,CAACL,YAAYvD,KAAK6D,QAAQ,CAAC7C,KAAKuC,YAAYA;oBACjEO,gBAAgBR,YAAYQ,cAAc;gBAC5C;YACF;YACAH,MAAMd,MAAMc,IAAI;QAClB;IACF;IAEA,OAAO;QAAChB,QAAQC;IAAK;AACvB"}
@@ -1,7 +1,7 @@
1
1
  import { rm } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { styleText } from 'node:util';
4
- import { buildDebug, buildVendorDependencies, checkStudioDependencyVersions, StudioBuildTrace } from '@sanity/cli-build/_internal/build';
4
+ import { buildDebug, checkStudioDependencyVersions, resolveVendorBuildConfig, StudioBuildTrace } from '@sanity/cli-build/_internal/build';
5
5
  import { getCliTelemetry, getLocalPackageVersion, getTimer, isInteractive } from '@sanity/cli-core';
6
6
  import { confirm, logSymbols, select, spinner } from '@sanity/cli-core/ux';
7
7
  import { parse as semverParse } from 'semver';
@@ -217,27 +217,23 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
217
217
  spin = spinner(`Build Sanity Studio`).start();
218
218
  const trace = getCliTelemetry().trace(StudioBuildTrace);
219
219
  trace.start();
220
- let importMap;
220
+ let autoUpdates;
221
221
  if (autoUpdatesEnabled) {
222
- importMap = {
223
- imports: {
224
- ...await buildVendorDependencies({
225
- basePath,
226
- cwd: workDir,
227
- isApp: false,
228
- outputDir
229
- }),
230
- ...autoUpdatesImports
231
- }
222
+ autoUpdates = {
223
+ cssUrls: autoUpdatesCssUrls,
224
+ imports: autoUpdatesImports,
225
+ vendor: await resolveVendorBuildConfig({
226
+ cwd: workDir,
227
+ isApp: false
228
+ })
232
229
  };
233
230
  }
234
231
  try {
235
232
  timer.start('bundleStudio');
236
233
  const bundle = await buildStaticFiles({
237
- autoUpdatesCssUrls: autoUpdatesCssUrls.length > 0 ? autoUpdatesCssUrls : undefined,
234
+ autoUpdates,
238
235
  basePath,
239
236
  cwd: workDir,
240
- importMap,
241
237
  minify,
242
238
  outputDir,
243
239
  reactCompiler,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/build/buildStudio.ts"],"sourcesContent":["import {rm} from 'node:fs/promises'\nimport path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {\n buildDebug,\n buildVendorDependencies,\n checkStudioDependencyVersions,\n StudioBuildTrace,\n} from '@sanity/cli-build/_internal/build'\nimport {\n type CliConfig,\n getCliTelemetry,\n getLocalPackageVersion,\n getTimer,\n isInteractive,\n type Output,\n UserViteConfig,\n} from '@sanity/cli-core'\nimport {confirm, logSymbols, select, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\nimport {parse as semverParse} from 'semver'\n\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.js'\nimport {determineIsApp} from '../../util/determineIsApp.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {getPackageManagerChoice} from '../../util/packageManager/packageManagerChoice.js'\nimport {upgradePackages} from '../../util/packageManager/upgradePackages.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {checkRequiredDependencies} from './checkRequiredDependencies.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {getAutoUpdatesCssUrls, getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {getStudioEnvironmentVariables} from './getEnvironmentVariables.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {type BuildOptions} from './types.js'\n\ninterface InternalBuildOptions {\n appId: string | undefined\n autoUpdatesEnabled: boolean\n calledFromDeploy: boolean | undefined\n determineBasePath: () => string\n isApp: boolean\n minify: boolean\n outDir: string | undefined\n output: Output\n projectId: string | undefined\n reactCompiler: CliConfig['reactCompiler']\n schemaExtraction: CliConfig['schemaExtraction']\n sourceMap: boolean\n stats: boolean\n unattendedMode: boolean\n upgradePackages(options: {packages: [name: string, version: string][]}): Promise<void>\n vite: UserViteConfig | undefined\n workDir: string\n}\n\n/**\n * Build the Sanity Studio.\n *\n * @internal\n */\nexport async function buildStudio(options: BuildOptions): Promise<void> {\n const {calledFromDeploy, cliConfig, flags, outDir, output, workDir} = options\n\n const upgradePkgs = async (options: {\n packages: [name: string, version: string][]\n }): Promise<void> => {\n await upgradePackages(\n {\n packageManager: (await getPackageManagerChoice(workDir, {interactive: false})).chosen,\n packages: options.packages,\n },\n {output, workDir},\n )\n }\n\n await internalBuildStudio({\n appId: getAppId(cliConfig),\n autoUpdatesEnabled: options.autoUpdatesEnabled,\n calledFromDeploy,\n determineBasePath: () => determineBasePath(cliConfig, 'studio', output),\n isApp: determineIsApp(cliConfig),\n minify: Boolean(flags.minify),\n outDir,\n output,\n projectId: cliConfig?.api?.projectId,\n reactCompiler: cliConfig.reactCompiler,\n schemaExtraction: cliConfig.schemaExtraction,\n sourceMap: Boolean(flags['source-maps']),\n stats: flags.stats,\n unattendedMode: Boolean(flags.yes),\n upgradePackages: upgradePkgs,\n vite: cliConfig.vite,\n workDir,\n })\n}\n\n/**\n * Internal build studio that avoids depending on flags for CLI config.\n * @param options - options for the build\n */\nasync function internalBuildStudio(options: InternalBuildOptions): Promise<void> {\n buildDebug(`Building studio`)\n\n const timer = getTimer()\n const {\n appId,\n determineBasePath,\n isApp,\n minify,\n outDir,\n output,\n projectId,\n reactCompiler,\n schemaExtraction,\n sourceMap,\n stats,\n unattendedMode,\n upgradePackages,\n vite,\n workDir,\n } = options\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n await checkStudioDependencyVersions(workDir, output)\n\n // If the check resulted in a dependency install, the CLI command will be re-run,\n // thus we want to exit early\n const {installedSanityVersion} = await checkRequiredDependencies({\n isApp,\n output,\n workDir,\n })\n\n let autoUpdatesEnabled = options.autoUpdatesEnabled\n\n let autoUpdatesImports = {}\n let autoUpdatesCssUrls: string[] = []\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSanityVersion = semverParse(installedSanityVersion)?.version\n if (!cleanSanityVersion) {\n throw new Error(`Failed to parse installed Sanity version: ${installedSanityVersion}`)\n }\n\n output.log(`${logSymbols.info} Building with auto-updates enabled`)\n\n // Warn if auto updates enabled but no appId configured.\n // Skip when called from deploy, since deploy handles appId itself\n // (prompts the user and tells them to add it to config).\n if (!appId && !options.calledFromDeploy) {\n warnAboutMissingAppId({appType: 'studio', output, projectId})\n }\n\n const installedVisionVersion = await getLocalPackageVersion('@sanity/vision', workDir)\n const cleanVisionVersion = installedVisionVersion\n ? semverParse(installedVisionVersion)?.version\n : undefined\n\n const sanityDependencies = [\n {cssFile: 'index.css', name: 'sanity', version: cleanSanityVersion},\n ...(cleanVisionVersion\n ? [{cssFile: 'index.css', name: '@sanity/vision' as const, version: cleanVisionVersion}]\n : [{name: '@sanity/vision' as const, version: cleanSanityVersion}]),\n ]\n autoUpdatesImports = getAutoUpdatesImportMap(sanityDependencies, {appId})\n\n autoUpdatesCssUrls = getAutoUpdatesCssUrls(sanityDependencies, {appId})\n\n // Check the versions\n const {mismatched, unresolvedPrerelease} = await compareDependencyVersions(\n sanityDependencies,\n workDir,\n {appId},\n )\n\n if (unresolvedPrerelease.length > 0) {\n await handlePrereleaseVersions({output, unattendedMode, unresolvedPrerelease})\n autoUpdatesImports = {}\n autoUpdatesCssUrls = []\n autoUpdatesEnabled = false\n }\n\n if (mismatched.length > 0 && autoUpdatesEnabled) {\n const versionMismatchWarning =\n `The following local package versions are different from the versions currently served at runtime.\\n` +\n `When using auto updates, we recommend that you test locally with the same versions before deploying. \\n\\n` +\n `${mismatched.map((mod) => ` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\\n')}`\n\n // If it is non-interactive or in unattended mode, we don't want to prompt\n if (isInteractive() && !unattendedMode) {\n const choice = await select({\n choices: [\n {\n name: `Upgrade local versions (recommended). You will need to run the build command again`,\n value: 'upgrade',\n },\n {\n name: `Upgrade and proceed with build`,\n value: 'upgrade-and-proceed',\n },\n {\n name: `Continue anyway`,\n value: 'continue',\n },\n {name: 'Cancel', value: 'cancel'},\n ],\n default: 'upgrade',\n message: styleText(\n 'yellow',\n `${logSymbols.warning} ${versionMismatchWarning}\\n\\nDo you want to upgrade local versions before deploying?`,\n ),\n })\n\n if (choice === 'cancel') {\n output.error('Declined to continue with build', {exit: 1})\n return\n }\n\n if (choice === 'upgrade' || choice === 'upgrade-and-proceed') {\n await upgradePackages({\n packages: mismatched.map((res) => [res.pkg, res.remote]),\n })\n\n if (choice === 'upgrade') {\n return\n }\n }\n } else {\n // if non-interactive or unattended, just show the warning\n output.warn(versionMismatchWarning)\n }\n }\n }\n\n const envVarKeys = Object.keys(getStudioEnvironmentVariables())\n if (envVarKeys.length > 0) {\n output.log('\\nIncluding the following environment variables as part of the JavaScript bundle:')\n for (const key of envVarKeys) {\n output.log(`- ${key}`)\n }\n output.log('')\n }\n\n let shouldClean = true\n if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {\n shouldClean = await confirm({\n default: true,\n message: `Do you want to delete the existing directory (${outputDir}) first?`,\n })\n }\n\n // Determine base path for built studio\n const basePath = determineBasePath()\n\n if (schemaExtraction?.enabled) {\n output.log(`${logSymbols.info} Building with schema extraction enabled`)\n }\n\n let spin: SpinnerInstance\n if (shouldClean) {\n timer.start('cleanOutputFolder')\n spin = spinner('Clean output folder').start()\n await rm(outputDir, {force: true, recursive: true})\n const cleanDuration = timer.end('cleanOutputFolder')\n spin.text = `Clean output folder (${cleanDuration.toFixed(0)}ms)`\n spin.succeed()\n }\n\n spin = spinner(`Build Sanity Studio`).start()\n\n const trace = getCliTelemetry().trace(StudioBuildTrace)\n trace.start()\n\n let importMap\n\n if (autoUpdatesEnabled) {\n importMap = {\n imports: {\n ...(await buildVendorDependencies({basePath, cwd: workDir, isApp: false, outputDir})),\n ...autoUpdatesImports,\n },\n }\n }\n\n try {\n timer.start('bundleStudio')\n\n const bundle = await buildStaticFiles({\n autoUpdatesCssUrls: autoUpdatesCssUrls.length > 0 ? autoUpdatesCssUrls : undefined,\n basePath,\n cwd: workDir,\n importMap,\n minify,\n outputDir,\n reactCompiler,\n schemaExtraction,\n sourceMap,\n vite,\n })\n\n trace.log({\n outputSize: bundle.chunks\n .flatMap((chunk) => chunk.modules.flatMap((mod) => mod.renderedLength))\n .reduce((sum, n) => sum + n, 0),\n })\n const buildDuration = timer.end('bundleStudio')\n\n spin.text = `Build Sanity Studio (${buildDuration.toFixed(0)}ms)`\n spin.succeed()\n\n trace.complete()\n if (stats) {\n output.log('\\nLargest module files:')\n output.log(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15)))\n }\n } catch (error) {\n spin.fail()\n trace.error(error)\n const message = error instanceof Error ? error.message : String(error)\n buildDebug(`Failed to build Sanity Studio`, {error})\n output.error(`Failed to build Sanity Studio: ${message}`, {exit: 1})\n }\n}\n"],"names":["rm","path","styleText","buildDebug","buildVendorDependencies","checkStudioDependencyVersions","StudioBuildTrace","getCliTelemetry","getLocalPackageVersion","getTimer","isInteractive","confirm","logSymbols","select","spinner","parse","semverParse","getAppId","compareDependencyVersions","determineIsApp","formatModuleSizes","sortModulesBySize","getPackageManagerChoice","upgradePackages","warnAboutMissingAppId","buildStaticFiles","checkRequiredDependencies","determineBasePath","getAutoUpdatesCssUrls","getAutoUpdatesImportMap","getStudioEnvironmentVariables","handlePrereleaseVersions","buildStudio","options","calledFromDeploy","cliConfig","flags","outDir","output","workDir","upgradePkgs","packageManager","interactive","chosen","packages","internalBuildStudio","appId","autoUpdatesEnabled","isApp","minify","Boolean","projectId","api","reactCompiler","schemaExtraction","sourceMap","stats","unattendedMode","yes","vite","timer","defaultOutputDir","resolve","join","outputDir","installedSanityVersion","autoUpdatesImports","autoUpdatesCssUrls","cleanSanityVersion","version","Error","log","info","appType","installedVisionVersion","cleanVisionVersion","undefined","sanityDependencies","cssFile","name","mismatched","unresolvedPrerelease","length","versionMismatchWarning","map","mod","pkg","installed","remote","choice","choices","value","default","message","warning","error","exit","res","warn","envVarKeys","Object","keys","key","shouldClean","basePath","enabled","spin","start","force","recursive","cleanDuration","end","text","toFixed","succeed","trace","importMap","imports","cwd","bundle","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","complete","slice","fail","String"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/build/buildStudio.ts"],"sourcesContent":["import {rm} from 'node:fs/promises'\nimport path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {\n buildDebug,\n checkStudioDependencyVersions,\n resolveVendorBuildConfig,\n StudioBuildTrace,\n} from '@sanity/cli-build/_internal/build'\nimport {\n type CliConfig,\n getCliTelemetry,\n getLocalPackageVersion,\n getTimer,\n isInteractive,\n type Output,\n UserViteConfig,\n} from '@sanity/cli-core'\nimport {confirm, logSymbols, select, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\nimport {parse as semverParse} from 'semver'\n\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.js'\nimport {determineIsApp} from '../../util/determineIsApp.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {getPackageManagerChoice} from '../../util/packageManager/packageManagerChoice.js'\nimport {upgradePackages} from '../../util/packageManager/upgradePackages.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {checkRequiredDependencies} from './checkRequiredDependencies.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {getAutoUpdatesCssUrls, getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {getStudioEnvironmentVariables} from './getEnvironmentVariables.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {type BuildOptions} from './types.js'\n\ninterface InternalBuildOptions {\n appId: string | undefined\n autoUpdatesEnabled: boolean\n calledFromDeploy: boolean | undefined\n determineBasePath: () => string\n isApp: boolean\n minify: boolean\n outDir: string | undefined\n output: Output\n projectId: string | undefined\n reactCompiler: CliConfig['reactCompiler']\n schemaExtraction: CliConfig['schemaExtraction']\n sourceMap: boolean\n stats: boolean\n unattendedMode: boolean\n upgradePackages(options: {packages: [name: string, version: string][]}): Promise<void>\n vite: UserViteConfig | undefined\n workDir: string\n}\n\n/**\n * Build the Sanity Studio.\n *\n * @internal\n */\nexport async function buildStudio(options: BuildOptions): Promise<void> {\n const {calledFromDeploy, cliConfig, flags, outDir, output, workDir} = options\n\n const upgradePkgs = async (options: {\n packages: [name: string, version: string][]\n }): Promise<void> => {\n await upgradePackages(\n {\n packageManager: (await getPackageManagerChoice(workDir, {interactive: false})).chosen,\n packages: options.packages,\n },\n {output, workDir},\n )\n }\n\n await internalBuildStudio({\n appId: getAppId(cliConfig),\n autoUpdatesEnabled: options.autoUpdatesEnabled,\n calledFromDeploy,\n determineBasePath: () => determineBasePath(cliConfig, 'studio', output),\n isApp: determineIsApp(cliConfig),\n minify: Boolean(flags.minify),\n outDir,\n output,\n projectId: cliConfig?.api?.projectId,\n reactCompiler: cliConfig.reactCompiler,\n schemaExtraction: cliConfig.schemaExtraction,\n sourceMap: Boolean(flags['source-maps']),\n stats: flags.stats,\n unattendedMode: Boolean(flags.yes),\n upgradePackages: upgradePkgs,\n vite: cliConfig.vite,\n workDir,\n })\n}\n\n/**\n * Internal build studio that avoids depending on flags for CLI config.\n * @param options - options for the build\n */\nasync function internalBuildStudio(options: InternalBuildOptions): Promise<void> {\n buildDebug(`Building studio`)\n\n const timer = getTimer()\n const {\n appId,\n determineBasePath,\n isApp,\n minify,\n outDir,\n output,\n projectId,\n reactCompiler,\n schemaExtraction,\n sourceMap,\n stats,\n unattendedMode,\n upgradePackages,\n vite,\n workDir,\n } = options\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n await checkStudioDependencyVersions(workDir, output)\n\n // If the check resulted in a dependency install, the CLI command will be re-run,\n // thus we want to exit early\n const {installedSanityVersion} = await checkRequiredDependencies({\n isApp,\n output,\n workDir,\n })\n\n let autoUpdatesEnabled = options.autoUpdatesEnabled\n\n let autoUpdatesImports = {}\n let autoUpdatesCssUrls: string[] = []\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSanityVersion = semverParse(installedSanityVersion)?.version\n if (!cleanSanityVersion) {\n throw new Error(`Failed to parse installed Sanity version: ${installedSanityVersion}`)\n }\n\n output.log(`${logSymbols.info} Building with auto-updates enabled`)\n\n // Warn if auto updates enabled but no appId configured.\n // Skip when called from deploy, since deploy handles appId itself\n // (prompts the user and tells them to add it to config).\n if (!appId && !options.calledFromDeploy) {\n warnAboutMissingAppId({appType: 'studio', output, projectId})\n }\n\n const installedVisionVersion = await getLocalPackageVersion('@sanity/vision', workDir)\n const cleanVisionVersion = installedVisionVersion\n ? semverParse(installedVisionVersion)?.version\n : undefined\n\n const sanityDependencies = [\n {cssFile: 'index.css', name: 'sanity', version: cleanSanityVersion},\n ...(cleanVisionVersion\n ? [{cssFile: 'index.css', name: '@sanity/vision' as const, version: cleanVisionVersion}]\n : [{name: '@sanity/vision' as const, version: cleanSanityVersion}]),\n ]\n autoUpdatesImports = getAutoUpdatesImportMap(sanityDependencies, {appId})\n\n autoUpdatesCssUrls = getAutoUpdatesCssUrls(sanityDependencies, {appId})\n\n // Check the versions\n const {mismatched, unresolvedPrerelease} = await compareDependencyVersions(\n sanityDependencies,\n workDir,\n {appId},\n )\n\n if (unresolvedPrerelease.length > 0) {\n await handlePrereleaseVersions({output, unattendedMode, unresolvedPrerelease})\n autoUpdatesImports = {}\n autoUpdatesCssUrls = []\n autoUpdatesEnabled = false\n }\n\n if (mismatched.length > 0 && autoUpdatesEnabled) {\n const versionMismatchWarning =\n `The following local package versions are different from the versions currently served at runtime.\\n` +\n `When using auto updates, we recommend that you test locally with the same versions before deploying. \\n\\n` +\n `${mismatched.map((mod) => ` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\\n')}`\n\n // If it is non-interactive or in unattended mode, we don't want to prompt\n if (isInteractive() && !unattendedMode) {\n const choice = await select({\n choices: [\n {\n name: `Upgrade local versions (recommended). You will need to run the build command again`,\n value: 'upgrade',\n },\n {\n name: `Upgrade and proceed with build`,\n value: 'upgrade-and-proceed',\n },\n {\n name: `Continue anyway`,\n value: 'continue',\n },\n {name: 'Cancel', value: 'cancel'},\n ],\n default: 'upgrade',\n message: styleText(\n 'yellow',\n `${logSymbols.warning} ${versionMismatchWarning}\\n\\nDo you want to upgrade local versions before deploying?`,\n ),\n })\n\n if (choice === 'cancel') {\n output.error('Declined to continue with build', {exit: 1})\n return\n }\n\n if (choice === 'upgrade' || choice === 'upgrade-and-proceed') {\n await upgradePackages({\n packages: mismatched.map((res) => [res.pkg, res.remote]),\n })\n\n if (choice === 'upgrade') {\n return\n }\n }\n } else {\n // if non-interactive or unattended, just show the warning\n output.warn(versionMismatchWarning)\n }\n }\n }\n\n const envVarKeys = Object.keys(getStudioEnvironmentVariables())\n if (envVarKeys.length > 0) {\n output.log('\\nIncluding the following environment variables as part of the JavaScript bundle:')\n for (const key of envVarKeys) {\n output.log(`- ${key}`)\n }\n output.log('')\n }\n\n let shouldClean = true\n if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {\n shouldClean = await confirm({\n default: true,\n message: `Do you want to delete the existing directory (${outputDir}) first?`,\n })\n }\n\n // Determine base path for built studio\n const basePath = determineBasePath()\n\n if (schemaExtraction?.enabled) {\n output.log(`${logSymbols.info} Building with schema extraction enabled`)\n }\n\n let spin: SpinnerInstance\n if (shouldClean) {\n timer.start('cleanOutputFolder')\n spin = spinner('Clean output folder').start()\n await rm(outputDir, {force: true, recursive: true})\n const cleanDuration = timer.end('cleanOutputFolder')\n spin.text = `Clean output folder (${cleanDuration.toFixed(0)}ms)`\n spin.succeed()\n }\n\n spin = spinner(`Build Sanity Studio`).start()\n\n const trace = getCliTelemetry().trace(StudioBuildTrace)\n trace.start()\n\n let autoUpdates\n if (autoUpdatesEnabled) {\n autoUpdates = {\n cssUrls: autoUpdatesCssUrls,\n imports: autoUpdatesImports,\n vendor: await resolveVendorBuildConfig({cwd: workDir, isApp: false}),\n }\n }\n\n try {\n timer.start('bundleStudio')\n\n const bundle = await buildStaticFiles({\n autoUpdates,\n basePath,\n cwd: workDir,\n minify,\n outputDir,\n reactCompiler,\n schemaExtraction,\n sourceMap,\n vite,\n })\n\n trace.log({\n outputSize: bundle.chunks\n .flatMap((chunk) => chunk.modules.flatMap((mod) => mod.renderedLength))\n .reduce((sum, n) => sum + n, 0),\n })\n const buildDuration = timer.end('bundleStudio')\n\n spin.text = `Build Sanity Studio (${buildDuration.toFixed(0)}ms)`\n spin.succeed()\n\n trace.complete()\n if (stats) {\n output.log('\\nLargest module files:')\n output.log(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15)))\n }\n } catch (error) {\n spin.fail()\n trace.error(error)\n const message = error instanceof Error ? error.message : String(error)\n buildDebug(`Failed to build Sanity Studio`, {error})\n output.error(`Failed to build Sanity Studio: ${message}`, {exit: 1})\n }\n}\n"],"names":["rm","path","styleText","buildDebug","checkStudioDependencyVersions","resolveVendorBuildConfig","StudioBuildTrace","getCliTelemetry","getLocalPackageVersion","getTimer","isInteractive","confirm","logSymbols","select","spinner","parse","semverParse","getAppId","compareDependencyVersions","determineIsApp","formatModuleSizes","sortModulesBySize","getPackageManagerChoice","upgradePackages","warnAboutMissingAppId","buildStaticFiles","checkRequiredDependencies","determineBasePath","getAutoUpdatesCssUrls","getAutoUpdatesImportMap","getStudioEnvironmentVariables","handlePrereleaseVersions","buildStudio","options","calledFromDeploy","cliConfig","flags","outDir","output","workDir","upgradePkgs","packageManager","interactive","chosen","packages","internalBuildStudio","appId","autoUpdatesEnabled","isApp","minify","Boolean","projectId","api","reactCompiler","schemaExtraction","sourceMap","stats","unattendedMode","yes","vite","timer","defaultOutputDir","resolve","join","outputDir","installedSanityVersion","autoUpdatesImports","autoUpdatesCssUrls","cleanSanityVersion","version","Error","log","info","appType","installedVisionVersion","cleanVisionVersion","undefined","sanityDependencies","cssFile","name","mismatched","unresolvedPrerelease","length","versionMismatchWarning","map","mod","pkg","installed","remote","choice","choices","value","default","message","warning","error","exit","res","warn","envVarKeys","Object","keys","key","shouldClean","basePath","enabled","spin","start","force","recursive","cleanDuration","end","text","toFixed","succeed","trace","autoUpdates","cssUrls","imports","vendor","cwd","bundle","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","complete","slice","fail","String"],"mappings":"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"}
@@ -3227,6 +3227,118 @@
3227
3227
  "configure.js"
3228
3228
  ]
3229
3229
  },
3230
+ "openapi:get": {
3231
+ "aliases": [],
3232
+ "args": {
3233
+ "slug": {
3234
+ "description": "Slug of the OpenAPI specification to retrieve",
3235
+ "name": "slug",
3236
+ "required": true
3237
+ }
3238
+ },
3239
+ "description": "Get an OpenAPI specification by slug",
3240
+ "examples": [
3241
+ {
3242
+ "command": "<%= config.bin %> <%= command.id %> query",
3243
+ "description": "Get a specification (YAML format, default)"
3244
+ },
3245
+ {
3246
+ "command": "<%= config.bin %> <%= command.id %> query --format=json",
3247
+ "description": "Get specification in JSON format"
3248
+ },
3249
+ {
3250
+ "command": "<%= config.bin %> <%= command.id %> query --web",
3251
+ "description": "Open specification in browser"
3252
+ },
3253
+ {
3254
+ "command": "<%= config.bin %> <%= command.id %> query > query-api.yaml",
3255
+ "description": "Pipe to file"
3256
+ }
3257
+ ],
3258
+ "flags": {
3259
+ "format": {
3260
+ "description": "Output format: yaml (default), json",
3261
+ "name": "format",
3262
+ "default": "yaml",
3263
+ "hasDynamicHelp": false,
3264
+ "multiple": false,
3265
+ "options": [
3266
+ "yaml",
3267
+ "json"
3268
+ ],
3269
+ "type": "option"
3270
+ },
3271
+ "web": {
3272
+ "char": "w",
3273
+ "description": "Open in web browser",
3274
+ "name": "web",
3275
+ "allowNo": false,
3276
+ "type": "boolean"
3277
+ }
3278
+ },
3279
+ "hasDynamicHelp": false,
3280
+ "hiddenAliases": [],
3281
+ "id": "openapi:get",
3282
+ "pluginAlias": "@sanity/cli",
3283
+ "pluginName": "@sanity/cli",
3284
+ "pluginType": "core",
3285
+ "strict": true,
3286
+ "isESM": true,
3287
+ "relativePath": [
3288
+ "dist",
3289
+ "commands",
3290
+ "openapi",
3291
+ "get.js"
3292
+ ]
3293
+ },
3294
+ "openapi:list": {
3295
+ "aliases": [],
3296
+ "args": {},
3297
+ "description": "List all available OpenAPI specifications",
3298
+ "examples": [
3299
+ {
3300
+ "command": "<%= config.bin %> <%= command.id %>",
3301
+ "description": "List all available OpenAPI specs"
3302
+ },
3303
+ {
3304
+ "command": "<%= config.bin %> <%= command.id %> --json",
3305
+ "description": "List with JSON output"
3306
+ },
3307
+ {
3308
+ "command": "<%= config.bin %> <%= command.id %> --web",
3309
+ "description": "Open HTTP Reference in browser"
3310
+ }
3311
+ ],
3312
+ "flags": {
3313
+ "json": {
3314
+ "description": "Output JSON",
3315
+ "name": "json",
3316
+ "allowNo": false,
3317
+ "type": "boolean"
3318
+ },
3319
+ "web": {
3320
+ "char": "w",
3321
+ "description": "Open HTTP Reference in web browser",
3322
+ "name": "web",
3323
+ "allowNo": false,
3324
+ "type": "boolean"
3325
+ }
3326
+ },
3327
+ "hasDynamicHelp": false,
3328
+ "hiddenAliases": [],
3329
+ "id": "openapi:list",
3330
+ "pluginAlias": "@sanity/cli",
3331
+ "pluginName": "@sanity/cli",
3332
+ "pluginType": "core",
3333
+ "strict": true,
3334
+ "isESM": true,
3335
+ "relativePath": [
3336
+ "dist",
3337
+ "commands",
3338
+ "openapi",
3339
+ "list.js"
3340
+ ]
3341
+ },
3230
3342
  "media:create-aspect": {
3231
3343
  "aliases": [],
3232
3344
  "args": {},
@@ -3517,118 +3629,6 @@
3517
3629
  "import.js"
3518
3630
  ]
3519
3631
  },
3520
- "openapi:get": {
3521
- "aliases": [],
3522
- "args": {
3523
- "slug": {
3524
- "description": "Slug of the OpenAPI specification to retrieve",
3525
- "name": "slug",
3526
- "required": true
3527
- }
3528
- },
3529
- "description": "Get an OpenAPI specification by slug",
3530
- "examples": [
3531
- {
3532
- "command": "<%= config.bin %> <%= command.id %> query",
3533
- "description": "Get a specification (YAML format, default)"
3534
- },
3535
- {
3536
- "command": "<%= config.bin %> <%= command.id %> query --format=json",
3537
- "description": "Get specification in JSON format"
3538
- },
3539
- {
3540
- "command": "<%= config.bin %> <%= command.id %> query --web",
3541
- "description": "Open specification in browser"
3542
- },
3543
- {
3544
- "command": "<%= config.bin %> <%= command.id %> query > query-api.yaml",
3545
- "description": "Pipe to file"
3546
- }
3547
- ],
3548
- "flags": {
3549
- "format": {
3550
- "description": "Output format: yaml (default), json",
3551
- "name": "format",
3552
- "default": "yaml",
3553
- "hasDynamicHelp": false,
3554
- "multiple": false,
3555
- "options": [
3556
- "yaml",
3557
- "json"
3558
- ],
3559
- "type": "option"
3560
- },
3561
- "web": {
3562
- "char": "w",
3563
- "description": "Open in web browser",
3564
- "name": "web",
3565
- "allowNo": false,
3566
- "type": "boolean"
3567
- }
3568
- },
3569
- "hasDynamicHelp": false,
3570
- "hiddenAliases": [],
3571
- "id": "openapi:get",
3572
- "pluginAlias": "@sanity/cli",
3573
- "pluginName": "@sanity/cli",
3574
- "pluginType": "core",
3575
- "strict": true,
3576
- "isESM": true,
3577
- "relativePath": [
3578
- "dist",
3579
- "commands",
3580
- "openapi",
3581
- "get.js"
3582
- ]
3583
- },
3584
- "openapi:list": {
3585
- "aliases": [],
3586
- "args": {},
3587
- "description": "List all available OpenAPI specifications",
3588
- "examples": [
3589
- {
3590
- "command": "<%= config.bin %> <%= command.id %>",
3591
- "description": "List all available OpenAPI specs"
3592
- },
3593
- {
3594
- "command": "<%= config.bin %> <%= command.id %> --json",
3595
- "description": "List with JSON output"
3596
- },
3597
- {
3598
- "command": "<%= config.bin %> <%= command.id %> --web",
3599
- "description": "Open HTTP Reference in browser"
3600
- }
3601
- ],
3602
- "flags": {
3603
- "json": {
3604
- "description": "Output JSON",
3605
- "name": "json",
3606
- "allowNo": false,
3607
- "type": "boolean"
3608
- },
3609
- "web": {
3610
- "char": "w",
3611
- "description": "Open HTTP Reference in web browser",
3612
- "name": "web",
3613
- "allowNo": false,
3614
- "type": "boolean"
3615
- }
3616
- },
3617
- "hasDynamicHelp": false,
3618
- "hiddenAliases": [],
3619
- "id": "openapi:list",
3620
- "pluginAlias": "@sanity/cli",
3621
- "pluginName": "@sanity/cli",
3622
- "pluginType": "core",
3623
- "strict": true,
3624
- "isESM": true,
3625
- "relativePath": [
3626
- "dist",
3627
- "commands",
3628
- "openapi",
3629
- "list.js"
3630
- ]
3631
- },
3632
3632
  "projects:create": {
3633
3633
  "aliases": [],
3634
3634
  "args": {
@@ -5116,5 +5116,5 @@
5116
5116
  ]
5117
5117
  }
5118
5118
  },
5119
- "version": "7.2.1"
5119
+ "version": "7.2.3"
5120
5120
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/cli",
3
- "version": "7.2.1",
3
+ "version": "7.2.3",
4
4
  "description": "Sanity CLI tool for managing Sanity projects and organizations",
5
5
  "keywords": [
6
6
  "cli",
@@ -55,18 +55,18 @@
55
55
  "@oclif/plugin-help": "^6.2.50",
56
56
  "@oclif/plugin-not-found": "^3.2.87",
57
57
  "@sanity/client": "^7.22.1",
58
- "@sanity/codegen": "^7.0.1",
58
+ "@sanity/codegen": "^7.0.2",
59
59
  "@sanity/descriptors": "^1.3.0",
60
60
  "@sanity/export": "^6.2.0",
61
61
  "@sanity/generate-help-url": "^4.0.0",
62
62
  "@sanity/id-utils": "^1.0.0",
63
- "@sanity/import": "^6.0.2",
64
- "@sanity/migrate": "^7.0.1",
63
+ "@sanity/import": "^6.0.3",
64
+ "@sanity/migrate": "^7.0.2",
65
65
  "@sanity/runtime-cli": "^16.0.0",
66
- "@sanity/schema": "^5.31.1",
66
+ "@sanity/schema": "^6.0.0",
67
67
  "@sanity/telemetry": "^1.1.0",
68
68
  "@sanity/template-validator": "^3.1.0",
69
- "@sanity/types": "^5.31.1",
69
+ "@sanity/types": "^6.0.0",
70
70
  "@sanity/worker-channels": "^2.0.0",
71
71
  "@vercel/frameworks": "3.21.1",
72
72
  "chokidar": "^5.0.0",
@@ -114,7 +114,7 @@
114
114
  "which": "^6.0.1",
115
115
  "yaml": "^2.9.0",
116
116
  "zod": "^4.4.3",
117
- "@sanity/cli-build": "^1.0.3",
117
+ "@sanity/cli-build": "^1.0.5",
118
118
  "@sanity/cli-core": "^2.0.1"
119
119
  },
120
120
  "devDependencies": {
@@ -128,7 +128,7 @@
128
128
  "@types/jsdom": "^28.0.3",
129
129
  "@types/lodash-es": "^4.17.12",
130
130
  "@types/minimist": "^1.2.5",
131
- "@types/node": "^20.19.41",
131
+ "@types/node": "^20.19.43",
132
132
  "@types/picomatch": "^4.0.3",
133
133
  "@types/react": "^19.2.16",
134
134
  "@types/react-dom": "^19.2.3",
@@ -139,18 +139,19 @@
139
139
  "@types/which": "^3.0.4",
140
140
  "@vitest/coverage-istanbul": "^4.1.8",
141
141
  "babel-plugin-react-compiler": "^1.0.0",
142
+ "es-module-lexer": "^2.1.0",
142
143
  "eslint": "^10.4.1",
143
144
  "jsdom": "^29.1.1",
144
145
  "nock": "^14.0.15",
145
146
  "oclif": "^4.23.10",
146
147
  "publint": "^0.3.21",
147
148
  "rimraf": "^6.0.1",
148
- "sanity": "^5.31.1",
149
+ "sanity": "^6.0.0",
149
150
  "typescript": "^5.9.3",
150
151
  "vitest": "^4.1.8",
152
+ "@repo/package.config": "0.0.1",
151
153
  "@repo/tsconfig": "3.70.0",
152
154
  "@sanity/cli-test": "1.0.1",
153
- "@repo/package.config": "0.0.1",
154
155
  "@sanity/eslint-config-cli": "1.1.2"
155
156
  },
156
157
  "peerDependencies": {