@clerc/core 1.0.0-beta.1 → 1.0.0-beta.2

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 CHANGED
@@ -10,11 +10,13 @@ type UnknownArray = readonly unknown[];
10
10
  type MapsSetsOrArrays = ReadonlyMap<unknown, unknown> | WeakMap<WeakKey, unknown> | ReadonlySet<unknown> | WeakSet<WeakKey> | UnknownArray;
11
11
  type ConditionalDeepPrettify<T, E = never, I$1 = unknown> = T extends E ? T : T extends I$1 ? { [TypeKey in keyof T]: ConditionalDeepPrettify<T[TypeKey], E, I$1> } : T;
12
12
  type DeepPrettify<T, E = never> = ConditionalDeepPrettify<T, E | NonRecursiveType | MapsSetsOrArrays, object>;
13
+ type IsAny<T> = 0 extends 1 & T ? true : false;
13
14
  //#endregion
14
15
  //#region ../utils/src/types/index.d.ts
15
16
  type MaybeArray<T> = T | T[];
16
17
  type PartialRequired<T, K$1 extends keyof T> = T & { [P in K$1]-?: T[P] };
17
18
  type UnionToIntersection<U$1> = (U$1 extends any ? (k: U$1) => void : never) extends ((k: infer I) => void) ? I : never;
19
+ type CamelCase<S extends string> = S extends `${infer Head} ${infer Tail}` ? `${Head}${Capitalize<CamelCase<Tail>>}` : S extends `${infer Head}-${infer Tail}` ? `${Head}${Capitalize<CamelCase<Tail>>}` : S;
18
20
  //#endregion
19
21
  //#region ../parser/src/types.d.ts
20
22
  type FlagDefaultValue<T = unknown> = T | (() => T);
