@sanity/cli-build 6.4.5 → 7.0.0

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.
@@ -93,7 +93,9 @@ interface BuildOptions$1 {
93
93
  * Internal build app that avoids depending on flags for CLI config.
94
94
  * @param options - options for the build
95
95
  */
96
- declare function buildApp(options: BuildOptions$1): Promise<void>;
96
+ declare function buildApp(options: BuildOptions$1): Promise<{
97
+ mfManifest: Record<string, unknown> | undefined;
98
+ }>;
97
99
  interface VendorBuildConfig {
98
100
  /** Rolldown entry name -\> absolute path to the package entry file. */
99
101
  entries: Record<string, string>;
@@ -235,7 +237,9 @@ interface BuildOptions {
235
237
  * Internal build studio that avoids depending on flags for CLI config.
236
238
  * @param options - options for the build
237
239
  */
238
- declare function buildStudio(options: BuildOptions): Promise<void>;
240
+ declare function buildStudio(options: BuildOptions): Promise<{
241
+ mfManifest: Record<string, unknown> | undefined;
242
+ }>;
239
243
  interface CheckResult {
240
244
  installedSanityVersion: string;
241
245
  }
@@ -1,7 +1,7 @@
1
- import { i as CreateWorkspaceManifest } from "./types-Dj4qu4gT.js";
1
+ import { d as WorkspaceSchemaInput } from "./types-BFK33dtE.js";
2
2
  import { ProjectRootResult } from "@sanity/cli-core/types";
3
3
  import { SchemaValidationProblemGroup } from "@sanity/types";
4
- import { StudioManifest, Workspace } from "sanity";
4
+ import { StudioManifest } from "sanity";
5
5
  import { z } from "zod/mini";
6
6
  import { extractSchema } from "@sanity/schema/_internal";
7
7
  declare const buildStudioSchemasAndManifestsWorkerData: z.ZodMiniObject<{
@@ -9,14 +9,15 @@ declare const buildStudioSchemasAndManifestsWorkerData: z.ZodMiniObject<{
9
9
  isExternal: z.ZodMiniBoolean<boolean>;
10
10
  outPath: z.ZodMiniString<string>;
11
11
  projectId: z.ZodMiniString<string>;
12
+ schemaRequired: z.ZodMiniBoolean<boolean>;
12
13
  verbose: z.ZodMiniBoolean<boolean>;
13
14
  workDir: z.ZodMiniString<string>;
14
15
  }, z.core.$strip>;
15
16
  type BuildStudioSchemasAndManifestsWorkerData = z.infer<typeof buildStudioSchemasAndManifestsWorkerData>;
16
17
  type BuildStudioSchemasAndManifestsWorkerSuccess = {
18
+ schemaInputs: WorkspaceSchemaInput[] | null;
17
19
  studioManifest: StudioManifest | null;
18
20
  type: 'success';
19
- workspaceManifests: CreateWorkspaceManifest[];
20
21
  };
21
22
  /**
22
23
  * 1. Extracts the create manifest in dist/static (tar/gzipped with studio)
@@ -24,6 +25,13 @@ type BuildStudioSchemasAndManifestsWorkerSuccess = {
24
25
  * 3. Creates a studio manifest (which can be sent to populus)
25
26
  */
26
27
  declare function buildStudioSchemasAndManifests(applicationId: string, options: BuildStudioSchemasAndManifestsWorkerData): Promise<BuildStudioSchemasAndManifestsWorkerSuccess>;
28
+ /**
29
+ * This function must only be called from another worker process.
30
+ * @param options - The worker options
31
+ */
32
+ declare function workerBuildStudioSchemasAndManifests(options: BuildStudioSchemasAndManifestsWorkerData & {
33
+ workspaceSchemaHandler?: (workspaces: WorkspaceSchemaInput[]) => Promise<void>;
34
+ }): Promise<BuildStudioSchemasAndManifestsWorkerSuccess>;
27
35
  declare function getAggregatedSeverity(groupOrGroups: SchemaValidationProblemGroup | SchemaValidationProblemGroup[]): 'error' | 'warning';
28
36
  declare function formatSchemaValidation(validation: SchemaValidationProblemGroup[]): string;
29
37
  interface ExtractOptions {
@@ -60,18 +68,6 @@ declare function createSchemaPatternMatcher(patterns: string[]): {
60
68
  * Throws SchemaExtractionError on failure.
61
69
  */
62
70
  declare function runSchemaExtraction(extractOptions: Omit<ExtractOptions, 'watchPatterns'>): Promise<ReturnType<typeof extractSchema>>;
63
- interface UploadSchemaToLexiconOptions {
64
- projectId: string;
65
- workDir: string;
66
- workspaces: Workspace[];
67
- verbose?: boolean;
68
- }
69
- /**
70
- * Uploads the schemas to Lexicon and returns the studio manifest
71
- * @param options - The options for the uploadSchemaToLexicon function
72
- * @returns The studio manifest
73
- */
74
- declare function uploadSchemaToLexicon(options: UploadSchemaToLexiconOptions): Promise<StudioManifest | null>;
75
71
  /**
76
72
  * Extracts validation problem groups from a SchemaError.
77
73
  */
@@ -80,13 +76,6 @@ declare class SchemaExtractionError extends Error {
80
76
  validation?: SchemaValidationProblemGroup[];
81
77
  constructor(message: string, validation?: SchemaValidationProblemGroup[]);
82
78
  }
83
- /**
84
- * This function must only be called from another worker process.
85
- * @param options - The worker options
86
- */
87
- declare function workerBuildStudioSchemasAndManifests(options: BuildStudioSchemasAndManifestsWorkerData & {
88
- workspaceManifestsHandler?: (workspaceManifests: CreateWorkspaceManifest[]) => Promise<void>;
89
- }): Promise<BuildStudioSchemasAndManifestsWorkerSuccess>;
90
79
  interface SchemaExtractedTraceAttributes {
91
80
  enforceRequiredFields: boolean;
92
81
  schemaAllTypesCount: number;
@@ -113,5 +102,5 @@ interface SchemaDeployTraceData {
113
102
  declare const SchemaExtractedTrace: import("@sanity/telemetry").DefinedTelemetryTrace<SchemaExtractedTraceAttributes, void>;
114
103
  declare const SchemaExtractionWatchModeTrace: import("@sanity/telemetry").DefinedTelemetryTrace<SchemaExtractionWatchModeAttributes, void>;
115
104
  declare const SchemaDeploy: import("@sanity/telemetry").DefinedTelemetryTrace<SchemaDeployTraceData, void>;
116
- export { type ExtractOptions, SchemaDeploy, SchemaExtractedTrace, SchemaExtractionError, SchemaExtractionWatchModeTrace, buildStudioSchemasAndManifests, createSchemaPatternMatcher, extractValidationFromSchemaError, formatSchemaValidation, getAggregatedSeverity, getExtractOptions, runSchemaExtraction, uploadSchemaToLexicon, workerBuildStudioSchemasAndManifests };
105
+ export { type ExtractOptions, SchemaDeploy, SchemaExtractedTrace, SchemaExtractionError, SchemaExtractionWatchModeTrace, buildStudioSchemasAndManifests, createSchemaPatternMatcher, extractValidationFromSchemaError, formatSchemaValidation, getAggregatedSeverity, getExtractOptions, runSchemaExtraction, workerBuildStudioSchemasAndManifests };
117
106
  //# sourceMappingURL=extract.d.ts.map
@@ -1,12 +1,11 @@
1
1
  export { buildStudioSchemasAndManifests } from '../../actions/schema/buildStudioSchemasAndManifests.js';
2
+ export { workerBuildStudioSchemasAndManifests } from '../../actions/schema/buildStudioSchemasAndManifestsWorker.js';
2
3
  export { formatSchemaValidation, getAggregatedSeverity } from '../../actions/schema/formatSchemaValidation.js';
3
4
  export { getExtractOptions } from '../../actions/schema/getExtractOptions.js';
4
5
  export { createSchemaPatternMatcher } from '../../actions/schema/matchSchemaPattern.js';
5
6
  export { runSchemaExtraction } from '../../actions/schema/runSchemaExtraction.js';
6
- export { uploadSchemaToLexicon } from '../../actions/schema/uploadSchemaToLexicon.js';
7
7
  export { extractValidationFromSchemaError } from '../../actions/schema/utils/extractValidationFromSchemaError.js';
8
8
  export { SchemaExtractionError } from '../../actions/schema/utils/SchemaExtractionError.js';
9
- export { workerBuildStudioSchemasAndManifests } from '../../actions/schema/workerBuildStudioSchemasAndManifests.js';
10
9
  export { SchemaDeploy, SchemaExtractedTrace, SchemaExtractionWatchModeTrace } from '../../telemetry/extractSchema.telemetry.js';
11
10
 
12
11
  //# sourceMappingURL=extract.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/_exports/_internal/extract.ts"],"sourcesContent":["export {buildStudioSchemasAndManifests} from '../../actions/schema/buildStudioSchemasAndManifests.js'\nexport {\n formatSchemaValidation,\n getAggregatedSeverity,\n} from '../../actions/schema/formatSchemaValidation.js'\nexport {type ExtractOptions, getExtractOptions} from '../../actions/schema/getExtractOptions.js'\nexport {createSchemaPatternMatcher} from '../../actions/schema/matchSchemaPattern.js'\nexport {runSchemaExtraction} from '../../actions/schema/runSchemaExtraction.js'\nexport {uploadSchemaToLexicon} from '../../actions/schema/uploadSchemaToLexicon.js'\nexport {extractValidationFromSchemaError} from '../../actions/schema/utils/extractValidationFromSchemaError.js'\nexport {SchemaExtractionError} from '../../actions/schema/utils/SchemaExtractionError.js'\nexport {workerBuildStudioSchemasAndManifests} from '../../actions/schema/workerBuildStudioSchemasAndManifests.js'\nexport {\n SchemaDeploy,\n SchemaExtractedTrace,\n SchemaExtractionWatchModeTrace,\n} from '../../telemetry/extractSchema.telemetry.js'\n"],"names":["buildStudioSchemasAndManifests","formatSchemaValidation","getAggregatedSeverity","getExtractOptions","createSchemaPatternMatcher","runSchemaExtraction","uploadSchemaToLexicon","extractValidationFromSchemaError","SchemaExtractionError","workerBuildStudioSchemasAndManifests","SchemaDeploy","SchemaExtractedTrace","SchemaExtractionWatchModeTrace"],"mappings":"AAAA,SAAQA,8BAA8B,QAAO,yDAAwD;AACrG,SACEC,sBAAsB,EACtBC,qBAAqB,QAChB,iDAAgD;AACvD,SAA6BC,iBAAiB,QAAO,4CAA2C;AAChG,SAAQC,0BAA0B,QAAO,6CAA4C;AACrF,SAAQC,mBAAmB,QAAO,8CAA6C;AAC/E,SAAQC,qBAAqB,QAAO,gDAA+C;AACnF,SAAQC,gCAAgC,QAAO,iEAAgE;AAC/G,SAAQC,qBAAqB,QAAO,sDAAqD;AACzF,SAAQC,oCAAoC,QAAO,+DAA8D;AACjH,SACEC,YAAY,EACZC,oBAAoB,EACpBC,8BAA8B,QACzB,6CAA4C"}
1
+ {"version":3,"sources":["../../../src/_exports/_internal/extract.ts"],"sourcesContent":["export {buildStudioSchemasAndManifests} from '../../actions/schema/buildStudioSchemasAndManifests.js'\nexport {workerBuildStudioSchemasAndManifests} from '../../actions/schema/buildStudioSchemasAndManifestsWorker.js'\nexport {\n formatSchemaValidation,\n getAggregatedSeverity,\n} from '../../actions/schema/formatSchemaValidation.js'\nexport {type ExtractOptions, getExtractOptions} from '../../actions/schema/getExtractOptions.js'\nexport {createSchemaPatternMatcher} from '../../actions/schema/matchSchemaPattern.js'\nexport {runSchemaExtraction} from '../../actions/schema/runSchemaExtraction.js'\nexport {extractValidationFromSchemaError} from '../../actions/schema/utils/extractValidationFromSchemaError.js'\nexport {SchemaExtractionError} from '../../actions/schema/utils/SchemaExtractionError.js'\nexport {\n SchemaDeploy,\n SchemaExtractedTrace,\n SchemaExtractionWatchModeTrace,\n} from '../../telemetry/extractSchema.telemetry.js'\n"],"names":["buildStudioSchemasAndManifests","workerBuildStudioSchemasAndManifests","formatSchemaValidation","getAggregatedSeverity","getExtractOptions","createSchemaPatternMatcher","runSchemaExtraction","extractValidationFromSchemaError","SchemaExtractionError","SchemaDeploy","SchemaExtractedTrace","SchemaExtractionWatchModeTrace"],"mappings":"AAAA,SAAQA,8BAA8B,QAAO,yDAAwD;AACrG,SAAQC,oCAAoC,QAAO,+DAA8D;AACjH,SACEC,sBAAsB,EACtBC,qBAAqB,QAChB,iDAAgD;AACvD,SAA6BC,iBAAiB,QAAO,4CAA2C;AAChG,SAAQC,0BAA0B,QAAO,6CAA4C;AACrF,SAAQC,mBAAmB,QAAO,8CAA6C;AAC/E,SAAQC,gCAAgC,QAAO,iEAAgE;AAC/G,SAAQC,qBAAqB,QAAO,sDAAqD;AACzF,SACEC,YAAY,EACZC,oBAAoB,EACpBC,8BAA8B,QACzB,6CAA4C"}
@@ -1,4 +1,4 @@
1
- import { a as DefaultWorkspaceSchemaId, c as StoredWorkspaceSchema, i as CreateWorkspaceManifest, l as StudioManifest, n as CoreAppManifest, o as ManifestSchemaType, r as CreateManifest, s as SANITY_WORKSPACE_SCHEMA_ID_PREFIX, t as CURRENT_WORKSPACE_SCHEMA_VERSION, u as WorkspaceSchemaId } from "./types-Dj4qu4gT.js";
1
+ import { a as DefaultWorkspaceSchemaId, c as StoredWorkspaceSchema, d as WorkspaceSchemaInput, i as CreateWorkspaceManifest, l as StudioManifest, n as CoreAppManifest, o as ManifestSchemaType, r as CreateManifest, s as SANITY_WORKSPACE_SCHEMA_ID_PREFIX, t as CURRENT_WORKSPACE_SCHEMA_VERSION, u as WorkspaceSchemaId } from "./types-BFK33dtE.js";
2
2
  import { Schema } from "@sanity/types";
3
3
  import { Workspace } from "sanity";
4
4
  interface ExtractCoreAppManifestOptions {
@@ -65,5 +65,5 @@ declare function extractWorkspaceManifest(workspaces: Workspace[], workDir: stri
65
65
  * @internal
66
66
  */
67
67
  declare function extractManifestSchemaTypes(schema: Schema, workDir: string): Promise<ManifestSchemaType[]>;
68
- export { CURRENT_WORKSPACE_SCHEMA_VERSION, type CoreAppManifest, type CreateManifest, type CreateWorkspaceManifest, type DefaultWorkspaceSchemaId, MANIFEST_FILENAME, type ManifestSchemaType, SANITY_WORKSPACE_SCHEMA_ID_PREFIX, type StoredWorkspaceSchema, type StudioManifest, type WorkspaceSchemaId, extractCoreAppManifest, extractManifest, extractManifestSchemaTypes, extractWorkspaceManifest, readIconFromPath, resolveTitleUpdate, writeManifestFile };
68
+ export { CURRENT_WORKSPACE_SCHEMA_VERSION, type CoreAppManifest, type CreateManifest, type CreateWorkspaceManifest, type DefaultWorkspaceSchemaId, MANIFEST_FILENAME, type ManifestSchemaType, SANITY_WORKSPACE_SCHEMA_ID_PREFIX, type StoredWorkspaceSchema, type StudioManifest, type WorkspaceSchemaId, type WorkspaceSchemaInput, extractCoreAppManifest, extractManifest, extractManifestSchemaTypes, extractWorkspaceManifest, readIconFromPath, resolveTitleUpdate, writeManifestFile };
69
69
  //# sourceMappingURL=manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/_exports/_internal/manifest.ts"],"sourcesContent":["export {\n extractCoreAppManifest,\n readIconFromPath,\n resolveTitleUpdate,\n} from '../../actions/manifest/extractCoreAppManifest.js'\nexport {extractManifest} from '../../actions/manifest/extractManifest.js'\nexport {\n extractManifestSchemaTypes,\n extractWorkspaceManifest,\n} from '../../actions/manifest/extractWorkspaceManifest.js'\nexport {\n type CoreAppManifest,\n type CreateManifest,\n type CreateWorkspaceManifest,\n CURRENT_WORKSPACE_SCHEMA_VERSION,\n type DefaultWorkspaceSchemaId,\n type ManifestSchemaType,\n SANITY_WORKSPACE_SCHEMA_ID_PREFIX,\n type StoredWorkspaceSchema,\n type StudioManifest,\n type WorkspaceSchemaId,\n} from '../../actions/manifest/types.js'\nexport {MANIFEST_FILENAME, writeManifestFile} from '../../actions/manifest/writeManifestFile.js'\n"],"names":["extractCoreAppManifest","readIconFromPath","resolveTitleUpdate","extractManifest","extractManifestSchemaTypes","extractWorkspaceManifest","CURRENT_WORKSPACE_SCHEMA_VERSION","SANITY_WORKSPACE_SCHEMA_ID_PREFIX","MANIFEST_FILENAME","writeManifestFile"],"mappings":"AAAA,SACEA,sBAAsB,EACtBC,gBAAgB,EAChBC,kBAAkB,QACb,mDAAkD;AACzD,SAAQC,eAAe,QAAO,4CAA2C;AACzE,SACEC,0BAA0B,EAC1BC,wBAAwB,QACnB,qDAAoD;AAC3D,SAIEC,gCAAgC,EAGhCC,iCAAiC,QAI5B,kCAAiC;AACxC,SAAQC,iBAAiB,EAAEC,iBAAiB,QAAO,8CAA6C"}
1
+ {"version":3,"sources":["../../../src/_exports/_internal/manifest.ts"],"sourcesContent":["export {\n extractCoreAppManifest,\n readIconFromPath,\n resolveTitleUpdate,\n} from '../../actions/manifest/extractCoreAppManifest.js'\nexport {extractManifest} from '../../actions/manifest/extractManifest.js'\nexport {\n extractManifestSchemaTypes,\n extractWorkspaceManifest,\n} from '../../actions/manifest/extractWorkspaceManifest.js'\nexport {\n type CoreAppManifest,\n type CreateManifest,\n type CreateWorkspaceManifest,\n CURRENT_WORKSPACE_SCHEMA_VERSION,\n type DefaultWorkspaceSchemaId,\n type ManifestSchemaType,\n SANITY_WORKSPACE_SCHEMA_ID_PREFIX,\n type StoredWorkspaceSchema,\n type StudioManifest,\n type WorkspaceSchemaId,\n type WorkspaceSchemaInput,\n} from '../../actions/manifest/types.js'\nexport {MANIFEST_FILENAME, writeManifestFile} from '../../actions/manifest/writeManifestFile.js'\n"],"names":["extractCoreAppManifest","readIconFromPath","resolveTitleUpdate","extractManifest","extractManifestSchemaTypes","extractWorkspaceManifest","CURRENT_WORKSPACE_SCHEMA_VERSION","SANITY_WORKSPACE_SCHEMA_ID_PREFIX","MANIFEST_FILENAME","writeManifestFile"],"mappings":"AAAA,SACEA,sBAAsB,EACtBC,gBAAgB,EAChBC,kBAAkB,QACb,mDAAkD;AACzD,SAAQC,eAAe,QAAO,4CAA2C;AACzE,SACEC,0BAA0B,EAC1BC,wBAAwB,QACnB,qDAAoD;AAC3D,SAIEC,gCAAgC,EAGhCC,iCAAiC,QAK5B,kCAAiC;AACxC,SAAQC,iBAAiB,EAAEC,iBAAiB,QAAO,8CAA6C"}
@@ -112,5 +112,17 @@ interface StoredWorkspaceSchema extends SanityDocumentLike {
112
112
  };
113
113
  tag?: string;
114
114
  }
115
- export { DefaultWorkspaceSchemaId as a, StoredWorkspaceSchema as c, CreateWorkspaceManifest as i, StudioManifest$1 as l, CoreAppManifest as n, ManifestSchemaType as o, CreateManifest as r, SANITY_WORKSPACE_SCHEMA_ID_PREFIX as s, CURRENT_WORKSPACE_SCHEMA_VERSION as t, WorkspaceSchemaId as u };
116
- //# sourceMappingURL=types-Dj4qu4gT.d.ts.map
115
+ /**
116
+ * Workspace metadata + pre-extracted manifest schema for deployment.
117
+ * The schema must already be in ManifestSchemaType[] format (extracted from
118
+ * the live Schema object before any structured clone boundary).
119
+ */
120
+ interface WorkspaceSchemaInput {
121
+ dataset: string;
122
+ manifestSchema: ManifestSchemaType[];
123
+ name: string;
124
+ projectId: string;
125
+ title?: string;
126
+ }
127
+ export { DefaultWorkspaceSchemaId as a, StoredWorkspaceSchema as c, WorkspaceSchemaInput as d, CreateWorkspaceManifest as i, StudioManifest$1 as l, CoreAppManifest as n, ManifestSchemaType as o, CreateManifest as r, SANITY_WORKSPACE_SCHEMA_ID_PREFIX as s, CURRENT_WORKSPACE_SCHEMA_VERSION as t, WorkspaceSchemaId as u };
128
+ //# sourceMappingURL=types-BFK33dtE.d.ts.map
@@ -6,6 +6,7 @@ import { getLocalPackageVersion } from '@sanity/cli-core/package-manager';
6
6
  import { getCliTelemetry } from '@sanity/cli-core/telemetry';
7
7
  import { isInteractive } from '@sanity/cli-core/util';
8
8
  import { confirm, getTimer, logSymbols, spinner } from '@sanity/cli-core/ux';
9
+ import { readBuiltManifest } from '@sanity/workbench-cli/build';
9
10
  import { parse as semverParse } from 'semver';
10
11
  import { AppBuildTrace } from '../../telemetry/build.telemetry.js';
11
12
  import { formatModuleSizes, sortModulesBySize } from '../../util/moduleFormatUtils.js';
@@ -32,7 +33,9 @@ import { resolveVendorBuildConfig } from './resolveVendorBuildConfig.js';
32
33
  output.error(`Failed to find installed @sanity/sdk-react version`, {
33
34
  exit: exitCodes.RUNTIME_ERROR
34
35
  });
35
- return;
36
+ return {
37
+ mfManifest: undefined
38
+ };
36
39
  }
37
40
  let autoUpdatesImports = {};
38
41
  let autoUpdatesCssUrls = [];
@@ -43,7 +46,9 @@ import { resolveVendorBuildConfig } from './resolveVendorBuildConfig.js';
43
46
  output.error(`Failed to parse installed SDK version: ${installedSdkVersion}`, {
44
47
  exit: exitCodes.RUNTIME_ERROR
45
48
  });
46
- return;
49
+ return {
50
+ mfManifest: undefined
51
+ };
47
52
  }
48
53
  // Sanity might not be installed, but if it is, we want to auto update it.
49
54
  const cleanSanityVersion = semverParse(installedSanityVersion)?.version;
@@ -98,7 +103,9 @@ import { resolveVendorBuildConfig } from './resolveVendorBuildConfig.js';
98
103
  output.error('Declined to continue with build', {
99
104
  exit: exitCodes.RUNTIME_ERROR
100
105
  });
101
- return;
106
+ return {
107
+ mfManifest: undefined
108
+ };
102
109
  }
103
110
  } else {
104
111
  // if non-interactive or unattended, just show the warning
@@ -166,6 +173,7 @@ import { resolveVendorBuildConfig } from './resolveVendorBuildConfig.js';
166
173
  vite: options.vite,
167
174
  workbenchAppId: options.workbenchAppId
168
175
  });
176
+ const mfManifest = options.isWorkbenchApp ? await readBuiltManifest(outputDir) : undefined;
169
177
  trace.log({
170
178
  outputSize: bundle.chunks.flatMap((chunk)=>chunk.modules.flatMap((mod)=>mod.renderedLength)).reduce((sum, n)=>sum + n, 0)
171
179
  });
@@ -177,6 +185,9 @@ import { resolveVendorBuildConfig } from './resolveVendorBuildConfig.js';
177
185
  output.log(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15)));
178
186
  }
179
187
  trace.complete();
188
+ return {
189
+ mfManifest
190
+ };
180
191
  } catch (error) {
181
192
  spin.fail();
182
193
  trace.error(error);
@@ -187,6 +198,9 @@ import { resolveVendorBuildConfig } from './resolveVendorBuildConfig.js';
187
198
  output.error(`Failed to build Sanity application: ${message}`, {
188
199
  exit: exitCodes.RUNTIME_ERROR
189
200
  });
201
+ return {
202
+ mfManifest: undefined
203
+ };
190
204
  }
