@sanity/cli 6.4.0 → 6.5.1

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.
Files changed (116) hide show
  1. package/README.md +201 -103
  2. package/dist/actions/build/buildApp.js +46 -17
  3. package/dist/actions/build/buildApp.js.map +1 -1
  4. package/dist/actions/build/buildStaticFiles.js +3 -1
  5. package/dist/actions/build/buildStaticFiles.js.map +1 -1
  6. package/dist/actions/build/buildStudio.js +80 -30
  7. package/dist/actions/build/buildStudio.js.map +1 -1
  8. package/dist/actions/build/buildVendorDependencies.js +10 -9
  9. package/dist/actions/build/buildVendorDependencies.js.map +1 -1
  10. package/dist/actions/build/checkRequiredDependencies.js +6 -9
  11. package/dist/actions/build/checkRequiredDependencies.js.map +1 -1
  12. package/dist/actions/build/checkStudioDependencyVersions.js +10 -11
  13. package/dist/actions/build/checkStudioDependencyVersions.js.map +1 -1
  14. package/dist/actions/build/getAutoUpdatesImportMap.js +9 -0
  15. package/dist/actions/build/getAutoUpdatesImportMap.js.map +1 -1
  16. package/dist/actions/build/getViteConfig.js +4 -2
  17. package/dist/actions/build/getViteConfig.js.map +1 -1
  18. package/dist/actions/build/renderDocument.js.map +1 -1
  19. package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.js +34 -14
  20. package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.js.map +1 -1
  21. package/dist/actions/build/renderDocumentWorker/getDocumentHtml.js +2 -2
  22. package/dist/actions/build/renderDocumentWorker/getDocumentHtml.js.map +1 -1
  23. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js +2 -2
  24. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js.map +1 -1
  25. package/dist/actions/codemods/reactIconsV3.js +3 -3
  26. package/dist/actions/codemods/reactIconsV3.js.map +1 -1
  27. package/dist/actions/deploy/deployApp.js +1 -1
  28. package/dist/actions/deploy/deployApp.js.map +1 -1
  29. package/dist/actions/deploy/deployStudio.js +1 -2
  30. package/dist/actions/deploy/deployStudio.js.map +1 -1
  31. package/dist/actions/dev/startStudioDevServer.js +3 -4
  32. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  33. package/dist/actions/doctor/types.js.map +1 -1
  34. package/dist/actions/graphql/resolveGraphQLApisFromWorkspaces.js.map +1 -1
  35. package/dist/actions/init/bootstrapTemplate.js.map +1 -1
  36. package/dist/actions/init/checkNextJsReactCompatibility.js +3 -3
  37. package/dist/actions/init/checkNextJsReactCompatibility.js.map +1 -1
  38. package/dist/actions/init/initAction.js +287 -0
  39. package/dist/actions/init/initAction.js.map +1 -0
  40. package/dist/actions/init/initApp.js +7 -16
  41. package/dist/actions/init/initApp.js.map +1 -1
  42. package/dist/actions/init/initError.js +10 -0
  43. package/dist/actions/init/initError.js.map +1 -0
  44. package/dist/actions/init/initHelpers.js +3 -12
  45. package/dist/actions/init/initHelpers.js.map +1 -1
  46. package/dist/actions/init/initNextJs.js +17 -20
  47. package/dist/actions/init/initNextJs.js.map +1 -1
  48. package/dist/actions/init/initStudio.js +11 -20
  49. package/dist/actions/init/initStudio.js.map +1 -1
  50. package/dist/actions/init/plan/getPlan.js +15 -0
  51. package/dist/actions/init/plan/getPlan.js.map +1 -0
  52. package/dist/actions/init/plan/verifyCoupon.js +35 -0
  53. package/dist/actions/init/plan/verifyCoupon.js.map +1 -0
  54. package/dist/actions/init/plan/verifyPlan.js +34 -0
  55. package/dist/actions/init/plan/verifyPlan.js.map +1 -0
  56. package/dist/actions/init/project/createProjectFromName.js +44 -0
  57. package/dist/actions/init/project/createProjectFromName.js.map +1 -0
  58. package/dist/actions/init/project/getOrCreateDataset.js +126 -0
  59. package/dist/actions/init/project/getOrCreateDataset.js.map +1 -0
  60. package/dist/actions/init/project/getOrCreateProject.js +128 -0
  61. package/dist/actions/init/project/getOrCreateProject.js.map +1 -0
  62. package/dist/actions/init/project/getProjectDetails.js +87 -0
  63. package/dist/actions/init/project/getProjectDetails.js.map +1 -0
  64. package/dist/actions/init/project/getProjectOutputPath.js +17 -0
  65. package/dist/actions/init/project/getProjectOutputPath.js.map +1 -0
  66. package/dist/actions/init/project/promptForAppTemplateSetup.js +112 -0
  67. package/dist/actions/init/project/promptForAppTemplateSetup.js.map +1 -0
  68. package/dist/actions/init/project/promptForProjectCreation.js +40 -0
  69. package/dist/actions/init/project/promptForProjectCreation.js.map +1 -0
  70. package/dist/actions/init/project/promptUserForNewOrganization.js +12 -0
  71. package/dist/actions/init/project/promptUserForNewOrganization.js.map +1 -0
  72. package/dist/actions/init/project/promptUserForOrganization.js +38 -0
  73. package/dist/actions/init/project/promptUserForOrganization.js.map +1 -0
  74. package/dist/actions/init/scaffoldTemplate.js +23 -29
  75. package/dist/actions/init/scaffoldTemplate.js.map +1 -1
  76. package/dist/actions/init/types.js +47 -1
  77. package/dist/actions/init/types.js.map +1 -1
  78. package/dist/actions/manifest/extractAppManifest.js +3 -2
  79. package/dist/actions/manifest/extractAppManifest.js.map +1 -1
  80. package/dist/actions/manifest/types.js +9 -1
  81. package/dist/actions/manifest/types.js.map +1 -1
  82. package/dist/actions/manifest/writeManifestFile.js +1 -2
  83. package/dist/actions/manifest/writeManifestFile.js.map +1 -1
  84. package/dist/actions/schema/uploadSchemaToLexicon.js +1 -2
  85. package/dist/actions/schema/uploadSchemaToLexicon.js.map +1 -1
  86. package/dist/actions/versions/buildPackageArray.js +3 -3
  87. package/dist/actions/versions/buildPackageArray.js.map +1 -1
  88. package/dist/actions/versions/findSanityModulesVersions.js +3 -3
  89. package/dist/actions/versions/findSanityModulesVersions.js.map +1 -1
  90. package/dist/commands/datasets/copy.js.map +1 -1
  91. package/dist/commands/init.js +11 -911
  92. package/dist/commands/init.js.map +1 -1
  93. package/dist/constants.js +8 -0
  94. package/dist/constants.js.map +1 -0
  95. package/dist/server/previewServer.js +1 -1
  96. package/dist/server/previewServer.js.map +1 -1
  97. package/dist/server/vite/plugin-sanity-build-entries.js +2 -1
  98. package/dist/server/vite/plugin-sanity-build-entries.js.map +1 -1
  99. package/dist/services/datasets.js.map +1 -1
  100. package/dist/services/userApplications.js.map +1 -1
  101. package/dist/telemetry/init.telemetry.js.map +1 -1
  102. package/dist/util/compareDependencyVersions.js +5 -6
  103. package/dist/util/compareDependencyVersions.js.map +1 -1
  104. package/dist/util/createExpiringConfig.js +1 -1
  105. package/dist/util/createExpiringConfig.js.map +1 -1
  106. package/dist/util/packageManager/installationInfo/analyzeIssues.js +7 -7
  107. package/dist/util/packageManager/installationInfo/analyzeIssues.js.map +1 -1
  108. package/dist/util/packageManager/installationInfo/types.js.map +1 -1
  109. package/dist/util/packageManager/packageManagerChoice.js +2 -2
  110. package/dist/util/packageManager/packageManagerChoice.js.map +1 -1
  111. package/dist/util/packageManager/preferredPm.js +106 -0
  112. package/dist/util/packageManager/preferredPm.js.map +1 -0
  113. package/oclif.manifest.json +526 -526
  114. package/package.json +27 -26
  115. package/dist/util/getLocalPackageVersion.js +0 -55
  116. package/dist/util/getLocalPackageVersion.js.map +0 -1
