@sanity/cli-build 6.3.1 → 6.4.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.
@@ -1,5 +1,6 @@
1
1
  import path from 'node:path';
2
- import { build, createBuilder } from 'vite';
2
+ import { buildFederatedApp } from '@sanity/workbench-cli/build';
3
+ import { build } from 'vite';
3
4
  import { copyDir } from '../../util/copyDir.js';
4
5
  import { buildDebug } from './buildDebug.js';
5
6
  import { getAppEnvironmentVariables, getStudioEnvironmentVariables } from './getEnvironmentVariables.js';
@@ -86,8 +87,10 @@ import { resolveEntries, writeSanityRuntime } from './writeSanityRuntime.js';
86
87
  await writeFavicons(faviconBasePath, staticPath);
87
88
  }
88
89
  buildDebug('Bundling federation environment');
89
- const builder = await createBuilder(viteConfig);
90
- await builder.buildApp();
90
+ await buildFederatedApp(viteConfig, {
91
+ // Custom Vite hooks can resolve different dependencies in the two environments.
92
+ reuseStandaloneBuild: emitSpa && !extendViteConfig
93
+ });
91
94
  buildDebug('Bundling complete');
92
95
  // TODO: add stats here
93
96
  return {
@@ -1 +1 @@
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/types'\nimport {type WorkbenchExposes} from '@sanity/workbench-cli/build'\nimport {build, createBuilder} from 'vite'\n\nimport {copyDir} from '../../util/copyDir.js'\nimport {type AutoUpdatesBuildConfig} from './autoUpdates.js'\nimport {buildDebug} from './buildDebug.js'\nimport {\n getAppEnvironmentVariables,\n getStudioEnvironmentVariables,\n} from './getEnvironmentVariables.js'\nimport {extendViteConfigWithUserConfig, finalizeViteConfig, getViteConfig} from './getViteConfig.js'\nimport {writeFavicons} from './writeFavicons.js'\nimport {resolveEntries, writeSanityRuntime} from './writeSanityRuntime.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 exposes?: WorkbenchExposes\n isApp?: boolean\n /** Blueprints build (via `@sanity/runtime-cli`) — emit the resource-bindings module. */\n isBlueprints?: boolean\n /** Workbench app (opted in via `defineApplication`) — drives the federation build. */\n isWorkbenchApp?: boolean\n minify?: boolean\n profile?: boolean\n reactCompiler?: CliConfig['reactCompiler']\n schemaExtraction?: CliConfig['schemaExtraction']\n sourceMap?: boolean\n vite?: UserViteConfig\n /** The workbench app's bus identity (`__SANITY_APP_ID__`). */\n workbenchAppId?: string\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 exposes,\n isApp,\n isBlueprints,\n isWorkbenchApp,\n minify = true,\n outputDir,\n reactCompiler,\n schemaExtraction,\n sourceMap = false,\n vite: extendViteConfig,\n workbenchAppId,\n } = options\n\n const mode = 'production'\n\n /* Federation builds only produce the federation environment\n * (remote-entry, mf-manifest) — skip client-specific steps like\n * runtime generation, static file copies, and favicons.\n */\n if (isWorkbenchApp) {\n // Every federated app and studio also serves itself standalone: emit an SPA\n // (index.html + bootstrap + favicons) into the same `dist` as the federation\n // output via a dedicated `client` environment (see plugin-sanity-environment).\n // Skipped for a dock-only app (no `./App` to mount), matching `exposesApp` in\n // plugin.ts.\n const emitSpa = !(isApp && !entry)\n\n let entries: Awaited<ReturnType<typeof resolveEntries>>\n if (emitSpa) {\n buildDebug('Writing Sanity runtime files (standalone SPA)')\n ;({entries} = await writeSanityRuntime({\n appTitle,\n basePath,\n cwd,\n entry,\n isApp,\n isBlueprints,\n isWorkbenchApp,\n reactStrictMode: false,\n watch: false,\n }))\n } else {\n buildDebug('Resolving entries for federation build')\n entries = await resolveEntries({cwd, entry, isApp, isWorkbenchApp})\n }\n\n buildDebug('Resolving vite config (federation)')\n let viteConfig = await getViteConfig({\n basePath,\n cwd,\n entries,\n exposes,\n getEnvironmentVariables,\n isApp,\n isBlueprints,\n isWorkbenchApp,\n minify,\n mode,\n outputDir,\n reactCompiler,\n // Schema extraction is a build-time artifact, not a client-specific step,\n // so a federated studio extracts its schema like the legacy studio build.\n schemaExtraction,\n sourceMap,\n workbenchAppId,\n })\n\n // Apply the user's Vite config so plugins like `@vanilla-extract/vite-plugin`\n // transform source files before the federation environment is bundled.\n // `finalizeViteConfig` is intentionally skipped: the federation environment\n // has its own entry and does not use `.sanity/runtime/app.js`.\n if (extendViteConfig) {\n viteConfig = await extendViteConfigWithUserConfig(\n {command: 'build', mode},\n viteConfig,\n extendViteConfig,\n )\n }\n\n if (emitSpa) {\n const fromPath = path.join(cwd, 'static')\n const staticPath = path.join(outputDir, 'static')\n buildDebug(`Copying static files from ${fromPath} to output dir`)\n await copyDir(fromPath, staticPath)\n buildDebug('Writing favicons to output dir')\n const faviconBasePath = `${basePath.replace(/\\/+$/, '')}/static`\n await writeFavicons(faviconBasePath, staticPath)\n }\n\n buildDebug('Bundling federation environment')\n const builder = await createBuilder(viteConfig)\n await builder.buildApp()\n buildDebug('Bundling complete')\n // TODO: add stats here\n return {chunks: []}\n }\n\n buildDebug('Writing Sanity runtime files')\n const {entries} = await writeSanityRuntime({\n appTitle,\n basePath,\n cwd,\n entry,\n isApp,\n isBlueprints,\n isWorkbenchApp,\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 let viteConfig = await getViteConfig({\n autoUpdates,\n basePath,\n cwd,\n entries,\n getEnvironmentVariables,\n isApp,\n isBlueprints,\n isWorkbenchApp,\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","build","createBuilder","copyDir","buildDebug","getAppEnvironmentVariables","getStudioEnvironmentVariables","extendViteConfigWithUserConfig","finalizeViteConfig","getViteConfig","writeFavicons","resolveEntries","writeSanityRuntime","buildStaticFiles","options","appTitle","autoUpdates","basePath","cwd","entry","exposes","isApp","isBlueprints","isWorkbenchApp","minify","outputDir","reactCompiler","schemaExtraction","sourceMap","vite","extendViteConfig","workbenchAppId","mode","emitSpa","entries","reactStrictMode","watch","viteConfig","getEnvironmentVariables","command","fromPath","join","staticPath","faviconBasePath","replace","builder","buildApp","chunks","jsonEncode","prefix","defaultViteConfig","bundle","Array","isArray","stats","chunk","output","type","push","modules","Object","map","rawFilePath","chunkModule","filePath","startsWith","slice","length","name","isAbsolute","relative","renderedLength"],"mappings":"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"}
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/types'\nimport {buildFederatedApp, type WorkbenchExposes} from '@sanity/workbench-cli/build'\nimport {build} from 'vite'\n\nimport {copyDir} from '../../util/copyDir.js'\nimport {type AutoUpdatesBuildConfig} from './autoUpdates.js'\nimport {buildDebug} from './buildDebug.js'\nimport {\n getAppEnvironmentVariables,\n getStudioEnvironmentVariables,\n} from './getEnvironmentVariables.js'\nimport {extendViteConfigWithUserConfig, finalizeViteConfig, getViteConfig} from './getViteConfig.js'\nimport {writeFavicons} from './writeFavicons.js'\nimport {resolveEntries, writeSanityRuntime} from './writeSanityRuntime.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 exposes?: WorkbenchExposes\n isApp?: boolean\n /** Blueprints build (via `@sanity/runtime-cli`) — emit the resource-bindings module. */\n isBlueprints?: boolean\n /** Workbench app (opted in via `defineApplication`) — drives the federation build. */\n isWorkbenchApp?: boolean\n minify?: boolean\n profile?: boolean\n reactCompiler?: CliConfig['reactCompiler']\n schemaExtraction?: CliConfig['schemaExtraction']\n sourceMap?: boolean\n vite?: UserViteConfig\n /** The workbench app's bus identity (`__SANITY_APP_ID__`). */\n workbenchAppId?: string\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 exposes,\n isApp,\n isBlueprints,\n isWorkbenchApp,\n minify = true,\n outputDir,\n reactCompiler,\n schemaExtraction,\n sourceMap = false,\n vite: extendViteConfig,\n workbenchAppId,\n } = options\n\n const mode = 'production'\n\n /* Federation builds only produce the federation environment\n * (remote-entry, mf-manifest) — skip client-specific steps like\n * runtime generation, static file copies, and favicons.\n */\n if (isWorkbenchApp) {\n // Every federated app and studio also serves itself standalone: emit an SPA\n // (index.html + bootstrap + favicons) into the same `dist` as the federation\n // output via a dedicated `client` environment (see plugin-sanity-environment).\n // Skipped for a dock-only app (no `./App` to mount), matching `exposesApp` in\n // plugin.ts.\n const emitSpa = !(isApp && !entry)\n\n let entries: Awaited<ReturnType<typeof resolveEntries>>\n if (emitSpa) {\n buildDebug('Writing Sanity runtime files (standalone SPA)')\n ;({entries} = await writeSanityRuntime({\n appTitle,\n basePath,\n cwd,\n entry,\n isApp,\n isBlueprints,\n isWorkbenchApp,\n reactStrictMode: false,\n watch: false,\n }))\n } else {\n buildDebug('Resolving entries for federation build')\n entries = await resolveEntries({cwd, entry, isApp, isWorkbenchApp})\n }\n\n buildDebug('Resolving vite config (federation)')\n let viteConfig = await getViteConfig({\n basePath,\n cwd,\n entries,\n exposes,\n getEnvironmentVariables,\n isApp,\n isBlueprints,\n isWorkbenchApp,\n minify,\n mode,\n outputDir,\n reactCompiler,\n // Schema extraction is a build-time artifact, not a client-specific step,\n // so a federated studio extracts its schema like the legacy studio build.\n schemaExtraction,\n sourceMap,\n workbenchAppId,\n })\n\n // Apply the user's Vite config so plugins like `@vanilla-extract/vite-plugin`\n // transform source files before the federation environment is bundled.\n // `finalizeViteConfig` is intentionally skipped: the federation environment\n // has its own entry and does not use `.sanity/runtime/app.js`.\n if (extendViteConfig) {\n viteConfig = await extendViteConfigWithUserConfig(\n {command: 'build', mode},\n viteConfig,\n extendViteConfig,\n )\n }\n\n if (emitSpa) {\n const fromPath = path.join(cwd, 'static')\n const staticPath = path.join(outputDir, 'static')\n buildDebug(`Copying static files from ${fromPath} to output dir`)\n await copyDir(fromPath, staticPath)\n buildDebug('Writing favicons to output dir')\n const faviconBasePath = `${basePath.replace(/\\/+$/, '')}/static`\n await writeFavicons(faviconBasePath, staticPath)\n }\n\n buildDebug('Bundling federation environment')\n await buildFederatedApp(viteConfig, {\n // Custom Vite hooks can resolve different dependencies in the two environments.\n reuseStandaloneBuild: emitSpa && !extendViteConfig,\n })\n buildDebug('Bundling complete')\n // TODO: add stats here\n return {chunks: []}\n }\n\n buildDebug('Writing Sanity runtime files')\n const {entries} = await writeSanityRuntime({\n appTitle,\n basePath,\n cwd,\n entry,\n isApp,\n isBlueprints,\n isWorkbenchApp,\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 let viteConfig = await getViteConfig({\n autoUpdates,\n basePath,\n cwd,\n entries,\n getEnvironmentVariables,\n isApp,\n isBlueprints,\n isWorkbenchApp,\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","buildFederatedApp","build","copyDir","buildDebug","getAppEnvironmentVariables","getStudioEnvironmentVariables","extendViteConfigWithUserConfig","finalizeViteConfig","getViteConfig","writeFavicons","resolveEntries","writeSanityRuntime","buildStaticFiles","options","appTitle","autoUpdates","basePath","cwd","entry","exposes","isApp","isBlueprints","isWorkbenchApp","minify","outputDir","reactCompiler","schemaExtraction","sourceMap","vite","extendViteConfig","workbenchAppId","mode","emitSpa","entries","reactStrictMode","watch","viteConfig","getEnvironmentVariables","command","fromPath","join","staticPath","faviconBasePath","replace","reuseStandaloneBuild","chunks","jsonEncode","prefix","defaultViteConfig","bundle","Array","isArray","stats","chunk","output","type","push","modules","Object","map","rawFilePath","chunkModule","filePath","startsWith","slice","length","name","isAbsolute","relative","renderedLength"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- // eslint-disable-next-line import-x/no-unresolved
2
1
  import { init, parse } from 'cjs-module-lexer';
3
2
  /** Memoizes the (Wasm) lexer initialization across calls. */ let lexerReady;
4
3
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/build/getCjsNamedExports.ts"],"sourcesContent":["// eslint-disable-next-line import-x/no-unresolved\nimport {init, parse} from 'cjs-module-lexer'\n\n/** Memoizes the (Wasm) lexer initialization across calls. */\nlet lexerReady: Promise<void> | undefined\n\n/**\n * Matches a string that can be used both as `export const <name>` and\n * `import {<name>}`. Names that fail this (reserved words, string-literal export\n * names) are not importable by name, so they are safely skipped.\n */\nconst VALID_IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/\n\n/**\n * Statically extracts the named exports of a CommonJS module source, without\n * executing it, using `cjs-module-lexer` (the same detector Node.js core uses\n * to expose CommonJS named exports to ESM importers).\n *\n * The vendor build uses this to learn which named bindings each CommonJS entry\n * must re-expose as real ESM exports once Rolldown has lowered it to ESM (see\n * `createVendorNamedExportsPlugin`). Executing the module is intentionally\n * avoided so that bundles which touch DOM globals at evaluation time (e.g.\n * `react-dom`) cannot break the build.\n *\n * @param source - The CommonJS module source code.\n * @param label - Identifier used in error messages (e.g. the chunk name).\n * @returns De-duplicated, importable identifier names, excluding `default` and\n * `__esModule`.\n * @throws If the module re-exports another module (`module.exports = require(...)`);\n * transitive re-export resolution is not supported by the vendor build.\n * @internal\n */\nexport async function getCjsNamedExports(source: string, label: string): Promise<string[]> {\n lexerReady ??= init()\n await lexerReady\n\n const {exports, reexports} = parse(source)\n\n if (reexports.length > 0) {\n throw new Error(\n `Unexpected CommonJS re-exports in '${label}': ${reexports.join(', ')}. ` +\n `Transitive re-export resolution is not supported by the vendor build.`,\n )\n }\n\n return [...new Set(exports)].filter(\n (name) => name !== 'default' && name !== '__esModule' && VALID_IDENTIFIER.test(name),\n )\n}\n"],"names":["init","parse","lexerReady","VALID_IDENTIFIER","getCjsNamedExports","source","label","exports","reexports","length","Error","join","Set","filter","name","test"],"mappings":"AAAA,kDAAkD;AAClD,SAAQA,IAAI,EAAEC,KAAK,QAAO,mBAAkB;AAE5C,2DAA2D,GAC3D,IAAIC;AAEJ;;;;CAIC,GACD,MAAMC,mBAAmB;AAEzB;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,eAAeC,mBAAmBC,MAAc,EAAEC,KAAa;IACpEJ,eAAeF;IACf,MAAME;IAEN,MAAM,EAACK,OAAO,EAAEC,SAAS,EAAC,GAAGP,MAAMI;IAEnC,IAAIG,UAAUC,MAAM,GAAG,GAAG;QACxB,MAAM,IAAIC,MACR,CAAC,mCAAmC,EAAEJ,MAAM,GAAG,EAAEE,UAAUG,IAAI,CAAC,MAAM,EAAE,CAAC,GACvE,CAAC,qEAAqE,CAAC;IAE7E;IAEA,OAAO;WAAI,IAAIC,IAAIL;KAAS,CAACM,MAAM,CACjC,CAACC,OAASA,SAAS,aAAaA,SAAS,gBAAgBX,iBAAiBY,IAAI,CAACD;AAEnF"}
1
+ {"version":3,"sources":["../../../src/actions/build/getCjsNamedExports.ts"],"sourcesContent":["import {init, parse} from 'cjs-module-lexer'\n\n/** Memoizes the (Wasm) lexer initialization across calls. */\nlet lexerReady: Promise<void> | undefined\n\n/**\n * Matches a string that can be used both as `export const <name>` and\n * `import {<name>}`. Names that fail this (reserved words, string-literal export\n * names) are not importable by name, so they are safely skipped.\n */\nconst VALID_IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/\n\n/**\n * Statically extracts the named exports of a CommonJS module source, without\n * executing it, using `cjs-module-lexer` (the same detector Node.js core uses\n * to expose CommonJS named exports to ESM importers).\n *\n * The vendor build uses this to learn which named bindings each CommonJS entry\n * must re-expose as real ESM exports once Rolldown has lowered it to ESM (see\n * `createVendorNamedExportsPlugin`). Executing the module is intentionally\n * avoided so that bundles which touch DOM globals at evaluation time (e.g.\n * `react-dom`) cannot break the build.\n *\n * @param source - The CommonJS module source code.\n * @param label - Identifier used in error messages (e.g. the chunk name).\n * @returns De-duplicated, importable identifier names, excluding `default` and\n * `__esModule`.\n * @throws If the module re-exports another module (`module.exports = require(...)`);\n * transitive re-export resolution is not supported by the vendor build.\n * @internal\n */\nexport async function getCjsNamedExports(source: string, label: string): Promise<string[]> {\n lexerReady ??= init()\n await lexerReady\n\n const {exports, reexports} = parse(source)\n\n if (reexports.length > 0) {\n throw new Error(\n `Unexpected CommonJS re-exports in '${label}': ${reexports.join(', ')}. ` +\n `Transitive re-export resolution is not supported by the vendor build.`,\n )\n }\n\n return [...new Set(exports)].filter(\n (name) => name !== 'default' && name !== '__esModule' && VALID_IDENTIFIER.test(name),\n )\n}\n"],"names":["init","parse","lexerReady","VALID_IDENTIFIER","getCjsNamedExports","source","label","exports","reexports","length","Error","join","Set","filter","name","test"],"mappings":"AAAA,SAAQA,IAAI,EAAEC,KAAK,QAAO,mBAAkB;AAE5C,2DAA2D,GAC3D,IAAIC;AAEJ;;;;CAIC,GACD,MAAMC,mBAAmB;AAEzB;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,eAAeC,mBAAmBC,MAAc,EAAEC,KAAa;IACpEJ,eAAeF;IACf,MAAME;IAEN,MAAM,EAACK,OAAO,EAAEC,SAAS,EAAC,GAAGP,MAAMI;IAEnC,IAAIG,UAAUC,MAAM,GAAG,GAAG;QACxB,MAAM,IAAIC,MACR,CAAC,mCAAmC,EAAEJ,MAAM,GAAG,EAAEE,UAAUG,IAAI,CAAC,MAAM,EAAE,CAAC,GACvE,CAAC,qEAAqE,CAAC;IAE7E;IAEA,OAAO;WAAI,IAAIC,IAAIL;KAAS,CAACM,MAAM,CACjC,CAACC,OAASA,SAAS,aAAaA,SAAS,gBAAgBX,iBAAiBY,IAAI,CAACD;AAEnF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/cli-build",
3
- "version": "6.3.1",
3
+ "version": "6.4.1",
4
4
  "description": "Internal Sanity package for building studios and apps",
5
5
  "keywords": [
6
6
  "cli",
@@ -52,12 +52,12 @@
52
52
  "dependencies": {
53
53
  "@oclif/core": "^4.11.14",
54
54
  "@rolldown/plugin-babel": "^0.2.3",
55
- "@sanity/cli-core": "^3.7.0",
55
+ "@sanity/cli-core": "^3.8.0",
56
56
  "@sanity/generate-help-url": "^4.0.0",
57
- "@sanity/schema": "^6.12.0",
57
+ "@sanity/schema": "^6.15.0",
58
58
  "@sanity/telemetry": "^1.1.0",
59
- "@sanity/types": "^6.12.0",
60
- "@sanity/workbench-cli": "^2.4.3",
59
+ "@sanity/types": "^6.15.0",
60
+ "@sanity/workbench-cli": "^2.6.0",
61
61
  "@vitejs/plugin-react": "^6.1.1",
62
62
  "chokidar": "^5.0.0",
63
63
  "cjs-module-lexer": "^2.2.1",
@@ -72,17 +72,17 @@
72
72
  "react": "^19.2.7",
73
73
  "react-is": "^19.2.7",
74
74
  "semver": "^7.8.1",
75
- "vite": "^8.2.2",
75
+ "vite": "^8.3.0",
76
76
  "zod": "^4.5.2"
77
77
  },
78
78
  "devDependencies": {
79
79
  "@eslint/compat": "^2.1.0",
80
80
  "@repo/package.config": "0.0.1",
81
81
  "@repo/tsconfig": "3.70.0",
82
- "@sanity/cli-test": "17.0.0",
82
+ "@sanity/cli-test": "18.0.0",
83
83
  "@sanity/eslint-config-cli": "^1.1.3",
84
84
  "@sanity/pkg-utils": "^12.3.4",
85
- "@sanity/ui": "^3.5.4",
85
+ "@sanity/ui": "^4.2.1",
86
86
  "@swc/cli": "^0.8.1",
87
87
  "@swc/core": "^1.15.43",
88
88
  "@types/jsdom": "^28.0.3",
@@ -99,7 +99,7 @@
99
99
  "magic-string": "^0.30.21",
100
100
  "oxc-transform-react": "^0.147.0",
101
101
  "publint": "^0.3.21",
102
- "sanity": "^6.12.0",
102
+ "sanity": "^6.15.0",
103
103
  "styled-components": "^6.4.3",
104
104
  "typescript": "^6.0.3",
105
105
  "vitest": "^4.1.11"
@@ -107,7 +107,7 @@
107
107
  "peerDependencies": {
108
108
  "babel-plugin-react-compiler": "*",
109
109
  "oxc-transform-react": "*",
110
- "sanity": "^6.12.0"
110
+ "sanity": "^6.15.0"
111
111
  },
112
112
  "peerDependenciesMeta": {
113
113
  "babel-plugin-react-compiler": {