191
205
  }
192
206
 
@@ -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 {exitCodes} from '@sanity/cli-core/ExitCodes'\nimport {getLocalPackageVersion} from '@sanity/cli-core/package-manager'\nimport {getCliTelemetry} from '@sanity/cli-core/telemetry'\nimport {type CliConfig, type Output, type UserViteConfig} from '@sanity/cli-core/types'\nimport {isInteractive} from '@sanity/cli-core/util'\nimport {confirm, getTimer, logSymbols, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\nimport {type WorkbenchExposes} from '@sanity/workbench-cli/build'\nimport {parse as semverParse} from 'semver'\n\nimport {AppBuildTrace} from '../../telemetry/build.telemetry.js'\nimport {CompareDependencyVersionsResult} from '../../util/compareDependencyVersions.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {buildDebug} from './buildDebug.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {BuildEventListener} from './eventListener.js'\nimport {getAutoUpdatesCssUrls, getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {getAppEnvironmentVariables} from './getEnvironmentVariables.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {resolveVendorBuildConfig} from './resolveVendorBuildConfig.js'\n\nexport type BuildAppEventListener = BuildEventListener\nexport interface BuildOptions {\n appId: string | undefined\n appTitle: string | undefined\n autoUpdatesEnabled: boolean\n checkAppId: () => void\n compareDependencyVersions: (\n packages: {name: string; version: string}[],\n ) => Promise<CompareDependencyVersionsResult>\n determineBasePath: () => string\n entry: string | undefined\n eventListener: Partial<BuildAppEventListener>\n isWorkbenchApp: boolean\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 exposes?: WorkbenchExposes\n /**\n * The build is running under Sanity Blueprints (invoked programmatically by\n * `@sanity/runtime-cli`), so emit the statically-imported resource-bindings\n * module Brett rewrites at deploy. Defaults to `false`, so a normal\n * `sanity build`/`dev`/`preview` never emits it.\n */\n isBlueprints?: boolean\n\n /** The workbench app's bus identity (`__SANITY_APP_ID__`). */\n workbenchAppId?: string\n}\n\n/**\n * Internal build app that avoids depending on flags for CLI config.\n * @param options - options for the build\n */\nexport async function buildApp(options: BuildOptions): Promise<void> {\n buildDebug(`Building app`)\n\n const {appId, determineBasePath, eventListener, outDir, output, workDir} = options\n let {autoUpdatesEnabled} = options\n const unattendedMode = options.unattendedMode\n\n const timer = getTimer()\n\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n const installedSdkVersion = await getLocalPackageVersion('@sanity/sdk-react', workDir)\n const installedSanityVersion = await getLocalPackageVersion('sanity', workDir)\n\n if (!installedSdkVersion) {\n output.error(`Failed to find installed @sanity/sdk-react version`, {\n exit: exitCodes.RUNTIME_ERROR,\n })\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}`, {\n exit: exitCodes.RUNTIME_ERROR,\n })\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 options.checkAppId()\n\n // Check the versions\n const {mismatched, unresolvedPrerelease} =\n await options.compareDependencyVersions(autoUpdatedPackages)\n\n if (unresolvedPrerelease.length > 0) {\n await handlePrereleaseVersions({\n onPreReleaseInInteractiveAutoUpdate: eventListener.onPreReleaseInInteractiveAutoUpdate,\n onPreReleaseInNonInteractiveAutoUpdate:\n eventListener.onPreReleaseInNonInteractiveAutoUpdate,\n unattendedMode,\n unresolvedPrerelease,\n })\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: exitCodes.RUNTIME_ERROR})\n return\n }\n } else {\n // if non-interactive or unattended, just show the warning\n output.warn(versionMismatchWarning)\n }\n }\n }\n\n const envVarKeys = Object.keys(getAppEnvironmentVariables())\n if (envVarKeys.length > 0) {\n output.log('\\nIncluding the following environment variables as part of the JavaScript bundle:')\n for (const key of envVarKeys) output.log(`- ${key}`)\n output.log('')\n }\n\n let shouldClean = true\n if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {\n shouldClean = await confirm({\n default: true,\n message: `Do you want to delete the existing directory (${outputDir}) first?`,\n })\n }\n\n const basePath = determineBasePath()\n\n let spin: SpinnerInstance\n if (shouldClean) {\n timer.start('cleanOutputFolder')\n spin = spinner('Clean output folder').start()\n await rm(outputDir, {force: true, recursive: true})\n const cleanDuration = timer.end('cleanOutputFolder')\n spin.text = `Clean output folder (${cleanDuration.toFixed(0)}ms)`\n spin.succeed()\n }\n\n spin = spinner(`Building Sanity application`).start()\n\n const trace = getCliTelemetry().trace(AppBuildTrace)\n trace.start()\n\n let autoUpdates\n if (autoUpdatesEnabled && !options.isWorkbenchApp) {\n autoUpdates = {\n cssUrls: autoUpdatesCssUrls,\n imports: autoUpdatesImports,\n vendor: await resolveVendorBuildConfig({cwd: workDir, isApp: true}),\n }\n }\n\n try {\n timer.start('bundleStudio')\n\n const bundle = await buildStaticFiles({\n appTitle: options.appTitle,\n autoUpdates,\n basePath,\n cwd: workDir,\n entry: options.entry,\n exposes: options.exposes,\n isApp: true,\n isBlueprints: options.isBlueprints,\n isWorkbenchApp: options.isWorkbenchApp,\n minify: options.minify,\n outputDir,\n reactCompiler: options.reactCompiler,\n schemaExtraction: options.schemaExtraction,\n sourceMap: options.sourceMap,\n vite: options.vite,\n workbenchAppId: options.workbenchAppId,\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: exitCodes.RUNTIME_ERROR})\n }\n}\n"],"names":["rm","path","styleText","exitCodes","getLocalPackageVersion","getCliTelemetry","isInteractive","confirm","getTimer","logSymbols","spinner","parse","semverParse","AppBuildTrace","formatModuleSizes","sortModulesBySize","buildDebug","buildStaticFiles","getAutoUpdatesCssUrls","getAutoUpdatesImportMap","getAppEnvironmentVariables","handlePrereleaseVersions","resolveVendorBuildConfig","buildApp","options","appId","determineBasePath","eventListener","outDir","output","workDir","autoUpdatesEnabled","unattendedMode","timer","defaultOutputDir","resolve","join","outputDir","installedSdkVersion","installedSanityVersion","error","exit","RUNTIME_ERROR","autoUpdatesImports","autoUpdatesCssUrls","cleanSDKVersion","version","cleanSanityVersion","autoUpdatedPackages","name","cssFile","log","info","checkAppId","mismatched","unresolvedPrerelease","compareDependencyVersions","length","onPreReleaseInInteractiveAutoUpdate","onPreReleaseInNonInteractiveAutoUpdate","versionMismatchWarning","map","mod","pkg","installed","remote","shouldContinue","default","message","warn","envVarKeys","Object","keys","key","shouldClean","basePath","spin","start","force","recursive","cleanDuration","end","text","toFixed","succeed","trace","autoUpdates","isWorkbenchApp","cssUrls","imports","vendor","cwd","isApp","bundle","appTitle","entry","exposes","isBlueprints","minify","reactCompiler","schemaExtraction","sourceMap","vite","workbenchAppId","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 {exitCodes} from '@sanity/cli-core/ExitCodes'\nimport {getLocalPackageVersion} from '@sanity/cli-core/package-manager'\nimport {getCliTelemetry} from '@sanity/cli-core/telemetry'\nimport {type CliConfig, type Output, type UserViteConfig} from '@sanity/cli-core/types'\nimport {isInteractive} from '@sanity/cli-core/util'\nimport {confirm, getTimer, logSymbols, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\nimport {readBuiltManifest, type WorkbenchExposes} from '@sanity/workbench-cli/build'\nimport {parse as semverParse} from 'semver'\n\nimport {AppBuildTrace} from '../../telemetry/build.telemetry.js'\nimport {CompareDependencyVersionsResult} from '../../util/compareDependencyVersions.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {buildDebug} from './buildDebug.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {BuildEventListener} from './eventListener.js'\nimport {getAutoUpdatesCssUrls, getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {getAppEnvironmentVariables} from './getEnvironmentVariables.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {resolveVendorBuildConfig} from './resolveVendorBuildConfig.js'\n\nexport type BuildAppEventListener = BuildEventListener\nexport interface BuildOptions {\n appId: string | undefined\n appTitle: string | undefined\n autoUpdatesEnabled: boolean\n checkAppId: () => void\n compareDependencyVersions: (\n packages: {name: string; version: string}[],\n ) => Promise<CompareDependencyVersionsResult>\n determineBasePath: () => string\n entry: string | undefined\n eventListener: Partial<BuildAppEventListener>\n isWorkbenchApp: boolean\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 exposes?: WorkbenchExposes\n /**\n * The build is running under Sanity Blueprints (invoked programmatically by\n * `@sanity/runtime-cli`), so emit the statically-imported resource-bindings\n * module Brett rewrites at deploy. Defaults to `false`, so a normal\n * `sanity build`/`dev`/`preview` never emits it.\n */\n isBlueprints?: boolean\n\n /** The workbench app's bus identity (`__SANITY_APP_ID__`). */\n workbenchAppId?: string\n}\n\n/**\n * Internal build app that avoids depending on flags for CLI config.\n * @param options - options for the build\n */\nexport async function buildApp(\n options: BuildOptions,\n): Promise<{mfManifest: Record<string, unknown> | undefined}> {\n buildDebug(`Building app`)\n\n const {appId, determineBasePath, eventListener, outDir, output, workDir} = options\n let {autoUpdatesEnabled} = options\n const unattendedMode = options.unattendedMode\n\n const timer = getTimer()\n\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n const installedSdkVersion = await getLocalPackageVersion('@sanity/sdk-react', workDir)\n const installedSanityVersion = await getLocalPackageVersion('sanity', workDir)\n\n if (!installedSdkVersion) {\n output.error(`Failed to find installed @sanity/sdk-react version`, {\n exit: exitCodes.RUNTIME_ERROR,\n })\n return {mfManifest: undefined}\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}`, {\n exit: exitCodes.RUNTIME_ERROR,\n })\n return {mfManifest: undefined}\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 options.checkAppId()\n\n // Check the versions\n const {mismatched, unresolvedPrerelease} =\n await options.compareDependencyVersions(autoUpdatedPackages)\n\n if (unresolvedPrerelease.length > 0) {\n await handlePrereleaseVersions({\n onPreReleaseInInteractiveAutoUpdate: eventListener.onPreReleaseInInteractiveAutoUpdate,\n onPreReleaseInNonInteractiveAutoUpdate:\n eventListener.onPreReleaseInNonInteractiveAutoUpdate,\n unattendedMode,\n unresolvedPrerelease,\n })\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: exitCodes.RUNTIME_ERROR})\n return {mfManifest: undefined}\n }\n } else {\n // if non-interactive or unattended, just show the warning\n output.warn(versionMismatchWarning)\n }\n }\n }\n\n const envVarKeys = Object.keys(getAppEnvironmentVariables())\n if (envVarKeys.length > 0) {\n output.log('\\nIncluding the following environment variables as part of the JavaScript bundle:')\n for (const key of envVarKeys) output.log(`- ${key}`)\n output.log('')\n }\n\n let shouldClean = true\n if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {\n shouldClean = await confirm({\n default: true,\n message: `Do you want to delete the existing directory (${outputDir}) first?`,\n })\n }\n\n const basePath = determineBasePath()\n\n let spin: SpinnerInstance\n if (shouldClean) {\n timer.start('cleanOutputFolder')\n spin = spinner('Clean output folder').start()\n await rm(outputDir, {force: true, recursive: true})\n const cleanDuration = timer.end('cleanOutputFolder')\n spin.text = `Clean output folder (${cleanDuration.toFixed(0)}ms)`\n spin.succeed()\n }\n\n spin = spinner(`Building Sanity application`).start()\n\n const trace = getCliTelemetry().trace(AppBuildTrace)\n trace.start()\n\n let autoUpdates\n if (autoUpdatesEnabled && !options.isWorkbenchApp) {\n autoUpdates = {\n cssUrls: autoUpdatesCssUrls,\n imports: autoUpdatesImports,\n vendor: await resolveVendorBuildConfig({cwd: workDir, isApp: true}),\n }\n }\n\n try {\n timer.start('bundleStudio')\n\n const bundle = await buildStaticFiles({\n appTitle: options.appTitle,\n autoUpdates,\n basePath,\n cwd: workDir,\n entry: options.entry,\n exposes: options.exposes,\n isApp: true,\n isBlueprints: options.isBlueprints,\n isWorkbenchApp: options.isWorkbenchApp,\n minify: options.minify,\n outputDir,\n reactCompiler: options.reactCompiler,\n schemaExtraction: options.schemaExtraction,\n sourceMap: options.sourceMap,\n vite: options.vite,\n workbenchAppId: options.workbenchAppId,\n })\n const mfManifest = options.isWorkbenchApp ? await readBuiltManifest(outputDir) : undefined\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 return {mfManifest}\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: exitCodes.RUNTIME_ERROR})\n return {mfManifest: undefined}\n }\n}\n"],"names":["rm","path","styleText","exitCodes","getLocalPackageVersion","getCliTelemetry","isInteractive","confirm","getTimer","logSymbols","spinner","readBuiltManifest","parse","semverParse","AppBuildTrace","formatModuleSizes","sortModulesBySize","buildDebug","buildStaticFiles","getAutoUpdatesCssUrls","getAutoUpdatesImportMap","getAppEnvironmentVariables","handlePrereleaseVersions","resolveVendorBuildConfig","buildApp","options","appId","determineBasePath","eventListener","outDir","output","workDir","autoUpdatesEnabled","unattendedMode","timer","defaultOutputDir","resolve","join","outputDir","installedSdkVersion","installedSanityVersion","error","exit","RUNTIME_ERROR","mfManifest","undefined","autoUpdatesImports","autoUpdatesCssUrls","cleanSDKVersion","version","cleanSanityVersion","autoUpdatedPackages","name","cssFile","log","info","checkAppId","mismatched","unresolvedPrerelease","compareDependencyVersions","length","onPreReleaseInInteractiveAutoUpdate","onPreReleaseInNonInteractiveAutoUpdate","versionMismatchWarning","map","mod","pkg","installed","remote","shouldContinue","default","message","warn","envVarKeys","Object","keys","key","shouldClean","basePath","spin","start","force","recursive","cleanDuration","end","text","toFixed","succeed","trace","autoUpdates","isWorkbenchApp","cssUrls","imports","vendor","cwd","isApp","bundle","appTitle","entry","exposes","isBlueprints","minify","reactCompiler","schemaExtraction","sourceMap","vite","workbenchAppId","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","stats","slice","complete","fail","Error","String"],"mappings":"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"}
@@ -4,6 +4,7 @@ import { getLocalPackageVersion } from '@sanity/cli-core/package-manager';
4
4
  import { getCliTelemetry } from '@sanity/cli-core/telemetry';
5
5
  import { isInteractive } from '@sanity/cli-core/util';
6
6
  import { getTimer, logSymbols } from '@sanity/cli-core/ux';
7
+ import { readBuiltManifest } from '@sanity/workbench-cli/build';
7
8
  import { parse as semverParse } from 'semver';
8
9
  import { StudioBuildTrace } from '../../telemetry/build.telemetry.js';
9
10
  import { formatModuleSizes, sortModulesBySize } from '../../util/moduleFormatUtils.js';
@@ -94,7 +95,9 @@ import { resolveVendorBuildConfig } from './resolveVendorBuildConfig.js';
94
95
  mismatched,
95
96
  versionMismatchWarning
96
97
  });