@@ -1,13 +1,12 @@
1
1
  import { rm } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { styleText } from 'node:util';
4
- import { getCliTelemetry, getTimer, isInteractive } from '@sanity/cli-core';
4
+ import { getCliTelemetry, getLocalPackageVersion, getTimer, isInteractive } from '@sanity/cli-core';
5
5
  import { confirm, logSymbols, spinner } from '@sanity/cli-core/ux';
6
- import semver from 'semver';
6
+ import { parse as semverParse } from 'semver';
7
7
  import { AppBuildTrace } from '../../telemetry/build.telemetry.js';
8
8
  import { getAppId } from '../../util/appId.js';
9
9
  import { compareDependencyVersions } from '../../util/compareDependencyVersions.js';
10
- import { getLocalPackageVersion } from '../../util/getLocalPackageVersion.js';
11
10
  import { formatModuleSizes, sortModulesBySize } from '../../util/moduleFormatUtils.js';
12
11
  import { warnAboutMissingAppId } from '../../util/warnAboutMissingAppId.js';
13
12
  import { buildDebug } from './buildDebug.js';
@@ -15,7 +14,7 @@ import { buildStaticFiles } from './buildStaticFiles.js';
15
14
  import { buildVendorDependencies } from './buildVendorDependencies.js';
16
15
  import { determineBasePath } from './determineBasePath.js';
17
16
  import { getAppEnvVars } from './getAppEnvVars.js';
18
- import { getAutoUpdatesImportMap } from './getAutoUpdatesImportMap.js';
17
+ import { getAutoUpdatesCssUrls, getAutoUpdatesImportMap } from './getAutoUpdatesImportMap.js';
19
18
  import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
