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

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
@@ -1,5 +1,23 @@
1
1
  import { ErrorHandler as ErrorHandler$1 } from "lite-emit";
2
2
 
3
+ //#region ../parser/src/flag-types.d.ts
4
+
5
+ /**
6
+ * Creates a Choices type function that validates the input against allowed values.
7
+ * The display name will be formatted as "value1 | value2 | ..." for help output.
8
+ *
9
+ * @param values - Array of allowed string values
10
+ * @returns A FlagTypeFunction that validates and returns the input value
11
+ * @throws {Error} If the value is not in the allowed values list
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const format = Choices(['json', 'yaml', 'xml']);
16
+ * // Help output will show: json | yaml | xml
17
+ * ```
18
+ */
19
+ declare function Choices<T extends string>(...values: T[]): FlagTypeFunction<T>;
20
+ //#endregion
3
21
  //#region ../utils/src/types/type-fest.d.ts
4
22
  type LiteralUnion<LiteralType, BaseType> = LiteralType | (BaseType & Record<never, never>);
5
23
  type Prettify<T> = { [K in keyof T]: T[K] } & {};
@@ -25,7 +43,13 @@ type FlagDefaultValue<T = unknown> = T | (() => T);
25
43
  *
26
44
  * @template T The target type.
27
45
  */