97
- if (stopBuild) return;
98
+ if (stopBuild) return {
99
+ mfManifest: undefined
100
+ };
98
101
  } else {
99
102
  // if non-interactive or unattended, just show the warning
100
103
  onVersionMismatchInNonInteractiveAutoUpdate({
@@ -174,6 +177,7 @@ import { resolveVendorBuildConfig } from './resolveVendorBuildConfig.js';
174
177
  vite,
175
178
  workbenchAppId: options.workbenchAppId
176
179
  });
180
+ const mfManifest = options.isWorkbenchApp ? await readBuiltManifest(outputDir) : undefined;
177
181
  trace.log({
178
182
  outputSize: bundle.chunks.flatMap((chunk)=>chunk.modules.flatMap((mod)=>mod.renderedLength)).reduce((sum, n)=>sum + n, 0)
179
183
  });
@@ -186,6 +190,9 @@ import { resolveVendorBuildConfig } from './resolveVendorBuildConfig.js';
186
190
  output.log('\nLargest module files:');
187
191
  output.log(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15)));
188
192
  }
193
+ return {
194
+ mfManifest
195
+ };
189
196
  } catch (error) {
190
197
  trace.error(error);
191
198
  const message = error instanceof Error ? error.message : String(error);
@@ -195,7 +202,9 @@ import { resolveVendorBuildConfig } from './resolveVendorBuildConfig.js';
195
202
  onBuildFail({
196
203
  message: `Failed to build Sanity Studio: ${message}`
197
204
  });
198
- return;
205
+ return {
206
+ mfManifest: undefined
207
+ };
199
208
  }
200
209
  }
