@lesliechan721/aw-plugin-core 0.1.0-beta.1 → 0.1.0-beta.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/dist/aw-capabilities.d.ts +27 -0
- package/dist/aw-capabilities.js +106 -0
- package/dist/aw-capabilities.js.map +1 -0
- package/dist/catalog-workspace-resolution.d.ts +3 -0
- package/dist/catalog-workspace-resolution.js +34 -0
- package/dist/catalog-workspace-resolution.js.map +1 -0
- package/dist/generated/plugin-manifest-v3.d.ts +658 -0
- package/dist/generated/{plugin-manifest-v1.js → plugin-manifest-v3.js} +1 -1
- package/dist/generated/plugin-manifest-v3.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/manifest-contract.d.ts +3 -6
- package/dist/manifest-contract.js +135 -405
- package/dist/manifest-contract.js.map +1 -1
- package/dist/manifest-type-contract.d.ts +2 -2
- package/dist/manifest.d.ts +10 -8
- package/dist/manifest.js +11 -7
- package/dist/manifest.js.map +1 -1
- package/dist/plugin-authoring-capabilities.d.ts +21 -0
- package/dist/plugin-authoring-capabilities.js +183 -0
- package/dist/plugin-authoring-capabilities.js.map +1 -0
- package/dist/plugin-config.d.ts +13 -0
- package/dist/plugin-config.js +619 -0
- package/dist/plugin-config.js.map +1 -0
- package/dist/plugin-requirements.d.ts +34 -0
- package/dist/plugin-requirements.js +248 -0
- package/dist/plugin-requirements.js.map +1 -0
- package/dist/plugin-script-contract.d.ts +8 -10
- package/dist/plugin-script-contract.js +32 -62
- package/dist/plugin-script-contract.js.map +1 -1
- package/dist/types.d.ts +126 -61
- package/dist/workspace.d.ts +54 -29
- package/dist/workspace.js +497 -269
- package/dist/workspace.js.map +1 -1
- package/package.json +5 -4
- package/schemas/plugin-manifest-v3.json +574 -0
- package/dist/generated/plugin-manifest-v1.d.ts +0 -368
- package/dist/generated/plugin-manifest-v1.js.map +0 -1
- package/dist/plugin-release.d.ts +0 -30
- package/dist/plugin-release.js +0 -187
- package/dist/plugin-release.js.map +0 -1
- package/schemas/plugin-manifest-v1.json +0 -329
|
@@ -0,0 +1,619 @@
|
|
|
1
|
+
const CONFIG_KEY_PATTERN = /^[A-Za-z][A-Za-z0-9_]*$/u;
|
|
2
|
+
const IDENTIFIER_PATTERN = /^[A-Za-z][A-Za-z0-9_]*$/u;
|
|
3
|
+
const SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;
|
|
4
|
+
const SEMVER_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|(?:[0-9A-Za-z-]*[A-Za-z-][0-9A-Za-z-]*))(?:\.(?:0|[1-9]\d*|(?:[0-9A-Za-z-]*[A-Za-z-][0-9A-Za-z-]*)))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/u;
|
|
5
|
+
const HOSTNAME_PATTERN = /^(?=.{1,253}$)(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)(?:\.(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?))*$/u;
|
|
6
|
+
const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/u;
|
|
7
|
+
const STRING_FORMATS = new Set([
|
|
8
|
+
'identifier',
|
|
9
|
+
'slug',
|
|
10
|
+
'semver',
|
|
11
|
+
'url',
|
|
12
|
+
'hostname',
|
|
13
|
+
'email',
|
|
14
|
+
]);
|
|
15
|
+
const MAX_OBJECT_PROPERTIES = 32;
|
|
16
|
+
const DANGEROUS_CONFIG_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
17
|
+
function createPropertyMap() {
|
|
18
|
+
return Object.create(null);
|
|
19
|
+
}
|
|
20
|
+
function ownProperty(value, property) {
|
|
21
|
+
return value !== undefined && Object.hasOwn(value, property) ? value[property] : undefined;
|
|
22
|
+
}
|
|
23
|
+
function isDangerousConfigKey(value) {
|
|
24
|
+
return DANGEROUS_CONFIG_KEYS.has(value);
|
|
25
|
+
}
|
|
26
|
+
function asObject(value, path) {
|
|
27
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
28
|
+
throw new Error(`Invalid ${path}: expected an object.`);
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
function assertAllowedKeys(value, path, allowed) {
|
|
33
|
+
for (const key of Object.keys(value)) {
|
|
34
|
+
if (!allowed.includes(key)) {
|
|
35
|
+
throw new Error(`Invalid ${path}: unknown field "${key}".`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function nonEmptyString(value, path) {
|
|
40
|
+
if (typeof value !== 'string' || value.trim() === '') {
|
|
41
|
+
throw new Error(`Invalid ${path}: expected a non-empty string.`);
|
|
42
|
+
}
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
function optionalText(value, path) {
|
|
46
|
+
return value === undefined ? undefined : nonEmptyString(value, path);
|
|
47
|
+
}
|
|
48
|
+
function optionalBoolean(value, path) {
|
|
49
|
+
if (value === undefined)
|
|
50
|
+
return undefined;
|
|
51
|
+
if (typeof value !== 'boolean') {
|
|
52
|
+
throw new Error(`Invalid ${path}: expected a boolean.`);
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
function finiteNumber(value, path) {
|
|
57
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
58
|
+
throw new Error(`Invalid ${path}: expected a finite number.`);
|
|
59
|
+
}
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
function nonNegativeInteger(value, path) {
|
|
63
|
+
const result = finiteNumber(value, path);
|
|
64
|
+
if (!Number.isInteger(result) || result < 0) {
|
|
65
|
+
throw new Error(`Invalid ${path}: expected a non-negative integer.`);
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
function normalizeStringValidation(value, path) {
|
|
70
|
+
const input = asObject(value, path);
|
|
71
|
+
assertAllowedKeys(input, path, ['minLength', 'maxLength', 'pattern', 'format']);
|
|
72
|
+
const minLength = input.minLength === undefined
|
|
73
|
+
? undefined
|
|
74
|
+
: nonNegativeInteger(input.minLength, `${path}.minLength`);
|
|
75
|
+
const maxLength = input.maxLength === undefined
|
|
76
|
+
? undefined
|
|
77
|
+
: nonNegativeInteger(input.maxLength, `${path}.maxLength`);
|
|
78
|
+
if (minLength !== undefined && maxLength !== undefined && minLength > maxLength) {
|
|
79
|
+
throw new Error(`Invalid ${path}: minLength must be less than or equal to maxLength.`);
|
|
80
|
+
}
|
|
81
|
+
if (input.pattern !== undefined && typeof input.pattern !== 'string') {
|
|
82
|
+
throw new Error(`Invalid ${path}.pattern: expected a string.`);
|
|
83
|
+
}
|
|
84
|
+
const pattern = input.pattern;
|
|
85
|
+
if (pattern !== undefined) {
|
|
86
|
+
try {
|
|
87
|
+
new RegExp(pattern, 'u');
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
throw new Error(`Invalid ${path}.pattern: expected a valid regular expression.`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const format = input.format === undefined
|
|
94
|
+
? undefined
|
|
95
|
+
: nonEmptyString(input.format, `${path}.format`);
|
|
96
|
+
if (format !== undefined && !STRING_FORMATS.has(format)) {
|
|
97
|
+
throw new Error(`Invalid ${path}.format: unsupported string format "${format}".`);
|
|
98
|
+
}
|
|
99
|
+
return { minLength, maxLength, pattern, format };
|
|
100
|
+
}
|
|
101
|
+
function normalizeNumberValidation(value, path) {
|
|
102
|
+
const input = asObject(value, path);
|
|
103
|
+
assertAllowedKeys(input, path, ['integer', 'minimum', 'maximum', 'multipleOf']);
|
|
104
|
+
const integer = optionalBoolean(input.integer, `${path}.integer`);
|
|
105
|
+
const minimum = input.minimum === undefined
|
|
106
|
+
? undefined
|
|
107
|
+
: finiteNumber(input.minimum, `${path}.minimum`);
|
|
108
|
+
const maximum = input.maximum === undefined
|
|
109
|
+
? undefined
|
|
110
|
+
: finiteNumber(input.maximum, `${path}.maximum`);
|
|
111
|
+
const multipleOf = input.multipleOf === undefined
|
|
112
|
+
? undefined
|
|
113
|
+
: finiteNumber(input.multipleOf, `${path}.multipleOf`);
|
|
114
|
+
if (minimum !== undefined && maximum !== undefined && minimum > maximum) {
|
|
115
|
+
throw new Error(`Invalid ${path}: minimum must be less than or equal to maximum.`);
|
|
116
|
+
}
|
|
117
|
+
if (multipleOf !== undefined && multipleOf <= 0) {
|
|
118
|
+
throw new Error(`Invalid ${path}.multipleOf: expected a number greater than zero.`);
|
|
119
|
+
}
|
|
120
|
+
return { integer, minimum, maximum, multipleOf };
|
|
121
|
+
}
|
|
122
|
+
function createIssue(code, field, message, property) {
|
|
123
|
+
return {
|
|
124
|
+
code,
|
|
125
|
+
path: property === undefined ? { field } : { field, property },
|
|
126
|
+
message,
|
|
127
|
+
recoverable: true,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function stringFormatMatches(value, format) {
|
|
131
|
+
if (format === 'identifier')
|
|
132
|
+
return IDENTIFIER_PATTERN.test(value);
|
|
133
|
+
if (format === 'slug')
|
|
134
|
+
return SLUG_PATTERN.test(value);
|
|
135
|
+
if (format === 'semver')
|
|
136
|
+
return SEMVER_PATTERN.test(value);
|
|
137
|
+
if (format === 'hostname')
|
|
138
|
+
return HOSTNAME_PATTERN.test(value);
|
|
139
|
+
if (format === 'email')
|
|
140
|
+
return EMAIL_PATTERN.test(value);
|
|
141
|
+
try {
|
|
142
|
+
const url = new URL(value);
|
|
143
|
+
return url.protocol.length > 1;
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function validateString(value, validation, field, property) {
|
|
150
|
+
if (typeof value !== 'string') {
|
|
151
|
+
return [createIssue('type', field, 'Expected a string.', property)];
|
|
152
|
+
}
|
|
153
|
+
const issues = [];
|
|
154
|
+
if (validation?.minLength !== undefined && [...value].length < validation.minLength) {
|
|
155
|
+
issues.push(createIssue('minLength', field, `Expected at least ${validation.minLength} characters.`, property));
|
|
156
|
+
}
|
|
157
|
+
if (validation?.maxLength !== undefined && [...value].length > validation.maxLength) {
|
|
158
|
+
issues.push(createIssue('maxLength', field, `Expected at most ${validation.maxLength} characters.`, property));
|
|
159
|
+
}
|
|
160
|
+
if (validation?.pattern !== undefined && !new RegExp(validation.pattern, 'u').test(value)) {
|
|
161
|
+
issues.push(createIssue('pattern', field, `Expected a value that matches ${validation.pattern}.`, property));
|
|
162
|
+
}
|
|
163
|
+
if (validation?.format !== undefined && !stringFormatMatches(value, validation.format)) {
|
|
164
|
+
issues.push(createIssue('format', field, `Expected ${validation.format} format.`, property));
|
|
165
|
+
}
|
|
166
|
+
return issues;
|
|
167
|
+
}
|
|
168
|
+
function validateNumber(value, validation, field, property) {
|
|
169
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
170
|
+
return [createIssue('type', field, 'Expected a finite number.', property)];
|
|
171
|
+
}
|
|
172
|
+
const issues = [];
|
|
173
|
+
if (validation?.integer === true && !Number.isInteger(value)) {
|
|
174
|
+
issues.push(createIssue('integer', field, 'Expected an integer.', property));
|
|
175
|
+
}
|
|
176
|
+
if (validation?.minimum !== undefined && value < validation.minimum) {
|
|
177
|
+
issues.push(createIssue('minimum', field, `Expected a number greater than or equal to ${validation.minimum}.`, property));
|
|
178
|
+
}
|
|
179
|
+
if (validation?.maximum !== undefined && value > validation.maximum) {
|
|
180
|
+
issues.push(createIssue('maximum', field, `Expected a number less than or equal to ${validation.maximum}.`, property));
|
|
181
|
+
}
|
|
182
|
+
if (validation?.multipleOf !== undefined
|
|
183
|
+
&& Math.abs(value / validation.multipleOf - Math.round(value / validation.multipleOf)) > 1e-9) {
|
|
184
|
+
issues.push(createIssue('multipleOf', field, `Expected a multiple of ${validation.multipleOf}.`, property));
|
|
185
|
+
}
|
|
186
|
+
return issues;
|
|
187
|
+
}
|
|
188
|
+
function validateScalarField(fieldDefinition, value, field, property, checkChoices = true) {
|
|
189
|
+
const issues = fieldDefinition.type === 'string'
|
|
190
|
+
? validateString(value, fieldDefinition.validation, field, property)
|
|
191
|
+
: fieldDefinition.type === 'number'
|
|
192
|
+
? validateNumber(value, fieldDefinition.validation, field, property)
|
|
193
|
+
: typeof value === 'boolean'
|
|
194
|
+
? []
|
|
195
|
+
: [createIssue('type', field, 'Expected a boolean.', property)];
|
|
196
|
+
if (checkChoices
|
|
197
|
+
&& issues.length === 0
|
|
198
|
+
&& fieldDefinition.choices?.allowCustom === false
|
|
199
|
+
&& matchPluginConfigPreset(fieldDefinition, value) === undefined) {
|
|
200
|
+
issues.push(createIssue('choice', field, 'Expected a declared preset value.', property));
|
|
201
|
+
}
|
|
202
|
+
return issues;
|
|
203
|
+
}
|
|
204
|
+
function validateObjectField(fieldDefinition, value, field, checkChoices = true) {
|
|
205
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
206
|
+
return [createIssue('type', field, 'Expected an object.')];
|
|
207
|
+
}
|
|
208
|
+
const input = value;
|
|
209
|
+
const keys = Object.keys(input);
|
|
210
|
+
const issues = [];
|
|
211
|
+
if (keys.length > MAX_OBJECT_PROPERTIES) {
|
|
212
|
+
issues.push(createIssue('maxProperties', field, `Expected at most ${MAX_OBJECT_PROPERTIES} properties.`));
|
|
213
|
+
}
|
|
214
|
+
if (fieldDefinition.validation?.minProperties !== undefined
|
|
215
|
+
&& keys.length < fieldDefinition.validation.minProperties) {
|
|
216
|
+
issues.push(createIssue('minProperties', field, `Expected at least ${fieldDefinition.validation.minProperties} properties.`));
|
|
217
|
+
}
|
|
218
|
+
if (fieldDefinition.validation?.maxProperties !== undefined
|
|
219
|
+
&& keys.length > fieldDefinition.validation.maxProperties) {
|
|
220
|
+
issues.push(createIssue('maxProperties', field, `Expected at most ${fieldDefinition.validation.maxProperties} properties.`));
|
|
221
|
+
}
|
|
222
|
+
for (const [property, child] of Object.entries(fieldDefinition.properties ?? {})) {
|
|
223
|
+
if (child.required === true && !Object.hasOwn(input, property)) {
|
|
224
|
+
issues.push(createIssue('required', field, 'Required property is missing.', property));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
for (const [property, childValue] of Object.entries(input)) {
|
|
228
|
+
if (isDangerousConfigKey(property)) {
|
|
229
|
+
issues.push(createIssue('dangerousKey', field, 'Dangerous config key is not allowed.', property));
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
const child = ownProperty(fieldDefinition.properties, property);
|
|
233
|
+
if (child !== undefined) {
|
|
234
|
+
issues.push(...validateScalarField(child, childValue, field, property));
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const dynamicChild = fieldDefinition.additionalProperties;
|
|
238
|
+
if (dynamicChild === undefined || dynamicChild === false) {
|
|
239
|
+
issues.push(createIssue('additionalProperty', field, 'Additional property is not allowed.', property));
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (fieldDefinition.validation?.key !== undefined) {
|
|
243
|
+
issues.push(...validateString(property, fieldDefinition.validation.key, field, property));
|
|
244
|
+
}
|
|
245
|
+
issues.push(...validateScalarField(dynamicChild, childValue, field, property));
|
|
246
|
+
}
|
|
247
|
+
if (checkChoices
|
|
248
|
+
&& issues.length === 0
|
|
249
|
+
&& fieldDefinition.choices?.allowCustom === false
|
|
250
|
+
&& matchPluginConfigPreset(fieldDefinition, input) === undefined) {
|
|
251
|
+
issues.push(createIssue('choice', field, 'Expected a declared preset value.'));
|
|
252
|
+
}
|
|
253
|
+
return issues;
|
|
254
|
+
}
|
|
255
|
+
function resolveValueArguments(first, second, third) {
|
|
256
|
+
if (typeof first === 'string') {
|
|
257
|
+
return {
|
|
258
|
+
field: first,
|
|
259
|
+
definition: second,
|
|
260
|
+
value: third,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
return {
|
|
264
|
+
definition: first,
|
|
265
|
+
value: second,
|
|
266
|
+
field: typeof third === 'string' ? third : 'value',
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
export function validatePluginConfigValue(first, second, third) {
|
|
270
|
+
const resolved = resolveValueArguments(first, second, third);
|
|
271
|
+
return resolved.definition.type === 'object'
|
|
272
|
+
? validateObjectField(resolved.definition, resolved.value, resolved.field)
|
|
273
|
+
: validateScalarField(resolved.definition, resolved.value, resolved.field);
|
|
274
|
+
}
|
|
275
|
+
export function validatePluginConfigDocument(definition, value) {
|
|
276
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
277
|
+
return [createIssue('type', '$document', 'Expected a config object.')];
|
|
278
|
+
}
|
|
279
|
+
const input = value;
|
|
280
|
+
const issues = [];
|
|
281
|
+
for (const [field, fieldDefinition] of Object.entries(definition.fields)) {
|
|
282
|
+
if (!Object.hasOwn(input, field)) {
|
|
283
|
+
if (fieldDefinition.required === true) {
|
|
284
|
+
issues.push(createIssue('required', field, 'Required field is missing.'));
|
|
285
|
+
}
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
issues.push(...validatePluginConfigValue(fieldDefinition, input[field], field));
|
|
289
|
+
}
|
|
290
|
+
for (const field of Object.keys(input)) {
|
|
291
|
+
if (isDangerousConfigKey(field)) {
|
|
292
|
+
issues.push(createIssue('dangerousKey', field, 'Dangerous config key is not allowed.'));
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
if (!Object.hasOwn(definition.fields, field)) {
|
|
296
|
+
issues.push(createIssue('unknownField', field, 'Unknown config field.'));
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return issues;
|
|
300
|
+
}
|
|
301
|
+
export function canonicalizePluginConfigValue(value) {
|
|
302
|
+
if (typeof value !== 'object')
|
|
303
|
+
return value;
|
|
304
|
+
return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0));
|
|
305
|
+
}
|
|
306
|
+
export function canonicalizePluginConfigValues(values) {
|
|
307
|
+
return Object.fromEntries(Object.entries(values)
|
|
308
|
+
.sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0)
|
|
309
|
+
.map(([key, value]) => [key, canonicalizePluginConfigValue(value)]));
|
|
310
|
+
}
|
|
311
|
+
export function stablePluginConfigStringify(value) {
|
|
312
|
+
return JSON.stringify(canonicalizePluginConfigValue(value));
|
|
313
|
+
}
|
|
314
|
+
export function matchPluginConfigPreset(definition, value) {
|
|
315
|
+
return definition.choices?.presets.find((preset) => stablePluginConfigStringify(preset.value) === stablePluginConfigStringify(value));
|
|
316
|
+
}
|
|
317
|
+
export function validatePluginConfigPreset(definition, preset, field = 'value') {
|
|
318
|
+
return definition.type === 'object'
|
|
319
|
+
? validateObjectField(definition, preset.value, field, false)
|
|
320
|
+
: validateScalarField(definition, preset.value, field, undefined, false);
|
|
321
|
+
}
|
|
322
|
+
export function redactPluginConfigValue(definition, value) {
|
|
323
|
+
if (definition.sensitive === true)
|
|
324
|
+
return '[redacted]';
|
|
325
|
+
if (definition.type !== 'object' || typeof value !== 'object')
|
|
326
|
+
return value;
|
|
327
|
+
const redacted = createPropertyMap();
|
|
328
|
+
for (const [property, childValue] of Object.entries(value)) {
|
|
329
|
+
const child = ownProperty(definition.properties, property) ?? (definition.additionalProperties === false ? undefined : definition.additionalProperties);
|
|
330
|
+
redacted[property] = child?.sensitive === true ? '[redacted]' : childValue;
|
|
331
|
+
}
|
|
332
|
+
return redacted;
|
|
333
|
+
}
|
|
334
|
+
export function formatPluginConfigIssue(issue) {
|
|
335
|
+
const path = issue.path.property === undefined
|
|
336
|
+
? issue.path.field
|
|
337
|
+
: `${issue.path.field}.${issue.path.property}`;
|
|
338
|
+
return `${path}: ${issue.message}`;
|
|
339
|
+
}
|
|
340
|
+
function normalizePreset(value, path) {
|
|
341
|
+
const input = asObject(value, path);
|
|
342
|
+
assertAllowedKeys(input, path, ['id', 'title', 'description', 'value', 'recommended']);
|
|
343
|
+
if (!Object.hasOwn(input, 'value')) {
|
|
344
|
+
throw new Error(`Invalid ${path}.value: value is required.`);
|
|
345
|
+
}
|
|
346
|
+
if (input.recommended !== undefined && input.recommended !== true) {
|
|
347
|
+
throw new Error(`Invalid ${path}.recommended: expected true.`);
|
|
348
|
+
}
|
|
349
|
+
return {
|
|
350
|
+
id: nonEmptyString(input.id, `${path}.id`),
|
|
351
|
+
title: nonEmptyString(input.title, `${path}.title`),
|
|
352
|
+
description: optionalText(input.description, `${path}.description`),
|
|
353
|
+
value: input.value,
|
|
354
|
+
recommended: input.recommended,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
function normalizeChoices(value, path) {
|
|
358
|
+
const input = asObject(value, path);
|
|
359
|
+
assertAllowedKeys(input, path, ['allowCustom', 'presets']);
|
|
360
|
+
if (typeof input.allowCustom !== 'boolean') {
|
|
361
|
+
throw new Error(`Invalid ${path}.allowCustom: expected a boolean.`);
|
|
362
|
+
}
|
|
363
|
+
if (!Array.isArray(input.presets)) {
|
|
364
|
+
throw new Error(`Invalid ${path}.presets: expected an array.`);
|
|
365
|
+
}
|
|
366
|
+
return {
|
|
367
|
+
allowCustom: input.allowCustom,
|
|
368
|
+
presets: input.presets.map((preset, index) => normalizePreset(preset, `${path}.presets[${index}]`)),
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
function normalizeScalarField(value, path, options) {
|
|
372
|
+
const input = asObject(value, path);
|
|
373
|
+
const type = nonEmptyString(input.type, `${path}.type`);
|
|
374
|
+
if (type !== 'string' && type !== 'number' && type !== 'boolean') {
|
|
375
|
+
throw new Error(`Invalid ${path}.type: expected string, number, or boolean.`);
|
|
376
|
+
}
|
|
377
|
+
const allowed = ['type', 'title', 'description', 'sensitive'];
|
|
378
|
+
if (options.allowDefault)
|
|
379
|
+
allowed.push('default');
|
|
380
|
+
if (options.allowRequired)
|
|
381
|
+
allowed.push('required');
|
|
382
|
+
allowed.push('choices');
|
|
383
|
+
if (type !== 'boolean')
|
|
384
|
+
allowed.push('validation');
|
|
385
|
+
assertAllowedKeys(input, path, allowed);
|
|
386
|
+
const common = {
|
|
387
|
+
title: optionalText(input.title, `${path}.title`),
|
|
388
|
+
description: optionalText(input.description, `${path}.description`),
|
|
389
|
+
required: options.allowRequired ? optionalBoolean(input.required, `${path}.required`) : undefined,
|
|
390
|
+
sensitive: optionalBoolean(input.sensitive, `${path}.sensitive`),
|
|
391
|
+
};
|
|
392
|
+
const defaultValue = options.allowDefault && input.default !== undefined
|
|
393
|
+
? input.default
|
|
394
|
+
: undefined;
|
|
395
|
+
if (type === 'string') {
|
|
396
|
+
return {
|
|
397
|
+
type,
|
|
398
|
+
...common,
|
|
399
|
+
default: defaultValue,
|
|
400
|
+
choices: input.choices === undefined
|
|
401
|
+
? undefined
|
|
402
|
+
: normalizeChoices(input.choices, `${path}.choices`),
|
|
403
|
+
validation: input.validation === undefined
|
|
404
|
+
? undefined
|
|
405
|
+
: normalizeStringValidation(input.validation, `${path}.validation`),
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
if (type === 'number') {
|
|
409
|
+
return {
|
|
410
|
+
type,
|
|
411
|
+
...common,
|
|
412
|
+
default: defaultValue,
|
|
413
|
+
choices: input.choices === undefined
|
|
414
|
+
? undefined
|
|
415
|
+
: normalizeChoices(input.choices, `${path}.choices`),
|
|
416
|
+
validation: input.validation === undefined
|
|
417
|
+
? undefined
|
|
418
|
+
: normalizeNumberValidation(input.validation, `${path}.validation`),
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
return {
|
|
422
|
+
type,
|
|
423
|
+
...common,
|
|
424
|
+
default: defaultValue,
|
|
425
|
+
choices: input.choices === undefined
|
|
426
|
+
? undefined
|
|
427
|
+
: normalizeChoices(input.choices, `${path}.choices`),
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
function assertChoices(definition, path) {
|
|
431
|
+
if (definition.choices === undefined)
|
|
432
|
+
return;
|
|
433
|
+
if (definition.choices.allowCustom === false && definition.choices.presets.length === 0) {
|
|
434
|
+
throw new Error(`Invalid ${path}.choices.presets: expected at least one preset when allowCustom is false.`);
|
|
435
|
+
}
|
|
436
|
+
const ids = new Set();
|
|
437
|
+
const values = new Set();
|
|
438
|
+
let recommendedCount = 0;
|
|
439
|
+
for (const [index, preset] of definition.choices.presets.entries()) {
|
|
440
|
+
if (ids.has(preset.id)) {
|
|
441
|
+
throw new Error(`Invalid ${path}.choices.presets[${index}].id: duplicate preset id "${preset.id}".`);
|
|
442
|
+
}
|
|
443
|
+
ids.add(preset.id);
|
|
444
|
+
const canonicalValue = stablePluginConfigStringify(preset.value);
|
|
445
|
+
if (values.has(canonicalValue)) {
|
|
446
|
+
throw new Error(`Invalid ${path}.choices.presets[${index}].value: duplicate preset value.`);
|
|
447
|
+
}
|
|
448
|
+
values.add(canonicalValue);
|
|
449
|
+
if (preset.recommended === true)
|
|
450
|
+
recommendedCount += 1;
|
|
451
|
+
const issues = validatePluginConfigPreset(definition, preset, path);
|
|
452
|
+
if (issues.length > 0) {
|
|
453
|
+
throw new Error(`Invalid ${path}.choices.presets[${index}].value: ${formatPluginConfigIssue(issues[0])}`);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
if (recommendedCount > 1) {
|
|
457
|
+
throw new Error(`Invalid ${path}.choices: expected at most one recommended preset.`);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
function normalizeObjectField(value, path) {
|
|
461
|
+
const input = asObject(value, path);
|
|
462
|
+
assertAllowedKeys(input, path, [
|
|
463
|
+
'type',
|
|
464
|
+
'title',
|
|
465
|
+
'description',
|
|
466
|
+
'default',
|
|
467
|
+
'required',
|
|
468
|
+
'sensitive',
|
|
469
|
+
'choices',
|
|
470
|
+
'properties',
|
|
471
|
+
'additionalProperties',
|
|
472
|
+
'validation',
|
|
473
|
+
]);
|
|
474
|
+
if (input.properties === undefined && (input.additionalProperties === undefined || input.additionalProperties === false)) {
|
|
475
|
+
throw new Error(`Invalid ${path}: key-value object config requires a scalar additionalProperties field.`);
|
|
476
|
+
}
|
|
477
|
+
if (input.properties !== undefined && input.additionalProperties !== undefined && input.additionalProperties !== false) {
|
|
478
|
+
throw new Error(`Invalid ${path}: fixed and key-value object config modes cannot be mixed.`);
|
|
479
|
+
}
|
|
480
|
+
let properties;
|
|
481
|
+
if (input.properties !== undefined) {
|
|
482
|
+
const propertiesInput = asObject(input.properties, `${path}.properties`);
|
|
483
|
+
if (Object.keys(propertiesInput).length > MAX_OBJECT_PROPERTIES) {
|
|
484
|
+
throw new Error(`Invalid ${path}.properties: expected at most ${MAX_OBJECT_PROPERTIES} properties.`);
|
|
485
|
+
}
|
|
486
|
+
properties = createPropertyMap();
|
|
487
|
+
for (const [property, child] of Object.entries(propertiesInput)) {
|
|
488
|
+
if (isDangerousConfigKey(property)) {
|
|
489
|
+
throw new Error(`Invalid ${path}.properties: dangerous config key "${property}" is not allowed.`);
|
|
490
|
+
}
|
|
491
|
+
properties[property] = normalizeScalarField(child, `${path}.properties.${property}`, {
|
|
492
|
+
allowDefault: false,
|
|
493
|
+
allowRequired: true,
|
|
494
|
+
});
|
|
495
|
+
assertChoices(properties[property], `${path}.properties.${property}`);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
let additionalProperties;
|
|
499
|
+
if (input.additionalProperties === undefined || input.additionalProperties === false) {
|
|
500
|
+
additionalProperties = false;
|
|
501
|
+
}
|
|
502
|
+
else {
|
|
503
|
+
additionalProperties = normalizeScalarField(input.additionalProperties, `${path}.additionalProperties`, { allowDefault: false, allowRequired: false });
|
|
504
|
+
assertChoices(additionalProperties, `${path}.additionalProperties`);
|
|
505
|
+
}
|
|
506
|
+
let validation;
|
|
507
|
+
if (input.validation !== undefined) {
|
|
508
|
+
const validationInput = asObject(input.validation, `${path}.validation`);
|
|
509
|
+
assertAllowedKeys(validationInput, `${path}.validation`, ['minProperties', 'maxProperties', 'key']);
|
|
510
|
+
const minProperties = validationInput.minProperties === undefined
|
|
511
|
+
? undefined
|
|
512
|
+
: nonNegativeInteger(validationInput.minProperties, `${path}.validation.minProperties`);
|
|
513
|
+
const maxProperties = validationInput.maxProperties === undefined
|
|
514
|
+
? undefined
|
|
515
|
+
: nonNegativeInteger(validationInput.maxProperties, `${path}.validation.maxProperties`);
|
|
516
|
+
if (minProperties !== undefined && minProperties > MAX_OBJECT_PROPERTIES) {
|
|
517
|
+
throw new Error(`Invalid ${path}.validation.minProperties: expected at most ${MAX_OBJECT_PROPERTIES}.`);
|
|
518
|
+
}
|
|
519
|
+
if (maxProperties !== undefined && maxProperties > MAX_OBJECT_PROPERTIES) {
|
|
520
|
+
throw new Error(`Invalid ${path}.validation.maxProperties: expected at most ${MAX_OBJECT_PROPERTIES}.`);
|
|
521
|
+
}
|
|
522
|
+
if (minProperties !== undefined && maxProperties !== undefined && minProperties > maxProperties) {
|
|
523
|
+
throw new Error(`Invalid ${path}.validation: minProperties must be less than or equal to maxProperties.`);
|
|
524
|
+
}
|
|
525
|
+
validation = {
|
|
526
|
+
minProperties,
|
|
527
|
+
maxProperties,
|
|
528
|
+
key: validationInput.key === undefined
|
|
529
|
+
? undefined
|
|
530
|
+
: normalizeStringValidation(validationInput.key, `${path}.validation.key`),
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
return {
|
|
534
|
+
type: 'object',
|
|
535
|
+
title: optionalText(input.title, `${path}.title`),
|
|
536
|
+
description: optionalText(input.description, `${path}.description`),
|
|
537
|
+
default: input.default,
|
|
538
|
+
required: optionalBoolean(input.required, `${path}.required`),
|
|
539
|
+
sensitive: optionalBoolean(input.sensitive, `${path}.sensitive`),
|
|
540
|
+
choices: input.choices === undefined
|
|
541
|
+
? undefined
|
|
542
|
+
: normalizeChoices(input.choices, `${path}.choices`),
|
|
543
|
+
...(properties === undefined
|
|
544
|
+
? { additionalProperties: additionalProperties }
|
|
545
|
+
: { properties, additionalProperties: false }),
|
|
546
|
+
validation,
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
export function normalizePluginConfigDefinition(value, path = 'config') {
|
|
550
|
+
const input = asObject(value, path);
|
|
551
|
+
assertAllowedKeys(input, path, ['fields', 'presentation']);
|
|
552
|
+
const fieldsInput = asObject(input.fields, `${path}.fields`);
|
|
553
|
+
const fields = createPropertyMap();
|
|
554
|
+
for (const [field, rawDefinition] of Object.entries(fieldsInput)) {
|
|
555
|
+
if (!CONFIG_KEY_PATTERN.test(field) || isDangerousConfigKey(field)) {
|
|
556
|
+
throw new Error(`Invalid ${path}.fields: config key "${field}" is not valid.`);
|
|
557
|
+
}
|
|
558
|
+
const rawField = asObject(rawDefinition, `${path}.fields.${field}`);
|
|
559
|
+
const definition = rawField.type === 'object'
|
|
560
|
+
? normalizeObjectField(rawField, `${path}.fields.${field}`)
|
|
561
|
+
: normalizeScalarField(rawField, `${path}.fields.${field}`, {
|
|
562
|
+
allowDefault: true,
|
|
563
|
+
allowRequired: true,
|
|
564
|
+
});
|
|
565
|
+
assertChoices(definition, `${path}.fields.${field}`);
|
|
566
|
+
if (definition.default !== undefined) {
|
|
567
|
+
const issues = validatePluginConfigValue(definition, definition.default, field);
|
|
568
|
+
if (issues.length > 0) {
|
|
569
|
+
throw new Error(`Invalid ${path}.fields.${field}.default: ${formatPluginConfigIssue(issues[0])}`);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
fields[field] = definition;
|
|
573
|
+
}
|
|
574
|
+
let presentation;
|
|
575
|
+
if (input.presentation !== undefined) {
|
|
576
|
+
const presentationInput = asObject(input.presentation, `${path}.presentation`);
|
|
577
|
+
assertAllowedKeys(presentationInput, `${path}.presentation`, ['groups']);
|
|
578
|
+
if (presentationInput.groups !== undefined && !Array.isArray(presentationInput.groups)) {
|
|
579
|
+
throw new Error(`Invalid ${path}.presentation.groups: expected an array.`);
|
|
580
|
+
}
|
|
581
|
+
const groupIds = new Set();
|
|
582
|
+
const groupedFields = new Set();
|
|
583
|
+
presentation = {
|
|
584
|
+
groups: presentationInput.groups?.map((rawGroup, index) => {
|
|
585
|
+
const groupPath = `${path}.presentation.groups[${index}]`;
|
|
586
|
+
const group = asObject(rawGroup, groupPath);
|
|
587
|
+
assertAllowedKeys(group, groupPath, ['id', 'title', 'description', 'fields', 'advanced']);
|
|
588
|
+
const id = nonEmptyString(group.id, `${groupPath}.id`);
|
|
589
|
+
if (groupIds.has(id)) {
|
|
590
|
+
throw new Error(`Invalid ${groupPath}.id: duplicate group id "${id}".`);
|
|
591
|
+
}
|
|
592
|
+
groupIds.add(id);
|
|
593
|
+
if (!Array.isArray(group.fields)) {
|
|
594
|
+
throw new Error(`Invalid ${groupPath}.fields: expected an array.`);
|
|
595
|
+
}
|
|
596
|
+
const groupFields = group.fields.map((entry, fieldIndex) => {
|
|
597
|
+
const field = nonEmptyString(entry, `${groupPath}.fields[${fieldIndex}]`);
|
|
598
|
+
if (!Object.hasOwn(fields, field)) {
|
|
599
|
+
throw new Error(`Invalid ${groupPath}.fields[${fieldIndex}]: unknown config key "${field}".`);
|
|
600
|
+
}
|
|
601
|
+
if (groupedFields.has(field)) {
|
|
602
|
+
throw new Error(`Invalid ${groupPath}.fields[${fieldIndex}]: config key "${field}" is assigned to more than one group.`);
|
|
603
|
+
}
|
|
604
|
+
groupedFields.add(field);
|
|
605
|
+
return field;
|
|
606
|
+
});
|
|
607
|
+
return {
|
|
608
|
+
id,
|
|
609
|
+
title: nonEmptyString(group.title, `${groupPath}.title`),
|
|
610
|
+
description: optionalText(group.description, `${groupPath}.description`),
|
|
611
|
+
fields: groupFields,
|
|
612
|
+
advanced: optionalBoolean(group.advanced, `${groupPath}.advanced`),
|
|
613
|
+
};
|
|
614
|
+
}),
|
|
615
|
+
};
|
|
616
|
+
}
|
|
617
|
+
return { fields, presentation };
|
|
618
|
+
}
|
|
619
|
+
//# sourceMappingURL=plugin-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-config.js","sourceRoot":"","sources":["../src/plugin-config.ts"],"names":[],"mappings":"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"}
|