20
19
  /**
21
20
  * Build the Sanity app.
@@ -23,12 +22,35 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
23
22
  * @internal
24
23
  */ export async function buildApp(options) {
25
24
  const { cliConfig, flags, outDir, output, workDir } = options;
25
+ await internalBuildApp({
26
+ appId: getAppId(cliConfig),
27
+ appTitle: cliConfig && 'app' in cliConfig ? cliConfig.app?.title : undefined,
28
+ autoUpdatesEnabled: options.autoUpdatesEnabled,
29
+ calledFromDeploy: options.calledFromDeploy,
30
+ determineBasePath: ()=>determineBasePath(cliConfig, 'app', output),
31
+ entry: cliConfig && 'app' in cliConfig ? cliConfig.app?.entry : undefined,
32
+ minify: flags.minify,
33
+ outDir,
34
+ output,
35
+ reactCompiler: cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,
36
+ schemaExtraction: cliConfig?.schemaExtraction,
37
+ sourceMap: Boolean(flags['source-maps']),
38
+ stats: flags.stats,
39
+ unattendedMode: flags.yes,
40
+ vite: cliConfig.vite,
41
+ workDir
42
+ });
43
+ }
44
+ /**
45
+ * Internal build app that avoids depending on flags for CLI config.
46
+ * @param options - options for the build
47
+ */ async function internalBuildApp(options) {
48
+ const { appId, determineBasePath, outDir, output, workDir } = options;
26
49
  let { autoUpdatesEnabled } = options;
27
- const unattendedMode = flags.yes;
50
+ const unattendedMode = options.unattendedMode;
28
51
  const timer = getTimer();
29
52
  const defaultOutputDir = path.resolve(path.join(workDir, 'dist'));
30
53
  const outputDir = path.resolve(outDir || defaultOutputDir);
31
- const appId = getAppId(cliConfig);
32
54
  const installedSdkVersion = await getLocalPackageVersion('@sanity/sdk-react', workDir);
33
55
  const installedSanityVersion = await getLocalPackageVersion('sanity', workDir);
34
56
  if (!installedSdkVersion) {
@@ -38,9 +60,10 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
38
60
  return;
39
61
  }
40
62
  let autoUpdatesImports = {};
63
+ let autoUpdatesCssUrls = [];
41
64
  if (autoUpdatesEnabled) {
42
65
  // Get the clean version without build metadata: https://semver.org/#spec-item-10
43
- const cleanSDKVersion = semver.parse(installedSdkVersion)?.version;
66
+ const cleanSDKVersion = semverParse(installedSdkVersion)?.version;
44
67
  if (!cleanSDKVersion) {
45
68
  output.error(`Failed to parse installed SDK version: ${installedSdkVersion}`, {
46
69
  exit: 1
@@ -48,7 +71,7 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
48
71
  return;
49
72
  }
50
73
  // Sanity might not be installed, but if it is, we want to auto update it.
51
- const cleanSanityVersion = semver.parse(installedSanityVersion)?.version;
74
+ const cleanSanityVersion = semverParse(installedSanityVersion)?.version;
52
75
  const autoUpdatedPackages = [
53
76
  {
54
77
  name: '@sanity/sdk',
@@ -60,6 +83,7 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
60
83
  },
61
84
  ...cleanSanityVersion ? [
62
85
  {
86
+ cssFile: 'index.css',
63
87
  name: 'sanity',
64
88
  version: cleanSanityVersion
65
89
  }
@@ -68,6 +92,9 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
68
92
  autoUpdatesImports = getAutoUpdatesImportMap(autoUpdatedPackages, {
69
93
  appId
70
94
  });
95
+ autoUpdatesCssUrls = getAutoUpdatesCssUrls(autoUpdatedPackages, {
96
+ appId
97
+ });
71
98
  output.log(`${logSymbols.info} Building with auto-updates enabled`);
72
99
  // Warn if auto updates enabled but no appId configured.
73
100
  // Skip when called from deploy, since deploy handles appId itself
@@ -89,6 +116,7 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
89
116
  unresolvedPrerelease
90
117
  });
91
118
  autoUpdatesImports = {};
119
+ autoUpdatesCssUrls = [];
92
120
  autoUpdatesEnabled = false;
93
121
  }
94
122
  if (mismatched.length > 0 && autoUpdatesEnabled) {
@@ -124,8 +152,7 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
124
152
  message: `Do you want to delete the existing directory (${outputDir}) first?`
125
153
  });
126
154
  }
127
- // Determine base path for built app
128
- const basePath = determineBasePath(cliConfig, 'app', output);
155
+ const basePath = determineBasePath();
129
156
  let spin;
130
157
  if (shouldClean) {
131
158
  timer.start('cleanOutputFolder');
@@ -158,17 +185,19 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
158
185
  try {
159
186
  timer.start('bundleStudio');
160
187
  const bundle = await buildStaticFiles({
161
- appTitle: cliConfig && 'app' in cliConfig ? cliConfig.app?.title : undefined,
188
+ appTitle: options.appTitle,
189
+ autoUpdatesCssUrls: autoUpdatesCssUrls.length > 0 ? autoUpdatesCssUrls : undefined,
162
190
  basePath,
163
191
  cwd: workDir,
164
- entry: cliConfig && 'app' in cliConfig ? cliConfig.app?.entry : undefined,
192
+ entry: options.entry,
165
193
  importMap,
166
194
  isApp: true,
167
- minify: Boolean(flags.minify),
195
+ minify: options.minify,
168
196
  outputDir,
169
- reactCompiler: cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,
170
- sourceMap: Boolean(flags['source-maps']),
171
- vite: cliConfig && 'vite' in cliConfig ? cliConfig.vite : undefined
197
+ reactCompiler: options.reactCompiler,
198
+ schemaExtraction: options.schemaExtraction,
199
+ sourceMap: options.sourceMap,
200
+ vite: options.vite
172
201
  });
173
202
  trace.log({
174
203
  outputSize: bundle.chunks.flatMap((chunk)=>chunk.modules.flatMap((mod)=>mod.renderedLength)).reduce((sum, n)=>sum + n, 0)
@@ -176,7 +205,7 @@ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
176
205
  const buildDuration = timer.end('bundleStudio');
177
206
  spin.text = `Build Sanity application (${buildDuration.toFixed(0)}ms)`;
178
207
  spin.succeed();
179
- if (flags.stats) {
208
+ if (options.stats) {
180
209
  output.log('\nLargest module files:');
181
210
  output.log(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15)));
182
211
  }
@@ -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 {getCliTelemetry, getTimer, isInteractive} from '@sanity/cli-core'\nimport {confirm, logSymbols, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\nimport semver from 'semver'\n\nimport {AppBuildTrace} from '../../telemetry/build.telemetry.js'\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.js'\nimport {getLocalPackageVersion} from '../../util/getLocalPackageVersion.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {buildDebug} from './buildDebug.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {buildVendorDependencies} from './buildVendorDependencies.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {getAppEnvVars} from './getAppEnvVars.js'\nimport {getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {type BuildOptions} from './types.js'\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 let {autoUpdatesEnabled} = options\n const unattendedMode = flags.yes\n const timer = getTimer()\n\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n const appId = getAppId(cliConfig)\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\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSDKVersion = semver.parse(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 = semver.parse(installedSanityVersion)?.version\n\n const autoUpdatedPackages = [\n {name: '@sanity/sdk', version: cleanSDKVersion},\n {name: '@sanity/sdk-react', version: cleanSDKVersion},\n ...(cleanSanityVersion ? [{name: 'sanity' as const, version: cleanSanityVersion}] : []),\n ]\n autoUpdatesImports = getAutoUpdatesImportMap(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 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 = getAppEnvVars()\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 // Determine base path for built app\n const basePath = determineBasePath(cliConfig, 'app', output)\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: cliConfig && 'app' in cliConfig ? cliConfig.app?.title : undefined,\n basePath,\n cwd: workDir,\n entry: cliConfig && 'app' in cliConfig ? cliConfig.app?.entry : undefined,\n importMap,\n isApp: true,\n minify: Boolean(flags.minify),\n outputDir,\n reactCompiler:\n cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,\n sourceMap: Boolean(flags['source-maps']),\n vite: cliConfig && 'vite' in cliConfig ? cliConfig.vite : undefined,\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 (flags.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","getCliTelemetry","getTimer","isInteractive","confirm","logSymbols","spinner","semver","AppBuildTrace","getAppId","compareDependencyVersions","getLocalPackageVersion","formatModuleSizes","sortModulesBySize","warnAboutMissingAppId","buildDebug","buildStaticFiles","buildVendorDependencies","determineBasePath","getAppEnvVars","getAutoUpdatesImportMap","handlePrereleaseVersions","buildApp","options","cliConfig","flags","outDir","output","workDir","autoUpdatesEnabled","unattendedMode","yes","timer","defaultOutputDir","resolve","join","outputDir","appId","installedSdkVersion","installedSanityVersion","error","exit","autoUpdatesImports","cleanSDKVersion","parse","version","cleanSanityVersion","autoUpdatedPackages","name","log","info","calledFromDeploy","appType","mismatched","unresolvedPrerelease","length","versionMismatchWarning","map","mod","pkg","installed","remote","shouldContinue","default","message","warn","envVarKeys","key","shouldClean","basePath","spin","start","force","recursive","cleanDuration","end","text","toFixed","succeed","trace","importMap","imports","cwd","isApp","bundle","appTitle","app","title","undefined","entry","minify","Boolean","reactCompiler","sourceMap","vite","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","stats","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 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 {AppBuildTrace} from '../../telemetry/build.telemetry.js'\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 {buildDebug} from './buildDebug.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {buildVendorDependencies} from './buildVendorDependencies.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {getAppEnvVars} from './getAppEnvVars.js'\nimport {getAutoUpdatesCssUrls, getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.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 const {appId, determineBasePath, outDir, output, workDir} = options\n let {autoUpdatesEnabled} = options\n const unattendedMode = options.unattendedMode\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 = getAppEnvVars()\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","getCliTelemetry","getLocalPackageVersion","getTimer","isInteractive","confirm","logSymbols","spinner","parse","semverParse","AppBuildTrace","getAppId","compareDependencyVersions","formatModuleSizes","sortModulesBySize","warnAboutMissingAppId","buildDebug","buildStaticFiles","buildVendorDependencies","determineBasePath","getAppEnvVars","getAutoUpdatesCssUrls","getAutoUpdatesImportMap","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","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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"}
@@ -10,7 +10,7 @@ import { writeSanityRuntime } from './writeSanityRuntime.js';
10
10
  *
11
11
  * @internal
12
12
  */ export async function buildStaticFiles(options) {
13
- const { appTitle, basePath, cwd, entry, importMap, isApp, minify = true, outputDir, reactCompiler, sourceMap = false, vite: extendViteConfig } = options;
13
+ const { appTitle, autoUpdatesCssUrls, basePath, cwd, entry, importMap, isApp, minify = true, outputDir, reactCompiler, schemaExtraction, sourceMap = false, vite: extendViteConfig } = options;
14
14
  buildDebug('Writing Sanity runtime files');
15
15
  await writeSanityRuntime({
16
16
  appTitle,
@@ -24,6 +24,7 @@ import { writeSanityRuntime } from './writeSanityRuntime.js';
24
24
  buildDebug('Resolving vite config');
25
25
  const mode = 'production';
26
26
  let viteConfig = await getViteConfig({
27
+ autoUpdatesCssUrls,
27
28
  basePath,
28
29
  cwd,
29
30
  importMap,
@@ -32,6 +33,7 @@ import { writeSanityRuntime } from './writeSanityRuntime.js';
32
33
  mode,
33
34
  outputDir,
34
35
  reactCompiler,
36
+ schemaExtraction,
35
37
  sourceMap
36
38
  });
37
39
  if (extendViteConfig) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/build/buildStaticFiles.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {type UserViteConfig} from '@sanity/cli-core'\nimport {type PluginOptions as ReactCompilerConfig} from 'babel-plugin-react-compiler'\nimport {build} from 'vite'\n\nimport {copyDir} from '../../util/copyDir.js'\nimport {buildDebug} from './buildDebug.js'\nimport {extendViteConfigWithUserConfig, finalizeViteConfig, getViteConfig} from './getViteConfig.js'\nimport {writeFavicons} from './writeFavicons.js'\nimport {writeSanityRuntime} from './writeSanityRuntime.js'\n\nexport interface ChunkModule {\n name: string\n originalLength: number\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 entry?: string\n importMap?: {imports?: Record<string, string>}\n isApp?: boolean\n minify?: boolean\n profile?: boolean\n reactCompiler?: ReactCompilerConfig\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 basePath,\n cwd,\n entry,\n importMap,\n isApp,\n minify = true,\n outputDir,\n reactCompiler,\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 buildDebug('Resolving vite config')\n const mode = 'production'\n let viteConfig = await getViteConfig({\n basePath,\n cwd,\n importMap,\n isApp,\n minify,\n mode,\n outputDir,\n reactCompiler,\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 originalLength: chunkModule.originalLength,\n renderedLength: chunkModule.renderedLength,\n }\n }),\n name: chunk.name,\n })\n }\n\n return {chunks: stats}\n}\n"],"names":["path","build","copyDir","buildDebug","extendViteConfigWithUserConfig","finalizeViteConfig","getViteConfig","writeFavicons","writeSanityRuntime","buildStaticFiles","options","appTitle","basePath","cwd","entry","importMap","isApp","minify","outputDir","reactCompiler","sourceMap","vite","extendViteConfig","reactStrictMode","watch","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","originalLength","renderedLength"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAI5B,SAAQC,KAAK,QAAO,OAAM;AAE1B,SAAQC,OAAO,QAAO,wBAAuB;AAC7C,SAAQC,UAAU,QAAO,kBAAiB;AAC1C,SAAQC,8BAA8B,EAAEC,kBAAkB,EAAEC,aAAa,QAAO,qBAAoB;AACpG,SAAQC,aAAa,QAAO,qBAAoB;AAChD,SAAQC,kBAAkB,QAAO,0BAAyB;AA6B1D;;;;CAIC,GACD,OAAO,eAAeC,iBACpBC,OAA2B;IAE3B,MAAM,EACJC,QAAQ,EACRC,QAAQ,EACRC,GAAG,EACHC,KAAK,EACLC,SAAS,EACTC,KAAK,EACLC,SAAS,IAAI,EACbC,SAAS,EACTC,aAAa,EACbC,YAAY,KAAK,EACjBC,MAAMC,gBAAgB,EACvB,GAAGZ;IAEJP,WAAW;IACX,MAAMK,mBAAmB;QACvBG;QACAC;QACAC;QACAC;QACAE;QACAO,iBAAiB;QACjBC,OAAO;IACT;IAEArB,WAAW;IACX,MAAMsB,OAAO;IACb,IAAIC,aAAa,MAAMpB,cAAc;QACnCM;QACAC;QACAE;QACAC;QACAC;QACAQ;QACAP;QACAC;QACAC;IACF;IAEA,IAAIE,kBAAkB;QACpBI,aAAa,MAAMtB,+BACjB;YAACuB,SAAS;YAASF;QAAI,GACvBC,YACAJ;QAEFI,aAAa,MAAMrB,mBAAmBqB;IACxC;IAEA,MAAME,WAAW5B,KAAK6B,IAAI,CAAChB,KAAK;IAChC,oDAAoD;IACpDV,WAAW,CAAC,0BAA0B,EAAEyB,SAAS,cAAc,CAAC;IAChE,MAAME,aAAa9B,KAAK6B,IAAI,CAACX,WAAW;IACxC,MAAMhB,QAAQ0B,UAAUE;IAExB,4EAA4E;IAC5E3B,WAAW;IACX,MAAM4B,kBAAkB,GAAGnB,SAASoB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAChE,MAAMzB,cAAcwB,iBAAiBD;IAErC3B,WAAW;IACX,MAAM8B,SAAS,MAAMhC,MAAMyB;IAC3BvB,WAAW;IAEX,iFAAiF;IACjF,IAAI+B,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,MAAMpD,KAAKqD,UAAU,CAACL,YAAYhD,KAAKsD,QAAQ,CAACzC,KAAKmC,YAAYA;oBACjEO,gBAAgBR,YAAYQ,cAAc;oBAC1CC,gBAAgBT,YAAYS,cAAc;gBAC5C;YACF;YACAJ,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 {type CliConfig, type UserViteConfig} from '@sanity/cli-core'\nimport {type PluginOptions as ReactCompilerConfig} from 'babel-plugin-react-compiler'\nimport {build} from 'vite'\n\nimport {copyDir} from '../../util/copyDir.js'\nimport {buildDebug} from './buildDebug.js'\nimport {extendViteConfigWithUserConfig, finalizeViteConfig, getViteConfig} from './getViteConfig.js'\nimport {writeFavicons} from './writeFavicons.js'\nimport {writeSanityRuntime} from './writeSanityRuntime.js'\n\nexport interface ChunkModule {\n name: string\n originalLength: number\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 buildDebug('Resolving vite config')\n const mode = 'production'\n let viteConfig = await getViteConfig({\n autoUpdatesCssUrls,\n basePath,\n cwd,\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 originalLength: chunkModule.originalLength,\n renderedLength: chunkModule.renderedLength,\n }\n }),\n name: chunk.name,\n })\n }\n\n return {chunks: stats}\n}\n"],"names":["path","build","copyDir","buildDebug","extendViteConfigWithUserConfig","finalizeViteConfig","getViteConfig","writeFavicons","writeSanityRuntime","buildStaticFiles","options","appTitle","autoUpdatesCssUrls","basePath","cwd","entry","importMap","isApp","minify","outputDir","reactCompiler","schemaExtraction","sourceMap","vite","extendViteConfig","reactStrictMode","watch","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","originalLength","renderedLength"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAI5B,SAAQC,KAAK,QAAO,OAAM;AAE1B,SAAQC,OAAO,QAAO,wBAAuB;AAC7C,SAAQC,UAAU,QAAO,kBAAiB;AAC1C,SAAQC,8BAA8B,EAAEC,kBAAkB,EAAEC,aAAa,QAAO,qBAAoB;AACpG,SAAQC,aAAa,QAAO,qBAAoB;AAChD,SAAQC,kBAAkB,QAAO,0BAAyB;AA+B1D;;;;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;IAEJP,WAAW;IACX,MAAMK,mBAAmB;QACvBG;QACAE;QACAC;QACAC;QACAE;QACAQ,iBAAiB;QACjBC,OAAO;IACT;IAEAvB,WAAW;IACX,MAAMwB,OAAO;IACb,IAAIC,aAAa,MAAMtB,cAAc;QACnCM;QACAC;QACAC;QACAE;QACAC;QACAC;QACAS;QACAR;QACAC;QACAC;QACAC;IACF;IAEA,IAAIE,kBAAkB;QACpBI,aAAa,MAAMxB,+BACjB;YAACyB,SAAS;YAASF;QAAI,GACvBC,YACAJ;QAEFI,aAAa,MAAMvB,mBAAmBuB;IACxC;IAEA,MAAME,WAAW9B,KAAK+B,IAAI,CAACjB,KAAK;IAChC,oDAAoD;IACpDX,WAAW,CAAC,0BAA0B,EAAE2B,SAAS,cAAc,CAAC;IAChE,MAAME,aAAahC,KAAK+B,IAAI,CAACZ,WAAW;IACxC,MAAMjB,QAAQ4B,UAAUE;IAExB,4EAA4E;IAC5E7B,WAAW;IACX,MAAM8B,kBAAkB,GAAGpB,SAASqB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAChE,MAAM3B,cAAc0B,iBAAiBD;IAErC7B,WAAW;IACX,MAAMgC,SAAS,MAAMlC,MAAM2B;IAC3BzB,WAAW;IAEX,iFAAiF;IACjF,IAAIiC,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,MAAMtD,KAAKuD,UAAU,CAACL,YAAYlD,KAAKwD,QAAQ,CAAC1C,KAAKoC,YAAYA;oBACjEO,gBAAgBR,YAAYQ,cAAc;oBAC1CC,gBAAgBT,YAAYS,cAAc;gBAC5C;YACF;YACAJ,MAAMd,MAAMc,IAAI;QAClB;IACF;IAEA,OAAO;QAAChB,QAAQC;IAAK;AACvB"}
@@ -1,12 +1,13 @@
1
1
  import { rm } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { styleText } from 'node:util';
4
- import { getCliTelemetry, getTimer, isInteractive } from '@sanity/cli-core';
4
+ import { getCliTelemetry, getLocalPackageVersion, getTimer, isInteractive } from '@sanity/cli-core';
5
5
  import { confirm, logSymbols, select, spinner } from '@sanity/cli-core/ux';
6
- import semver from 'semver';
6
+ import { parse as semverParse } from 'semver';
7
7
  import { StudioBuildTrace } from '../../telemetry/build.telemetry.js';
8
8
  import { getAppId } from '../../util/appId.js';
9
9
  import { compareDependencyVersions } from '../../util/compareDependencyVersions.js';
10
+ import { determineIsApp } from '../../util/determineIsApp.js';
10
11
  import { formatModuleSizes, sortModulesBySize } from '../../util/moduleFormatUtils.js';
11
12
  import { getPackageManagerChoice } from '../../util/packageManager/packageManagerChoice.js';
12
13
  import { upgradePackages } from '../../util/packageManager/upgradePackages.js';
@@ -17,7 +18,7 @@ import { buildVendorDependencies } from './buildVendorDependencies.js';
17
18
  import { checkRequiredDependencies } from './checkRequiredDependencies.js';
18
19
  import { checkStudioDependencyVersions } from './checkStudioDependencyVersions.js';
19
20
  import { determineBasePath } from './determineBasePath.js';
20
- import { getAutoUpdatesImportMap } from './getAutoUpdatesImportMap.js';
21
+ import { getAutoUpdatesCssUrls, getAutoUpdatesImportMap } from './getAutoUpdatesImportMap.js';
21
22
  import { getStudioEnvVars } from './getStudioEnvVars.js';
22
23
  import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
23
24
  import { shouldAutoUpdate } from './shouldAutoUpdate.js';
@@ -26,34 +27,69 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
26
27
  *
27
28
  * @internal
28
29
  */ export async function buildStudio(options) {
30
+ const { calledFromDeploy, cliConfig, flags, outDir, output, workDir } = options;
31
+ const autoUpdatesEnabled = options.calledFromDeploy ? options.autoUpdatesEnabled : shouldAutoUpdate({
32
+ cliConfig,
33
+ flags,
34
+ output
35
+ });
36
+ const upgradePkgs = async (options)=>{
37
+ await upgradePackages({
38
+ packageManager: (await getPackageManagerChoice(workDir, {
39
+ interactive: false
40
+ })).chosen,
41
+ packages: options.packages
42
+ }, {
43
+ output,
44
+ workDir
45
+ });
46
+ };
47
+ await internalBuildStudio({
48
+ appId: getAppId(cliConfig),
49
+ autoUpdatesEnabled,
50
+ calledFromDeploy,
51
+ determineBasePath: ()=>determineBasePath(cliConfig, 'studio', output),
52
+ isApp: determineIsApp(cliConfig),
53
+ minify: Boolean(flags.minify),
54
+ outDir,
55
+ output,
56
+ projectId: cliConfig?.api?.projectId,
57
+ reactCompiler: cliConfig.reactCompiler,
58
+ schemaExtraction: cliConfig.schemaExtraction,
59
+ sourceMap: Boolean(flags['source-maps']),
60
+ stats: flags.stats,
61
+ unattendedMode: Boolean(flags.yes),
62
+ upgradePackages: upgradePkgs,
63
+ vite: cliConfig.vite,
64
+ workDir
65
+ });
66
+ }
67
+ /**
68
+ * Internal build studio that avoids depending on flags for CLI config.
69
+ * @param options - options for the build
70
+ */ async function internalBuildStudio(options) {
29
71
  const timer = getTimer();
30
- const { cliConfig, flags, outDir, output, workDir } = options;
31
- const unattendedMode = Boolean(flags.yes);
72
+ const { appId, determineBasePath, isApp, minify, outDir, output, projectId, reactCompiler, schemaExtraction, sourceMap, stats, unattendedMode, upgradePackages, vite, workDir } = options;
73
+ let autoUpdatesEnabled = options.autoUpdatesEnabled;
32
74
  const defaultOutputDir = path.resolve(path.join(workDir, 'dist'));
33
75
  const outputDir = path.resolve(outDir || defaultOutputDir);
34
76
  await checkStudioDependencyVersions(workDir, output);
35
77
  // If the check resulted in a dependency install, the CLI command will be re-run,
36
78
  // thus we want to exit early
37
79
  const { installedSanityVersion } = await checkRequiredDependencies({
38
- cliConfig,
80
+ isApp,
39
81
  output,
40
82
  workDir
41
83
  });
42
- let autoUpdatesEnabled = options.calledFromDeploy ? options.autoUpdatesEnabled : shouldAutoUpdate({
43
- cliConfig,
44
- flags,
45
- output
46
- });
47
84
  let autoUpdatesImports = {};
85
+ let autoUpdatesCssUrls = [];
48
86
  if (autoUpdatesEnabled) {
49
87
  // Get the clean version without build metadata: https://semver.org/#spec-item-10
50
- const cleanSanityVersion = semver.parse(installedSanityVersion)?.version;
88
+ const cleanSanityVersion = semverParse(installedSanityVersion)?.version;
51
89
  if (!cleanSanityVersion) {
52
90
  throw new Error(`Failed to parse installed Sanity version: ${installedSanityVersion}`);
53
91
  }
54
92
  output.log(`${logSymbols.info} Building with auto-updates enabled`);
55
- const projectId = cliConfig?.api?.projectId;
56
- const appId = getAppId(cliConfig);
57
93
  // Warn if auto updates enabled but no appId configured.
58
94
  // Skip when called from deploy, since deploy handles appId itself
59
95
  // (prompts the user and tells them to add it to config).
@@ -64,19 +100,33 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
64
100
  projectId
65
101
  });
66
102
  }
103
+ const installedVisionVersion = await getLocalPackageVersion('@sanity/vision', workDir);
104
+ const cleanVisionVersion = installedVisionVersion ? semverParse(installedVisionVersion)?.version : undefined;
67
105
  const sanityDependencies = [
68
106
  {
107
+ cssFile: 'index.css',
69
108
  name: 'sanity',
70
109
  version: cleanSanityVersion
71
110
  },
72
- {
73
- name: '@sanity/vision',
74
- version: cleanSanityVersion
75
- }
111
+ ...cleanVisionVersion ? [
112
+ {
113
+ cssFile: 'index.css',
114
+ name: '@sanity/vision',
115
+ version: cleanVisionVersion
116
+ }
117
+ ] : [
118
+ {
119
+ name: '@sanity/vision',
120
+ version: cleanSanityVersion
121
+ }
122
+ ]
76
123
  ];
77
124
  autoUpdatesImports = getAutoUpdatesImportMap(sanityDependencies, {
78
125
  appId
79
126
  });
127
+ autoUpdatesCssUrls = getAutoUpdatesCssUrls(sanityDependencies, {
128
+ appId
129
+ });
80
130
  // Check the versions
81
131
  const { mismatched, unresolvedPrerelease } = await compareDependencyVersions(sanityDependencies, workDir, {
82
132
  appId
@@ -88,6 +138,7 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
88
138
  unresolvedPrerelease
89
139
  });
90
140
  autoUpdatesImports = {};
141
+ autoUpdatesCssUrls = [];
91
142
  autoUpdatesEnabled = false;
92
143
  }
93
144
  if (mismatched.length > 0 && autoUpdatesEnabled) {
@@ -124,16 +175,10 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
124
175
  }
125
176
  if (choice === 'upgrade' || choice === 'upgrade-and-proceed') {
126
177
  await upgradePackages({
127
- packageManager: (await getPackageManagerChoice(workDir, {
128
- interactive: false
129
- })).chosen,
130
178
  packages: mismatched.map((res)=>[
131
179
  res.pkg,
132
180
  res.remote
133
181
  ])
134
- }, {
135
- output,
136
- workDir
137
182
  });
138
183
  if (choice === 'upgrade') {
139
184
  return;
@@ -161,7 +206,10 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
161
206
  });
162
207
  }
163
208
  // Determine base path for built studio
164
- const basePath = determineBasePath(cliConfig, 'studio', output);
209
+ const basePath = determineBasePath();
210
+ if (schemaExtraction?.enabled) {
211
+ output.log(`${logSymbols.info} Building with schema extraction enabled`);
212
+ }
165
213
  let spin;
166
214
  if (shouldClean) {
167
215
  timer.start('cleanOutputFolder');
@@ -194,14 +242,16 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
194
242
  try {
195
243
  timer.start('bundleStudio');
196
244
  const bundle = await buildStaticFiles({
245
+ autoUpdatesCssUrls: autoUpdatesCssUrls.length > 0 ? autoUpdatesCssUrls : undefined,
197
246
  basePath,
198
247
  cwd: workDir,
199
248
  importMap,
200
- minify: Boolean(flags.minify),
249
+ minify,
201
250
  outputDir,
202
- reactCompiler: cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,
203
- sourceMap: Boolean(flags['source-maps']),
204
- vite: cliConfig && 'vite' in cliConfig ? cliConfig.vite : undefined
251
+ reactCompiler,
252
+ schemaExtraction,
253
+ sourceMap,
254
+ vite
205
255
  });
206
256
  trace.log({
207
257
  outputSize: bundle.chunks.flatMap((chunk)=>chunk.modules.flatMap((mod)=>mod.renderedLength)).reduce((sum, n)=>sum + n, 0)
@@ -210,7 +260,7 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
210
260
  spin.text = `Build Sanity Studio (${buildDuration.toFixed(0)}ms)`;
211
261
  spin.succeed();
212
262
  trace.complete();
213
- if (flags.stats) {
263
+ if (stats) {
214
264
  output.log('\nLargest module files:');
215
265
  output.log(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15)));
216
266
  }
@@ -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 {getCliTelemetry, getTimer, isInteractive} from '@sanity/cli-core'\nimport {confirm, logSymbols, select, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\nimport semver from 'semver'\n\nimport {StudioBuildTrace} from '../../telemetry/build.telemetry.js'\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.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 {buildDebug} from './buildDebug.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {buildVendorDependencies} from './buildVendorDependencies.js'\nimport {checkRequiredDependencies} from './checkRequiredDependencies.js'\nimport {checkStudioDependencyVersions} from './checkStudioDependencyVersions.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {getStudioEnvVars} from './getStudioEnvVars.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {shouldAutoUpdate} from './shouldAutoUpdate.js'\nimport {type BuildOptions} from './types.js'\n\n/**\n * Build the Sanity Studio.\n *\n * @internal\n */\nexport async function buildStudio(options: BuildOptions): Promise<void> {\n const timer = getTimer()\n const {cliConfig, flags, outDir, output, workDir} = options\n\n const unattendedMode = Boolean(flags.yes)\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 cliConfig,\n output,\n workDir,\n })\n\n let autoUpdatesEnabled = options.calledFromDeploy\n ? options.autoUpdatesEnabled\n : shouldAutoUpdate({cliConfig, flags, output})\n\n let autoUpdatesImports = {}\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSanityVersion = semver.parse(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 const projectId = cliConfig?.api?.projectId\n const appId = getAppId(cliConfig)\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 sanityDependencies = [\n {name: 'sanity', version: cleanSanityVersion},\n {name: '@sanity/vision', version: cleanSanityVersion},\n ]\n autoUpdatesImports = getAutoUpdatesImportMap(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 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 {\n packageManager: (await getPackageManagerChoice(workDir, {interactive: false})).chosen,\n packages: mismatched.map((res) => [res.pkg, res.remote]),\n },\n {output, workDir},\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 = getStudioEnvVars()\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(cliConfig, 'studio', output)\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 basePath,\n cwd: workDir,\n importMap,\n minify: Boolean(flags.minify),\n outputDir,\n reactCompiler:\n cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,\n sourceMap: Boolean(flags['source-maps']),\n vite: cliConfig && 'vite' in cliConfig ? cliConfig.vite : undefined,\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 (flags.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","getCliTelemetry","getTimer","isInteractive","confirm","logSymbols","select","spinner","semver","StudioBuildTrace","getAppId","compareDependencyVersions","formatModuleSizes","sortModulesBySize","getPackageManagerChoice","upgradePackages","warnAboutMissingAppId","buildDebug","buildStaticFiles","buildVendorDependencies","checkRequiredDependencies","checkStudioDependencyVersions","determineBasePath","getAutoUpdatesImportMap","getStudioEnvVars","handlePrereleaseVersions","shouldAutoUpdate","buildStudio","options","timer","cliConfig","flags","outDir","output","workDir","unattendedMode","Boolean","yes","defaultOutputDir","resolve","join","outputDir","installedSanityVersion","autoUpdatesEnabled","calledFromDeploy","autoUpdatesImports","cleanSanityVersion","parse","version","Error","log","info","projectId","api","appId","appType","sanityDependencies","name","mismatched","unresolvedPrerelease","length","versionMismatchWarning","map","mod","pkg","installed","remote","choice","choices","value","default","message","warning","error","exit","packageManager","interactive","chosen","packages","res","warn","envVarKeys","key","shouldClean","basePath","spin","start","force","recursive","cleanDuration","end","text","toFixed","succeed","trace","importMap","imports","cwd","isApp","bundle","minify","reactCompiler","undefined","sourceMap","vite","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","complete","stats","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 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 {StudioBuildTrace} from '../../telemetry/build.telemetry.js'\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 {buildDebug} from './buildDebug.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {buildVendorDependencies} from './buildVendorDependencies.js'\nimport {checkRequiredDependencies} from './checkRequiredDependencies.js'\nimport {checkStudioDependencyVersions} from './checkStudioDependencyVersions.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {getAutoUpdatesCssUrls, getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {getStudioEnvVars} from './getStudioEnvVars.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {shouldAutoUpdate} from './shouldAutoUpdate.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 autoUpdatesEnabled = options.calledFromDeploy\n ? options.autoUpdatesEnabled\n : shouldAutoUpdate({cliConfig, flags, output})\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,\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 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 let autoUpdatesEnabled = options.autoUpdatesEnabled\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 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 = getStudioEnvVars()\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","getCliTelemetry","getLocalPackageVersion","getTimer","isInteractive","confirm","logSymbols","select","spinner","parse","semverParse","StudioBuildTrace","getAppId","compareDependencyVersions","determineIsApp","formatModuleSizes","sortModulesBySize","getPackageManagerChoice","upgradePackages","warnAboutMissingAppId","buildDebug","buildStaticFiles","buildVendorDependencies","checkRequiredDependencies","checkStudioDependencyVersions","determineBasePath","getAutoUpdatesCssUrls","getAutoUpdatesImportMap","getStudioEnvVars","handlePrereleaseVersions","shouldAutoUpdate","buildStudio","options","calledFromDeploy","cliConfig","flags","outDir","output","workDir","autoUpdatesEnabled","upgradePkgs","packageManager","interactive","chosen","packages","internalBuildStudio","appId","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","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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"}