201
210
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/build/buildStudio.ts"],"sourcesContent":["import {rm} from 'node:fs/promises'\nimport path from 'node:path'\n\nimport {getLocalPackageVersion} from '@sanity/cli-core/package-manager'\nimport {getCliTelemetry} from '@sanity/cli-core/telemetry'\nimport {type CliConfig, type Output, type UserViteConfig} from '@sanity/cli-core/types'\nimport {isInteractive} from '@sanity/cli-core/util'\nimport {getTimer, logSymbols} from '@sanity/cli-core/ux'\nimport {type WorkbenchExposes} from '@sanity/workbench-cli/build'\nimport {parse as semverParse} from 'semver'\n\nimport {StudioBuildTrace} from '../../telemetry/build.telemetry.js'\nimport {\n CompareDependencyVersions,\n CompareDependencyVersionsResult,\n} from '../../util/compareDependencyVersions.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {buildDebug} from './buildDebug.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {checkRequiredDependencies} from './checkRequiredDependencies.js'\nimport {checkStudioDependencyVersions} from './checkStudioDependencyVersions.js'\nimport {type BuildEventListener, type MessageFunc} from './eventListener.js'\nimport {getAutoUpdatesCssUrls, getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {getStudioEnvironmentVariables} from './getEnvironmentVariables.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {resolveVendorBuildConfig} from './resolveVendorBuildConfig.js'\n\nexport interface BuildStudioEventListener extends BuildEventListener {\n onBuildEnd: MessageFunc\n onBuildFail: MessageFunc\n onBuildStart: MessageFunc\n onCleanOutputDirEnd: MessageFunc\n onCleanOutputDirStart: MessageFunc\n onIncompatibleDeclaredStyledComponentsVersionRange: MessageFunc\n onIncompatibleInstalledStyledComponentsVersionRange: MessageFunc\n onInteractiveNonDefaultOutputDir({message}: {message: string}): Promise<{shouldClean: boolean}>\n onInvalidStyledComponentsVersionRange: MessageFunc\n onNoDeclaredStyledComponentsVersion: MessageFunc\n onNoInstalledSanityVersion: MessageFunc\n onNoInstalledStyledComponentsVersion: MessageFunc\n onVersionMismatchInInteractiveAutoUpdate(params: {\n mismatched: CompareDependencyVersions[]\n versionMismatchWarning: string\n }): Promise<{stopBuild: boolean}>\n onVersionMismatchInNonInteractiveAutoUpdate(params: {versionMismatchWarning: string}): void\n}\n\nexport interface BuildOptions {\n appId: string | undefined\n autoUpdatesEnabled: boolean\n checkAppId: () => void\n compareDependencyVersions: (\n packages: {name: string; version: string}[],\n ) => Promise<CompareDependencyVersionsResult>\n determineBasePath: () => string\n eventListener: Partial<BuildStudioEventListener>\n isApp: boolean\n isWorkbenchApp: boolean\n minify: boolean\n outDir: string | undefined\n output: Output\n reactCompiler: boolean | CliConfig['reactCompiler'] | undefined\n schemaExtraction: CliConfig['schemaExtraction']\n sourceMap: boolean\n stats: boolean\n unattendedMode: boolean\n vite: UserViteConfig | undefined\n workDir: string\n\n exposes?: WorkbenchExposes\n /**\n * The build is running under Sanity Blueprints (invoked programmatically by\n * `@sanity/runtime-cli`), so emit the statically-imported resource-bindings\n * module Brett rewrites at deploy. Defaults to `false`, so a normal\n * `sanity build`/`dev`/`preview` never emits it.\n */\n isBlueprints?: boolean\n\n /** The workbench app's bus identity (`__SANITY_APP_ID__`). */\n workbenchAppId?: string\n}\n\n/**\n * Internal build studio that avoids depending on flags for CLI config.\n * @param options - options for the build\n */\nexport async function buildStudio(options: BuildOptions): Promise<void> {\n buildDebug(`Building studio`)\n\n const timer = getTimer()\n const {\n appId,\n determineBasePath,\n eventListener,\n exposes,\n isApp,\n minify,\n outDir,\n output,\n reactCompiler,\n schemaExtraction,\n sourceMap,\n stats,\n unattendedMode,\n vite,\n workDir,\n } = options\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n await checkStudioDependencyVersions(workDir, output)\n\n // If the check resulted in a dependency install, the CLI command will be re-run,\n // thus we want to exit early\n const {installedSanityVersion} = await checkRequiredDependencies({\n isApp,\n workDir,\n\n ...eventListener,\n })\n\n let autoUpdatesEnabled = options.autoUpdatesEnabled\n\n let autoUpdatesImports = {}\n let autoUpdatesCssUrls: string[] = []\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSanityVersion = semverParse(installedSanityVersion)?.version\n if (!cleanSanityVersion) {\n throw new Error(`Failed to parse installed Sanity version: ${installedSanityVersion}`)\n }\n\n output.log(`${logSymbols.info} Building with auto-updates enabled`)\n\n // Warn if auto updates enabled but no appId configured\n options.checkAppId()\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} =\n await options.compareDependencyVersions(sanityDependencies)\n\n if (unresolvedPrerelease.length > 0) {\n await handlePrereleaseVersions({\n unattendedMode,\n unresolvedPrerelease,\n\n ...eventListener,\n })\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 const {\n onVersionMismatchInInteractiveAutoUpdate = () => ({stopBuild: true}),\n onVersionMismatchInNonInteractiveAutoUpdate = () => {},\n } = eventListener\n\n // If it is non-interactive or in unattended mode, we don't want to prompt\n if (isInteractive() && !unattendedMode) {\n const {stopBuild} = await onVersionMismatchInInteractiveAutoUpdate({\n mismatched,\n versionMismatchWarning,\n })\n if (stopBuild) return\n } else {\n // if non-interactive or unattended, just show the warning\n onVersionMismatchInNonInteractiveAutoUpdate({versionMismatchWarning})\n }\n }\n }\n\n const envVarKeys = Object.keys(getStudioEnvironmentVariables())\n if (envVarKeys.length > 0) {\n output.log('\\nIncluding the following environment variables as part of the JavaScript bundle:')\n for (const key of envVarKeys) {\n output.log(`- ${key}`)\n }\n output.log('')\n }\n\n let shouldClean = true\n if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {\n const {onInteractiveNonDefaultOutputDir = () => ({shouldClean: true})} = eventListener\n ;({shouldClean} = await onInteractiveNonDefaultOutputDir({\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 if (shouldClean) {\n const {onCleanOutputDirEnd = () => {}, onCleanOutputDirStart = () => {}} = eventListener\n timer.start('cleanOutputFolder')\n onCleanOutputDirStart({message: 'Clean output folder'})\n\n await rm(outputDir, {force: true, recursive: true})\n const cleanDuration = timer.end('cleanOutputFolder')\n\n onCleanOutputDirEnd({\n message: `Clean output folder (${cleanDuration.toFixed(0)}ms)`,\n })\n }\n\n const {onBuildEnd = () => {}, onBuildFail = () => {}, onBuildStart = () => {}} = eventListener\n\n onBuildStart({message: `Build Sanity Studio`})\n\n const trace = getCliTelemetry().trace(StudioBuildTrace)\n trace.start()\n\n let autoUpdates\n if (autoUpdatesEnabled && !options.isWorkbenchApp) {\n autoUpdates = {\n cssUrls: autoUpdatesCssUrls,\n imports: autoUpdatesImports,\n vendor: await resolveVendorBuildConfig({cwd: workDir, isApp: false}),\n }\n }\n\n try {\n timer.start('bundleStudio')\n\n const bundle = await buildStaticFiles({\n autoUpdates,\n basePath,\n cwd: workDir,\n exposes,\n isBlueprints: options.isBlueprints,\n isWorkbenchApp: options.isWorkbenchApp,\n minify,\n outputDir,\n reactCompiler,\n schemaExtraction,\n sourceMap,\n vite,\n workbenchAppId: options.workbenchAppId,\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 onBuildEnd({message: `Build Sanity Studio (${buildDuration.toFixed(0)}ms)`})\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 trace.error(error)\n const message = error instanceof Error ? error.message : String(error)\n buildDebug(`Failed to build Sanity Studio`, {error})\n onBuildFail({message: `Failed to build Sanity Studio: ${message}`})\n return\n }\n}\n"],"names":["rm","path","getLocalPackageVersion","getCliTelemetry","isInteractive","getTimer","logSymbols","parse","semverParse","StudioBuildTrace","formatModuleSizes","sortModulesBySize","buildDebug","buildStaticFiles","checkRequiredDependencies","checkStudioDependencyVersions","getAutoUpdatesCssUrls","getAutoUpdatesImportMap","getStudioEnvironmentVariables","handlePrereleaseVersions","resolveVendorBuildConfig","buildStudio","options","timer","appId","determineBasePath","eventListener","exposes","isApp","minify","outDir","output","reactCompiler","schemaExtraction","sourceMap","stats","unattendedMode","vite","workDir","defaultOutputDir","resolve","join","outputDir","installedSanityVersion","autoUpdatesEnabled","autoUpdatesImports","autoUpdatesCssUrls","cleanSanityVersion","version","Error","log","info","checkAppId","installedVisionVersion","cleanVisionVersion","undefined","sanityDependencies","cssFile","name","mismatched","unresolvedPrerelease","compareDependencyVersions","length","versionMismatchWarning","map","mod","pkg","installed","remote","onVersionMismatchInInteractiveAutoUpdate","stopBuild","onVersionMismatchInNonInteractiveAutoUpdate","envVarKeys","Object","keys","key","shouldClean","onInteractiveNonDefaultOutputDir","message","basePath","enabled","onCleanOutputDirEnd","onCleanOutputDirStart","start","force","recursive","cleanDuration","end","toFixed","onBuildEnd","onBuildFail","onBuildStart","trace","autoUpdates","isWorkbenchApp","cssUrls","imports","vendor","cwd","bundle","isBlueprints","workbenchAppId","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","complete","slice","error","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'\n\nimport {getLocalPackageVersion} from '@sanity/cli-core/package-manager'\nimport {getCliTelemetry} from '@sanity/cli-core/telemetry'\nimport {type CliConfig, type Output, type UserViteConfig} from '@sanity/cli-core/types'\nimport {isInteractive} from '@sanity/cli-core/util'\nimport {getTimer, logSymbols} from '@sanity/cli-core/ux'\nimport {readBuiltManifest, type WorkbenchExposes} from '@sanity/workbench-cli/build'\nimport {parse as semverParse} from 'semver'\n\nimport {StudioBuildTrace} from '../../telemetry/build.telemetry.js'\nimport {\n CompareDependencyVersions,\n CompareDependencyVersionsResult,\n} from '../../util/compareDependencyVersions.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {buildDebug} from './buildDebug.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {checkRequiredDependencies} from './checkRequiredDependencies.js'\nimport {checkStudioDependencyVersions} from './checkStudioDependencyVersions.js'\nimport {type BuildEventListener, type MessageFunc} from './eventListener.js'\nimport {getAutoUpdatesCssUrls, getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {getStudioEnvironmentVariables} from './getEnvironmentVariables.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {resolveVendorBuildConfig} from './resolveVendorBuildConfig.js'\n\nexport interface BuildStudioEventListener extends BuildEventListener {\n onBuildEnd: MessageFunc\n onBuildFail: MessageFunc\n onBuildStart: MessageFunc\n onCleanOutputDirEnd: MessageFunc\n onCleanOutputDirStart: MessageFunc\n onIncompatibleDeclaredStyledComponentsVersionRange: MessageFunc\n onIncompatibleInstalledStyledComponentsVersionRange: MessageFunc\n onInteractiveNonDefaultOutputDir({message}: {message: string}): Promise<{shouldClean: boolean}>\n onInvalidStyledComponentsVersionRange: MessageFunc\n onNoDeclaredStyledComponentsVersion: MessageFunc\n onNoInstalledSanityVersion: MessageFunc\n onNoInstalledStyledComponentsVersion: MessageFunc\n onVersionMismatchInInteractiveAutoUpdate(params: {\n mismatched: CompareDependencyVersions[]\n versionMismatchWarning: string\n }): Promise<{stopBuild: boolean}>\n onVersionMismatchInNonInteractiveAutoUpdate(params: {versionMismatchWarning: string}): void\n}\n\nexport interface BuildOptions {\n appId: string | undefined\n autoUpdatesEnabled: boolean\n checkAppId: () => void\n compareDependencyVersions: (\n packages: {name: string; version: string}[],\n ) => Promise<CompareDependencyVersionsResult>\n determineBasePath: () => string\n eventListener: Partial<BuildStudioEventListener>\n isApp: boolean\n isWorkbenchApp: boolean\n minify: boolean\n outDir: string | undefined\n output: Output\n reactCompiler: boolean | CliConfig['reactCompiler'] | undefined\n schemaExtraction: CliConfig['schemaExtraction']\n sourceMap: boolean\n stats: boolean\n unattendedMode: boolean\n vite: UserViteConfig | undefined\n workDir: string\n\n exposes?: WorkbenchExposes\n /**\n * The build is running under Sanity Blueprints (invoked programmatically by\n * `@sanity/runtime-cli`), so emit the statically-imported resource-bindings\n * module Brett rewrites at deploy. Defaults to `false`, so a normal\n * `sanity build`/`dev`/`preview` never emits it.\n */\n isBlueprints?: boolean\n\n /** The workbench app's bus identity (`__SANITY_APP_ID__`). */\n workbenchAppId?: string\n}\n\n/**\n * Internal build studio that avoids depending on flags for CLI config.\n * @param options - options for the build\n */\nexport async function buildStudio(\n options: BuildOptions,\n): Promise<{mfManifest: Record<string, unknown> | undefined}> {\n buildDebug(`Building studio`)\n\n const timer = getTimer()\n const {\n appId,\n determineBasePath,\n eventListener,\n exposes,\n isApp,\n minify,\n outDir,\n output,\n reactCompiler,\n schemaExtraction,\n sourceMap,\n stats,\n unattendedMode,\n vite,\n workDir,\n } = options\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n await checkStudioDependencyVersions(workDir, output)\n\n // If the check resulted in a dependency install, the CLI command will be re-run,\n // thus we want to exit early\n const {installedSanityVersion} = await checkRequiredDependencies({\n isApp,\n workDir,\n\n ...eventListener,\n })\n\n let autoUpdatesEnabled = options.autoUpdatesEnabled\n\n let autoUpdatesImports = {}\n let autoUpdatesCssUrls: string[] = []\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSanityVersion = semverParse(installedSanityVersion)?.version\n if (!cleanSanityVersion) {\n throw new Error(`Failed to parse installed Sanity version: ${installedSanityVersion}`)\n }\n\n output.log(`${logSymbols.info} Building with auto-updates enabled`)\n\n // Warn if auto updates enabled but no appId configured\n options.checkAppId()\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} =\n await options.compareDependencyVersions(sanityDependencies)\n\n if (unresolvedPrerelease.length > 0) {\n await handlePrereleaseVersions({\n unattendedMode,\n unresolvedPrerelease,\n\n ...eventListener,\n })\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 const {\n onVersionMismatchInInteractiveAutoUpdate = () => ({stopBuild: true}),\n onVersionMismatchInNonInteractiveAutoUpdate = () => {},\n } = eventListener\n\n // If it is non-interactive or in unattended mode, we don't want to prompt\n if (isInteractive() && !unattendedMode) {\n const {stopBuild} = await onVersionMismatchInInteractiveAutoUpdate({\n mismatched,\n versionMismatchWarning,\n })\n if (stopBuild) return {mfManifest: undefined}\n } else {\n // if non-interactive or unattended, just show the warning\n onVersionMismatchInNonInteractiveAutoUpdate({versionMismatchWarning})\n }\n }\n }\n\n const envVarKeys = Object.keys(getStudioEnvironmentVariables())\n if (envVarKeys.length > 0) {\n output.log('\\nIncluding the following environment variables as part of the JavaScript bundle:')\n for (const key of envVarKeys) {\n output.log(`- ${key}`)\n }\n output.log('')\n }\n\n let shouldClean = true\n if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {\n const {onInteractiveNonDefaultOutputDir = () => ({shouldClean: true})} = eventListener\n ;({shouldClean} = await onInteractiveNonDefaultOutputDir({\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 if (shouldClean) {\n const {onCleanOutputDirEnd = () => {}, onCleanOutputDirStart = () => {}} = eventListener\n timer.start('cleanOutputFolder')\n onCleanOutputDirStart({message: 'Clean output folder'})\n\n await rm(outputDir, {force: true, recursive: true})\n const cleanDuration = timer.end('cleanOutputFolder')\n\n onCleanOutputDirEnd({\n message: `Clean output folder (${cleanDuration.toFixed(0)}ms)`,\n })\n }\n\n const {onBuildEnd = () => {}, onBuildFail = () => {}, onBuildStart = () => {}} = eventListener\n\n onBuildStart({message: `Build Sanity Studio`})\n\n const trace = getCliTelemetry().trace(StudioBuildTrace)\n trace.start()\n\n let autoUpdates\n if (autoUpdatesEnabled && !options.isWorkbenchApp) {\n autoUpdates = {\n cssUrls: autoUpdatesCssUrls,\n imports: autoUpdatesImports,\n vendor: await resolveVendorBuildConfig({cwd: workDir, isApp: false}),\n }\n }\n\n try {\n timer.start('bundleStudio')\n\n const bundle = await buildStaticFiles({\n autoUpdates,\n basePath,\n cwd: workDir,\n exposes,\n isBlueprints: options.isBlueprints,\n isWorkbenchApp: options.isWorkbenchApp,\n minify,\n outputDir,\n reactCompiler,\n schemaExtraction,\n sourceMap,\n vite,\n workbenchAppId: options.workbenchAppId,\n })\n const mfManifest = options.isWorkbenchApp ? await readBuiltManifest(outputDir) : undefined\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 onBuildEnd({message: `Build Sanity Studio (${buildDuration.toFixed(0)}ms)`})\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 return {mfManifest}\n } catch (error) {\n trace.error(error)\n const message = error instanceof Error ? error.message : String(error)\n buildDebug(`Failed to build Sanity Studio`, {error})\n onBuildFail({message: `Failed to build Sanity Studio: ${message}`})\n return {mfManifest: undefined}\n }\n}\n"],"names":["rm","path","getLocalPackageVersion","getCliTelemetry","isInteractive","getTimer","logSymbols","readBuiltManifest","parse","semverParse","StudioBuildTrace","formatModuleSizes","sortModulesBySize","buildDebug","buildStaticFiles","checkRequiredDependencies","checkStudioDependencyVersions","getAutoUpdatesCssUrls","getAutoUpdatesImportMap","getStudioEnvironmentVariables","handlePrereleaseVersions","resolveVendorBuildConfig","buildStudio","options","timer","appId","determineBasePath","eventListener","exposes","isApp","minify","outDir","output","reactCompiler","schemaExtraction","sourceMap","stats","unattendedMode","vite","workDir","defaultOutputDir","resolve","join","outputDir","installedSanityVersion","autoUpdatesEnabled","autoUpdatesImports","autoUpdatesCssUrls","cleanSanityVersion","version","Error","log","info","checkAppId","installedVisionVersion","cleanVisionVersion","undefined","sanityDependencies","cssFile","name","mismatched","unresolvedPrerelease","compareDependencyVersions","length","versionMismatchWarning","map","mod","pkg","installed","remote","onVersionMismatchInInteractiveAutoUpdate","stopBuild","onVersionMismatchInNonInteractiveAutoUpdate","mfManifest","envVarKeys","Object","keys","key","shouldClean","onInteractiveNonDefaultOutputDir","message","basePath","enabled","onCleanOutputDirEnd","onCleanOutputDirStart","start","force","recursive","cleanDuration","end","toFixed","onBuildEnd","onBuildFail","onBuildStart","trace","autoUpdates","isWorkbenchApp","cssUrls","imports","vendor","cwd","bundle","isBlueprints","workbenchAppId","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","complete","slice","error","String"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/manifest/types.ts"],"sourcesContent":["import {type SanityDocumentLike} from '@sanity/types'\nimport {type MediaLibraryConfig} from 'sanity'\nimport {z} from 'zod/mini'\n\nexport const SANITY_WORKSPACE_SCHEMA_ID_PREFIX = '_.schemas'\nexport const CURRENT_WORKSPACE_SCHEMA_VERSION = '2025-05-01'\n\nexport type ManifestSerializable =\n | boolean\n | ManifestSerializable[]\n | number\n | string\n | {[k: string]: ManifestSerializable}\n\nexport interface CreateManifest {\n createdAt: string\n studioVersion: string | null\n version: number\n workspaces: ManifestWorkspaceFile[]\n}\n\n// The studio/app manifest contract lives in `@sanity/cli-core` so the CLI and\n// the workbench dev-server registry validate against the same schemas without\n// depending on each other.\nexport {type CoreAppManifest, coreAppManifestSchema, type StudioManifest} from '@sanity/cli-core'\n\nexport interface ManifestWorkspaceFile extends Omit<CreateWorkspaceManifest, 'schema' | 'tools'> {\n schema: string // filename\n tools: string // filename\n}\n\nexport interface CreateWorkspaceManifest {\n basePath: string\n dataset: string\n /**\n * returns null in the case of the icon not being able to be stringified\n */\n icon: string | null\n name: string\n projectId: string\n schema: ManifestSchemaType[]\n tools: ManifestTool[]\n\n mediaLibrary?: MediaLibraryConfig\n subtitle?: string\n title?: string\n}\n\nexport interface ManifestSchemaType {\n name: string\n type: string\n\n deprecated?: {\n reason: string\n }\n fields?: ManifestField[]\n fieldsets?: ManifestFieldset[]\n hidden?: 'conditional' | boolean\n lists?: ManifestTitledValue[]\n //portable text\n marks?: {\n annotations?: ManifestArrayMember[]\n decorators?: ManifestTitledValue[]\n }\n of?: ManifestArrayMember[]\n options?: Record<string, ManifestSerializable>\n preview?: {\n select: Record<string, string>\n }\n readOnly?: 'conditional' | boolean\n styles?: ManifestTitledValue[]\n title?: string\n to?: ManifestReferenceMember[]\n validation?: ManifestValidationGroup[]\n\n // userland (assignable to ManifestSerializable | undefined)\n // not included to add some typesafty to extractManifest\n // [index: string]: unknown\n}\n\nexport interface ManifestFieldset {\n [index: string]: ManifestSerializable | undefined\n name: string\n\n title?: string\n}\n\nexport interface ManifestTitledValue {\n value: string\n\n title?: string\n}\n\ntype ManifestArrayMember = Omit<ManifestSchemaType, 'name'> & {name?: string}\ntype ManifestReferenceMember = Omit<ManifestSchemaType, 'name'> & {name?: string}\nexport type ManifestField = ManifestSchemaType & {fieldset?: string}\n\nexport interface ManifestValidationGroup {\n rules: ManifestValidationRule[]\n\n level?: 'error' | 'info' | 'warning'\n message?: string\n}\n\nexport type ManifestValidationRule = {\n [index: string]: ManifestSerializable | undefined\n constraint?: ManifestSerializable\n flag: string\n}\n\nexport interface ManifestTool {\n /**\n * returns null in the case of the icon not being able to be stringified\n */\n icon: string | null\n name: string\n title: string\n type: string | null\n}\n\nexport type DefaultWorkspaceSchemaId = `${typeof SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.${string}`\ntype PrefixedWorkspaceSchemaId = `${DefaultWorkspaceSchemaId}.${string}`\nexport type WorkspaceSchemaId = DefaultWorkspaceSchemaId | PrefixedWorkspaceSchemaId\n\nexport interface StoredWorkspaceSchema extends SanityDocumentLike {\n _id: WorkspaceSchemaId\n _type: 'system.schema'\n /**\n * The API expects JSON coming in, but will store a string to save on attribute paths.\n * Consumers must use JSON.parse on the value, but we deploy to the API using ManifestSchemaType[]\n */\n schema: ManifestSchemaType[] | string\n /* api-like version string: date at which the format had a meaningful change */\n version: typeof CURRENT_WORKSPACE_SCHEMA_VERSION | undefined\n workspace: {\n name: string\n title?: string\n }\n\n tag?: string\n}\n\nexport const extractManifestWorkerData = z.object({configPath: z.string(), workDir: z.string()})\n\nexport type ExtractManifestWorkerData = z.infer<typeof extractManifestWorkerData>\n"],"names":["z","SANITY_WORKSPACE_SCHEMA_ID_PREFIX","CURRENT_WORKSPACE_SCHEMA_VERSION","coreAppManifestSchema","extractManifestWorkerData","object","configPath","string","workDir"],"mappings":"AAEA,SAAQA,CAAC,QAAO,WAAU;AAE1B,OAAO,MAAMC,oCAAoC,YAAW;AAC5D,OAAO,MAAMC,mCAAmC,aAAY;AAgB5D,8EAA8E;AAC9E,8EAA8E;AAC9E,2BAA2B;AAC3B,SAA8BC,qBAAqB,QAA4B,mBAAkB;AAsHjG,OAAO,MAAMC,4BAA4BJ,EAAEK,MAAM,CAAC;IAACC,YAAYN,EAAEO,MAAM;IAAIC,SAASR,EAAEO,MAAM;AAAE,GAAE"}
1
+ {"version":3,"sources":["../../../src/actions/manifest/types.ts"],"sourcesContent":["import {type SanityDocumentLike} from '@sanity/types'\nimport {type MediaLibraryConfig} from 'sanity'\nimport {z} from 'zod/mini'\n\nexport const SANITY_WORKSPACE_SCHEMA_ID_PREFIX = '_.schemas'\nexport const CURRENT_WORKSPACE_SCHEMA_VERSION = '2025-05-01'\n\nexport type ManifestSerializable =\n | boolean\n | ManifestSerializable[]\n | number\n | string\n | {[k: string]: ManifestSerializable}\n\nexport interface CreateManifest {\n createdAt: string\n studioVersion: string | null\n version: number\n workspaces: ManifestWorkspaceFile[]\n}\n\n// The studio/app manifest contract lives in `@sanity/cli-core` so the CLI and\n// the workbench dev-server registry validate against the same schemas without\n// depending on each other.\nexport {type CoreAppManifest, coreAppManifestSchema, type StudioManifest} from '@sanity/cli-core'\n\nexport interface ManifestWorkspaceFile extends Omit<CreateWorkspaceManifest, 'schema' | 'tools'> {\n schema: string // filename\n tools: string // filename\n}\n\nexport interface CreateWorkspaceManifest {\n basePath: string\n dataset: string\n /**\n * returns null in the case of the icon not being able to be stringified\n */\n icon: string | null\n name: string\n projectId: string\n schema: ManifestSchemaType[]\n tools: ManifestTool[]\n\n mediaLibrary?: MediaLibraryConfig\n subtitle?: string\n title?: string\n}\n\nexport interface ManifestSchemaType {\n name: string\n type: string\n\n deprecated?: {\n reason: string\n }\n fields?: ManifestField[]\n fieldsets?: ManifestFieldset[]\n hidden?: 'conditional' | boolean\n lists?: ManifestTitledValue[]\n //portable text\n marks?: {\n annotations?: ManifestArrayMember[]\n decorators?: ManifestTitledValue[]\n }\n of?: ManifestArrayMember[]\n options?: Record<string, ManifestSerializable>\n preview?: {\n select: Record<string, string>\n }\n readOnly?: 'conditional' | boolean\n styles?: ManifestTitledValue[]\n title?: string\n to?: ManifestReferenceMember[]\n validation?: ManifestValidationGroup[]\n\n // userland (assignable to ManifestSerializable | undefined)\n // not included to add some typesafty to extractManifest\n // [index: string]: unknown\n}\n\nexport interface ManifestFieldset {\n [index: string]: ManifestSerializable | undefined\n name: string\n\n title?: string\n}\n\nexport interface ManifestTitledValue {\n value: string\n\n title?: string\n}\n\ntype ManifestArrayMember = Omit<ManifestSchemaType, 'name'> & {name?: string}\ntype ManifestReferenceMember = Omit<ManifestSchemaType, 'name'> & {name?: string}\nexport type ManifestField = ManifestSchemaType & {fieldset?: string}\n\nexport interface ManifestValidationGroup {\n rules: ManifestValidationRule[]\n\n level?: 'error' | 'info' | 'warning'\n message?: string\n}\n\nexport type ManifestValidationRule = {\n [index: string]: ManifestSerializable | undefined\n constraint?: ManifestSerializable\n flag: string\n}\n\nexport interface ManifestTool {\n /**\n * returns null in the case of the icon not being able to be stringified\n */\n icon: string | null\n name: string\n title: string\n type: string | null\n}\n\nexport type DefaultWorkspaceSchemaId = `${typeof SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.${string}`\ntype PrefixedWorkspaceSchemaId = `${DefaultWorkspaceSchemaId}.${string}`\nexport type WorkspaceSchemaId = DefaultWorkspaceSchemaId | PrefixedWorkspaceSchemaId\n\nexport interface StoredWorkspaceSchema extends SanityDocumentLike {\n _id: WorkspaceSchemaId\n _type: 'system.schema'\n /**\n * The API expects JSON coming in, but will store a string to save on attribute paths.\n * Consumers must use JSON.parse on the value, but we deploy to the API using ManifestSchemaType[]\n */\n schema: ManifestSchemaType[] | string\n /* api-like version string: date at which the format had a meaningful change */\n version: typeof CURRENT_WORKSPACE_SCHEMA_VERSION | undefined\n workspace: {\n name: string\n title?: string\n }\n\n tag?: string\n}\n\nexport const extractManifestWorkerData = z.object({configPath: z.string(), workDir: z.string()})\n\nexport type ExtractManifestWorkerData = z.infer<typeof extractManifestWorkerData>\n\n/**\n * Workspace metadata + pre-extracted manifest schema for deployment.\n * The schema must already be in ManifestSchemaType[] format (extracted from\n * the live Schema object before any structured clone boundary).\n */\nexport interface WorkspaceSchemaInput {\n dataset: string\n manifestSchema: ManifestSchemaType[]\n name: string\n projectId: string\n\n title?: string\n}\n"],"names":["z","SANITY_WORKSPACE_SCHEMA_ID_PREFIX","CURRENT_WORKSPACE_SCHEMA_VERSION","coreAppManifestSchema","extractManifestWorkerData","object","configPath","string","workDir"],"mappings":"AAEA,SAAQA,CAAC,QAAO,WAAU;AAE1B,OAAO,MAAMC,oCAAoC,YAAW;AAC5D,OAAO,MAAMC,mCAAmC,aAAY;AAgB5D,8EAA8E;AAC9E,8EAA8E;AAC9E,2BAA2B;AAC3B,SAA8BC,qBAAqB,QAA4B,mBAAkB;AAsHjG,OAAO,MAAMC,4BAA4BJ,EAAEK,MAAM,CAAC;IAACC,YAAYN,EAAEO,MAAM;IAAIC,SAASR,EAAEO,MAAM;AAAE,GAAE"}
@@ -7,7 +7,7 @@ const debug = subdebug('buildStudioSchemasAndManifests');
7
7
  * 2. Uploads the schema to lexicon
8
8
  * 3. Creates a studio manifest (which can be sent to populus)
9
9
  */ export async function buildStudioSchemasAndManifests(applicationId, options) {
10
- const { configPath, isExternal, outPath, projectId, verbose, workDir } = options;
10
+ const { configPath, isExternal, outPath, projectId, schemaRequired, verbose, workDir } = options;
11
11
  const trace = getCliTelemetry().trace(SchemaBuild, {
12
12
  // If the studio is externally hosted, we don't need to extract the manifest
13
13
  extractManifest: !isExternal,
@@ -31,6 +31,7 @@ const debug = subdebug('buildStudioSchemasAndManifests');
31
31
  isExternal,
32
32
  outPath,
33
33
  projectId,
34
+ schemaRequired,
34
35
  verbose,
35
36
  workDir
36
37
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/schema/buildStudioSchemasAndManifests.ts"],"sourcesContent":["import {getCliTelemetry, studioWorkerTask, subdebug} from '@sanity/cli-core'\nimport {type SchemaValidationProblemGroup} from '@sanity/types'\nimport {type StudioManifest} from 'sanity'\n\nimport {SchemaBuild} from '../../telemetry/extractSchema.telemetry.js'\nimport {CreateWorkspaceManifest} from '../manifest/types.js'\nimport {type BuildStudioSchemasAndManifestsWorkerData} from './types.js'\nimport {SchemaExtractionError} from './utils/SchemaExtractionError.js'\n\nexport type BuildStudioSchemasAndManifestsWorkerSuccess = {\n studioManifest: StudioManifest | null\n type: 'success'\n workspaceManifests: CreateWorkspaceManifest[]\n}\ntype BuildStudioSchemasAndManifestsWorkerError = {\n error: string\n type: 'error'\n validation?: SchemaValidationProblemGroup[]\n}\nexport type BuildStudioSchemasAndManifestsWorkerMessage =\n | BuildStudioSchemasAndManifestsWorkerError\n | BuildStudioSchemasAndManifestsWorkerSuccess\n\nconst debug = subdebug('buildStudioSchemasAndManifests')\n\n/**\n * 1. Extracts the create manifest in dist/static (tar/gzipped with studio)\n * 2. Uploads the schema to lexicon\n * 3. Creates a studio manifest (which can be sent to populus)\n */\nexport async function buildStudioSchemasAndManifests(\n applicationId: string,\n options: BuildStudioSchemasAndManifestsWorkerData,\n): Promise<BuildStudioSchemasAndManifestsWorkerSuccess> {\n const {configPath, isExternal, outPath, projectId, verbose, workDir} = options\n\n const trace = getCliTelemetry().trace(SchemaBuild, {\n // If the studio is externally hosted, we don't need to extract the manifest\n extractManifest: !isExternal,\n manifestDir: outPath,\n })\n\n try {\n trace.start()\n const result = await studioWorkerTask<BuildStudioSchemasAndManifestsWorkerMessage>(\n new URL('buildStudioSchemasAndManifests.worker.js', import.meta.url),\n {\n applicationId,\n env: {\n ...process.env,\n // Workers don't inherit TTY state — propagate color support from parent\n ...(process.stdout.isTTY && !process.env.NO_COLOR ? {FORCE_COLOR: '1'} : {}),\n },\n name: 'buildStudioSchemasAndManifests',\n studioRootPath: workDir,\n workerData: {\n configPath,\n isExternal,\n outPath,\n projectId,\n verbose,\n workDir,\n } satisfies BuildStudioSchemasAndManifestsWorkerData,\n },\n )\n\n debug('Result %o', result)\n\n // If the schema is required, we throw an error\n if (result.type === 'error') {\n throw new SchemaExtractionError(result.error, result.validation)\n }\n\n trace.complete()\n return result\n } catch (err) {\n trace.error(err)\n throw err\n }\n}\n"],"names":["getCliTelemetry","studioWorkerTask","subdebug","SchemaBuild","SchemaExtractionError","debug","buildStudioSchemasAndManifests","applicationId","options","configPath","isExternal","outPath","projectId","verbose","workDir","trace","extractManifest","manifestDir","start","result","URL","url","env","process","stdout","isTTY","NO_COLOR","FORCE_COLOR","name","studioRootPath","workerData","type","error","validation","complete","err"],"mappings":"AAAA,SAAQA,eAAe,EAAEC,gBAAgB,EAAEC,QAAQ,QAAO,mBAAkB;AAI5E,SAAQC,WAAW,QAAO,6CAA4C;AAGtE,SAAQC,qBAAqB,QAAO,mCAAkC;AAgBtE,MAAMC,QAAQH,SAAS;AAEvB;;;;CAIC,GACD,OAAO,eAAeI,+BACpBC,aAAqB,EACrBC,OAAiD;IAEjD,MAAM,EAACC,UAAU,EAAEC,UAAU,EAAEC,OAAO,EAAEC,SAAS,EAAEC,OAAO,EAAEC,OAAO,EAAC,GAAGN;IAEvE,MAAMO,QAAQf,kBAAkBe,KAAK,CAACZ,aAAa;QACjD,4EAA4E;QAC5Ea,iBAAiB,CAACN;QAClBO,aAAaN;IACf;IAEA,IAAI;QACFI,MAAMG,KAAK;QACX,MAAMC,SAAS,MAAMlB,iBACnB,IAAImB,IAAI,4CAA4C,YAAYC,GAAG,GACnE;YACEd;YACAe,KAAK;gBACH,GAAGC,QAAQD,GAAG;gBACd,wEAAwE;gBACxE,GAAIC,QAAQC,MAAM,CAACC,KAAK,IAAI,CAACF,QAAQD,GAAG,CAACI,QAAQ,GAAG;oBAACC,aAAa;gBAAG,IAAI,CAAC,CAAC;YAC7E;YACAC,MAAM;YACNC,gBAAgBf;YAChBgB,YAAY;gBACVrB;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;YACF;QACF;QAGFT,MAAM,aAAac;QAEnB,+CAA+C;QAC/C,IAAIA,OAAOY,IAAI,KAAK,SAAS;YAC3B,MAAM,IAAI3B,sBAAsBe,OAAOa,KAAK,EAAEb,OAAOc,UAAU;QACjE;QAEAlB,MAAMmB,QAAQ;QACd,OAAOf;IACT,EAAE,OAAOgB,KAAK;QACZpB,MAAMiB,KAAK,CAACG;QACZ,MAAMA;IACR;AACF"}
1
+ {"version":3,"sources":["../../../src/actions/schema/buildStudioSchemasAndManifests.ts"],"sourcesContent":["import {getCliTelemetry, studioWorkerTask, subdebug} from '@sanity/cli-core'\nimport {type SchemaValidationProblemGroup} from '@sanity/types'\nimport {type StudioManifest} from 'sanity'\n\nimport {SchemaBuild} from '../../telemetry/extractSchema.telemetry.js'\nimport {WorkspaceSchemaInput} from '../manifest/types.js'\nimport {type BuildStudioSchemasAndManifestsWorkerData} from './types.js'\nimport {SchemaExtractionError} from './utils/SchemaExtractionError.js'\n\nexport type BuildStudioSchemasAndManifestsWorkerSuccess = {\n schemaInputs: WorkspaceSchemaInput[] | null\n studioManifest: StudioManifest | null\n type: 'success'\n}\ntype BuildStudioSchemasAndManifestsWorkerError = {\n error: string\n type: 'error'\n validation?: SchemaValidationProblemGroup[]\n}\nexport type BuildStudioSchemasAndManifestsWorkerMessage =\n | BuildStudioSchemasAndManifestsWorkerError\n | BuildStudioSchemasAndManifestsWorkerSuccess\n\nconst debug = subdebug('buildStudioSchemasAndManifests')\n\n/**\n * 1. Extracts the create manifest in dist/static (tar/gzipped with studio)\n * 2. Uploads the schema to lexicon\n * 3. Creates a studio manifest (which can be sent to populus)\n */\nexport async function buildStudioSchemasAndManifests(\n applicationId: string,\n options: BuildStudioSchemasAndManifestsWorkerData,\n): Promise<BuildStudioSchemasAndManifestsWorkerSuccess> {\n const {configPath, isExternal, outPath, projectId, schemaRequired, verbose, workDir} = options\n\n const trace = getCliTelemetry().trace(SchemaBuild, {\n // If the studio is externally hosted, we don't need to extract the manifest\n extractManifest: !isExternal,\n manifestDir: outPath,\n })\n\n try {\n trace.start()\n const result = await studioWorkerTask<BuildStudioSchemasAndManifestsWorkerMessage>(\n new URL('buildStudioSchemasAndManifests.worker.js', import.meta.url),\n {\n applicationId,\n env: {\n ...process.env,\n // Workers don't inherit TTY state — propagate color support from parent\n ...(process.stdout.isTTY && !process.env.NO_COLOR ? {FORCE_COLOR: '1'} : {}),\n },\n name: 'buildStudioSchemasAndManifests',\n studioRootPath: workDir,\n workerData: {\n configPath,\n isExternal,\n outPath,\n projectId,\n schemaRequired,\n verbose,\n workDir,\n } satisfies BuildStudioSchemasAndManifestsWorkerData,\n },\n )\n\n debug('Result %o', result)\n\n // If the schema is required, we throw an error\n if (result.type === 'error') {\n throw new SchemaExtractionError(result.error, result.validation)\n }\n\n trace.complete()\n return result\n } catch (err) {\n trace.error(err)\n throw err\n }\n}\n"],"names":["getCliTelemetry","studioWorkerTask","subdebug","SchemaBuild","SchemaExtractionError","debug","buildStudioSchemasAndManifests","applicationId","options","configPath","isExternal","outPath","projectId","schemaRequired","verbose","workDir","trace","extractManifest","manifestDir","start","result","URL","url","env","process","stdout","isTTY","NO_COLOR","FORCE_COLOR","name","studioRootPath","workerData","type","error","validation","complete","err"],"mappings":"AAAA,SAAQA,eAAe,EAAEC,gBAAgB,EAAEC,QAAQ,QAAO,mBAAkB;AAI5E,SAAQC,WAAW,QAAO,6CAA4C;AAGtE,SAAQC,qBAAqB,QAAO,mCAAkC;AAgBtE,MAAMC,QAAQH,SAAS;AAEvB;;;;CAIC,GACD,OAAO,eAAeI,+BACpBC,aAAqB,EACrBC,OAAiD;IAEjD,MAAM,EAACC,UAAU,EAAEC,UAAU,EAAEC,OAAO,EAAEC,SAAS,EAAEC,cAAc,EAAEC,OAAO,EAAEC,OAAO,EAAC,GAAGP;IAEvF,MAAMQ,QAAQhB,kBAAkBgB,KAAK,CAACb,aAAa;QACjD,4EAA4E;QAC5Ec,iBAAiB,CAACP;QAClBQ,aAAaP;IACf;IAEA,IAAI;QACFK,MAAMG,KAAK;QACX,MAAMC,SAAS,MAAMnB,iBACnB,IAAIoB,IAAI,4CAA4C,YAAYC,GAAG,GACnE;YACEf;YACAgB,KAAK;gBACH,GAAGC,QAAQD,GAAG;gBACd,wEAAwE;gBACxE,GAAIC,QAAQC,MAAM,CAACC,KAAK,IAAI,CAACF,QAAQD,GAAG,CAACI,QAAQ,GAAG;oBAACC,aAAa;gBAAG,IAAI,CAAC,CAAC;YAC7E;YACAC,MAAM;YACNC,gBAAgBf;YAChBgB,YAAY;gBACVtB;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;YACF;QACF;QAGFV,MAAM,aAAae;QAEnB,+CAA+C;QAC/C,IAAIA,OAAOY,IAAI,KAAK,SAAS;YAC3B,MAAM,IAAI5B,sBAAsBgB,OAAOa,KAAK,EAAEb,OAAOc,UAAU;QACjE;QAEAlB,MAAMmB,QAAQ;QACd,OAAOf;IACT,EAAE,OAAOgB,KAAK;QACZpB,MAAMiB,KAAK,CAACG;QACZ,MAAMA;IACR;AACF"}
@@ -1,8 +1,8 @@
1
1
  import { isMainThread, parentPort, workerData } from 'node:worker_threads';
2
2
  import { subdebug } from '@sanity/cli-core';
3
+ import { workerBuildStudioSchemasAndManifests } from './buildStudioSchemasAndManifestsWorker.js';
3
4
  import { buildStudioSchemasAndManifestsWorkerData } from './types.js';
4
5
  import { extractValidationFromSchemaError } from './utils/extractValidationFromSchemaError.js';
5
- import { workerBuildStudioSchemasAndManifests } from './workerBuildStudioSchemasAndManifests.js';
6
6
  const debug = subdebug('buildStudioSchemasAndManifests.worker');
7
7
  async function main() {
8
8
  if (isMainThread || !parentPort) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/schema/buildStudioSchemasAndManifests.worker.ts"],"sourcesContent":["import {isMainThread, parentPort, workerData} from 'node:worker_threads'\n\nimport {subdebug} from '@sanity/cli-core'\n\nimport {type BuildStudioSchemasAndManifestsWorkerMessage} from './buildStudioSchemasAndManifests.js'\nimport {buildStudioSchemasAndManifestsWorkerData} from './types.js'\nimport {extractValidationFromSchemaError} from './utils/extractValidationFromSchemaError.js'\nimport {workerBuildStudioSchemasAndManifests} from './workerBuildStudioSchemasAndManifests.js'\n\nconst debug = subdebug('buildStudioSchemasAndManifests.worker')\n\nasync function main() {\n if (isMainThread || !parentPort) {\n throw new Error('Should only be run in a worker!')\n }\n\n const options = buildStudioSchemasAndManifestsWorkerData.parse(workerData)\n\n try {\n const message = await workerBuildStudioSchemasAndManifests(options)\n\n parentPort.postMessage(message)\n } catch (error) {\n debug('Error deploying studio schemas and manifests', error)\n const validation = await extractValidationFromSchemaError(error, options.workDir)\n parentPort.postMessage({\n error: error instanceof Error ? error.message : String(error),\n type: 'error',\n validation,\n } satisfies BuildStudioSchemasAndManifestsWorkerMessage)\n }\n}\n\nawait main()\n"],"names":["isMainThread","parentPort","workerData","subdebug","buildStudioSchemasAndManifestsWorkerData","extractValidationFromSchemaError","workerBuildStudioSchemasAndManifests","debug","main","Error","options","parse","message","postMessage","error","validation","workDir","String","type"],"mappings":"AAAA,SAAQA,YAAY,EAAEC,UAAU,EAAEC,UAAU,QAAO,sBAAqB;AAExE,SAAQC,QAAQ,QAAO,mBAAkB;AAGzC,SAAQC,wCAAwC,QAAO,aAAY;AACnE,SAAQC,gCAAgC,QAAO,8CAA6C;AAC5F,SAAQC,oCAAoC,QAAO,4CAA2C;AAE9F,MAAMC,QAAQJ,SAAS;AAEvB,eAAeK;IACb,IAAIR,gBAAgB,CAACC,YAAY;QAC/B,MAAM,IAAIQ,MAAM;IAClB;IAEA,MAAMC,UAAUN,yCAAyCO,KAAK,CAACT;IAE/D,IAAI;QACF,MAAMU,UAAU,MAAMN,qCAAqCI;QAE3DT,WAAWY,WAAW,CAACD;IACzB,EAAE,OAAOE,OAAO;QACdP,MAAM,gDAAgDO;QACtD,MAAMC,aAAa,MAAMV,iCAAiCS,OAAOJ,QAAQM,OAAO;QAChFf,WAAWY,WAAW,CAAC;YACrBC,OAAOA,iBAAiBL,QAAQK,MAAMF,OAAO,GAAGK,OAAOH;YACvDI,MAAM;YACNH;QACF;IACF;AACF;AAEA,MAAMP"}
1
+ {"version":3,"sources":["../../../src/actions/schema/buildStudioSchemasAndManifests.worker.ts"],"sourcesContent":["import {isMainThread, parentPort, workerData} from 'node:worker_threads'\n\nimport {subdebug} from '@sanity/cli-core'\n\nimport {type BuildStudioSchemasAndManifestsWorkerMessage} from './buildStudioSchemasAndManifests.js'\nimport {workerBuildStudioSchemasAndManifests} from './buildStudioSchemasAndManifestsWorker.js'\nimport {buildStudioSchemasAndManifestsWorkerData} from './types.js'\nimport {extractValidationFromSchemaError} from './utils/extractValidationFromSchemaError.js'\n\nconst debug = subdebug('buildStudioSchemasAndManifests.worker')\n\nasync function main() {\n if (isMainThread || !parentPort) {\n throw new Error('Should only be run in a worker!')\n }\n\n const options = buildStudioSchemasAndManifestsWorkerData.parse(workerData)\n\n try {\n const message = await workerBuildStudioSchemasAndManifests(options)\n\n parentPort.postMessage(message)\n } catch (error) {\n debug('Error deploying studio schemas and manifests', error)\n const validation = await extractValidationFromSchemaError(error, options.workDir)\n parentPort.postMessage({\n error: error instanceof Error ? error.message : String(error),\n type: 'error',\n validation,\n } satisfies BuildStudioSchemasAndManifestsWorkerMessage)\n }\n}\n\nawait main()\n"],"names":["isMainThread","parentPort","workerData","subdebug","workerBuildStudioSchemasAndManifests","buildStudioSchemasAndManifestsWorkerData","extractValidationFromSchemaError","debug","main","Error","options","parse","message","postMessage","error","validation","workDir","String","type"],"mappings":"AAAA,SAAQA,YAAY,EAAEC,UAAU,EAAEC,UAAU,QAAO,sBAAqB;AAExE,SAAQC,QAAQ,QAAO,mBAAkB;AAGzC,SAAQC,oCAAoC,QAAO,4CAA2C;AAC9F,SAAQC,wCAAwC,QAAO,aAAY;AACnE,SAAQC,gCAAgC,QAAO,8CAA6C;AAE5F,MAAMC,QAAQJ,SAAS;AAEvB,eAAeK;IACb,IAAIR,gBAAgB,CAACC,YAAY;QAC/B,MAAM,IAAIQ,MAAM;IAClB;IAEA,MAAMC,UAAUL,yCAAyCM,KAAK,CAACT;IAE/D,IAAI;QACF,MAAMU,UAAU,MAAMR,qCAAqCM;QAE3DT,WAAWY,WAAW,CAACD;IACzB,EAAE,OAAOE,OAAO;QACdP,MAAM,gDAAgDO;QACtD,MAAMC,aAAa,MAAMT,iCAAiCQ,OAAOJ,QAAQM,OAAO;QAChFf,WAAWY,WAAW,CAAC;YACrBC,OAAOA,iBAAiBL,QAAQK,MAAMF,OAAO,GAAGK,OAAOH;YACvDI,MAAM;YACNH;QACF;IACF;AACF;AAEA,MAAMP"}
@@ -11,7 +11,7 @@ const debug = subdebug('buildStudioSchemasAndManifests.worker');
11
11
  if (isMainThread) {
12
12
  throw new Error('workerBuildStudioSchemasAndManifests should only be called from a worker thread');
13
13
  }
14
- const { configPath, isExternal, outPath, projectId, verbose, workDir, workspaceManifestsHandler } = options;
14
+ const { configPath, isExternal, outPath, projectId, schemaRequired, verbose, workDir, workspaceSchemaHandler } = options;
15
15
  debug('Building studio schemas and manifests from config path %s', configPath);
16
16
  const workspaces = await getStudioWorkspaces(configPath);
17
17
  debug('Workspaces %o', workspaces);
@@ -22,33 +22,42 @@ const debug = subdebug('buildStudioSchemasAndManifests.worker');
22
22
  // still live. Both writeWorkspaceToDist and updateWorkspacesSchemas consume the result.
23
23
  const workspaceManifests = await extractWorkspaceManifest(workspaces, workDir);
24
24
  debug('Handling build for %s', isExternal ? 'external' : 'internal');
25
- let studioManifest;
26
- if (isExternal) {
27
- ;
28
- [studioManifest] = await handleExternalStudio({
29
- projectId,
30
- verbose,
31
- workDir,
32
- workspaceManifests,
33
- workspaceManifestsHandler,
34
- workspaces
35
- });
36
- } else {
37
- ;
38
- [studioManifest] = await handleInternalStudio({
39
- outPath,
40
- projectId,
41
- verbose,
42
- workDir,
43
- workspaceManifests,
44
- workspaceManifestsHandler,
45
- workspaces
46
- });
25
+ async function workspaceManifestsHandler(workspaceManifests) {
26
+ if (!isExternal || schemaRequired) {
27
+ const schemaInputs = workspaceManifests.map((manifest)=>({
28
+ dataset: manifest.dataset,
29
+ manifestSchema: manifest.schema,
30
+ name: manifest.name,
31
+ projectId: manifest.projectId,
32
+ title: manifest.title
33
+ }));
34
+ if (workspaceSchemaHandler) {
35
+ await workspaceSchemaHandler(schemaInputs);
36
+ }
37
+ return schemaInputs;
38
+ }
39
+ return null;
47
40
  }
41
+ const result = isExternal ? await handleExternalStudio({
42
+ projectId,
43
+ verbose,
44
+ workDir,
45
+ workspaceManifests,
46
+ workspaceManifestsHandler,
47
+ workspaces
48
+ }) : await handleInternalStudio({
49
+ outPath,
50
+ projectId,
51
+ verbose,
52
+ workDir,
53
+ workspaceManifests,
54
+ workspaceManifestsHandler,
55
+ workspaces
56
+ });
48
57
  return {
49
- studioManifest,
50
- type: 'success',
51
- workspaceManifests
58
+ schemaInputs: result.schemaInputs,
59
+ studioManifest: result.studioManifest,
60
+ type: 'success'
52
61
  };
53
62
  }
54
63
  /**
@@ -56,18 +65,19 @@ const debug = subdebug('buildStudioSchemasAndManifests.worker');
56
65
  * 1. Update the workspace schemas to the /schemas endpoint IF --schema-required is passed
57
66
  * 2. Call the workspace manifest handler if provided to update server-side schemas
58
67
  */ async function handleExternalStudio({ projectId, verbose, workDir, workspaceManifests, workspaceManifestsHandler, workspaces }) {
59
- const [studioManifest] = await Promise.all([
68
+ const [studioManifest, schemaInputs] = await Promise.all([
60
69
  uploadSchemaToLexicon({
61
70
  projectId,
62
71
  verbose,
63
72
  workDir,
64
73
  workspaces
65
74
  }),
66
- workspaceManifestsHandler && workspaceManifestsHandler(workspaceManifests)
75
+ workspaceManifestsHandler(workspaceManifests)
67
76
  ]);
68
- return [
77
+ return {
78
+ schemaInputs,
69
79
  studioManifest
70
- ];
80
+ };
71
81
  }
72
82
  /**
73
83
  *
@@ -78,23 +88,24 @@ const debug = subdebug('buildStudioSchemasAndManifests.worker');
78
88
  *
79
89
  * @param workspaces - The workspaces to deploy
80
90
  */ async function handleInternalStudio({ outPath, projectId, verbose, workDir, workspaceManifests, workspaceManifestsHandler, workspaces }) {
81
- const [studioManifest] = await Promise.all([
91
+ const [studioManifest, schemaInputs] = await Promise.all([
82
92
  uploadSchemaToLexicon({
83
93
  projectId,
84
94
  verbose,
85
95
  workDir,
86
96
  workspaces
87
97
  }),
98
+ workspaceManifestsHandler(workspaceManifests),
88
99
  writeManifestFile({
89
100
  outPath,
90
101
  workDir,
91
102
  workspaceManifests
92
- }),
93
- workspaceManifestsHandler && workspaceManifestsHandler(workspaceManifests)
103
+ })
94
104
  ]);
95
- return [
105
+ return {
106
+ schemaInputs,
96
107
  studioManifest
97
- ];
108
+ };
98
109
  }
99
110
 
100
- //# sourceMappingURL=workerBuildStudioSchemasAndManifests.js.map
111
+ //# sourceMappingURL=buildStudioSchemasAndManifestsWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/schema/buildStudioSchemasAndManifestsWorker.ts"],"sourcesContent":["import {isMainThread} from 'node:worker_threads'\n\nimport {getStudioWorkspaces, subdebug} from '@sanity/cli-core'\nimport {type StudioManifest, type Workspace} from 'sanity'\n\nimport {extractWorkspaceManifest} from '../manifest/extractWorkspaceManifest.js'\nimport {type CreateWorkspaceManifest, WorkspaceSchemaInput} from '../manifest/types.js'\nimport {writeManifestFile} from '../manifest/writeManifestFile.js'\nimport {type BuildStudioSchemasAndManifestsWorkerSuccess} from './buildStudioSchemasAndManifests.js'\nimport {type BuildStudioSchemasAndManifestsWorkerData} from './types.js'\nimport {uploadSchemaToLexicon} from './uploadSchemaToLexicon.js'\n\nconst debug = subdebug('buildStudioSchemasAndManifests.worker')\n\n/**\n * This function must only be called from another worker process.\n * @param options - The worker options\n */\nexport async function workerBuildStudioSchemasAndManifests(\n options: BuildStudioSchemasAndManifestsWorkerData & {\n workspaceSchemaHandler?: (workspaces: WorkspaceSchemaInput[]) => Promise<void>\n },\n): Promise<BuildStudioSchemasAndManifestsWorkerSuccess> {\n if (isMainThread) {\n throw new Error(\n 'workerBuildStudioSchemasAndManifests should only be called from a worker thread',\n )\n }\n\n const {\n configPath,\n isExternal,\n outPath,\n projectId,\n schemaRequired,\n verbose,\n workDir,\n workspaceSchemaHandler,\n } = options\n\n debug('Building studio schemas and manifests from config path %s', configPath)\n const workspaces = await getStudioWorkspaces(configPath)\n debug('Workspaces %o', workspaces)\n\n if (workspaces.length === 0) {\n throw new Error('No workspaces found')\n }\n\n // Extract manifest data (including ManifestSchemaType[]) once, while Schema objects are\n // still live. Both writeWorkspaceToDist and updateWorkspacesSchemas consume the result.\n const workspaceManifests = await extractWorkspaceManifest(workspaces, workDir)\n\n debug('Handling build for %s', isExternal ? 'external' : 'internal')\n\n async function workspaceManifestsHandler(\n workspaceManifests: CreateWorkspaceManifest[],\n ): Promise<WorkspaceSchemaInput[] | null> {\n if (!isExternal || schemaRequired) {\n const schemaInputs: WorkspaceSchemaInput[] = workspaceManifests.map((manifest) => ({\n dataset: manifest.dataset,\n manifestSchema: manifest.schema,\n name: manifest.name,\n projectId: manifest.projectId,\n title: manifest.title,\n }))\n\n if (workspaceSchemaHandler) {\n await workspaceSchemaHandler(schemaInputs)\n }\n\n return schemaInputs\n }\n\n return null\n }\n\n const result = isExternal\n ? await handleExternalStudio({\n projectId,\n verbose,\n workDir,\n workspaceManifests,\n workspaceManifestsHandler,\n workspaces,\n })\n : await handleInternalStudio({\n outPath,\n projectId,\n verbose,\n workDir,\n workspaceManifests,\n workspaceManifestsHandler,\n workspaces,\n })\n\n return {\n schemaInputs: result.schemaInputs,\n studioManifest: result.studioManifest,\n type: 'success',\n }\n}\n\ntype HandleStudioResult = {\n schemaInputs: WorkspaceSchemaInput[] | null\n studioManifest: StudioManifest | null\n}\n\n/**\n * External deployments:\n * 1. Update the workspace schemas to the /schemas endpoint IF --schema-required is passed\n * 2. Call the workspace manifest handler if provided to update server-side schemas\n */\nasync function handleExternalStudio({\n projectId,\n verbose,\n workDir,\n workspaceManifests,\n workspaceManifestsHandler,\n workspaces,\n}: {\n projectId: string\n verbose: boolean\n workDir: string\n workspaceManifests: CreateWorkspaceManifest[]\n workspaceManifestsHandler: (\n workspaceManifests: CreateWorkspaceManifest[],\n ) => Promise<WorkspaceSchemaInput[] | null>\n workspaces: Workspace[]\n}): Promise<HandleStudioResult> {\n const [studioManifest, schemaInputs] = await Promise.all([\n uploadSchemaToLexicon({\n projectId,\n verbose,\n workDir,\n workspaces,\n }),\n workspaceManifestsHandler(workspaceManifests),\n ])\n\n return {schemaInputs, studioManifest}\n}\n\n/**\n *\n * Internal deployments:\n * 1. Write the workspace manifests to the dist directory\n * 2. Update the workspaces schemas to the /schemas endpoint\n * 3. Call the workspace manifest handler if provided to update server-side schemas\n *\n * @param workspaces - The workspaces to deploy\n */\nasync function handleInternalStudio({\n outPath,\n projectId,\n verbose,\n workDir,\n workspaceManifests,\n workspaceManifestsHandler,\n workspaces,\n}: {\n outPath: string\n projectId: string\n verbose: boolean\n workDir: string\n workspaceManifests: CreateWorkspaceManifest[]\n workspaceManifestsHandler: (\n workspaceManifests: CreateWorkspaceManifest[],\n ) => Promise<WorkspaceSchemaInput[] | null>\n workspaces: Workspace[]\n}): Promise<HandleStudioResult> {\n const [studioManifest, schemaInputs] = await Promise.all([\n uploadSchemaToLexicon({\n projectId,\n verbose,\n workDir,\n workspaces,\n }),\n workspaceManifestsHandler(workspaceManifests),\n writeManifestFile({outPath, workDir, workspaceManifests}),\n ])\n\n return {schemaInputs, studioManifest}\n}\n"],"names":["isMainThread","getStudioWorkspaces","subdebug","extractWorkspaceManifest","writeManifestFile","uploadSchemaToLexicon","debug","workerBuildStudioSchemasAndManifests","options","Error","configPath","isExternal","outPath","projectId","schemaRequired","verbose","workDir","workspaceSchemaHandler","workspaces","length","workspaceManifests","workspaceManifestsHandler","schemaInputs","map","manifest","dataset","manifestSchema","schema","name","title","result","handleExternalStudio","handleInternalStudio","studioManifest","type","Promise","all"],"mappings":"AAAA,SAAQA,YAAY,QAAO,sBAAqB;AAEhD,SAAQC,mBAAmB,EAAEC,QAAQ,QAAO,mBAAkB;AAG9D,SAAQC,wBAAwB,QAAO,0CAAyC;AAEhF,SAAQC,iBAAiB,QAAO,mCAAkC;AAGlE,SAAQC,qBAAqB,QAAO,6BAA4B;AAEhE,MAAMC,QAAQJ,SAAS;AAEvB;;;CAGC,GACD,OAAO,eAAeK,qCACpBC,OAEC;IAED,IAAIR,cAAc;QAChB,MAAM,IAAIS,MACR;IAEJ;IAEA,MAAM,EACJC,UAAU,EACVC,UAAU,EACVC,OAAO,EACPC,SAAS,EACTC,cAAc,EACdC,OAAO,EACPC,OAAO,EACPC,sBAAsB,EACvB,GAAGT;IAEJF,MAAM,6DAA6DI;IACnE,MAAMQ,aAAa,MAAMjB,oBAAoBS;IAC7CJ,MAAM,iBAAiBY;IAEvB,IAAIA,WAAWC,MAAM,KAAK,GAAG;QAC3B,MAAM,IAAIV,MAAM;IAClB;IAEA,wFAAwF;IACxF,wFAAwF;IACxF,MAAMW,qBAAqB,MAAMjB,yBAAyBe,YAAYF;IAEtEV,MAAM,yBAAyBK,aAAa,aAAa;IAEzD,eAAeU,0BACbD,kBAA6C;QAE7C,IAAI,CAACT,cAAcG,gBAAgB;YACjC,MAAMQ,eAAuCF,mBAAmBG,GAAG,CAAC,CAACC,WAAc,CAAA;oBACjFC,SAASD,SAASC,OAAO;oBACzBC,gBAAgBF,SAASG,MAAM;oBAC/BC,MAAMJ,SAASI,IAAI;oBACnBf,WAAWW,SAASX,SAAS;oBAC7BgB,OAAOL,SAASK,KAAK;gBACvB,CAAA;YAEA,IAAIZ,wBAAwB;gBAC1B,MAAMA,uBAAuBK;YAC/B;YAEA,OAAOA;QACT;QAEA,OAAO;IACT;IAEA,MAAMQ,SAASnB,aACX,MAAMoB,qBAAqB;QACzBlB;QACAE;QACAC;QACAI;QACAC;QACAH;IACF,KACA,MAAMc,qBAAqB;QACzBpB;QACAC;QACAE;QACAC;QACAI;QACAC;QACAH;IACF;IAEJ,OAAO;QACLI,cAAcQ,OAAOR,YAAY;QACjCW,gBAAgBH,OAAOG,cAAc;QACrCC,MAAM;IACR;AACF;AAOA;;;;CAIC,GACD,eAAeH,qBAAqB,EAClClB,SAAS,EACTE,OAAO,EACPC,OAAO,EACPI,kBAAkB,EAClBC,yBAAyB,EACzBH,UAAU,EAUX;IACC,MAAM,CAACe,gBAAgBX,aAAa,GAAG,MAAMa,QAAQC,GAAG,CAAC;QACvD/B,sBAAsB;YACpBQ;YACAE;YACAC;YACAE;QACF;QACAG,0BAA0BD;KAC3B;IAED,OAAO;QAACE;QAAcW;IAAc;AACtC;AAEA;;;;;;;;CAQC,GACD,eAAeD,qBAAqB,EAClCpB,OAAO,EACPC,SAAS,EACTE,OAAO,EACPC,OAAO,EACPI,kBAAkB,EAClBC,yBAAyB,EACzBH,UAAU,EAWX;IACC,MAAM,CAACe,gBAAgBX,aAAa,GAAG,MAAMa,QAAQC,GAAG,CAAC;QACvD/B,sBAAsB;YACpBQ;YACAE;YACAC;YACAE;QACF;QACAG,0BAA0BD;QAC1BhB,kBAAkB;YAACQ;YAASI;YAASI;QAAkB;KACxD;IAED,OAAO;QAACE;QAAcW;IAAc;AACtC"}
@@ -10,6 +10,7 @@ export const buildStudioSchemasAndManifestsWorkerData = z.object({
10
10
  isExternal: z.boolean(),
11
11
  outPath: z.string(),
12
12
  projectId: z.string(),
13
+ schemaRequired: z.boolean(),
13
14
  verbose: z.boolean(),
14
15
  workDir: z.string()
15
16
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/schema/types.ts"],"sourcesContent":["import {type SchemaValidationProblemGroup} from '@sanity/types'\nimport {z} from 'zod/mini'\n\nexport const extractSchemaWorkerData = z.object({\n configPath: z.string(),\n enforceRequiredFields: z.boolean(),\n workDir: z.string(),\n workspaceName: z.optional(z.string()),\n})\n\nexport type ExtractSchemaWorkerData = z.infer<typeof extractSchemaWorkerData>\n\n/** @internal */\nexport interface ExtractSchemaWorkerError {\n error: string\n type: 'error'\n\n validation?: SchemaValidationProblemGroup[]\n}\n\nexport const buildStudioSchemasAndManifestsWorkerData = z.object({\n configPath: z.string(),\n isExternal: z.boolean(),\n outPath: z.string(),\n projectId: z.string(),\n verbose: z.boolean(),\n workDir: z.string(),\n})\n\nexport type BuildStudioSchemasAndManifestsWorkerData = z.infer<\n typeof buildStudioSchemasAndManifestsWorkerData\n>\n"],"names":["z","extractSchemaWorkerData","object","configPath","string","enforceRequiredFields","boolean","workDir","workspaceName","optional","buildStudioSchemasAndManifestsWorkerData","isExternal","outPath","projectId","verbose"],"mappings":"AACA,SAAQA,CAAC,QAAO,WAAU;AAE1B,OAAO,MAAMC,0BAA0BD,EAAEE,MAAM,CAAC;IAC9CC,YAAYH,EAAEI,MAAM;IACpBC,uBAAuBL,EAAEM,OAAO;IAChCC,SAASP,EAAEI,MAAM;IACjBI,eAAeR,EAAES,QAAQ,CAACT,EAAEI,MAAM;AACpC,GAAE;AAYF,OAAO,MAAMM,2CAA2CV,EAAEE,MAAM,CAAC;IAC/DC,YAAYH,EAAEI,MAAM;IACpBO,YAAYX,EAAEM,OAAO;IACrBM,SAASZ,EAAEI,MAAM;IACjBS,WAAWb,EAAEI,MAAM;IACnBU,SAASd,EAAEM,OAAO;IAClBC,SAASP,EAAEI,MAAM;AACnB,GAAE"}
1
+ {"version":3,"sources":["../../../src/actions/schema/types.ts"],"sourcesContent":["import {type SchemaValidationProblemGroup} from '@sanity/types'\nimport {z} from 'zod/mini'\n\nexport const extractSchemaWorkerData = z.object({\n configPath: z.string(),\n enforceRequiredFields: z.boolean(),\n workDir: z.string(),\n workspaceName: z.optional(z.string()),\n})\n\nexport type ExtractSchemaWorkerData = z.infer<typeof extractSchemaWorkerData>\n\n/** @internal */\nexport interface ExtractSchemaWorkerError {\n error: string\n type: 'error'\n\n validation?: SchemaValidationProblemGroup[]\n}\n\nexport const buildStudioSchemasAndManifestsWorkerData = z.object({\n configPath: z.string(),\n isExternal: z.boolean(),\n outPath: z.string(),\n projectId: z.string(),\n schemaRequired: z.boolean(),\n verbose: z.boolean(),\n workDir: z.string(),\n})\n\nexport type BuildStudioSchemasAndManifestsWorkerData = z.infer<\n typeof buildStudioSchemasAndManifestsWorkerData\n>\n"],"names":["z","extractSchemaWorkerData","object","configPath","string","enforceRequiredFields","boolean","workDir","workspaceName","optional","buildStudioSchemasAndManifestsWorkerData","isExternal","outPath","projectId","schemaRequired","verbose"],"mappings":"AACA,SAAQA,CAAC,QAAO,WAAU;AAE1B,OAAO,MAAMC,0BAA0BD,EAAEE,MAAM,CAAC;IAC9CC,YAAYH,EAAEI,MAAM;IACpBC,uBAAuBL,EAAEM,OAAO;IAChCC,SAASP,EAAEI,MAAM;IACjBI,eAAeR,EAAES,QAAQ,CAACT,EAAEI,MAAM;AACpC,GAAE;AAYF,OAAO,MAAMM,2CAA2CV,EAAEE,MAAM,CAAC;IAC/DC,YAAYH,EAAEI,MAAM;IACpBO,YAAYX,EAAEM,OAAO;IACrBM,SAASZ,EAAEI,MAAM;IACjBS,WAAWb,EAAEI,MAAM;IACnBU,gBAAgBd,EAAEM,OAAO;IACzBS,SAASf,EAAEM,OAAO;IAClBC,SAASP,EAAEI,MAAM;AACnB,GAAE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/cli-build",
3
- "version": "6.4.5",
3
+ "version": "7.0.0",
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.4",
55
- "@sanity/cli-core": "^3.8.2",
55
+ "@sanity/cli-core": "^3.11.1",
56
56
  "@sanity/generate-help-url": "^4.0.0",
57
57
  "@sanity/schema": "^6.17.0",
58
58
  "@sanity/telemetry": "^1.1.0",
59
59
  "@sanity/types": "^6.17.0",
60
- "@sanity/workbench-cli": "^2.8.4",
60
+ "@sanity/workbench-cli": "^2.13.0",
61
61
  "@vitejs/plugin-react": "^6.1.2",
62
62
  "chokidar": "^5.0.0",
63
63
  "cjs-module-lexer": "^2.2.1",
@@ -79,7 +79,7 @@
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": "18.0.2",
82
+ "@sanity/cli-test": "21.0.1",
83
83
  "@sanity/eslint-config-cli": "^1.1.3",
84
84
  "@sanity/pkg-utils": "^12.3.4",
85
85
  "@sanity/ui": "^4.3.1",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/actions/schema/workerBuildStudioSchemasAndManifests.ts"],"sourcesContent":["import {isMainThread} from 'node:worker_threads'\n\nimport {getStudioWorkspaces, subdebug} from '@sanity/cli-core'\nimport {type StudioManifest, type Workspace} from 'sanity'\n\nimport {extractWorkspaceManifest} from '../manifest/extractWorkspaceManifest.js'\nimport {type CreateWorkspaceManifest} from '../manifest/types.js'\nimport {writeManifestFile} from '../manifest/writeManifestFile.js'\nimport {type BuildStudioSchemasAndManifestsWorkerSuccess} from './buildStudioSchemasAndManifests.js'\nimport {type BuildStudioSchemasAndManifestsWorkerData} from './types.js'\nimport {uploadSchemaToLexicon} from './uploadSchemaToLexicon.js'\n\nconst debug = subdebug('buildStudioSchemasAndManifests.worker')\n\n/**\n * This function must only be called from another worker process.\n * @param options - The worker options\n */\nexport async function workerBuildStudioSchemasAndManifests(\n options: BuildStudioSchemasAndManifestsWorkerData & {\n workspaceManifestsHandler?: (workspaceManifests: CreateWorkspaceManifest[]) => Promise<void>\n },\n): Promise<BuildStudioSchemasAndManifestsWorkerSuccess> {\n if (isMainThread) {\n throw new Error(\n 'workerBuildStudioSchemasAndManifests should only be called from a worker thread',\n )\n }\n\n const {configPath, isExternal, outPath, projectId, verbose, workDir, workspaceManifestsHandler} =\n options\n\n debug('Building studio schemas and manifests from config path %s', configPath)\n const workspaces = await getStudioWorkspaces(configPath)\n debug('Workspaces %o', workspaces)\n\n if (workspaces.length === 0) {\n throw new Error('No workspaces found')\n }\n\n // Extract manifest data (including ManifestSchemaType[]) once, while Schema objects are\n // still live. Both writeWorkspaceToDist and updateWorkspacesSchemas consume the result.\n const workspaceManifests = await extractWorkspaceManifest(workspaces, workDir)\n\n debug('Handling build for %s', isExternal ? 'external' : 'internal')\n\n let studioManifest: StudioManifest | null\n\n if (isExternal) {\n ;[studioManifest] = await handleExternalStudio({\n projectId,\n verbose,\n workDir,\n workspaceManifests,\n workspaceManifestsHandler,\n workspaces,\n })\n } else {\n ;[studioManifest] = await handleInternalStudio({\n outPath,\n projectId,\n verbose,\n workDir,\n workspaceManifests,\n workspaceManifestsHandler,\n workspaces,\n })\n }\n return {\n studioManifest,\n type: 'success',\n workspaceManifests,\n }\n}\n\n/**\n * External deployments:\n * 1. Update the workspace schemas to the /schemas endpoint IF --schema-required is passed\n * 2. Call the workspace manifest handler if provided to update server-side schemas\n */\nasync function handleExternalStudio({\n projectId,\n verbose,\n workDir,\n workspaceManifests,\n workspaceManifestsHandler,\n workspaces,\n}: {\n projectId: string\n verbose: boolean\n workDir: string\n workspaceManifests: CreateWorkspaceManifest[]\n workspaceManifestsHandler?: (workspaceManifests: CreateWorkspaceManifest[]) => Promise<void>\n workspaces: Workspace[]\n}): Promise<[StudioManifest | null]> {\n const [studioManifest] = await Promise.all([\n uploadSchemaToLexicon({\n projectId,\n verbose,\n workDir,\n workspaces,\n }),\n workspaceManifestsHandler && workspaceManifestsHandler(workspaceManifests),\n ])\n\n return [studioManifest]\n}\n\n/**\n *\n * Internal deployments:\n * 1. Write the workspace manifests to the dist directory\n * 2. Update the workspaces schemas to the /schemas endpoint\n * 3. Call the workspace manifest handler if provided to update server-side schemas\n *\n * @param workspaces - The workspaces to deploy\n */\nasync function handleInternalStudio({\n outPath,\n projectId,\n verbose,\n workDir,\n workspaceManifests,\n workspaceManifestsHandler,\n workspaces,\n}: {\n outPath: string\n projectId: string\n verbose: boolean\n workDir: string\n workspaceManifests: CreateWorkspaceManifest[]\n workspaceManifestsHandler?: (workspaceManifests: CreateWorkspaceManifest[]) => Promise<void>\n workspaces: Workspace[]\n}): Promise<[StudioManifest | null]> {\n const [studioManifest] = await Promise.all([\n uploadSchemaToLexicon({\n projectId,\n verbose,\n workDir,\n workspaces,\n }),\n writeManifestFile({outPath, workDir, workspaceManifests}),\n workspaceManifestsHandler && workspaceManifestsHandler(workspaceManifests),\n ])\n\n return [studioManifest]\n}\n"],"names":["isMainThread","getStudioWorkspaces","subdebug","extractWorkspaceManifest","writeManifestFile","uploadSchemaToLexicon","debug","workerBuildStudioSchemasAndManifests","options","Error","configPath","isExternal","outPath","projectId","verbose","workDir","workspaceManifestsHandler","workspaces","length","workspaceManifests","studioManifest","handleExternalStudio","handleInternalStudio","type","Promise","all"],"mappings":"AAAA,SAAQA,YAAY,QAAO,sBAAqB;AAEhD,SAAQC,mBAAmB,EAAEC,QAAQ,QAAO,mBAAkB;AAG9D,SAAQC,wBAAwB,QAAO,0CAAyC;AAEhF,SAAQC,iBAAiB,QAAO,mCAAkC;AAGlE,SAAQC,qBAAqB,QAAO,6BAA4B;AAEhE,MAAMC,QAAQJ,SAAS;AAEvB;;;CAGC,GACD,OAAO,eAAeK,qCACpBC,OAEC;IAED,IAAIR,cAAc;QAChB,MAAM,IAAIS,MACR;IAEJ;IAEA,MAAM,EAACC,UAAU,EAAEC,UAAU,EAAEC,OAAO,EAAEC,SAAS,EAAEC,OAAO,EAAEC,OAAO,EAAEC,yBAAyB,EAAC,GAC7FR;IAEFF,MAAM,6DAA6DI;IACnE,MAAMO,aAAa,MAAMhB,oBAAoBS;IAC7CJ,MAAM,iBAAiBW;IAEvB,IAAIA,WAAWC,MAAM,KAAK,GAAG;QAC3B,MAAM,IAAIT,MAAM;IAClB;IAEA,wFAAwF;IACxF,wFAAwF;IACxF,MAAMU,qBAAqB,MAAMhB,yBAAyBc,YAAYF;IAEtET,MAAM,yBAAyBK,aAAa,aAAa;IAEzD,IAAIS;IAEJ,IAAIT,YAAY;;QACb,CAACS,eAAe,GAAG,MAAMC,qBAAqB;YAC7CR;YACAC;YACAC;YACAI;YACAH;YACAC;QACF;IACF,OAAO;;QACJ,CAACG,eAAe,GAAG,MAAME,qBAAqB;YAC7CV;YACAC;YACAC;YACAC;YACAI;YACAH;YACAC;QACF;IACF;IACA,OAAO;QACLG;QACAG,MAAM;QACNJ;IACF;AACF;AAEA;;;;CAIC,GACD,eAAeE,qBAAqB,EAClCR,SAAS,EACTC,OAAO,EACPC,OAAO,EACPI,kBAAkB,EAClBH,yBAAyB,EACzBC,UAAU,EAQX;IACC,MAAM,CAACG,eAAe,GAAG,MAAMI,QAAQC,GAAG,CAAC;QACzCpB,sBAAsB;YACpBQ;YACAC;YACAC;YACAE;QACF;QACAD,6BAA6BA,0BAA0BG;KACxD;IAED,OAAO;QAACC;KAAe;AACzB;AAEA;;;;;;;;CAQC,GACD,eAAeE,qBAAqB,EAClCV,OAAO,EACPC,SAAS,EACTC,OAAO,EACPC,OAAO,EACPI,kBAAkB,EAClBH,yBAAyB,EACzBC,UAAU,EASX;IACC,MAAM,CAACG,eAAe,GAAG,MAAMI,QAAQC,GAAG,CAAC;QACzCpB,sBAAsB;YACpBQ;YACAC;YACAC;YACAE;QACF;QACAb,kBAAkB;YAACQ;YAASG;YAASI;QAAkB;QACvDH,6BAA6BA,0BAA0BG;KACxD;IAED,OAAO;QAACC;KAAe;AACzB"}