@clidoc/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +69 -0
- package/THIRD_PARTY_NOTICES.md +25 -0
- package/dist/completion.d.ts +10 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +255 -0
- package/dist/completion.js.map +1 -0
- package/dist/discovery.d.ts +11 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +42 -0
- package/dist/discovery.js.map +1 -0
- package/dist/docgen.d.ts +22 -0
- package/dist/docgen.d.ts.map +1 -0
- package/dist/docgen.js +44 -0
- package/dist/docgen.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +326 -0
- package/dist/index.js.map +1 -0
- package/dist/logical.d.ts +9 -0
- package/dist/logical.d.ts.map +1 -0
- package/dist/logical.js +112 -0
- package/dist/logical.js.map +1 -0
- package/dist/merge.d.ts +44 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +59 -0
- package/dist/merge.js.map +1 -0
- package/dist/schema.d.ts +2 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +393 -0
- package/dist/schema.js.map +1 -0
- package/dist/types.d.ts +131 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +63 -0
- package/schema/spec.schema.json +537 -0
- package/src/completion.ts +285 -0
- package/src/discovery.ts +45 -0
- package/src/docgen.ts +61 -0
- package/src/index.ts +359 -0
- package/src/logical.ts +158 -0
- package/src/merge.ts +96 -0
- package/src/schema.ts +433 -0
- package/src/types.ts +105 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
export * from './discovery.js';
|
|
3
|
+
export * from './merge.js';
|
|
4
|
+
export * from './docgen.js';
|
|
5
|
+
export * from './completion.js';
|
|
6
|
+
import { Ajv2020 } from 'ajv/dist/2020.js';
|
|
7
|
+
import * as formatsModule from 'ajv-formats';
|
|
8
|
+
import { parse as parseYaml } from 'yaml';
|
|
9
|
+
import { schema } from './schema.js';
|
|
10
|
+
import { logicalErrors } from './logical.js';
|
|
11
|
+
/** Supported version of the vendored OpenCLI schema. */
|
|
12
|
+
export const OPENCLI_VERSION = '1.0.0-alpha.14';
|
|
13
|
+
/** Vendored JSON Schema used to validate OpenCLI documents. */
|
|
14
|
+
export const openCliSchema = schema;
|
|
15
|
+
const ajv = new Ajv2020({ allErrors: true, strict: false });
|
|
16
|
+
formatsModule.default(ajv);
|
|
17
|
+
const check = ajv.compile(schema);
|
|
18
|
+
/** Validate against the exact vendored upstream JSON Schema, plus upstream's logical checks. */
|
|
19
|
+
export function validate(document) {
|
|
20
|
+
const schemaValid = check(document);
|
|
21
|
+
if (!schemaValid) {
|
|
22
|
+
return {
|
|
23
|
+
valid: false,
|
|
24
|
+
errors: (check.errors ?? []).map((error) => `${error.instancePath || '/'} ${error.message ?? 'is invalid'}`),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const errors = logicalErrors(document);
|
|
28
|
+
return { valid: errors.length === 0, errors };
|
|
29
|
+
}
|
|
30
|
+
/** Parse JSON or YAML and reject documents that do not match the specification. */
|
|
31
|
+
export function parse(input, options = {}) {
|
|
32
|
+
const looksLikeJson = /^\s*[{[]/.test(input);
|
|
33
|
+
const format = options.format ?? (looksLikeJson ? 'json' : 'yaml');
|
|
34
|
+
let document;
|
|
35
|
+
if (format === 'json') {
|
|
36
|
+
try {
|
|
37
|
+
document = JSON.parse(input);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
throw new Error(`Invalid OpenCLI JSON: ${error instanceof Error ? error.message : String(error)}`, {
|
|
41
|
+
cause: error,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
try {
|
|
47
|
+
document = parseYaml(input, { uniqueKeys: true });
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw new Error(`Invalid OpenCLI YAML: ${error instanceof Error ? error.message : String(error)}`, {
|
|
51
|
+
cause: error,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const result = validate(document);
|
|
56
|
+
if (!result.valid)
|
|
57
|
+
throw new Error(`Invalid OpenCLI document: ${result.errors.join('; ')}`);
|
|
58
|
+
return document;
|
|
59
|
+
}
|
|
60
|
+
const heading = (level, text) => `${'#'.repeat(level)} ${text}\n\n`;
|
|
61
|
+
const escapeCell = (value) => String(value).replace(/\|/g, '\\|').replace(/\r?\n/g, ' ');
|
|
62
|
+
function code(value) {
|
|
63
|
+
const longest = Math.max(0, ...Array.from(value.matchAll(/`+/g), (match) => match[0].length));
|
|
64
|
+
const delim = '`'.repeat(longest + 1);
|
|
65
|
+
const padded = value.startsWith('`') || value.endsWith('`') ? ` ${value} ` : value;
|
|
66
|
+
return `${delim}${padded}${delim}`;
|
|
67
|
+
}
|
|
68
|
+
const values = (choices) => choices
|
|
69
|
+
.map((choice) => (choice.description ? `${choice.value} (${choice.description})` : String(choice.value)))
|
|
70
|
+
.join(', ');
|
|
71
|
+
const details = (item) => {
|
|
72
|
+
const parts = [item.description ?? item.summary ?? ''];
|
|
73
|
+
if (item.aliases?.length)
|
|
74
|
+
parts.push(`Aliases: ${item.aliases.map(code).join(', ')}`);
|
|
75
|
+
if (item.variadic)
|
|
76
|
+
parts.push(`Variadic${item.minItems === undefined ? '' : ` (min ${item.minItems})`}${item.maxItems === undefined ? '' : ` (max ${item.maxItems})`}`);
|
|
77
|
+
if (item.choices?.length)
|
|
78
|
+
parts.push(`Choices: ${values(item.choices)}`);
|
|
79
|
+
if (item.default !== undefined)
|
|
80
|
+
parts.push(`Default: ${code(String(item.default))}`);
|
|
81
|
+
if (item.hint)
|
|
82
|
+
parts.push(`Hint: ${item.hint}`);
|
|
83
|
+
if (item.passthrough)
|
|
84
|
+
parts.push('Passthrough');
|
|
85
|
+
if (item.alternativeSources?.length)
|
|
86
|
+
parts.push(item.alternativeSources
|
|
87
|
+
.map((source) => `${source.type === '$ENV' ? 'Env' : 'File'}: ${code(source.property)}`)
|
|
88
|
+
.join(', '));
|
|
89
|
+
return parts.filter(Boolean).join('; ');
|
|
90
|
+
};
|
|
91
|
+
function table(headers, rows) {
|
|
92
|
+
if (!rows.length)
|
|
93
|
+
return '';
|
|
94
|
+
return `| ${headers.join(' | ')} |\n| ${headers.map(() => '---').join(' | ')} |\n${rows.map((row) => `| ${row.map(escapeCell).join(' | ')} |`).join('\n')}\n\n`;
|
|
95
|
+
}
|
|
96
|
+
function fenced(content, language = 'sh') {
|
|
97
|
+
const longest = Math.max(0, ...Array.from(content.matchAll(/`+/g), (match) => match[0].length));
|
|
98
|
+
const fence = '`'.repeat(Math.max(3, longest + 1));
|
|
99
|
+
return `${fence}${language}\n${content}\n${fence}\n\n`;
|
|
100
|
+
}
|
|
101
|
+
function placeholder(name, hint) {
|
|
102
|
+
const value = hint?.trim();
|
|
103
|
+
if (value?.startsWith('<') && value.endsWith('>'))
|
|
104
|
+
return value;
|
|
105
|
+
return `<${value || name}>`;
|
|
106
|
+
}
|
|
107
|
+
function repeatable(token, required) {
|
|
108
|
+
return required ? `${token} [${token}]...` : `[${token}]...`;
|
|
109
|
+
}
|
|
110
|
+
function renderArgumentUsage(arg) {
|
|
111
|
+
const token = placeholder(arg.name);
|
|
112
|
+
const required = Boolean(arg.required || (arg.minItems ?? 0) > 0);
|
|
113
|
+
if (arg.passthrough) {
|
|
114
|
+
const operand = `${token}${arg.variadic ? '...' : ''}`;
|
|
115
|
+
return required ? `-- ${operand}` : `[-- ${operand}]`;
|
|
116
|
+
}
|
|
117
|
+
if (arg.variadic)
|
|
118
|
+
return required ? `${token}...` : `[${token}...]`;
|
|
119
|
+
return required ? token : `[${token}]`;
|
|
120
|
+
}
|
|
121
|
+
function renderFlagUsage(flag) {
|
|
122
|
+
const token = `--${flag.name}${flag.type === 'boolean' ? '' : ` ${placeholder(flag.name, flag.hint)}`}`;
|
|
123
|
+
const required = Boolean(flag.required || (flag.minItems ?? 0) > 0);
|
|
124
|
+
if (flag.variadic)
|
|
125
|
+
return repeatable(token, required);
|
|
126
|
+
return required ? token : `[${token}]`;
|
|
127
|
+
}
|
|
128
|
+
function commandInvocation(name, binary) {
|
|
129
|
+
const parts = [];
|
|
130
|
+
const allParts = name.trim().split(/\s+/);
|
|
131
|
+
for (const part of allParts) {
|
|
132
|
+
if (part === '--' || ['<', '{', '['].some((marker) => part.includes(marker)))
|
|
133
|
+
break;
|
|
134
|
+
parts.push(part);
|
|
135
|
+
}
|
|
136
|
+
const relative = parts.join(' ');
|
|
137
|
+
const command = !binary || relative === binary || relative.startsWith(`${binary} `) ? relative : `${binary} ${relative}`;
|
|
138
|
+
return { command, syntax: allParts.slice(parts.length) };
|
|
139
|
+
}
|
|
140
|
+
function renderUsage(name, command, binary, globalFlags) {
|
|
141
|
+
const combinedFlags = new Map(globalFlags.map((flag) => [flag.name, flag]));
|
|
142
|
+
for (const flag of command.flags ?? [])
|
|
143
|
+
combinedFlags.set(flag.name, flag);
|
|
144
|
+
const flags = [...combinedFlags.values()].filter((flag) => !flag.hidden).map(renderFlagUsage);
|
|
145
|
+
const args = (command.args ?? []).map(renderArgumentUsage);
|
|
146
|
+
const invocation = commandInvocation(name, binary);
|
|
147
|
+
const legacyArgs = args.length
|
|
148
|
+
? []
|
|
149
|
+
: invocation.syntax.filter((part) => !/^\[?flags\]?$/.test(part) && !/^\{commands?\}$/.test(part));
|
|
150
|
+
const legacyFlags = combinedFlags.size ? [] : invocation.syntax.filter((part) => /^\[?flags\]?$/.test(part));
|
|
151
|
+
const operands = [...legacyArgs, ...args];
|
|
152
|
+
const options = [...legacyFlags, ...flags];
|
|
153
|
+
const optionTerminated = (command.args ?? []).some((arg) => arg.passthrough) || legacyArgs.includes('--');
|
|
154
|
+
return (heading(3, 'Usage') +
|
|
155
|
+
fenced([invocation.command, ...(optionTerminated ? options : operands), ...(optionTerminated ? operands : options)].join(' ')));
|
|
156
|
+
}
|
|
157
|
+
function renderCommand(name, command, binary = '', globalFlags = []) {
|
|
158
|
+
let out = heading(2, name);
|
|
159
|
+
if (command.summary)
|
|
160
|
+
out += `${command.summary}\n\n`;
|
|
161
|
+
if (command.description)
|
|
162
|
+
out += `${command.description}\n\n`;
|
|
163
|
+
if (command.aliases?.length)
|
|
164
|
+
out += `Aliases: ${command.aliases.map(code).join(', ')}\n\n`;
|
|
165
|
+
if (command.kind === 'group')
|
|
166
|
+
out += 'Command group\n\n';
|
|
167
|
+
out += renderUsage(name, command, binary, globalFlags);
|
|
168
|
+
out += table(['Argument', 'Type', 'Required', 'Description'], (command.args ?? []).map((arg) => [
|
|
169
|
+
code(arg.name),
|
|
170
|
+
arg.type ?? 'string',
|
|
171
|
+
arg.required || (arg.minItems ?? 0) > 0 ? 'Yes' : 'No',
|
|
172
|
+
details(arg),
|
|
173
|
+
]));
|
|
174
|
+
out += renderFlags(command.flags ?? []);
|
|
175
|
+
out += renderExitCodes(command.exitCodes ?? []);
|
|
176
|
+
if (command.examples?.length) {
|
|
177
|
+
out += heading(3, 'Examples');
|
|
178
|
+
for (const example of command.examples) {
|
|
179
|
+
if (example.title)
|
|
180
|
+
out += heading(4, example.title);
|
|
181
|
+
out += fenced(example.content);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return out;
|
|
185
|
+
}
|
|
186
|
+
function renderFlags(flags) {
|
|
187
|
+
return table(['Flag', 'Type', 'Required', 'Description'], flags
|
|
188
|
+
.filter((flag) => !flag.hidden)
|
|
189
|
+
.map((flag) => [
|
|
190
|
+
code(`--${flag.name}`),
|
|
191
|
+
flag.type,
|
|
192
|
+
flag.required || (flag.minItems ?? 0) > 0 ? 'Yes' : 'No',
|
|
193
|
+
details(flag),
|
|
194
|
+
]));
|
|
195
|
+
}
|
|
196
|
+
function renderExitCodes(codes) {
|
|
197
|
+
return table(['Exit code', 'Status', 'Description'], codes.map((item) => [item.code, item.status, item.description ?? item.summary]));
|
|
198
|
+
}
|
|
199
|
+
function renderLicense(license) {
|
|
200
|
+
const label = license.url ? `[${license.name}](${license.url})` : license.name;
|
|
201
|
+
return `License: ${label}${license.spdxId ? ` (${license.spdxId})` : ''}\n\n`;
|
|
202
|
+
}
|
|
203
|
+
function renderContact(contact) {
|
|
204
|
+
const parts = [contact.name, contact.email, contact.url].filter(Boolean);
|
|
205
|
+
return `Contact: ${parts.join(' · ')}\n\n`;
|
|
206
|
+
}
|
|
207
|
+
function renderConfig(config) {
|
|
208
|
+
const rows = [];
|
|
209
|
+
if (config.json)
|
|
210
|
+
rows.push(['JSON', config.json]);
|
|
211
|
+
if (config.toml)
|
|
212
|
+
rows.push(['TOML', config.toml]);
|
|
213
|
+
if (config.yaml)
|
|
214
|
+
rows.push(['YAML', config.yaml]);
|
|
215
|
+
if (!rows.length)
|
|
216
|
+
return '';
|
|
217
|
+
return (heading(2, 'Configuration') +
|
|
218
|
+
table(['Format', 'Path'], rows.map(([format, path]) => [format, code(path)])));
|
|
219
|
+
}
|
|
220
|
+
/** Render the shared header both `renderMarkdown` and `generatePages`' landing page use. */
|
|
221
|
+
function renderDocumentHeader(document) {
|
|
222
|
+
let out = heading(1, document.info.title);
|
|
223
|
+
if (document.info.summary)
|
|
224
|
+
out += `${document.info.summary}\n\n`;
|
|
225
|
+
if (document.info.description)
|
|
226
|
+
out += `${document.info.description}\n\n`;
|
|
227
|
+
out += `Binary: ${code(document.info.binary)} · Version: ${code(document.info.version)}\n\n`;
|
|
228
|
+
if (document.info.license)
|
|
229
|
+
out += renderLicense(document.info.license);
|
|
230
|
+
if (document.info.contact)
|
|
231
|
+
out += renderContact(document.info.contact);
|
|
232
|
+
if (document.install?.length)
|
|
233
|
+
out +=
|
|
234
|
+
heading(2, 'Installation') +
|
|
235
|
+
table(['Method', 'Command or URL', 'Description'], document.install.map((method) => [
|
|
236
|
+
method.name,
|
|
237
|
+
method.command ? code(method.command) : (method.url ?? ''),
|
|
238
|
+
method.description ?? '',
|
|
239
|
+
]));
|
|
240
|
+
if (document.global?.config)
|
|
241
|
+
out += renderConfig(document.global.config);
|
|
242
|
+
if (document.global?.flags?.length)
|
|
243
|
+
out += heading(2, 'Global flags') + renderFlags(document.global.flags);
|
|
244
|
+
if (document.global?.exitCodes?.length)
|
|
245
|
+
out += heading(2, 'Global exit codes') + renderExitCodes(document.global.exitCodes);
|
|
246
|
+
return out;
|
|
247
|
+
}
|
|
248
|
+
function assertDocument(document) {
|
|
249
|
+
const result = validate(document);
|
|
250
|
+
if (!result.valid)
|
|
251
|
+
throw new Error(`Invalid OpenCLI document: ${result.errors.join('; ')}`);
|
|
252
|
+
}
|
|
253
|
+
/** Render a complete Markdown reference, preserving spec-authored Markdown prose. */
|
|
254
|
+
export function renderMarkdown(document) {
|
|
255
|
+
assertDocument(document);
|
|
256
|
+
let out = renderDocumentHeader(document);
|
|
257
|
+
for (const [name, command] of Object.entries(document.commands ?? {}).toSorted(([a], [b]) => a.localeCompare(b))) {
|
|
258
|
+
if (!command.hidden)
|
|
259
|
+
out += renderCommand(name, command, document.info.binary, document.global?.flags ?? []);
|
|
260
|
+
}
|
|
261
|
+
return out.trimEnd() + '\n';
|
|
262
|
+
}
|
|
263
|
+
/** Strip the leading `<binary> ` prefix commands are keyed with, e.g. `acme run` -> `run`. */
|
|
264
|
+
function withoutBinaryPrefix(name, binary) {
|
|
265
|
+
if (binary && name.startsWith(`${binary} `)) {
|
|
266
|
+
const rest = name.slice(binary.length + 1).trim();
|
|
267
|
+
if (rest)
|
|
268
|
+
return rest;
|
|
269
|
+
}
|
|
270
|
+
return name;
|
|
271
|
+
}
|
|
272
|
+
/** Reserve `~` for deterministic names outside the readable namespace. */
|
|
273
|
+
function commandRoute(name, binary) {
|
|
274
|
+
const display = withoutBinaryPrefix(name, binary);
|
|
275
|
+
const hasPrefix = !binary || name === `${binary} ${display}`;
|
|
276
|
+
if (hasPrefix && display.length <= 64 && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(display))
|
|
277
|
+
return display;
|
|
278
|
+
// Hash UTF-16 code units to preserve distinctions even for lone surrogates.
|
|
279
|
+
const units = Buffer.allocUnsafe(name.length * 2);
|
|
280
|
+
for (let index = 0; index < name.length; index++)
|
|
281
|
+
units.writeUInt16BE(name.charCodeAt(index), index * 2);
|
|
282
|
+
const readable = display
|
|
283
|
+
.toLowerCase()
|
|
284
|
+
.normalize('NFKD')
|
|
285
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
286
|
+
.replace(/^-+|-+$/g, '')
|
|
287
|
+
.slice(0, 64) || 'command';
|
|
288
|
+
return `${readable}~${createHash('sha256').update(units).digest('hex')}`;
|
|
289
|
+
}
|
|
290
|
+
/** Produce a landing page and one page per visible command with safe, stable routes. */
|
|
291
|
+
export function generatePages(document, options = {}) {
|
|
292
|
+
assertDocument(document);
|
|
293
|
+
const rawBase = (options.basePath ?? '').replace(/\\/g, '/');
|
|
294
|
+
const segments = rawBase.split('/').filter(Boolean);
|
|
295
|
+
if (segments.some((segment) => segment === '.' || segment === '..' || /%(?:2e|2f|5c)/i.test(segment)))
|
|
296
|
+
throw new Error('Invalid basePath segment');
|
|
297
|
+
const prefix = segments.length ? '/' + segments.map((segment) => encodeURIComponent(segment)).join('/') : '';
|
|
298
|
+
const pages = [];
|
|
299
|
+
const names = Object.keys(document.commands ?? {})
|
|
300
|
+
.filter((name) => !document.commands?.[name]?.hidden)
|
|
301
|
+
.toSorted((a, b) => a.localeCompare(b));
|
|
302
|
+
const routes = new Map(names.map((name) => [name, commandRoute(name, document.info.binary)]));
|
|
303
|
+
if (new Set(routes.values()).size !== routes.size)
|
|
304
|
+
throw new Error('Generated command routes collide');
|
|
305
|
+
let landing = renderDocumentHeader(document);
|
|
306
|
+
if (names.length)
|
|
307
|
+
landing +=
|
|
308
|
+
heading(2, 'Commands') +
|
|
309
|
+
names
|
|
310
|
+
.map((name) => `- [${name.replace(/[[\]\\]/g, '\\$&')}](${`${prefix}/commands/${routes.get(name)}`})`)
|
|
311
|
+
.join('\n') +
|
|
312
|
+
'\n\n';
|
|
313
|
+
pages.push({ id: 'index', title: document.info.title, path: prefix || '/', content: landing.trimEnd() + '\n' });
|
|
314
|
+
for (const name of names) {
|
|
315
|
+
const route = routes.get(name);
|
|
316
|
+
pages.push({
|
|
317
|
+
id: `command-${route}`,
|
|
318
|
+
title: name,
|
|
319
|
+
path: `${prefix}/commands/${route}`,
|
|
320
|
+
content: renderCommand(name, document.commands[name], document.info.binary, document.global?.flags ?? []).trimEnd() +
|
|
321
|
+
'\n',
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
return pages;
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OpenCliDocument } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Logical validations ported from upstream `validate/validate.go`, beyond what the JSON Schema
|
|
4
|
+
* can express: positional argument ordering, variadic/min/max constraints, `$FILE` alternative
|
|
5
|
+
* sources referencing a declared `global.config` file, duplicate flag names/aliases, and group
|
|
6
|
+
* commands carrying args or flags.
|
|
7
|
+
*/
|
|
8
|
+
export declare function logicalErrors(document: OpenCliDocument): string[];
|
|
9
|
+
//# sourceMappingURL=logical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logical.d.ts","sourceRoot":"","sources":["../src/logical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAwC,MAAM,YAAY,CAAC;AAExF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,EAAE,CAWjE"}
|
package/dist/logical.js
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logical validations ported from upstream `validate/validate.go`, beyond what the JSON Schema
|
|
3
|
+
* can express: positional argument ordering, variadic/min/max constraints, `$FILE` alternative
|
|
4
|
+
* sources referencing a declared `global.config` file, duplicate flag names/aliases, and group
|
|
5
|
+
* commands carrying args or flags.
|
|
6
|
+
*/
|
|
7
|
+
export function logicalErrors(document) {
|
|
8
|
+
const errors = [];
|
|
9
|
+
const definedConfigFiles = new Set();
|
|
10
|
+
if (document.global?.config?.json)
|
|
11
|
+
definedConfigFiles.add('json');
|
|
12
|
+
if (document.global?.config?.toml)
|
|
13
|
+
definedConfigFiles.add('toml');
|
|
14
|
+
if (document.global?.config?.yaml)
|
|
15
|
+
definedConfigFiles.add('yaml');
|
|
16
|
+
for (const [name, command] of Object.entries(document.commands ?? {})) {
|
|
17
|
+
validateCommand(name, command, definedConfigFiles, errors);
|
|
18
|
+
}
|
|
19
|
+
return errors;
|
|
20
|
+
}
|
|
21
|
+
function validateCommand(name, command, definedConfigFiles, errors) {
|
|
22
|
+
const base = `/commands/${name}`;
|
|
23
|
+
const args = command.args ?? [];
|
|
24
|
+
const flags = command.flags ?? [];
|
|
25
|
+
if (args.length > 0) {
|
|
26
|
+
validateArgumentOrdering(base, args, errors);
|
|
27
|
+
validateArgumentConstraints(base, args, errors);
|
|
28
|
+
}
|
|
29
|
+
if (flags.length > 0) {
|
|
30
|
+
validateFlagFileReferences(base, flags, definedConfigFiles, errors);
|
|
31
|
+
validateFlagConstraints(base, flags, errors);
|
|
32
|
+
}
|
|
33
|
+
if (command.kind === 'group') {
|
|
34
|
+
if (args.length > 0)
|
|
35
|
+
errors.push(`${base} group command cannot have arguments`);
|
|
36
|
+
if (flags.length > 0)
|
|
37
|
+
errors.push(`${base} group command cannot have flags`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Ensures required positional args don't come after optional ones. */
|
|
41
|
+
function validateArgumentOrdering(base, args, errors) {
|
|
42
|
+
let seenOptional = false;
|
|
43
|
+
for (const [i, arg] of args.entries()) {
|
|
44
|
+
const isRequired = arg.required === true;
|
|
45
|
+
if (seenOptional && isRequired) {
|
|
46
|
+
errors.push(`${base}/args/${i} required positional argument '${arg.name}' cannot come after optional arguments`);
|
|
47
|
+
}
|
|
48
|
+
if (!isRequired)
|
|
49
|
+
seenOptional = true;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Checks that minItems/maxItems are only used with variadic args, and min <= max. */
|
|
53
|
+
function validateArgumentConstraints(base, args, errors) {
|
|
54
|
+
for (const [i, arg] of args.entries()) {
|
|
55
|
+
const path = `${base}/args/${i}`;
|
|
56
|
+
if ((arg.minItems !== undefined || arg.maxItems !== undefined) && !arg.variadic) {
|
|
57
|
+
const field = arg.minItems !== undefined ? 'minItems' : 'maxItems';
|
|
58
|
+
errors.push(`${path} argument '${arg.name}' has ${field} but is not variadic`);
|
|
59
|
+
}
|
|
60
|
+
if (arg.variadic && arg.minItems !== undefined && arg.maxItems !== undefined && arg.minItems > arg.maxItems) {
|
|
61
|
+
errors.push(`${path} argument '${arg.name}' has minItems (${arg.minItems}) greater than maxItems (${arg.maxItems})`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Checks that `$FILE` alternative sources reference a file declared in global.config. */
|
|
66
|
+
function validateFlagFileReferences(base, flags, definedConfigFiles, errors) {
|
|
67
|
+
for (const [i, flag] of flags.entries()) {
|
|
68
|
+
validateFileReferences(`${base}/flags/${i}`, 'flag', flag.name, flag.alternativeSources, definedConfigFiles, errors);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function validateFileReferences(path, itemType, itemName, altSources, definedConfigFiles, errors) {
|
|
72
|
+
for (const [j, source] of (altSources ?? []).entries()) {
|
|
73
|
+
if (source.type === '$FILE' && definedConfigFiles.size === 0) {
|
|
74
|
+
errors.push(`${path}/alternativeSources/${j} ${itemType} '${itemName}' references $FILE but no config files are defined in global.config`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Checks for duplicate flag names/aliases and variadic+required/minItems/maxItems constraints. */
|
|
79
|
+
function validateFlagConstraints(base, flags, errors) {
|
|
80
|
+
const seen = new Map();
|
|
81
|
+
for (const [i, flag] of flags.entries()) {
|
|
82
|
+
const path = `${base}/flags/${i}`;
|
|
83
|
+
const flagName = flag.name;
|
|
84
|
+
if (flagName) {
|
|
85
|
+
const prevIdx = seen.get(flagName);
|
|
86
|
+
if (prevIdx !== undefined) {
|
|
87
|
+
errors.push(`${path} duplicate flag name '${flagName}' (also defined at index ${prevIdx})`);
|
|
88
|
+
}
|
|
89
|
+
seen.set(flagName, i);
|
|
90
|
+
for (const alias of flag.aliases ?? []) {
|
|
91
|
+
if (!alias)
|
|
92
|
+
continue;
|
|
93
|
+
const prevAliasIdx = seen.get(alias);
|
|
94
|
+
if (prevAliasIdx !== undefined) {
|
|
95
|
+
errors.push(`${path}/aliases duplicate flag alias '${alias}' (already defined at index ${prevAliasIdx})`);
|
|
96
|
+
}
|
|
97
|
+
seen.set(alias, i);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (flag.variadic && flag.required) {
|
|
101
|
+
errors.push(`${path} variadic flag '${flagName}' cannot be marked as required (variadic flags can be provided 0 or more times)`);
|
|
102
|
+
}
|
|
103
|
+
if ((flag.minItems !== undefined || flag.maxItems !== undefined) && !flag.variadic) {
|
|
104
|
+
const field = flag.minItems !== undefined ? 'minItems' : 'maxItems';
|
|
105
|
+
errors.push(`${path} flag '${flagName}' has ${field} but is not variadic`);
|
|
106
|
+
}
|
|
107
|
+
if (flag.variadic && flag.minItems !== undefined && flag.maxItems !== undefined && flag.minItems > flag.maxItems) {
|
|
108
|
+
errors.push(`${path} flag '${flagName}' has minItems (${flag.minItems}) greater than maxItems (${flag.maxItems})`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=logical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logical.js","sourceRoot":"","sources":["../src/logical.ts"],"names":[],"mappings":"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"}
|
package/dist/merge.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ArgumentItemObject, CommandItemObject, FlagItemObject, GlobalObject, InfoObject, InstallMethodItemObject, OpenCliDocument } from './types.js';
|
|
2
|
+
/** A named array entry merged with a generated entry of the same name. */
|
|
3
|
+
export type NamedOverride<T extends {
|
|
4
|
+
name: string;
|
|
5
|
+
}> = Pick<T, 'name'> & Partial<Omit<T, 'name'>>;
|
|
6
|
+
/** Metadata layered onto a generated command. */
|
|
7
|
+
export type CommandOverride = Omit<Partial<CommandItemObject>, 'args' | 'flags'> & {
|
|
8
|
+
args?: NamedOverride<ArgumentItemObject>[];
|
|
9
|
+
flags?: NamedOverride<FlagItemObject>[];
|
|
10
|
+
};
|
|
11
|
+
/** Metadata layered onto the generated global settings. */
|
|
12
|
+
export type GlobalOverride = Omit<Partial<GlobalObject>, 'config' | 'flags'> & {
|
|
13
|
+
config?: Partial<NonNullable<GlobalObject['config']>>;
|
|
14
|
+
flags?: NamedOverride<FlagItemObject>[];
|
|
15
|
+
};
|
|
16
|
+
/** Metadata layered onto the generated CLI identity. */
|
|
17
|
+
export type InfoOverride = Omit<Partial<InfoObject>, 'license' | 'contact'> & {
|
|
18
|
+
license?: Partial<NonNullable<InfoObject['license']>>;
|
|
19
|
+
contact?: Partial<NonNullable<InfoObject['contact']>>;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Author-supplied additions layered onto a generated OpenCLI document by {@link mergeDocument}.
|
|
23
|
+
* Named flags and arguments require a name for matching, but their remaining fields may be
|
|
24
|
+
* supplied by the generated document. The merged result is validated before it is returned.
|
|
25
|
+
*/
|
|
26
|
+
export type DocumentOverrides = {
|
|
27
|
+
info?: InfoOverride;
|
|
28
|
+
install?: InstallMethodItemObject[];
|
|
29
|
+
global?: GlobalOverride;
|
|
30
|
+
commands?: Record<string, CommandOverride>;
|
|
31
|
+
[key: `x-${string}`]: unknown;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Return a new document with `overrides` deep-merged onto `base`. Plain objects merge
|
|
35
|
+
* recursively (so `info.license`, `global`, and individual commands can be extended without
|
|
36
|
+
* repeating the rest). Arrays in `overrides` replace the base array, except `examples` and
|
|
37
|
+
* `exitCodes`, which append, and `flags`/`args`, which are merged item-by-item matched by
|
|
38
|
+
* `name` (so an author can add e.g. `alternativeSources` to one generated flag without
|
|
39
|
+
* repeating the whole flag list). Commands not present in `base` are added as-is.
|
|
40
|
+
*
|
|
41
|
+
* Throws if the merged result fails OpenCLI schema validation, listing every problem found.
|
|
42
|
+
*/
|
|
43
|
+
export declare function mergeDocument(base: OpenCliDocument, overrides: DocumentOverrides): OpenCliDocument;
|
|
44
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,uBAAuB,EACvB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,0EAA0E;AAC1E,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACnG,iDAAiD;AACjD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG;IACjF,IAAI,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;CACzC,CAAC;AACF,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;CACzC,CAAC;AACF,wDAAwD;AACxD,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,GAAG;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;CACvD,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACpC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC;CAC/B,CAAC;AAuCF;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,GAAG,eAAe,CAMlG"}
|
package/dist/merge.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { validate } from './index.js';
|
|
2
|
+
function isPlainObject(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
/** Arrays under these keys are appended rather than replaced. */
|
|
6
|
+
const APPEND_KEYS = new Set(['examples', 'exitCodes']);
|
|
7
|
+
/** Arrays under these keys are merged item-by-item, matched by `name`. */
|
|
8
|
+
const NAME_MERGE_KEYS = new Set(['flags', 'args']);
|
|
9
|
+
/** Merge two arrays of `{ name: ... }` items (flags/args): match by `name`, append the rest. */
|
|
10
|
+
function mergeNamedArray(base, override) {
|
|
11
|
+
const result = base.map((item) => ({ ...item }));
|
|
12
|
+
for (const item of override) {
|
|
13
|
+
const index = result.findIndex((entry) => entry.name === item.name);
|
|
14
|
+
if (index >= 0)
|
|
15
|
+
result[index] = mergeObjects(result[index], item);
|
|
16
|
+
else
|
|
17
|
+
result.push(item);
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
function mergeValue(key, base, override) {
|
|
22
|
+
if (override === undefined)
|
|
23
|
+
return base;
|
|
24
|
+
if (Array.isArray(base) && Array.isArray(override)) {
|
|
25
|
+
if (APPEND_KEYS.has(key))
|
|
26
|
+
return [...base, ...override];
|
|
27
|
+
if (NAME_MERGE_KEYS.has(key))
|
|
28
|
+
return mergeNamedArray(base, override);
|
|
29
|
+
return override;
|
|
30
|
+
}
|
|
31
|
+
if (isPlainObject(base) && isPlainObject(override))
|
|
32
|
+
return mergeObjects(base, override);
|
|
33
|
+
return override;
|
|
34
|
+
}
|
|
35
|
+
function mergeObjects(base, override) {
|
|
36
|
+
const result = { ...base };
|
|
37
|
+
for (const key of Object.keys(override))
|
|
38
|
+
result[key] = mergeValue(key, base[key], override[key]);
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Return a new document with `overrides` deep-merged onto `base`. Plain objects merge
|
|
43
|
+
* recursively (so `info.license`, `global`, and individual commands can be extended without
|
|
44
|
+
* repeating the rest). Arrays in `overrides` replace the base array, except `examples` and
|
|
45
|
+
* `exitCodes`, which append, and `flags`/`args`, which are merged item-by-item matched by
|
|
46
|
+
* `name` (so an author can add e.g. `alternativeSources` to one generated flag without
|
|
47
|
+
* repeating the whole flag list). Commands not present in `base` are added as-is.
|
|
48
|
+
*
|
|
49
|
+
* Throws if the merged result fails OpenCLI schema validation, listing every problem found.
|
|
50
|
+
*/
|
|
51
|
+
export function mergeDocument(base, overrides) {
|
|
52
|
+
const merged = mergeObjects(base, overrides);
|
|
53
|
+
const result = merged;
|
|
54
|
+
const { valid, errors } = validate(result);
|
|
55
|
+
if (!valid)
|
|
56
|
+
throw new Error(`Invalid OpenCLI document after merge: ${errors.join('; ')}`);
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA0CtC,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,iEAAiE;AACjE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AACvD,0EAA0E;AAC1E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnD,gGAAgG;AAChG,SAAS,eAAe,CAAC,IAAe,EAAE,QAAmB;IAC3D,MAAM,MAAM,GAAI,IAAkC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAChF,KAAK,MAAM,IAAI,IAAI,QAAqC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,KAAK,IAAI,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAE,EAAE,IAAI,CAAC,CAAC;;YAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,IAAa,EAAE,QAAiB;IAC/D,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;QACxD,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrE,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC;QAAE,OAAO,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,IAA6B,EAAE,QAAiC;IACpF,MAAM,MAAM,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAC;IACpD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,IAAqB,EAAE,SAA4B;IAC/E,MAAM,MAAM,GAAG,YAAY,CAAC,IAA0C,EAAE,SAAoC,CAAC,CAAC;IAC9G,MAAM,MAAM,GAAG,MAAoC,CAAC;IACpD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,MAAM,EAAE,MA+apB,CAAC"}
|