sanity 3.92.1-next.10.020bfb186f → 3.92.1-next.11.5b15f40a54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/schemaStoreOutStrings.js.map +1 -1
- package/lib/_chunks-cjs/version.js +1 -1
- package/lib/_chunks-es/version.mjs +1 -1
- package/lib/_internal/cli/threads/extractManifest.js +22 -2
- package/lib/_internal/cli/threads/extractManifest.js.map +1 -1
- package/package.json +10 -10
- package/src/_internal/manifest/extractWorkspaceManifest.tsx +23 -0
- package/src/_internal/manifest/manifestTypeHelpers.ts +10 -2
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"schemaStoreOutStrings.js","sources":["../../src/_internal/manifest/manifestTypes.ts","../../src/_internal/cli/actions/schema/__telemetry__/schemaStore.telemetry.ts","../../src/_internal/manifest/manifestTypeHelpers.ts","../../src/_internal/cli/actions/schema/utils/manifestReader.ts","../../src/_internal/cli/actions/schema/utils/schemaStoreValidation.ts","../../src/_internal/cli/actions/schema/utils/mainfestExtractor.ts","../../src/_internal/cli/actions/schema/utils/schemaApiClient.ts","../../src/_internal/cli/actions/schema/utils/schemaStoreOutStrings.ts"],"sourcesContent":["import {type SanityDocumentLike} from '@sanity/types'\nimport {type MediaLibraryConfig} from 'sanity'\n\nexport const SANITY_WORKSPACE_SCHEMA_ID_PREFIX = '_.schemas'\nexport const SANITY_WORKSPACE_SCHEMA_TYPE = 'system.schema'\nexport const CURRENT_WORKSPACE_SCHEMA_VERSION = '2025-05-01'\n\nexport type ManifestSerializable =\n | string\n | number\n | boolean\n | {[k: string]: ManifestSerializable}\n | ManifestSerializable[]\n\nexport interface CreateManifest {\n version: number\n createdAt: string\n workspaces: ManifestWorkspaceFile[]\n}\n\nexport interface ManifestWorkspaceFile extends Omit<CreateWorkspaceManifest, 'schema' | 'tools'> {\n schema: string // filename\n tools: string // filename\n}\n\nexport interface CreateWorkspaceManifest {\n name: string\n title?: string\n subtitle?: string\n basePath: string\n dataset: string\n projectId: string\n mediaLibrary?: MediaLibraryConfig\n schema: ManifestSchemaType[]\n tools: ManifestTool[]\n /**\n * returns null in the case of the icon not being able to be stringified\n */\n icon: string | null\n}\n\nexport interface ManifestSchemaType {\n type: string\n name: string\n title?: string\n deprecated?: {\n reason: string\n }\n readOnly?: boolean | 'conditional'\n hidden?: boolean | 'conditional'\n validation?: ManifestValidationGroup[]\n fields?: ManifestField[]\n to?: ManifestReferenceMember[]\n of?: ManifestArrayMember[]\n preview?: {\n select: Record<string, string>\n }\n fieldsets?: ManifestFieldset[]\n options?: Record<string, ManifestSerializable>\n //portable text\n marks?: {\n annotations?: ManifestArrayMember[]\n decorators?: ManifestTitledValue[]\n }\n lists?: ManifestTitledValue[]\n styles?: ManifestTitledValue[]\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 name: string\n title?: string\n [index: string]: ManifestSerializable | undefined\n}\n\nexport interface ManifestTitledValue {\n value: string\n title?: string\n}\n\nexport type ManifestField = ManifestSchemaType & {fieldset?: string}\nexport type ManifestArrayMember = Omit<ManifestSchemaType, 'name'> & {name?: string}\nexport type ManifestReferenceMember = Omit<ManifestSchemaType, 'name'> & {name?: string}\n\nexport interface ManifestValidationGroup {\n rules: ManifestValidationRule[]\n message?: string\n level?: 'error' | 'warning' | 'info'\n}\n\nexport type ManifestValidationRule = {\n flag: string\n constraint?: ManifestSerializable\n [index: string]: ManifestSerializable | undefined\n}\n\nexport interface ManifestTool {\n name: string\n title: string\n /**\n * returns null in the case of the icon not being able to be stringified\n */\n icon: string | null\n type: string | null\n}\n\nexport type DefaultWorkspaceSchemaId = `${typeof SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.${string}`\nexport type PrefixedWorkspaceSchemaId = `${DefaultWorkspaceSchemaId}.${string}`\nexport type WorkspaceSchemaId = DefaultWorkspaceSchemaId | PrefixedWorkspaceSchemaId\n\nexport interface StoredWorkspaceSchema extends SanityDocumentLike {\n _type: typeof SANITY_WORKSPACE_SCHEMA_TYPE\n _id: WorkspaceSchemaId\n /* api-like version string: date at which the format had a meaningful change */\n version: typeof CURRENT_WORKSPACE_SCHEMA_VERSION | undefined\n tag?: string\n workspace: {\n name: string\n title?: string\n }\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, put we deploy to the API using ManifestSchemaType[]\n */\n schema: string | ManifestSchemaType[]\n}\n","import {defineTrace} from '@sanity/telemetry'\n\ninterface SchemaDeployTraceData {\n manifestDir: string\n schemaRequired: boolean\n workspaceName?: string\n idPrefix?: string\n extractManifest?: boolean\n}\n\ninterface GenerateManifestTraceData {\n manifestDir: string\n schemaRequired: boolean\n}\n\nexport const GenerateManifest = defineTrace<GenerateManifestTraceData>({\n name: 'Manifest generation executed',\n version: 1,\n description: 'Manifest generation was executed',\n})\n\nexport const SchemaDeploy = defineTrace<SchemaDeployTraceData>({\n name: 'Schema deploy action executed',\n version: 1,\n description:\n 'Schema deploy action was executed, either via sanity schema deploy or as sanity deploy',\n})\n\n//Note – the individual sanity schema store commands are covered by the general cli telemetry\n","import {\n type CrossDatasetReferenceSchemaType,\n type ObjectField,\n type ObjectSchemaType,\n type ReferenceSchemaType,\n type SchemaType,\n} from '@sanity/types'\n\nconst DEFAULT_IMAGE_FIELDS = ['asset', 'hotspot', 'crop', 'media']\nconst DEFAULT_FILE_FIELDS = ['asset', 'media']\nconst DEFAULT_GEOPOINT_FIELDS = ['lat', 'lng', 'alt']\nconst DEFAULT_SLUG_FIELDS = ['current', 'source']\n\nexport function getCustomFields(type: ObjectSchemaType): (ObjectField & {fieldset?: string})[] {\n const fields = type.fieldsets\n ? type.fieldsets.flatMap((fs) => {\n if (fs.single) {\n return fs.field\n }\n return fs.fields.map((field) => ({\n ...field,\n fieldset: fs.name,\n }))\n })\n : type.fields\n\n if (isType(type, 'block')) {\n return []\n }\n if (isType(type, 'slug')) {\n return fields.filter((f) => !DEFAULT_SLUG_FIELDS.includes(f.name))\n }\n if (isType(type, 'geopoint')) {\n return fields.filter((f) => !DEFAULT_GEOPOINT_FIELDS.includes(f.name))\n }\n if (isType(type, 'image')) {\n return fields.filter((f) => !DEFAULT_IMAGE_FIELDS.includes(f.name))\n }\n if (isType(type, 'file')) {\n return fields.filter((f) => !DEFAULT_FILE_FIELDS.includes(f.name))\n }\n return fields\n}\n\nexport function isReference(type: SchemaType): type is ReferenceSchemaType {\n return isType(type, 'reference')\n}\n\nexport function isCrossDatasetReference(type: SchemaType): type is CrossDatasetReferenceSchemaType {\n return isType(type, 'crossDatasetReference')\n}\n\nexport function isObjectField(maybeOjectField: unknown): boolean {\n return (\n typeof maybeOjectField === 'object' && maybeOjectField !== null && 'name' in maybeOjectField\n )\n}\n\nexport function isCustomized(maybeCustomized: SchemaType): boolean {\n const hasFieldsArray =\n isObjectField(maybeCustomized) &&\n !isType(maybeCustomized, 'reference') &&\n !isType(maybeCustomized, 'crossDatasetReference') &&\n 'fields' in maybeCustomized &&\n Array.isArray(maybeCustomized.fields)\n\n if (!hasFieldsArray) {\n return false\n }\n\n const fields = getCustomFields(maybeCustomized)\n return !!fields.length\n}\n\nexport function isType(schemaType: SchemaType, typeName: string): boolean {\n if (schemaType.name === typeName) {\n return true\n }\n if (!schemaType.type) {\n return false\n }\n return isType(schemaType.type, typeName)\n}\n\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object'\n}\n\nexport function isPrimitive(value: unknown): value is string | boolean | number {\n return isString(value) || isBoolean(value) || isNumber(value)\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string'\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === 'boolean'\n}\n\nfunction isBoolean(value: unknown): value is boolean {\n return typeof value === 'number'\n}\n","import {type Stats} from 'node:fs'\nimport {readFile, stat} from 'node:fs/promises'\nimport path, {join, resolve} from 'node:path'\n\nimport {type CliOutputter} from '@sanity/cli'\nimport chalk from 'chalk'\n\nimport {type CreateManifest, type ManifestSchemaType} from '../../../../manifest/manifestTypes'\nimport {MANIFEST_FILENAME} from '../../manifest/extractManifestAction'\nimport {type DeploySchemasFlags} from '../deploySchemasAction'\n\nexport type ManifestJsonReader = <T>(\n filePath: string,\n) => Promise<JsonFileParseSuccess<T> | undefined>\n\nexport type CreateManifestReaderFactory = (args: {\n manifestDir: string\n output: CliOutputter\n jsonReader?: <T>(filePath: string) => Promise<JsonFileParseSuccess<T> | undefined>\n}) => CreateManifestReader\n\nexport interface CreateManifestReader {\n getManifest: () => Promise<CreateManifest>\n getWorkspaceSchema: (workspaceName: string) => Promise<ManifestSchemaType[]>\n}\n\ninterface JsonFileParseSuccess<T> {\n parsedJson: T\n path: string\n lastModified: string\n}\n\n/**\n * The manifest reader will try to read manifest and workspace schema files _once_ and cache a successful result.\n * If you need to re-read the manifest from disk, create a new instance.\n */\nexport const createManifestReader: CreateManifestReaderFactory = ({\n manifestDir,\n output,\n jsonReader = parseJsonFile,\n}) => {\n let parsedManifest: JsonFileParseSuccess<CreateManifest>\n const parsedWorkspaces: Record<string, JsonFileParseSuccess<ManifestSchemaType[]> | undefined> =\n {}\n\n const getManifest: CreateManifestReader['getManifest'] = async () => {\n if (parsedManifest) {\n return parsedManifest?.parsedJson\n }\n\n const manifestFile = path.join(manifestDir, MANIFEST_FILENAME)\n\n const result = await jsonReader<CreateManifest>(manifestFile)\n if (!result) {\n throw new Error(\n `Manifest does not exist at ${manifestFile}. To create the manifest file, omit --no-${'extract-manifest' satisfies keyof DeploySchemasFlags} or run \"sanity manifest extract\" first.`,\n )\n }\n\n output.print(\n chalk.gray(`↳ Read manifest from ${manifestFile} (last modified: ${result.lastModified})`),\n )\n\n parsedManifest = result\n return result.parsedJson\n }\n\n const getWorkspaceSchema: CreateManifestReader['getWorkspaceSchema'] = async (workspaceName) => {\n if (parsedWorkspaces[workspaceName]) {\n return parsedWorkspaces[workspaceName]?.parsedJson\n }\n const manifest = await getManifest()\n if (!manifest) {\n throw Error('Manifest is required to read workspace schema.')\n }\n\n const workspaceManifest = manifest.workspaces.find(\n (workspace) => workspace.name === workspaceName,\n )\n\n if (!workspaceManifest) {\n throw Error(`No workspace named \"${workspaceName}\" found in manifest.`)\n }\n\n const workspaceSchemaFile = path.join(manifestDir, workspaceManifest.schema ?? '')\n const result = await jsonReader<ManifestSchemaType[]>(workspaceSchemaFile)\n if (!result) {\n throw Error(`Workspace schema file at \"${workspaceSchemaFile}\" does not exist.`)\n }\n parsedWorkspaces[workspaceName] = result\n return result.parsedJson\n }\n return {\n getManifest,\n getWorkspaceSchema,\n }\n}\n\nexport function resolveManifestDirectory(workDir: string, customPath?: string): string {\n const defaultOutputDir = resolve(join(workDir, 'dist'))\n\n const outputDir = resolve(defaultOutputDir)\n const defaultStaticPath = join(outputDir, 'static')\n\n const staticPath = customPath ?? defaultStaticPath\n return path.resolve(process.cwd(), staticPath)\n}\n\nasync function parseJsonFile<T>(filePath: string): Promise<JsonFileParseSuccess<T> | undefined> {\n let stats: Stats\n try {\n stats = await stat(filePath)\n } catch (err) {\n // file does not exist\n return undefined\n }\n const content = await readFile(filePath, 'utf-8')\n const lastModified = stats.mtime.toISOString()\n const json = JSON.parse(content) as T\n if (!json) {\n throw new Error(`JSON file \"${filePath}\" was empty.`)\n }\n return {\n parsedJson: json,\n path: filePath,\n lastModified,\n }\n}\n","import uniqBy from 'lodash/uniqBy'\n\nimport {isDefined} from '../../../../manifest/manifestTypeHelpers'\nimport {SANITY_WORKSPACE_SCHEMA_ID_PREFIX} from '../../../../manifest/manifestTypes'\nimport {type DeleteSchemaFlags} from '../deleteSchemaAction'\nimport {type DeploySchemasFlags} from '../deploySchemasAction'\nimport {type SchemaListFlags} from '../listSchemasAction'\nimport {resolveManifestDirectory} from './manifestReader'\n\nexport const validForIdChars = 'a-zA-Z0-9._-'\nexport const validForIdPattern = new RegExp(`^[${validForIdChars}]+$`, 'g')\n\n//no periods allowed in workspaceName or tag in ids\nexport const validForNamesChars = 'a-zA-Z0-9_-'\nexport const validForNamesPattern = new RegExp(`^[${validForNamesChars}]+$`, 'g')\n\nconst requiredInId = SANITY_WORKSPACE_SCHEMA_ID_PREFIX.replace(/[.]/g, '\\\\.')\n\nconst idIdPatternString = `^${requiredInId}\\\\.([${validForNamesChars}]+)`\nconst baseIdPattern = new RegExp(`${idIdPatternString}$`)\nconst taggedIdIdPattern = new RegExp(`${idIdPatternString}\\\\.tag\\\\.([${validForNamesChars}]+)$`)\n\nexport class FlagValidationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'FlagValidationError'\n }\n}\n\ninterface WorkspaceSchemaId {\n schemaId: string\n workspace: string\n}\n\nexport interface SchemaStoreCommonFlags {\n 'extract-manifest'?: boolean\n 'manifest-dir'?: string\n 'verbose'?: boolean\n}\n\nfunction parseCommonFlags(\n flags: SchemaStoreCommonFlags,\n context: {workDir: string},\n errors: string[],\n) {\n const manifestDir = parseManifestDir(flags, errors)\n const verbose = !!flags.verbose\n // extract manifest by default: our CLI layer handles both --extract-manifest (true) and --no-extract-manifest (false)\n const extractManifest = flags['extract-manifest'] ?? true\n\n const fullManifestDir = resolveManifestDirectory(context.workDir, manifestDir)\n return {\n manifestDir: fullManifestDir,\n verbose,\n extractManifest,\n }\n}\n\nexport function parseDeploySchemasConfig(flags: DeploySchemasFlags, context: {workDir: string}) {\n const errors: string[] = []\n\n const commonFlags = parseCommonFlags(flags, context, errors)\n const workspaceName = parseWorkspace(flags, errors)\n const tag = parseTag(flags, errors)\n const schemaRequired = !!flags['schema-required']\n\n assertNoErrors(errors)\n return {...commonFlags, workspaceName, tag, schemaRequired}\n}\n\nexport function parseListSchemasConfig(flags: SchemaListFlags, context: {workDir: string}) {\n const errors: string[] = []\n\n const commonFlags = parseCommonFlags(flags, context, errors)\n const id = parseId(flags, errors)\n const json = !!flags.json\n\n assertNoErrors(errors)\n return {...commonFlags, json, id}\n}\n\nexport function parseDeleteSchemasConfig(flags: DeleteSchemaFlags, context: {workDir: string}) {\n const errors: string[] = []\n\n const commonFlags = parseCommonFlags(flags, context, errors)\n const ids = parseIds(flags, errors)\n const dataset = parseDataset(flags, errors)\n\n assertNoErrors(errors)\n return {...commonFlags, dataset, ids}\n}\n\nfunction assertNoErrors(errors: string[]) {\n if (errors.length) {\n throw new FlagValidationError(\n `Invalid arguments:\\n${errors.map((error) => ` - ${error}`).join('\\n')}`,\n )\n }\n}\n\nexport function parseIds(flags: {ids?: unknown}, errors: string[]): WorkspaceSchemaId[] {\n const parsedIds = parseNonEmptyString(flags, 'ids', errors)\n if (errors.length) {\n return []\n }\n\n const ids = parsedIds\n .split(',')\n .map((id) => id.trim())\n .filter((id) => !!id)\n .map((id) => parseWorkspaceSchemaId(id, errors))\n .filter(isDefined)\n\n const uniqueIds = uniqBy(ids, 'schemaId' satisfies keyof (typeof ids)[number])\n if (uniqueIds.length < ids.length) {\n errors.push(`ids contains duplicates`)\n }\n if (!errors.length && !uniqueIds.length) {\n errors.push(`ids contains no valid id strings`)\n }\n return uniqueIds\n}\n\nexport function parseId(flags: {id?: unknown}, errors: string[]) {\n const id = flags.id === undefined ? undefined : parseNonEmptyString(flags, 'id', errors)\n if (id) {\n return parseWorkspaceSchemaId(id, errors)?.schemaId\n }\n return undefined\n}\n\nexport function parseWorkspaceSchemaId(id: string, errors: string[]) {\n const trimmedId = id.trim()\n\n if (!trimmedId.match(validForIdPattern)) {\n errors.push(`id can only contain characters in [${validForIdChars}] but found: \"${trimmedId}\"`)\n return undefined\n }\n\n if (trimmedId.startsWith('-')) {\n errors.push(`id cannot start with - (dash) but found: \"${trimmedId}\"`)\n return undefined\n }\n\n if (trimmedId.match(/\\.\\./g)) {\n errors.push(`id cannot have consecutive . (period) characters, but found: \"${trimmedId}\"`)\n return undefined\n }\n const [fullMatch, workspace, tag] =\n trimmedId.match(taggedIdIdPattern) ?? trimmedId.match(baseIdPattern) ?? []\n if (!workspace) {\n errors.push(\n [\n `id must either match ${SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.<workspaceName> `,\n `or ${SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.<workspaceName>.tag.<tag> but found: \"${trimmedId}\". `,\n `Note that workspace name characters not in [${validForNamesChars}] has to be replaced with _ for schema id.`,\n ].join(''),\n )\n return undefined\n }\n return {\n schemaId: trimmedId,\n workspace,\n }\n}\n\nfunction parseDataset(flags: {dataset?: unknown}, errors: string[]) {\n return flags.dataset === undefined ? undefined : parseNonEmptyString(flags, 'dataset', errors)\n}\n\nfunction parseWorkspace(flags: {workspace?: unknown}, errors: string[]) {\n return flags.workspace === undefined ? undefined : parseNonEmptyString(flags, 'workspace', errors)\n}\n\nfunction parseManifestDir(flags: {'manifest-dir'?: unknown}, errors: string[]) {\n return flags['manifest-dir'] === undefined\n ? undefined\n : parseNonEmptyString(flags, 'manifest-dir', errors)\n}\n\nexport function parseTag(flags: {tag?: unknown}, errors: string[]) {\n if (flags.tag === undefined) {\n return undefined\n }\n\n const tag = parseNonEmptyString(flags, 'tag', errors)\n if (errors.length) {\n return undefined\n }\n\n if (tag.includes('.')) {\n errors.push(`tag cannot contain . (period), but was: \"${tag}\"`)\n return undefined\n }\n\n if (!tag.match(validForNamesPattern)) {\n errors.push(`tag can only contain characters in [${validForNamesChars}], but was: \"${tag}\"`)\n return undefined\n }\n\n if (tag.startsWith('-')) {\n errors.push(`tag cannot start with - (dash) but was: \"${tag}\"`)\n return undefined\n }\n\n return tag\n}\n\nfunction parseNonEmptyString<\n Flag extends string,\n Flags extends Partial<Record<Flag, unknown | undefined>>,\n>(flags: Flags, flagName: Flag, errors: string[]): string {\n const flag = flags[flagName]\n if (!isString(flag) || !flag) {\n errors.push(`${flagName} argument is empty`)\n return ''\n }\n return flag\n}\n\nfunction isString(flag: unknown): flag is string {\n return typeof flag === 'string'\n}\n\nexport const SCHEMA_PERMISSION_HELP_TEXT =\n 'For multi-project workspaces, set SANITY_AUTH_TOKEN environment variable to a token with access to the workspace projects.'\n","import {\n type CliCommandArguments,\n type CliCommandContext,\n type CliOutputter,\n type TelemetryUserProperties,\n} from '@sanity/cli'\nimport {type TelemetryLogger} from '@sanity/telemetry'\nimport chalk from 'chalk'\n\nimport {type ExtractManifestFlags, extractManifestSafe} from '../../manifest/extractManifestAction'\nimport {GenerateManifest} from '../__telemetry__/schemaStore.telemetry'\nimport {FlagValidationError} from './schemaStoreValidation'\n\nexport type ManifestExtractor = (manifestDir: string) => Promise<void>\n\nexport async function ensureManifestExtractSatisfied(args: {\n schemaRequired: boolean\n extractManifest: boolean\n manifestDir: string\n manifestExtractor: (manifestDir: string) => Promise<void>\n output: CliOutputter\n telemetry: TelemetryLogger<TelemetryUserProperties>\n}) {\n const {schemaRequired, extractManifest, manifestDir, manifestExtractor, output, telemetry} = args\n if (!extractManifest) {\n return true\n }\n const trace = telemetry.trace(GenerateManifest, {manifestDir, schemaRequired})\n try {\n trace.start()\n // a successful manifest extract will write a new manifest file, which manifestReader will then read from disk\n await manifestExtractor(manifestDir)\n trace.complete()\n return true\n } catch (err) {\n trace.error(err)\n\n if (schemaRequired || err instanceof FlagValidationError) {\n throw err\n } else {\n output.print(chalk.gray(`↳ Failed to extract manifest:\\n ${err.message}`))\n return false\n }\n }\n}\n\nexport function createManifestExtractor(context: CliCommandContext & {safe?: boolean}) {\n return async (manifestDir: string) => {\n const error = await extractManifestSafe(\n {\n extOptions: {path: manifestDir},\n groupOrCommand: 'extract',\n argv: [],\n argsWithoutOptions: [],\n extraArguments: [],\n } as CliCommandArguments<ExtractManifestFlags>,\n context,\n )\n if (!context.safe && error) {\n throw error\n }\n }\n}\n","import {type CliApiClient} from '@sanity/cli'\n\nexport function createSchemaApiClient(apiClient: CliApiClient) {\n const client = apiClient({\n requireUser: true,\n requireProject: true,\n }).withConfig({apiVersion: 'v2025-03-01', useCdn: false})\n\n const projectId = client.config().projectId\n const dataset = client.config().dataset\n if (!projectId) throw new Error('Project ID is not defined')\n if (!dataset) throw new Error('Dataset is not defined')\n\n return {\n client,\n projectId,\n dataset,\n }\n}\n","export function getProjectIdDatasetsOutString(\n projectIdDatasets: {projectId: string; dataset: string}[],\n) {\n return projectIdDatasets.length === 1\n ? `${projectIdDatasetPair(projectIdDatasets[0])}`\n : `${getStringArrayOutString(projectIdDatasets.map(projectIdDatasetPair))}`\n}\n\nexport function projectIdDatasetPair(pair: {projectId: string; dataset: string}) {\n return JSON.stringify({projectId: pair.projectId, dataset: pair.dataset})\n}\n\nexport function getStringArrayOutString(array: string[]) {\n return `[${array.map((d) => `\"${d}\"`).join(',')}]`\n}\n\nexport function getStringList(array: string[]) {\n return array.map((s) => `- ${s}`).join('\\n')\n}\n"],"names":["SANITY_WORKSPACE_SCHEMA_ID_PREFIX","CURRENT_WORKSPACE_SCHEMA_VERSION","GenerateManifest","defineTrace","name","version","description","SchemaDeploy","isDefined","value","createManifestReader","manifestDir","output","jsonReader","parseJsonFile","parsedManifest","parsedWorkspaces","getManifest","parsedJson","manifestFile","path","join","MANIFEST_FILENAME","result","Error","print","chalk","gray","lastModified","getWorkspaceSchema","workspaceName","manifest","workspaceManifest","workspaces","find","workspace","workspaceSchemaFile","schema","resolveManifestDirectory","workDir","customPath","defaultOutputDir","resolve","outputDir","defaultStaticPath","staticPath","process","cwd","filePath","stats","stat","content","readFile","mtime","toISOString","json","JSON","parse","validForIdChars","validForIdPattern","RegExp","validForNamesChars","validForNamesPattern","requiredInId","replace","idIdPatternString","baseIdPattern","taggedIdIdPattern","FlagValidationError","constructor","message","parseCommonFlags","flags","context","errors","parseManifestDir","verbose","extractManifest","parseDeploySchemasConfig","commonFlags","parseWorkspace","tag","parseTag","schemaRequired","assertNoErrors","parseListSchemasConfig","id","parseId","parseDeleteSchemasConfig","ids","parseIds","dataset","parseDataset","length","map","error","parsedIds","parseNonEmptyString","split","trim","filter","parseWorkspaceSchemaId","uniqueIds","uniqBy","push","undefined","schemaId","trimmedId","match","startsWith","fullMatch","includes","flagName","flag","isString","SCHEMA_PERMISSION_HELP_TEXT","ensureManifestExtractSatisfied","args","manifestExtractor","telemetry","trace","start","complete","err","createManifestExtractor","extractManifestSafe","extOptions","groupOrCommand","argv","argsWithoutOptions","extraArguments","safe","createSchemaApiClient","apiClient","client","requireUser","requireProject","withConfig","apiVersion","useCdn","projectId","config","getProjectIdDatasetsOutString","projectIdDatasets","projectIdDatasetPair","getStringArrayOutString","pair","stringify","array","d","getStringList","s"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"schemaStoreOutStrings.js","sources":["../../src/_internal/manifest/manifestTypes.ts","../../src/_internal/cli/actions/schema/__telemetry__/schemaStore.telemetry.ts","../../src/_internal/manifest/manifestTypeHelpers.ts","../../src/_internal/cli/actions/schema/utils/manifestReader.ts","../../src/_internal/cli/actions/schema/utils/schemaStoreValidation.ts","../../src/_internal/cli/actions/schema/utils/mainfestExtractor.ts","../../src/_internal/cli/actions/schema/utils/schemaApiClient.ts","../../src/_internal/cli/actions/schema/utils/schemaStoreOutStrings.ts"],"sourcesContent":["import {type SanityDocumentLike} from '@sanity/types'\nimport {type MediaLibraryConfig} from 'sanity'\n\nexport const SANITY_WORKSPACE_SCHEMA_ID_PREFIX = '_.schemas'\nexport const SANITY_WORKSPACE_SCHEMA_TYPE = 'system.schema'\nexport const CURRENT_WORKSPACE_SCHEMA_VERSION = '2025-05-01'\n\nexport type ManifestSerializable =\n | string\n | number\n | boolean\n | {[k: string]: ManifestSerializable}\n | ManifestSerializable[]\n\nexport interface CreateManifest {\n version: number\n createdAt: string\n workspaces: ManifestWorkspaceFile[]\n}\n\nexport interface ManifestWorkspaceFile extends Omit<CreateWorkspaceManifest, 'schema' | 'tools'> {\n schema: string // filename\n tools: string // filename\n}\n\nexport interface CreateWorkspaceManifest {\n name: string\n title?: string\n subtitle?: string\n basePath: string\n dataset: string\n projectId: string\n mediaLibrary?: MediaLibraryConfig\n schema: ManifestSchemaType[]\n tools: ManifestTool[]\n /**\n * returns null in the case of the icon not being able to be stringified\n */\n icon: string | null\n}\n\nexport interface ManifestSchemaType {\n type: string\n name: string\n title?: string\n deprecated?: {\n reason: string\n }\n readOnly?: boolean | 'conditional'\n hidden?: boolean | 'conditional'\n validation?: ManifestValidationGroup[]\n fields?: ManifestField[]\n to?: ManifestReferenceMember[]\n of?: ManifestArrayMember[]\n preview?: {\n select: Record<string, string>\n }\n fieldsets?: ManifestFieldset[]\n options?: Record<string, ManifestSerializable>\n //portable text\n marks?: {\n annotations?: ManifestArrayMember[]\n decorators?: ManifestTitledValue[]\n }\n lists?: ManifestTitledValue[]\n styles?: ManifestTitledValue[]\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 name: string\n title?: string\n [index: string]: ManifestSerializable | undefined\n}\n\nexport interface ManifestTitledValue {\n value: string\n title?: string\n}\n\nexport type ManifestField = ManifestSchemaType & {fieldset?: string}\nexport type ManifestArrayMember = Omit<ManifestSchemaType, 'name'> & {name?: string}\nexport type ManifestReferenceMember = Omit<ManifestSchemaType, 'name'> & {name?: string}\n\nexport interface ManifestValidationGroup {\n rules: ManifestValidationRule[]\n message?: string\n level?: 'error' | 'warning' | 'info'\n}\n\nexport type ManifestValidationRule = {\n flag: string\n constraint?: ManifestSerializable\n [index: string]: ManifestSerializable | undefined\n}\n\nexport interface ManifestTool {\n name: string\n title: string\n /**\n * returns null in the case of the icon not being able to be stringified\n */\n icon: string | null\n type: string | null\n}\n\nexport type DefaultWorkspaceSchemaId = `${typeof SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.${string}`\nexport type PrefixedWorkspaceSchemaId = `${DefaultWorkspaceSchemaId}.${string}`\nexport type WorkspaceSchemaId = DefaultWorkspaceSchemaId | PrefixedWorkspaceSchemaId\n\nexport interface StoredWorkspaceSchema extends SanityDocumentLike {\n _type: typeof SANITY_WORKSPACE_SCHEMA_TYPE\n _id: WorkspaceSchemaId\n /* api-like version string: date at which the format had a meaningful change */\n version: typeof CURRENT_WORKSPACE_SCHEMA_VERSION | undefined\n tag?: string\n workspace: {\n name: string\n title?: string\n }\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, put we deploy to the API using ManifestSchemaType[]\n */\n schema: string | ManifestSchemaType[]\n}\n","import {defineTrace} from '@sanity/telemetry'\n\ninterface SchemaDeployTraceData {\n manifestDir: string\n schemaRequired: boolean\n workspaceName?: string\n idPrefix?: string\n extractManifest?: boolean\n}\n\ninterface GenerateManifestTraceData {\n manifestDir: string\n schemaRequired: boolean\n}\n\nexport const GenerateManifest = defineTrace<GenerateManifestTraceData>({\n name: 'Manifest generation executed',\n version: 1,\n description: 'Manifest generation was executed',\n})\n\nexport const SchemaDeploy = defineTrace<SchemaDeployTraceData>({\n name: 'Schema deploy action executed',\n version: 1,\n description:\n 'Schema deploy action was executed, either via sanity schema deploy or as sanity deploy',\n})\n\n//Note – the individual sanity schema store commands are covered by the general cli telemetry\n","import {\n type CrossDatasetReferenceSchemaType,\n type GlobalDocumentReferenceSchemaType,\n type ObjectField,\n type ObjectSchemaType,\n type ReferenceSchemaType,\n type SchemaType,\n} from '@sanity/types'\n\nconst DEFAULT_IMAGE_FIELDS = ['asset', 'hotspot', 'crop', 'media']\nconst DEFAULT_FILE_FIELDS = ['asset', 'media']\nconst DEFAULT_GEOPOINT_FIELDS = ['lat', 'lng', 'alt']\nconst DEFAULT_SLUG_FIELDS = ['current', 'source']\n\nexport function getCustomFields(type: ObjectSchemaType): (ObjectField & {fieldset?: string})[] {\n const fields = type.fieldsets\n ? type.fieldsets.flatMap((fs) => {\n if (fs.single) {\n return fs.field\n }\n return fs.fields.map((field) => ({\n ...field,\n fieldset: fs.name,\n }))\n })\n : type.fields\n\n if (isType(type, 'block')) {\n return []\n }\n if (isType(type, 'slug')) {\n return fields.filter((f) => !DEFAULT_SLUG_FIELDS.includes(f.name))\n }\n if (isType(type, 'geopoint')) {\n return fields.filter((f) => !DEFAULT_GEOPOINT_FIELDS.includes(f.name))\n }\n if (isType(type, 'image')) {\n return fields.filter((f) => !DEFAULT_IMAGE_FIELDS.includes(f.name))\n }\n if (isType(type, 'file')) {\n return fields.filter((f) => !DEFAULT_FILE_FIELDS.includes(f.name))\n }\n return fields\n}\n\nexport function isReference(type: SchemaType): type is ReferenceSchemaType {\n return isType(type, 'reference')\n}\n\nexport function isCrossDatasetReference(type: SchemaType): type is CrossDatasetReferenceSchemaType {\n return isType(type, 'crossDatasetReference')\n}\n\nexport function isGlobalDocumentReference(\n type: SchemaType,\n): type is GlobalDocumentReferenceSchemaType {\n return isType(type, 'globalDocumentReference')\n}\n\nexport function isObjectField(maybeOjectField: unknown): boolean {\n return (\n typeof maybeOjectField === 'object' && maybeOjectField !== null && 'name' in maybeOjectField\n )\n}\n\nexport function isCustomized(maybeCustomized: SchemaType): boolean {\n const hasFieldsArray =\n isObjectField(maybeCustomized) &&\n !isReference(maybeCustomized) &&\n !isCrossDatasetReference(maybeCustomized) &&\n !isGlobalDocumentReference(maybeCustomized) &&\n 'fields' in maybeCustomized &&\n Array.isArray(maybeCustomized.fields)\n\n if (!hasFieldsArray) {\n return false\n }\n\n const fields = getCustomFields(maybeCustomized)\n return !!fields.length\n}\n\nexport function isType(schemaType: SchemaType, typeName: string): boolean {\n if (schemaType.name === typeName) {\n return true\n }\n if (!schemaType.type) {\n return false\n }\n return isType(schemaType.type, typeName)\n}\n\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object'\n}\n\nexport function isPrimitive(value: unknown): value is string | boolean | number {\n return isString(value) || isBoolean(value) || isNumber(value)\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string'\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === 'boolean'\n}\n\nfunction isBoolean(value: unknown): value is boolean {\n return typeof value === 'number'\n}\n","import {type Stats} from 'node:fs'\nimport {readFile, stat} from 'node:fs/promises'\nimport path, {join, resolve} from 'node:path'\n\nimport {type CliOutputter} from '@sanity/cli'\nimport chalk from 'chalk'\n\nimport {type CreateManifest, type ManifestSchemaType} from '../../../../manifest/manifestTypes'\nimport {MANIFEST_FILENAME} from '../../manifest/extractManifestAction'\nimport {type DeploySchemasFlags} from '../deploySchemasAction'\n\nexport type ManifestJsonReader = <T>(\n filePath: string,\n) => Promise<JsonFileParseSuccess<T> | undefined>\n\nexport type CreateManifestReaderFactory = (args: {\n manifestDir: string\n output: CliOutputter\n jsonReader?: <T>(filePath: string) => Promise<JsonFileParseSuccess<T> | undefined>\n}) => CreateManifestReader\n\nexport interface CreateManifestReader {\n getManifest: () => Promise<CreateManifest>\n getWorkspaceSchema: (workspaceName: string) => Promise<ManifestSchemaType[]>\n}\n\ninterface JsonFileParseSuccess<T> {\n parsedJson: T\n path: string\n lastModified: string\n}\n\n/**\n * The manifest reader will try to read manifest and workspace schema files _once_ and cache a successful result.\n * If you need to re-read the manifest from disk, create a new instance.\n */\nexport const createManifestReader: CreateManifestReaderFactory = ({\n manifestDir,\n output,\n jsonReader = parseJsonFile,\n}) => {\n let parsedManifest: JsonFileParseSuccess<CreateManifest>\n const parsedWorkspaces: Record<string, JsonFileParseSuccess<ManifestSchemaType[]> | undefined> =\n {}\n\n const getManifest: CreateManifestReader['getManifest'] = async () => {\n if (parsedManifest) {\n return parsedManifest?.parsedJson\n }\n\n const manifestFile = path.join(manifestDir, MANIFEST_FILENAME)\n\n const result = await jsonReader<CreateManifest>(manifestFile)\n if (!result) {\n throw new Error(\n `Manifest does not exist at ${manifestFile}. To create the manifest file, omit --no-${'extract-manifest' satisfies keyof DeploySchemasFlags} or run \"sanity manifest extract\" first.`,\n )\n }\n\n output.print(\n chalk.gray(`↳ Read manifest from ${manifestFile} (last modified: ${result.lastModified})`),\n )\n\n parsedManifest = result\n return result.parsedJson\n }\n\n const getWorkspaceSchema: CreateManifestReader['getWorkspaceSchema'] = async (workspaceName) => {\n if (parsedWorkspaces[workspaceName]) {\n return parsedWorkspaces[workspaceName]?.parsedJson\n }\n const manifest = await getManifest()\n if (!manifest) {\n throw Error('Manifest is required to read workspace schema.')\n }\n\n const workspaceManifest = manifest.workspaces.find(\n (workspace) => workspace.name === workspaceName,\n )\n\n if (!workspaceManifest) {\n throw Error(`No workspace named \"${workspaceName}\" found in manifest.`)\n }\n\n const workspaceSchemaFile = path.join(manifestDir, workspaceManifest.schema ?? '')\n const result = await jsonReader<ManifestSchemaType[]>(workspaceSchemaFile)\n if (!result) {\n throw Error(`Workspace schema file at \"${workspaceSchemaFile}\" does not exist.`)\n }\n parsedWorkspaces[workspaceName] = result\n return result.parsedJson\n }\n return {\n getManifest,\n getWorkspaceSchema,\n }\n}\n\nexport function resolveManifestDirectory(workDir: string, customPath?: string): string {\n const defaultOutputDir = resolve(join(workDir, 'dist'))\n\n const outputDir = resolve(defaultOutputDir)\n const defaultStaticPath = join(outputDir, 'static')\n\n const staticPath = customPath ?? defaultStaticPath\n return path.resolve(process.cwd(), staticPath)\n}\n\nasync function parseJsonFile<T>(filePath: string): Promise<JsonFileParseSuccess<T> | undefined> {\n let stats: Stats\n try {\n stats = await stat(filePath)\n } catch (err) {\n // file does not exist\n return undefined\n }\n const content = await readFile(filePath, 'utf-8')\n const lastModified = stats.mtime.toISOString()\n const json = JSON.parse(content) as T\n if (!json) {\n throw new Error(`JSON file \"${filePath}\" was empty.`)\n }\n return {\n parsedJson: json,\n path: filePath,\n lastModified,\n }\n}\n","import uniqBy from 'lodash/uniqBy'\n\nimport {isDefined} from '../../../../manifest/manifestTypeHelpers'\nimport {SANITY_WORKSPACE_SCHEMA_ID_PREFIX} from '../../../../manifest/manifestTypes'\nimport {type DeleteSchemaFlags} from '../deleteSchemaAction'\nimport {type DeploySchemasFlags} from '../deploySchemasAction'\nimport {type SchemaListFlags} from '../listSchemasAction'\nimport {resolveManifestDirectory} from './manifestReader'\n\nexport const validForIdChars = 'a-zA-Z0-9._-'\nexport const validForIdPattern = new RegExp(`^[${validForIdChars}]+$`, 'g')\n\n//no periods allowed in workspaceName or tag in ids\nexport const validForNamesChars = 'a-zA-Z0-9_-'\nexport const validForNamesPattern = new RegExp(`^[${validForNamesChars}]+$`, 'g')\n\nconst requiredInId = SANITY_WORKSPACE_SCHEMA_ID_PREFIX.replace(/[.]/g, '\\\\.')\n\nconst idIdPatternString = `^${requiredInId}\\\\.([${validForNamesChars}]+)`\nconst baseIdPattern = new RegExp(`${idIdPatternString}$`)\nconst taggedIdIdPattern = new RegExp(`${idIdPatternString}\\\\.tag\\\\.([${validForNamesChars}]+)$`)\n\nexport class FlagValidationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'FlagValidationError'\n }\n}\n\ninterface WorkspaceSchemaId {\n schemaId: string\n workspace: string\n}\n\nexport interface SchemaStoreCommonFlags {\n 'extract-manifest'?: boolean\n 'manifest-dir'?: string\n 'verbose'?: boolean\n}\n\nfunction parseCommonFlags(\n flags: SchemaStoreCommonFlags,\n context: {workDir: string},\n errors: string[],\n) {\n const manifestDir = parseManifestDir(flags, errors)\n const verbose = !!flags.verbose\n // extract manifest by default: our CLI layer handles both --extract-manifest (true) and --no-extract-manifest (false)\n const extractManifest = flags['extract-manifest'] ?? true\n\n const fullManifestDir = resolveManifestDirectory(context.workDir, manifestDir)\n return {\n manifestDir: fullManifestDir,\n verbose,\n extractManifest,\n }\n}\n\nexport function parseDeploySchemasConfig(flags: DeploySchemasFlags, context: {workDir: string}) {\n const errors: string[] = []\n\n const commonFlags = parseCommonFlags(flags, context, errors)\n const workspaceName = parseWorkspace(flags, errors)\n const tag = parseTag(flags, errors)\n const schemaRequired = !!flags['schema-required']\n\n assertNoErrors(errors)\n return {...commonFlags, workspaceName, tag, schemaRequired}\n}\n\nexport function parseListSchemasConfig(flags: SchemaListFlags, context: {workDir: string}) {\n const errors: string[] = []\n\n const commonFlags = parseCommonFlags(flags, context, errors)\n const id = parseId(flags, errors)\n const json = !!flags.json\n\n assertNoErrors(errors)\n return {...commonFlags, json, id}\n}\n\nexport function parseDeleteSchemasConfig(flags: DeleteSchemaFlags, context: {workDir: string}) {\n const errors: string[] = []\n\n const commonFlags = parseCommonFlags(flags, context, errors)\n const ids = parseIds(flags, errors)\n const dataset = parseDataset(flags, errors)\n\n assertNoErrors(errors)\n return {...commonFlags, dataset, ids}\n}\n\nfunction assertNoErrors(errors: string[]) {\n if (errors.length) {\n throw new FlagValidationError(\n `Invalid arguments:\\n${errors.map((error) => ` - ${error}`).join('\\n')}`,\n )\n }\n}\n\nexport function parseIds(flags: {ids?: unknown}, errors: string[]): WorkspaceSchemaId[] {\n const parsedIds = parseNonEmptyString(flags, 'ids', errors)\n if (errors.length) {\n return []\n }\n\n const ids = parsedIds\n .split(',')\n .map((id) => id.trim())\n .filter((id) => !!id)\n .map((id) => parseWorkspaceSchemaId(id, errors))\n .filter(isDefined)\n\n const uniqueIds = uniqBy(ids, 'schemaId' satisfies keyof (typeof ids)[number])\n if (uniqueIds.length < ids.length) {\n errors.push(`ids contains duplicates`)\n }\n if (!errors.length && !uniqueIds.length) {\n errors.push(`ids contains no valid id strings`)\n }\n return uniqueIds\n}\n\nexport function parseId(flags: {id?: unknown}, errors: string[]) {\n const id = flags.id === undefined ? undefined : parseNonEmptyString(flags, 'id', errors)\n if (id) {\n return parseWorkspaceSchemaId(id, errors)?.schemaId\n }\n return undefined\n}\n\nexport function parseWorkspaceSchemaId(id: string, errors: string[]) {\n const trimmedId = id.trim()\n\n if (!trimmedId.match(validForIdPattern)) {\n errors.push(`id can only contain characters in [${validForIdChars}] but found: \"${trimmedId}\"`)\n return undefined\n }\n\n if (trimmedId.startsWith('-')) {\n errors.push(`id cannot start with - (dash) but found: \"${trimmedId}\"`)\n return undefined\n }\n\n if (trimmedId.match(/\\.\\./g)) {\n errors.push(`id cannot have consecutive . (period) characters, but found: \"${trimmedId}\"`)\n return undefined\n }\n const [fullMatch, workspace, tag] =\n trimmedId.match(taggedIdIdPattern) ?? trimmedId.match(baseIdPattern) ?? []\n if (!workspace) {\n errors.push(\n [\n `id must either match ${SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.<workspaceName> `,\n `or ${SANITY_WORKSPACE_SCHEMA_ID_PREFIX}.<workspaceName>.tag.<tag> but found: \"${trimmedId}\". `,\n `Note that workspace name characters not in [${validForNamesChars}] has to be replaced with _ for schema id.`,\n ].join(''),\n )\n return undefined\n }\n return {\n schemaId: trimmedId,\n workspace,\n }\n}\n\nfunction parseDataset(flags: {dataset?: unknown}, errors: string[]) {\n return flags.dataset === undefined ? undefined : parseNonEmptyString(flags, 'dataset', errors)\n}\n\nfunction parseWorkspace(flags: {workspace?: unknown}, errors: string[]) {\n return flags.workspace === undefined ? undefined : parseNonEmptyString(flags, 'workspace', errors)\n}\n\nfunction parseManifestDir(flags: {'manifest-dir'?: unknown}, errors: string[]) {\n return flags['manifest-dir'] === undefined\n ? undefined\n : parseNonEmptyString(flags, 'manifest-dir', errors)\n}\n\nexport function parseTag(flags: {tag?: unknown}, errors: string[]) {\n if (flags.tag === undefined) {\n return undefined\n }\n\n const tag = parseNonEmptyString(flags, 'tag', errors)\n if (errors.length) {\n return undefined\n }\n\n if (tag.includes('.')) {\n errors.push(`tag cannot contain . (period), but was: \"${tag}\"`)\n return undefined\n }\n\n if (!tag.match(validForNamesPattern)) {\n errors.push(`tag can only contain characters in [${validForNamesChars}], but was: \"${tag}\"`)\n return undefined\n }\n\n if (tag.startsWith('-')) {\n errors.push(`tag cannot start with - (dash) but was: \"${tag}\"`)\n return undefined\n }\n\n return tag\n}\n\nfunction parseNonEmptyString<\n Flag extends string,\n Flags extends Partial<Record<Flag, unknown | undefined>>,\n>(flags: Flags, flagName: Flag, errors: string[]): string {\n const flag = flags[flagName]\n if (!isString(flag) || !flag) {\n errors.push(`${flagName} argument is empty`)\n return ''\n }\n return flag\n}\n\nfunction isString(flag: unknown): flag is string {\n return typeof flag === 'string'\n}\n\nexport const SCHEMA_PERMISSION_HELP_TEXT =\n 'For multi-project workspaces, set SANITY_AUTH_TOKEN environment variable to a token with access to the workspace projects.'\n","import {\n type CliCommandArguments,\n type CliCommandContext,\n type CliOutputter,\n type TelemetryUserProperties,\n} from '@sanity/cli'\nimport {type TelemetryLogger} from '@sanity/telemetry'\nimport chalk from 'chalk'\n\nimport {type ExtractManifestFlags, extractManifestSafe} from '../../manifest/extractManifestAction'\nimport {GenerateManifest} from '../__telemetry__/schemaStore.telemetry'\nimport {FlagValidationError} from './schemaStoreValidation'\n\nexport type ManifestExtractor = (manifestDir: string) => Promise<void>\n\nexport async function ensureManifestExtractSatisfied(args: {\n schemaRequired: boolean\n extractManifest: boolean\n manifestDir: string\n manifestExtractor: (manifestDir: string) => Promise<void>\n output: CliOutputter\n telemetry: TelemetryLogger<TelemetryUserProperties>\n}) {\n const {schemaRequired, extractManifest, manifestDir, manifestExtractor, output, telemetry} = args\n if (!extractManifest) {\n return true\n }\n const trace = telemetry.trace(GenerateManifest, {manifestDir, schemaRequired})\n try {\n trace.start()\n // a successful manifest extract will write a new manifest file, which manifestReader will then read from disk\n await manifestExtractor(manifestDir)\n trace.complete()\n return true\n } catch (err) {\n trace.error(err)\n\n if (schemaRequired || err instanceof FlagValidationError) {\n throw err\n } else {\n output.print(chalk.gray(`↳ Failed to extract manifest:\\n ${err.message}`))\n return false\n }\n }\n}\n\nexport function createManifestExtractor(context: CliCommandContext & {safe?: boolean}) {\n return async (manifestDir: string) => {\n const error = await extractManifestSafe(\n {\n extOptions: {path: manifestDir},\n groupOrCommand: 'extract',\n argv: [],\n argsWithoutOptions: [],\n extraArguments: [],\n } as CliCommandArguments<ExtractManifestFlags>,\n context,\n )\n if (!context.safe && error) {\n throw error\n }\n }\n}\n","import {type CliApiClient} from '@sanity/cli'\n\nexport function createSchemaApiClient(apiClient: CliApiClient) {\n const client = apiClient({\n requireUser: true,\n requireProject: true,\n }).withConfig({apiVersion: 'v2025-03-01', useCdn: false})\n\n const projectId = client.config().projectId\n const dataset = client.config().dataset\n if (!projectId) throw new Error('Project ID is not defined')\n if (!dataset) throw new Error('Dataset is not defined')\n\n return {\n client,\n projectId,\n dataset,\n }\n}\n","export function getProjectIdDatasetsOutString(\n projectIdDatasets: {projectId: string; dataset: string}[],\n) {\n return projectIdDatasets.length === 1\n ? `${projectIdDatasetPair(projectIdDatasets[0])}`\n : `${getStringArrayOutString(projectIdDatasets.map(projectIdDatasetPair))}`\n}\n\nexport function projectIdDatasetPair(pair: {projectId: string; dataset: string}) {\n return JSON.stringify({projectId: pair.projectId, dataset: pair.dataset})\n}\n\nexport function getStringArrayOutString(array: string[]) {\n return `[${array.map((d) => `\"${d}\"`).join(',')}]`\n}\n\nexport function getStringList(array: string[]) {\n return array.map((s) => `- ${s}`).join('\\n')\n}\n"],"names":["SANITY_WORKSPACE_SCHEMA_ID_PREFIX","CURRENT_WORKSPACE_SCHEMA_VERSION","GenerateManifest","defineTrace","name","version","description","SchemaDeploy","isDefined","value","createManifestReader","manifestDir","output","jsonReader","parseJsonFile","parsedManifest","parsedWorkspaces","getManifest","parsedJson","manifestFile","path","join","MANIFEST_FILENAME","result","Error","print","chalk","gray","lastModified","getWorkspaceSchema","workspaceName","manifest","workspaceManifest","workspaces","find","workspace","workspaceSchemaFile","schema","resolveManifestDirectory","workDir","customPath","defaultOutputDir","resolve","outputDir","defaultStaticPath","staticPath","process","cwd","filePath","stats","stat","content","readFile","mtime","toISOString","json","JSON","parse","validForIdChars","validForIdPattern","RegExp","validForNamesChars","validForNamesPattern","requiredInId","replace","idIdPatternString","baseIdPattern","taggedIdIdPattern","FlagValidationError","constructor","message","parseCommonFlags","flags","context","errors","parseManifestDir","verbose","extractManifest","parseDeploySchemasConfig","commonFlags","parseWorkspace","tag","parseTag","schemaRequired","assertNoErrors","parseListSchemasConfig","id","parseId","parseDeleteSchemasConfig","ids","parseIds","dataset","parseDataset","length","map","error","parsedIds","parseNonEmptyString","split","trim","filter","parseWorkspaceSchemaId","uniqueIds","uniqBy","push","undefined","schemaId","trimmedId","match","startsWith","fullMatch","includes","flagName","flag","isString","SCHEMA_PERMISSION_HELP_TEXT","ensureManifestExtractSatisfied","args","manifestExtractor","telemetry","trace","start","complete","err","createManifestExtractor","extractManifestSafe","extOptions","groupOrCommand","argv","argsWithoutOptions","extraArguments","safe","createSchemaApiClient","apiClient","client","requireUser","requireProject","withConfig","apiVersion","useCdn","projectId","config","getProjectIdDatasetsOutString","projectIdDatasets","projectIdDatasetPair","getStringArrayOutString","pair","stringify","array","d","getStringList","s"],"mappings":"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"}
|
@@ -32,11 +32,14 @@ function isReference(type) {
|
|
32
32
|
function isCrossDatasetReference(type) {
|
33
33
|
return isType(type, "crossDatasetReference");
|
34
34
|
}
|
35
|
+
function isGlobalDocumentReference(type) {
|
36
|
+
return isType(type, "globalDocumentReference");
|
37
|
+
}
|
35
38
|
function isObjectField(maybeOjectField) {
|
36
39
|
return typeof maybeOjectField == "object" && maybeOjectField !== null && "name" in maybeOjectField;
|
37
40
|
}
|
38
41
|
function isCustomized(maybeCustomized) {
|
39
|
-
return isObjectField(maybeCustomized) && !
|
42
|
+
return isObjectField(maybeCustomized) && !isReference(maybeCustomized) && !isCrossDatasetReference(maybeCustomized) && !isGlobalDocumentReference(maybeCustomized) && "fields" in maybeCustomized && Array.isArray(maybeCustomized.fields) ? !!getCustomFields(maybeCustomized).length : !1;
|
40
43
|
}
|
41
44
|
function isType(schemaType, typeName) {
|
42
45
|
return schemaType.name === typeName ? !0 : schemaType.type ? isType(schemaType.type, typeName) : !1;
|
@@ -97,7 +100,7 @@ function extractManifestSchemaTypes(schema) {
|
|
97
100
|
return typeNames.filter((typeName) => !studioDefaultTypeNames.includes(typeName)).map((typeName) => schema.get(typeName)).filter((type) => typeof type < "u").map((type) => transformType(type, context));
|
98
101
|
}
|
99
102
|
function transformCommonTypeFields(type, typeName, context) {
|
100
|
-
const arrayProps = typeName === "array" && type.jsonType === "array" ? transformArrayMember(type, context) : {}, referenceProps = isReference(type) ? transformReference(type) : {}, crossDatasetRefProps = isCrossDatasetReference(type) ? transformCrossDatasetReference(type) : {}, objectFields = type.jsonType === "object" && type.type && INLINE_TYPES.includes(typeName) && isCustomized(type) ? {
|
103
|
+
const arrayProps = typeName === "array" && type.jsonType === "array" ? transformArrayMember(type, context) : {}, referenceProps = isReference(type) ? transformReference(type) : {}, crossDatasetRefProps = isCrossDatasetReference(type) ? transformCrossDatasetReference(type) : {}, globalRefProps = isGlobalDocumentReference(type) ? transformGlobalDocumentReference(type) : {}, objectFields = type.jsonType === "object" && type.type && INLINE_TYPES.includes(typeName) && isCustomized(type) ? {
|
101
104
|
fields: getCustomFields(type).map((objectField) => transformField(objectField, context))
|
102
105
|
} : {};
|
103
106
|
return {
|
@@ -108,6 +111,7 @@ function transformCommonTypeFields(type, typeName, context) {
|
|
108
111
|
...arrayProps,
|
109
112
|
...referenceProps,
|
110
113
|
...crossDatasetRefProps,
|
114
|
+
...globalRefProps,
|
111
115
|
...ensureConditional("readOnly", type.readOnly),
|
112
116
|
...ensureConditional("hidden", type.hidden),
|
113
117
|
...transformFieldsets(type),
|
@@ -247,6 +251,22 @@ function transformCrossDatasetReference(reference) {
|
|
247
251
|
})
|
248
252
|
};
|
249
253
|
}
|
254
|
+
function transformGlobalDocumentReference(reference) {
|
255
|
+
return {
|
256
|
+
to: (reference.to ?? []).map((crossDataset) => {
|
257
|
+
const preview = crossDataset.preview?.select ? {
|
258
|
+
preview: {
|
259
|
+
select: crossDataset.preview.select
|
260
|
+
}
|
261
|
+
} : {};
|
262
|
+
return {
|
263
|
+
type: crossDataset.type,
|
264
|
+
...ensureCustomTitle(crossDataset.type, crossDataset.title),
|
265
|
+
...preview
|
266
|
+
};
|
267
|
+
})
|
268
|
+
};
|
269
|
+
}
|
250
270
|
const transformTypeValidationRule = (rule) => ({
|
251
271
|
...rule,
|
252
272
|
constraint: "constraint" in rule && (typeof rule.constraint == "string" ? rule.constraint.toLowerCase() : retainSerializableProps(rule.constraint))
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"extractManifest.js","sources":["../../../../src/_internal/manifest/Icon.tsx","../../../../src/_internal/manifest/manifestTypeHelpers.ts","../../../../src/_internal/manifest/purifyConfig.ts","../../../../src/_internal/manifest/extractWorkspaceManifest.tsx","../../../../src/_internal/cli/threads/extractManifest.ts"],"sourcesContent":["import {ThemeProvider} from '@sanity/ui'\nimport {buildTheme} from '@sanity/ui/theme'\nimport {type ComponentType, isValidElement, type ReactNode} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {createDefaultIcon} from 'sanity'\n\nconst theme = buildTheme()\n\ninterface SchemaIconProps {\n icon?: ComponentType | ReactNode\n title: string\n subtitle?: string\n}\n\nconst SchemaIcon = ({icon, title, subtitle}: SchemaIconProps): React.JSX.Element => {\n return <ThemeProvider theme={theme}>{normalizeIcon(icon, title, subtitle)}</ThemeProvider>\n}\n\nfunction normalizeIcon(\n Icon: ComponentType | ReactNode | undefined,\n title: string,\n subtitle = '',\n): React.JSX.Element {\n if (isValidElementType(Icon)) return <Icon />\n if (isValidElement(Icon)) return Icon\n return createDefaultIcon(title, subtitle)\n}\n\nexport {SchemaIcon}\nexport type {SchemaIconProps}\n","import {\n type CrossDatasetReferenceSchemaType,\n type ObjectField,\n type ObjectSchemaType,\n type ReferenceSchemaType,\n type SchemaType,\n} from '@sanity/types'\n\nconst DEFAULT_IMAGE_FIELDS = ['asset', 'hotspot', 'crop', 'media']\nconst DEFAULT_FILE_FIELDS = ['asset', 'media']\nconst DEFAULT_GEOPOINT_FIELDS = ['lat', 'lng', 'alt']\nconst DEFAULT_SLUG_FIELDS = ['current', 'source']\n\nexport function getCustomFields(type: ObjectSchemaType): (ObjectField & {fieldset?: string})[] {\n const fields = type.fieldsets\n ? type.fieldsets.flatMap((fs) => {\n if (fs.single) {\n return fs.field\n }\n return fs.fields.map((field) => ({\n ...field,\n fieldset: fs.name,\n }))\n })\n : type.fields\n\n if (isType(type, 'block')) {\n return []\n }\n if (isType(type, 'slug')) {\n return fields.filter((f) => !DEFAULT_SLUG_FIELDS.includes(f.name))\n }\n if (isType(type, 'geopoint')) {\n return fields.filter((f) => !DEFAULT_GEOPOINT_FIELDS.includes(f.name))\n }\n if (isType(type, 'image')) {\n return fields.filter((f) => !DEFAULT_IMAGE_FIELDS.includes(f.name))\n }\n if (isType(type, 'file')) {\n return fields.filter((f) => !DEFAULT_FILE_FIELDS.includes(f.name))\n }\n return fields\n}\n\nexport function isReference(type: SchemaType): type is ReferenceSchemaType {\n return isType(type, 'reference')\n}\n\nexport function isCrossDatasetReference(type: SchemaType): type is CrossDatasetReferenceSchemaType {\n return isType(type, 'crossDatasetReference')\n}\n\nexport function isObjectField(maybeOjectField: unknown): boolean {\n return (\n typeof maybeOjectField === 'object' && maybeOjectField !== null && 'name' in maybeOjectField\n )\n}\n\nexport function isCustomized(maybeCustomized: SchemaType): boolean {\n const hasFieldsArray =\n isObjectField(maybeCustomized) &&\n !isType(maybeCustomized, 'reference') &&\n !isType(maybeCustomized, 'crossDatasetReference') &&\n 'fields' in maybeCustomized &&\n Array.isArray(maybeCustomized.fields)\n\n if (!hasFieldsArray) {\n return false\n }\n\n const fields = getCustomFields(maybeCustomized)\n return !!fields.length\n}\n\nexport function isType(schemaType: SchemaType, typeName: string): boolean {\n if (schemaType.name === typeName) {\n return true\n }\n if (!schemaType.type) {\n return false\n }\n return isType(schemaType.type, typeName)\n}\n\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object'\n}\n\nexport function isPrimitive(value: unknown): value is string | boolean | number {\n return isString(value) || isBoolean(value) || isNumber(value)\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string'\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === 'boolean'\n}\n\nfunction isBoolean(value: unknown): value is boolean {\n return typeof value === 'number'\n}\n","import {type Config} from 'isomorphic-dompurify'\n\n/**\n * This file maintains our sanitization configuration for DOMPurify.\n * We use an allowlist for tags and attributes to ensure that only safe\n * elements and attributes are allowed.\n *\n * This is easier to loosen as specs develop & use-cases are discovered.\n */\n\n///////// Tags\n\nconst HTML_TAGS = ['img', 'style']\n\nconst SVG_TAGS = [\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n] as const\n\nconst SVG_FILTER_TAGS = [\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n] as const\n\nconst ALLOWED_TAGS: Config['ALLOWED_TAGS'] = [...SVG_TAGS, ...HTML_TAGS, ...SVG_FILTER_TAGS]\n\n///////// Attributes\n\nconst HTML_ATTRIBUTES = [\n 'alt',\n 'class',\n 'crossorigin',\n 'decoding',\n 'elementtiming',\n 'fetchpriority',\n 'height',\n 'loading',\n 'src',\n 'srcset',\n 'style',\n 'width',\n]\n\nconst SVG_ATTRIBUTES = [\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'amplitude',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'exponent',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'intercept',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'slope',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'tablevalues',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n] as const\n\nconst ALLOWED_ATTR: Config['ALLOWED_ATTR'] = [...SVG_ATTRIBUTES, ...HTML_ATTRIBUTES]\n\nconst config = {\n ALLOWED_ATTR,\n ALLOWED_TAGS,\n /**\n * Required to allow for the use of `style` tags,\n * namely rendering the style tags from `styled-components`\n */\n FORCE_BODY: true,\n} satisfies Config\n\nexport {config}\n","import DOMPurify from 'isomorphic-dompurify'\nimport startCase from 'lodash/startCase'\nimport {renderToString} from 'react-dom/server'\nimport {\n type ArraySchemaType,\n type BlockDefinition,\n type BooleanSchemaType,\n ConcreteRuleClass,\n createSchema,\n type CrossDatasetReferenceSchemaType,\n type FileSchemaType,\n type MultiFieldSet,\n type NumberSchemaType,\n type ObjectField,\n type ObjectSchemaType,\n type ReferenceSchemaType,\n type Rule,\n type RuleSpec,\n type Schema,\n type SchemaType,\n type SchemaValidationValue,\n type SpanSchemaType,\n type StringSchemaType,\n type Workspace,\n} from 'sanity'\nimport {ServerStyleSheet} from 'styled-components'\n\nimport {SchemaIcon, type SchemaIconProps} from './Icon'\nimport {\n getCustomFields,\n isCrossDatasetReference,\n isCustomized,\n isDefined,\n isPrimitive,\n isRecord,\n isReference,\n isString,\n isType,\n} from './manifestTypeHelpers'\nimport {\n type CreateWorkspaceManifest,\n type ManifestField,\n type ManifestFieldset,\n type ManifestSchemaType,\n type ManifestSerializable,\n type ManifestTitledValue,\n type ManifestTool,\n type ManifestValidationGroup,\n type ManifestValidationRule,\n} from './manifestTypes'\nimport {config} from './purifyConfig'\n\ninterface Context {\n schema: Schema\n}\n\ntype SchemaTypeKey =\n | keyof ArraySchemaType\n | keyof BooleanSchemaType\n | keyof FileSchemaType\n | keyof NumberSchemaType\n | keyof ObjectSchemaType\n | keyof StringSchemaType\n | keyof ReferenceSchemaType\n | keyof BlockDefinition\n | 'group' // we strip this from fields\n\ntype Validation = {validation: ManifestValidationGroup[]} | Record<string, never>\ntype ObjectFields = {fields: ManifestField[]} | Record<string, never>\ntype SerializableProp = ManifestSerializable | ManifestSerializable[] | undefined\ntype ManifestValidationFlag = ManifestValidationRule['flag']\ntype ValidationRuleTransformer = (rule: RuleSpec) => ManifestValidationRule | undefined\n\nconst MAX_CUSTOM_PROPERTY_DEPTH = 5\nconst INLINE_TYPES = ['document', 'object', 'image', 'file']\n\nexport function extractCreateWorkspaceManifest(workspace: Workspace): CreateWorkspaceManifest {\n const serializedSchema = extractManifestSchemaTypes(workspace.schema)\n const serializedTools = extractManifestTools(workspace.tools)\n\n return {\n name: workspace.name,\n title: workspace.title,\n subtitle: workspace.subtitle,\n basePath: workspace.basePath,\n projectId: workspace.projectId,\n dataset: workspace.dataset,\n icon: resolveIcon({\n icon: workspace.icon,\n title: workspace.title,\n subtitle: workspace.subtitle,\n }),\n mediaLibrary: workspace.mediaLibrary,\n schema: serializedSchema,\n tools: serializedTools,\n }\n}\n\n/**\n * Extracts all serializable properties from userland schema types,\n * so they best-effort can be used as definitions for Schema.compile\n. */\nexport function extractManifestSchemaTypes(schema: Schema): ManifestSchemaType[] {\n const typeNames = schema.getTypeNames()\n const context = {schema}\n\n const studioDefaultTypeNames = createSchema({name: 'default', types: []}).getTypeNames()\n\n return typeNames\n .filter((typeName) => !studioDefaultTypeNames.includes(typeName))\n .map((typeName) => schema.get(typeName))\n .filter((type): type is SchemaType => typeof type !== 'undefined')\n .map((type) => transformType(type, context))\n}\n\nfunction transformCommonTypeFields(\n type: SchemaType & {fieldset?: string},\n typeName: string,\n context: Context,\n): Omit<ManifestSchemaType, 'name' | 'title' | 'type'> {\n const arrayProps =\n typeName === 'array' && type.jsonType === 'array' ? transformArrayMember(type, context) : {}\n\n const referenceProps = isReference(type) ? transformReference(type) : {}\n const crossDatasetRefProps = isCrossDatasetReference(type)\n ? transformCrossDatasetReference(type)\n : {}\n\n const objectFields: ObjectFields =\n type.jsonType === 'object' && type.type && INLINE_TYPES.includes(typeName) && isCustomized(type)\n ? {\n fields: getCustomFields(type).map((objectField) => transformField(objectField, context)),\n }\n : {}\n\n return {\n ...retainCustomTypeProps(type),\n ...transformValidation(type.validation),\n ...ensureString('description', type.description),\n ...objectFields,\n ...arrayProps,\n ...referenceProps,\n ...crossDatasetRefProps,\n ...ensureConditional('readOnly', type.readOnly),\n ...ensureConditional('hidden', type.hidden),\n ...transformFieldsets(type),\n // fieldset prop gets instrumented via getCustomFields\n ...ensureString('fieldset', type.fieldset),\n ...transformBlockType(type, context),\n }\n}\n\nfunction transformFieldsets(\n type: SchemaType,\n): {fieldsets: ManifestFieldset[]} | Record<string, never> {\n if (type.jsonType !== 'object') {\n return {}\n }\n const fieldsets = type.fieldsets\n ?.filter((fs): fs is MultiFieldSet => !fs.single)\n .map((fs) => {\n const options = isRecord(fs.options) ? {options: retainSerializableProps(fs.options)} : {}\n return {\n name: fs.name,\n ...ensureCustomTitle(fs.name, fs.title),\n ...ensureString('description', fs.description),\n ...ensureConditional('readOnly', fs.readOnly),\n ...ensureConditional('hidden', fs.hidden),\n ...options,\n }\n })\n\n return fieldsets?.length ? {fieldsets} : {}\n}\n\nfunction transformType(type: SchemaType, context: Context): ManifestSchemaType {\n const typeName = type.type ? type.type.name : type.jsonType\n\n return {\n ...transformCommonTypeFields(type, typeName, context),\n name: type.name,\n type: typeName,\n ...ensureCustomTitle(type.name, type.title),\n }\n}\n\nfunction retainCustomTypeProps(type: SchemaType): Record<string, SerializableProp> {\n const manuallySerializedFields: SchemaTypeKey[] = [\n //explicitly added\n 'name',\n 'title',\n 'description',\n 'readOnly',\n 'hidden',\n 'validation',\n 'fieldsets',\n 'fields',\n 'to',\n 'of',\n // not serialized\n 'type',\n 'jsonType',\n '__experimental_actions',\n '__experimental_formPreviewTitle',\n '__experimental_omnisearch_visibility',\n '__experimental_search',\n 'components',\n 'icon',\n 'orderings',\n 'preview',\n 'groups',\n //only exists on fields\n 'group',\n // we know about these, but let them be generically handled\n // deprecated\n // rows (from text)\n // initialValue\n // options\n // crossDatasetReference props\n ]\n const typeWithoutManuallyHandledFields = Object.fromEntries(\n Object.entries(type).filter(\n ([key]) => !manuallySerializedFields.includes(key as unknown as SchemaTypeKey),\n ),\n )\n return retainSerializableProps(typeWithoutManuallyHandledFields) as Record<\n string,\n SerializableProp\n >\n}\n\nfunction retainSerializableProps(maybeSerializable: unknown, depth = 0): SerializableProp {\n if (depth > MAX_CUSTOM_PROPERTY_DEPTH) {\n return undefined\n }\n\n if (!isDefined(maybeSerializable)) {\n return undefined\n }\n\n if (isPrimitive(maybeSerializable)) {\n // cull empty strings\n if (maybeSerializable === '') {\n return undefined\n }\n return maybeSerializable\n }\n\n // url-schemes ect..\n if (maybeSerializable instanceof RegExp) {\n return maybeSerializable.toString()\n }\n\n if (Array.isArray(maybeSerializable)) {\n const arrayItems = maybeSerializable\n .map((item) => retainSerializableProps(item, depth + 1))\n .filter((item): item is ManifestSerializable => isDefined(item))\n return arrayItems.length ? arrayItems : undefined\n }\n\n if (isRecord(maybeSerializable)) {\n const serializableEntries = Object.entries(maybeSerializable)\n .map(([key, value]) => {\n return [key, retainSerializableProps(value, depth + 1)]\n })\n .filter(([, value]) => isDefined(value))\n return serializableEntries.length ? Object.fromEntries(serializableEntries) : undefined\n }\n\n return undefined\n}\n\nfunction transformField(field: ObjectField & {fieldset?: string}, context: Context): ManifestField {\n const fieldType = field.type\n const typeNameExists = !!context.schema.get(fieldType.name)\n const typeName = typeNameExists ? fieldType.name : (fieldType.type?.name ?? fieldType.name)\n return {\n ...transformCommonTypeFields(fieldType, typeName, context),\n name: field.name,\n type: typeName,\n ...ensureCustomTitle(field.name, fieldType.title),\n // this prop gets added synthetically via getCustomFields\n ...ensureString('fieldset', field.fieldset),\n }\n}\n\nfunction transformArrayMember(\n arrayMember: ArraySchemaType,\n context: Context,\n): Pick<ManifestField, 'of'> {\n return {\n of: arrayMember.of.map((type) => {\n const typeNameExists = !!context.schema.get(type.name)\n const typeName = typeNameExists ? type.name : (type.type?.name ?? type.name)\n return {\n ...transformCommonTypeFields(type, typeName, context),\n type: typeName,\n ...(typeName === type.name ? {} : {name: type.name}),\n ...ensureCustomTitle(type.name, type.title),\n }\n }),\n }\n}\n\nfunction transformReference(reference: ReferenceSchemaType): Pick<ManifestSchemaType, 'to'> {\n return {\n to: (reference.to ?? []).map((type) => {\n return {\n ...retainCustomTypeProps(type),\n type: type.name,\n }\n }),\n }\n}\n\nfunction transformCrossDatasetReference(\n reference: CrossDatasetReferenceSchemaType,\n): Pick<ManifestSchemaType, 'to' | 'preview'> {\n return {\n to: (reference.to ?? []).map((crossDataset) => {\n const preview = crossDataset.preview?.select\n ? {preview: {select: crossDataset.preview.select}}\n : {}\n return {\n type: crossDataset.type,\n ...ensureCustomTitle(crossDataset.type, crossDataset.title),\n ...preview,\n }\n }),\n }\n}\n\nconst transformTypeValidationRule: ValidationRuleTransformer = (rule) => {\n return {\n ...rule,\n constraint:\n 'constraint' in rule &&\n (typeof rule.constraint === 'string'\n ? rule.constraint.toLowerCase()\n : retainSerializableProps(rule.constraint)),\n }\n}\n\nconst validationRuleTransformers: Partial<\n Record<ManifestValidationFlag, ValidationRuleTransformer>\n> = {\n type: transformTypeValidationRule,\n}\n\nfunction transformValidation(validation: SchemaValidationValue): Validation {\n const validationArray = (Array.isArray(validation) ? validation : [validation]).filter(\n (value): value is Rule => typeof value === 'object' && '_type' in value,\n )\n\n // we dont want type in the output as that is implicitly given by the typedef itself an will only bloat the payload\n const disallowedFlags = ['type']\n\n // Validation rules that refer to other fields use symbols, which cannot be serialized. It would\n // be possible to transform these to a serializable type, but we haven't implemented that for now.\n const disallowedConstraintTypes: (symbol | unknown)[] = [ConcreteRuleClass.FIELD_REF]\n\n const serializedValidation = validationArray\n .map(({_rules, _message, _level}) => {\n const message: Partial<Pick<ManifestValidationGroup, 'message'>> =\n typeof _message === 'string' ? {message: _message} : {}\n\n const serializedRules = _rules\n .filter((rule) => {\n if (!('constraint' in rule)) {\n return false\n }\n\n const {flag, constraint} = rule\n\n if (disallowedFlags.includes(flag)) {\n return false\n }\n\n return !(\n typeof constraint === 'object' &&\n 'type' in constraint &&\n disallowedConstraintTypes.includes(constraint.type)\n )\n })\n .reduce<ManifestValidationRule[]>((rules, rule) => {\n const transformer: ValidationRuleTransformer =\n validationRuleTransformers[rule.flag] ??\n ((spec) => retainSerializableProps(spec) as ManifestValidationRule)\n\n const transformedRule = transformer(rule)\n if (!transformedRule) {\n return rules\n }\n return [...rules, transformedRule]\n }, [])\n\n return {\n rules: serializedRules,\n level: _level,\n ...message,\n }\n })\n .filter((group) => !!group.rules.length)\n\n return serializedValidation.length ? {validation: serializedValidation} : {}\n}\n\nfunction ensureCustomTitle(typeName: string, value: unknown) {\n const titleObject = ensureString('title', value)\n\n const defaultTitle = startCase(typeName)\n // omit title if its the same as default, to reduce payload\n if (titleObject.title === defaultTitle) {\n return {}\n }\n return titleObject\n}\n\nfunction ensureString<Key extends string>(key: Key, value: unknown) {\n if (typeof value === 'string') {\n return {\n [key]: value,\n }\n }\n\n return {}\n}\n\nfunction ensureConditional<const Key extends string>(key: Key, value: unknown) {\n if (typeof value === 'boolean') {\n return {\n [key]: value,\n }\n }\n\n if (typeof value === 'function') {\n return {\n [key]: 'conditional',\n }\n }\n\n return {}\n}\n\nexport function transformBlockType(\n blockType: SchemaType,\n context: Context,\n): Pick<ManifestSchemaType, 'marks' | 'lists' | 'styles' | 'of'> | Record<string, never> {\n if (blockType.jsonType !== 'object' || !isType(blockType, 'block')) {\n return {}\n }\n\n const childrenField = blockType.fields?.find((field) => field.name === 'children') as\n | {type: ArraySchemaType}\n | undefined\n\n if (!childrenField) {\n return {}\n }\n const ofType = childrenField.type.of\n if (!ofType) {\n return {}\n }\n const spanType = ofType.find((memberType) => memberType.name === 'span') as\n | ObjectSchemaType\n | undefined\n if (!spanType) {\n return {}\n }\n const inlineObjectTypes = (ofType.filter((memberType) => memberType.name !== 'span') ||\n []) as ObjectSchemaType[]\n\n return {\n marks: {\n annotations: (spanType as SpanSchemaType).annotations.map((t) => transformType(t, context)),\n decorators: resolveEnabledDecorators(spanType),\n },\n lists: resolveEnabledListItems(blockType),\n styles: resolveEnabledStyles(blockType),\n of: inlineObjectTypes.map((t) => transformType(t, context)),\n }\n}\n\nfunction resolveEnabledStyles(blockType: ObjectSchemaType): ManifestTitledValue[] | undefined {\n const styleField = blockType.fields?.find((btField) => btField.name === 'style')\n return resolveTitleValueArray(styleField?.type?.options?.list)\n}\n\nfunction resolveEnabledDecorators(spanType: ObjectSchemaType): ManifestTitledValue[] | undefined {\n return 'decorators' in spanType ? resolveTitleValueArray(spanType.decorators) : undefined\n}\n\nfunction resolveEnabledListItems(blockType: ObjectSchemaType): ManifestTitledValue[] | undefined {\n const listField = blockType.fields?.find((btField) => btField.name === 'listItem')\n return resolveTitleValueArray(listField?.type?.options?.list)\n}\n\nfunction resolveTitleValueArray(possibleArray: unknown): ManifestTitledValue[] | undefined {\n if (!possibleArray || !Array.isArray(possibleArray)) {\n return undefined\n }\n const titledValues = possibleArray\n .filter(\n (d): d is {value: string; title?: string} => isRecord(d) && !!d.value && isString(d.value),\n )\n .map((item) => {\n return {\n value: item.value,\n ...ensureString('title', item.title),\n } satisfies ManifestTitledValue\n })\n if (!titledValues?.length) {\n return undefined\n }\n\n return titledValues\n}\n\nconst extractManifestTools = (tools: Workspace['tools']): ManifestTool[] =>\n tools.map((tool) => {\n const {\n title,\n name,\n icon,\n __internalApplicationType: type,\n } = tool as Workspace['tools'][number] & {__internalApplicationType: string}\n return {\n title,\n name,\n type: type || null,\n icon: resolveIcon({\n icon,\n title,\n }),\n } satisfies ManifestTool\n })\n\nconst resolveIcon = (props: SchemaIconProps): string | null => {\n const sheet = new ServerStyleSheet()\n\n try {\n /**\n * You must render the element first so\n * the style-sheet above can be populated\n */\n const element = renderToString(sheet.collectStyles(<SchemaIcon {...props} />))\n const styleTags = sheet.getStyleTags()\n\n /**\n * We can then create a single string\n * of HTML combining our styles and element\n * before purifying below.\n */\n const html = `${styleTags}${element}`.trim()\n\n return DOMPurify.sanitize(html, config)\n } catch (error) {\n return null\n } finally {\n sheet.seal()\n }\n}\n","import {isMainThread, parentPort, workerData as _workerData} from 'node:worker_threads'\n\nimport {extractCreateWorkspaceManifest} from '../../manifest/extractWorkspaceManifest'\nimport {getStudioWorkspaces} from '../util/getStudioWorkspaces'\nimport {mockBrowserEnvironment} from '../util/mockBrowserEnvironment'\n\n/** @internal */\nexport interface ExtractManifestWorkerData {\n workDir: string\n}\n\nasync function main() {\n if (isMainThread || !parentPort) {\n throw new Error('This module must be run as a worker thread')\n }\n\n const opts = _workerData as ExtractManifestWorkerData\n\n const cleanup = mockBrowserEnvironment(opts.workDir)\n\n try {\n const workspaces = await getStudioWorkspaces({basePath: opts.workDir})\n\n for (const workspace of workspaces) {\n parentPort?.postMessage(extractCreateWorkspaceManifest(workspace))\n }\n } finally {\n parentPort?.close()\n cleanup()\n }\n}\n\nmain().then(() => process.exit())\n"],"names":["theme","buildTheme","SchemaIcon","t0","$","_c","icon","title","subtitle","t1","normalizeIcon","t2","jsx","ThemeProvider","Icon","isValidElementType","isValidElement","createDefaultIcon","DEFAULT_IMAGE_FIELDS","DEFAULT_FILE_FIELDS","DEFAULT_GEOPOINT_FIELDS","DEFAULT_SLUG_FIELDS","getCustomFields","type","fields","fieldsets","flatMap","fs","single","field","map","fieldset","name","isType","filter","f","includes","isReference","isCrossDatasetReference","isObjectField","maybeOjectField","isCustomized","maybeCustomized","Array","isArray","length","schemaType","typeName","isDefined","value","isRecord","isPrimitive","isString","isBoolean","isNumber","HTML_TAGS","SVG_TAGS","SVG_FILTER_TAGS","ALLOWED_TAGS","HTML_ATTRIBUTES","SVG_ATTRIBUTES","ALLOWED_ATTR","config","FORCE_BODY","MAX_CUSTOM_PROPERTY_DEPTH","INLINE_TYPES","extractCreateWorkspaceManifest","workspace","serializedSchema","extractManifestSchemaTypes","schema","serializedTools","extractManifestTools","tools","basePath","projectId","dataset","resolveIcon","mediaLibrary","typeNames","getTypeNames","context","studioDefaultTypeNames","createSchema","types","get","transformType","transformCommonTypeFields","arrayProps","jsonType","transformArrayMember","referenceProps","transformReference","crossDatasetRefProps","transformCrossDatasetReference","objectFields","objectField","transformField","retainCustomTypeProps","transformValidation","validation","ensureString","description","ensureConditional","readOnly","hidden","transformFieldsets","transformBlockType","options","retainSerializableProps","ensureCustomTitle","manuallySerializedFields","typeWithoutManuallyHandledFields","Object","fromEntries","entries","key","maybeSerializable","depth","RegExp","toString","arrayItems","item","undefined","serializableEntries","fieldType","arrayMember","of","reference","to","crossDataset","preview","select","transformTypeValidationRule","rule","constraint","toLowerCase","validationRuleTransformers","validationArray","disallowedFlags","disallowedConstraintTypes","ConcreteRuleClass","FIELD_REF","serializedValidation","_rules","_message","_level","message","rules","flag","reduce","transformedRule","spec","level","group","titleObject","defaultTitle","startCase","blockType","childrenField","find","ofType","spanType","memberType","inlineObjectTypes","marks","annotations","t","decorators","resolveEnabledDecorators","lists","resolveEnabledListItems","styles","resolveEnabledStyles","styleField","btField","resolveTitleValueArray","list","listField","possibleArray","titledValues","d","tool","__internalApplicationType","props","sheet","ServerStyleSheet","element","renderToString","collectStyles","html","getStyleTags","trim","DOMPurify","sanitize","seal","main","isMainThread","parentPort","Error","opts","_workerData","cleanup","mockBrowserEnvironment","workDir","workspaces","getStudioWorkspaces","postMessage","close","then","process","exit"],"mappings":"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ACA,YACA,SACA,SACA,QACA,kBACA,UACA,QACA,YACA,SACA,QACA,WACA,WACA,YACA,kBACA,QACA,QACA,SACA,UACA,UACA,QACA,YACA,SACA,QACA,SACA,QACA,OAAO,GAGHC,kBAAkB,CACtB,WACA,iBACA,uBACA,eACA,oBACA,qBACA,qBACA,kBACA,gBACA,WACA,WACA,WACA,WACA,WACA,kBACA,WACA,WACA,eACA,gBACA,YACA,gBACA,sBACA,eACA,UACA,cAAc,GAGVC,eAAuC,CAAC,GAAGF,UAAU,GAAGD,WAAW,GAAGE,eAAe,GAIrFE,kBAAkB,CACtB,OACA,SACA,eACA,YACA,iBACA,iBACA,UACA,WACA,OACA,UACA,SACA,OAAO,GAGHC,iBAAiB,CACrB,iBACA,cACA,YACA,sBACA,aACA,UACA,iBACA,iBACA,WACA,iBACA,kBACA,SACA,QACA,MACA,SACA,QACA,iBACA,aACA,aACA,SACA,uBACA,+BACA,iBACA,mBACA,MACA,MACA,KACA,MACA,MACA,mBACA,aACA,WACA,WACA,OACA,YACA,aACA,OACA,YACA,QACA,gBACA,aACA,UACA,eACA,eACA,iBACA,eACA,aACA,oBACA,gBACA,cACA,gBACA,eACA,MACA,MACA,MACA,MACA,cACA,YACA,iBACA,qBACA,UACA,QACA,MACA,mBACA,MACA,OACA,aACA,KACA,MACA,MACA,MACA,MACA,WACA,aACA,cACA,YACA,QACA,gBACA,kBACA,gBACA,oBACA,kBACA,SACA,cACA,cACA,gBACA,gBACA,eACA,eACA,oBACA,aACA,OACA,QACA,SACA,UACA,QACA,OACA,QACA,cACA,UACA,YACA,WACA,SACA,UACA,eACA,UACA,YACA,eACA,QACA,cACA,uBACA,oBACA,gBACA,UACA,iBACA,uBACA,kBACA,KACA,MACA,MACA,UACA,QACA,QACA,eACA,aACA,WACA,UACA,UACA,SACA,QACA,mBACA,SACA,oBACA,oBACA,gBACA,eACA,gBACA,eACA,cACA,gBACA,oBACA,qBACA,kBACA,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"}
|
1
|
+
{"version":3,"file":"extractManifest.js","sources":["../../../../src/_internal/manifest/Icon.tsx","../../../../src/_internal/manifest/manifestTypeHelpers.ts","../../../../src/_internal/manifest/purifyConfig.ts","../../../../src/_internal/manifest/extractWorkspaceManifest.tsx","../../../../src/_internal/cli/threads/extractManifest.ts"],"sourcesContent":["import {ThemeProvider} from '@sanity/ui'\nimport {buildTheme} from '@sanity/ui/theme'\nimport {type ComponentType, isValidElement, type ReactNode} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {createDefaultIcon} from 'sanity'\n\nconst theme = buildTheme()\n\ninterface SchemaIconProps {\n icon?: ComponentType | ReactNode\n title: string\n subtitle?: string\n}\n\nconst SchemaIcon = ({icon, title, subtitle}: SchemaIconProps): React.JSX.Element => {\n return <ThemeProvider theme={theme}>{normalizeIcon(icon, title, subtitle)}</ThemeProvider>\n}\n\nfunction normalizeIcon(\n Icon: ComponentType | ReactNode | undefined,\n title: string,\n subtitle = '',\n): React.JSX.Element {\n if (isValidElementType(Icon)) return <Icon />\n if (isValidElement(Icon)) return Icon\n return createDefaultIcon(title, subtitle)\n}\n\nexport {SchemaIcon}\nexport type {SchemaIconProps}\n","import {\n type CrossDatasetReferenceSchemaType,\n type GlobalDocumentReferenceSchemaType,\n type ObjectField,\n type ObjectSchemaType,\n type ReferenceSchemaType,\n type SchemaType,\n} from '@sanity/types'\n\nconst DEFAULT_IMAGE_FIELDS = ['asset', 'hotspot', 'crop', 'media']\nconst DEFAULT_FILE_FIELDS = ['asset', 'media']\nconst DEFAULT_GEOPOINT_FIELDS = ['lat', 'lng', 'alt']\nconst DEFAULT_SLUG_FIELDS = ['current', 'source']\n\nexport function getCustomFields(type: ObjectSchemaType): (ObjectField & {fieldset?: string})[] {\n const fields = type.fieldsets\n ? type.fieldsets.flatMap((fs) => {\n if (fs.single) {\n return fs.field\n }\n return fs.fields.map((field) => ({\n ...field,\n fieldset: fs.name,\n }))\n })\n : type.fields\n\n if (isType(type, 'block')) {\n return []\n }\n if (isType(type, 'slug')) {\n return fields.filter((f) => !DEFAULT_SLUG_FIELDS.includes(f.name))\n }\n if (isType(type, 'geopoint')) {\n return fields.filter((f) => !DEFAULT_GEOPOINT_FIELDS.includes(f.name))\n }\n if (isType(type, 'image')) {\n return fields.filter((f) => !DEFAULT_IMAGE_FIELDS.includes(f.name))\n }\n if (isType(type, 'file')) {\n return fields.filter((f) => !DEFAULT_FILE_FIELDS.includes(f.name))\n }\n return fields\n}\n\nexport function isReference(type: SchemaType): type is ReferenceSchemaType {\n return isType(type, 'reference')\n}\n\nexport function isCrossDatasetReference(type: SchemaType): type is CrossDatasetReferenceSchemaType {\n return isType(type, 'crossDatasetReference')\n}\n\nexport function isGlobalDocumentReference(\n type: SchemaType,\n): type is GlobalDocumentReferenceSchemaType {\n return isType(type, 'globalDocumentReference')\n}\n\nexport function isObjectField(maybeOjectField: unknown): boolean {\n return (\n typeof maybeOjectField === 'object' && maybeOjectField !== null && 'name' in maybeOjectField\n )\n}\n\nexport function isCustomized(maybeCustomized: SchemaType): boolean {\n const hasFieldsArray =\n isObjectField(maybeCustomized) &&\n !isReference(maybeCustomized) &&\n !isCrossDatasetReference(maybeCustomized) &&\n !isGlobalDocumentReference(maybeCustomized) &&\n 'fields' in maybeCustomized &&\n Array.isArray(maybeCustomized.fields)\n\n if (!hasFieldsArray) {\n return false\n }\n\n const fields = getCustomFields(maybeCustomized)\n return !!fields.length\n}\n\nexport function isType(schemaType: SchemaType, typeName: string): boolean {\n if (schemaType.name === typeName) {\n return true\n }\n if (!schemaType.type) {\n return false\n }\n return isType(schemaType.type, typeName)\n}\n\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object'\n}\n\nexport function isPrimitive(value: unknown): value is string | boolean | number {\n return isString(value) || isBoolean(value) || isNumber(value)\n}\n\nexport function isString(value: unknown): value is string {\n return typeof value === 'string'\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === 'boolean'\n}\n\nfunction isBoolean(value: unknown): value is boolean {\n return typeof value === 'number'\n}\n","import {type Config} from 'isomorphic-dompurify'\n\n/**\n * This file maintains our sanitization configuration for DOMPurify.\n * We use an allowlist for tags and attributes to ensure that only safe\n * elements and attributes are allowed.\n *\n * This is easier to loosen as specs develop & use-cases are discovered.\n */\n\n///////// Tags\n\nconst HTML_TAGS = ['img', 'style']\n\nconst SVG_TAGS = [\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n] as const\n\nconst SVG_FILTER_TAGS = [\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n] as const\n\nconst ALLOWED_TAGS: Config['ALLOWED_TAGS'] = [...SVG_TAGS, ...HTML_TAGS, ...SVG_FILTER_TAGS]\n\n///////// Attributes\n\nconst HTML_ATTRIBUTES = [\n 'alt',\n 'class',\n 'crossorigin',\n 'decoding',\n 'elementtiming',\n 'fetchpriority',\n 'height',\n 'loading',\n 'src',\n 'srcset',\n 'style',\n 'width',\n]\n\nconst SVG_ATTRIBUTES = [\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'amplitude',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'exponent',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'intercept',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'slope',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'tablevalues',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n] as const\n\nconst ALLOWED_ATTR: Config['ALLOWED_ATTR'] = [...SVG_ATTRIBUTES, ...HTML_ATTRIBUTES]\n\nconst config = {\n ALLOWED_ATTR,\n ALLOWED_TAGS,\n /**\n * Required to allow for the use of `style` tags,\n * namely rendering the style tags from `styled-components`\n */\n FORCE_BODY: true,\n} satisfies Config\n\nexport {config}\n","import DOMPurify from 'isomorphic-dompurify'\nimport startCase from 'lodash/startCase'\nimport {renderToString} from 'react-dom/server'\nimport {\n type ArraySchemaType,\n type BlockDefinition,\n type BooleanSchemaType,\n ConcreteRuleClass,\n createSchema,\n type CrossDatasetReferenceSchemaType,\n type FileSchemaType,\n type GlobalDocumentReferenceSchemaType,\n type MultiFieldSet,\n type NumberSchemaType,\n type ObjectField,\n type ObjectSchemaType,\n type ReferenceSchemaType,\n type Rule,\n type RuleSpec,\n type Schema,\n type SchemaType,\n type SchemaValidationValue,\n type SpanSchemaType,\n type StringSchemaType,\n type Workspace,\n} from 'sanity'\nimport {ServerStyleSheet} from 'styled-components'\n\nimport {SchemaIcon, type SchemaIconProps} from './Icon'\nimport {\n getCustomFields,\n isCrossDatasetReference,\n isCustomized,\n isDefined,\n isGlobalDocumentReference,\n isPrimitive,\n isRecord,\n isReference,\n isString,\n isType,\n} from './manifestTypeHelpers'\nimport {\n type CreateWorkspaceManifest,\n type ManifestField,\n type ManifestFieldset,\n type ManifestSchemaType,\n type ManifestSerializable,\n type ManifestTitledValue,\n type ManifestTool,\n type ManifestValidationGroup,\n type ManifestValidationRule,\n} from './manifestTypes'\nimport {config} from './purifyConfig'\n\ninterface Context {\n schema: Schema\n}\n\ntype SchemaTypeKey =\n | keyof ArraySchemaType\n | keyof BooleanSchemaType\n | keyof FileSchemaType\n | keyof NumberSchemaType\n | keyof ObjectSchemaType\n | keyof StringSchemaType\n | keyof ReferenceSchemaType\n | keyof BlockDefinition\n | 'group' // we strip this from fields\n\ntype Validation = {validation: ManifestValidationGroup[]} | Record<string, never>\ntype ObjectFields = {fields: ManifestField[]} | Record<string, never>\ntype SerializableProp = ManifestSerializable | ManifestSerializable[] | undefined\ntype ManifestValidationFlag = ManifestValidationRule['flag']\ntype ValidationRuleTransformer = (rule: RuleSpec) => ManifestValidationRule | undefined\n\nconst MAX_CUSTOM_PROPERTY_DEPTH = 5\nconst INLINE_TYPES = ['document', 'object', 'image', 'file']\n\nexport function extractCreateWorkspaceManifest(workspace: Workspace): CreateWorkspaceManifest {\n const serializedSchema = extractManifestSchemaTypes(workspace.schema)\n const serializedTools = extractManifestTools(workspace.tools)\n\n return {\n name: workspace.name,\n title: workspace.title,\n subtitle: workspace.subtitle,\n basePath: workspace.basePath,\n projectId: workspace.projectId,\n dataset: workspace.dataset,\n icon: resolveIcon({\n icon: workspace.icon,\n title: workspace.title,\n subtitle: workspace.subtitle,\n }),\n mediaLibrary: workspace.mediaLibrary,\n schema: serializedSchema,\n tools: serializedTools,\n }\n}\n\n/**\n * Extracts all serializable properties from userland schema types,\n * so they best-effort can be used as definitions for Schema.compile\n. */\nexport function extractManifestSchemaTypes(schema: Schema): ManifestSchemaType[] {\n const typeNames = schema.getTypeNames()\n const context = {schema}\n\n const studioDefaultTypeNames = createSchema({name: 'default', types: []}).getTypeNames()\n\n return typeNames\n .filter((typeName) => !studioDefaultTypeNames.includes(typeName))\n .map((typeName) => schema.get(typeName))\n .filter((type): type is SchemaType => typeof type !== 'undefined')\n .map((type) => transformType(type, context))\n}\n\nfunction transformCommonTypeFields(\n type: SchemaType & {fieldset?: string},\n typeName: string,\n context: Context,\n): Omit<ManifestSchemaType, 'name' | 'title' | 'type'> {\n const arrayProps =\n typeName === 'array' && type.jsonType === 'array' ? transformArrayMember(type, context) : {}\n\n const referenceProps = isReference(type) ? transformReference(type) : {}\n const crossDatasetRefProps = isCrossDatasetReference(type)\n ? transformCrossDatasetReference(type)\n : {}\n const globalRefProps = isGlobalDocumentReference(type)\n ? transformGlobalDocumentReference(type)\n : {}\n\n const objectFields: ObjectFields =\n type.jsonType === 'object' && type.type && INLINE_TYPES.includes(typeName) && isCustomized(type)\n ? {\n fields: getCustomFields(type).map((objectField) => transformField(objectField, context)),\n }\n : {}\n\n return {\n ...retainCustomTypeProps(type),\n ...transformValidation(type.validation),\n ...ensureString('description', type.description),\n ...objectFields,\n ...arrayProps,\n ...referenceProps,\n ...crossDatasetRefProps,\n ...globalRefProps,\n ...ensureConditional('readOnly', type.readOnly),\n ...ensureConditional('hidden', type.hidden),\n ...transformFieldsets(type),\n // fieldset prop gets instrumented via getCustomFields\n ...ensureString('fieldset', type.fieldset),\n ...transformBlockType(type, context),\n }\n}\n\nfunction transformFieldsets(\n type: SchemaType,\n): {fieldsets: ManifestFieldset[]} | Record<string, never> {\n if (type.jsonType !== 'object') {\n return {}\n }\n const fieldsets = type.fieldsets\n ?.filter((fs): fs is MultiFieldSet => !fs.single)\n .map((fs) => {\n const options = isRecord(fs.options) ? {options: retainSerializableProps(fs.options)} : {}\n return {\n name: fs.name,\n ...ensureCustomTitle(fs.name, fs.title),\n ...ensureString('description', fs.description),\n ...ensureConditional('readOnly', fs.readOnly),\n ...ensureConditional('hidden', fs.hidden),\n ...options,\n }\n })\n\n return fieldsets?.length ? {fieldsets} : {}\n}\n\nfunction transformType(type: SchemaType, context: Context): ManifestSchemaType {\n const typeName = type.type ? type.type.name : type.jsonType\n\n return {\n ...transformCommonTypeFields(type, typeName, context),\n name: type.name,\n type: typeName,\n ...ensureCustomTitle(type.name, type.title),\n }\n}\n\nfunction retainCustomTypeProps(type: SchemaType): Record<string, SerializableProp> {\n const manuallySerializedFields: SchemaTypeKey[] = [\n //explicitly added\n 'name',\n 'title',\n 'description',\n 'readOnly',\n 'hidden',\n 'validation',\n 'fieldsets',\n 'fields',\n 'to',\n 'of',\n // not serialized\n 'type',\n 'jsonType',\n '__experimental_actions',\n '__experimental_formPreviewTitle',\n '__experimental_omnisearch_visibility',\n '__experimental_search',\n 'components',\n 'icon',\n 'orderings',\n 'preview',\n 'groups',\n //only exists on fields\n 'group',\n // we know about these, but let them be generically handled\n // deprecated\n // rows (from text)\n // initialValue\n // options\n // crossDatasetReference props\n ]\n const typeWithoutManuallyHandledFields = Object.fromEntries(\n Object.entries(type).filter(\n ([key]) => !manuallySerializedFields.includes(key as unknown as SchemaTypeKey),\n ),\n )\n return retainSerializableProps(typeWithoutManuallyHandledFields) as Record<\n string,\n SerializableProp\n >\n}\n\nfunction retainSerializableProps(maybeSerializable: unknown, depth = 0): SerializableProp {\n if (depth > MAX_CUSTOM_PROPERTY_DEPTH) {\n return undefined\n }\n\n if (!isDefined(maybeSerializable)) {\n return undefined\n }\n\n if (isPrimitive(maybeSerializable)) {\n // cull empty strings\n if (maybeSerializable === '') {\n return undefined\n }\n return maybeSerializable\n }\n\n // url-schemes ect..\n if (maybeSerializable instanceof RegExp) {\n return maybeSerializable.toString()\n }\n\n if (Array.isArray(maybeSerializable)) {\n const arrayItems = maybeSerializable\n .map((item) => retainSerializableProps(item, depth + 1))\n .filter((item): item is ManifestSerializable => isDefined(item))\n return arrayItems.length ? arrayItems : undefined\n }\n\n if (isRecord(maybeSerializable)) {\n const serializableEntries = Object.entries(maybeSerializable)\n .map(([key, value]) => {\n return [key, retainSerializableProps(value, depth + 1)]\n })\n .filter(([, value]) => isDefined(value))\n return serializableEntries.length ? Object.fromEntries(serializableEntries) : undefined\n }\n\n return undefined\n}\n\nfunction transformField(field: ObjectField & {fieldset?: string}, context: Context): ManifestField {\n const fieldType = field.type\n const typeNameExists = !!context.schema.get(fieldType.name)\n const typeName = typeNameExists ? fieldType.name : (fieldType.type?.name ?? fieldType.name)\n return {\n ...transformCommonTypeFields(fieldType, typeName, context),\n name: field.name,\n type: typeName,\n ...ensureCustomTitle(field.name, fieldType.title),\n // this prop gets added synthetically via getCustomFields\n ...ensureString('fieldset', field.fieldset),\n }\n}\n\nfunction transformArrayMember(\n arrayMember: ArraySchemaType,\n context: Context,\n): Pick<ManifestField, 'of'> {\n return {\n of: arrayMember.of.map((type) => {\n const typeNameExists = !!context.schema.get(type.name)\n const typeName = typeNameExists ? type.name : (type.type?.name ?? type.name)\n return {\n ...transformCommonTypeFields(type, typeName, context),\n type: typeName,\n ...(typeName === type.name ? {} : {name: type.name}),\n ...ensureCustomTitle(type.name, type.title),\n }\n }),\n }\n}\n\nfunction transformReference(reference: ReferenceSchemaType): Pick<ManifestSchemaType, 'to'> {\n return {\n to: (reference.to ?? []).map((type) => {\n return {\n ...retainCustomTypeProps(type),\n type: type.name,\n }\n }),\n }\n}\n\nfunction transformCrossDatasetReference(\n reference: CrossDatasetReferenceSchemaType,\n): Pick<ManifestSchemaType, 'to' | 'preview'> {\n return {\n to: (reference.to ?? []).map((crossDataset) => {\n const preview = crossDataset.preview?.select\n ? {preview: {select: crossDataset.preview.select}}\n : {}\n return {\n type: crossDataset.type,\n ...ensureCustomTitle(crossDataset.type, crossDataset.title),\n ...preview,\n }\n }),\n }\n}\n\nfunction transformGlobalDocumentReference(\n reference: GlobalDocumentReferenceSchemaType,\n): Pick<ManifestSchemaType, 'to' | 'preview'> {\n return {\n to: (reference.to ?? []).map((crossDataset) => {\n const preview = crossDataset.preview?.select\n ? {preview: {select: crossDataset.preview.select}}\n : {}\n return {\n type: crossDataset.type,\n ...ensureCustomTitle(crossDataset.type, crossDataset.title),\n ...preview,\n }\n }),\n }\n}\n\nconst transformTypeValidationRule: ValidationRuleTransformer = (rule) => {\n return {\n ...rule,\n constraint:\n 'constraint' in rule &&\n (typeof rule.constraint === 'string'\n ? rule.constraint.toLowerCase()\n : retainSerializableProps(rule.constraint)),\n }\n}\n\nconst validationRuleTransformers: Partial<\n Record<ManifestValidationFlag, ValidationRuleTransformer>\n> = {\n type: transformTypeValidationRule,\n}\n\nfunction transformValidation(validation: SchemaValidationValue): Validation {\n const validationArray = (Array.isArray(validation) ? validation : [validation]).filter(\n (value): value is Rule => typeof value === 'object' && '_type' in value,\n )\n\n // we dont want type in the output as that is implicitly given by the typedef itself an will only bloat the payload\n const disallowedFlags = ['type']\n\n // Validation rules that refer to other fields use symbols, which cannot be serialized. It would\n // be possible to transform these to a serializable type, but we haven't implemented that for now.\n const disallowedConstraintTypes: (symbol | unknown)[] = [ConcreteRuleClass.FIELD_REF]\n\n const serializedValidation = validationArray\n .map(({_rules, _message, _level}) => {\n const message: Partial<Pick<ManifestValidationGroup, 'message'>> =\n typeof _message === 'string' ? {message: _message} : {}\n\n const serializedRules = _rules\n .filter((rule) => {\n if (!('constraint' in rule)) {\n return false\n }\n\n const {flag, constraint} = rule\n\n if (disallowedFlags.includes(flag)) {\n return false\n }\n\n return !(\n typeof constraint === 'object' &&\n 'type' in constraint &&\n disallowedConstraintTypes.includes(constraint.type)\n )\n })\n .reduce<ManifestValidationRule[]>((rules, rule) => {\n const transformer: ValidationRuleTransformer =\n validationRuleTransformers[rule.flag] ??\n ((spec) => retainSerializableProps(spec) as ManifestValidationRule)\n\n const transformedRule = transformer(rule)\n if (!transformedRule) {\n return rules\n }\n return [...rules, transformedRule]\n }, [])\n\n return {\n rules: serializedRules,\n level: _level,\n ...message,\n }\n })\n .filter((group) => !!group.rules.length)\n\n return serializedValidation.length ? {validation: serializedValidation} : {}\n}\n\nfunction ensureCustomTitle(typeName: string, value: unknown) {\n const titleObject = ensureString('title', value)\n\n const defaultTitle = startCase(typeName)\n // omit title if its the same as default, to reduce payload\n if (titleObject.title === defaultTitle) {\n return {}\n }\n return titleObject\n}\n\nfunction ensureString<Key extends string>(key: Key, value: unknown) {\n if (typeof value === 'string') {\n return {\n [key]: value,\n }\n }\n\n return {}\n}\n\nfunction ensureConditional<const Key extends string>(key: Key, value: unknown) {\n if (typeof value === 'boolean') {\n return {\n [key]: value,\n }\n }\n\n if (typeof value === 'function') {\n return {\n [key]: 'conditional',\n }\n }\n\n return {}\n}\n\nexport function transformBlockType(\n blockType: SchemaType,\n context: Context,\n): Pick<ManifestSchemaType, 'marks' | 'lists' | 'styles' | 'of'> | Record<string, never> {\n if (blockType.jsonType !== 'object' || !isType(blockType, 'block')) {\n return {}\n }\n\n const childrenField = blockType.fields?.find((field) => field.name === 'children') as\n | {type: ArraySchemaType}\n | undefined\n\n if (!childrenField) {\n return {}\n }\n const ofType = childrenField.type.of\n if (!ofType) {\n return {}\n }\n const spanType = ofType.find((memberType) => memberType.name === 'span') as\n | ObjectSchemaType\n | undefined\n if (!spanType) {\n return {}\n }\n const inlineObjectTypes = (ofType.filter((memberType) => memberType.name !== 'span') ||\n []) as ObjectSchemaType[]\n\n return {\n marks: {\n annotations: (spanType as SpanSchemaType).annotations.map((t) => transformType(t, context)),\n decorators: resolveEnabledDecorators(spanType),\n },\n lists: resolveEnabledListItems(blockType),\n styles: resolveEnabledStyles(blockType),\n of: inlineObjectTypes.map((t) => transformType(t, context)),\n }\n}\n\nfunction resolveEnabledStyles(blockType: ObjectSchemaType): ManifestTitledValue[] | undefined {\n const styleField = blockType.fields?.find((btField) => btField.name === 'style')\n return resolveTitleValueArray(styleField?.type?.options?.list)\n}\n\nfunction resolveEnabledDecorators(spanType: ObjectSchemaType): ManifestTitledValue[] | undefined {\n return 'decorators' in spanType ? resolveTitleValueArray(spanType.decorators) : undefined\n}\n\nfunction resolveEnabledListItems(blockType: ObjectSchemaType): ManifestTitledValue[] | undefined {\n const listField = blockType.fields?.find((btField) => btField.name === 'listItem')\n return resolveTitleValueArray(listField?.type?.options?.list)\n}\n\nfunction resolveTitleValueArray(possibleArray: unknown): ManifestTitledValue[] | undefined {\n if (!possibleArray || !Array.isArray(possibleArray)) {\n return undefined\n }\n const titledValues = possibleArray\n .filter(\n (d): d is {value: string; title?: string} => isRecord(d) && !!d.value && isString(d.value),\n )\n .map((item) => {\n return {\n value: item.value,\n ...ensureString('title', item.title),\n } satisfies ManifestTitledValue\n })\n if (!titledValues?.length) {\n return undefined\n }\n\n return titledValues\n}\n\nconst extractManifestTools = (tools: Workspace['tools']): ManifestTool[] =>\n tools.map((tool) => {\n const {\n title,\n name,\n icon,\n __internalApplicationType: type,\n } = tool as Workspace['tools'][number] & {__internalApplicationType: string}\n return {\n title,\n name,\n type: type || null,\n icon: resolveIcon({\n icon,\n title,\n }),\n } satisfies ManifestTool\n })\n\nconst resolveIcon = (props: SchemaIconProps): string | null => {\n const sheet = new ServerStyleSheet()\n\n try {\n /**\n * You must render the element first so\n * the style-sheet above can be populated\n */\n const element = renderToString(sheet.collectStyles(<SchemaIcon {...props} />))\n const styleTags = sheet.getStyleTags()\n\n /**\n * We can then create a single string\n * of HTML combining our styles and element\n * before purifying below.\n */\n const html = `${styleTags}${element}`.trim()\n\n return DOMPurify.sanitize(html, config)\n } catch (error) {\n return null\n } finally {\n sheet.seal()\n }\n}\n","import {isMainThread, parentPort, workerData as _workerData} from 'node:worker_threads'\n\nimport {extractCreateWorkspaceManifest} from '../../manifest/extractWorkspaceManifest'\nimport {getStudioWorkspaces} from '../util/getStudioWorkspaces'\nimport {mockBrowserEnvironment} from '../util/mockBrowserEnvironment'\n\n/** @internal */\nexport interface ExtractManifestWorkerData {\n workDir: string\n}\n\nasync function main() {\n if (isMainThread || !parentPort) {\n throw new Error('This module must be run as a worker thread')\n }\n\n const opts = _workerData as ExtractManifestWorkerData\n\n const cleanup = mockBrowserEnvironment(opts.workDir)\n\n try {\n const workspaces = await getStudioWorkspaces({basePath: opts.workDir})\n\n for (const workspace of workspaces) {\n parentPort?.postMessage(extractCreateWorkspaceManifest(workspace))\n }\n } finally {\n parentPort?.close()\n cleanup()\n }\n}\n\nmain().then(() => process.exit())\n"],"names":["theme","buildTheme","SchemaIcon","t0","$","_c","icon","title","subtitle","t1","normalizeIcon","t2","jsx","ThemeProvider","Icon","isValidElementType","isValidElement","createDefaultIcon","DEFAULT_IMAGE_FIELDS","DEFAULT_FILE_FIELDS","DEFAULT_GEOPOINT_FIELDS","DEFAULT_SLUG_FIELDS","getCustomFields","type","fields","fieldsets","flatMap","fs","single","field","map","fieldset","name","isType","filter","f","includes","isReference","isCrossDatasetReference","isGlobalDocumentReference","isObjectField","maybeOjectField","isCustomized","maybeCustomized","Array","isArray","length","schemaType","typeName","isDefined","value","isRecord","isPrimitive","isString","isBoolean","isNumber","HTML_TAGS","SVG_TAGS","SVG_FILTER_TAGS","ALLOWED_TAGS","HTML_ATTRIBUTES","SVG_ATTRIBUTES","ALLOWED_ATTR","config","FORCE_BODY","MAX_CUSTOM_PROPERTY_DEPTH","INLINE_TYPES","extractCreateWorkspaceManifest","workspace","serializedSchema","extractManifestSchemaTypes","schema","serializedTools","extractManifestTools","tools","basePath","projectId","dataset","resolveIcon","mediaLibrary","typeNames","getTypeNames","context","studioDefaultTypeNames","createSchema","types","get","transformType","transformCommonTypeFields","arrayProps","jsonType","transformArrayMember","referenceProps","transformReference","crossDatasetRefProps","transformCrossDatasetReference","globalRefProps","transformGlobalDocumentReference","objectFields","objectField","transformField","retainCustomTypeProps","transformValidation","validation","ensureString","description","ensureConditional","readOnly","hidden","transformFieldsets","transformBlockType","options","retainSerializableProps","ensureCustomTitle","manuallySerializedFields","typeWithoutManuallyHandledFields","Object","fromEntries","entries","key","maybeSerializable","depth","RegExp","toString","arrayItems","item","undefined","serializableEntries","fieldType","arrayMember","of","reference","to","crossDataset","preview","select","transformTypeValidationRule","rule","constraint","toLowerCase","validationRuleTransformers","validationArray","disallowedFlags","disallowedConstraintTypes","ConcreteRuleClass","FIELD_REF","serializedValidation","_rules","_message","_level","message","rules","flag","reduce","transformedRule","spec","level","group","titleObject","defaultTitle","startCase","blockType","childrenField","find","ofType","spanType","memberType","inlineObjectTypes","marks","annotations","t","decorators","resolveEnabledDecorators","lists","resolveEnabledListItems","styles","resolveEnabledStyles","styleField","btField","resolveTitleValueArray","list","listField","possibleArray","titledValues","d","tool","__internalApplicationType","props","sheet","ServerStyleSheet","element","renderToString","collectStyles","html","getStyleTags","trim","DOMPurify","sanitize","seal","main","isMainThread","parentPort","Error","opts","_workerData","cleanup","mockBrowserEnvironment","workDir","workspaces","getStudioWorkspaces","postMessage","close","then","process","exit"],"mappings":"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YACA,eACA,gBACA,gBACA,iBACA,oBACA,UACA,YACA,QACA,QACA,WACA,UACA,QACA,KACA,SACA,YACA,SACA,SACA,QACA,kBACA,UACA,QACA,YACA,SACA,QACA,WACA,WACA,YACA,kBACA,QACA,QACA,SACA,UACA,UACA,QACA,YACA,SACA,QACA,SACA,QACA,OAAO,GAGHC,kBAAkB,CACtB,WACA,iBACA,uBACA,eACA,oBACA,qBACA,qBACA,kBACA,gBACA,WACA,WACA,WACA,WACA,WACA,kBACA,WACA,WACA,eACA,gBACA,YACA,gBACA,sBACA,eACA,UACA,cAAc,GAGVC,eAAuC,CAAC,GAAGF,UAAU,GAAGD,WAAW,GAAGE,eAAe,GAIrFE,kBAAkB,CACtB,OACA,SACA,eACA,YACA,iBACA,iBACA,UACA,WACA,OACA,UACA,SACA,OAAO,GAGHC,iBAAiB,CACrB,iBACA,cACA,YACA,sBACA,aACA,UACA,iBACA,iBACA,WACA,iBACA,kBACA,SACA,QACA,MACA,SACA,QACA,iBACA,aACA,aACA,SACA,uBACA,+BACA,iBACA,mBACA,MACA,MACA,KACA,MACA,MACA,mBACA,aACA,WACA,WACA,OACA,YACA,aACA,OACA,YACA,QACA,gBACA,aACA,UACA,eACA,eACA,iBACA,eACA,aACA,oBACA,gBACA,cACA,gBACA,eACA,MACA,MACA,MACA,MACA,cACA,YACA,iBACA,qBACA,UACA,QACA,MACA,mBACA,MACA,OACA,aACA,KACA,MACA,MACA,MACA,MACA,WACA,aACA,cACA,YACA,QACA,gBACA,kBACA,gBACA,oBACA,kBACA,SACA,cACA,cACA,gBACA,gBACA,eACA,eACA,oBACA,aACA,OACA,QACA,SACA,UACA,QACA,OACA,QACA,cACA,UACA,YACA,WACA,SACA,UACA,eACA,UACA,YACA,eACA,QACA,cACA,uBACA,oBACA,gBACA,UACA,iBACA,uBACA,kBACA,KACA,MACA,MACA,UACA,QACA,QACA,eACA,aACA,WACA,UACA,UACA,SACA,QACA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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "sanity",
|
3
|
-
"version": "3.92.1-next.
|
3
|
+
"version": "3.92.1-next.11.5b15f40a54",
|
4
4
|
"description": "Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches",
|
5
5
|
"keywords": [
|
6
6
|
"sanity",
|
@@ -156,11 +156,11 @@
|
|
156
156
|
"@rexxars/react-json-inspector": "^9.0.1",
|
157
157
|
"@sanity/asset-utils": "^2.2.1",
|
158
158
|
"@sanity/bifur-client": "^0.4.1",
|
159
|
-
"@sanity/cli": "3.92.1-next.
|
159
|
+
"@sanity/cli": "3.92.1-next.11.5b15f40a54",
|
160
160
|
"@sanity/client": "^7.5.0",
|
161
161
|
"@sanity/color": "^3.0.0",
|
162
162
|
"@sanity/comlink": "^3.0.5",
|
163
|
-
"@sanity/diff": "3.92.1-next.
|
163
|
+
"@sanity/diff": "3.92.1-next.11.5b15f40a54",
|
164
164
|
"@sanity/diff-match-patch": "^3.1.1",
|
165
165
|
"@sanity/diff-patch": "^5.0.0",
|
166
166
|
"@sanity/eventsource": "^5.0.0",
|
@@ -172,16 +172,16 @@
|
|
172
172
|
"@sanity/insert-menu": "^1.1.12",
|
173
173
|
"@sanity/logos": "^2.2.0",
|
174
174
|
"@sanity/message-protocol": "^0.13.0",
|
175
|
-
"@sanity/migrate": "3.92.1-next.
|
176
|
-
"@sanity/mutator": "3.92.1-next.
|
175
|
+
"@sanity/migrate": "3.92.1-next.11.5b15f40a54",
|
176
|
+
"@sanity/mutator": "3.92.1-next.11.5b15f40a54",
|
177
177
|
"@sanity/presentation-comlink": "^1.0.21",
|
178
178
|
"@sanity/preview-url-secret": "^2.1.11",
|
179
|
-
"@sanity/schema": "3.92.1-next.
|
179
|
+
"@sanity/schema": "3.92.1-next.11.5b15f40a54",
|
180
180
|
"@sanity/sdk": "0.0.0-alpha.25",
|
181
181
|
"@sanity/telemetry": "^0.8.0",
|
182
|
-
"@sanity/types": "3.92.1-next.
|
182
|
+
"@sanity/types": "3.92.1-next.11.5b15f40a54",
|
183
183
|
"@sanity/ui": "^2.15.18",
|
184
|
-
"@sanity/util": "3.92.1-next.
|
184
|
+
"@sanity/util": "3.92.1-next.11.5b15f40a54",
|
185
185
|
"@sanity/uuid": "^3.0.2",
|
186
186
|
"@sentry/react": "^8.33.0",
|
187
187
|
"@tanstack/react-table": "^8.16.0",
|
@@ -288,7 +288,7 @@
|
|
288
288
|
"@repo/dev-aliases": "3.92.0",
|
289
289
|
"@repo/package.config": "3.92.0",
|
290
290
|
"@repo/test-config": "3.92.0",
|
291
|
-
"@sanity/codegen": "3.92.1-next.
|
291
|
+
"@sanity/codegen": "3.92.1-next.11.5b15f40a54",
|
292
292
|
"@sanity/generate-help-url": "^3.0.0",
|
293
293
|
"@sanity/pkg-utils": "6.13.4",
|
294
294
|
"@sanity/tsdoc": "1.0.169",
|
@@ -335,5 +335,5 @@
|
|
335
335
|
"engines": {
|
336
336
|
"node": ">=18"
|
337
337
|
},
|
338
|
-
"gitHead": "
|
338
|
+
"gitHead": "5b15f40a543d9285925ad5ca33c5922ebb060121"
|
339
339
|
}
|
@@ -9,6 +9,7 @@ import {
|
|
9
9
|
createSchema,
|
10
10
|
type CrossDatasetReferenceSchemaType,
|
11
11
|
type FileSchemaType,
|
12
|
+
type GlobalDocumentReferenceSchemaType,
|
12
13
|
type MultiFieldSet,
|
13
14
|
type NumberSchemaType,
|
14
15
|
type ObjectField,
|
@@ -31,6 +32,7 @@ import {
|
|
31
32
|
isCrossDatasetReference,
|
32
33
|
isCustomized,
|
33
34
|
isDefined,
|
35
|
+
isGlobalDocumentReference,
|
34
36
|
isPrimitive,
|
35
37
|
isRecord,
|
36
38
|
isReference,
|
@@ -125,6 +127,9 @@ function transformCommonTypeFields(
|
|
125
127
|
const crossDatasetRefProps = isCrossDatasetReference(type)
|
126
128
|
? transformCrossDatasetReference(type)
|
127
129
|
: {}
|
130
|
+
const globalRefProps = isGlobalDocumentReference(type)
|
131
|
+
? transformGlobalDocumentReference(type)
|
132
|
+
: {}
|
128
133
|
|
129
134
|
const objectFields: ObjectFields =
|
130
135
|
type.jsonType === 'object' && type.type && INLINE_TYPES.includes(typeName) && isCustomized(type)
|
@@ -141,6 +146,7 @@ function transformCommonTypeFields(
|
|
141
146
|
...arrayProps,
|
142
147
|
...referenceProps,
|
143
148
|
...crossDatasetRefProps,
|
149
|
+
...globalRefProps,
|
144
150
|
...ensureConditional('readOnly', type.readOnly),
|
145
151
|
...ensureConditional('hidden', type.hidden),
|
146
152
|
...transformFieldsets(type),
|
@@ -330,6 +336,23 @@ function transformCrossDatasetReference(
|
|
330
336
|
}
|
331
337
|
}
|
332
338
|
|
339
|
+
function transformGlobalDocumentReference(
|
340
|
+
reference: GlobalDocumentReferenceSchemaType,
|
341
|
+
): Pick<ManifestSchemaType, 'to' | 'preview'> {
|
342
|
+
return {
|
343
|
+
to: (reference.to ?? []).map((crossDataset) => {
|
344
|
+
const preview = crossDataset.preview?.select
|
345
|
+
? {preview: {select: crossDataset.preview.select}}
|
346
|
+
: {}
|
347
|
+
return {
|
348
|
+
type: crossDataset.type,
|
349
|
+
...ensureCustomTitle(crossDataset.type, crossDataset.title),
|
350
|
+
...preview,
|
351
|
+
}
|
352
|
+
}),
|
353
|
+
}
|
354
|
+
}
|
355
|
+
|
333
356
|
const transformTypeValidationRule: ValidationRuleTransformer = (rule) => {
|
334
357
|
return {
|
335
358
|
...rule,
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import {
|
2
2
|
type CrossDatasetReferenceSchemaType,
|
3
|
+
type GlobalDocumentReferenceSchemaType,
|
3
4
|
type ObjectField,
|
4
5
|
type ObjectSchemaType,
|
5
6
|
type ReferenceSchemaType,
|
@@ -50,6 +51,12 @@ export function isCrossDatasetReference(type: SchemaType): type is CrossDatasetR
|
|
50
51
|
return isType(type, 'crossDatasetReference')
|
51
52
|
}
|
52
53
|
|
54
|
+
export function isGlobalDocumentReference(
|
55
|
+
type: SchemaType,
|
56
|
+
): type is GlobalDocumentReferenceSchemaType {
|
57
|
+
return isType(type, 'globalDocumentReference')
|
58
|
+
}
|
59
|
+
|
53
60
|
export function isObjectField(maybeOjectField: unknown): boolean {
|
54
61
|
return (
|
55
62
|
typeof maybeOjectField === 'object' && maybeOjectField !== null && 'name' in maybeOjectField
|
@@ -59,8 +66,9 @@ export function isObjectField(maybeOjectField: unknown): boolean {
|
|
59
66
|
export function isCustomized(maybeCustomized: SchemaType): boolean {
|
60
67
|
const hasFieldsArray =
|
61
68
|
isObjectField(maybeCustomized) &&
|
62
|
-
!
|
63
|
-
!
|
69
|
+
!isReference(maybeCustomized) &&
|
70
|
+
!isCrossDatasetReference(maybeCustomized) &&
|
71
|
+
!isGlobalDocumentReference(maybeCustomized) &&
|
64
72
|
'fields' in maybeCustomized &&
|
65
73
|
Array.isArray(maybeCustomized.fields)
|
66
74
|
|