28
- type FlagTypeFunction<T = unknown> = (value: string) => T;
46
+ type FlagTypeFunction<T = unknown> = ((value: string) => T) & {
47
+ /**
48
+ * Optional display name for the type, useful in help output.
49
+ * If provided, this will be shown instead of the function name.
50
+ */
51
+ displayName?: string;
52
+ };
29
53
  /**
30
54
  * A callback function to conditionally stop parsing.
31
55
  * When it returns true, parsing stops and remaining arguments are preserved in `ignored`.
@@ -122,10 +146,13 @@ declare const DOUBLE_DASH = "--";
122
146
  type ErrorHandler = (error: unknown) => void;
123
147
  //#endregion
124
148
  //#region src/types/flag.d.ts
125
- type ClercFlagOptions = FlagOptions & {
149
+ interface FlagCustomOptions {}
150
+ type ClercFlagOptions = FlagOptions & FlagCustomOptions;
151
+ type ClercGlobalFlagDefinitionValue = ClercFlagOptions | FlagType;
152
+ type ClercFlagOptionsWithDescription = ClercFlagOptions & {
126
153
  description: string;
127
154
  };
128
- type ClercFlagsDefinition = Record<string, ClercFlagOptions>;
155
+ type ClercFlagsDefinition = Record<string, ClercFlagOptionsWithDescription>;
129
156
  //#endregion
130
157
  //#region src/types/parameters.d.ts
131
158
  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;
@@ -197,9 +224,9 @@ interface CreateOptions {
197
224
  description?: string;
198
225
  version?: string;
199
226
  }
200
- interface ParseOptions {
227
+ interface ParseOptions<Run extends boolean = true> {
201
228
  argv?: string[];
202
- run?: boolean;
229
+ run?: Run;
203
230
  }
204
231
  declare class Clerc<Commands extends CommandsRecord = {}, GlobalFlags extends ClercFlagsDefinition = {}> {
205
232
  #private;
@@ -219,11 +246,11 @@ declare class Clerc<Commands extends CommandsRecord = {}, GlobalFlags extends Cl
219
246
  errorHandler(handler: ErrorHandler$1): this;
220
247
  command<Name$1 extends string, Parameters extends string[] = [], Flags extends ClercFlagsDefinition = {}>(command: CommandWithHandler<Name$1, [...Parameters], Flags>): Clerc<Commands & Record<string, CommandWithHandler<Name$1, Parameters, Flags>>, GlobalFlags>;
221
248
  command<Name$1 extends string, Parameters extends string[] = [], Flags extends ClercFlagsDefinition = {}>(name: Name$1 extends keyof Commands ? ["COMMAND ALREADY EXISTS"] : Name$1, description: string, options?: CommandOptions<[...Parameters], Flags>): Clerc<Commands & Record<Name$1, Command<Name$1, Parameters, Flags>>, GlobalFlags>;
222
- globalFlag<Name$1 extends string, Flag extends FlagDefinitionValue>(name: Name$1, description: string, options: Flag): Clerc<Commands, GlobalFlags & Record<Name$1, Flag>>;
249
+ globalFlag<Name$1 extends string, Flag extends ClercGlobalFlagDefinitionValue>(name: Name$1, description: string, options: Flag): Clerc<Commands, GlobalFlags & Record<Name$1, Flag>>;
223
250
  interceptor(interceptor: Interceptor<Command, GlobalFlags>): this;
224
251
  on<Name$1 extends LiteralUnion<keyof Commands, string>>(name: Name$1, handler: CommandHandler<Commands[Name$1], GlobalFlags>): this;
225
- run(): void;
226
- parse(argvOrOptions?: string[] | ParseOptions): this;
252
+ run(): Promise<void>;
253
+ parse<Run extends boolean = true>(argvOrOptions?: string[] | ParseOptions<Run>): Run extends true ? Promise<void> : this;
227
254
  }
228
255
  //#endregion
229
256
  //#region src/commands.d.ts
@@ -256,4 +283,4 @@ declare function createStopAtFirstParameter(): IgnoreFunction;
256
283
  //#region src/plugin.d.ts
257
284
  declare const definePlugin: (plugin: Plugin) => Plugin;
258
285
  //#endregion
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 };
286
+ export { BaseContext, Choices, Clerc, ClercFlagOptions, ClercFlagOptionsWithDescription, ClercFlagsDefinition, ClercGlobalFlagDefinitionValue, Command, CommandCustomOptions, CommandHandler, CommandHandlerContext, CommandOptions, CommandWithHandler, CommandsMap, CommandsRecord, DOUBLE_DASH, ErrorHandler, FlagCustomOptions, 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,4 +1,4 @@
1
- import { DOUBLE_DASH, DOUBLE_DASH as DOUBLE_DASH$1, KNOWN_FLAG, PARAMETER, PARAMETER as PARAMETER$1, UNKNOWN_FLAG, parse } from "@clerc/parser";
1
+ import { Choices, DOUBLE_DASH, DOUBLE_DASH as DOUBLE_DASH$1, KNOWN_FLAG, PARAMETER, PARAMETER as PARAMETER$1, UNKNOWN_FLAG, parse } from "@clerc/parser";
2
2
  import { camelCase, toArray } from "@clerc/utils";
3
3
  import { LiteEmit } from "lite-emit";
4
4
 
@@ -198,7 +198,7 @@ var Clerc = class Clerc {
198
198
  #callWithErrorHandler(fn) {
199
199
  try {
200
200
  const result = fn();
201
- if (result instanceof Promise) result.catch((error) => {
201
+ if (result instanceof Promise) return result.catch((error) => {
202
202
  this.#handleError(error);
203
203
  });
204
204
  return result;
@@ -257,7 +257,7 @@ var Clerc = class Clerc {
257
257
  ignore
258
258
  }));
259
259
  }
260
- run() {
260
+ async run() {
261
261
  const parametersToResolve = getParametersToResolve(this.#argv);
262
262
  const [command, calledAs] = resolveCommand(this.#commands, parametersToResolve);
263
263
  const argvToPass = command && calledAs.length > 0 ? this.#argv.slice(calledAs.split(" ").length) : this.#argv;
@@ -288,14 +288,14 @@ var Clerc = class Clerc {
288
288
  }
289
289
  };
290
290
  const composedInterceptor = compose([...this.#interceptors, emitInterceptor]);
291
- this.#callWithErrorHandler(() => composedInterceptor(context));
291
+ return this.#callWithErrorHandler(() => composedInterceptor(context));
292
292
  }
293
293
  parse(argvOrOptions = platformArgv) {
294
294
  this.#callWithErrorHandler(() => this.#validate());
295
295
  if (Array.isArray(argvOrOptions)) argvOrOptions = { argv: argvOrOptions };
296
296
  const { argv = platformArgv, run = true } = argvOrOptions;
297
297
  this.#argv = argv;
298
- if (run) this.run();
298
+ if (run) return this.run();
299
299
  return this;
300
300
  }
301
301
  };
@@ -322,4 +322,4 @@ function createStopAtFirstParameter() {
322
322
  const definePlugin = (plugin) => plugin;
323
323
 
324
324
  //#endregion
325
- export { Clerc, DOUBLE_DASH, InvalidCommandError, InvalidParametersError, KNOWN_FLAG, MissingRequiredMetadataError, NoCommandSpecifiedError, NoSuchCommandError, PARAMETER, UNKNOWN_FLAG, createStopAtFirstParameter, defineCommand, definePlugin, resolveCommand };
325
+ export { Choices, 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.2",
3
+ "version": "1.0.0-beta.3",
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.2",
49
- "@clerc/utils": "1.0.0-beta.2"
48
+ "@clerc/parser": "^1.0.0-beta.3",
49
+ "@clerc/utils": "1.0.0-beta.3"
50
50
  },
51
51
  "devDependencies": {
52
52
  "is-platform": "^1.0.0"