@@ -88,7 +90,10 @@ interface ParsedResult<TFlags extends Record<string, any>> {
88
90
  type InferFlagDefault<T extends FlagDefinitionValue, Fallback> = T extends {
89
91
  default: FlagDefaultValue<infer DefaultType>;
90
92
  } ? DefaultType : Fallback;
91
- type _InferFlags<T extends FlagsDefinition> = { [K in keyof T]: T[K] extends readonly [BooleanConstructor] | {
93
+ type IsTypeAny<T extends FlagDefinitionValue> = IsAny<T> extends true ? true : T extends {
94
+ type: infer Type;
95
+ } ? IsAny<Type> extends true ? true : false : false;
96
+ type _InferFlags<T extends FlagsDefinition> = { [K in keyof T]: IsTypeAny<T[K]> extends true ? any : T[K] extends readonly [BooleanConstructor] | {
92
97
  type: readonly [BooleanConstructor];
93
98
  } ? number : T[K] extends ObjectConstructor | {
94
99
  type: ObjectConstructor;
@@ -110,6 +115,9 @@ declare const KNOWN_FLAG = "known-flag";
110
115
  declare const UNKNOWN_FLAG = "unknown-flag";
111
116
  declare const PARAMETER = "parameter";
112
117
  //#endregion
118
+ //#region ../parser/src/parse.d.ts
119
+ declare const DOUBLE_DASH = "--";
120
+ //#endregion
113
121
  //#region src/types/clerc.d.ts
114
122
  type ErrorHandler = (error: unknown) => void;
115
123
  //#endregion
@@ -120,7 +128,7 @@ type ClercFlagOptions = FlagOptions & {
120
128
  type ClercFlagsDefinition = Record<string, ClercFlagOptions>;
121
129
  //#endregion
122
130
  //#region src/types/parameters.d.ts
123
- type InferParameter<T extends string> = T extends `<${infer Name extends string}...>` | `[${infer Name extends string}...]` ? Record<Name, string[]> : T extends `<${infer Name extends string}>` ? Record<Name, string> : T extends `[${infer Name extends string}]` ? Record<Name, string | undefined> : never;
131
+ type InferParameter<T extends string> = T extends `<${infer Name extends string}...>` | `[${infer Name extends string}...]` ? Record<CamelCase<Name>, string[]> : T extends `<${infer Name extends string}>` ? Record<CamelCase<Name>, string> : T extends `[${infer Name extends string}]` ? Record<CamelCase<Name>, string | undefined> : never;
124
132
  type InferParameters<T extends string[]> = T extends (infer U extends string)[] ? Prettify<UnionToIntersection<InferParameter<U>>> : never;
125
133
  //#endregion
126
134
  //#region src/types/context.d.ts
@@ -134,7 +142,7 @@ interface BaseContext<C extends Command = Command, GF extends ClercFlagsDefiniti
134
142
  flags: InferFlagsWithGlobal<C, GF>;
135
143
  ignored: string[];
136
144
  rawParsed: ParsedResult<InferFlagsWithGlobal<C, GF>>;
137
- maybeMissingParameters?: boolean;
145
+ missingParameters: boolean;
138
146
  }
139
147
  //#endregion
140
148
  //#region src/types/command.d.ts
@@ -190,6 +198,7 @@ interface CreateOptions {
190
198
  version?: string;
191
199
  }
192
200
  interface ParseOptions {
201
+ argv?: string[];
193
202
  run?: boolean;
194
203
  }
195
204
  declare class Clerc<Commands extends CommandsRecord = {}, GlobalFlags extends ClercFlagsDefinition = {}> {
@@ -214,9 +223,7 @@ declare class Clerc<Commands extends CommandsRecord = {}, GlobalFlags extends Cl
214
223
  interceptor(interceptor: Interceptor<Command, GlobalFlags>): this;
215
224
  on<Name$1 extends LiteralUnion<keyof Commands, string>>(name: Name$1, handler: CommandHandler<Commands[Name$1], GlobalFlags>): this;
216
225
  run(): void;
217
- parse(argv?: string[], {
218
- run
219
- }?: ParseOptions): this;
226
+ parse(argvOrOptions?: string[] | ParseOptions): this;
220
227
  }
221
228
  //#endregion
222
229
  //#region src/commands.d.ts
@@ -225,10 +232,10 @@ declare function resolveCommand(commandsMap: CommandsMap, parameters: string[]):
225
232
  //#region src/errors.d.ts
226
233
  declare class NoSuchCommandError extends Error {
227
234
  commandName: string;
228
- constructor(commandName: string);
235
+ constructor(commandName: string, text?: string);
229
236
  }
230
- declare class NoCommandGivenError extends Error {
231
- constructor();
237
+ declare class NoCommandSpecifiedError extends Error {
238
+ constructor(text?: string);
232
239
  }
233
240
  declare class InvalidCommandError extends Error {
234
241
  constructor(message: string);
@@ -249,4 +256,4 @@ declare function createStopAtFirstParameter(): IgnoreFunction;
249
256
  //#region src/plugin.d.ts
250
257
  declare const definePlugin: (plugin: Plugin) => Plugin;
251
258
  //#endregion
252
- export { BaseContext, Clerc, ClercFlagOptions, ClercFlagsDefinition, Command, CommandCustomOptions, CommandHandler, CommandHandlerContext, CommandOptions, CommandWithHandler, CommandsMap, CommandsRecord, ErrorHandler, InferParameters, Interceptor, InterceptorContext, InterceptorHandler, InterceptorNext, InterceptorObject, InvalidCommandError, InvalidParametersError, MakeEmitterEvents, MissingRequiredMetadataError, NoCommandGivenError, NoSuchCommandError, Plugin, createStopAtFirstParameter, defineCommand, definePlugin, resolveCommand };
259
+ export { BaseContext, Clerc, ClercFlagOptions, ClercFlagsDefinition, Command, CommandCustomOptions, CommandHandler, CommandHandlerContext, CommandOptions, CommandWithHandler, CommandsMap, CommandsRecord, DOUBLE_DASH, ErrorHandler, InferParameters, Interceptor, InterceptorContext, InterceptorHandler, InterceptorNext, InterceptorObject, InvalidCommandError, InvalidParametersError, KNOWN_FLAG, MakeEmitterEvents, MissingRequiredMetadataError, NoCommandSpecifiedError, NoSuchCommandError, PARAMETER, Plugin, UNKNOWN_FLAG, createStopAtFirstParameter, defineCommand, definePlugin, resolveCommand };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { DOUBLE_DASH, PARAMETER, parse } from "@clerc/parser";
2
- import { toArray } from "@clerc/utils";
1
+ import { DOUBLE_DASH, DOUBLE_DASH as DOUBLE_DASH$1, KNOWN_FLAG, PARAMETER, PARAMETER as PARAMETER$1, UNKNOWN_FLAG, parse } from "@clerc/parser";
2
+ import { camelCase, toArray } from "@clerc/utils";
3
3
  import { LiteEmit } from "lite-emit";
4
4
 
5
5
  //#region src/commands.ts
@@ -14,14 +14,14 @@ function resolveCommand(commandsMap, parameters) {
14
14
  //#endregion
15
15
  //#region src/errors.ts
16
16
  var NoSuchCommandError = class extends Error {
17
- constructor(commandName) {
18
- super(`No such command: "${commandName}".`);
17
+ constructor(commandName, text = `No such command: "${commandName}".`) {
18
+ super(text);
19
19
  this.commandName = commandName;
20
20
  }
21
21
  };
22
- var NoCommandGivenError = class extends Error {
23
- constructor() {
24
- super("No command specified.");
22
+ var NoCommandSpecifiedError = class extends Error {
23
+ constructor(text = "No command specified.") {
24
+ super(text);
25
25
  }
26
26
  };
27
27
  var InvalidCommandError = class extends Error {
@@ -82,7 +82,7 @@ function getParametersToResolve(argv) {
82
82
  }
83
83
  return parameters;
84
84
  }
85
- const PARAMETER_REGEX = /^(<|\[)(\w+)(\.\.\.)?(\]|>)$/;
85
+ const PARAMETER_REGEX = /^(<|\[)([\w ]+)(\.\.\.)?(\]|>)$/;
86
86
  const isParameterDefinitionBracketsValid = (definition) => definition.startsWith("<") && definition.endsWith(">") || definition.startsWith("[") && definition.endsWith("]");
87
87
  function _parseParameters(definitions, parameters) {
88
88
  const result = {};
@@ -90,7 +90,7 @@ function _parseParameters(definitions, parameters) {
90
90
  for (const [i, definition] of definitions.entries()) {
91
91
  const match = definition.match(PARAMETER_REGEX);
92
92
  if (!match || !isParameterDefinitionBracketsValid(definition)) throw new InvalidParametersError(`Invalid parameter definition: ${definition}`);
93
- const name = match[2];
93
+ const name = camelCase(match[2]);
94
94
  const isVariadic = !!match[3];
95
95
  const isRequired = definition.startsWith("<");
96
96
  if (name in result) throw new InvalidParametersError(`Duplicate parameter name: ${name}`);
@@ -105,7 +105,7 @@ function _parseParameters(definitions, parameters) {
105
105
  return result;
106
106
  }
107
107
  function parseParameters(definitions, parameters, doubleDashParameters) {
108
- const doubleDashIndex = definitions.indexOf(DOUBLE_DASH);
108
+ const doubleDashIndex = definitions.indexOf(DOUBLE_DASH$1);
109
109
  if (doubleDashIndex === -1) return _parseParameters(definitions, parameters);
110
110
  else {
111
111
  const definitionBeforeDoubleDash = definitions.slice(0, doubleDashIndex);
@@ -277,21 +277,23 @@ var Clerc = class Clerc {
277
277
  flags: parsed.flags,
278
278
  ignored: parsed.ignored,
279
279
  rawParsed: parsed,
280
- maybeMissingParameters: !!parametersError
280
+ missingParameters: !!parametersError
281
281
  };
282
282
  const emitInterceptor = {
283
283
  enforce: "post",
284
284
  handler: (ctx) => {
285
285
  if (parametersError) throw parametersError;
286
286
  if (command) this.#emitter.emit(command.name, ctx);
287
- else throw parametersToResolve.length > 0 ? new NoSuchCommandError(parametersToResolve.join(" ")) : new NoCommandGivenError();
287
+ else throw parametersToResolve.length > 0 ? new NoSuchCommandError(parametersToResolve.join(" ")) : new NoCommandSpecifiedError();
288
288
  }
289
289
  };
290
290
  const composedInterceptor = compose([...this.#interceptors, emitInterceptor]);
291
291
  this.#callWithErrorHandler(() => composedInterceptor(context));
292
292
  }
293
- parse(argv = platformArgv, { run = true } = {}) {
293
+ parse(argvOrOptions = platformArgv) {
294
294
  this.#callWithErrorHandler(() => this.#validate());
295
+ if (Array.isArray(argvOrOptions)) argvOrOptions = { argv: argvOrOptions };
296
+ const { argv = platformArgv, run = true } = argvOrOptions;
295
297
  this.#argv = argv;
296
298
  if (run) this.run();
297
299
  return this;
@@ -307,7 +309,7 @@ const defineCommand = (command) => command;
307
309
  function createStopAtFirstParameter() {
308
310
  let encounteredParameter = false;
309
311
  return (type) => {
310
- if (type === PARAMETER && !encounteredParameter) {
312
+ if (type === PARAMETER$1 && !encounteredParameter) {
311
313
  encounteredParameter = true;
312
314
  return false;
313
315
  }
@@ -320,4 +322,4 @@ function createStopAtFirstParameter() {
320
322
  const definePlugin = (plugin) => plugin;
321
323
 
322
324
  //#endregion
323
- export { Clerc, InvalidCommandError, InvalidParametersError, MissingRequiredMetadataError, NoCommandGivenError, NoSuchCommandError, createStopAtFirstParameter, defineCommand, definePlugin, resolveCommand };
325
+ export { Clerc, DOUBLE_DASH, InvalidCommandError, InvalidParametersError, KNOWN_FLAG, MissingRequiredMetadataError, NoCommandSpecifiedError, NoSuchCommandError, PARAMETER, UNKNOWN_FLAG, createStopAtFirstParameter, defineCommand, definePlugin, resolveCommand };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clerc/core",
3
- "version": "1.0.0-beta.1",
3
+ "version": "1.0.0-beta.2",
4
4
  "author": "Ray <i@mk1.io> (https://github.com/so1ve)",
5
5
  "type": "module",
6
6
  "description": "Clerc core",
@@ -45,8 +45,8 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "lite-emit": "^3.1.0",
48
- "@clerc/parser": "^1.0.0-beta.1",
49
- "@clerc/utils": "1.0.0-beta.1"
48
+ "@clerc/parser": "^1.0.0-beta.2",
49
+ "@clerc/utils": "1.0.0-beta.2"
50
50
  },
51
51
  "devDependencies": {
52
52
  "is-platform": "^1.0.0"