sanity 5.2.1-next.2 → 5.3.0-next.10
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-es/extractAction.js +216 -6
- package/lib/_chunks-es/extractAction.js.map +1 -1
- package/lib/_chunks-es/formatSchemaValidation.js +60 -0
- package/lib/_chunks-es/formatSchemaValidation.js.map +1 -0
- package/lib/_chunks-es/package.js +1 -1
- package/lib/_chunks-es/resources2.js +2 -0
- package/lib/_chunks-es/resources2.js.map +1 -1
- package/lib/_chunks-es/validateAction.js +1 -48
- package/lib/_chunks-es/validateAction.js.map +1 -1
- package/lib/_chunks-es/version.js +1 -1
- package/lib/index.js +18 -6
- package/lib/index.js.map +1 -1
- package/package.json +14 -14
|
@@ -1,9 +1,189 @@
|
|
|
1
1
|
import { writeFile } from "node:fs/promises";
|
|
2
|
-
import { dirname, join } from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
2
|
+
import path, { dirname, join } from "node:path";
|
|
3
|
+
import { pathToFileURL, fileURLToPath } from "node:url";
|
|
4
4
|
import { Worker } from "node:worker_threads";
|
|
5
5
|
import readPkgUp from "read-pkg-up";
|
|
6
|
+
import { resolveConfig, SchemaError } from "sanity";
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import Module, { createRequire, register as register$1 } from "node:module";
|
|
9
|
+
import { firstValueFrom } from "rxjs";
|
|
10
|
+
import { ResizeObserver } from "@juggle/resize-observer";
|
|
11
|
+
import { register } from "esbuild-register/dist/node";
|
|
12
|
+
import jsdomGlobal from "jsdom-global";
|
|
13
|
+
import { addHook } from "pirates";
|
|
14
|
+
import resolveFrom from "resolve-from";
|
|
15
|
+
import { getStudioEnvironmentVariables } from "./cli.js";
|
|
6
16
|
import { defineTrace } from "@sanity/telemetry";
|
|
17
|
+
import { formatSchemaValidation } from "./formatSchemaValidation.js";
|
|
18
|
+
function getProxyHandler() {
|
|
19
|
+
const handler = {
|
|
20
|
+
get: (_target, prop) => prop === "__esModule" ? !0 : prop === "default" ? new Proxy({}, handler) : new Proxy({}, handler),
|
|
21
|
+
apply: () => new Proxy({}, handler)
|
|
22
|
+
};
|
|
23
|
+
return new Proxy({}, handler);
|
|
24
|
+
}
|
|
25
|
+
function setupImportErrorHandler() {
|
|
26
|
+
const ModuleConstructor = Module, originalLoad = ModuleConstructor._load;
|
|
27
|
+
return ModuleConstructor._load = function(request, parent, isMain) {
|
|
28
|
+
try {
|
|
29
|
+
return originalLoad.call(this, request, parent, isMain);
|
|
30
|
+
} catch (error) {
|
|
31
|
+
if (request.startsWith("https://themer.sanity.build/api/"))
|
|
32
|
+
return getProxyHandler();
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}, {
|
|
36
|
+
cleanup: () => {
|
|
37
|
+
ModuleConstructor._load = originalLoad;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const require$2 = createRequire(import.meta.url);
|
|
42
|
+
register$1("./mock-browser-env-stub-loader.mjs", pathToFileURL(require$2.resolve("sanity/package.json")));
|
|
43
|
+
const jsdomDefaultHtml = `<!doctype html>
|
|
44
|
+
<html>
|
|
45
|
+
<head><meta charset="utf-8"></head>
|
|
46
|
+
<body></body>
|
|
47
|
+
</html>`;
|
|
48
|
+
function mockBrowserEnvironment(basePath) {
|
|
49
|
+
if (global && global.window && "__mockedBySanity" in global.window)
|
|
50
|
+
return () => {
|
|
51
|
+
};
|
|
52
|
+
const importErrorHandler = setupImportErrorHandler(), btoa = global.btoa, domCleanup = jsdomGlobal(jsdomDefaultHtml, {
|
|
53
|
+
url: "http://localhost:3333/"
|
|
54
|
+
});
|
|
55
|
+
typeof btoa == "function" && (global.btoa = btoa);
|
|
56
|
+
const windowCleanup = () => global.window.close(), globalCleanup = provideFakeGlobals(basePath), cleanupFileLoader = addHook((code, filename) => `module.exports = ${JSON.stringify(filename)}`, {
|
|
57
|
+
ignoreNodeModules: !1,
|
|
58
|
+
exts: getFileExtensions()
|
|
59
|
+
}), {
|
|
60
|
+
unregister: unregisterESBuild
|
|
61
|
+
} = register({
|
|
62
|
+
target: "node18",
|
|
63
|
+
supported: {
|
|
64
|
+
"dynamic-import": !0
|
|
65
|
+
},
|
|
66
|
+
format: "cjs",
|
|
67
|
+
extensions: [".js", ".jsx", ".ts", ".tsx", ".mjs"],
|
|
68
|
+
jsx: "automatic",
|
|
69
|
+
define: {
|
|
70
|
+
// define the `process.env` global
|
|
71
|
+
...getStudioEnvironmentVariables({
|
|
72
|
+
prefix: "process.env.",
|
|
73
|
+
jsonEncode: !0
|
|
74
|
+
}),
|
|
75
|
+
// define the `import.meta.env` global
|
|
76
|
+
...getStudioEnvironmentVariables({
|
|
77
|
+
prefix: "import.meta.env.",
|
|
78
|
+
jsonEncode: !0
|
|
79
|
+
}),
|
|
80
|
+
// define the `import.meta.hot` global, so we don't get `"import.meta" is not available with the "cjs" output format and will be empty` warnings
|
|
81
|
+
"import.meta.hot": "false"
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return function() {
|
|
85
|
+
unregisterESBuild(), cleanupFileLoader(), globalCleanup(), windowCleanup(), domCleanup(), importErrorHandler.cleanup();
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const getFakeGlobals = (basePath) => ({
|
|
89
|
+
__mockedBySanity: !0,
|
|
90
|
+
requestAnimationFrame: setImmediate,
|
|
91
|
+
cancelAnimationFrame: clearImmediate,
|
|
92
|
+
requestIdleCallback: setImmediate,
|
|
93
|
+
cancelIdleCallback: clearImmediate,
|
|
94
|
+
ace: tryGetAceGlobal(basePath),
|
|
95
|
+
InputEvent: global.window?.InputEvent,
|
|
96
|
+
customElements: global.window?.customElements,
|
|
97
|
+
ResizeObserver: global.window?.ResizeObserver || ResizeObserver,
|
|
98
|
+
matchMedia: global.window?.matchMedia || (() => ({
|
|
99
|
+
matches: !1,
|
|
100
|
+
media: "",
|
|
101
|
+
onchange: null
|
|
102
|
+
}))
|
|
103
|
+
}), getFakeDocumentProps = () => ({
|
|
104
|
+
execCommand: function(_commandName, _showDefaultUI, _valueArgument) {
|
|
105
|
+
return !1;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
function provideFakeGlobals(basePath) {
|
|
109
|
+
const globalEnv = global, globalWindow = global.window, globalDocument = global.document || document || {}, fakeGlobals = getFakeGlobals(basePath), fakeDocumentProps = getFakeDocumentProps(), stubbedGlobalKeys = [], stubbedWindowKeys = [], stubbedDocumentKeys = [];
|
|
110
|
+
for (const [rawKey, value] of Object.entries(fakeGlobals)) {
|
|
111
|
+
if (typeof value > "u")
|
|
112
|
+
continue;
|
|
113
|
+
const key = rawKey;
|
|
114
|
+
key in globalEnv || (globalEnv[key] = fakeGlobals[key], stubbedGlobalKeys.push(key)), key in global.window || (globalWindow[key] = fakeGlobals[key], stubbedWindowKeys.push(key));
|
|
115
|
+
}
|
|
116
|
+
for (const [rawKey, value] of Object.entries(fakeDocumentProps)) {
|
|
117
|
+
if (typeof value > "u")
|
|
118
|
+
continue;
|
|
119
|
+
const key = rawKey;
|
|
120
|
+
key in globalDocument || (globalDocument[key] = fakeDocumentProps[key], stubbedDocumentKeys.push(key));
|
|
121
|
+
}
|
|
122
|
+
return () => {
|
|
123
|
+
stubbedGlobalKeys.forEach((key) => {
|
|
124
|
+
delete globalEnv[key];
|
|
125
|
+
}), stubbedWindowKeys.forEach((key) => {
|
|
126
|
+
delete globalWindow[key];
|
|
127
|
+
}), stubbedDocumentKeys.forEach((key) => {
|
|
128
|
+
delete globalDocument[key];
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function tryGetAceGlobal(basePath) {
|
|
133
|
+
const acePath = resolveFrom.silent(basePath, "ace-builds");
|
|
134
|
+
if (acePath)
|
|
135
|
+
try {
|
|
136
|
+
return require$2(acePath);
|
|
137
|
+
} catch {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function getFileExtensions() {
|
|
142
|
+
return [".css", ".eot", ".gif", ".jpeg", ".jpg", ".otf", ".png", ".sass", ".scss", ".svg", ".ttf", ".webp", ".woff", ".woff2"];
|
|
143
|
+
}
|
|
144
|
+
const require$1 = createRequire(import.meta.url), candidates = ["sanity.config.js", "sanity.config.jsx", "sanity.config.ts", "sanity.config.tsx"];
|
|
145
|
+
function getStudioConfig({
|
|
146
|
+
basePath,
|
|
147
|
+
configPath: cfgPath
|
|
148
|
+
}) {
|
|
149
|
+
let cleanup;
|
|
150
|
+
try {
|
|
151
|
+
cleanup = mockBrowserEnvironment(basePath);
|
|
152
|
+
let configPath = cfgPath;
|
|
153
|
+
if (configPath && !fs.existsSync(configPath))
|
|
154
|
+
throw new Error(`Failed to find config at "${cfgPath}"`);
|
|
155
|
+
if (configPath || (configPath = candidates.map((candidate) => path.join(basePath, candidate)).find((candidate) => fs.existsSync(candidate))), !configPath)
|
|
156
|
+
throw new Error(`Failed to resolve sanity.config.(js|ts) for base path "${basePath}"`);
|
|
157
|
+
let config;
|
|
158
|
+
try {
|
|
159
|
+
const mod = require$1(configPath);
|
|
160
|
+
config = mod.__esModule && mod.default ? mod.default : mod;
|
|
161
|
+
} catch (err) {
|
|
162
|
+
throw new Error(`Failed to load configuration file "${configPath}"`, {
|
|
163
|
+
cause: err
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
if (!config) throw new Error("Configuration did not export expected config shape");
|
|
167
|
+
return Array.isArray(config) ? config : [{
|
|
168
|
+
...config,
|
|
169
|
+
name: config.name || "default",
|
|
170
|
+
basePath: config.basePath || "/"
|
|
171
|
+
}];
|
|
172
|
+
} finally {
|
|
173
|
+
cleanup?.();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async function getStudioWorkspaces(options) {
|
|
177
|
+
let cleanup;
|
|
178
|
+
try {
|
|
179
|
+
cleanup = mockBrowserEnvironment(options.basePath);
|
|
180
|
+
const config = getStudioConfig(options), workspaces = await firstValueFrom(resolveConfig(config));
|
|
181
|
+
if (!workspaces) throw new Error("Failed to resolve configuration");
|
|
182
|
+
return workspaces;
|
|
183
|
+
} finally {
|
|
184
|
+
cleanup?.();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
7
187
|
const SchemaExtractedTrace = defineTrace({
|
|
8
188
|
name: "Schema Extracted",
|
|
9
189
|
version: 0,
|
|
@@ -43,13 +223,43 @@ async function extractAction(args, {
|
|
|
43
223
|
enforceRequiredFields,
|
|
44
224
|
schemaFormat: formatFlag
|
|
45
225
|
});
|
|
46
|
-
const
|
|
47
|
-
spinner.text = `Writing schema to ${
|
|
48
|
-
`), trace.complete(), spinner.succeed(enforceRequiredFields ? `Extracted schema to ${
|
|
226
|
+
const path2 = flags.path || join(process.cwd(), "schema.json");
|
|
227
|
+
spinner.text = `Writing schema to ${path2}`, await writeFile(path2, `${JSON.stringify(schema, null, 2)}
|
|
228
|
+
`), trace.complete(), spinner.succeed(enforceRequiredFields ? `Extracted schema to ${path2} with enforced required fields` : `Extracted schema to ${path2}`);
|
|
49
229
|
} catch (err) {
|
|
50
|
-
|
|
230
|
+
if (trace.error(err), spinner.fail(enforceRequiredFields ? "Failed to extract schema, with enforced required fields" : "Failed to extract schema"), isSchemaError(err))
|
|
231
|
+
try {
|
|
232
|
+
await getStudioWorkspaces({
|
|
233
|
+
basePath: workDir
|
|
234
|
+
});
|
|
235
|
+
} catch (innerErr) {
|
|
236
|
+
const validation = extractValidationFromCoreSchemaError(innerErr);
|
|
237
|
+
throw validation && validation.length > 0 && (output.print(""), output.print(formatSchemaValidation(validation))), err;
|
|
238
|
+
}
|
|
239
|
+
throw err;
|
|
51
240
|
}
|
|
52
241
|
}
|
|
242
|
+
function isValidationProblemGroup(item) {
|
|
243
|
+
if (typeof item != "object" || item === null)
|
|
244
|
+
return !1;
|
|
245
|
+
const group = item;
|
|
246
|
+
return Array.isArray(group.path) && Array.isArray(group.problems);
|
|
247
|
+
}
|
|
248
|
+
function extractValidationFromCoreSchemaError(error) {
|
|
249
|
+
if (!(error instanceof SchemaError))
|
|
250
|
+
return null;
|
|
251
|
+
const schema = error.schema;
|
|
252
|
+
if (!schema || typeof schema != "object")
|
|
253
|
+
return null;
|
|
254
|
+
const validation = schema._validation;
|
|
255
|
+
return !Array.isArray(validation) || !validation.every(isValidationProblemGroup) ? null : validation;
|
|
256
|
+
}
|
|
257
|
+
function isSchemaError(err) {
|
|
258
|
+
if (typeof err != "object" || err === null)
|
|
259
|
+
return !1;
|
|
260
|
+
const errorLike = err, hasSchemaErrorName = errorLike.name === "SchemaError", hasSchemaErrorMessage = errorLike.message === "SchemaError";
|
|
261
|
+
return hasSchemaErrorName || hasSchemaErrorMessage;
|
|
262
|
+
}
|
|
53
263
|
export {
|
|
54
264
|
extractAction as default
|
|
55
265
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractAction.js","sources":["../../src/_internal/cli/actions/schema/extractSchema.telemetry.ts","../../src/_internal/cli/actions/schema/extractAction.ts"],"sourcesContent":["import {defineTrace} from '@sanity/telemetry'\n\ninterface SchemaExtractedTraceAttrubutes {\n schemaAllTypesCount: number\n schemaDocumentTypesCount: number\n schemaTypesCount: number\n\n enforceRequiredFields: boolean\n schemaFormat: string\n}\n\nexport const SchemaExtractedTrace = defineTrace<SchemaExtractedTraceAttrubutes>({\n name: 'Schema Extracted',\n version: 0,\n description: 'Trace emitted when extracting schema',\n})\n","import {writeFile} from 'node:fs/promises'\nimport {dirname, join} from 'node:path'\nimport {fileURLToPath} from 'node:url'\nimport {Worker} from 'node:worker_threads'\n\nimport {type CliCommandArguments, type CliCommandContext} from '@sanity/cli'\nimport readPkgUp from 'read-pkg-up'\n\nimport {\n type ExtractSchemaWorkerData,\n type ExtractSchemaWorkerResult,\n} from '../../threads/extractSchema'\nimport {SchemaExtractedTrace} from './extractSchema.telemetry'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\ninterface ExtractFlags {\n 'workspace'?: string\n 'path'?: string\n 'enforce-required-fields'?: boolean\n 'format'?: 'groq-type-nodes' | string\n}\n\nexport type SchemaValidationFormatter = (result: ExtractSchemaWorkerResult) => string\n\nexport default async function extractAction(\n args: CliCommandArguments<ExtractFlags>,\n {workDir, output, telemetry}: CliCommandContext,\n): Promise<void> {\n const flags = args.extOptions\n const formatFlag = flags.format || 'groq-type-nodes'\n const enforceRequiredFields = flags['enforce-required-fields'] || false\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 = join(\n dirname(rootPkgPath),\n 'lib',\n '_internal',\n 'cli',\n 'threads',\n 'extractSchema.cjs',\n )\n\n const spinner = output\n .spinner({})\n .start(\n enforceRequiredFields\n ? 'Extracting schema, with enforced required fields'\n : 'Extracting schema',\n )\n\n const trace = telemetry.trace(SchemaExtractedTrace)\n trace.start()\n\n const worker = new Worker(workerPath, {\n workerData: {\n workDir,\n workspaceName: flags.workspace,\n enforceRequiredFields,\n format: formatFlag,\n } satisfies ExtractSchemaWorkerData,\n env: process.env,\n })\n\n try {\n const {schema} = await new Promise<ExtractSchemaWorkerResult>((resolve, reject) => {\n worker.addListener('message', resolve)\n worker.addListener('error', reject)\n })\n\n trace.log({\n schemaAllTypesCount: schema.length,\n schemaDocumentTypesCount: schema.filter((type) => type.type === 'document').length,\n schemaTypesCount: schema.filter((type) => type.type === 'type').length,\n enforceRequiredFields,\n schemaFormat: formatFlag,\n })\n\n const path = flags.path || join(process.cwd(), 'schema.json')\n\n spinner.text = `Writing schema to ${path}`\n\n await writeFile(path, `${JSON.stringify(schema, null, 2)}\\n`)\n\n trace.complete()\n\n spinner.succeed(\n enforceRequiredFields\n ? `Extracted schema to ${path} with enforced required fields`\n : `Extracted schema to ${path}`,\n )\n } catch (err) {\n trace.error(err)\n spinner.fail(\n enforceRequiredFields\n ? 'Failed to extract schema, with enforced required fields'\n : 'Failed to extract schema',\n )\n throw err\n }\n}\n"],"names":["SchemaExtractedTrace","defineTrace","name","version","description","__dirname","dirname","fileURLToPath","import","url","extractAction","args","workDir","output","telemetry","flags","extOptions","formatFlag","format","enforceRequiredFields","rootPkgPath","readPkgUp","sync","cwd","path","Error","workerPath","join","spinner","start","trace","worker","Worker","workerData","workspaceName","workspace","env","process","schema","Promise","resolve","reject","addListener","log","schemaAllTypesCount","length","schemaDocumentTypesCount","filter","type","schemaTypesCount","schemaFormat","text","writeFile","JSON","stringify","complete","succeed","err","error","fail"],"mappings":";;;;;;AAWO,MAAMA,uBAAuBC,YAA4C;AAAA,EAC9EC,MAAM;AAAA,EACNC,SAAS;AAAA,EACTC,aAAa;AACf,CAAC,GCDKC,cAAYC,QAAQC,cAAcC,YAAYC,GAAG,CAAC;AAWxD,eAA8BC,cAC5BC,MACA;AAAA,EAACC;AAAAA,EAASC;AAAAA,EAAQC;AAA4B,GAC/B;AACf,QAAMC,QAAQJ,KAAKK,YACbC,aAAaF,MAAMG,UAAU,mBAC7BC,wBAAwBJ,MAAM,yBAAyB,KAAK,IAE5DK,cAAcC,UAAUC,KAAK;AAAA,IAACC,KAAKlB;AAAAA,EAAAA,CAAU,GAAGmB;AACtD,MAAI,CAACJ;AACH,UAAM,IAAIK,MAAM,oDAAoD;AAGtE,QAAMC,aAAaC,KACjBrB,QAAQc,WAAW,GACnB,OACA,aACA,OACA,WACA,mBACF,GAEMQ,UAAUf,OACbe,QAAQ,CAAA,CAAE,EACVC,MACCV,wBACI,qDACA,mBACN,GAEIW,QAAQhB,UAAUgB,MAAM9B,oBAAoB;AAClD8B,QAAMD,MAAAA;AAEN,QAAME,SAAS,IAAIC,OAAON,YAAY;AAAA,IACpCO,YAAY;AAAA,MACVrB;AAAAA,MACAsB,eAAenB,MAAMoB;AAAAA,MACrBhB;AAAAA,MACAD,QAAQD;AAAAA,IAAAA;AAAAA,IAEVmB,KAAKC,QAAQD;AAAAA,EAAAA,CACd;AAED,MAAI;AACF,UAAM;AAAA,MAACE;AAAAA,IAAAA,IAAU,MAAM,IAAIC,QAAmC,CAACC,SAASC,WAAW;AACjFV,aAAOW,YAAY,WAAWF,OAAO,GACrCT,OAAOW,YAAY,SAASD,MAAM;AAAA,IACpC,CAAC;AAEDX,UAAMa,IAAI;AAAA,MACRC,qBAAqBN,OAAOO;AAAAA,MAC5BC,0BAA0BR,OAAOS,OAAQC,UAASA,KAAKA,SAAS,UAAU,EAAEH;AAAAA,MAC5EI,kBAAkBX,OAAOS,OAAQC,UAASA,KAAKA,SAAS,MAAM,EAAEH;AAAAA,MAChE1B;AAAAA,MACA+B,cAAcjC;AAAAA,IAAAA,CACf;AAED,UAAMO,OAAOT,MAAMS,QAAQG,KAAKU,QAAQd,IAAAA,GAAO,aAAa;AAE5DK,YAAQuB,OAAO,qBAAqB3B,IAAI,IAExC,MAAM4B,UAAU5B,MAAM,GAAG6B,KAAKC,UAAUhB,QAAQ,MAAM,CAAC,CAAC;AAAA,CAAI,GAE5DR,MAAMyB,SAAAA,GAEN3B,QAAQ4B,QACNrC,wBACI,uBAAuBK,IAAI,mCAC3B,uBAAuBA,IAAI,EACjC;AAAA,EACF,SAASiC,KAAK;AACZ3B,UAAAA,MAAM4B,MAAMD,GAAG,GACf7B,QAAQ+B,KACNxC,wBACI,4DACA,0BACN,GACMsC;AAAAA,EACR;AACF;"}
|
|
1
|
+
{"version":3,"file":"extractAction.js","sources":["../../src/_internal/cli/util/importErrorHandler.ts","../../src/_internal/cli/util/mockBrowserEnvironment.ts","../../src/_internal/cli/util/getStudioWorkspaces.ts","../../src/_internal/cli/actions/schema/extractSchema.telemetry.ts","../../src/_internal/cli/actions/schema/extractAction.ts"],"sourcesContent":["import Module from 'node:module'\n\nexport interface ImportErrorHandlerResult {\n cleanup: () => void\n}\n\n// Module._load is an internal Node.js API not exposed in types\ninterface ModuleConstructor {\n _load(request: string, parent: Module | undefined, isMain: boolean): any\n}\n\n/**\n * Return safe empty module with Proxy for deep property access. This ensures any property\n * access or function call returns a safe value\n */\nfunction getProxyHandler() {\n const handler: ProxyHandler<object> = {\n get: (_target, prop) => {\n if (prop === '__esModule') return true\n if (prop === 'default') return new Proxy({}, handler)\n return new Proxy({}, handler)\n },\n apply: () => new Proxy({}, handler),\n }\n return new Proxy({}, handler)\n}\n\n/**\n * Sets up a Module._load wrapper to silently ignore imports from https://themer.sanity.build\n * This allows users to use themer URL imports in their config without breaking CLI commands.\n *\n * @returns Handler result with cleanup function\n * @internal\n */\nexport function setupImportErrorHandler(): ImportErrorHandlerResult {\n // Store original Module._load\n const ModuleConstructor = Module as unknown as ModuleConstructor\n const originalLoad = ModuleConstructor._load\n\n // Override Module._load to catch and handle themer.sanity.build imports\n ModuleConstructor._load = function (\n request: string,\n parent: Module | undefined,\n isMain: boolean,\n ) {\n try {\n return originalLoad.call(this, request, parent, isMain)\n } catch (error) {\n // Check if this is a themer.sanity.build URL import\n if (request.startsWith('https://themer.sanity.build/api/')) {\n // Return a safe proxy object that can be used in place of the theme\n return getProxyHandler()\n }\n\n // Re-throw all other errors\n throw error\n }\n }\n\n return {\n cleanup: () => {\n ModuleConstructor._load = originalLoad\n },\n }\n}\n","import {createRequire, register} from 'node:module'\nimport {pathToFileURL} from 'node:url'\n\nimport {ResizeObserver} from '@juggle/resize-observer'\nimport {register as registerESBuild} from 'esbuild-register/dist/node'\nimport jsdomGlobal from 'jsdom-global'\nimport {addHook} from 'pirates'\nimport resolveFrom from 'resolve-from'\n\nimport {getStudioEnvironmentVariables} from '../server/getStudioEnvironmentVariables'\nimport {setupImportErrorHandler} from './importErrorHandler'\n\nconst require = createRequire(import.meta.url)\n\n// Handle require(esm) cases that breaks free from esbuild-register+pirates\nregister(\n './mock-browser-env-stub-loader.mjs',\n pathToFileURL(require.resolve('sanity/package.json')),\n)\n\nconst jsdomDefaultHtml = `<!doctype html>\n<html>\n <head><meta charset=\"utf-8\"></head>\n <body></body>\n</html>`\n\nexport function mockBrowserEnvironment(basePath: string): () => void {\n // Guard against double-registering\n if (global && global.window && '__mockedBySanity' in global.window) {\n return () => {\n /* intentional noop */\n }\n }\n\n // Set up import error handler before esbuild-register to silently ignore themer.sanity.build URLs\n const importErrorHandler = setupImportErrorHandler()\n\n const btoa = global.btoa\n const domCleanup = jsdomGlobal(jsdomDefaultHtml, {url: 'http://localhost:3333/'})\n\n // Don't use jsdom's btoa as it's using the deprecatd `abab` package.\n if (typeof btoa === 'function') global.btoa = btoa\n\n const windowCleanup = () => global.window.close()\n const globalCleanup = provideFakeGlobals(basePath)\n const cleanupFileLoader = addHook(\n (code, filename) => `module.exports = ${JSON.stringify(filename)}`,\n {\n ignoreNodeModules: false,\n exts: getFileExtensions(),\n },\n )\n\n const {unregister: unregisterESBuild} = registerESBuild({\n target: 'node18',\n supported: {'dynamic-import': true},\n format: 'cjs',\n extensions: ['.js', '.jsx', '.ts', '.tsx', '.mjs'],\n jsx: 'automatic',\n define: {\n // define the `process.env` global\n ...getStudioEnvironmentVariables({prefix: 'process.env.', jsonEncode: true}),\n // define the `import.meta.env` global\n ...getStudioEnvironmentVariables({prefix: 'import.meta.env.', jsonEncode: true}),\n // define the `import.meta.hot` global, so we don't get `\"import.meta\" is not available with the \"cjs\" output format and will be empty` warnings\n 'import.meta.hot': 'false',\n },\n })\n\n return function cleanupBrowserEnvironment() {\n unregisterESBuild()\n cleanupFileLoader()\n globalCleanup()\n windowCleanup()\n domCleanup()\n importErrorHandler.cleanup()\n }\n}\n\nconst getFakeGlobals = (basePath: string) => ({\n __mockedBySanity: true,\n requestAnimationFrame: setImmediate,\n cancelAnimationFrame: clearImmediate,\n requestIdleCallback: setImmediate,\n cancelIdleCallback: clearImmediate,\n ace: tryGetAceGlobal(basePath),\n InputEvent: global.window?.InputEvent,\n customElements: global.window?.customElements,\n ResizeObserver: global.window?.ResizeObserver || ResizeObserver,\n matchMedia:\n global.window?.matchMedia ||\n (() => ({\n matches: false,\n media: '',\n onchange: null,\n })),\n})\n\nconst getFakeDocumentProps = () => ({\n execCommand: function execCommand(\n // Provide the right arity for the function, even if unused\n _commandName: string,\n _showDefaultUI: boolean,\n _valueArgument: unknown,\n ) {\n // Return false to indicate \"unsupported\"\n return false\n },\n})\n\nfunction provideFakeGlobals(basePath: string): () => void {\n const globalEnv = global as any as Record<string, unknown>\n const globalWindow = global.window as Record<string, any>\n const globalDocument = (global.document || document || {}) as Record<string, any>\n\n const fakeGlobals = getFakeGlobals(basePath)\n const fakeDocumentProps = getFakeDocumentProps()\n\n const stubbedGlobalKeys: string[] = []\n const stubbedWindowKeys: string[] = []\n const stubbedDocumentKeys: string[] = []\n\n for (const [rawKey, value] of Object.entries(fakeGlobals)) {\n if (typeof value === 'undefined') {\n continue\n }\n\n const key = rawKey as keyof typeof fakeGlobals\n\n if (!(key in globalEnv)) {\n globalEnv[key] = fakeGlobals[key]\n stubbedGlobalKeys.push(key)\n }\n\n if (!(key in global.window)) {\n globalWindow[key] = fakeGlobals[key]\n stubbedWindowKeys.push(key)\n }\n }\n\n for (const [rawKey, value] of Object.entries(fakeDocumentProps)) {\n if (typeof value === 'undefined') {\n continue\n }\n\n const key = rawKey as keyof typeof fakeDocumentProps\n if (!(key in globalDocument)) {\n globalDocument[key] = fakeDocumentProps[key]\n stubbedDocumentKeys.push(key)\n }\n }\n\n return () => {\n stubbedGlobalKeys.forEach((key) => {\n delete globalEnv[key]\n })\n\n stubbedWindowKeys.forEach((key) => {\n delete globalWindow[key]\n })\n\n stubbedDocumentKeys.forEach((key) => {\n delete globalDocument[key]\n })\n }\n}\n\nfunction tryGetAceGlobal(basePath: string) {\n // Work around an issue where using the @sanity/code-input plugin would crash\n // due to `ace` not being defined on the global due to odd bundling stategy.\n const acePath = resolveFrom.silent(basePath, 'ace-builds')\n if (!acePath) {\n return undefined\n }\n\n try {\n // eslint-disable-next-line import/no-dynamic-require\n return require(acePath)\n } catch (err) {\n return undefined\n }\n}\n\nfunction getFileExtensions() {\n return [\n '.css',\n '.eot',\n '.gif',\n '.jpeg',\n '.jpg',\n '.otf',\n '.png',\n '.sass',\n '.scss',\n '.svg',\n '.ttf',\n '.webp',\n '.woff',\n '.woff2',\n ]\n}\n","import fs from 'node:fs'\nimport {createRequire} from 'node:module'\nimport path from 'node:path'\n\nimport {firstValueFrom} from 'rxjs'\nimport {type Config, resolveConfig, type Workspace, type WorkspaceOptions} from 'sanity'\n\nimport {mockBrowserEnvironment} from './mockBrowserEnvironment'\n\nconst require = createRequire(import.meta.url)\n\nconst candidates = [\n 'sanity.config.js',\n 'sanity.config.jsx',\n 'sanity.config.ts',\n 'sanity.config.tsx',\n]\n\ninterface GetStudioWorkspacesOptions {\n configPath?: string\n basePath: string\n}\n\n/**\n * Note: Don't run this on the main thread, use it a forked process\n */\nexport function getStudioConfig({\n basePath,\n configPath: cfgPath,\n}: GetStudioWorkspacesOptions): WorkspaceOptions[] {\n let cleanup\n try {\n cleanup = mockBrowserEnvironment(basePath)\n\n let configPath = cfgPath\n if (configPath && !fs.existsSync(configPath)) {\n throw new Error(`Failed to find config at \"${cfgPath}\"`)\n } else if (!configPath) {\n configPath = candidates\n .map((candidate) => path.join(basePath, candidate))\n .find((candidate) => fs.existsSync(candidate))\n }\n\n if (!configPath) {\n throw new Error(`Failed to resolve sanity.config.(js|ts) for base path \"${basePath}\"`)\n }\n\n let config: Config | undefined\n try {\n // eslint-disable-next-line import/no-dynamic-require\n const mod = require(configPath)\n config = mod.__esModule && mod.default ? mod.default : mod\n } catch (err) {\n throw new Error(`Failed to load configuration file \"${configPath}\"`, {\n cause: err,\n })\n }\n\n if (!config) throw new Error('Configuration did not export expected config shape')\n const normalized = Array.isArray(config)\n ? config\n : [{...config, name: config.name || 'default', basePath: config.basePath || '/'}]\n\n return normalized\n } finally {\n cleanup?.()\n }\n}\n\n/**\n * Note: Don't run this on the main thread, use it a forked process\n */\nexport async function getStudioWorkspaces(\n options: GetStudioWorkspacesOptions,\n): Promise<Workspace[]> {\n let cleanup\n\n try {\n cleanup = mockBrowserEnvironment(options.basePath)\n const config = getStudioConfig(options)\n const workspaces = await firstValueFrom(resolveConfig(config))\n if (!workspaces) throw new Error('Failed to resolve configuration')\n return workspaces\n } finally {\n cleanup?.()\n }\n}\n","import {defineTrace} from '@sanity/telemetry'\n\ninterface SchemaExtractedTraceAttrubutes {\n schemaAllTypesCount: number\n schemaDocumentTypesCount: number\n schemaTypesCount: number\n\n enforceRequiredFields: boolean\n schemaFormat: string\n}\n\nexport const SchemaExtractedTrace = defineTrace<SchemaExtractedTraceAttrubutes>({\n name: 'Schema Extracted',\n version: 0,\n description: 'Trace emitted when extracting schema',\n})\n","import {writeFile} from 'node:fs/promises'\nimport {dirname, join} from 'node:path'\nimport {fileURLToPath} from 'node:url'\nimport {Worker} from 'node:worker_threads'\n\nimport {type CliCommandArguments, type CliCommandContext} from '@sanity/cli'\nimport {type SchemaValidationProblemGroup} from '@sanity/types'\nimport readPkgUp from 'read-pkg-up'\nimport {SchemaError as CoreSchemaError} from 'sanity'\n\nimport {\n type ExtractSchemaWorkerData,\n type ExtractSchemaWorkerResult,\n} from '../../threads/extractSchema'\nimport {getStudioWorkspaces} from '../../util/getStudioWorkspaces'\nimport {SchemaExtractedTrace} from './extractSchema.telemetry'\nimport {formatSchemaValidation} from './formatSchemaValidation'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\ninterface ExtractFlags {\n 'workspace'?: string\n 'path'?: string\n 'enforce-required-fields'?: boolean\n 'format'?: 'groq-type-nodes' | string\n}\n\nexport type SchemaValidationFormatter = (result: ExtractSchemaWorkerResult) => string\n\nexport default async function extractAction(\n args: CliCommandArguments<ExtractFlags>,\n {workDir, output, telemetry}: CliCommandContext,\n): Promise<void> {\n const flags = args.extOptions\n const formatFlag = flags.format || 'groq-type-nodes'\n const enforceRequiredFields = flags['enforce-required-fields'] || false\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 = join(\n dirname(rootPkgPath),\n 'lib',\n '_internal',\n 'cli',\n 'threads',\n 'extractSchema.cjs',\n )\n\n const spinner = output\n .spinner({})\n .start(\n enforceRequiredFields\n ? 'Extracting schema, with enforced required fields'\n : 'Extracting schema',\n )\n\n const trace = telemetry.trace(SchemaExtractedTrace)\n trace.start()\n\n const worker = new Worker(workerPath, {\n workerData: {\n workDir,\n workspaceName: flags.workspace,\n enforceRequiredFields,\n format: formatFlag,\n } satisfies ExtractSchemaWorkerData,\n env: process.env,\n })\n\n try {\n const {schema} = await new Promise<ExtractSchemaWorkerResult>((resolve, reject) => {\n worker.addListener('message', resolve)\n worker.addListener('error', reject)\n })\n\n trace.log({\n schemaAllTypesCount: schema.length,\n schemaDocumentTypesCount: schema.filter((type) => type.type === 'document').length,\n schemaTypesCount: schema.filter((type) => type.type === 'type').length,\n enforceRequiredFields,\n schemaFormat: formatFlag,\n })\n\n const path = flags.path || join(process.cwd(), 'schema.json')\n\n spinner.text = `Writing schema to ${path}`\n\n await writeFile(path, `${JSON.stringify(schema, null, 2)}\\n`)\n\n trace.complete()\n\n spinner.succeed(\n enforceRequiredFields\n ? `Extracted schema to ${path} with enforced required fields`\n : `Extracted schema to ${path}`,\n )\n } catch (err) {\n trace.error(err)\n spinner.fail(\n enforceRequiredFields\n ? 'Failed to extract schema, with enforced required fields'\n : 'Failed to extract schema',\n )\n\n if (isSchemaError(err)) {\n try {\n // Re-resolve config in-process to surface validation details\n await getStudioWorkspaces({basePath: workDir})\n } catch (innerErr) {\n const validation = extractValidationFromCoreSchemaError(innerErr)\n if (validation && validation.length > 0) {\n output.print('')\n output.print(formatSchemaValidation(validation))\n }\n throw err\n }\n }\n throw err\n }\n}\n\n/**\n * Type guard to check if an item conforms to the SchemaValidationProblemGroup shape.\n */\nfunction isValidationProblemGroup(item: unknown): item is SchemaValidationProblemGroup {\n if (typeof item !== 'object' || item === null) {\n return false\n }\n const group = item as Record<string, unknown>\n return Array.isArray(group.path) && Array.isArray(group.problems)\n}\n\n/**\n * Extracts the `_validation` array from a CoreSchemaError's internal schema object.\n *\n * CoreSchemaError stores the compiled schema (which includes validation results) on\n * `error.schema._validation`. This function safely navigates that structure and validates\n * it conforms to the expected `SchemaValidationProblemGroup[]` shape before returning.\n */\nfunction extractValidationFromCoreSchemaError(\n error: unknown,\n): SchemaValidationProblemGroup[] | null {\n if (!(error instanceof CoreSchemaError)) {\n return null\n }\n\n const schema = error.schema as unknown as Record<string, unknown> | null | undefined\n if (!schema || typeof schema !== 'object') {\n return null\n }\n\n const validation = schema._validation\n if (!Array.isArray(validation)) {\n return null\n }\n\n if (!validation.every(isValidationProblemGroup)) {\n return null\n }\n\n return validation\n}\n\n/**\n * Type guard for SchemaError. Checks both `name` and `message` properties because\n * errors from worker threads lose their prototype chain during serialization,\n * and may only preserve the error name in the message string.\n */\nfunction isSchemaError(err: unknown): err is Error & {name: 'SchemaError'} {\n if (typeof err !== 'object' || err === null) {\n return false\n }\n\n const errorLike = err as {name?: unknown; message?: unknown}\n const hasSchemaErrorName = errorLike.name === 'SchemaError'\n const hasSchemaErrorMessage = errorLike.message === 'SchemaError'\n\n return hasSchemaErrorName || hasSchemaErrorMessage\n}\n"],"names":["getProxyHandler","handler","get","_target","prop","Proxy","apply","setupImportErrorHandler","ModuleConstructor","Module","originalLoad","_load","request","parent","isMain","call","error","startsWith","cleanup","require","createRequire","import","url","register","pathToFileURL","resolve","jsdomDefaultHtml","mockBrowserEnvironment","basePath","global","window","importErrorHandler","btoa","domCleanup","jsdomGlobal","windowCleanup","close","globalCleanup","provideFakeGlobals","cleanupFileLoader","addHook","code","filename","JSON","stringify","ignoreNodeModules","exts","getFileExtensions","unregister","unregisterESBuild","registerESBuild","target","supported","format","extensions","jsx","define","getStudioEnvironmentVariables","prefix","jsonEncode","getFakeGlobals","__mockedBySanity","requestAnimationFrame","setImmediate","cancelAnimationFrame","clearImmediate","requestIdleCallback","cancelIdleCallback","ace","tryGetAceGlobal","InputEvent","customElements","ResizeObserver","matchMedia","matches","media","onchange","getFakeDocumentProps","execCommand","_commandName","_showDefaultUI","_valueArgument","globalEnv","globalWindow","globalDocument","document","fakeGlobals","fakeDocumentProps","stubbedGlobalKeys","stubbedWindowKeys","stubbedDocumentKeys","rawKey","value","Object","entries","key","push","forEach","acePath","resolveFrom","silent","candidates","getStudioConfig","configPath","cfgPath","fs","existsSync","Error","map","candidate","path","join","find","config","mod","__esModule","default","err","cause","Array","isArray","name","getStudioWorkspaces","options","workspaces","firstValueFrom","resolveConfig","SchemaExtractedTrace","defineTrace","version","description","__dirname","dirname","fileURLToPath","extractAction","args","workDir","output","telemetry","flags","extOptions","formatFlag","enforceRequiredFields","rootPkgPath","readPkgUp","sync","cwd","workerPath","spinner","start","trace","worker","Worker","workerData","workspaceName","workspace","env","process","schema","Promise","reject","addListener","log","schemaAllTypesCount","length","schemaDocumentTypesCount","filter","type","schemaTypesCount","schemaFormat","text","writeFile","complete","succeed","fail","isSchemaError","innerErr","validation","extractValidationFromCoreSchemaError","print","formatSchemaValidation","isValidationProblemGroup","item","group","problems","CoreSchemaError","_validation","every","errorLike","hasSchemaErrorName","hasSchemaErrorMessage","message"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { isatty } from "node:tty";
|
|
2
|
+
import { generateHelpUrl } from "./generate-help-url.esm.js";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import logSymbols from "log-symbols";
|
|
5
|
+
const isTty = isatty(1), headers = {
|
|
6
|
+
error: isTty ? chalk.bold(chalk.bgRed(chalk.black(" ERROR "))) : chalk.red("[ERROR]"),
|
|
7
|
+
warning: isTty ? chalk.bold(chalk.bgYellow(chalk.black(" WARN "))) : chalk.yellow("[WARN]")
|
|
8
|
+
}, severityValues = {
|
|
9
|
+
error: 0,
|
|
10
|
+
warning: 1
|
|
11
|
+
};
|
|
12
|
+
function formatPath(pathSegments) {
|
|
13
|
+
const format = ([curr, ...next], mode = "object") => {
|
|
14
|
+
if (!curr) return "";
|
|
15
|
+
if (curr.kind === "property") return format(next, curr.name === "of" ? "array" : "object");
|
|
16
|
+
const name = curr.name ? curr.name : `<anonymous_${curr.type}>`;
|
|
17
|
+
return `${mode === "array" ? `[${name}]` : `.${name}`}${format(next)}`;
|
|
18
|
+
};
|
|
19
|
+
return format(pathSegments.slice(1)).slice(1);
|
|
20
|
+
}
|
|
21
|
+
function getAggregatedSeverity(groupOrGroups) {
|
|
22
|
+
return (Array.isArray(groupOrGroups) ? groupOrGroups : [groupOrGroups]).flatMap((group) => group.problems.map((problem) => problem.severity)).find((severity) => severity === "error") ? "error" : "warning";
|
|
23
|
+
}
|
|
24
|
+
function formatSchemaValidation(validation) {
|
|
25
|
+
let unnamedTopLevelTypeCount = 0;
|
|
26
|
+
return Object.entries(validation.reduce((acc, next) => {
|
|
27
|
+
const [firstSegment] = next.path;
|
|
28
|
+
if (!firstSegment || firstSegment.kind !== "type") return acc;
|
|
29
|
+
const topLevelType = firstSegment.name || `<unnamed_${firstSegment.type}_type_${unnamedTopLevelTypeCount++}>`, problems = acc[topLevelType] ?? [];
|
|
30
|
+
return problems.push(next), acc[topLevelType] = problems, acc;
|
|
31
|
+
}, {})).sort((a, b) => {
|
|
32
|
+
const [aType, aGroups] = a, [bType, bGroups] = b, aValue = severityValues[getAggregatedSeverity(aGroups)], bValue = severityValues[getAggregatedSeverity(bGroups)];
|
|
33
|
+
return aValue === bValue ? aType.localeCompare(bType, "en-US") : aValue - bValue;
|
|
34
|
+
}).map(([topLevelType, groups]) => {
|
|
35
|
+
const formattedTopLevelType = isTty ? chalk.bgWhite(chalk.black(` ${topLevelType} `)) : `[${topLevelType}]`, header = `${headers[getAggregatedSeverity(groups)]} ${formattedTopLevelType}`, body = groups.sort((a, b) => severityValues[getAggregatedSeverity(a)] - severityValues[getAggregatedSeverity(b)]).map((group) => {
|
|
36
|
+
const formattedPath = ` ${chalk.bold(formatPath(group.path) || "(root)")}`, formattedMessages = group.problems.sort((a, b) => severityValues[a.severity] - severityValues[b.severity]).map(({
|
|
37
|
+
severity,
|
|
38
|
+
message,
|
|
39
|
+
helpId
|
|
40
|
+
}) => {
|
|
41
|
+
const help = helpId ? `
|
|
42
|
+
See ${generateHelpUrl(helpId)}` : "";
|
|
43
|
+
return ` ${logSymbols[severity]} ${message}${help}`;
|
|
44
|
+
}).join(`
|
|
45
|
+
`);
|
|
46
|
+
return `${formattedPath}
|
|
47
|
+
${formattedMessages}`;
|
|
48
|
+
}).join(`
|
|
49
|
+
`);
|
|
50
|
+
return `${header}
|
|
51
|
+
${body}`;
|
|
52
|
+
}).join(`
|
|
53
|
+
|
|
54
|
+
`);
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
formatSchemaValidation,
|
|
58
|
+
getAggregatedSeverity
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=formatSchemaValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatSchemaValidation.js","sources":["../../src/_internal/cli/actions/schema/formatSchemaValidation.ts"],"sourcesContent":["import {isatty} from 'node:tty'\n\nimport {generateHelpUrl} from '@sanity/generate-help-url'\nimport {type SchemaValidationProblemGroup, type SchemaValidationProblemPath} from '@sanity/types'\nimport chalk from 'chalk'\nimport logSymbols from 'log-symbols'\n\nconst isTty = isatty(1)\n\nconst headers = {\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}\n\nconst severityValues = {error: 0, warning: 1}\n\n/**\n * Formats a schema validation path into a human-readable dot/bracket notation string.\n * e.g. `[{kind: 'type', name: 'post'}, {kind: 'property', name: 'of'}, {kind: 'type', name: 'image'}]`\n * becomes `[image]` (array notation because parent property was 'of').\n */\nfunction formatPath(pathSegments: SchemaValidationProblemPath) {\n const format = (\n [curr, ...next]: SchemaValidationProblemPath,\n mode: 'object' | 'array' = 'object',\n ): string => {\n if (!curr) return ''\n // 'property' segments control notation for the next type segment:\n // 'of' property means array items, so use bracket notation; otherwise use dot notation\n if (curr.kind === 'property') return format(next, curr.name === 'of' ? 'array' : 'object')\n\n const name = curr.name ? curr.name : `<anonymous_${curr.type}>`\n return `${mode === 'array' ? `[${name}]` : `.${name}`}${format(next)}`\n }\n\n // Skip the first segment (top-level type) and trim the leading '.' from the result\n return format(pathSegments.slice(1)).slice(1)\n}\n\nexport function getAggregatedSeverity(\n groupOrGroups: SchemaValidationProblemGroup | SchemaValidationProblemGroup[],\n): 'error' | 'warning' {\n const groups = Array.isArray(groupOrGroups) ? groupOrGroups : [groupOrGroups]\n return groups\n .flatMap((group) => group.problems.map((problem) => problem.severity))\n .find((severity) => severity === 'error')\n ? 'error'\n : 'warning'\n}\n\nexport function formatSchemaValidation(validation: SchemaValidationProblemGroup[]): string {\n let unnamedTopLevelTypeCount = 0\n // Group validation problems by their top-level schema type (e.g., 'post', 'author')\n // so errors can be displayed organized by which type they belong to\n const validationByType = Object.entries(\n validation.reduce<Record<string, SchemaValidationProblemGroup[]>>((acc, next) => {\n const [firstSegment] = next.path\n if (!firstSegment) return acc\n if (firstSegment.kind !== 'type') return acc\n\n const topLevelType =\n firstSegment.name || `<unnamed_${firstSegment.type}_type_${unnamedTopLevelTypeCount++}>`\n const problems = acc[topLevelType] ?? []\n\n problems.push(next)\n\n acc[topLevelType] = problems\n return acc\n }, {}),\n )\n\n // Sort types by severity (errors first), then alphabetically within each severity level\n const formatted = validationByType\n .sort((a, b) => {\n const [aType, aGroups] = a\n const [bType, bGroups] = b\n const aValue = severityValues[getAggregatedSeverity(aGroups)]\n const bValue = severityValues[getAggregatedSeverity(bGroups)]\n if (aValue === bValue) return aType.localeCompare(bType, 'en-US')\n return aValue - bValue\n })\n .map(([topLevelType, groups]) => {\n const formattedTopLevelType = isTty\n ? chalk.bgWhite(chalk.black(` ${topLevelType} `))\n : `[${topLevelType}]`\n\n const header = `${headers[getAggregatedSeverity(groups)]} ${formattedTopLevelType}`\n const body = groups\n .sort(\n (a, b) =>\n severityValues[getAggregatedSeverity(a)] - severityValues[getAggregatedSeverity(b)],\n )\n .map((group) => {\n const formattedPath = ` ${chalk.bold(formatPath(group.path) || '(root)')}`\n const formattedMessages = group.problems\n .sort((a, b) => severityValues[a.severity] - severityValues[b.severity])\n .map(({severity, message, helpId}) => {\n const help = helpId ? `\\n See ${generateHelpUrl(helpId)}` : ''\n return ` ${logSymbols[severity]} ${message}${help}`\n })\n .join('\\n')\n\n return `${formattedPath}\\n${formattedMessages}`\n })\n .join('\\n')\n\n return `${header}\\n${body}`\n })\n .join('\\n\\n')\n\n return formatted\n}\n"],"names":["isTty","isatty","headers","error","chalk","bold","bgRed","black","red","warning","bgYellow","yellow","severityValues","formatPath","pathSegments","format","curr","next","mode","kind","name","type","slice","getAggregatedSeverity","groupOrGroups","Array","isArray","flatMap","group","problems","map","problem","severity","find","formatSchemaValidation","validation","unnamedTopLevelTypeCount","Object","entries","reduce","acc","firstSegment","path","topLevelType","push","sort","a","b","aType","aGroups","bType","bGroups","aValue","bValue","localeCompare","groups","formattedTopLevelType","bgWhite","header","body","formattedPath","formattedMessages","message","helpId","help","generateHelpUrl","logSymbols","join"],"mappings":"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"}
|
|
@@ -156,6 +156,8 @@ const releasesLocaleStrings = {
|
|
|
156
156
|
"failed-publish-title": "Failed to publish",
|
|
157
157
|
/** Title text displayed for releases that failed to schedule */
|
|
158
158
|
"failed-schedule-title": "Failed to schedule",
|
|
159
|
+
/** Tooltip text for releases that have passed their intended publish date */
|
|
160
|
+
"passed-intended-publish-date": "This release has passed its intended publish date",
|
|
159
161
|
/**The text that will be shown in the footer to indicate the time the release was archived */
|
|
160
162
|
"footer.status.archived": "Archived",
|
|
161
163
|
/**The text that will be shown in the footer to indicate the time the release was created */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources2.js","sources":["../../src/core/releases/i18n/resources.ts"],"sourcesContent":["/**\n * Defined locale strings for the releases tool, in US English.\n *\n * @internal\n */\nconst releasesLocaleStrings = {\n /** Action text for adding a document to release */\n 'action.add-document': 'Add document',\n /** Action text for archiving a release */\n 'action.archive': 'Archive release',\n /** Tooltip for when the archive release action is disabled due to release being scheduled */\n 'action.archive.tooltip': 'Unschedule this release to archive it',\n /** Action text for showing the archived releases */\n 'action.archived': 'Archived',\n /** Action text for staging a new revert release */\n 'action.create-revert-release': 'Create a new release',\n /** Action text for deleting a release */\n 'action.delete-release': 'Delete release',\n /** Menu item label for showing scheduled drafts */\n 'action.drafts': 'Scheduled drafts',\n /** Action text for duplicating a release */\n 'action.duplicate-release': 'Duplicate release',\n /** Action text for editing a release */\n 'action.edit': 'Edit release',\n /** Action text for opening a release */\n 'action.open': 'Active',\n /** Menu item label for showing releases (multi-document releases) */\n 'action.releases': 'Releases',\n /** Action text for scheduling a release */\n 'action.schedule': 'Schedule release...',\n /** Action text for scheduling unpublish of a draft document */\n 'action.schedule-unpublish': 'Schedule Unpublish',\n /** Tooltip text for when schedule unpublish is disabled because document is not published */\n 'action.schedule-unpublish.disabled.not-published':\n 'Document must be published to schedule unpublish',\n /** Action text for unpublishing a document in a release in the context menu */\n 'action.unpublish': 'Unpublish',\n /** Action message for scheduling an unpublished of a document */\n 'action.unpublish-doc-actions': 'Unpublish when releasing',\n /** Action message for when document is scheduled for unpublishing a document and you want to no longer unpublish it */\n 'action.revert-unpublish-actions': 'Revert unpublish when releasing',\n /** Action text for unscheduling a release */\n 'action.unschedule': 'Unschedule release',\n /** Action text for publishing all documents in a release (and the release itself) */\n 'action.publish-all-documents': 'Run release',\n /** Text for the review changes button in release tool */\n 'action.review': 'Review changes',\n /** Action text for reverting a release */\n 'action.revert': 'Revert release',\n /** Text for the summary button in release tool */\n 'actions.summary': 'Summary',\n /** Action text for reverting a release immediately without staging changes */\n 'action.immediate-revert-release': 'Revert now',\n /** Label for unarchiving a release */\n 'action.unarchive': 'Unarchive release',\n /* The text for the activity event when a document is added to a release */\n 'activity.event.add-document': 'added a document version',\n /* The text for the activity event when the release is archived */\n 'activity.event.archive': 'archived the <strong>{{releaseTitle}}</strong> release',\n /* The text for the activity event when the release is created */\n 'activity.event.create':\n 'created the <strong>{{releaseTitle}}</strong> release <ScheduleTarget>targeting </ScheduleTarget>',\n /* The text for the activity event when a document is removed from a release */\n 'activity.event.discard-document': 'discarded a document version',\n 'activity.event.edit': 'set release time to <ScheduleTarget></ScheduleTarget>',\n /**The text to display in the changes when the release type changes to asap */\n 'activity.event.edit-time-asap': 'immediately',\n /**The text to display in the changes when the release type changes to undecided */\n 'activity.event.edit-time-undecided': 'never',\n /* The text for the activity event when the release is published */\n 'activity.event.publish': 'published the <strong>{{releaseTitle}}</strong> release',\n /* The text for the activity event when the release is scheduled */\n 'activity.event.schedule': 'marked as scheduled',\n /** The text for the activity event when the release is unarchived */\n 'activity.event.unarchive': 'unarchived the <strong>{{releaseTitle}}</strong> release',\n /** The text for the activity event when the release is unscheduled */\n 'activity.event.unschedule': 'marked as unscheduled',\n /** The loading text for when releases are loading */\n 'activity.panel.loading': 'Loading release activity',\n /** The loading text for when releases are loading */\n 'activity.panel.error': 'An error occurred getting the release activity',\n /** The title for the activity panel shown in the releases detail screen */\n 'activity.panel.title': 'Activity',\n\n /** Header for the dialog confirming the archive of a release */\n 'archive-dialog.confirm-archive-header': 'Are you sure you want to archive this release?',\n /** Title for the dialog confirming the archive of a release */\n 'archive-dialog.confirm-archive-title':\n \"Are you sure you want to archive the <strong>'{{title}}'</strong> release?\",\n /** Description for the dialog confirming the archive of a release with one document */\n 'archive-dialog.confirm-archive-description_one': 'This will archive 1 document version.',\n /** Description for the dialog confirming the archive of a release with more than one document */\n 'archive-dialog.confirm-archive-description_other':\n 'This will archive {{count}} document versions.',\n /** Label for the button to proceed with archiving a release */\n 'archive-dialog.confirm-archive-button': 'Yes, archive release',\n\n /** Title for information card on a archived release */\n 'archive-info.title': 'This release is archived',\n /** Description for information card on a published or archived release to description retention effects */\n 'archive-info.description':\n 'It will be available for {{retentionDays}} days, then automatically removed on {{removalDate}}. <Link>Learn about retention</Link>.',\n\n /** Title for changes to published documents */\n 'changes-published-docs.title': 'Changes to published documents',\n /** Text for when a release / document was created */\n 'created': 'Created <RelativeTime/>',\n /** Suffix for when a release is a copy of another release */\n 'copy-suffix': 'Copy',\n\n /** Text for the releases detail screen when a release was published ASAP */\n 'dashboard.details.published-asap': 'Published',\n /** Text for the releases detail screen when a release was published from scheduling */\n 'dashboard.details.published-on': 'Published on {{date}}',\n\n /** Text for the releases detail screen in the pin release button. */\n 'dashboard.details.pin-release': 'Pin release to studio',\n /** Text for the releases detail screen in the unpin release button. */\n 'dashboard.details.unpin-release': 'Unpin release from studio',\n\n /** Activity inspector button text */\n 'dashboard.details.activity': 'Activity',\n\n /** Header for deleting a release dialog */\n 'delete-dialog.confirm-delete.header': 'Are you sure you want to delete this release?',\n /** Description for the dialog confirming the deleting of a release with one document */\n 'delete-dialog.confirm-delete-description_one': 'This will delete 1 document version.',\n /** Description for the dialog confirming the deleting of a release with more than one document */\n 'delete-dialog.confirm-delete-description_other': 'This will delete {{count}} document versions.',\n /** Label for the button to proceed deleting a release */\n 'delete-dialog.confirm-delete-button': 'Yes, delete release',\n\n /** Text for when there's no changes in a release diff */\n 'diff.no-changes': 'No changes',\n /** Text for when there's no changes in a release diff */\n 'diff.list-empty': 'Changes list is empty, see document',\n /** Description for discarding a draft of a document dialog */\n 'discard-version-dialog.description-draft':\n 'This will permanently remove all changes made to this document. This action cannot be undone.',\n /** Description for discarding a version of a document dialog */\n 'discard-version-dialog.description-release':\n \"This will permanently remove all changes made to this document within the '<strong>{{releaseTitle}}</strong>' release. This action cannot be undone.\",\n /** Title for dialog for discarding a draft of a document */\n 'discard-version-dialog.header-draft': 'Discard draft?',\n /** Header for discarding a version from a release of a document dialog */\n 'discard-version-dialog.header-release':\n \"Remove document from the '<strong>{{releaseTitle}}</strong>' release?\",\n\n /** Title for dialog for discarding a draft of a document */\n 'discard-version-dialog.title-draft': 'Discard draft',\n /** Title for dialog for discarding a version of a document */\n 'discard-version-dialog.title-release': 'Remove from release',\n\n /** Title for dialog when copying version to draft that already exists */\n 'copy-to-draft-dialog.title': 'Draft version already exists',\n /** Description for dialog when copying version to draft that already exists */\n 'copy-to-draft-dialog.description':\n 'A draft version of this document already exists. Copy the current version to the draft and override the existing draft version.',\n /** Confirm button text for overriding existing draft */\n 'copy-to-draft-dialog.confirm-button': 'Yes, override Draft',\n\n /** Label for when a document in a release has multiple validation warnings */\n 'document-validation.error_other': '{{count}} validation errors',\n /** Label for when a document in a release has a single validation warning */\n 'document-validation.error_one': '{{count}} validation error',\n\n /** Label when a release has been deleted by a different user */\n 'deleted-release': \"The '<strong>{{title}}</strong>' release has been deleted\",\n\n /** Header for the dialog confirming the duplicate of a release */\n 'duplicate-dialog.confirm-duplicate-header': 'Are you sure you want to duplicate this release?',\n /** Description for the dialog confirming the duplicate of a release with one document */\n 'duplicate-dialog.confirm-duplicate-description_one':\n 'This will duplicate the release and the 1 document version.',\n /** Description for the dialog confirming the duplicate of a release with more than one document */\n 'duplicate-dialog.confirm-duplicate-description_other':\n 'This will duplicate the release and the {{count}} document versions.',\n /** Label for the button to proceed with duplicating a release */\n 'duplicate-dialog.confirm-duplicate-button': 'Yes, duplicate release',\n\n /** Title text displayed for technical error details */\n 'error-details-title': 'Error details',\n /** Title text when error during release update */\n 'failed-edit-title': 'Failed to save changes',\n /** Title text displayed for releases that failed to publish */\n 'failed-publish-title': 'Failed to publish',\n /** Title text displayed for releases that failed to schedule */\n 'failed-schedule-title': 'Failed to schedule',\n\n /**The text that will be shown in the footer to indicate the time the release was archived */\n 'footer.status.archived': 'Archived',\n /**The text that will be shown in the footer to indicate the time the release was created */\n 'footer.status.created': 'Created',\n /**The text that will be shown in the footer to indicate the time the release was created */\n 'footer.status.edited': 'Edited',\n /**The text that will be shown in the footer to indicate the time the release was published */\n 'footer.status.published': 'Published',\n /**The text that will be shown in the footer to indicate the time the release was unarchived */\n 'footer.status.unarchived': 'Unarchived',\n /** Label text for the loading state whilst release is being loaded */\n 'loading-release': 'Loading release',\n\n /** Text for when documents of a release are loading */\n 'loading-release-documents': 'Loading documents',\n /** Title text for when loading documents on a release failed */\n 'loading-release-documents.error.title': 'Something went wrong',\n /** Description text for when loading documents on a release failed */\n 'loading-release-documents.error.description':\n \"We're unable to load the documents for this release. Please try again later.\",\n\n /** Label for the release menu */\n 'menu.label': 'Release menu',\n /** Tooltip for the release menu */\n 'menu.tooltip': 'Actions',\n /** Label for title of actions for \"when releasing\" */\n 'menu.group.when-releasing': 'When releasing',\n\n /** Text for when no archived releases are found */\n 'no-archived-release': 'No archived releases',\n /** Text for when no releases are found */\n 'no-releases': 'No Releases',\n /** Text for when a release is not found */\n 'not-found': 'Release not found: {{releaseId}}',\n\n /** Text for the button name for the release tool */\n 'overview.action.documentation': 'Documentation',\n /** Text for when a release is not found */\n 'overview.calendar.tooltip': 'View calendar',\n /** Description for the release tool */\n 'overview.description':\n 'Releases are collections of document changes which can be managed, scheduled, and rolled back together.',\n /** Text for the placeholder in the search release input */\n 'overview.search-releases-placeholder': 'Search releases',\n /** Title for the release tool */\n 'overview.title': 'Releases',\n\n /** Tooltip label when the user doesn't have permission for discarding a version */\n 'permissions.error.discard-version': 'You do not have permission to discard this version',\n /** Tooltip label when the user doesn't have permission for unpublishing a document */\n 'permissions.error.unpublish': 'You do not have permission to unpublish this document',\n /** Text for when a user doesn't have publish or schedule releases */\n 'permission-missing-title': 'Limited access',\n /** Description for when a user doesn't have publish or schedule releases */\n 'permission-missing-description':\n 'Your role currently limits what you can see in this release. You may not publish nor schedule this release.',\n /** Tooltip label when the user doesn't have permission to archive release */\n 'permissions.error.archive': 'You do not have permission to archive this release',\n /** Tooltip label when the user doesn't have permission to delete release */\n 'permissions.error.delete': 'You do not have permission to delete this release',\n /** Tooltip label when the user doesn't have permission to duplicate release */\n 'permissions.error.duplicate': 'You do not have permission to duplicate this release',\n /** Tooltip label when the user doesn't have permission to unarchive release */\n 'permissions.error.unarchive': 'You do not have permission to unarchive this release',\n\n /** Tooltip text for when one user is editing a document in a release */\n 'presence.tooltip.one':\n '{{displayName}} is editing this document in the \"{{releaseTitle}}\" release right now',\n /** Tooltip text for when multiple users are editing a document in a release */\n 'presence.tooltip.other': '{{count}} people are editing this document right now',\n\n /** Tooltip text for publish release action when there are no documents */\n 'publish-action.validation.no-documents': 'There are no documents to publish',\n /** Title for the dialog confirming the publish of a release */\n 'publish-dialog.confirm-publish.title':\n 'Are you sure you want to publish the release and all document versions?',\n /** Description for the dialog confirming the publish of a release with one document */\n 'publish-dialog.confirm-publish-description_one':\n \"The '<strong>{{title}}</strong>' release and its document will be published.\",\n /** Description for the dialog confirming the publish of a release with multiple documents */\n 'publish-dialog.confirm-publish-description_other':\n \"The '<strong>{{title}}</strong>' release and its {{releaseDocumentsLength}} documents will be published.\",\n /** Label for the button when the user doesn't have permissions to publish a release */\n 'publish-dialog.validation.no-permission': 'You do not have permission to publish',\n /** Label for when documents are being validated */\n 'publish-dialog.validation.loading': 'Validating documents...',\n /** Label for when documents in release have validation errors */\n 'publish-dialog.validation.error': 'Some documents have validation errors',\n\n /** Title for information card on a published release */\n 'publish-info.title': 'This release is published successfully.',\n\n /** Placeholder title for a release with no title */\n 'release-placeholder.title': 'Untitled',\n\n /** Description for the review changes button in release tool */\n 'review.description': 'Add documents to this release to review changes',\n /** Text for when a document is edited */\n 'review.edited': 'Edited <RelativeTime/>',\n /** Description for the dialog confirming the revert of a release with multiple documents */\n 'revert-dialog.confirm-revert-description_one':\n 'This will revert {{releaseDocumentsLength}} document version.',\n /** Description for the dialog confirming the revert of a release with multiple documents */\n 'revert-dialog.confirm-revert-description_other':\n 'This will revert {{releaseDocumentsLength}} document versions.',\n /** Title for the dialog confirming the revert of a release */\n 'revert-dialog.confirm-revert.title': \"Are you sure you want to revert the '{{title}}' release?\",\n /** Checkbox label to confirm whether to create a staged release for revert or immediately revert */\n 'revert-dialog.confirm-revert.stage-revert-checkbox-label': 'Immediately revert the release',\n /** Warning card text for when immediately revert a release with history */\n 'revert-dialog.confirm-revert.warning-card':\n 'Changes were made to documents in this release after they were published. Reverting will overwrite these changes.',\n /** Title of a reverted release */\n 'revert-release.title': 'Reverting \"{{title}}\"',\n /** Description of a reverted release */\n 'revert-release.description': 'Revert changes to document versions in \"{{title}}\".',\n\n /** Title of unschedule release dialog */\n 'schedule-button.tooltip': 'Are you sure you want to unschedule the release?',\n\n /** Schedule release button tooltip when there are no documents to schedule */\n 'schedule-action.validation.no-documents': 'There are no documents to schedule',\n /** Schedule release button tooltip when user has no permissions to schedule */\n 'schedule-button-tooltip.validation.no-permission': 'You do not have permission to schedule',\n /** Schedule release button tooltip when validation is loading */\n 'schedule-button-tooltip.validation.loading': 'Validating documents...',\n /** Schedule release button tooltip when there are validation errors */\n 'schedule-button-tooltip.validation.error': 'Some documents have validation errors',\n\n /** Schedule release button tooltip when the release is already scheduled */\n 'schedule-button-tooltip.already-scheduled': 'This release is already scheduled',\n\n /** Title for unschedule release dialog */\n 'schedule-dialog.confirm-title': 'Schedule the release',\n /** Description shown in unschedule relaease dialog */\n 'schedule-dialog.confirm-description_one':\n \"The '<strong>{{title}}</strong>' release and its document will be published on the selected date.\",\n /** Description for the dialog confirming the publish of a release with multiple documents */\n 'schedule-dialog.confirm-description_other':\n 'The <strong>{{title}}</strong> release and its {{count}} document versions will be scheduled.',\n\n /** Description for the confirm button for scheduling a release */\n 'schedule-dialog.confirm-button': 'Yes, schedule',\n\n /** Label for date picker when scheduling a release */\n 'schedule-dialog.select-publish-date-label': 'Schedule on',\n\n /** Title for unschedule release dialog */\n 'unschedule-dialog.confirm-title': 'Are you sure you want to unschedule the release?',\n /** Description shown in unschedule relaease dialog */\n 'unschedule-dialog.confirm-description':\n 'The release will no longer be published on the scheduled date',\n /** Description for warning that the published schedule time is in the past */\n 'schedule-dialog.publish-date-in-past-warning': 'Schedule for a future time and date.',\n\n /** Header for the schedule unpublish dialog */\n 'schedule-unpublish-dialog.header': 'Schedule draft for Unpublish',\n /** Description for the schedule unpublish dialog */\n 'schedule-unpublish-dialog.description': 'Select when this document should be unpublished.',\n /** Confirm button text for the schedule unpublish dialog */\n 'schedule-unpublish-dialog.confirm': 'Schedule Unpublish',\n\n /** Placeholder for search of documents in a release */\n 'search-documents-placeholder': 'Search documents',\n /** Text for when the release was created */\n 'summary.created': 'Created <RelativeTime/>',\n /** Text for when the release was published */\n 'summary.published': 'Published <RelativeTime/>',\n /** Text for when the release has not published */\n 'summary.not-published': 'Not published',\n /** Text for when the release has no documents */\n 'summary.no-documents': 'No documents',\n /** Text for when the release is composed of one document */\n 'summary.document-count_one': '{{count}} document',\n /** Text for when the release is composed of multiple documents */\n 'summary.document-count_other': '{{count}} documents',\n\n /** Text for validation loading indicator */\n 'summary.validating-documents': 'Validating documents: {{validatedCount}} of {{totalCount}}',\n\n /** Text for when the release has validated documents */\n 'summary.validated-documents': '{{validatedCount}} of {{totalCount}} documents validated',\n\n /** Text for when the release has validated all documents */\n 'summary.all-documents-validated': 'All documents validated, no conflicts found',\n\n /** Text for when the release has no errors found */\n 'summary.all-documents-errors-found': 'All documents validated, conflicts found',\n\n /** Text for when the release has some errors found */\n 'summary.errors-found':\n 'In order to publish or schedule the release, please resolve the conflicts found in the documents',\n\n /** add action type that will be shown in the table*/\n 'table-body.action.add': 'Add',\n /** Change action type that will be shown in the table*/\n 'table-body.action.change': 'Change',\n /** Change action type that will be shown in the table*/\n 'table-body.action.unpublish': 'Unpublish',\n\n /** Header for the document table in the release tool - Archived */\n 'table-header.archivedAt': 'Archived',\n /** Header for the document table in the release tool - contributors */\n 'table-header.contributors': 'Contributors',\n /** Header for the document table in the release tool - created by */\n 'table-header.created-by': 'Created by',\n /** Header for the document table in the release tool - document preview */\n 'table-header.document': 'Document',\n /** Header for the document table in the release tool - title */\n 'table-header.documents': 'Documents',\n /** Header for the document table in the release tool - edited */\n 'table-header.edited': 'Edited',\n /** Header for the document table in the release tool - Published */\n 'table-header.published-at': 'Published',\n /** Header for the document table in the release tool - Published */\n 'table-header.publishedAt': 'Published',\n /** Header for the scheduled drafts document table in the release tool - published at */\n 'table-header.scheduled-draft.published-at': 'Published at',\n /** Header for the scheduled drafts document table in the release tool - scheduled for */\n 'table-header.scheduled-for': 'Scheduled for',\n /** Header for the document table in the release tool - time */\n 'table-header.time': 'Time',\n /** Header for the document table in the release tool - release title */\n 'table-header.title': 'Release',\n /** Header for the document table in the release tool - type */\n 'table-header.type': 'Type',\n /** Header for the document table in the release tool - action */\n 'table-header.action': 'Action',\n\n /** Text for toast when release failed to archive */\n 'toast.archive.error': \"Failed to archive '<strong>{{title}}</strong>': {{error}}\",\n /** Description for toast when creating new version of document in release failed */\n 'toast.create-version.error': 'Failed to add document to release: {{error}}',\n /** Description for toast when release deletion failed */\n 'toast.delete.error': \"Failed to delete '<strong>{{title}}</strong>': {{error}}\",\n /** Description for toast when release is successfully deleted */\n 'toast.delete.success': \"The '<strong>{{title}}</strong>' release was successfully deleted\",\n /** Description for toast when release duplication failed */\n 'toast.duplicate.error': \"Failed to duplicate '<strong>{{title}}</strong>': {{error}}\",\n /** Description for toast when release is successfully duplicated */\n 'toast.duplicate.success': \"The '<strong>{{title}}</strong>' release was duplicated. <Link/>\",\n /** Link text for toast link to the duplicated release */\n 'toast.duplicate.success-link': 'View duplicated release',\n /** Text for toast when release failed to publish */\n 'toast.publish.error': \"Failed to publish '<strong>{{title}}</strong>': {{error}}\",\n /** Text for toast when release failed to schedule */\n 'toast.schedule.error': \"Failed to schedule '<strong>{{title}}</strong>': {{error}}\",\n /** Text for toast when release has been scheduled */\n 'toast.schedule.success': \"The '<strong>{{title}}</strong>' release was scheduled.\",\n /** Text for toast when release failed to unschedule */\n 'toast.unschedule.error': \"Failed to unscheduled '<strong>{{title}}</strong>': {{error}}\",\n /** Text for toast when release failed to unarchive */\n 'toast.unarchive.error': \"Failed to unarchive '<strong>{{title}}</strong>': {{error}}\",\n /** Text for tooltip when a release has been scheduled */\n 'type-picker.tooltip.scheduled': 'The release is scheduled, unschedule it to change type',\n /** Text for toast when release failed to revert */\n 'toast.revert.error': 'Failed to revert release: {{error}}',\n /** Text for toast when release has been reverted immediately */\n 'toast.immediate-revert.success': \"The '{{title}}' release was successfully reverted\",\n /** Text for toast when release has reverted release successfully staged */\n 'toast.revert-stage.success': \"Revert release for '{{title}}' was successfully created. <Link/>\",\n /** Link text for toast link to the generated revert release */\n 'toast.revert-stage.success-link': 'View revert release',\n\n /** Text for when a document is unpublished */\n 'unpublish.already-unpublished': 'This document is already unpublished.',\n /** Tooltip label for when a document is unpublished */\n 'unpublish.no-published-version': 'There is no published version of this document.',\n /** Title for the dialog confirming the unpublish of a release */\n 'unpublish-dialog.header': 'Are you sure you want to unpublish this document when releasing?',\n /** Text action in unpublish dialog to cancel */\n 'unpublish-dialog.action.cancel': 'Cancel',\n /** Text action in unpublish dialog to unpublish */\n 'unpublish-dialog.action.unpublish': 'Yes, unpublish when releasing',\n /** Description for the unpublish dialog, explaining that it will create a draft if no draft exists at time of release */\n 'unpublish-dialog.description.to-draft':\n 'This will unpublish the document as part of the <Label>{{title}}</Label> release, and create a draft if no draft exists at the time of release.',\n /** Description for unpublish dialog, explaining that all changes made to this document will be lost */\n 'unpublish-dialog.description.lost-changes':\n 'Any changes made to this document version will be lost.',\n\n /** Banner text shown when scheduled drafts feature is disabled but there are still scheduled drafts */\n 'banner.scheduled-drafts-disabled':\n 'Scheduled drafts has been disabled but there are still scheduled drafts to be published.',\n /** Banner text shown when drafts mode is disabled but there are still scheduled drafts */\n 'banner.drafts-mode-disabled':\n 'Drafts mode has been disabled but there are still scheduled drafts to be published.',\n /** Text for when no scheduled drafts are found */\n 'no-scheduled-drafts': 'No Scheduled Drafts',\n\n /** Banner text showing count of active scheduled drafts requiring confirmation with one draft */\n 'banner.confirm-active-scheduled-drafts_one':\n 'There is {{count}} Scheduled Draft that requires scheduling confirmation',\n /** Banner text showing count of active scheduled drafts requiring confirmation with multiple drafts */\n 'banner.confirm-active-scheduled-drafts_other':\n 'There are {{count}} Scheduled Drafts that require scheduling confirmation',\n /** Button text for confirming scheduling of active drafts */\n 'banner.confirm-active-scheduled-drafts.button': 'Confirm scheduling',\n\n /** Dialog title for confirming active scheduled drafts */\n 'confirm-active-scheduled-drafts-dialog.title': 'Confirm Scheduled Drafts',\n /** Dialog description for confirming active scheduled drafts */\n 'confirm-active-scheduled-drafts-dialog.description':\n 'These drafts require confirmation to schedule their publishing.',\n /** Dialog warning when some scheduled drafts have past dates */\n 'confirm-active-scheduled-drafts-dialog.past-dates-warning':\n 'Some of these Scheduled Drafts are scheduled for past dates. Confirming schedules will immediately publish those versions of documents.',\n /** Dialog confirm button text for confirming all scheduled drafts */\n 'confirm-active-scheduled-drafts-dialog.confirm-button': 'Confirm Schedules',\n\n /** Toast error message when bulk scheduling of active drafts fails */\n 'toast.confirm-active-scheduled-drafts.error': 'Failed to schedule drafts: {{error}}',\n}\n\n/**\n * @alpha\n */\nexport type ReleasesLocaleResourceKeys = keyof typeof releasesLocaleStrings\n\nexport default releasesLocaleStrings\n"],"names":["releasesLocaleStrings"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resources2.js","sources":["../../src/core/releases/i18n/resources.ts"],"sourcesContent":["/**\n * Defined locale strings for the releases tool, in US English.\n *\n * @internal\n */\nconst releasesLocaleStrings = {\n /** Action text for adding a document to release */\n 'action.add-document': 'Add document',\n /** Action text for archiving a release */\n 'action.archive': 'Archive release',\n /** Tooltip for when the archive release action is disabled due to release being scheduled */\n 'action.archive.tooltip': 'Unschedule this release to archive it',\n /** Action text for showing the archived releases */\n 'action.archived': 'Archived',\n /** Action text for staging a new revert release */\n 'action.create-revert-release': 'Create a new release',\n /** Action text for deleting a release */\n 'action.delete-release': 'Delete release',\n /** Menu item label for showing scheduled drafts */\n 'action.drafts': 'Scheduled drafts',\n /** Action text for duplicating a release */\n 'action.duplicate-release': 'Duplicate release',\n /** Action text for editing a release */\n 'action.edit': 'Edit release',\n /** Action text for opening a release */\n 'action.open': 'Active',\n /** Menu item label for showing releases (multi-document releases) */\n 'action.releases': 'Releases',\n /** Action text for scheduling a release */\n 'action.schedule': 'Schedule release...',\n /** Action text for scheduling unpublish of a draft document */\n 'action.schedule-unpublish': 'Schedule Unpublish',\n /** Tooltip text for when schedule unpublish is disabled because document is not published */\n 'action.schedule-unpublish.disabled.not-published':\n 'Document must be published to schedule unpublish',\n /** Action text for unpublishing a document in a release in the context menu */\n 'action.unpublish': 'Unpublish',\n /** Action message for scheduling an unpublished of a document */\n 'action.unpublish-doc-actions': 'Unpublish when releasing',\n /** Action message for when document is scheduled for unpublishing a document and you want to no longer unpublish it */\n 'action.revert-unpublish-actions': 'Revert unpublish when releasing',\n /** Action text for unscheduling a release */\n 'action.unschedule': 'Unschedule release',\n /** Action text for publishing all documents in a release (and the release itself) */\n 'action.publish-all-documents': 'Run release',\n /** Text for the review changes button in release tool */\n 'action.review': 'Review changes',\n /** Action text for reverting a release */\n 'action.revert': 'Revert release',\n /** Text for the summary button in release tool */\n 'actions.summary': 'Summary',\n /** Action text for reverting a release immediately without staging changes */\n 'action.immediate-revert-release': 'Revert now',\n /** Label for unarchiving a release */\n 'action.unarchive': 'Unarchive release',\n /* The text for the activity event when a document is added to a release */\n 'activity.event.add-document': 'added a document version',\n /* The text for the activity event when the release is archived */\n 'activity.event.archive': 'archived the <strong>{{releaseTitle}}</strong> release',\n /* The text for the activity event when the release is created */\n 'activity.event.create':\n 'created the <strong>{{releaseTitle}}</strong> release <ScheduleTarget>targeting </ScheduleTarget>',\n /* The text for the activity event when a document is removed from a release */\n 'activity.event.discard-document': 'discarded a document version',\n 'activity.event.edit': 'set release time to <ScheduleTarget></ScheduleTarget>',\n /**The text to display in the changes when the release type changes to asap */\n 'activity.event.edit-time-asap': 'immediately',\n /**The text to display in the changes when the release type changes to undecided */\n 'activity.event.edit-time-undecided': 'never',\n /* The text for the activity event when the release is published */\n 'activity.event.publish': 'published the <strong>{{releaseTitle}}</strong> release',\n /* The text for the activity event when the release is scheduled */\n 'activity.event.schedule': 'marked as scheduled',\n /** The text for the activity event when the release is unarchived */\n 'activity.event.unarchive': 'unarchived the <strong>{{releaseTitle}}</strong> release',\n /** The text for the activity event when the release is unscheduled */\n 'activity.event.unschedule': 'marked as unscheduled',\n /** The loading text for when releases are loading */\n 'activity.panel.loading': 'Loading release activity',\n /** The loading text for when releases are loading */\n 'activity.panel.error': 'An error occurred getting the release activity',\n /** The title for the activity panel shown in the releases detail screen */\n 'activity.panel.title': 'Activity',\n\n /** Header for the dialog confirming the archive of a release */\n 'archive-dialog.confirm-archive-header': 'Are you sure you want to archive this release?',\n /** Title for the dialog confirming the archive of a release */\n 'archive-dialog.confirm-archive-title':\n \"Are you sure you want to archive the <strong>'{{title}}'</strong> release?\",\n /** Description for the dialog confirming the archive of a release with one document */\n 'archive-dialog.confirm-archive-description_one': 'This will archive 1 document version.',\n /** Description for the dialog confirming the archive of a release with more than one document */\n 'archive-dialog.confirm-archive-description_other':\n 'This will archive {{count}} document versions.',\n /** Label for the button to proceed with archiving a release */\n 'archive-dialog.confirm-archive-button': 'Yes, archive release',\n\n /** Title for information card on a archived release */\n 'archive-info.title': 'This release is archived',\n /** Description for information card on a published or archived release to description retention effects */\n 'archive-info.description':\n 'It will be available for {{retentionDays}} days, then automatically removed on {{removalDate}}. <Link>Learn about retention</Link>.',\n\n /** Title for changes to published documents */\n 'changes-published-docs.title': 'Changes to published documents',\n /** Text for when a release / document was created */\n 'created': 'Created <RelativeTime/>',\n /** Suffix for when a release is a copy of another release */\n 'copy-suffix': 'Copy',\n\n /** Text for the releases detail screen when a release was published ASAP */\n 'dashboard.details.published-asap': 'Published',\n /** Text for the releases detail screen when a release was published from scheduling */\n 'dashboard.details.published-on': 'Published on {{date}}',\n\n /** Text for the releases detail screen in the pin release button. */\n 'dashboard.details.pin-release': 'Pin release to studio',\n /** Text for the releases detail screen in the unpin release button. */\n 'dashboard.details.unpin-release': 'Unpin release from studio',\n\n /** Activity inspector button text */\n 'dashboard.details.activity': 'Activity',\n\n /** Header for deleting a release dialog */\n 'delete-dialog.confirm-delete.header': 'Are you sure you want to delete this release?',\n /** Description for the dialog confirming the deleting of a release with one document */\n 'delete-dialog.confirm-delete-description_one': 'This will delete 1 document version.',\n /** Description for the dialog confirming the deleting of a release with more than one document */\n 'delete-dialog.confirm-delete-description_other': 'This will delete {{count}} document versions.',\n /** Label for the button to proceed deleting a release */\n 'delete-dialog.confirm-delete-button': 'Yes, delete release',\n\n /** Text for when there's no changes in a release diff */\n 'diff.no-changes': 'No changes',\n /** Text for when there's no changes in a release diff */\n 'diff.list-empty': 'Changes list is empty, see document',\n /** Description for discarding a draft of a document dialog */\n 'discard-version-dialog.description-draft':\n 'This will permanently remove all changes made to this document. This action cannot be undone.',\n /** Description for discarding a version of a document dialog */\n 'discard-version-dialog.description-release':\n \"This will permanently remove all changes made to this document within the '<strong>{{releaseTitle}}</strong>' release. This action cannot be undone.\",\n /** Title for dialog for discarding a draft of a document */\n 'discard-version-dialog.header-draft': 'Discard draft?',\n /** Header for discarding a version from a release of a document dialog */\n 'discard-version-dialog.header-release':\n \"Remove document from the '<strong>{{releaseTitle}}</strong>' release?\",\n\n /** Title for dialog for discarding a draft of a document */\n 'discard-version-dialog.title-draft': 'Discard draft',\n /** Title for dialog for discarding a version of a document */\n 'discard-version-dialog.title-release': 'Remove from release',\n\n /** Title for dialog when copying version to draft that already exists */\n 'copy-to-draft-dialog.title': 'Draft version already exists',\n /** Description for dialog when copying version to draft that already exists */\n 'copy-to-draft-dialog.description':\n 'A draft version of this document already exists. Copy the current version to the draft and override the existing draft version.',\n /** Confirm button text for overriding existing draft */\n 'copy-to-draft-dialog.confirm-button': 'Yes, override Draft',\n\n /** Label for when a document in a release has multiple validation warnings */\n 'document-validation.error_other': '{{count}} validation errors',\n /** Label for when a document in a release has a single validation warning */\n 'document-validation.error_one': '{{count}} validation error',\n\n /** Label when a release has been deleted by a different user */\n 'deleted-release': \"The '<strong>{{title}}</strong>' release has been deleted\",\n\n /** Header for the dialog confirming the duplicate of a release */\n 'duplicate-dialog.confirm-duplicate-header': 'Are you sure you want to duplicate this release?',\n /** Description for the dialog confirming the duplicate of a release with one document */\n 'duplicate-dialog.confirm-duplicate-description_one':\n 'This will duplicate the release and the 1 document version.',\n /** Description for the dialog confirming the duplicate of a release with more than one document */\n 'duplicate-dialog.confirm-duplicate-description_other':\n 'This will duplicate the release and the {{count}} document versions.',\n /** Label for the button to proceed with duplicating a release */\n 'duplicate-dialog.confirm-duplicate-button': 'Yes, duplicate release',\n\n /** Title text displayed for technical error details */\n 'error-details-title': 'Error details',\n /** Title text when error during release update */\n 'failed-edit-title': 'Failed to save changes',\n /** Title text displayed for releases that failed to publish */\n 'failed-publish-title': 'Failed to publish',\n /** Title text displayed for releases that failed to schedule */\n 'failed-schedule-title': 'Failed to schedule',\n /** Tooltip text for releases that have passed their intended publish date */\n 'passed-intended-publish-date': 'This release has passed its intended publish date',\n\n /**The text that will be shown in the footer to indicate the time the release was archived */\n 'footer.status.archived': 'Archived',\n /**The text that will be shown in the footer to indicate the time the release was created */\n 'footer.status.created': 'Created',\n /**The text that will be shown in the footer to indicate the time the release was created */\n 'footer.status.edited': 'Edited',\n /**The text that will be shown in the footer to indicate the time the release was published */\n 'footer.status.published': 'Published',\n /**The text that will be shown in the footer to indicate the time the release was unarchived */\n 'footer.status.unarchived': 'Unarchived',\n /** Label text for the loading state whilst release is being loaded */\n 'loading-release': 'Loading release',\n\n /** Text for when documents of a release are loading */\n 'loading-release-documents': 'Loading documents',\n /** Title text for when loading documents on a release failed */\n 'loading-release-documents.error.title': 'Something went wrong',\n /** Description text for when loading documents on a release failed */\n 'loading-release-documents.error.description':\n \"We're unable to load the documents for this release. Please try again later.\",\n\n /** Label for the release menu */\n 'menu.label': 'Release menu',\n /** Tooltip for the release menu */\n 'menu.tooltip': 'Actions',\n /** Label for title of actions for \"when releasing\" */\n 'menu.group.when-releasing': 'When releasing',\n\n /** Text for when no archived releases are found */\n 'no-archived-release': 'No archived releases',\n /** Text for when no releases are found */\n 'no-releases': 'No Releases',\n /** Text for when a release is not found */\n 'not-found': 'Release not found: {{releaseId}}',\n\n /** Text for the button name for the release tool */\n 'overview.action.documentation': 'Documentation',\n /** Text for when a release is not found */\n 'overview.calendar.tooltip': 'View calendar',\n /** Description for the release tool */\n 'overview.description':\n 'Releases are collections of document changes which can be managed, scheduled, and rolled back together.',\n /** Text for the placeholder in the search release input */\n 'overview.search-releases-placeholder': 'Search releases',\n /** Title for the release tool */\n 'overview.title': 'Releases',\n\n /** Tooltip label when the user doesn't have permission for discarding a version */\n 'permissions.error.discard-version': 'You do not have permission to discard this version',\n /** Tooltip label when the user doesn't have permission for unpublishing a document */\n 'permissions.error.unpublish': 'You do not have permission to unpublish this document',\n /** Text for when a user doesn't have publish or schedule releases */\n 'permission-missing-title': 'Limited access',\n /** Description for when a user doesn't have publish or schedule releases */\n 'permission-missing-description':\n 'Your role currently limits what you can see in this release. You may not publish nor schedule this release.',\n /** Tooltip label when the user doesn't have permission to archive release */\n 'permissions.error.archive': 'You do not have permission to archive this release',\n /** Tooltip label when the user doesn't have permission to delete release */\n 'permissions.error.delete': 'You do not have permission to delete this release',\n /** Tooltip label when the user doesn't have permission to duplicate release */\n 'permissions.error.duplicate': 'You do not have permission to duplicate this release',\n /** Tooltip label when the user doesn't have permission to unarchive release */\n 'permissions.error.unarchive': 'You do not have permission to unarchive this release',\n\n /** Tooltip text for when one user is editing a document in a release */\n 'presence.tooltip.one':\n '{{displayName}} is editing this document in the \"{{releaseTitle}}\" release right now',\n /** Tooltip text for when multiple users are editing a document in a release */\n 'presence.tooltip.other': '{{count}} people are editing this document right now',\n\n /** Tooltip text for publish release action when there are no documents */\n 'publish-action.validation.no-documents': 'There are no documents to publish',\n /** Title for the dialog confirming the publish of a release */\n 'publish-dialog.confirm-publish.title':\n 'Are you sure you want to publish the release and all document versions?',\n /** Description for the dialog confirming the publish of a release with one document */\n 'publish-dialog.confirm-publish-description_one':\n \"The '<strong>{{title}}</strong>' release and its document will be published.\",\n /** Description for the dialog confirming the publish of a release with multiple documents */\n 'publish-dialog.confirm-publish-description_other':\n \"The '<strong>{{title}}</strong>' release and its {{releaseDocumentsLength}} documents will be published.\",\n /** Label for the button when the user doesn't have permissions to publish a release */\n 'publish-dialog.validation.no-permission': 'You do not have permission to publish',\n /** Label for when documents are being validated */\n 'publish-dialog.validation.loading': 'Validating documents...',\n /** Label for when documents in release have validation errors */\n 'publish-dialog.validation.error': 'Some documents have validation errors',\n\n /** Title for information card on a published release */\n 'publish-info.title': 'This release is published successfully.',\n\n /** Placeholder title for a release with no title */\n 'release-placeholder.title': 'Untitled',\n\n /** Description for the review changes button in release tool */\n 'review.description': 'Add documents to this release to review changes',\n /** Text for when a document is edited */\n 'review.edited': 'Edited <RelativeTime/>',\n /** Description for the dialog confirming the revert of a release with multiple documents */\n 'revert-dialog.confirm-revert-description_one':\n 'This will revert {{releaseDocumentsLength}} document version.',\n /** Description for the dialog confirming the revert of a release with multiple documents */\n 'revert-dialog.confirm-revert-description_other':\n 'This will revert {{releaseDocumentsLength}} document versions.',\n /** Title for the dialog confirming the revert of a release */\n 'revert-dialog.confirm-revert.title': \"Are you sure you want to revert the '{{title}}' release?\",\n /** Checkbox label to confirm whether to create a staged release for revert or immediately revert */\n 'revert-dialog.confirm-revert.stage-revert-checkbox-label': 'Immediately revert the release',\n /** Warning card text for when immediately revert a release with history */\n 'revert-dialog.confirm-revert.warning-card':\n 'Changes were made to documents in this release after they were published. Reverting will overwrite these changes.',\n /** Title of a reverted release */\n 'revert-release.title': 'Reverting \"{{title}}\"',\n /** Description of a reverted release */\n 'revert-release.description': 'Revert changes to document versions in \"{{title}}\".',\n\n /** Title of unschedule release dialog */\n 'schedule-button.tooltip': 'Are you sure you want to unschedule the release?',\n\n /** Schedule release button tooltip when there are no documents to schedule */\n 'schedule-action.validation.no-documents': 'There are no documents to schedule',\n /** Schedule release button tooltip when user has no permissions to schedule */\n 'schedule-button-tooltip.validation.no-permission': 'You do not have permission to schedule',\n /** Schedule release button tooltip when validation is loading */\n 'schedule-button-tooltip.validation.loading': 'Validating documents...',\n /** Schedule release button tooltip when there are validation errors */\n 'schedule-button-tooltip.validation.error': 'Some documents have validation errors',\n\n /** Schedule release button tooltip when the release is already scheduled */\n 'schedule-button-tooltip.already-scheduled': 'This release is already scheduled',\n\n /** Title for unschedule release dialog */\n 'schedule-dialog.confirm-title': 'Schedule the release',\n /** Description shown in unschedule relaease dialog */\n 'schedule-dialog.confirm-description_one':\n \"The '<strong>{{title}}</strong>' release and its document will be published on the selected date.\",\n /** Description for the dialog confirming the publish of a release with multiple documents */\n 'schedule-dialog.confirm-description_other':\n 'The <strong>{{title}}</strong> release and its {{count}} document versions will be scheduled.',\n\n /** Description for the confirm button for scheduling a release */\n 'schedule-dialog.confirm-button': 'Yes, schedule',\n\n /** Label for date picker when scheduling a release */\n 'schedule-dialog.select-publish-date-label': 'Schedule on',\n\n /** Title for unschedule release dialog */\n 'unschedule-dialog.confirm-title': 'Are you sure you want to unschedule the release?',\n /** Description shown in unschedule relaease dialog */\n 'unschedule-dialog.confirm-description':\n 'The release will no longer be published on the scheduled date',\n /** Description for warning that the published schedule time is in the past */\n 'schedule-dialog.publish-date-in-past-warning': 'Schedule for a future time and date.',\n\n /** Header for the schedule unpublish dialog */\n 'schedule-unpublish-dialog.header': 'Schedule draft for Unpublish',\n /** Description for the schedule unpublish dialog */\n 'schedule-unpublish-dialog.description': 'Select when this document should be unpublished.',\n /** Confirm button text for the schedule unpublish dialog */\n 'schedule-unpublish-dialog.confirm': 'Schedule Unpublish',\n\n /** Placeholder for search of documents in a release */\n 'search-documents-placeholder': 'Search documents',\n /** Text for when the release was created */\n 'summary.created': 'Created <RelativeTime/>',\n /** Text for when the release was published */\n 'summary.published': 'Published <RelativeTime/>',\n /** Text for when the release has not published */\n 'summary.not-published': 'Not published',\n /** Text for when the release has no documents */\n 'summary.no-documents': 'No documents',\n /** Text for when the release is composed of one document */\n 'summary.document-count_one': '{{count}} document',\n /** Text for when the release is composed of multiple documents */\n 'summary.document-count_other': '{{count}} documents',\n\n /** Text for validation loading indicator */\n 'summary.validating-documents': 'Validating documents: {{validatedCount}} of {{totalCount}}',\n\n /** Text for when the release has validated documents */\n 'summary.validated-documents': '{{validatedCount}} of {{totalCount}} documents validated',\n\n /** Text for when the release has validated all documents */\n 'summary.all-documents-validated': 'All documents validated, no conflicts found',\n\n /** Text for when the release has no errors found */\n 'summary.all-documents-errors-found': 'All documents validated, conflicts found',\n\n /** Text for when the release has some errors found */\n 'summary.errors-found':\n 'In order to publish or schedule the release, please resolve the conflicts found in the documents',\n\n /** add action type that will be shown in the table*/\n 'table-body.action.add': 'Add',\n /** Change action type that will be shown in the table*/\n 'table-body.action.change': 'Change',\n /** Change action type that will be shown in the table*/\n 'table-body.action.unpublish': 'Unpublish',\n\n /** Header for the document table in the release tool - Archived */\n 'table-header.archivedAt': 'Archived',\n /** Header for the document table in the release tool - contributors */\n 'table-header.contributors': 'Contributors',\n /** Header for the document table in the release tool - created by */\n 'table-header.created-by': 'Created by',\n /** Header for the document table in the release tool - document preview */\n 'table-header.document': 'Document',\n /** Header for the document table in the release tool - title */\n 'table-header.documents': 'Documents',\n /** Header for the document table in the release tool - edited */\n 'table-header.edited': 'Edited',\n /** Header for the document table in the release tool - Published */\n 'table-header.published-at': 'Published',\n /** Header for the document table in the release tool - Published */\n 'table-header.publishedAt': 'Published',\n /** Header for the scheduled drafts document table in the release tool - published at */\n 'table-header.scheduled-draft.published-at': 'Published at',\n /** Header for the scheduled drafts document table in the release tool - scheduled for */\n 'table-header.scheduled-for': 'Scheduled for',\n /** Header for the document table in the release tool - time */\n 'table-header.time': 'Time',\n /** Header for the document table in the release tool - release title */\n 'table-header.title': 'Release',\n /** Header for the document table in the release tool - type */\n 'table-header.type': 'Type',\n /** Header for the document table in the release tool - action */\n 'table-header.action': 'Action',\n\n /** Text for toast when release failed to archive */\n 'toast.archive.error': \"Failed to archive '<strong>{{title}}</strong>': {{error}}\",\n /** Description for toast when creating new version of document in release failed */\n 'toast.create-version.error': 'Failed to add document to release: {{error}}',\n /** Description for toast when release deletion failed */\n 'toast.delete.error': \"Failed to delete '<strong>{{title}}</strong>': {{error}}\",\n /** Description for toast when release is successfully deleted */\n 'toast.delete.success': \"The '<strong>{{title}}</strong>' release was successfully deleted\",\n /** Description for toast when release duplication failed */\n 'toast.duplicate.error': \"Failed to duplicate '<strong>{{title}}</strong>': {{error}}\",\n /** Description for toast when release is successfully duplicated */\n 'toast.duplicate.success': \"The '<strong>{{title}}</strong>' release was duplicated. <Link/>\",\n /** Link text for toast link to the duplicated release */\n 'toast.duplicate.success-link': 'View duplicated release',\n /** Text for toast when release failed to publish */\n 'toast.publish.error': \"Failed to publish '<strong>{{title}}</strong>': {{error}}\",\n /** Text for toast when release failed to schedule */\n 'toast.schedule.error': \"Failed to schedule '<strong>{{title}}</strong>': {{error}}\",\n /** Text for toast when release has been scheduled */\n 'toast.schedule.success': \"The '<strong>{{title}}</strong>' release was scheduled.\",\n /** Text for toast when release failed to unschedule */\n 'toast.unschedule.error': \"Failed to unscheduled '<strong>{{title}}</strong>': {{error}}\",\n /** Text for toast when release failed to unarchive */\n 'toast.unarchive.error': \"Failed to unarchive '<strong>{{title}}</strong>': {{error}}\",\n /** Text for tooltip when a release has been scheduled */\n 'type-picker.tooltip.scheduled': 'The release is scheduled, unschedule it to change type',\n /** Text for toast when release failed to revert */\n 'toast.revert.error': 'Failed to revert release: {{error}}',\n /** Text for toast when release has been reverted immediately */\n 'toast.immediate-revert.success': \"The '{{title}}' release was successfully reverted\",\n /** Text for toast when release has reverted release successfully staged */\n 'toast.revert-stage.success': \"Revert release for '{{title}}' was successfully created. <Link/>\",\n /** Link text for toast link to the generated revert release */\n 'toast.revert-stage.success-link': 'View revert release',\n\n /** Text for when a document is unpublished */\n 'unpublish.already-unpublished': 'This document is already unpublished.',\n /** Tooltip label for when a document is unpublished */\n 'unpublish.no-published-version': 'There is no published version of this document.',\n /** Title for the dialog confirming the unpublish of a release */\n 'unpublish-dialog.header': 'Are you sure you want to unpublish this document when releasing?',\n /** Text action in unpublish dialog to cancel */\n 'unpublish-dialog.action.cancel': 'Cancel',\n /** Text action in unpublish dialog to unpublish */\n 'unpublish-dialog.action.unpublish': 'Yes, unpublish when releasing',\n /** Description for the unpublish dialog, explaining that it will create a draft if no draft exists at time of release */\n 'unpublish-dialog.description.to-draft':\n 'This will unpublish the document as part of the <Label>{{title}}</Label> release, and create a draft if no draft exists at the time of release.',\n /** Description for unpublish dialog, explaining that all changes made to this document will be lost */\n 'unpublish-dialog.description.lost-changes':\n 'Any changes made to this document version will be lost.',\n\n /** Banner text shown when scheduled drafts feature is disabled but there are still scheduled drafts */\n 'banner.scheduled-drafts-disabled':\n 'Scheduled drafts has been disabled but there are still scheduled drafts to be published.',\n /** Banner text shown when drafts mode is disabled but there are still scheduled drafts */\n 'banner.drafts-mode-disabled':\n 'Drafts mode has been disabled but there are still scheduled drafts to be published.',\n /** Text for when no scheduled drafts are found */\n 'no-scheduled-drafts': 'No Scheduled Drafts',\n\n /** Banner text showing count of active scheduled drafts requiring confirmation with one draft */\n 'banner.confirm-active-scheduled-drafts_one':\n 'There is {{count}} Scheduled Draft that requires scheduling confirmation',\n /** Banner text showing count of active scheduled drafts requiring confirmation with multiple drafts */\n 'banner.confirm-active-scheduled-drafts_other':\n 'There are {{count}} Scheduled Drafts that require scheduling confirmation',\n /** Button text for confirming scheduling of active drafts */\n 'banner.confirm-active-scheduled-drafts.button': 'Confirm scheduling',\n\n /** Dialog title for confirming active scheduled drafts */\n 'confirm-active-scheduled-drafts-dialog.title': 'Confirm Scheduled Drafts',\n /** Dialog description for confirming active scheduled drafts */\n 'confirm-active-scheduled-drafts-dialog.description':\n 'These drafts require confirmation to schedule their publishing.',\n /** Dialog warning when some scheduled drafts have past dates */\n 'confirm-active-scheduled-drafts-dialog.past-dates-warning':\n 'Some of these Scheduled Drafts are scheduled for past dates. Confirming schedules will immediately publish those versions of documents.',\n /** Dialog confirm button text for confirming all scheduled drafts */\n 'confirm-active-scheduled-drafts-dialog.confirm-button': 'Confirm Schedules',\n\n /** Toast error message when bulk scheduling of active drafts fails */\n 'toast.confirm-active-scheduled-drafts.error': 'Failed to schedule drafts: {{error}}',\n}\n\n/**\n * @alpha\n */\nexport type ReleasesLocaleResourceKeys = keyof typeof releasesLocaleStrings\n\nexport default releasesLocaleStrings\n"],"names":["releasesLocaleStrings"],"mappings":"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"}
|