sanity 3.26.2-canary.52 → 3.26.2-canary.69
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/{_internal-2CJ5wSKF.js → _internal-6Pl2wJGj.js} +422 -201
- package/lib/_chunks/_internal-6Pl2wJGj.js.map +1 -0
- package/lib/_chunks/{_internal-79flWvL8.js → _internal-yQwMw2ht.js} +419 -203
- package/lib/_chunks/_internal-yQwMw2ht.js.map +1 -0
- package/lib/_chunks/{_internalBrowser-QAFz3SKp.js → _internalBrowser-HWvRXvlU.js} +22 -22
- package/lib/_chunks/_internalBrowser-HWvRXvlU.js.map +1 -0
- package/lib/_chunks/{_internalBrowser-Y0qKZ-GA.js → _internalBrowser-TWIhitgI.js} +22 -22
- package/lib/_chunks/_internalBrowser-TWIhitgI.js.map +1 -0
- package/lib/_chunks/{deployApiAction-SHteit1G.js → deployApiAction-TZcCtXan.js} +2 -2
- package/lib/_chunks/{deployApiAction-SHteit1G.js.map → deployApiAction-TZcCtXan.js.map} +1 -1
- package/lib/_chunks/{deployApiAction-bRyJpGOS.js → deployApiAction-rVL67VYW.js} +2 -2
- package/lib/_chunks/{deployApiAction-bRyJpGOS.js.map → deployApiAction-rVL67VYW.js.map} +1 -1
- package/lib/_chunks/{getStudioConfig-JSkc4GE0.js → getStudioWorkspaces-HX9o9-hl.js} +20 -4
- package/lib/_chunks/getStudioWorkspaces-HX9o9-hl.js.map +1 -0
- package/lib/_chunks/{index-EO9iRnDS.js → index-2kSxso3r.js} +2 -2
- package/lib/_chunks/{index-EO9iRnDS.js.map → index-2kSxso3r.js.map} +1 -1
- package/lib/_chunks/{index-FQCCBbuC.js → index-751ZLh3z.js} +6 -6
- package/lib/_chunks/{index-FQCCBbuC.js.map → index-751ZLh3z.js.map} +1 -1
- package/lib/_chunks/{index-VNSHvpZr.js → index-HcF369ru.js} +2 -2
- package/lib/_chunks/{index-VNSHvpZr.js.map → index-HcF369ru.js.map} +1 -1
- package/lib/_chunks/{index-Xs2xnLUV.js → index-MAAxgUnl.js} +6 -6
- package/lib/_chunks/{index-Xs2xnLUV.js.map → index-MAAxgUnl.js.map} +1 -1
- package/lib/_chunks/{index-AaK2CidU.js → index-NweJPfGb.js} +2 -2
- package/lib/_chunks/{index-AaK2CidU.js.map → index-NweJPfGb.js.map} +1 -1
- package/lib/_chunks/{index-R7R6AyHF.js → index-zobOqko7.js} +2 -2
- package/lib/_chunks/{index-R7R6AyHF.js.map → index-zobOqko7.js.map} +1 -1
- package/lib/_chunks/{listApisAction-6lGkFZrU.js → listApisAction-IvKV4iAd.js} +2 -2
- package/lib/_chunks/{listApisAction-6lGkFZrU.js.map → listApisAction-IvKV4iAd.js.map} +1 -1
- package/lib/_chunks/{listApisAction-CqCkBz-F.js → listApisAction-oca2uykY.js} +2 -2
- package/lib/_chunks/{listApisAction-CqCkBz-F.js.map → listApisAction-oca2uykY.js.map} +1 -1
- package/lib/_chunks/pane-9HEeITpx.js +5 -0
- package/lib/_chunks/pane-9HEeITpx.js.map +1 -0
- package/lib/_chunks/pane-QyVrOLqS.js +2 -0
- package/lib/_chunks/pane-QyVrOLqS.js.map +1 -0
- package/lib/_chunks/pane-TXXUUvdc.js +5 -0
- package/lib/_chunks/pane-TXXUUvdc.js.map +1 -0
- package/lib/_chunks/pane-cQxQtBcL.js +2 -0
- package/lib/_chunks/pane-cQxQtBcL.js.map +1 -0
- package/lib/_chunks/{structure-qJLnDJXq.js → structure-iqIDIH7-.js} +3 -3
- package/lib/_chunks/structure-iqIDIH7-.js.map +1 -0
- package/lib/_chunks/{structure-588eAwLd.js → structure-o_wMXC_G.js} +3 -3
- package/lib/_chunks/structure-o_wMXC_G.js.map +1 -0
- package/lib/_chunks/validateAction-4Jl_y_iB.js +154 -0
- package/lib/_chunks/validateAction-4Jl_y_iB.js.map +1 -0
- package/lib/_chunks/{validateAction-GUvMkXiN.js → validateAction-6q8Sqwaz.js} +25 -73
- package/lib/_chunks/validateAction-6q8Sqwaz.js.map +1 -0
- package/lib/_chunks/validateAction-Bz67ApRP.js +143 -0
- package/lib/_chunks/validateAction-Bz67ApRP.js.map +1 -0
- package/lib/_chunks/{validateAction-NIrqtyYJ.js → validateAction-shi462sq.js} +27 -75
- package/lib/_chunks/validateAction-shi462sq.js.map +1 -0
- package/lib/_internal/cli/threads/getGraphQLAPIs.js +2 -2
- package/lib/_internal/cli/threads/getGraphQLAPIs.js.map +1 -1
- package/lib/_internal/cli/threads/validateDocuments.js +5 -3
- package/lib/_internal/cli/threads/validateDocuments.js.map +1 -1
- package/lib/_internal/cli/threads/validateSchema.js +55 -0
- package/lib/_internal/cli/threads/validateSchema.js.map +1 -0
- package/lib/_internal.esm.js +1 -1
- package/lib/_internal.js +1 -1
- package/lib/_internalBrowser.esm.js +1 -1
- package/lib/_internalBrowser.js +1 -1
- package/lib/desk.esm.js +1 -1
- package/lib/desk.js +1 -1
- package/lib/exports/index.d.ts +25 -0
- package/lib/index.cjs.mjs +1 -0
- package/lib/index.esm.js +2 -2
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/structure.esm.js +1 -1
- package/lib/structure.js +1 -1
- package/package.json +15 -15
- package/src/_internal/cli/actions/schema/formatSchemaValidation.ts +96 -0
- package/src/_internal/cli/actions/schema/validateAction.ts +120 -0
- package/src/_internal/cli/actions/validation/reporters/prettyReporter/formatDocumentValidation.ts +17 -95
- package/src/_internal/cli/commands/index.ts +2 -0
- package/src/_internal/cli/commands/migration/createMigrationCommand.ts +18 -10
- package/src/_internal/cli/commands/migration/listMigrationsCommand.ts +34 -31
- package/src/_internal/cli/commands/migration/prettyMutationFormatter.ts +214 -0
- package/src/_internal/cli/commands/migration/runMigrationCommand.ts +102 -58
- package/src/_internal/cli/commands/migration/templates/minimalAdvanced.ts +1 -1
- package/src/_internal/cli/commands/migration/templates/minimalSimple.ts +1 -1
- package/src/_internal/cli/commands/migration/templates/renameField.ts +3 -3
- package/src/_internal/cli/commands/migration/templates/renameType.ts +1 -1
- package/src/_internal/cli/commands/migration/templates/stringToPTE.ts +1 -1
- package/src/_internal/cli/commands/migration/utils/mutationFormatter.ts +1 -1
- package/src/_internal/cli/commands/schema/validateSchemaCommand.ts +35 -0
- package/src/_internal/cli/threads/getGraphQLAPIs.ts +2 -2
- package/src/_internal/cli/threads/validateDocuments.ts +6 -3
- package/src/_internal/cli/threads/validateSchema.ts +73 -0
- package/src/_internal/cli/util/{getStudioConfig.ts → getStudioWorkspaces.ts} +30 -8
- package/src/_internal/cli/util/tree.ts +110 -0
- package/src/core/config/index.ts +1 -0
- package/src/core/config/prepareConfig.ts +2 -5
- package/src/core/config/resolveSchemaTypes.ts +29 -0
- package/src/core/studio/screens/schemaErrors/SchemaProblemGroups.tsx +4 -2
- package/src/structure/comments/src/components/pte/blocks/MentionInlineBlock.tsx +13 -6
- package/lib/_chunks/_internal-2CJ5wSKF.js.map +0 -1
- package/lib/_chunks/_internal-79flWvL8.js.map +0 -1
- package/lib/_chunks/_internalBrowser-QAFz3SKp.js.map +0 -1
- package/lib/_chunks/_internalBrowser-Y0qKZ-GA.js.map +0 -1
- package/lib/_chunks/getStudioConfig-JSkc4GE0.js.map +0 -1
- package/lib/_chunks/pane-QmJb9ZTN.js +0 -2
- package/lib/_chunks/pane-QmJb9ZTN.js.map +0 -1
- package/lib/_chunks/pane-SK7FWNTJ.js +0 -2
- package/lib/_chunks/pane-SK7FWNTJ.js.map +0 -1
- package/lib/_chunks/pane-y4hpcKe1.js +0 -5
- package/lib/_chunks/pane-y4hpcKe1.js.map +0 -1
- package/lib/_chunks/pane-yQXBQyyI.js +0 -5
- package/lib/_chunks/pane-yQXBQyyI.js.map +0 -1
- package/lib/_chunks/structure-588eAwLd.js.map +0 -1
- package/lib/_chunks/structure-qJLnDJXq.js.map +0 -1
- package/lib/_chunks/validateAction-GUvMkXiN.js.map +0 -1
- package/lib/_chunks/validateAction-NIrqtyYJ.js.map +0 -1
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"validateAction-GUvMkXiN.js","sources":["../../src/_internal/cli/util/workerChannels.ts","../../src/_internal/cli/actions/validation/validateDocuments.ts","../../src/_internal/cli/actions/validation/reporters/prettyReporter/util.ts","../../src/_internal/cli/actions/validation/reporters/prettyReporter/formatDocumentValidation.ts","../../src/_internal/cli/actions/validation/reporters/prettyReporter/prettyReporter.ts","../../src/_internal/cli/actions/validation/reporters/ndjsonReporter.ts","../../src/_internal/cli/actions/validation/reporters/jsonReporter.ts","../../src/_internal/cli/actions/validation/reporters/index.ts","../../src/_internal/cli/actions/validation/validateAction.ts"],"sourcesContent":["import type {MessagePort, Worker} from 'worker_threads'\n\ntype StreamReporter<TPayload = unknown> = {emit: (payload: TPayload) => void; end: () => void}\ntype EventReporter<TPayload = unknown> = (payload: TPayload) => void\ntype EventReceiver<TPayload = unknown> = () => Promise<TPayload>\ntype StreamReceiver<TPayload = unknown> = () => AsyncIterable<TPayload>\n\ntype EventKeys<TWorkerChannel extends WorkerChannel> = {\n [K in keyof TWorkerChannel]: TWorkerChannel[K] extends WorkerChannelEvent<any> ? K : never\n}[keyof TWorkerChannel]\ntype StreamKeys<TWorkerChannel extends WorkerChannel> = {\n [K in keyof TWorkerChannel]: TWorkerChannel[K] extends WorkerChannelStream<any> ? K : never\n}[keyof TWorkerChannel]\n\ntype EventMessage<TPayload = unknown> = {type: 'event'; name: string; payload: TPayload}\ntype StreamEmissionMessage<TPayload = unknown> = {type: 'emission'; name: string; payload: TPayload}\ntype StreamEndMessage = {type: 'end'; name: string}\ntype WorkerChannelMessage = EventMessage | StreamEmissionMessage | StreamEndMessage\n\n/**\n * Represents the definition of a \"worker channel\" to report progress from the\n * worker to the parent. Worker channels can define named events or streams and\n * the worker will report events and streams while the parent will await them.\n * This allows the control flow of the parent to follow the control flow of the\n * worker 1-to-1.\n */\nexport type WorkerChannel<\n TWorkerChannel extends Record<\n string,\n WorkerChannelEvent<unknown> | WorkerChannelStream<unknown>\n > = Record<string, WorkerChannelEvent<unknown> | WorkerChannelStream<unknown>>,\n> = TWorkerChannel\n\nexport type WorkerChannelEvent<TPayload = void> = {type: 'event'; payload: TPayload}\nexport type WorkerChannelStream<TPayload = void> = {type: 'stream'; payload: TPayload}\n\nexport interface WorkerChannelReporter<TWorkerChannel extends WorkerChannel> {\n event: {\n [K in EventKeys<TWorkerChannel>]: TWorkerChannel[K] extends WorkerChannelEvent<infer TPayload>\n ? EventReporter<TPayload>\n : void\n }\n stream: {\n [K in StreamKeys<TWorkerChannel>]: TWorkerChannel[K] extends WorkerChannelStream<infer TPayload>\n ? StreamReporter<TPayload>\n : void\n }\n}\n\nexport interface WorkerChannelReceiver<TWorkerChannel extends WorkerChannel> {\n event: {\n [K in EventKeys<TWorkerChannel>]: TWorkerChannel[K] extends WorkerChannelEvent<infer TPayload>\n ? EventReceiver<TPayload>\n : void\n }\n stream: {\n [K in StreamKeys<TWorkerChannel>]: TWorkerChannel[K] extends WorkerChannelStream<infer TPayload>\n ? StreamReceiver<TPayload>\n : void\n }\n // TODO: good candidate for [Symbol.asyncDispose] when our tooling better supports it\n dispose: () => Promise<number>\n}\n\n/**\n * A simple queue that has two primary methods: `push(message)` and\n * `await next()`. This message queue is used by the \"receiver\" of the worker\n * channel and this class handles buffering incoming messages if the worker is\n * producing faster than the parent as well as returning a promise if there is\n * no message yet in the queue when the parent awaits `next()`.\n */\nclass MessageQueue<T> {\n resolver: ((result: IteratorResult<T>) => void) | null = null\n queue: T[] = []\n\n push(message: T) {\n if (this.resolver) {\n this.resolver({value: message, done: false})\n this.resolver = null\n } else {\n this.queue.push(message)\n }\n }\n\n next(): Promise<IteratorResult<T>> {\n if (this.queue.length) {\n return Promise.resolve({value: this.queue.shift()!, done: false})\n }\n\n return new Promise((resolve) => (this.resolver = resolve))\n }\n\n end() {\n if (this.resolver) {\n this.resolver({value: undefined, done: true})\n }\n }\n}\n\nfunction isWorkerChannelMessage(message: unknown): message is WorkerChannelMessage {\n if (typeof message !== 'object') return false\n if (!message) return false\n if (!('type' in message)) return false\n if (typeof message.type !== 'string') return false\n const types: string[] = ['event', 'emission', 'end'] satisfies WorkerChannelMessage['type'][]\n return types.includes(message.type)\n}\n\n/**\n * Creates a \"worker channel receiver\" that subscribes to incoming messages\n * from the given worker and returns promises for worker channel events and\n * async iterators for worker channel streams.\n */\nexport function createReceiver<TWorkerChannel extends WorkerChannel>(\n worker: Worker,\n): WorkerChannelReceiver<TWorkerChannel> {\n const _events = new Map<string, MessageQueue<EventMessage>>()\n const _streams = new Map<string, MessageQueue<StreamEmissionMessage>>()\n const errors = new MessageQueue<{type: 'error'; error: unknown}>()\n\n const eventQueue = (name: string) => {\n const queue = _events.get(name) ?? new MessageQueue()\n if (!_events.has(name)) _events.set(name, queue)\n return queue\n }\n\n const streamQueue = (name: string) => {\n const queue = _streams.get(name) ?? new MessageQueue()\n if (!_streams.has(name)) _streams.set(name, queue)\n return queue\n }\n\n const handleMessage = (message: unknown) => {\n if (!isWorkerChannelMessage(message)) return\n if (message.type === 'event') eventQueue(message.name).push(message)\n if (message.type === 'emission') streamQueue(message.name).push(message)\n if (message.type === 'end') streamQueue(message.name).end()\n }\n\n const handleError = (error: unknown) => {\n errors.push({type: 'error', error})\n }\n\n worker.addListener('message', handleMessage)\n worker.addListener('error', handleError)\n\n return {\n event: new Proxy({} as WorkerChannelReceiver<TWorkerChannel>['event'], {\n get: (target, name) => {\n if (typeof name !== 'string') return target[name as keyof typeof target]\n\n const eventReceiver: EventReceiver = async () => {\n const {value} = await Promise.race([eventQueue(name).next(), errors.next()])\n if (value.type === 'error') throw value.error\n return value.payload\n }\n\n return eventReceiver\n },\n }),\n stream: new Proxy({} as WorkerChannelReceiver<TWorkerChannel>['stream'], {\n get: (target, prop) => {\n if (typeof prop !== 'string') return target[prop as keyof typeof target]\n const name = prop // alias for better typescript narrowing\n\n async function* streamReceiver() {\n while (true) {\n const {value, done} = await Promise.race([streamQueue(name).next(), errors.next()])\n if (done) return\n if (value.type === 'error') throw value.error\n yield value.payload\n }\n }\n\n return streamReceiver satisfies StreamReceiver\n },\n }),\n dispose: () => {\n worker.removeListener('message', handleMessage)\n worker.removeListener('error', handleError)\n return worker.terminate()\n },\n }\n}\n\n/**\n * Creates a \"worker channel reporter\" that sends messages to the given\n * `parentPort` to be received by a worker channel receiver.\n */\nexport function createReporter<TWorkerChannel extends WorkerChannel>(\n parentPort: MessagePort | null,\n): WorkerChannelReporter<TWorkerChannel> {\n if (!parentPort) {\n throw new Error('parentPart was falsy')\n }\n\n return {\n event: new Proxy({} as WorkerChannelReporter<TWorkerChannel>['event'], {\n get: (target, name) => {\n if (typeof name !== 'string') return target[name as keyof typeof target]\n\n const eventReporter: EventReporter = (payload) => {\n const message: EventMessage = {type: 'event', name, payload}\n parentPort.postMessage(message)\n }\n\n return eventReporter\n },\n }),\n stream: new Proxy({} as WorkerChannelReporter<TWorkerChannel>['stream'], {\n get: (target, name) => {\n if (typeof name !== 'string') return target[name as keyof typeof target]\n\n const streamReporter: StreamReporter = {\n emit: (payload) => {\n const message: StreamEmissionMessage = {type: 'emission', name, payload}\n parentPort.postMessage(message)\n },\n end: () => {\n const message: StreamEndMessage = {type: 'end', name}\n parentPort.postMessage(message)\n },\n }\n\n return streamReporter\n },\n }),\n }\n}\n","import path from 'path'\nimport {Worker} from 'worker_threads'\nimport readPkgUp from 'read-pkg-up'\nimport {ClientConfig} from '@sanity/client'\nimport {ValidationMarker} from '@sanity/types'\nimport type {\n ValidateDocumentsWorkerData,\n ValidationWorkerChannel,\n} from '../../threads/validateDocuments'\nimport {createReceiver, WorkerChannelReceiver} from '../../util/workerChannels'\n\nconst DEFAULT_MAX_CUSTOM_VALIDATION_CONCURRENCY = 5\n\nexport interface ValidateDocumentsOptions<TReturn = unknown> {\n level?: 'error' | 'warning' | 'info'\n workspace?: string\n workDir?: string\n configPath?: string\n clientConfig?: Partial<ClientConfig>\n projectId?: string // override\n dataset?: string // override\n ndjsonFilePath?: string\n maxCustomValidationConcurrency?: number\n reporter?: (worker: WorkerChannelReceiver<ValidationWorkerChannel>) => TReturn\n}\n\nexport interface DocumentValidationResult {\n documentId: string\n documentType: string\n revision: string\n level: ValidationMarker['level']\n markers: ValidationMarker[]\n}\n\nconst defaultReporter = ({stream, dispose}: WorkerChannelReceiver<ValidationWorkerChannel>) => {\n async function* createValidationGenerator() {\n for await (const {documentId, documentType, markers, revision, level} of stream.validation()) {\n const result: DocumentValidationResult = {\n documentId,\n documentType,\n revision,\n level,\n markers,\n }\n\n yield result\n }\n\n await dispose()\n }\n\n return createValidationGenerator()\n}\n\nexport function validateDocuments<TReturn>(\n options: ValidateDocumentsOptions<TReturn> &\n Required<Pick<ValidateDocumentsOptions<TReturn>, 'reporter'>>,\n): TReturn\nexport function validateDocuments(\n options: ValidateDocumentsOptions,\n): AsyncIterable<DocumentValidationResult>\nexport function validateDocuments(options: ValidateDocumentsOptions): unknown {\n const {\n workspace,\n clientConfig,\n configPath,\n dataset,\n projectId,\n workDir = process.cwd(),\n reporter = defaultReporter,\n level,\n maxCustomValidationConcurrency,\n ndjsonFilePath,\n } = options\n\n const rootPkgPath = readPkgUp.sync({cwd: __dirname})?.path\n if (!rootPkgPath) {\n throw new Error('Could not find root directory for `sanity` package')\n }\n\n const workerPath = path.join(\n path.dirname(rootPkgPath),\n 'lib',\n '_internal',\n 'cli',\n 'threads',\n 'validateDocuments.js',\n )\n\n const worker = new Worker(workerPath, {\n workerData: {\n workDir,\n // removes props in the config that make this object fail to serialize\n clientConfig: JSON.parse(JSON.stringify(clientConfig)),\n configPath,\n workspace,\n dataset,\n projectId,\n level,\n ndjsonFilePath,\n maxCustomValidationConcurrency:\n maxCustomValidationConcurrency ?? DEFAULT_MAX_CUSTOM_VALIDATION_CONCURRENCY,\n } satisfies ValidateDocumentsWorkerData,\n // eslint-disable-next-line no-process-env\n env: process.env,\n })\n\n return reporter(createReceiver<ValidationWorkerChannel>(worker))\n}\n","import {isatty} from 'tty'\nimport logSymbols from 'log-symbols'\nimport type {ValidationMarker} from '@sanity/types'\n\nexport type Level = ValidationMarker['level']\n\nexport interface DocumentValidationResult {\n revision: string\n documentId: string\n documentType: string\n level: ValidationMarker['level']\n markers: ValidationMarker[]\n}\n\nexport const isTty = isatty(1)\nexport const levelValues = {error: 0, warning: 1, info: 2} as const\n\n/**\n * Generates a formatted string that includes a numerical amount and a subject\n * in plural or singular form. Note: the subject must end in `s`\n */\nexport const count = (amount: number, subject: string): string =>\n `${amount.toLocaleString('en-US')} ${\n amount === 1 ? subject.substring(0, subject.length - 1) : subject\n }`\n\nconst percentageFormatter = new Intl.NumberFormat('en-US', {\n style: 'percent',\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n})\n\n/**\n * Given a decimal, this will return that number formatted as a percentage\n */\nexport const percent = (value: number): string => percentageFormatter.format(Math.min(value, 1))\n\nconst secondFormatter = new Intl.NumberFormat('en-US', {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n})\n\n/**\n * Given a start time in milliseconds, this will output the time elapsed\n * formatted in seconds\n */\nexport const seconds = (startTime: number): string => {\n const endTime = Date.now()\n return `(${secondFormatter.format((endTime - startTime) / 1000)}s)`\n}\n\ninterface ValidationTotals {\n valid: {documents: number}\n errors: {documents: number; markers: number}\n warnings: {documents: number; markers: number}\n infos: {documents: number; markers: number}\n}\n\n/**\n * Outputs summary text given an object of totals. Omits totals depending on the\n * desired validation `level`\n */\nexport const summary = (\n {errors, infos, valid, warnings}: ValidationTotals,\n level: Level = 'warning',\n): string => {\n const levelValue = levelValues[level]\n\n return [\n `${logSymbols.success} Valid: ${count(valid.documents, 'documents')}`,\n `${logSymbols.error} Errors: ${count(errors.documents, 'documents')}, ${count(\n errors.markers,\n 'errors',\n )}`,\n levelValue >= levelValues.warning &&\n `${logSymbols.warning} Warnings: ${count(warnings.documents, 'documents')}, ${count(\n warnings.markers,\n 'warnings',\n )}`,\n levelValue >= levelValues.info &&\n `${logSymbols.info} Info: ${count(infos.documents, 'documents')}, ${count(\n infos.documents,\n 'markers',\n )}`,\n ]\n .filter(Boolean)\n .join('\\n')\n}\n","import chalk from 'chalk'\nimport {ValidationMarker} from '@sanity/types'\nimport logSymbols from 'log-symbols'\nimport {DocumentValidationResult, Level, isTty, levelValues} from './util'\nimport {pathToString} from 'sanity'\n\nexport interface FormatDocumentValidationOptions extends DocumentValidationResult {\n studioHost: string | null\n basePath: string\n}\n\ninterface ValidationTree {\n markers?: Pick<ValidationMarker, 'level' | 'message'>[]\n children?: Record<string, ValidationTree>\n}\n\nconst levelHeaders = {\n error: isTty ? chalk.bold(chalk.bgRed(chalk.black(' ERROR '))) : chalk.red('[ERROR]'),\n warning: isTty ? chalk.bold(chalk.bgYellow(chalk.black(' WARN '))) : chalk.yellow('[WARN]'),\n info: isTty ? chalk.bold(chalk.cyan(chalk.black(' INFO '))) : chalk.cyan('[INFO]'),\n}\n/**\n * Creates a terminal hyperlink. Only outputs a hyperlink if the output is\n * determined to be a TTY\n */\nconst link = (text: string, url: string) =>\n isTty ? `\\u001b]8;;${url}\\u0007${text}\\u001b]8;;\\u0007` : chalk.underline(text)\n\n/**\n * Recursively calculates the max length of all the keys in the given validation\n * tree respecting extra length due to indentation depth. Used to calculate the\n * padding for the rest of the tree.\n */\nconst maxKeyLength = (children: Record<string, ValidationTree> = {}, depth = 0): number => {\n return Object.entries(children)\n .map(([key, child]) =>\n Math.max(key.length + depth * 2, maxKeyLength(child.children, depth + 1)),\n )\n .reduce((max, next) => (next > max ? next : max), 0)\n}\n\n/**\n * For sorting markers\n */\nconst compareLevels = <T extends {level: Level; message: string}>(a: T, b: T) =>\n levelValues[a.level] - levelValues[b.level]\n\n/**\n * Recursively formats a given tree into a printed user-friendly tree structure\n */\nconst formatTree = (\n node: Record<string, ValidationTree> = {},\n paddingLength: number,\n indent = '',\n): string => {\n const entries = Object.entries(node)\n\n return entries\n .map(([key, child], index) => {\n const isLast = index === entries.length - 1\n const nextIndent = `${indent}${isLast ? ' ' : '│ '}`\n const nested = formatTree(child.children, paddingLength, nextIndent)\n\n if (!child.markers?.length) {\n const current = `${indent}${isLast ? '└' : '├'}─ ${key}`\n return [current, nested].filter(Boolean).join('\\n')\n }\n\n const [first, ...rest] = child.markers.slice().sort(compareLevels)\n const firstPadding = '.'.repeat(paddingLength - indent.length - key.length)\n const elbow = isLast ? '└' : '├'\n const firstBullet = logSymbols[first.level]\n const subsequentPadding = ' '.repeat(paddingLength - indent.length + 2)\n\n const firstMessage = `${indent}${elbow}─ ${key} ${firstPadding} ${firstBullet} ${first.message}`\n const subsequentMessages = rest\n .map(\n (marker) =>\n `${nextIndent}${subsequentPadding} ${logSymbols[marker.level]} ${marker.message}`,\n )\n .join('\\n')\n\n const current = [firstMessage, subsequentMessages].filter(Boolean).join('\\n')\n return [current, nested].filter(Boolean).join('\\n')\n })\n .join('\\n')\n}\n\n/**\n * Formats the markers at the root of the validation tree\n */\nconst formatRootErrors = (root: ValidationTree, hasChildren: boolean, paddingLength: number) => {\n if (!root.markers) return ''\n\n const [first, ...rest] = root.markers.slice().sort(compareLevels)\n if (!first) return ''\n\n const firstElbow = hasChildren ? '│ ' : '└─'\n const firstPadding = '.'.repeat(paddingLength - 6)\n const firstLine = `${firstElbow} (root) ${firstPadding} ${logSymbols[first.level]} ${\n first.message\n }`\n const subsequentPadding = ' '.repeat(paddingLength + 2)\n const subsequentElbow = hasChildren ? '│ ' : ' '\n\n const restOfLines = rest\n .map(\n (marker) =>\n `${subsequentElbow}${subsequentPadding} ${logSymbols[marker.level]} ${marker.message}`,\n )\n .join('\\n')\n return [firstLine, restOfLines].filter(Boolean).join('\\n')\n}\n\n/**\n * Converts a set of markers with paths into a tree of markers where the paths\n * are embedded in the tree\n */\nfunction convertToTree(markers: ValidationMarker[]): ValidationTree {\n const root: ValidationTree = {}\n\n // add the markers to the tree\n function addMarker(marker: ValidationMarker, node: ValidationTree = root) {\n // if we've traversed the whole path\n if (!marker.path.length) {\n if (!node.markers) node.markers = [] // ensure markers is defined\n\n // then add the marker to the front\n node.markers.push({level: marker.level, message: marker.message})\n return\n }\n\n const [current, ...rest] = marker.path\n const key = pathToString([current])\n\n // ensure the current node has children and the next node\n if (!node.children) node.children = {}\n if (!(key in node.children)) node.children[key] = {}\n\n addMarker({...marker, path: rest}, node.children[key])\n }\n\n for (const marker of markers) addMarker(marker)\n return root\n}\n\n/**\n * Formats document validation results into a user-friendly tree structure\n */\nexport function formatDocumentValidation({\n basePath,\n documentId,\n documentType,\n level,\n studioHost,\n markers,\n}: FormatDocumentValidationOptions): string {\n const tree = convertToTree(markers)\n const editLink =\n studioHost &&\n `${studioHost}${basePath}/intent/edit/id=${encodeURIComponent(\n documentId,\n )};type=${encodeURIComponent(documentType)}`\n\n const documentTypeHeader = isTty\n ? chalk.bgWhite(chalk.black(` ${documentType} `))\n : `[${documentType}]`\n\n const header = `${levelHeaders[level]} ${documentTypeHeader} ${\n editLink ? link(documentId, editLink) : chalk.underline(documentId)\n }`\n\n const paddingLength = Math.max(maxKeyLength(tree.children) + 2, 30)\n const childErrors = formatTree(tree.children, paddingLength)\n const rootErrors = formatRootErrors(tree, childErrors.length > 0, paddingLength)\n\n return [header, rootErrors, childErrors].filter(Boolean).join('\\n')\n}\n","import type {BuiltInValidationReporter} from '../../validateAction'\nimport {formatDocumentValidation} from './formatDocumentValidation'\nimport {\n DocumentValidationResult,\n Level,\n count,\n levelValues,\n percent,\n seconds,\n summary,\n} from './util'\n\n/**\n * Represents the default stylish/pretty reporter\n */\n// eslint-disable-next-line max-statements\nexport const pretty: BuiltInValidationReporter = async ({output, worker, flags}) => {\n const workspaceLoadStart = Date.now()\n // Report workspace loaded\n const spinner = output\n .spinner(flags.workspace ? `Loading workspace '${flags.workspace}'…` : 'Loading workspace…')\n .start()\n\n const workspace = await worker.event.loadedWorkspace()\n spinner.succeed(\n `Loaded workspace '${workspace.name}' using project '${workspace.projectId}' and dataset '${\n flags.dataset || workspace.dataset\n }' ${seconds(workspaceLoadStart)}`,\n )\n\n if (!flags.file) {\n // Report document count\n spinner.start('Calculating documents to be validated…')\n const {documentCount} = await worker.event.loadedDocumentCount()\n\n // Report export progress\n const downloadStart = Date.now()\n spinner.text = `Downloading ${count(documentCount, 'documents')}…`\n for await (const {downloadedCount} of worker.stream.exportProgress()) {\n const percentage = percent(downloadedCount / documentCount)\n spinner.text = `Downloading ${count(documentCount, 'documents')}… ${percentage}`\n }\n spinner.succeed(`Downloaded ${count(documentCount, 'documents')} ${seconds(downloadStart)}`)\n }\n\n const {totalDocumentsToValidate} = await worker.event.exportFinished()\n\n const referenceIntegrityStart = Date.now()\n spinner.start(`Checking reference existence…`)\n await worker.event.loadedReferenceIntegrity()\n spinner.succeed(`Checked all references ${seconds(referenceIntegrityStart)}`)\n\n // Report validation progress\n const validationStart = Date.now()\n spinner.start(`Validating ${count(totalDocumentsToValidate, 'documents')}…`)\n\n const results: DocumentValidationResult[] = []\n\n const totals = {\n valid: {documents: 0},\n errors: {documents: 0, markers: 0},\n warnings: {documents: 0, markers: 0},\n infos: {documents: 0, markers: 0},\n }\n\n for await (const {validatedCount, ...result} of worker.stream.validation()) {\n const {markers} = result\n\n if (markers.length) {\n results.push(result)\n }\n\n const errors = markers.filter((marker) => marker.level === 'error')\n const warnings = markers.filter((marker) => marker.level === 'warning')\n const infos = markers.filter((marker) => marker.level === 'info')\n\n if (!markers.length) {\n totals.valid.documents += 1\n }\n\n if (errors.length) {\n totals.errors.documents += 1\n totals.errors.markers += errors.length\n }\n\n if (warnings.length) {\n totals.warnings.documents += 1\n totals.warnings.markers += warnings.length\n }\n\n if (infos.length) {\n totals.infos.documents += 1\n totals.infos.markers += infos.length\n }\n\n spinner.text =\n `Validating ${count(totalDocumentsToValidate, 'documents')}…\\n\\n` +\n `Processed ${count(validatedCount, 'documents')} (${percent(\n validatedCount / totalDocumentsToValidate,\n )}):\\n${summary(totals, flags.level)}`\n }\n\n spinner.succeed(\n `Validated ${count(totalDocumentsToValidate, 'documents')} ${seconds(validationStart)}`,\n )\n output.print(`\\nValidation results:\\n${summary(totals, flags.level)}`)\n\n results.sort((a, b) => {\n if (a.level === b.level) return a.documentType.localeCompare(b.documentType)\n return levelValues[a.level] - levelValues[b.level]\n })\n\n let overallLevel: Level = 'info'\n\n for (const result of results) {\n if (result.level === 'error') overallLevel = 'error'\n if (result.level === 'warning' && overallLevel !== 'error') overallLevel = 'warning'\n\n output.print(\n `${formatDocumentValidation({\n basePath: workspace.basePath,\n studioHost: workspace.studioHost,\n ...result,\n })}\\n`,\n )\n }\n\n await worker.dispose()\n\n return overallLevel\n}\n","import type {BuiltInValidationReporter} from '../validateAction'\n\nexport const ndjson: BuiltInValidationReporter = async ({output, worker}) => {\n let overallLevel: 'error' | 'warning' | 'info' = 'info'\n\n for await (const {\n documentId,\n documentType,\n markers,\n revision,\n level,\n } of worker.stream.validation()) {\n if (level === 'error') overallLevel = 'error'\n if (level === 'warning' && overallLevel !== 'error') overallLevel = 'warning'\n\n if (markers.length) {\n output.print(JSON.stringify({documentId, documentType, revision, level, markers}))\n }\n }\n\n await worker.dispose()\n\n return overallLevel\n}\n","import type {ValidationMarker} from '@sanity/types'\nimport type {BuiltInValidationReporter} from '../validateAction'\n\nexport const json: BuiltInValidationReporter = async ({output, worker}) => {\n let overallLevel: 'error' | 'warning' | 'info' = 'info'\n\n const results: Array<{\n documentId: string\n documentType: string\n revision: string\n level: 'error' | 'warning' | 'info'\n markers: ValidationMarker[]\n }> = []\n\n for await (const {\n documentId,\n documentType,\n markers,\n revision,\n level,\n } of worker.stream.validation()) {\n if (level === 'error') overallLevel = 'error'\n if (level === 'warning' && overallLevel !== 'error') overallLevel = 'warning'\n\n results.push({\n documentId,\n documentType,\n revision,\n level,\n markers,\n })\n }\n\n await worker.dispose()\n\n output.print(JSON.stringify(results))\n\n return overallLevel\n}\n","import {pretty} from './prettyReporter'\nimport {ndjson} from './ndjsonReporter'\nimport {json} from './jsonReporter'\n\nexport const reporters = {pretty, ndjson, json}\n","import path from 'path'\nimport fs from 'fs'\nimport type {CliCommandArguments, CliCommandContext, CliOutputter} from '@sanity/cli'\nimport logSymbols from 'log-symbols'\nimport chalk from 'chalk'\nimport {ClientConfig} from '@sanity/client'\nimport type {WorkerChannelReceiver} from '../../util/workerChannels'\nimport type {ValidationWorkerChannel} from '../../threads/validateDocuments'\nimport {validateDocuments} from './validateDocuments'\nimport {reporters} from './reporters'\n\ninterface ValidateFlags {\n workspace?: string\n format?: string\n dataset?: string\n file?: string\n level?: 'error' | 'warning' | 'info'\n 'max-custom-validation-concurrency'?: number\n yes?: boolean\n y?: boolean\n}\n\nexport type BuiltInValidationReporter = (options: {\n output: CliOutputter\n worker: WorkerChannelReceiver<ValidationWorkerChannel>\n flags: ValidateFlags\n}) => Promise<'error' | 'warning' | 'info'>\n\nexport default async function validateAction(\n args: CliCommandArguments<ValidateFlags>,\n {apiClient, workDir, output, prompt}: CliCommandContext,\n): Promise<void> {\n const flags = args.extOptions\n const unattendedMode = Boolean(flags.yes || flags.y)\n\n if (!unattendedMode) {\n output.print(\n `${chalk.yellow(`${logSymbols.warning} Warning:`)} This command ${\n flags.file\n ? 'reads all documents from your input file'\n : 'downloads all documents from your dataset'\n } and processes them through your local schema within a ` +\n `simulated browser environment.\\n`,\n )\n output.print(`Potential pitfalls:\\n`)\n output.print(\n `- Processes all documents locally (excluding assets). Large datasets may require more resources.`,\n )\n output.print(\n `- Executes all custom validation functions. Some functions may need to be refactored for compatibility.`,\n )\n output.print(\n `- Not all standard browser features are available and may cause issues while loading your Studio.`,\n )\n output.print(\n `- Adheres to document permissions. Ensure this account can see all desired documents.`,\n )\n if (flags.file) {\n output.print(\n `- Checks for missing document references against the live dataset if not found in your file.`,\n )\n }\n\n const confirmed = await prompt.single<boolean>({\n type: 'confirm',\n message: `Are you sure you want to continue?`,\n default: true,\n })\n\n if (!confirmed) {\n output.print('User aborted')\n process.exitCode = 1\n return\n }\n }\n\n if (flags.format && !(flags.format in reporters)) {\n const formatter = new Intl.ListFormat('en-US', {\n style: 'long',\n type: 'conjunction',\n })\n throw new Error(\n `Did not recognize format '${flags.format}'. Available formats are ${formatter.format(\n Object.keys(reporters).map((key) => `'${key}'`),\n )}`,\n )\n }\n\n const level = flags.level || 'warning'\n\n if (level !== 'error' && level !== 'warning' && level !== 'info') {\n throw new Error(`Invalid level. Available levels are 'error', 'warning', and 'info'.`)\n }\n\n const maxCustomValidationConcurrency = flags['max-custom-validation-concurrency']\n if (\n maxCustomValidationConcurrency &&\n typeof maxCustomValidationConcurrency !== 'number' &&\n !Number.isInteger(maxCustomValidationConcurrency)\n ) {\n throw new Error(`'--max-custom-validation-concurrency' must be an integer.`)\n }\n\n const clientConfig: Partial<ClientConfig> = {\n ...apiClient({\n requireUser: true,\n requireProject: false, // we'll get this from the workspace\n }).config(),\n // we set this explictly to true because the default client configuration\n // from the CLI comes configured with `useProjectHostname: false` when\n // `requireProject` is set to false\n useProjectHostname: true,\n // we set this explictly to true because we pass in a token via the\n // `clientConfiguration` object and also mock a browser environment in\n // this worker which triggers the browser warning\n ignoreBrowserTokenWarning: true,\n }\n\n let ndjsonFilePath\n if (flags.file) {\n if (typeof flags.file !== 'string') {\n throw new Error(`'--file' must be a string`)\n }\n const filePath = path.resolve(workDir, flags.file)\n\n const stat = await fs.promises.stat(filePath)\n if (!stat.isFile()) {\n throw new Error(`'--file' must point to a valid ndjson file or tarball`)\n }\n\n ndjsonFilePath = filePath\n }\n\n const overallLevel = await validateDocuments({\n workspace: flags.workspace,\n dataset: flags.dataset,\n clientConfig,\n workDir,\n level,\n maxCustomValidationConcurrency,\n ndjsonFilePath,\n reporter: (worker) => {\n const reporter =\n flags.format && flags.format in reporters\n ? reporters[flags.format as keyof typeof reporters]\n : reporters.pretty\n\n return reporter({output, worker, flags})\n },\n })\n\n process.exitCode = overallLevel === 'error' ? 1 : 0\n}\n"],"names":["MessageQueue","constructor","resolver","queue","push","message","value","done","next","length","Promise","resolve","shift","end","isWorkerChannelMessage","type","types","includes","createReceiver","worker","_events","Map","_streams","errors","eventQueue","name","_a","get","has","set","streamQueue","handleMessage","handleError","error","addListener","event","Proxy","target","eventReceiver","race","payload","stream","prop","streamReceiver","dispose","removeListener","terminate","DEFAULT_MAX_CUSTOM_VALIDATION_CONCURRENCY","defaultReporter","_ref","createValidationGenerator","documentId","documentType","markers","revision","level","validation","result","validateDocuments","options","workspace","clientConfig","configPath","dataset","projectId","workDir","process","cwd","reporter","maxCustomValidationConcurrency","ndjsonFilePath","rootPkgPath","sync","__dirname","path","Error","workerPath","join","dirname","Worker","workerData","JSON","parse","stringify","env","isTty","isatty","levelValues","warning","info","count","amount","subject","concat","toLocaleString","substring","percentageFormatter","Intl","NumberFormat","style","minimumFractionDigits","maximumFractionDigits","percent","format","Math","min","secondFormatter","seconds","startTime","endTime","Date","now","summary","_ref2","infos","valid","warnings","arguments","undefined","levelValue","logSymbols","success","documents","filter","Boolean","levelHeaders","chalk","bold","bgRed","black","red","bgYellow","yellow","cyan","link","text","url","underline","maxKeyLength","children","depth","Object","entries","map","_ref3","key","child","max","reduce","compareLevels","a","b","formatTree","node","paddingLength","indent","_ref4","index","isLast","nextIndent","nested","current","first","rest","slice","sort","firstPadding","repeat","elbow","firstBullet","subsequentPadding","firstMessage","subsequentMessages","marker","formatRootErrors","root","hasChildren","firstElbow","firstLine","subsequentElbow","restOfLines","convertToTree","addMarker","pathToString","formatDocumentValidation","_ref5","basePath","studioHost","tree","editLink","encodeURIComponent","documentTypeHeader","bgWhite","header","childErrors","rootErrors","pretty","_ref6","output","flags","workspaceLoadStart","spinner","start","loadedWorkspace","succeed","file","documentCount","loadedDocumentCount","downloadStart","downloadedCount","exportProgress","percentage","totalDocumentsToValidate","exportFinished","referenceIntegrityStart","loadedReferenceIntegrity","validationStart","results","totals","validatedCount","print","localeCompare","overallLevel","ndjson","_ref7","json","_ref8","reporters","validateAction","args","_ref9","apiClient","prompt","extOptions","unattendedMode","yes","y","confirmed","single","default","exitCode","formatter","ListFormat","keys","Number","isInteger","requireUser","requireProject","config","useProjectHostname","ignoreBrowserTokenWarning","filePath","stat","fs","promises","isFile"],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"validateAction-NIrqtyYJ.js","sources":["../../src/_internal/cli/actions/validation/validateDocuments.ts","../../src/_internal/cli/actions/validation/reporters/prettyReporter/util.ts","../../src/_internal/cli/actions/validation/reporters/prettyReporter/formatDocumentValidation.ts","../../src/_internal/cli/actions/validation/reporters/prettyReporter/prettyReporter.ts","../../src/_internal/cli/actions/validation/reporters/ndjsonReporter.ts","../../src/_internal/cli/actions/validation/reporters/jsonReporter.ts","../../src/_internal/cli/actions/validation/reporters/index.ts","../../src/_internal/cli/actions/validation/validateAction.ts"],"sourcesContent":["import path from 'path'\nimport {Worker} from 'worker_threads'\nimport readPkgUp from 'read-pkg-up'\nimport {ClientConfig} from '@sanity/client'\nimport {ValidationMarker} from '@sanity/types'\nimport type {\n ValidateDocumentsWorkerData,\n ValidationWorkerChannel,\n} from '../../threads/validateDocuments'\nimport {createReceiver, WorkerChannelReceiver} from '../../util/workerChannels'\n\nconst DEFAULT_MAX_CUSTOM_VALIDATION_CONCURRENCY = 5\n\nexport interface ValidateDocumentsOptions<TReturn = unknown> {\n level?: 'error' | 'warning' | 'info'\n workspace?: string\n workDir?: string\n configPath?: string\n clientConfig?: Partial<ClientConfig>\n projectId?: string // override\n dataset?: string // override\n ndjsonFilePath?: string\n maxCustomValidationConcurrency?: number\n reporter?: (worker: WorkerChannelReceiver<ValidationWorkerChannel>) => TReturn\n}\n\nexport interface DocumentValidationResult {\n documentId: string\n documentType: string\n revision: string\n level: ValidationMarker['level']\n markers: ValidationMarker[]\n}\n\nconst defaultReporter = ({stream, dispose}: WorkerChannelReceiver<ValidationWorkerChannel>) => {\n async function* createValidationGenerator() {\n for await (const {documentId, documentType, markers, revision, level} of stream.validation()) {\n const result: DocumentValidationResult = {\n documentId,\n documentType,\n revision,\n level,\n markers,\n }\n\n yield result\n }\n\n await dispose()\n }\n\n return createValidationGenerator()\n}\n\nexport function validateDocuments<TReturn>(\n options: ValidateDocumentsOptions<TReturn> &\n Required<Pick<ValidateDocumentsOptions<TReturn>, 'reporter'>>,\n): TReturn\nexport function validateDocuments(\n options: ValidateDocumentsOptions,\n): AsyncIterable<DocumentValidationResult>\nexport function validateDocuments(options: ValidateDocumentsOptions): unknown {\n const {\n workspace,\n clientConfig,\n configPath,\n dataset,\n projectId,\n workDir = process.cwd(),\n reporter = defaultReporter,\n level,\n maxCustomValidationConcurrency,\n ndjsonFilePath,\n } = options\n\n const rootPkgPath = readPkgUp.sync({cwd: __dirname})?.path\n if (!rootPkgPath) {\n throw new Error('Could not find root directory for `sanity` package')\n }\n\n const workerPath = path.join(\n path.dirname(rootPkgPath),\n 'lib',\n '_internal',\n 'cli',\n 'threads',\n 'validateDocuments.js',\n )\n\n const worker = new Worker(workerPath, {\n workerData: {\n workDir,\n // removes props in the config that make this object fail to serialize\n clientConfig: JSON.parse(JSON.stringify(clientConfig)),\n configPath,\n workspace,\n dataset,\n projectId,\n level,\n ndjsonFilePath,\n maxCustomValidationConcurrency:\n maxCustomValidationConcurrency ?? DEFAULT_MAX_CUSTOM_VALIDATION_CONCURRENCY,\n } satisfies ValidateDocumentsWorkerData,\n // eslint-disable-next-line no-process-env\n env: process.env,\n })\n\n return reporter(createReceiver<ValidationWorkerChannel>(worker))\n}\n","import {isatty} from 'tty'\nimport logSymbols from 'log-symbols'\nimport type {ValidationMarker} from '@sanity/types'\n\nexport type Level = ValidationMarker['level']\n\nexport interface DocumentValidationResult {\n revision: string\n documentId: string\n documentType: string\n level: ValidationMarker['level']\n markers: ValidationMarker[]\n}\n\nexport const isTty = isatty(1)\nexport const levelValues = {error: 0, warning: 1, info: 2} as const\n\n/**\n * Generates a formatted string that includes a numerical amount and a subject\n * in plural or singular form. Note: the subject must end in `s`\n */\nexport const count = (amount: number, subject: string): string =>\n `${amount.toLocaleString('en-US')} ${\n amount === 1 ? subject.substring(0, subject.length - 1) : subject\n }`\n\nconst percentageFormatter = new Intl.NumberFormat('en-US', {\n style: 'percent',\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n})\n\n/**\n * Given a decimal, this will return that number formatted as a percentage\n */\nexport const percent = (value: number): string => percentageFormatter.format(Math.min(value, 1))\n\nconst secondFormatter = new Intl.NumberFormat('en-US', {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n})\n\n/**\n * Given a start time in milliseconds, this will output the time elapsed\n * formatted in seconds\n */\nexport const seconds = (startTime: number): string => {\n const endTime = Date.now()\n return `(${secondFormatter.format((endTime - startTime) / 1000)}s)`\n}\n\ninterface ValidationTotals {\n valid: {documents: number}\n errors: {documents: number; markers: number}\n warnings: {documents: number; markers: number}\n infos: {documents: number; markers: number}\n}\n\n/**\n * Outputs summary text given an object of totals. Omits totals depending on the\n * desired validation `level`\n */\nexport const summary = (\n {errors, infos, valid, warnings}: ValidationTotals,\n level: Level = 'warning',\n): string => {\n const levelValue = levelValues[level]\n\n return [\n `${logSymbols.success} Valid: ${count(valid.documents, 'documents')}`,\n `${logSymbols.error} Errors: ${count(errors.documents, 'documents')}, ${count(\n errors.markers,\n 'errors',\n )}`,\n levelValue >= levelValues.warning &&\n `${logSymbols.warning} Warnings: ${count(warnings.documents, 'documents')}, ${count(\n warnings.markers,\n 'warnings',\n )}`,\n levelValue >= levelValues.info &&\n `${logSymbols.info} Info: ${count(infos.documents, 'documents')}, ${count(\n infos.documents,\n 'markers',\n )}`,\n ]\n .filter(Boolean)\n .join('\\n')\n}\n","import chalk from 'chalk'\nimport {ValidationMarker} from '@sanity/types'\nimport logSymbols from 'log-symbols'\nimport {DocumentValidationResult, Level, isTty, levelValues} from './util'\nimport {pathToString} from 'sanity'\n\nexport interface FormatDocumentValidationOptions extends DocumentValidationResult {\n studioHost: string | null\n basePath: string\n}\n\ninterface ValidationTree {\n markers?: Pick<ValidationMarker, 'level' | 'message'>[]\n children?: Record<string, ValidationTree>\n}\n\nconst levelHeaders = {\n error: isTty ? chalk.bold(chalk.bgRed(chalk.black(' ERROR '))) : chalk.red('[ERROR]'),\n warning: isTty ? chalk.bold(chalk.bgYellow(chalk.black(' WARN '))) : chalk.yellow('[WARN]'),\n info: isTty ? chalk.bold(chalk.cyan(chalk.black(' INFO '))) : chalk.cyan('[INFO]'),\n}\n/**\n * Creates a terminal hyperlink. Only outputs a hyperlink if the output is\n * determined to be a TTY\n */\nconst link = (text: string, url: string) =>\n isTty ? `\\u001b]8;;${url}\\u0007${text}\\u001b]8;;\\u0007` : chalk.underline(text)\n\n/**\n * Recursively calculates the max length of all the keys in the given validation\n * tree respecting extra length due to indentation depth. Used to calculate the\n * padding for the rest of the tree.\n */\nconst maxKeyLength = (children: Record<string, ValidationTree> = {}, depth = 0): number => {\n return Object.entries(children)\n .map(([key, child]) =>\n Math.max(key.length + depth * 2, maxKeyLength(child.children, depth + 1)),\n )\n .reduce((max, next) => (next > max ? next : max), 0)\n}\n\n/**\n * For sorting markers\n */\nconst compareLevels = <T extends {level: Level; message: string}>(a: T, b: T) =>\n levelValues[a.level] - levelValues[b.level]\n\n/**\n * Recursively formats a given tree into a printed user-friendly tree structure\n */\nconst formatTree = (\n node: Record<string, ValidationTree> = {},\n paddingLength: number,\n indent = '',\n): string => {\n const entries = Object.entries(node)\n\n return entries\n .map(([key, child], index) => {\n const isLast = index === entries.length - 1\n const nextIndent = `${indent}${isLast ? ' ' : '│ '}`\n const nested = formatTree(child.children, paddingLength, nextIndent)\n\n if (!child.markers?.length) {\n const current = `${indent}${isLast ? '└' : '├'}─ ${key}`\n return [current, nested].filter(Boolean).join('\\n')\n }\n\n const [first, ...rest] = child.markers.slice().sort(compareLevels)\n const firstPadding = '.'.repeat(paddingLength - indent.length - key.length)\n const elbow = isLast ? '└' : '├'\n const firstBullet = logSymbols[first.level]\n const subsequentPadding = ' '.repeat(paddingLength - indent.length + 2)\n\n const firstMessage = `${indent}${elbow}─ ${key} ${firstPadding} ${firstBullet} ${first.message}`\n const subsequentMessages = rest\n .map(\n (marker) =>\n `${nextIndent}${subsequentPadding} ${logSymbols[marker.level]} ${marker.message}`,\n )\n .join('\\n')\n\n const current = [firstMessage, subsequentMessages].filter(Boolean).join('\\n')\n return [current, nested].filter(Boolean).join('\\n')\n })\n .join('\\n')\n}\n\n/**\n * Formats the markers at the root of the validation tree\n */\nconst formatRootErrors = (root: ValidationTree, hasChildren: boolean, paddingLength: number) => {\n if (!root.markers) return ''\n\n const [first, ...rest] = root.markers.slice().sort(compareLevels)\n if (!first) return ''\n\n const firstElbow = hasChildren ? '│ ' : '└─'\n const firstPadding = '.'.repeat(paddingLength - 6)\n const firstLine = `${firstElbow} (root) ${firstPadding} ${logSymbols[first.level]} ${\n first.message\n }`\n const subsequentPadding = ' '.repeat(paddingLength + 2)\n const subsequentElbow = hasChildren ? '│ ' : ' '\n\n const restOfLines = rest\n .map(\n (marker) =>\n `${subsequentElbow}${subsequentPadding} ${logSymbols[marker.level]} ${marker.message}`,\n )\n .join('\\n')\n return [firstLine, restOfLines].filter(Boolean).join('\\n')\n}\n\n/**\n * Converts a set of markers with paths into a tree of markers where the paths\n * are embedded in the tree\n */\nfunction convertToTree(markers: ValidationMarker[]): ValidationTree {\n const root: ValidationTree = {}\n\n // add the markers to the tree\n function addMarker(marker: ValidationMarker, node: ValidationTree = root) {\n // if we've traversed the whole path\n if (!marker.path.length) {\n if (!node.markers) node.markers = [] // ensure markers is defined\n\n // then add the marker to the front\n node.markers.push({level: marker.level, message: marker.message})\n return\n }\n\n const [current, ...rest] = marker.path\n const key = pathToString([current])\n\n // ensure the current node has children and the next node\n if (!node.children) node.children = {}\n if (!(key in node.children)) node.children[key] = {}\n\n addMarker({...marker, path: rest}, node.children[key])\n }\n\n for (const marker of markers) addMarker(marker)\n return root\n}\n\n/**\n * Formats document validation results into a user-friendly tree structure\n */\nexport function formatDocumentValidation({\n basePath,\n documentId,\n documentType,\n level,\n studioHost,\n markers,\n}: FormatDocumentValidationOptions): string {\n const tree = convertToTree(markers)\n const editLink =\n studioHost &&\n `${studioHost}${basePath}/intent/edit/id=${encodeURIComponent(\n documentId,\n )};type=${encodeURIComponent(documentType)}`\n\n const documentTypeHeader = isTty\n ? chalk.bgWhite(chalk.black(` ${documentType} `))\n : `[${documentType}]`\n\n const header = `${levelHeaders[level]} ${documentTypeHeader} ${\n editLink ? link(documentId, editLink) : chalk.underline(documentId)\n }`\n\n const paddingLength = Math.max(maxKeyLength(tree.children) + 2, 30)\n const childErrors = formatTree(tree.children, paddingLength)\n const rootErrors = formatRootErrors(tree, childErrors.length > 0, paddingLength)\n\n return [header, rootErrors, childErrors].filter(Boolean).join('\\n')\n}\n","import type {BuiltInValidationReporter} from '../../validateAction'\nimport {formatDocumentValidation} from './formatDocumentValidation'\nimport {\n DocumentValidationResult,\n Level,\n count,\n levelValues,\n percent,\n seconds,\n summary,\n} from './util'\n\n/**\n * Represents the default stylish/pretty reporter\n */\n// eslint-disable-next-line max-statements\nexport const pretty: BuiltInValidationReporter = async ({output, worker, flags}) => {\n const workspaceLoadStart = Date.now()\n // Report workspace loaded\n const spinner = output\n .spinner(flags.workspace ? `Loading workspace '${flags.workspace}'…` : 'Loading workspace…')\n .start()\n\n const workspace = await worker.event.loadedWorkspace()\n spinner.succeed(\n `Loaded workspace '${workspace.name}' using project '${workspace.projectId}' and dataset '${\n flags.dataset || workspace.dataset\n }' ${seconds(workspaceLoadStart)}`,\n )\n\n if (!flags.file) {\n // Report document count\n spinner.start('Calculating documents to be validated…')\n const {documentCount} = await worker.event.loadedDocumentCount()\n\n // Report export progress\n const downloadStart = Date.now()\n spinner.text = `Downloading ${count(documentCount, 'documents')}…`\n for await (const {downloadedCount} of worker.stream.exportProgress()) {\n const percentage = percent(downloadedCount / documentCount)\n spinner.text = `Downloading ${count(documentCount, 'documents')}… ${percentage}`\n }\n spinner.succeed(`Downloaded ${count(documentCount, 'documents')} ${seconds(downloadStart)}`)\n }\n\n const {totalDocumentsToValidate} = await worker.event.exportFinished()\n\n const referenceIntegrityStart = Date.now()\n spinner.start(`Checking reference existence…`)\n await worker.event.loadedReferenceIntegrity()\n spinner.succeed(`Checked all references ${seconds(referenceIntegrityStart)}`)\n\n // Report validation progress\n const validationStart = Date.now()\n spinner.start(`Validating ${count(totalDocumentsToValidate, 'documents')}…`)\n\n const results: DocumentValidationResult[] = []\n\n const totals = {\n valid: {documents: 0},\n errors: {documents: 0, markers: 0},\n warnings: {documents: 0, markers: 0},\n infos: {documents: 0, markers: 0},\n }\n\n for await (const {validatedCount, ...result} of worker.stream.validation()) {\n const {markers} = result\n\n if (markers.length) {\n results.push(result)\n }\n\n const errors = markers.filter((marker) => marker.level === 'error')\n const warnings = markers.filter((marker) => marker.level === 'warning')\n const infos = markers.filter((marker) => marker.level === 'info')\n\n if (!markers.length) {\n totals.valid.documents += 1\n }\n\n if (errors.length) {\n totals.errors.documents += 1\n totals.errors.markers += errors.length\n }\n\n if (warnings.length) {\n totals.warnings.documents += 1\n totals.warnings.markers += warnings.length\n }\n\n if (infos.length) {\n totals.infos.documents += 1\n totals.infos.markers += infos.length\n }\n\n spinner.text =\n `Validating ${count(totalDocumentsToValidate, 'documents')}…\\n\\n` +\n `Processed ${count(validatedCount, 'documents')} (${percent(\n validatedCount / totalDocumentsToValidate,\n )}):\\n${summary(totals, flags.level)}`\n }\n\n spinner.succeed(\n `Validated ${count(totalDocumentsToValidate, 'documents')} ${seconds(validationStart)}`,\n )\n output.print(`\\nValidation results:\\n${summary(totals, flags.level)}`)\n\n results.sort((a, b) => {\n if (a.level === b.level) return a.documentType.localeCompare(b.documentType)\n return levelValues[a.level] - levelValues[b.level]\n })\n\n let overallLevel: Level = 'info'\n\n for (const result of results) {\n if (result.level === 'error') overallLevel = 'error'\n if (result.level === 'warning' && overallLevel !== 'error') overallLevel = 'warning'\n\n output.print(\n `${formatDocumentValidation({\n basePath: workspace.basePath,\n studioHost: workspace.studioHost,\n ...result,\n })}\\n`,\n )\n }\n\n await worker.dispose()\n\n return overallLevel\n}\n","import type {BuiltInValidationReporter} from '../validateAction'\n\nexport const ndjson: BuiltInValidationReporter = async ({output, worker}) => {\n let overallLevel: 'error' | 'warning' | 'info' = 'info'\n\n for await (const {\n documentId,\n documentType,\n markers,\n revision,\n level,\n } of worker.stream.validation()) {\n if (level === 'error') overallLevel = 'error'\n if (level === 'warning' && overallLevel !== 'error') overallLevel = 'warning'\n\n if (markers.length) {\n output.print(JSON.stringify({documentId, documentType, revision, level, markers}))\n }\n }\n\n await worker.dispose()\n\n return overallLevel\n}\n","import type {ValidationMarker} from '@sanity/types'\nimport type {BuiltInValidationReporter} from '../validateAction'\n\nexport const json: BuiltInValidationReporter = async ({output, worker}) => {\n let overallLevel: 'error' | 'warning' | 'info' = 'info'\n\n const results: Array<{\n documentId: string\n documentType: string\n revision: string\n level: 'error' | 'warning' | 'info'\n markers: ValidationMarker[]\n }> = []\n\n for await (const {\n documentId,\n documentType,\n markers,\n revision,\n level,\n } of worker.stream.validation()) {\n if (level === 'error') overallLevel = 'error'\n if (level === 'warning' && overallLevel !== 'error') overallLevel = 'warning'\n\n results.push({\n documentId,\n documentType,\n revision,\n level,\n markers,\n })\n }\n\n await worker.dispose()\n\n output.print(JSON.stringify(results))\n\n return overallLevel\n}\n","import {pretty} from './prettyReporter'\nimport {ndjson} from './ndjsonReporter'\nimport {json} from './jsonReporter'\n\nexport const reporters = {pretty, ndjson, json}\n","import path from 'path'\nimport fs from 'fs'\nimport type {CliCommandArguments, CliCommandContext, CliOutputter} from '@sanity/cli'\nimport logSymbols from 'log-symbols'\nimport chalk from 'chalk'\nimport {ClientConfig} from '@sanity/client'\nimport type {WorkerChannelReceiver} from '../../util/workerChannels'\nimport type {ValidationWorkerChannel} from '../../threads/validateDocuments'\nimport {validateDocuments} from './validateDocuments'\nimport {reporters} from './reporters'\n\ninterface ValidateFlags {\n workspace?: string\n format?: string\n dataset?: string\n file?: string\n level?: 'error' | 'warning' | 'info'\n 'max-custom-validation-concurrency'?: number\n yes?: boolean\n y?: boolean\n}\n\nexport type BuiltInValidationReporter = (options: {\n output: CliOutputter\n worker: WorkerChannelReceiver<ValidationWorkerChannel>\n flags: ValidateFlags\n}) => Promise<'error' | 'warning' | 'info'>\n\nexport default async function validateAction(\n args: CliCommandArguments<ValidateFlags>,\n {apiClient, workDir, output, prompt}: CliCommandContext,\n): Promise<void> {\n const flags = args.extOptions\n const unattendedMode = Boolean(flags.yes || flags.y)\n\n if (!unattendedMode) {\n output.print(\n `${chalk.yellow(`${logSymbols.warning} Warning:`)} This command ${\n flags.file\n ? 'reads all documents from your input file'\n : 'downloads all documents from your dataset'\n } and processes them through your local schema within a ` +\n `simulated browser environment.\\n`,\n )\n output.print(`Potential pitfalls:\\n`)\n output.print(\n `- Processes all documents locally (excluding assets). Large datasets may require more resources.`,\n )\n output.print(\n `- Executes all custom validation functions. Some functions may need to be refactored for compatibility.`,\n )\n output.print(\n `- Not all standard browser features are available and may cause issues while loading your Studio.`,\n )\n output.print(\n `- Adheres to document permissions. Ensure this account can see all desired documents.`,\n )\n if (flags.file) {\n output.print(\n `- Checks for missing document references against the live dataset if not found in your file.`,\n )\n }\n\n const confirmed = await prompt.single<boolean>({\n type: 'confirm',\n message: `Are you sure you want to continue?`,\n default: true,\n })\n\n if (!confirmed) {\n output.print('User aborted')\n process.exitCode = 1\n return\n }\n }\n\n if (flags.format && !(flags.format in reporters)) {\n const formatter = new Intl.ListFormat('en-US', {\n style: 'long',\n type: 'conjunction',\n })\n throw new Error(\n `Did not recognize format '${flags.format}'. Available formats are ${formatter.format(\n Object.keys(reporters).map((key) => `'${key}'`),\n )}`,\n )\n }\n\n const level = flags.level || 'warning'\n\n if (level !== 'error' && level !== 'warning' && level !== 'info') {\n throw new Error(`Invalid level. Available levels are 'error', 'warning', and 'info'.`)\n }\n\n const maxCustomValidationConcurrency = flags['max-custom-validation-concurrency']\n if (\n maxCustomValidationConcurrency &&\n typeof maxCustomValidationConcurrency !== 'number' &&\n !Number.isInteger(maxCustomValidationConcurrency)\n ) {\n throw new Error(`'--max-custom-validation-concurrency' must be an integer.`)\n }\n\n const clientConfig: Partial<ClientConfig> = {\n ...apiClient({\n requireUser: true,\n requireProject: false, // we'll get this from the workspace\n }).config(),\n // we set this explictly to true because the default client configuration\n // from the CLI comes configured with `useProjectHostname: false` when\n // `requireProject` is set to false\n useProjectHostname: true,\n // we set this explictly to true because we pass in a token via the\n // `clientConfiguration` object and also mock a browser environment in\n // this worker which triggers the browser warning\n ignoreBrowserTokenWarning: true,\n }\n\n let ndjsonFilePath\n if (flags.file) {\n if (typeof flags.file !== 'string') {\n throw new Error(`'--file' must be a string`)\n }\n const filePath = path.resolve(workDir, flags.file)\n\n const stat = await fs.promises.stat(filePath)\n if (!stat.isFile()) {\n throw new Error(`'--file' must point to a valid ndjson file or tarball`)\n }\n\n ndjsonFilePath = filePath\n }\n\n const overallLevel = await validateDocuments({\n workspace: flags.workspace,\n dataset: flags.dataset,\n clientConfig,\n workDir,\n level,\n maxCustomValidationConcurrency,\n ndjsonFilePath,\n reporter: (worker) => {\n const reporter =\n flags.format && flags.format in reporters\n ? reporters[flags.format as keyof typeof reporters]\n : reporters.pretty\n\n return reporter({output, worker, flags})\n },\n })\n\n process.exitCode = overallLevel === 'error' ? 1 : 0\n}\n"],"names":["DEFAULT_MAX_CUSTOM_VALIDATION_CONCURRENCY","defaultReporter","_ref","stream","dispose","createValidationGenerator","documentId","documentType","markers","revision","level","validation","result","validateDocuments","options","_a","workspace","clientConfig","configPath","dataset","projectId","workDir","process","cwd","reporter","maxCustomValidationConcurrency","ndjsonFilePath","rootPkgPath","sync","__dirname","path","Error","workerPath","join","default","dirname","worker","Worker","workerData","JSON","parse","stringify","env","createReceiver","isTty","isatty","levelValues","error","warning","info","count","amount","subject","concat","toLocaleString","substring","length","percentageFormatter","Intl","NumberFormat","style","minimumFractionDigits","maximumFractionDigits","percent","value","format","Math","min","secondFormatter","seconds","startTime","endTime","Date","now","summary","_ref2","errors","infos","valid","warnings","arguments","undefined","levelValue","logSymbols","success","documents","filter","Boolean","levelHeaders","chalk","bold","bgRed","black","red","bgYellow","yellow","cyan","link","text","url","underline","maxKeyLength","children","depth","Object","entries","map","_ref3","key","child","max","reduce","next","compareLevels","a","b","formatTree","node","paddingLength","indent","_ref4","index","isLast","nextIndent","nested","current","first","rest","slice","sort","firstPadding","repeat","elbow","firstBullet","subsequentPadding","firstMessage","message","subsequentMessages","marker","formatRootErrors","root","hasChildren","firstElbow","firstLine","subsequentElbow","restOfLines","convertToTree","addMarker","push","pathToString","formatDocumentValidation","_ref5","basePath","studioHost","tree","editLink","encodeURIComponent","documentTypeHeader","bgWhite","header","childErrors","rootErrors","pretty","_ref6","output","flags","workspaceLoadStart","spinner","start","event","loadedWorkspace","succeed","name","file","documentCount","loadedDocumentCount","downloadStart","downloadedCount","exportProgress","percentage","totalDocumentsToValidate","exportFinished","referenceIntegrityStart","loadedReferenceIntegrity","validationStart","results","totals","validatedCount","print","localeCompare","overallLevel","ndjson","_ref7","json","_ref8","reporters","validateAction","args","_ref9","apiClient","prompt","extOptions","unattendedMode","yes","y","confirmed","single","type","exitCode","formatter","ListFormat","keys","Number","isInteger","requireUser","requireProject","config","useProjectHostname","ignoreBrowserTokenWarning","filePath","resolve","stat","fs","promises","isFile"],"mappings":"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"}
|