@clerc/core 0.17.2 → 0.18.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/dist/index.d.ts +7 -11
- package/dist/index.js +26 -39
- package/dist/index.mjs +26 -39
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -69,6 +69,7 @@ type TypeFlag<Schemas extends Flags> = ParsedFlags<{
|
|
|
69
69
|
[flag in keyof Schemas]: InferFlagType<Schemas[flag]>;
|
|
70
70
|
}>;
|
|
71
71
|
|
|
72
|
+
type CommandType = SingleCommandType | string;
|
|
72
73
|
type FlagOptions = FlagSchema & {
|
|
73
74
|
description?: string;
|
|
74
75
|
};
|
|
@@ -305,15 +306,6 @@ declare class NoSuchCommandError extends Error {
|
|
|
305
306
|
declare class NoCommandGivenError extends Error {
|
|
306
307
|
constructor();
|
|
307
308
|
}
|
|
308
|
-
declare class ParentCommandExistsError extends Error {
|
|
309
|
-
constructor(name: string);
|
|
310
|
-
}
|
|
311
|
-
declare class SubcommandExistsError extends Error {
|
|
312
|
-
constructor(name: string);
|
|
313
|
-
}
|
|
314
|
-
declare class MultipleCommandsMatchedError extends Error {
|
|
315
|
-
constructor(name: string);
|
|
316
|
-
}
|
|
317
309
|
declare class CommandNameConflictError extends Error {
|
|
318
310
|
constructor(n1: string, n2: string);
|
|
319
311
|
}
|
|
@@ -325,6 +317,9 @@ declare class DescriptionNotSetError extends Error {
|
|
|
325
317
|
}
|
|
326
318
|
declare class VersionNotSetError extends Error {
|
|
327
319
|
constructor();
|
|
320
|
+
}
|
|
321
|
+
declare class InvalidCommandNameError extends Error {
|
|
322
|
+
constructor(name: string);
|
|
328
323
|
}
|
|
329
324
|
|
|
330
325
|
declare function resolveFlattenCommands(commands: CommandRecord): Map<string[], CommandAlias<string, CommandOptions<string[], _clerc_utils.MaybeArray<string>, _clerc_utils.Dict<FlagOptions>>>>;
|
|
@@ -333,7 +328,8 @@ declare function resolveSubcommandsByParent(commands: CommandRecord, parent: str
|
|
|
333
328
|
declare const resolveRootCommands: (commands: CommandRecord) => Command<string, CommandOptions<string[], _clerc_utils.MaybeArray<string>, _clerc_utils.Dict<FlagOptions>>>[];
|
|
334
329
|
declare function resolveParametersBeforeFlag(argv: string[], isSingleCommand: boolean): string[];
|
|
335
330
|
declare const resolveArgv: () => string[];
|
|
336
|
-
declare function compose(inspectors: Inspector[]): (getCtx: () => InspectorContext) => void;
|
|
331
|
+
declare function compose(inspectors: Inspector[]): (getCtx: () => InspectorContext) => void;
|
|
332
|
+
declare const isInvalidName: (name: CommandType) => boolean;
|
|
337
333
|
|
|
338
334
|
interface ParsedParameter {
|
|
339
335
|
name: string;
|
|
@@ -343,4 +339,4 @@ interface ParsedParameter {
|
|
|
343
339
|
declare function parseParameters(parameters: string[]): ParsedParameter[];
|
|
344
340
|
declare function mapParametersToArguments(mapping: Record<string, string | string[]>, parameters: ParsedParameter[], cliArguments: string[]): Error | undefined;
|
|
345
341
|
|
|
346
|
-
export { Clerc, Command, CommandAlias, CommandCustomProperties, CommandExistsError, CommandNameConflictError, CommandOptions, CommandRecord, CommandWithHandler, CommonCommandExistsError, DescriptionNotSetError, FallbackType, Flag, FlagOptions, Handler, HandlerContext, HandlerInCommand, Inspector, InspectorContext, InspectorFn, InspectorObject,
|
|
342
|
+
export { Clerc, Command, CommandAlias, CommandCustomProperties, CommandExistsError, CommandNameConflictError, CommandOptions, CommandRecord, CommandType, CommandWithHandler, CommonCommandExistsError, DescriptionNotSetError, FallbackType, Flag, FlagOptions, Handler, HandlerContext, HandlerInCommand, Inspector, InspectorContext, InspectorFn, InspectorObject, InvalidCommandNameError, MakeEventMap, NameNotSetError, NoCommandGivenError, NoSuchCommandError, Plugin, PossibleInputKind, SingleCommand, SingleCommandAliasError, SingleCommandError, SingleCommandType, VersionNotSetError, compose, defineCommand, defineHandler, defineInspector, definePlugin, isInvalidName, mapParametersToArguments, parseParameters, resolveArgv, resolveCommand, resolveFlattenCommands, resolveParametersBeforeFlag, resolveRootCommands, resolveSubcommandsByParent };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LiteEmit } from 'lite-emit';
|
|
2
2
|
import { typeFlag } from 'type-flag';
|
|
3
|
-
import {
|
|
3
|
+
import { toArray, arrayStartsWith, camelCase } from '@clerc/utils';
|
|
4
4
|
import { isNode, isDeno } from 'is-platform';
|
|
5
5
|
|
|
6
6
|
class SingleCommandError extends Error {
|
|
@@ -33,21 +33,6 @@ class NoCommandGivenError extends Error {
|
|
|
33
33
|
super("No command given.");
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
class ParentCommandExistsError extends Error {
|
|
37
|
-
constructor(name) {
|
|
38
|
-
super(`Command "${name}" cannot exist with its parent.`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
class SubcommandExistsError extends Error {
|
|
42
|
-
constructor(name) {
|
|
43
|
-
super(`Command "${name}" cannot exist with its subcommand.`);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
class MultipleCommandsMatchedError extends Error {
|
|
47
|
-
constructor(name) {
|
|
48
|
-
super(`Multiple commands matched: ${name}`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
36
|
class CommandNameConflictError extends Error {
|
|
52
37
|
constructor(n1, n2) {
|
|
53
38
|
super(`Command name ${n1} conflicts with ${n2}. Maybe caused by alias.`);
|
|
@@ -68,12 +53,17 @@ class VersionNotSetError extends Error {
|
|
|
68
53
|
super("Version not set.");
|
|
69
54
|
}
|
|
70
55
|
}
|
|
56
|
+
class InvalidCommandNameError extends Error {
|
|
57
|
+
constructor(name) {
|
|
58
|
+
super(`Bad name format: ${name}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
71
61
|
|
|
72
62
|
function resolveFlattenCommands(commands) {
|
|
73
63
|
const commandsMap = /* @__PURE__ */ new Map();
|
|
74
64
|
for (const command of Object.values(commands)) {
|
|
75
65
|
if (command.alias) {
|
|
76
|
-
const aliases =
|
|
66
|
+
const aliases = toArray(command.alias);
|
|
77
67
|
for (const alias of aliases) {
|
|
78
68
|
if (alias in commands) {
|
|
79
69
|
throw new CommandNameConflictError(commands[alias].name, command.name);
|
|
@@ -89,19 +79,17 @@ function resolveCommand(commands, name) {
|
|
|
89
79
|
if (name === SingleCommand) {
|
|
90
80
|
return commands[SingleCommand];
|
|
91
81
|
}
|
|
92
|
-
const nameArr =
|
|
82
|
+
const nameArr = toArray(name);
|
|
93
83
|
const commandsMap = resolveFlattenCommands(commands);
|
|
94
|
-
|
|
84
|
+
let current;
|
|
85
|
+
let currentName;
|
|
95
86
|
commandsMap.forEach((v, k) => {
|
|
96
|
-
if (arrayStartsWith(nameArr, k)) {
|
|
97
|
-
|
|
87
|
+
if (arrayStartsWith(nameArr, k) && (!currentName || k.length > currentName.length)) {
|
|
88
|
+
current = v;
|
|
89
|
+
currentName = k;
|
|
98
90
|
}
|
|
99
91
|
});
|
|
100
|
-
|
|
101
|
-
const matchedCommandNames = possibleCommands.map((c) => c.name).join(", ");
|
|
102
|
-
throw new MultipleCommandsMatchedError(matchedCommandNames);
|
|
103
|
-
}
|
|
104
|
-
return possibleCommands[0];
|
|
92
|
+
return current;
|
|
105
93
|
}
|
|
106
94
|
function resolveSubcommandsByParent(commands, parent, depth = Infinity) {
|
|
107
95
|
const parentArr = parent === "" ? [] : Array.isArray(parent) ? parent : parent.split(" ");
|
|
@@ -147,6 +135,7 @@ function compose(inspectors) {
|
|
|
147
135
|
}
|
|
148
136
|
};
|
|
149
137
|
}
|
|
138
|
+
const isInvalidName = (name) => typeof name === "string" && (name.startsWith(" ") || name.endsWith(" "));
|
|
150
139
|
|
|
151
140
|
const { stringify } = JSON;
|
|
152
141
|
function parseParameters(parameters) {
|
|
@@ -275,6 +264,9 @@ const _Clerc = class {
|
|
|
275
264
|
throw new CommandExistsError("SingleCommand");
|
|
276
265
|
}
|
|
277
266
|
}
|
|
267
|
+
if (isInvalidName(name)) {
|
|
268
|
+
throw new InvalidCommandNameError(name);
|
|
269
|
+
}
|
|
278
270
|
if (__privateGet(this, _isSingleCommand, isSingleCommand_get)) {
|
|
279
271
|
throw new SingleCommandError();
|
|
280
272
|
}
|
|
@@ -284,21 +276,16 @@ const _Clerc = class {
|
|
|
284
276
|
if (name === SingleCommand && (isCommandObject ? nameOrCommand : options).alias) {
|
|
285
277
|
throw new SingleCommandAliasError();
|
|
286
278
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
if (existedCommandNames.some((name2) => arrayStartsWith(name2, splitedName))) {
|
|
294
|
-
throw new SubcommandExistsError(splitedName.join(" "));
|
|
279
|
+
const { handler = void 0, ...commandToSave } = isCommandObject ? nameOrCommand : { name, description, ...options };
|
|
280
|
+
const nameList = [commandToSave.name];
|
|
281
|
+
commandToSave.alias && nameList.push(...toArray(commandToSave.alias));
|
|
282
|
+
for (const name2 of nameList) {
|
|
283
|
+
if (Object.keys(__privateGet(this, _commands)).includes(name2) || Object.values(__privateGet(this, _commands)).some(({ alias }) => alias ? toArray(alias).includes(name2) : false)) {
|
|
284
|
+
throw new CommandExistsError(name2);
|
|
295
285
|
}
|
|
296
286
|
}
|
|
297
|
-
const { handler = void 0, ...commandToSave } = isCommandObject ? nameOrCommand : { name, description, ...options };
|
|
298
287
|
__privateGet(this, _commands)[name] = commandToSave;
|
|
299
|
-
|
|
300
|
-
this.on(nameOrCommand.name, handler);
|
|
301
|
-
}
|
|
288
|
+
isCommandObject && handler && this.on(nameOrCommand.name, handler);
|
|
302
289
|
return this;
|
|
303
290
|
}
|
|
304
291
|
on(name, handler) {
|
|
@@ -417,4 +404,4 @@ const defineHandler = (_cli, _key, handler) => handler;
|
|
|
417
404
|
const defineInspector = (_cli, inspector) => inspector;
|
|
418
405
|
const defineCommand = (command) => command;
|
|
419
406
|
|
|
420
|
-
export { Clerc, CommandExistsError, CommandNameConflictError, CommonCommandExistsError, DescriptionNotSetError,
|
|
407
|
+
export { Clerc, CommandExistsError, CommandNameConflictError, CommonCommandExistsError, DescriptionNotSetError, InvalidCommandNameError, NameNotSetError, NoCommandGivenError, NoSuchCommandError, SingleCommand, SingleCommandAliasError, SingleCommandError, VersionNotSetError, compose, defineCommand, defineHandler, defineInspector, definePlugin, isInvalidName, mapParametersToArguments, parseParameters, resolveArgv, resolveCommand, resolveFlattenCommands, resolveParametersBeforeFlag, resolveRootCommands, resolveSubcommandsByParent };
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LiteEmit } from 'lite-emit';
|
|
2
2
|
import { typeFlag } from 'type-flag';
|
|
3
|
-
import {
|
|
3
|
+
import { toArray, arrayStartsWith, camelCase } from '@clerc/utils';
|
|
4
4
|
import { isNode, isDeno } from 'is-platform';
|
|
5
5
|
|
|
6
6
|
class SingleCommandError extends Error {
|
|
@@ -33,21 +33,6 @@ class NoCommandGivenError extends Error {
|
|
|
33
33
|
super("No command given.");
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
class ParentCommandExistsError extends Error {
|
|
37
|
-
constructor(name) {
|
|
38
|
-
super(`Command "${name}" cannot exist with its parent.`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
class SubcommandExistsError extends Error {
|
|
42
|
-
constructor(name) {
|
|
43
|
-
super(`Command "${name}" cannot exist with its subcommand.`);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
class MultipleCommandsMatchedError extends Error {
|
|
47
|
-
constructor(name) {
|
|
48
|
-
super(`Multiple commands matched: ${name}`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
36
|
class CommandNameConflictError extends Error {
|
|
52
37
|
constructor(n1, n2) {
|
|
53
38
|
super(`Command name ${n1} conflicts with ${n2}. Maybe caused by alias.`);
|
|
@@ -68,12 +53,17 @@ class VersionNotSetError extends Error {
|
|
|
68
53
|
super("Version not set.");
|
|
69
54
|
}
|
|
70
55
|
}
|
|
56
|
+
class InvalidCommandNameError extends Error {
|
|
57
|
+
constructor(name) {
|
|
58
|
+
super(`Bad name format: ${name}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
71
61
|
|
|
72
62
|
function resolveFlattenCommands(commands) {
|
|
73
63
|
const commandsMap = /* @__PURE__ */ new Map();
|
|
74
64
|
for (const command of Object.values(commands)) {
|
|
75
65
|
if (command.alias) {
|
|
76
|
-
const aliases =
|
|
66
|
+
const aliases = toArray(command.alias);
|
|
77
67
|
for (const alias of aliases) {
|
|
78
68
|
if (alias in commands) {
|
|
79
69
|
throw new CommandNameConflictError(commands[alias].name, command.name);
|
|
@@ -89,19 +79,17 @@ function resolveCommand(commands, name) {
|
|
|
89
79
|
if (name === SingleCommand) {
|
|
90
80
|
return commands[SingleCommand];
|
|
91
81
|
}
|
|
92
|
-
const nameArr =
|
|
82
|
+
const nameArr = toArray(name);
|
|
93
83
|
const commandsMap = resolveFlattenCommands(commands);
|
|
94
|
-
|
|
84
|
+
let current;
|
|
85
|
+
let currentName;
|
|
95
86
|
commandsMap.forEach((v, k) => {
|
|
96
|
-
if (arrayStartsWith(nameArr, k)) {
|
|
97
|
-
|
|
87
|
+
if (arrayStartsWith(nameArr, k) && (!currentName || k.length > currentName.length)) {
|
|
88
|
+
current = v;
|
|
89
|
+
currentName = k;
|
|
98
90
|
}
|
|
99
91
|
});
|
|
100
|
-
|
|
101
|
-
const matchedCommandNames = possibleCommands.map((c) => c.name).join(", ");
|
|
102
|
-
throw new MultipleCommandsMatchedError(matchedCommandNames);
|
|
103
|
-
}
|
|
104
|
-
return possibleCommands[0];
|
|
92
|
+
return current;
|
|
105
93
|
}
|
|
106
94
|
function resolveSubcommandsByParent(commands, parent, depth = Infinity) {
|
|
107
95
|
const parentArr = parent === "" ? [] : Array.isArray(parent) ? parent : parent.split(" ");
|
|
@@ -147,6 +135,7 @@ function compose(inspectors) {
|
|
|
147
135
|
}
|
|
148
136
|
};
|
|
149
137
|
}
|
|
138
|
+
const isInvalidName = (name) => typeof name === "string" && (name.startsWith(" ") || name.endsWith(" "));
|
|
150
139
|
|
|
151
140
|
const { stringify } = JSON;
|
|
152
141
|
function parseParameters(parameters) {
|
|
@@ -275,6 +264,9 @@ const _Clerc = class {
|
|
|
275
264
|
throw new CommandExistsError("SingleCommand");
|
|
276
265
|
}
|
|
277
266
|
}
|
|
267
|
+
if (isInvalidName(name)) {
|
|
268
|
+
throw new InvalidCommandNameError(name);
|
|
269
|
+
}
|
|
278
270
|
if (__privateGet(this, _isSingleCommand, isSingleCommand_get)) {
|
|
279
271
|
throw new SingleCommandError();
|
|
280
272
|
}
|
|
@@ -284,21 +276,16 @@ const _Clerc = class {
|
|
|
284
276
|
if (name === SingleCommand && (isCommandObject ? nameOrCommand : options).alias) {
|
|
285
277
|
throw new SingleCommandAliasError();
|
|
286
278
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
if (existedCommandNames.some((name2) => arrayStartsWith(name2, splitedName))) {
|
|
294
|
-
throw new SubcommandExistsError(splitedName.join(" "));
|
|
279
|
+
const { handler = void 0, ...commandToSave } = isCommandObject ? nameOrCommand : { name, description, ...options };
|
|
280
|
+
const nameList = [commandToSave.name];
|
|
281
|
+
commandToSave.alias && nameList.push(...toArray(commandToSave.alias));
|
|
282
|
+
for (const name2 of nameList) {
|
|
283
|
+
if (Object.keys(__privateGet(this, _commands)).includes(name2) || Object.values(__privateGet(this, _commands)).some(({ alias }) => alias ? toArray(alias).includes(name2) : false)) {
|
|
284
|
+
throw new CommandExistsError(name2);
|
|
295
285
|
}
|
|
296
286
|
}
|
|
297
|
-
const { handler = void 0, ...commandToSave } = isCommandObject ? nameOrCommand : { name, description, ...options };
|
|
298
287
|
__privateGet(this, _commands)[name] = commandToSave;
|
|
299
|
-
|
|
300
|
-
this.on(nameOrCommand.name, handler);
|
|
301
|
-
}
|
|
288
|
+
isCommandObject && handler && this.on(nameOrCommand.name, handler);
|
|
302
289
|
return this;
|
|
303
290
|
}
|
|
304
291
|
on(name, handler) {
|
|
@@ -417,4 +404,4 @@ const defineHandler = (_cli, _key, handler) => handler;
|
|
|
417
404
|
const defineInspector = (_cli, inspector) => inspector;
|
|
418
405
|
const defineCommand = (command) => command;
|
|
419
406
|
|
|
420
|
-
export { Clerc, CommandExistsError, CommandNameConflictError, CommonCommandExistsError, DescriptionNotSetError,
|
|
407
|
+
export { Clerc, CommandExistsError, CommandNameConflictError, CommonCommandExistsError, DescriptionNotSetError, InvalidCommandNameError, NameNotSetError, NoCommandGivenError, NoSuchCommandError, SingleCommand, SingleCommandAliasError, SingleCommandError, VersionNotSetError, compose, defineCommand, defineHandler, defineInspector, definePlugin, isInvalidName, mapParametersToArguments, parseParameters, resolveArgv, resolveCommand, resolveFlattenCommands, resolveParametersBeforeFlag, resolveRootCommands, resolveSubcommandsByParent };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clerc/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"author": "Ray <nn_201312@163.com> (https://github.com/so1ve)",
|
|
5
5
|
"description": "Clerc core",
|
|
6
6
|
"keywords": [
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"is-platform": "^0.2.0",
|
|
51
51
|
"lite-emit": "^1.4.0",
|
|
52
52
|
"type-flag": "^3.0.0",
|
|
53
|
-
"@clerc/utils": "0.
|
|
53
|
+
"@clerc/utils": "0.18.0"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
56
|
"build": "puild",
|