jackspeak 2.0.2 → 2.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/README.md CHANGED
@@ -208,6 +208,14 @@ Returns the compiled `usage` string, with all option descriptions
208
208
  and heading/description text, wrapped to the appropriate width
209
209
  for the terminal.
210
210
 
211
+ ### `Jack.setConfigValues(options: OptionsResults, src?: string)`
212
+
213
+ Validate the `options` argument, and set the default value for
214
+ each field that appears in the options.
215
+
216
+ Values provided will be overridden by environment variables or
217
+ command line arguments.
218
+
211
219
  ## Some Example Code
212
220
 
213
221
  Also see [the examples
@@ -65,6 +65,7 @@ export type ConfigOptionBase<T extends ConfigType, M extends boolean> = {
65
65
  validate?: (v: any) => v is ValidValue<T, M>;
66
66
  } & MultiType<M>;
67
67
  export declare const isConfigType: (t: string) => t is ConfigType;
68
+ export declare const isConfigOption: <T extends ConfigType, M extends boolean>(o: any, type: T, multi: M) => o is ConfigOptionBase<T, M>;
68
69
  /**
69
70
  * A set of {@link ConfigOptionBase} objects, referenced by their longOption
70
71
  * string values.
@@ -162,6 +163,13 @@ export interface JackOptions {
162
163
  export declare class Jack<C extends ConfigSet = {}> {
163
164
  #private;
164
165
  constructor(options?: JackOptions);
166
+ /**
167
+ * Set the default value (which will still be overridden by env or cli)
168
+ * as if from a parsed config file. The optional `source` param, if
169
+ * provided, will be included in error messages if a value is invalid or
170
+ * unknown.
171
+ */
172
+ setConfigValues(values: OptionsResults<C>, source?: string): this;
165
173
  /**
166
174
  * Parse a string of arguments, and return the resulting
167
175
  * `{ values, positionals }` object.
@@ -169,6 +177,9 @@ export declare class Jack<C extends ConfigSet = {}> {
169
177
  * If an {@link JackOptions#envPrefix} is set, then it will read default
170
178
  * values from the environment, and write the resulting values back
171
179
  * to the environment as well.
180
+ *
181
+ * Environment values always take precedence over any other value, except
182
+ * an explicit CLI setting.
172
183
  */
173
184
  parse(args?: string[]): Parsed<C>;
174
185
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.jack = exports.Jack = exports.isConfigType = void 0;
6
+ exports.jack = exports.Jack = exports.isConfigOption = exports.isConfigType = void 0;
7
7
  const node_util_1 = require("node:util");
8
8
  const parse_args_js_1 = require("./parse-args.js");
9
9
  // it's a tiny API, just cast it inline, it's fine
@@ -51,6 +51,17 @@ const isConfigType = (t) => typeof t === 'string' &&
51
51
  (t === 'string' || t === 'number' || t === 'boolean');
52
52
  exports.isConfigType = isConfigType;
53
53
  const undefOrType = (v, t) => v === undefined || typeof v === t;
54
+ // print the value type, for error message reporting
55
+ const valueType = (v) => typeof v === 'string'
56
+ ? 'string'
57
+ : typeof v === 'boolean'
58
+ ? 'boolean'
59
+ : typeof v === 'number'
60
+ ? 'number'
61
+ : Array.isArray(v)
62
+ ? joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]'
63
+ : `${v.type}${v.multiple ? '[]' : ''}`;
64
+ const joinTypes = (types) => types.length === 1 ? types[0] : `(${types.join('|')})`;
54
65
  const isValidValue = (v, type, multi) => {
55
66
  if (multi) {
56
67
  if (!Array.isArray(v))
@@ -71,6 +82,7 @@ const isConfigOption = (o, type, multi) => !!o &&
71
82
  undefOrType(o.validate, 'function') &&
72
83
  (o.default === undefined || isValidValue(o.default, type, multi)) &&
73
84
  !!o.multiple === multi;
85
+ exports.isConfigOption = isConfigOption;
74
86
  function num(o = {}) {
75
87
  const { default: def, validate: val, ...rest } = o;
76
88
  if (def !== undefined && !isValidValue(def, 'number', false)) {
@@ -177,14 +189,14 @@ const toParseArgsOptionsConfig = (options) => {
177
189
  const c = {};
178
190
  for (const longOption in options) {
179
191
  const config = options[longOption];
180
- if (isConfigOption(config, 'number', true)) {
192
+ if ((0, exports.isConfigOption)(config, 'number', true)) {
181
193
  c[longOption] = {
182
194
  type: 'string',
183
195
  multiple: true,
184
196
  default: config.default?.map(c => String(c)),
185
197
  };
186
198
  }
187
- else if (isConfigOption(config, 'number', false)) {
199
+ else if ((0, exports.isConfigOption)(config, 'number', false)) {
188
200
  c[longOption] = {
189
201
  type: 'string',
190
202
  multiple: false,
@@ -240,6 +252,25 @@ class Jack {
240
252
  this.#configSet = Object.create(null);
241
253
  this.#shorts = Object.create(null);
242
254
  }
255
+ /**
256
+ * Set the default value (which will still be overridden by env or cli)
257
+ * as if from a parsed config file. The optional `source` param, if
258
+ * provided, will be included in error messages if a value is invalid or
259
+ * unknown.
260
+ */
261
+ setConfigValues(values, source = '') {
262
+ try {
263
+ this.validate(values);
264
+ }
265
+ catch (er) {
266
+ throw Object.assign(er, source ? { source } : {});
267
+ }
268
+ for (const [field, value] of Object.entries(values)) {
269
+ const my = this.#configSet[field];
270
+ my.default = value;
271
+ }
272
+ return this;
273
+ }
243
274
  /**
244
275
  * Parse a string of arguments, and return the resulting
245
276
  * `{ values, positionals }` object.
@@ -247,6 +278,9 @@ class Jack {
247
278
  * If an {@link JackOptions#envPrefix} is set, then it will read default
248
279
  * values from the environment, and write the resulting values back
249
280
  * to the environment as well.
281
+ *
282
+ * Environment values always take precedence over any other value, except
283
+ * an explicit CLI setting.
250
284
  */
251
285
  parse(args = process.argv) {
252
286
  if (args === process.argv) {
@@ -366,8 +400,10 @@ class Jack {
366
400
  throw new Error(`Unknown config option: ${field}`);
367
401
  }
368
402
  if (!isValidValue(o[field], config.type, !!config.multiple)) {
369
- throw new Error(`Invalid type for ${field} option, expected` +
370
- `${config.type}${config.multiple ? '[]' : ''}`);
403
+ throw Object.assign(new Error(`Invalid value ${valueType(o[field])} for ${field}, expected ${valueType(config)}`), {
404
+ field,
405
+ value: o[field],
406
+ });
371
407
  }
372
408
  if (config.validate && !config.validate(o[field])) {
373
409
  throw new Error(`Invalid config value for ${field}: ${o[field]}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type ConfigType = 'number' | 'string' | 'boolean'\n\nimport { inspect, InspectOptions, ParseArgsConfig } from 'node:util'\nimport { parseArgs } from './parse-args.js'\n\n// it's a tiny API, just cast it inline, it's fine\n//@ts-ignore\nimport _cliui from 'cliui'\nimport { basename } from 'node:path'\n\ninterface CliUI {\n div(\n ...p: {\n text: string\n padding?: [number, number, number, number]\n width?: number\n }[]\n ): void\n toString(): string\n}\nconst cliui = (o: { width?: number } = {}): CliUI => _cliui(o)\n\nconst width = Math.min(\n (process && process.stdout && process.stdout.columns) || 80,\n 80\n)\n\nconst toEnvKey = (pref: string, key: string): string => {\n return [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')]\n .join(' ')\n .trim()\n .toUpperCase()\n .replace(/ /g, '_')\n}\n\nconst toEnvVal = (\n value: string | boolean | number | string[] | boolean[] | number[],\n delim: string = '\\n'\n): string => {\n const str =\n typeof value === 'string'\n ? value\n : typeof value === 'boolean'\n ? value\n ? '1'\n : '0'\n : typeof value === 'number'\n ? String(value)\n : Array.isArray(value)\n ? value\n .map((v: string | number | boolean) => toEnvVal(v))\n .join(delim)\n : /* c8 ignore start */\n undefined\n if (typeof str !== 'string') {\n throw new Error(\n `could not serialize value to environment: ${JSON.stringify(value)}`\n )\n }\n /* c8 ignore stop */\n return str\n}\n\nconst fromEnvVal = <T extends ConfigType, M extends boolean>(\n env: string,\n type: T,\n multiple: M,\n delim: string = '\\n'\n): ValidValue<T, M> =>\n (multiple\n ? env.split(delim).map(v => fromEnvVal(v, type, false))\n : type === 'string'\n ? env\n : type === 'boolean'\n ? env === '1'\n : +env.trim()) as ValidValue<T, M>\n\n/**\n * Defines the type of value that is valid, given a config definition's\n * {@link ConfigType} and boolean multiple setting\n */\nexport type ValidValue<T extends ConfigType, M extends boolean> = [\n T,\n M\n] extends ['number', true]\n ? number[]\n : [T, M] extends ['string', true]\n ? string[]\n : [T, M] extends ['boolean', true]\n ? boolean[]\n : [T, M] extends ['number', false]\n ? number\n : [T, M] extends ['string', false]\n ? string\n : [T, M] extends ['boolean', false]\n ? boolean\n : [T, M] extends ['string', boolean]\n ? string | string[]\n : [T, M] extends ['boolean', boolean]\n ? boolean | boolean[]\n : [T, M] extends ['number', boolean]\n ? number | number[]\n : [T, M] extends [ConfigType, false]\n ? string | number | boolean\n : [T, M] extends [ConfigType, true]\n ? string[] | number[] | boolean[]\n : string | number | boolean | string[] | number[] | boolean[]\n\n/**\n * The meta information for a config option definition, when the\n * type and multiple values can be inferred by the method being used\n */\nexport type ConfigOptionMeta<T extends ConfigType, M extends boolean> = {\n default?: ValidValue<T, M> | undefined\n description?: string\n validate?: ((v: any) => v is ValidValue<T, M>) | ((v: any) => boolean)\n short?: string | undefined\n type?: T\n} & (T extends 'boolean' ? {} : { hint?: string | undefined }) &\n (M extends false\n ? {}\n : { multiple?: M | undefined; delim?: string | undefined })\n\n/**\n * A set of {@link ConfigOptionMeta} fields, referenced by their longOption\n * string values.\n */\nexport type ConfigMetaSet<T extends ConfigType, M extends boolean> = {\n [longOption: string]: ConfigOptionMeta<T, M>\n}\n\n/**\n * Infer {@link ConfigSet} fields from a given {@link ConfigMetaSet}\n */\nexport type ConfigSetFromMetaSet<\n T extends ConfigType,\n M extends boolean,\n S extends ConfigMetaSet<T, M>\n> = {\n [longOption in keyof S]: ConfigOptionBase<T, M>\n}\n\n/**\n * Fields that can be set on a {@link ConfigOptionBase} or\n * {@link ConfigOptionMeta} based on whether or not the field is known to be\n * multiple.\n */\nexport type MultiType<M extends boolean> = M extends true\n ? {\n multiple: true\n delim?: string | undefined\n }\n : M extends false\n ? {\n multiple?: false | undefined\n delim?: undefined\n }\n : {\n multiple?: boolean | undefined\n delim?: string | undefined\n }\n\n/**\n * A config field definition, in its full representation.\n */\nexport type ConfigOptionBase<T extends ConfigType, M extends boolean> = {\n type: T\n short?: string | undefined\n default?: ValidValue<T, M> | undefined\n description?: string\n hint?: T extends 'boolean' ? undefined : string | undefined\n validate?: (v: any) => v is ValidValue<T, M>\n} & MultiType<M>\n\nexport const isConfigType = (t: string): t is ConfigType =>\n typeof t === 'string' &&\n (t === 'string' || t === 'number' || t === 'boolean')\n\nconst undefOrType = (v: any, t: string): boolean =>\n v === undefined || typeof v === t\n\nconst isValidValue = <T extends ConfigType, M extends boolean>(\n v: any,\n type: T,\n multi: M\n): v is ValidValue<T, M> => {\n if (multi) {\n if (!Array.isArray(v)) return false\n return !v.some((v: any) => !isValidValue(v, type, false))\n }\n if (Array.isArray(v)) return false\n return typeof v === type\n}\n\nconst isConfigOption = <T extends ConfigType, M extends boolean>(\n o: any,\n type: T,\n multi: M\n): o is ConfigOptionBase<T, M> =>\n !!o &&\n typeof o === 'object' &&\n isConfigType(o.type) &&\n o.type === type &&\n undefOrType(o.short, 'string') &&\n undefOrType(o.description, 'string') &&\n undefOrType(o.hint, 'string') &&\n undefOrType(o.validate, 'function') &&\n (o.default === undefined || isValidValue(o.default, type, multi)) &&\n !!o.multiple === multi\n\n/**\n * A set of {@link ConfigOptionBase} objects, referenced by their longOption\n * string values.\n */\nexport type ConfigSet = {\n [longOption: string]: ConfigOptionBase<ConfigType, boolean>\n}\n\n/**\n * The 'values' field returned by {@link Jack#parse}\n */\nexport type OptionsResults<T extends ConfigSet> = {\n [k in keyof T]?: T[k] extends ConfigOptionBase<'string', false>\n ? string\n : T[k] extends ConfigOptionBase<'string', true>\n ? string[]\n : T[k] extends ConfigOptionBase<'number', false>\n ? number\n : T[k] extends ConfigOptionBase<'number', true>\n ? number[]\n : T[k] extends ConfigOptionBase<'boolean', false>\n ? boolean\n : T[k] extends ConfigOptionBase<'boolean', true>\n ? boolean[]\n : never\n}\n\n/**\n * The object retured by {@link Jack#parse}\n */\nexport type Parsed<T extends ConfigSet> = {\n values: OptionsResults<T>\n positionals: string[]\n}\n\nfunction num(\n o: ConfigOptionMeta<'number', false> = {}\n): ConfigOptionBase<'number', false> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'number', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'number',\n multiple: false,\n }\n}\n\nfunction numList(\n o: ConfigOptionMeta<'number', true> = {}\n): ConfigOptionBase<'number', true> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'number', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'number',\n multiple: true,\n }\n}\n\nfunction opt(\n o: ConfigOptionMeta<'string', false> = {}\n): ConfigOptionBase<'string', false> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'string', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'string',\n multiple: false,\n }\n}\n\nfunction optList(\n o: ConfigOptionMeta<'string', true> = {}\n): ConfigOptionBase<'string', true> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'string', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'string',\n multiple: true,\n }\n}\n\nfunction flag(\n o: ConfigOptionMeta<'boolean', false> = {}\n): ConfigOptionBase<'boolean', false> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false> & { hint: any }\n if (def !== undefined && !isValidValue(def, 'boolean', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'boolean', false>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: false,\n }\n}\n\nfunction flagList(\n o: ConfigOptionMeta<'boolean', true> = {}\n): ConfigOptionBase<'boolean', true> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false> & { hint: any }\n if (def !== undefined && !isValidValue(def, 'boolean', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'boolean', true>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag list')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: true,\n }\n}\nconst toParseArgsOptionsConfig = (\n options: ConfigSet\n): Exclude<ParseArgsConfig['options'], undefined> => {\n const c: Exclude<ParseArgsConfig['options'], undefined> = {}\n for (const longOption in options) {\n const config = options[longOption]\n if (isConfigOption(config, 'number', true)) {\n c[longOption] = {\n type: 'string',\n multiple: true,\n default: config.default?.map(c => String(c)),\n }\n } else if (isConfigOption(config, 'number', false)) {\n c[longOption] = {\n type: 'string',\n multiple: false,\n default:\n config.default === undefined\n ? undefined\n : String(config.default),\n }\n } else {\n const conf = config as\n | ConfigOptionBase<'string', boolean>\n | ConfigOptionBase<'boolean', boolean>\n c[longOption] = {\n type: conf.type,\n multiple: conf.multiple,\n default: conf.default,\n }\n }\n if (typeof config.short === 'string') {\n c[longOption].short = config.short\n }\n\n if (\n config.type === 'boolean' &&\n !longOption.startsWith('no-') &&\n !options[`no-${longOption}`]\n ) {\n c[`no-${longOption}`] = {\n type: 'boolean',\n multiple: config.multiple,\n }\n }\n }\n return c\n}\n\n/**\n * A row used when generating the {@link Jack#usage} string\n */\nexport interface Row {\n left?: string\n text: string\n skipLine?: boolean\n type?: string\n}\n/**\n * A heading or description row used when generating the {@link Jack#usage}\n * string\n */\nexport interface TextRow {\n type: 'heading' | 'description'\n text: string\n left?: ''\n skipLine?: boolean\n}\n/**\n * Either a {@link TextRow} or a reference to a {@link ConfigOptionBase}\n */\nexport type UsageField =\n | TextRow\n | {\n type: 'config'\n name: string\n value: ConfigOptionBase<ConfigType, boolean>\n }\n\n/**\n * Options provided to the {@link Jack} constructor\n */\nexport interface JackOptions {\n /**\n * Whether to allow positional arguments\n *\n * @default true\n */\n allowPositionals?: boolean\n\n /**\n * Prefix to use when reading/writing the environment variables\n *\n * If not specified, environment behavior will not be available.\n */\n envPrefix?: string\n\n /**\n * Environment object to read/write. Defaults `process.env`.\n * No effect if `envPrefix` is not set.\n */\n env?: { [k: string]: string | undefined }\n\n /**\n * A short usage string. If not provided, will be generated from the\n * options provided, but that can of course be rather verbose if\n * there are a lot of options.\n */\n usage?: string\n\n /**\n * Stop parsing flags and opts at the first positional argument.\n * This is to support cases like `cmd [flags] <subcmd> [options]`, where\n * each subcommand may have different options. This effectively treats\n * any positional as a `--` argument. Only relevant if `allowPositionals`\n * is true.\n *\n * To do subcommands, set this option, look at the first positional, and\n * parse the remaining positionals as appropriate.\n *\n * @default false\n */\n stopAtPositional?: boolean\n}\n\n/**\n * Class returned by the {@link jack} function and all configuration\n * definition methods. This is what gets chained together.\n */\nexport class Jack<C extends ConfigSet = {}> {\n #configSet: C\n #shorts: { [k: string]: string }\n #options: JackOptions\n #fields: UsageField[] = []\n #env: { [k: string]: string | undefined }\n #envPrefix?: string\n #allowPositionals: boolean\n #usage?: string\n\n constructor(options: JackOptions = {}) {\n this.#options = options\n this.#allowPositionals = options.allowPositionals !== false\n this.#env =\n this.#options.env === undefined ? process.env : this.#options.env\n this.#envPrefix = options.envPrefix\n // We need to fib a little, because it's always the same object, but it\n // starts out as having an empty config set. Then each method that adds\n // fields returns `this as Jack<C & { ...newConfigs }>`\n this.#configSet = Object.create(null) as C\n this.#shorts = Object.create(null)\n }\n\n /**\n * Parse a string of arguments, and return the resulting\n * `{ values, positionals }` object.\n *\n * If an {@link JackOptions#envPrefix} is set, then it will read default\n * values from the environment, and write the resulting values back\n * to the environment as well.\n */\n parse(args: string[] = process.argv): Parsed<C> {\n if (args === process.argv) {\n args = args.slice(\n (process as { _eval?: string })._eval !== undefined ? 1 : 2\n )\n }\n if (this.#envPrefix) {\n for (const [field, my] of Object.entries(this.#configSet)) {\n const ek = toEnvKey(this.#envPrefix, field)\n const env = this.#env[ek]\n if (env !== undefined) {\n my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim)\n }\n }\n }\n\n const options = toParseArgsOptionsConfig(this.#configSet)\n const result = parseArgs({\n args,\n options,\n // always strict, but using our own logic\n strict: false,\n allowPositionals: this.#allowPositionals,\n tokens: true,\n })\n\n const p: Parsed<C> = {\n values: {},\n positionals: [],\n }\n for (const token of result.tokens) {\n if (token.kind === 'positional') {\n p.positionals.push(token.value)\n if (this.#options.stopAtPositional) {\n p.positionals.push(...args.slice(token.index + 1))\n return p\n }\n } else if (token.kind === 'option') {\n let value: string | number | boolean | undefined = undefined\n if (token.name.startsWith('no-')) {\n const my = this.#configSet[token.name]\n const pname = token.name.substring('no-'.length)\n const pos = this.#configSet[pname]\n if (\n pos &&\n pos.type === 'boolean' &&\n (!my ||\n (my.type === 'boolean' && !!my.multiple === !!pos.multiple))\n ) {\n value = false\n token.name = pname\n }\n }\n const my = this.#configSet[token.name]\n if (!my) {\n throw new Error(\n `Unknown option '${token.rawName}'. ` +\n `To specify a positional argument starting with a '-', ` +\n `place it at the end of the command after '--', as in ` +\n `'-- ${token.rawName}'`\n )\n }\n if (value === undefined) {\n if (token.value === undefined) {\n if (my.type !== 'boolean') {\n throw new Error(\n `No value provided for ${token.rawName}, expected ${my.type}`\n )\n }\n value = true\n } else {\n if (my.type === 'boolean') {\n throw new Error(\n `Flag ${token.rawName} does not take a value, received '${token.value}'`\n )\n }\n if (my.type === 'string') {\n value = token.value\n } else {\n value = +token.value\n if (value !== value) {\n throw new Error(\n `Invalid value '${token.value}' provided for ` +\n `'${token.rawName}' option, expected number`\n )\n }\n }\n }\n }\n if (my.multiple) {\n const pv = p.values as {\n [k: string]: (string | number | boolean)[]\n }\n pv[token.name] = pv[token.name] ?? []\n pv[token.name].push(value)\n } else {\n const pv = p.values as { [k: string]: string | number | boolean }\n pv[token.name] = value\n }\n }\n }\n\n for (const [field, c] of Object.entries(this.#configSet)) {\n if (c.default !== undefined && !(field in p.values)) {\n //@ts-ignore\n p.values[field] = c.default\n }\n }\n\n for (const [field, value] of Object.entries(p.values)) {\n const valid = this.#configSet[field].validate\n if (valid && !valid(value)) {\n throw new Error(\n `Invalid value provided for --${field}: ${JSON.stringify(value)}`\n )\n }\n }\n\n this.#writeEnv(p)\n\n return p\n }\n\n /**\n * Validate that any arbitrary object is a valid configuration `values`\n * object. Useful when loading config files or other sources.\n */\n validate(o: any): asserts o is Parsed<C>['values'] {\n if (!o || typeof o !== 'object') {\n throw new Error('Invalid config: not an object')\n }\n for (const field in o) {\n const config = this.#configSet[field]\n if (!config) {\n throw new Error(`Unknown config option: ${field}`)\n }\n if (!isValidValue(o[field], config.type, !!config.multiple)) {\n throw new Error(\n `Invalid type for ${field} option, expected` +\n `${config.type}${config.multiple ? '[]' : ''}`\n )\n }\n if (config.validate && !config.validate(o[field])) {\n throw new Error(`Invalid config value for ${field}: ${o[field]}`)\n }\n }\n }\n\n #writeEnv(p: Parsed<C>) {\n if (!this.#env || !this.#envPrefix) return\n for (const [field, value] of Object.entries(p.values)) {\n const my = this.#configSet[field]\n this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(\n value,\n my.delim\n )\n }\n }\n\n /**\n * Add a heading to the usage output banner\n */\n heading(text: string): Jack<C> {\n this.#fields.push({ type: 'heading', text })\n return this\n }\n\n /**\n * Add a long-form description to the usage output at this position.\n */\n description(text: string): Jack<C> {\n this.#fields.push({ type: 'description', text })\n return this\n }\n\n /**\n * Add one or more number fields.\n */\n num<F extends ConfigMetaSet<'number', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'number', false, F>> {\n return this.#addFields(fields, num)\n }\n\n /**\n * Add one or more multiple number fields.\n */\n numList<F extends ConfigMetaSet<'number', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'number', true, F>> {\n return this.#addFields(fields, numList)\n }\n\n /**\n * Add one or more string option fields.\n */\n opt<F extends ConfigMetaSet<'string', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'string', false, F>> {\n return this.#addFields(fields, opt)\n }\n\n /**\n * Add one or more multiple string option fields.\n */\n optList<F extends ConfigMetaSet<'string', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'string', true, F>> {\n return this.#addFields(fields, optList)\n }\n\n /**\n * Add one or more flag fields.\n */\n flag<F extends ConfigMetaSet<'boolean', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'boolean', false, F>> {\n return this.#addFields(fields, flag)\n }\n\n /**\n * Add one or more multiple flag fields.\n */\n flagList<F extends ConfigMetaSet<'boolean', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'boolean', true, F>> {\n return this.#addFields(fields, flagList)\n }\n\n /**\n * Generic field definition method. Similar to flag/flagList/number/etc,\n * but you must specify the `type` (and optionally `multiple` and `delim`)\n * fields on each one, or Jack won't know how to define them.\n */\n addFields<F extends ConfigSet>(fields: F): Jack<C & F> {\n const next = this as unknown as Jack<C & F>\n for (const [name, field] of Object.entries(fields)) {\n this.#validateName(name, field)\n next.#fields.push({\n type: 'config',\n name,\n value: field as ConfigOptionBase<ConfigType, boolean>,\n })\n }\n Object.assign(next.#configSet, fields)\n return next\n }\n\n #addFields<\n T extends ConfigType,\n M extends boolean,\n F extends ConfigMetaSet<T, M>\n >(\n fields: F,\n fn: (m: ConfigOptionMeta<T, M>) => ConfigOptionBase<T, M>\n ): Jack<C & ConfigSetFromMetaSet<T, M, F>> {\n type NextC = C & ConfigSetFromMetaSet<T, M, F>\n const next = this as unknown as Jack<NextC>\n Object.assign(\n next.#configSet,\n Object.fromEntries(\n Object.entries(fields).map(([name, field]) => {\n this.#validateName(name, field)\n const option = fn(field)\n next.#fields.push({\n type: 'config',\n name,\n value: option as ConfigOptionBase<ConfigType, boolean>,\n })\n return [name, option]\n })\n )\n )\n return next\n }\n\n #validateName(name: string, field: { short?: string }) {\n if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) {\n throw new TypeError(\n `Invalid option name: ${name}, ` +\n `must be '-' delimited ASCII alphanumeric`\n )\n }\n if (this.#configSet[name]) {\n throw new TypeError(`Cannot redefine option ${field}`)\n }\n if (this.#shorts[name]) {\n throw new TypeError(\n `Cannot redefine option ${name}, already ` +\n `in use for ${this.#shorts[name]}`\n )\n }\n if (field.short) {\n if (!/^[a-zA-Z0-9]$/.test(field.short)) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n 'must be 1 ASCII alphanumeric character'\n )\n }\n if (this.#shorts[field.short]) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n `already in use for ${this.#shorts[field.short]}`\n )\n }\n this.#shorts[field.short] = name\n this.#shorts[name] = name\n }\n }\n\n /**\n * Return the usage banner for the given configuration\n */\n usage(): string {\n if (this.#usage) return this.#usage\n const ui = cliui({ width })\n let start = this.#fields[0]?.type === 'heading' ? 1 : 0\n if (this.#fields[0]?.type === 'heading') {\n ui.div({ text: normalize(this.#fields[0].text) })\n }\n ui.div({ text: 'Usage:' })\n if (this.#options.usage) {\n ui.div({\n text: this.#options.usage,\n padding: [0, 0, 0, 2],\n })\n } else {\n const cmd = basename(process.argv[1])\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n ui.div({\n text: usage,\n padding: [0, 0, 0, 2],\n })\n }\n ui.div({ text: '' })\n const maybeDesc = this.#fields[start]\n if (maybeDesc?.type === 'description') {\n start++\n ui.div({\n text: normalize(maybeDesc.text),\n })\n ui.div({ text: '' })\n }\n\n // turn each config type into a row, and figure out the width of the\n // left hand indentation for the option descriptions.\n let maxMax = Math.max(12, Math.min(26, Math.floor(width / 3)))\n let maxWidth = 8\n let prev: Row | TextRow | undefined = undefined\n const rows: (Row | TextRow)[] = []\n for (const field of this.#fields.slice(start)) {\n if (field.type !== 'config') {\n if (prev) prev.skipLine = true\n prev = undefined\n field.text = normalize(field.text)\n rows.push(field)\n continue\n }\n const { value } = field\n const desc = value.description || ''\n const mult = value.multiple ? 'Can be set multiple times' : ''\n const dmDelim = mult && (desc.includes('\\n') ? '\\n\\n' : '\\n')\n const text = normalize(desc + dmDelim + mult)\n const hint =\n value.hint ||\n (value.type === 'number'\n ? 'n'\n : value.type === 'string'\n ? field.name\n : undefined)\n const short = !value.short\n ? ''\n : value.type === 'boolean'\n ? `-${value.short} `\n : `-${value.short}<${hint}> `\n const left =\n value.type === 'boolean'\n ? `${short}--${field.name}`\n : `${short}--${field.name}=<${hint}>`\n const row: Row = { text, left }\n if (text.length > width - maxMax) {\n row.skipLine = true\n }\n if (prev && left.length > maxMax) prev.skipLine = true\n prev = row\n const len = left.length + 4\n if (len > maxWidth && len < maxMax) {\n maxWidth = len\n }\n\n rows.push(row)\n }\n\n for (const row of rows) {\n if (row.left) {\n // If the row is too long, don't wrap it\n // Bump the right-hand side down a line to make room\n if (row.left.length > maxWidth - 2) {\n ui.div({ text: row.left, padding: [0, 0, 0, 2] })\n ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] })\n } else {\n ui.div(\n {\n text: row.left,\n padding: [0, 1, 0, 2],\n width: maxWidth,\n },\n { text: row.text }\n )\n }\n if (row.skipLine) {\n ui.div({ text: '' })\n }\n } else {\n if (row.type === 'heading') {\n ui.div(row)\n } else {\n ui.div({ ...row, padding: [1, 0, 1, 2] })\n }\n ui.div()\n }\n }\n\n return (this.#usage = ui.toString())\n }\n\n /**\n * Return the configuration options as a plain object\n */\n toJSON() {\n return Object.fromEntries(\n Object.entries(this.#configSet).map(([field, def]) => [\n field,\n {\n type: def.type,\n ...(def.multiple ? { multiple: true } : {}),\n ...(def.delim ? { delim: def.delim } : {}),\n ...(def.short ? { short: def.short } : {}),\n ...(def.description ? { description: def.description } : {}),\n ...(def.validate ? { validate: def.validate } : {}),\n ...(def.default !== undefined ? { default: def.default } : {}),\n },\n ])\n )\n }\n\n /**\n * Custom printer for `util.inspect`\n */\n [inspect.custom](_: number, options: InspectOptions) {\n return `Jack ${inspect(this.toJSON(), options)}`\n }\n}\n\n// Unwrap and un-indent, so we can wrap description\n// strings however makes them look nice in the code.\nconst normalize = (s: string): string =>\n s\n // remove single line breaks\n .replace(/([^\\n])\\n[ \\t]*([^\\n])/g, '$1 $2')\n // normalize mid-line whitespace\n .replace(/([^\\n])[ \\t]+([^\\n])/g, '$1 $2')\n // two line breaks are enough\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n\n/**\n * Main entry point. Create and return a {@link Jack} object.\n */\nexport const jack = (options: JackOptions = {}) => new Jack(options)\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type ConfigType = 'number' | 'string' | 'boolean'\n\nimport { inspect, InspectOptions, ParseArgsConfig } from 'node:util'\nimport { parseArgs } from './parse-args.js'\n\n// it's a tiny API, just cast it inline, it's fine\n//@ts-ignore\nimport _cliui from 'cliui'\nimport { basename } from 'node:path'\n\ninterface CliUI {\n div(\n ...p: {\n text: string\n padding?: [number, number, number, number]\n width?: number\n }[]\n ): void\n toString(): string\n}\nconst cliui = (o: { width?: number } = {}): CliUI => _cliui(o)\n\nconst width = Math.min(\n (process && process.stdout && process.stdout.columns) || 80,\n 80\n)\n\nconst toEnvKey = (pref: string, key: string): string => {\n return [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')]\n .join(' ')\n .trim()\n .toUpperCase()\n .replace(/ /g, '_')\n}\n\nconst toEnvVal = (\n value: string | boolean | number | string[] | boolean[] | number[],\n delim: string = '\\n'\n): string => {\n const str =\n typeof value === 'string'\n ? value\n : typeof value === 'boolean'\n ? value\n ? '1'\n : '0'\n : typeof value === 'number'\n ? String(value)\n : Array.isArray(value)\n ? value\n .map((v: string | number | boolean) => toEnvVal(v))\n .join(delim)\n : /* c8 ignore start */\n undefined\n if (typeof str !== 'string') {\n throw new Error(\n `could not serialize value to environment: ${JSON.stringify(value)}`\n )\n }\n /* c8 ignore stop */\n return str\n}\n\nconst fromEnvVal = <T extends ConfigType, M extends boolean>(\n env: string,\n type: T,\n multiple: M,\n delim: string = '\\n'\n): ValidValue<T, M> =>\n (multiple\n ? env.split(delim).map(v => fromEnvVal(v, type, false))\n : type === 'string'\n ? env\n : type === 'boolean'\n ? env === '1'\n : +env.trim()) as ValidValue<T, M>\n\n/**\n * Defines the type of value that is valid, given a config definition's\n * {@link ConfigType} and boolean multiple setting\n */\nexport type ValidValue<T extends ConfigType, M extends boolean> = [\n T,\n M\n] extends ['number', true]\n ? number[]\n : [T, M] extends ['string', true]\n ? string[]\n : [T, M] extends ['boolean', true]\n ? boolean[]\n : [T, M] extends ['number', false]\n ? number\n : [T, M] extends ['string', false]\n ? string\n : [T, M] extends ['boolean', false]\n ? boolean\n : [T, M] extends ['string', boolean]\n ? string | string[]\n : [T, M] extends ['boolean', boolean]\n ? boolean | boolean[]\n : [T, M] extends ['number', boolean]\n ? number | number[]\n : [T, M] extends [ConfigType, false]\n ? string | number | boolean\n : [T, M] extends [ConfigType, true]\n ? string[] | number[] | boolean[]\n : string | number | boolean | string[] | number[] | boolean[]\n\n/**\n * The meta information for a config option definition, when the\n * type and multiple values can be inferred by the method being used\n */\nexport type ConfigOptionMeta<T extends ConfigType, M extends boolean> = {\n default?: ValidValue<T, M> | undefined\n description?: string\n validate?: ((v: any) => v is ValidValue<T, M>) | ((v: any) => boolean)\n short?: string | undefined\n type?: T\n} & (T extends 'boolean' ? {} : { hint?: string | undefined }) &\n (M extends false\n ? {}\n : { multiple?: M | undefined; delim?: string | undefined })\n\n/**\n * A set of {@link ConfigOptionMeta} fields, referenced by their longOption\n * string values.\n */\nexport type ConfigMetaSet<T extends ConfigType, M extends boolean> = {\n [longOption: string]: ConfigOptionMeta<T, M>\n}\n\n/**\n * Infer {@link ConfigSet} fields from a given {@link ConfigMetaSet}\n */\nexport type ConfigSetFromMetaSet<\n T extends ConfigType,\n M extends boolean,\n S extends ConfigMetaSet<T, M>\n> = {\n [longOption in keyof S]: ConfigOptionBase<T, M>\n}\n\n/**\n * Fields that can be set on a {@link ConfigOptionBase} or\n * {@link ConfigOptionMeta} based on whether or not the field is known to be\n * multiple.\n */\nexport type MultiType<M extends boolean> = M extends true\n ? {\n multiple: true\n delim?: string | undefined\n }\n : M extends false\n ? {\n multiple?: false | undefined\n delim?: undefined\n }\n : {\n multiple?: boolean | undefined\n delim?: string | undefined\n }\n\n/**\n * A config field definition, in its full representation.\n */\nexport type ConfigOptionBase<T extends ConfigType, M extends boolean> = {\n type: T\n short?: string | undefined\n default?: ValidValue<T, M> | undefined\n description?: string\n hint?: T extends 'boolean' ? undefined : string | undefined\n validate?: (v: any) => v is ValidValue<T, M>\n} & MultiType<M>\n\nexport const isConfigType = (t: string): t is ConfigType =>\n typeof t === 'string' &&\n (t === 'string' || t === 'number' || t === 'boolean')\n\nconst undefOrType = (v: any, t: string): boolean =>\n v === undefined || typeof v === t\n\n// print the value type, for error message reporting\nconst valueType = (\n v:\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[]\n | { type: ConfigType; multiple?: boolean }\n): string =>\n typeof v === 'string'\n ? 'string'\n : typeof v === 'boolean'\n ? 'boolean'\n : typeof v === 'number'\n ? 'number'\n : Array.isArray(v)\n ? joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]'\n : `${v.type}${v.multiple ? '[]' : ''}`\n\nconst joinTypes = (types: string[]): string =>\n types.length === 1 ? types[0] : `(${types.join('|')})`\n\nconst isValidValue = <T extends ConfigType, M extends boolean>(\n v: any,\n type: T,\n multi: M\n): v is ValidValue<T, M> => {\n if (multi) {\n if (!Array.isArray(v)) return false\n return !v.some((v: any) => !isValidValue(v, type, false))\n }\n if (Array.isArray(v)) return false\n return typeof v === type\n}\n\nexport const isConfigOption = <T extends ConfigType, M extends boolean>(\n o: any,\n type: T,\n multi: M\n): o is ConfigOptionBase<T, M> =>\n !!o &&\n typeof o === 'object' &&\n isConfigType(o.type) &&\n o.type === type &&\n undefOrType(o.short, 'string') &&\n undefOrType(o.description, 'string') &&\n undefOrType(o.hint, 'string') &&\n undefOrType(o.validate, 'function') &&\n (o.default === undefined || isValidValue(o.default, type, multi)) &&\n !!o.multiple === multi\n\n/**\n * A set of {@link ConfigOptionBase} objects, referenced by their longOption\n * string values.\n */\nexport type ConfigSet = {\n [longOption: string]: ConfigOptionBase<ConfigType, boolean>\n}\n\n/**\n * The 'values' field returned by {@link Jack#parse}\n */\nexport type OptionsResults<T extends ConfigSet> = {\n [k in keyof T]?: T[k] extends ConfigOptionBase<'string', false>\n ? string\n : T[k] extends ConfigOptionBase<'string', true>\n ? string[]\n : T[k] extends ConfigOptionBase<'number', false>\n ? number\n : T[k] extends ConfigOptionBase<'number', true>\n ? number[]\n : T[k] extends ConfigOptionBase<'boolean', false>\n ? boolean\n : T[k] extends ConfigOptionBase<'boolean', true>\n ? boolean[]\n : never\n}\n\n/**\n * The object retured by {@link Jack#parse}\n */\nexport type Parsed<T extends ConfigSet> = {\n values: OptionsResults<T>\n positionals: string[]\n}\n\nfunction num(\n o: ConfigOptionMeta<'number', false> = {}\n): ConfigOptionBase<'number', false> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'number', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'number',\n multiple: false,\n }\n}\n\nfunction numList(\n o: ConfigOptionMeta<'number', true> = {}\n): ConfigOptionBase<'number', true> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'number', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'number',\n multiple: true,\n }\n}\n\nfunction opt(\n o: ConfigOptionMeta<'string', false> = {}\n): ConfigOptionBase<'string', false> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'string', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'string',\n multiple: false,\n }\n}\n\nfunction optList(\n o: ConfigOptionMeta<'string', true> = {}\n): ConfigOptionBase<'string', true> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'string', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'string',\n multiple: true,\n }\n}\n\nfunction flag(\n o: ConfigOptionMeta<'boolean', false> = {}\n): ConfigOptionBase<'boolean', false> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false> & { hint: any }\n if (def !== undefined && !isValidValue(def, 'boolean', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'boolean', false>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: false,\n }\n}\n\nfunction flagList(\n o: ConfigOptionMeta<'boolean', true> = {}\n): ConfigOptionBase<'boolean', true> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false> & { hint: any }\n if (def !== undefined && !isValidValue(def, 'boolean', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'boolean', true>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag list')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: true,\n }\n}\nconst toParseArgsOptionsConfig = (\n options: ConfigSet\n): Exclude<ParseArgsConfig['options'], undefined> => {\n const c: Exclude<ParseArgsConfig['options'], undefined> = {}\n for (const longOption in options) {\n const config = options[longOption]\n if (isConfigOption(config, 'number', true)) {\n c[longOption] = {\n type: 'string',\n multiple: true,\n default: config.default?.map(c => String(c)),\n }\n } else if (isConfigOption(config, 'number', false)) {\n c[longOption] = {\n type: 'string',\n multiple: false,\n default:\n config.default === undefined\n ? undefined\n : String(config.default),\n }\n } else {\n const conf = config as\n | ConfigOptionBase<'string', boolean>\n | ConfigOptionBase<'boolean', boolean>\n c[longOption] = {\n type: conf.type,\n multiple: conf.multiple,\n default: conf.default,\n }\n }\n if (typeof config.short === 'string') {\n c[longOption].short = config.short\n }\n\n if (\n config.type === 'boolean' &&\n !longOption.startsWith('no-') &&\n !options[`no-${longOption}`]\n ) {\n c[`no-${longOption}`] = {\n type: 'boolean',\n multiple: config.multiple,\n }\n }\n }\n return c\n}\n\n/**\n * A row used when generating the {@link Jack#usage} string\n */\nexport interface Row {\n left?: string\n text: string\n skipLine?: boolean\n type?: string\n}\n/**\n * A heading or description row used when generating the {@link Jack#usage}\n * string\n */\nexport interface TextRow {\n type: 'heading' | 'description'\n text: string\n left?: ''\n skipLine?: boolean\n}\n/**\n * Either a {@link TextRow} or a reference to a {@link ConfigOptionBase}\n */\nexport type UsageField =\n | TextRow\n | {\n type: 'config'\n name: string\n value: ConfigOptionBase<ConfigType, boolean>\n }\n\n/**\n * Options provided to the {@link Jack} constructor\n */\nexport interface JackOptions {\n /**\n * Whether to allow positional arguments\n *\n * @default true\n */\n allowPositionals?: boolean\n\n /**\n * Prefix to use when reading/writing the environment variables\n *\n * If not specified, environment behavior will not be available.\n */\n envPrefix?: string\n\n /**\n * Environment object to read/write. Defaults `process.env`.\n * No effect if `envPrefix` is not set.\n */\n env?: { [k: string]: string | undefined }\n\n /**\n * A short usage string. If not provided, will be generated from the\n * options provided, but that can of course be rather verbose if\n * there are a lot of options.\n */\n usage?: string\n\n /**\n * Stop parsing flags and opts at the first positional argument.\n * This is to support cases like `cmd [flags] <subcmd> [options]`, where\n * each subcommand may have different options. This effectively treats\n * any positional as a `--` argument. Only relevant if `allowPositionals`\n * is true.\n *\n * To do subcommands, set this option, look at the first positional, and\n * parse the remaining positionals as appropriate.\n *\n * @default false\n */\n stopAtPositional?: boolean\n}\n\n/**\n * Class returned by the {@link jack} function and all configuration\n * definition methods. This is what gets chained together.\n */\nexport class Jack<C extends ConfigSet = {}> {\n #configSet: C\n #shorts: { [k: string]: string }\n #options: JackOptions\n #fields: UsageField[] = []\n #env: { [k: string]: string | undefined }\n #envPrefix?: string\n #allowPositionals: boolean\n #usage?: string\n\n constructor(options: JackOptions = {}) {\n this.#options = options\n this.#allowPositionals = options.allowPositionals !== false\n this.#env =\n this.#options.env === undefined ? process.env : this.#options.env\n this.#envPrefix = options.envPrefix\n // We need to fib a little, because it's always the same object, but it\n // starts out as having an empty config set. Then each method that adds\n // fields returns `this as Jack<C & { ...newConfigs }>`\n this.#configSet = Object.create(null) as C\n this.#shorts = Object.create(null)\n }\n\n /**\n * Set the default value (which will still be overridden by env or cli)\n * as if from a parsed config file. The optional `source` param, if\n * provided, will be included in error messages if a value is invalid or\n * unknown.\n */\n setConfigValues(values: OptionsResults<C>, source = '') {\n try {\n this.validate(values)\n } catch (er) {\n throw Object.assign(er as Error, source ? { source } : {})\n }\n for (const [field, value] of Object.entries(values)) {\n const my = this.#configSet[field]\n my.default = value\n }\n return this\n }\n\n /**\n * Parse a string of arguments, and return the resulting\n * `{ values, positionals }` object.\n *\n * If an {@link JackOptions#envPrefix} is set, then it will read default\n * values from the environment, and write the resulting values back\n * to the environment as well.\n *\n * Environment values always take precedence over any other value, except\n * an explicit CLI setting.\n */\n parse(args: string[] = process.argv): Parsed<C> {\n if (args === process.argv) {\n args = args.slice(\n (process as { _eval?: string })._eval !== undefined ? 1 : 2\n )\n }\n if (this.#envPrefix) {\n for (const [field, my] of Object.entries(this.#configSet)) {\n const ek = toEnvKey(this.#envPrefix, field)\n const env = this.#env[ek]\n if (env !== undefined) {\n my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim)\n }\n }\n }\n\n const options = toParseArgsOptionsConfig(this.#configSet)\n const result = parseArgs({\n args,\n options,\n // always strict, but using our own logic\n strict: false,\n allowPositionals: this.#allowPositionals,\n tokens: true,\n })\n\n const p: Parsed<C> = {\n values: {},\n positionals: [],\n }\n for (const token of result.tokens) {\n if (token.kind === 'positional') {\n p.positionals.push(token.value)\n if (this.#options.stopAtPositional) {\n p.positionals.push(...args.slice(token.index + 1))\n return p\n }\n } else if (token.kind === 'option') {\n let value: string | number | boolean | undefined = undefined\n if (token.name.startsWith('no-')) {\n const my = this.#configSet[token.name]\n const pname = token.name.substring('no-'.length)\n const pos = this.#configSet[pname]\n if (\n pos &&\n pos.type === 'boolean' &&\n (!my ||\n (my.type === 'boolean' && !!my.multiple === !!pos.multiple))\n ) {\n value = false\n token.name = pname\n }\n }\n const my = this.#configSet[token.name]\n if (!my) {\n throw new Error(\n `Unknown option '${token.rawName}'. ` +\n `To specify a positional argument starting with a '-', ` +\n `place it at the end of the command after '--', as in ` +\n `'-- ${token.rawName}'`\n )\n }\n if (value === undefined) {\n if (token.value === undefined) {\n if (my.type !== 'boolean') {\n throw new Error(\n `No value provided for ${token.rawName}, expected ${my.type}`\n )\n }\n value = true\n } else {\n if (my.type === 'boolean') {\n throw new Error(\n `Flag ${token.rawName} does not take a value, received '${token.value}'`\n )\n }\n if (my.type === 'string') {\n value = token.value\n } else {\n value = +token.value\n if (value !== value) {\n throw new Error(\n `Invalid value '${token.value}' provided for ` +\n `'${token.rawName}' option, expected number`\n )\n }\n }\n }\n }\n if (my.multiple) {\n const pv = p.values as {\n [k: string]: (string | number | boolean)[]\n }\n pv[token.name] = pv[token.name] ?? []\n pv[token.name].push(value)\n } else {\n const pv = p.values as { [k: string]: string | number | boolean }\n pv[token.name] = value\n }\n }\n }\n\n for (const [field, c] of Object.entries(this.#configSet)) {\n if (c.default !== undefined && !(field in p.values)) {\n //@ts-ignore\n p.values[field] = c.default\n }\n }\n\n for (const [field, value] of Object.entries(p.values)) {\n const valid = this.#configSet[field].validate\n if (valid && !valid(value)) {\n throw new Error(\n `Invalid value provided for --${field}: ${JSON.stringify(value)}`\n )\n }\n }\n\n this.#writeEnv(p)\n\n return p\n }\n\n /**\n * Validate that any arbitrary object is a valid configuration `values`\n * object. Useful when loading config files or other sources.\n */\n validate(o: any): asserts o is Parsed<C>['values'] {\n if (!o || typeof o !== 'object') {\n throw new Error('Invalid config: not an object')\n }\n for (const field in o) {\n const config = this.#configSet[field]\n if (!config) {\n throw new Error(`Unknown config option: ${field}`)\n }\n if (!isValidValue(o[field], config.type, !!config.multiple)) {\n throw Object.assign(\n new Error(\n `Invalid value ${valueType(\n o[field]\n )} for ${field}, expected ${valueType(config)}`\n ),\n {\n field,\n value: o[field],\n }\n )\n }\n if (config.validate && !config.validate(o[field])) {\n throw new Error(`Invalid config value for ${field}: ${o[field]}`)\n }\n }\n }\n\n #writeEnv(p: Parsed<C>) {\n if (!this.#env || !this.#envPrefix) return\n for (const [field, value] of Object.entries(p.values)) {\n const my = this.#configSet[field]\n this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(\n value,\n my.delim\n )\n }\n }\n\n /**\n * Add a heading to the usage output banner\n */\n heading(text: string): Jack<C> {\n this.#fields.push({ type: 'heading', text })\n return this\n }\n\n /**\n * Add a long-form description to the usage output at this position.\n */\n description(text: string): Jack<C> {\n this.#fields.push({ type: 'description', text })\n return this\n }\n\n /**\n * Add one or more number fields.\n */\n num<F extends ConfigMetaSet<'number', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'number', false, F>> {\n return this.#addFields(fields, num)\n }\n\n /**\n * Add one or more multiple number fields.\n */\n numList<F extends ConfigMetaSet<'number', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'number', true, F>> {\n return this.#addFields(fields, numList)\n }\n\n /**\n * Add one or more string option fields.\n */\n opt<F extends ConfigMetaSet<'string', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'string', false, F>> {\n return this.#addFields(fields, opt)\n }\n\n /**\n * Add one or more multiple string option fields.\n */\n optList<F extends ConfigMetaSet<'string', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'string', true, F>> {\n return this.#addFields(fields, optList)\n }\n\n /**\n * Add one or more flag fields.\n */\n flag<F extends ConfigMetaSet<'boolean', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'boolean', false, F>> {\n return this.#addFields(fields, flag)\n }\n\n /**\n * Add one or more multiple flag fields.\n */\n flagList<F extends ConfigMetaSet<'boolean', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'boolean', true, F>> {\n return this.#addFields(fields, flagList)\n }\n\n /**\n * Generic field definition method. Similar to flag/flagList/number/etc,\n * but you must specify the `type` (and optionally `multiple` and `delim`)\n * fields on each one, or Jack won't know how to define them.\n */\n addFields<F extends ConfigSet>(fields: F): Jack<C & F> {\n const next = this as unknown as Jack<C & F>\n for (const [name, field] of Object.entries(fields)) {\n this.#validateName(name, field)\n next.#fields.push({\n type: 'config',\n name,\n value: field as ConfigOptionBase<ConfigType, boolean>,\n })\n }\n Object.assign(next.#configSet, fields)\n return next\n }\n\n #addFields<\n T extends ConfigType,\n M extends boolean,\n F extends ConfigMetaSet<T, M>\n >(\n fields: F,\n fn: (m: ConfigOptionMeta<T, M>) => ConfigOptionBase<T, M>\n ): Jack<C & ConfigSetFromMetaSet<T, M, F>> {\n type NextC = C & ConfigSetFromMetaSet<T, M, F>\n const next = this as unknown as Jack<NextC>\n Object.assign(\n next.#configSet,\n Object.fromEntries(\n Object.entries(fields).map(([name, field]) => {\n this.#validateName(name, field)\n const option = fn(field)\n next.#fields.push({\n type: 'config',\n name,\n value: option as ConfigOptionBase<ConfigType, boolean>,\n })\n return [name, option]\n })\n )\n )\n return next\n }\n\n #validateName(name: string, field: { short?: string }) {\n if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) {\n throw new TypeError(\n `Invalid option name: ${name}, ` +\n `must be '-' delimited ASCII alphanumeric`\n )\n }\n if (this.#configSet[name]) {\n throw new TypeError(`Cannot redefine option ${field}`)\n }\n if (this.#shorts[name]) {\n throw new TypeError(\n `Cannot redefine option ${name}, already ` +\n `in use for ${this.#shorts[name]}`\n )\n }\n if (field.short) {\n if (!/^[a-zA-Z0-9]$/.test(field.short)) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n 'must be 1 ASCII alphanumeric character'\n )\n }\n if (this.#shorts[field.short]) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n `already in use for ${this.#shorts[field.short]}`\n )\n }\n this.#shorts[field.short] = name\n this.#shorts[name] = name\n }\n }\n\n /**\n * Return the usage banner for the given configuration\n */\n usage(): string {\n if (this.#usage) return this.#usage\n const ui = cliui({ width })\n let start = this.#fields[0]?.type === 'heading' ? 1 : 0\n if (this.#fields[0]?.type === 'heading') {\n ui.div({ text: normalize(this.#fields[0].text) })\n }\n ui.div({ text: 'Usage:' })\n if (this.#options.usage) {\n ui.div({\n text: this.#options.usage,\n padding: [0, 0, 0, 2],\n })\n } else {\n const cmd = basename(process.argv[1])\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n ui.div({\n text: usage,\n padding: [0, 0, 0, 2],\n })\n }\n ui.div({ text: '' })\n const maybeDesc = this.#fields[start]\n if (maybeDesc?.type === 'description') {\n start++\n ui.div({\n text: normalize(maybeDesc.text),\n })\n ui.div({ text: '' })\n }\n\n // turn each config type into a row, and figure out the width of the\n // left hand indentation for the option descriptions.\n let maxMax = Math.max(12, Math.min(26, Math.floor(width / 3)))\n let maxWidth = 8\n let prev: Row | TextRow | undefined = undefined\n const rows: (Row | TextRow)[] = []\n for (const field of this.#fields.slice(start)) {\n if (field.type !== 'config') {\n if (prev) prev.skipLine = true\n prev = undefined\n field.text = normalize(field.text)\n rows.push(field)\n continue\n }\n const { value } = field\n const desc = value.description || ''\n const mult = value.multiple ? 'Can be set multiple times' : ''\n const dmDelim = mult && (desc.includes('\\n') ? '\\n\\n' : '\\n')\n const text = normalize(desc + dmDelim + mult)\n const hint =\n value.hint ||\n (value.type === 'number'\n ? 'n'\n : value.type === 'string'\n ? field.name\n : undefined)\n const short = !value.short\n ? ''\n : value.type === 'boolean'\n ? `-${value.short} `\n : `-${value.short}<${hint}> `\n const left =\n value.type === 'boolean'\n ? `${short}--${field.name}`\n : `${short}--${field.name}=<${hint}>`\n const row: Row = { text, left }\n if (text.length > width - maxMax) {\n row.skipLine = true\n }\n if (prev && left.length > maxMax) prev.skipLine = true\n prev = row\n const len = left.length + 4\n if (len > maxWidth && len < maxMax) {\n maxWidth = len\n }\n\n rows.push(row)\n }\n\n for (const row of rows) {\n if (row.left) {\n // If the row is too long, don't wrap it\n // Bump the right-hand side down a line to make room\n if (row.left.length > maxWidth - 2) {\n ui.div({ text: row.left, padding: [0, 0, 0, 2] })\n ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] })\n } else {\n ui.div(\n {\n text: row.left,\n padding: [0, 1, 0, 2],\n width: maxWidth,\n },\n { text: row.text }\n )\n }\n if (row.skipLine) {\n ui.div({ text: '' })\n }\n } else {\n if (row.type === 'heading') {\n ui.div(row)\n } else {\n ui.div({ ...row, padding: [1, 0, 1, 2] })\n }\n ui.div()\n }\n }\n\n return (this.#usage = ui.toString())\n }\n\n /**\n * Return the configuration options as a plain object\n */\n toJSON() {\n return Object.fromEntries(\n Object.entries(this.#configSet).map(([field, def]) => [\n field,\n {\n type: def.type,\n ...(def.multiple ? { multiple: true } : {}),\n ...(def.delim ? { delim: def.delim } : {}),\n ...(def.short ? { short: def.short } : {}),\n ...(def.description ? { description: def.description } : {}),\n ...(def.validate ? { validate: def.validate } : {}),\n ...(def.default !== undefined ? { default: def.default } : {}),\n },\n ])\n )\n }\n\n /**\n * Custom printer for `util.inspect`\n */\n [inspect.custom](_: number, options: InspectOptions) {\n return `Jack ${inspect(this.toJSON(), options)}`\n }\n}\n\n// Unwrap and un-indent, so we can wrap description\n// strings however makes them look nice in the code.\nconst normalize = (s: string): string =>\n s\n // remove single line breaks\n .replace(/([^\\n])\\n[ \\t]*([^\\n])/g, '$1 $2')\n // normalize mid-line whitespace\n .replace(/([^\\n])[ \\t]+([^\\n])/g, '$1 $2')\n // two line breaks are enough\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n\n/**\n * Main entry point. Create and return a {@link Jack} object.\n */\nexport const jack = (options: JackOptions = {}) => new Jack(options)\n"]}
@@ -65,6 +65,7 @@ export type ConfigOptionBase<T extends ConfigType, M extends boolean> = {
65
65
  validate?: (v: any) => v is ValidValue<T, M>;
66
66
  } & MultiType<M>;
67
67
  export declare const isConfigType: (t: string) => t is ConfigType;
68
+ export declare const isConfigOption: <T extends ConfigType, M extends boolean>(o: any, type: T, multi: M) => o is ConfigOptionBase<T, M>;
68
69
  /**
69
70
  * A set of {@link ConfigOptionBase} objects, referenced by their longOption
70
71
  * string values.
@@ -162,6 +163,13 @@ export interface JackOptions {
162
163
  export declare class Jack<C extends ConfigSet = {}> {
163
164
  #private;
164
165
  constructor(options?: JackOptions);
166
+ /**
167
+ * Set the default value (which will still be overridden by env or cli)
168
+ * as if from a parsed config file. The optional `source` param, if
169
+ * provided, will be included in error messages if a value is invalid or
170
+ * unknown.
171
+ */
172
+ setConfigValues(values: OptionsResults<C>, source?: string): this;
165
173
  /**
166
174
  * Parse a string of arguments, and return the resulting
167
175
  * `{ values, positionals }` object.
@@ -169,6 +177,9 @@ export declare class Jack<C extends ConfigSet = {}> {
169
177
  * If an {@link JackOptions#envPrefix} is set, then it will read default
170
178
  * values from the environment, and write the resulting values back
171
179
  * to the environment as well.
180
+ *
181
+ * Environment values always take precedence over any other value, except
182
+ * an explicit CLI setting.
172
183
  */
173
184
  parse(args?: string[]): Parsed<C>;
174
185
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/mjs/index.js CHANGED
@@ -44,6 +44,17 @@ const fromEnvVal = (env, type, multiple, delim = '\n') => (multiple
44
44
  export const isConfigType = (t) => typeof t === 'string' &&
45
45
  (t === 'string' || t === 'number' || t === 'boolean');
46
46
  const undefOrType = (v, t) => v === undefined || typeof v === t;
47
+ // print the value type, for error message reporting
48
+ const valueType = (v) => typeof v === 'string'
49
+ ? 'string'
50
+ : typeof v === 'boolean'
51
+ ? 'boolean'
52
+ : typeof v === 'number'
53
+ ? 'number'
54
+ : Array.isArray(v)
55
+ ? joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]'
56
+ : `${v.type}${v.multiple ? '[]' : ''}`;
57
+ const joinTypes = (types) => types.length === 1 ? types[0] : `(${types.join('|')})`;
47
58
  const isValidValue = (v, type, multi) => {
48
59
  if (multi) {
49
60
  if (!Array.isArray(v))
@@ -54,7 +65,7 @@ const isValidValue = (v, type, multi) => {
54
65
  return false;
55
66
  return typeof v === type;
56
67
  };
57
- const isConfigOption = (o, type, multi) => !!o &&
68
+ export const isConfigOption = (o, type, multi) => !!o &&
58
69
  typeof o === 'object' &&
59
70
  isConfigType(o.type) &&
60
71
  o.type === type &&
@@ -233,6 +244,25 @@ export class Jack {
233
244
  this.#configSet = Object.create(null);
234
245
  this.#shorts = Object.create(null);
235
246
  }
247
+ /**
248
+ * Set the default value (which will still be overridden by env or cli)
249
+ * as if from a parsed config file. The optional `source` param, if
250
+ * provided, will be included in error messages if a value is invalid or
251
+ * unknown.
252
+ */
253
+ setConfigValues(values, source = '') {
254
+ try {
255
+ this.validate(values);
256
+ }
257
+ catch (er) {
258
+ throw Object.assign(er, source ? { source } : {});
259
+ }
260
+ for (const [field, value] of Object.entries(values)) {
261
+ const my = this.#configSet[field];
262
+ my.default = value;
263
+ }
264
+ return this;
265
+ }
236
266
  /**
237
267
  * Parse a string of arguments, and return the resulting
238
268
  * `{ values, positionals }` object.
@@ -240,6 +270,9 @@ export class Jack {
240
270
  * If an {@link JackOptions#envPrefix} is set, then it will read default
241
271
  * values from the environment, and write the resulting values back
242
272
  * to the environment as well.
273
+ *
274
+ * Environment values always take precedence over any other value, except
275
+ * an explicit CLI setting.
243
276
  */
244
277
  parse(args = process.argv) {
245
278
  if (args === process.argv) {
@@ -359,8 +392,10 @@ export class Jack {
359
392
  throw new Error(`Unknown config option: ${field}`);
360
393
  }
361
394
  if (!isValidValue(o[field], config.type, !!config.multiple)) {
362
- throw new Error(`Invalid type for ${field} option, expected` +
363
- `${config.type}${config.multiple ? '[]' : ''}`);
395
+ throw Object.assign(new Error(`Invalid value ${valueType(o[field])} for ${field}, expected ${valueType(config)}`), {
396
+ field,
397
+ value: o[field],
398
+ });
364
399
  }
365
400
  if (config.validate && !config.validate(o[field])) {
366
401
  throw new Error(`Invalid config value for ${field}: ${o[field]}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type ConfigType = 'number' | 'string' | 'boolean'\n\nimport { inspect, InspectOptions, ParseArgsConfig } from 'node:util'\nimport { parseArgs } from './parse-args.js'\n\n// it's a tiny API, just cast it inline, it's fine\n//@ts-ignore\nimport _cliui from 'cliui'\nimport { basename } from 'node:path'\n\ninterface CliUI {\n div(\n ...p: {\n text: string\n padding?: [number, number, number, number]\n width?: number\n }[]\n ): void\n toString(): string\n}\nconst cliui = (o: { width?: number } = {}): CliUI => _cliui(o)\n\nconst width = Math.min(\n (process && process.stdout && process.stdout.columns) || 80,\n 80\n)\n\nconst toEnvKey = (pref: string, key: string): string => {\n return [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')]\n .join(' ')\n .trim()\n .toUpperCase()\n .replace(/ /g, '_')\n}\n\nconst toEnvVal = (\n value: string | boolean | number | string[] | boolean[] | number[],\n delim: string = '\\n'\n): string => {\n const str =\n typeof value === 'string'\n ? value\n : typeof value === 'boolean'\n ? value\n ? '1'\n : '0'\n : typeof value === 'number'\n ? String(value)\n : Array.isArray(value)\n ? value\n .map((v: string | number | boolean) => toEnvVal(v))\n .join(delim)\n : /* c8 ignore start */\n undefined\n if (typeof str !== 'string') {\n throw new Error(\n `could not serialize value to environment: ${JSON.stringify(value)}`\n )\n }\n /* c8 ignore stop */\n return str\n}\n\nconst fromEnvVal = <T extends ConfigType, M extends boolean>(\n env: string,\n type: T,\n multiple: M,\n delim: string = '\\n'\n): ValidValue<T, M> =>\n (multiple\n ? env.split(delim).map(v => fromEnvVal(v, type, false))\n : type === 'string'\n ? env\n : type === 'boolean'\n ? env === '1'\n : +env.trim()) as ValidValue<T, M>\n\n/**\n * Defines the type of value that is valid, given a config definition's\n * {@link ConfigType} and boolean multiple setting\n */\nexport type ValidValue<T extends ConfigType, M extends boolean> = [\n T,\n M\n] extends ['number', true]\n ? number[]\n : [T, M] extends ['string', true]\n ? string[]\n : [T, M] extends ['boolean', true]\n ? boolean[]\n : [T, M] extends ['number', false]\n ? number\n : [T, M] extends ['string', false]\n ? string\n : [T, M] extends ['boolean', false]\n ? boolean\n : [T, M] extends ['string', boolean]\n ? string | string[]\n : [T, M] extends ['boolean', boolean]\n ? boolean | boolean[]\n : [T, M] extends ['number', boolean]\n ? number | number[]\n : [T, M] extends [ConfigType, false]\n ? string | number | boolean\n : [T, M] extends [ConfigType, true]\n ? string[] | number[] | boolean[]\n : string | number | boolean | string[] | number[] | boolean[]\n\n/**\n * The meta information for a config option definition, when the\n * type and multiple values can be inferred by the method being used\n */\nexport type ConfigOptionMeta<T extends ConfigType, M extends boolean> = {\n default?: ValidValue<T, M> | undefined\n description?: string\n validate?: ((v: any) => v is ValidValue<T, M>) | ((v: any) => boolean)\n short?: string | undefined\n type?: T\n} & (T extends 'boolean' ? {} : { hint?: string | undefined }) &\n (M extends false\n ? {}\n : { multiple?: M | undefined; delim?: string | undefined })\n\n/**\n * A set of {@link ConfigOptionMeta} fields, referenced by their longOption\n * string values.\n */\nexport type ConfigMetaSet<T extends ConfigType, M extends boolean> = {\n [longOption: string]: ConfigOptionMeta<T, M>\n}\n\n/**\n * Infer {@link ConfigSet} fields from a given {@link ConfigMetaSet}\n */\nexport type ConfigSetFromMetaSet<\n T extends ConfigType,\n M extends boolean,\n S extends ConfigMetaSet<T, M>\n> = {\n [longOption in keyof S]: ConfigOptionBase<T, M>\n}\n\n/**\n * Fields that can be set on a {@link ConfigOptionBase} or\n * {@link ConfigOptionMeta} based on whether or not the field is known to be\n * multiple.\n */\nexport type MultiType<M extends boolean> = M extends true\n ? {\n multiple: true\n delim?: string | undefined\n }\n : M extends false\n ? {\n multiple?: false | undefined\n delim?: undefined\n }\n : {\n multiple?: boolean | undefined\n delim?: string | undefined\n }\n\n/**\n * A config field definition, in its full representation.\n */\nexport type ConfigOptionBase<T extends ConfigType, M extends boolean> = {\n type: T\n short?: string | undefined\n default?: ValidValue<T, M> | undefined\n description?: string\n hint?: T extends 'boolean' ? undefined : string | undefined\n validate?: (v: any) => v is ValidValue<T, M>\n} & MultiType<M>\n\nexport const isConfigType = (t: string): t is ConfigType =>\n typeof t === 'string' &&\n (t === 'string' || t === 'number' || t === 'boolean')\n\nconst undefOrType = (v: any, t: string): boolean =>\n v === undefined || typeof v === t\n\nconst isValidValue = <T extends ConfigType, M extends boolean>(\n v: any,\n type: T,\n multi: M\n): v is ValidValue<T, M> => {\n if (multi) {\n if (!Array.isArray(v)) return false\n return !v.some((v: any) => !isValidValue(v, type, false))\n }\n if (Array.isArray(v)) return false\n return typeof v === type\n}\n\nconst isConfigOption = <T extends ConfigType, M extends boolean>(\n o: any,\n type: T,\n multi: M\n): o is ConfigOptionBase<T, M> =>\n !!o &&\n typeof o === 'object' &&\n isConfigType(o.type) &&\n o.type === type &&\n undefOrType(o.short, 'string') &&\n undefOrType(o.description, 'string') &&\n undefOrType(o.hint, 'string') &&\n undefOrType(o.validate, 'function') &&\n (o.default === undefined || isValidValue(o.default, type, multi)) &&\n !!o.multiple === multi\n\n/**\n * A set of {@link ConfigOptionBase} objects, referenced by their longOption\n * string values.\n */\nexport type ConfigSet = {\n [longOption: string]: ConfigOptionBase<ConfigType, boolean>\n}\n\n/**\n * The 'values' field returned by {@link Jack#parse}\n */\nexport type OptionsResults<T extends ConfigSet> = {\n [k in keyof T]?: T[k] extends ConfigOptionBase<'string', false>\n ? string\n : T[k] extends ConfigOptionBase<'string', true>\n ? string[]\n : T[k] extends ConfigOptionBase<'number', false>\n ? number\n : T[k] extends ConfigOptionBase<'number', true>\n ? number[]\n : T[k] extends ConfigOptionBase<'boolean', false>\n ? boolean\n : T[k] extends ConfigOptionBase<'boolean', true>\n ? boolean[]\n : never\n}\n\n/**\n * The object retured by {@link Jack#parse}\n */\nexport type Parsed<T extends ConfigSet> = {\n values: OptionsResults<T>\n positionals: string[]\n}\n\nfunction num(\n o: ConfigOptionMeta<'number', false> = {}\n): ConfigOptionBase<'number', false> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'number', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'number',\n multiple: false,\n }\n}\n\nfunction numList(\n o: ConfigOptionMeta<'number', true> = {}\n): ConfigOptionBase<'number', true> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'number', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'number',\n multiple: true,\n }\n}\n\nfunction opt(\n o: ConfigOptionMeta<'string', false> = {}\n): ConfigOptionBase<'string', false> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'string', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'string',\n multiple: false,\n }\n}\n\nfunction optList(\n o: ConfigOptionMeta<'string', true> = {}\n): ConfigOptionBase<'string', true> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'string', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'string',\n multiple: true,\n }\n}\n\nfunction flag(\n o: ConfigOptionMeta<'boolean', false> = {}\n): ConfigOptionBase<'boolean', false> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false> & { hint: any }\n if (def !== undefined && !isValidValue(def, 'boolean', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'boolean', false>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: false,\n }\n}\n\nfunction flagList(\n o: ConfigOptionMeta<'boolean', true> = {}\n): ConfigOptionBase<'boolean', true> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false> & { hint: any }\n if (def !== undefined && !isValidValue(def, 'boolean', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'boolean', true>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag list')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: true,\n }\n}\nconst toParseArgsOptionsConfig = (\n options: ConfigSet\n): Exclude<ParseArgsConfig['options'], undefined> => {\n const c: Exclude<ParseArgsConfig['options'], undefined> = {}\n for (const longOption in options) {\n const config = options[longOption]\n if (isConfigOption(config, 'number', true)) {\n c[longOption] = {\n type: 'string',\n multiple: true,\n default: config.default?.map(c => String(c)),\n }\n } else if (isConfigOption(config, 'number', false)) {\n c[longOption] = {\n type: 'string',\n multiple: false,\n default:\n config.default === undefined\n ? undefined\n : String(config.default),\n }\n } else {\n const conf = config as\n | ConfigOptionBase<'string', boolean>\n | ConfigOptionBase<'boolean', boolean>\n c[longOption] = {\n type: conf.type,\n multiple: conf.multiple,\n default: conf.default,\n }\n }\n if (typeof config.short === 'string') {\n c[longOption].short = config.short\n }\n\n if (\n config.type === 'boolean' &&\n !longOption.startsWith('no-') &&\n !options[`no-${longOption}`]\n ) {\n c[`no-${longOption}`] = {\n type: 'boolean',\n multiple: config.multiple,\n }\n }\n }\n return c\n}\n\n/**\n * A row used when generating the {@link Jack#usage} string\n */\nexport interface Row {\n left?: string\n text: string\n skipLine?: boolean\n type?: string\n}\n/**\n * A heading or description row used when generating the {@link Jack#usage}\n * string\n */\nexport interface TextRow {\n type: 'heading' | 'description'\n text: string\n left?: ''\n skipLine?: boolean\n}\n/**\n * Either a {@link TextRow} or a reference to a {@link ConfigOptionBase}\n */\nexport type UsageField =\n | TextRow\n | {\n type: 'config'\n name: string\n value: ConfigOptionBase<ConfigType, boolean>\n }\n\n/**\n * Options provided to the {@link Jack} constructor\n */\nexport interface JackOptions {\n /**\n * Whether to allow positional arguments\n *\n * @default true\n */\n allowPositionals?: boolean\n\n /**\n * Prefix to use when reading/writing the environment variables\n *\n * If not specified, environment behavior will not be available.\n */\n envPrefix?: string\n\n /**\n * Environment object to read/write. Defaults `process.env`.\n * No effect if `envPrefix` is not set.\n */\n env?: { [k: string]: string | undefined }\n\n /**\n * A short usage string. If not provided, will be generated from the\n * options provided, but that can of course be rather verbose if\n * there are a lot of options.\n */\n usage?: string\n\n /**\n * Stop parsing flags and opts at the first positional argument.\n * This is to support cases like `cmd [flags] <subcmd> [options]`, where\n * each subcommand may have different options. This effectively treats\n * any positional as a `--` argument. Only relevant if `allowPositionals`\n * is true.\n *\n * To do subcommands, set this option, look at the first positional, and\n * parse the remaining positionals as appropriate.\n *\n * @default false\n */\n stopAtPositional?: boolean\n}\n\n/**\n * Class returned by the {@link jack} function and all configuration\n * definition methods. This is what gets chained together.\n */\nexport class Jack<C extends ConfigSet = {}> {\n #configSet: C\n #shorts: { [k: string]: string }\n #options: JackOptions\n #fields: UsageField[] = []\n #env: { [k: string]: string | undefined }\n #envPrefix?: string\n #allowPositionals: boolean\n #usage?: string\n\n constructor(options: JackOptions = {}) {\n this.#options = options\n this.#allowPositionals = options.allowPositionals !== false\n this.#env =\n this.#options.env === undefined ? process.env : this.#options.env\n this.#envPrefix = options.envPrefix\n // We need to fib a little, because it's always the same object, but it\n // starts out as having an empty config set. Then each method that adds\n // fields returns `this as Jack<C & { ...newConfigs }>`\n this.#configSet = Object.create(null) as C\n this.#shorts = Object.create(null)\n }\n\n /**\n * Parse a string of arguments, and return the resulting\n * `{ values, positionals }` object.\n *\n * If an {@link JackOptions#envPrefix} is set, then it will read default\n * values from the environment, and write the resulting values back\n * to the environment as well.\n */\n parse(args: string[] = process.argv): Parsed<C> {\n if (args === process.argv) {\n args = args.slice(\n (process as { _eval?: string })._eval !== undefined ? 1 : 2\n )\n }\n if (this.#envPrefix) {\n for (const [field, my] of Object.entries(this.#configSet)) {\n const ek = toEnvKey(this.#envPrefix, field)\n const env = this.#env[ek]\n if (env !== undefined) {\n my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim)\n }\n }\n }\n\n const options = toParseArgsOptionsConfig(this.#configSet)\n const result = parseArgs({\n args,\n options,\n // always strict, but using our own logic\n strict: false,\n allowPositionals: this.#allowPositionals,\n tokens: true,\n })\n\n const p: Parsed<C> = {\n values: {},\n positionals: [],\n }\n for (const token of result.tokens) {\n if (token.kind === 'positional') {\n p.positionals.push(token.value)\n if (this.#options.stopAtPositional) {\n p.positionals.push(...args.slice(token.index + 1))\n return p\n }\n } else if (token.kind === 'option') {\n let value: string | number | boolean | undefined = undefined\n if (token.name.startsWith('no-')) {\n const my = this.#configSet[token.name]\n const pname = token.name.substring('no-'.length)\n const pos = this.#configSet[pname]\n if (\n pos &&\n pos.type === 'boolean' &&\n (!my ||\n (my.type === 'boolean' && !!my.multiple === !!pos.multiple))\n ) {\n value = false\n token.name = pname\n }\n }\n const my = this.#configSet[token.name]\n if (!my) {\n throw new Error(\n `Unknown option '${token.rawName}'. ` +\n `To specify a positional argument starting with a '-', ` +\n `place it at the end of the command after '--', as in ` +\n `'-- ${token.rawName}'`\n )\n }\n if (value === undefined) {\n if (token.value === undefined) {\n if (my.type !== 'boolean') {\n throw new Error(\n `No value provided for ${token.rawName}, expected ${my.type}`\n )\n }\n value = true\n } else {\n if (my.type === 'boolean') {\n throw new Error(\n `Flag ${token.rawName} does not take a value, received '${token.value}'`\n )\n }\n if (my.type === 'string') {\n value = token.value\n } else {\n value = +token.value\n if (value !== value) {\n throw new Error(\n `Invalid value '${token.value}' provided for ` +\n `'${token.rawName}' option, expected number`\n )\n }\n }\n }\n }\n if (my.multiple) {\n const pv = p.values as {\n [k: string]: (string | number | boolean)[]\n }\n pv[token.name] = pv[token.name] ?? []\n pv[token.name].push(value)\n } else {\n const pv = p.values as { [k: string]: string | number | boolean }\n pv[token.name] = value\n }\n }\n }\n\n for (const [field, c] of Object.entries(this.#configSet)) {\n if (c.default !== undefined && !(field in p.values)) {\n //@ts-ignore\n p.values[field] = c.default\n }\n }\n\n for (const [field, value] of Object.entries(p.values)) {\n const valid = this.#configSet[field].validate\n if (valid && !valid(value)) {\n throw new Error(\n `Invalid value provided for --${field}: ${JSON.stringify(value)}`\n )\n }\n }\n\n this.#writeEnv(p)\n\n return p\n }\n\n /**\n * Validate that any arbitrary object is a valid configuration `values`\n * object. Useful when loading config files or other sources.\n */\n validate(o: any): asserts o is Parsed<C>['values'] {\n if (!o || typeof o !== 'object') {\n throw new Error('Invalid config: not an object')\n }\n for (const field in o) {\n const config = this.#configSet[field]\n if (!config) {\n throw new Error(`Unknown config option: ${field}`)\n }\n if (!isValidValue(o[field], config.type, !!config.multiple)) {\n throw new Error(\n `Invalid type for ${field} option, expected` +\n `${config.type}${config.multiple ? '[]' : ''}`\n )\n }\n if (config.validate && !config.validate(o[field])) {\n throw new Error(`Invalid config value for ${field}: ${o[field]}`)\n }\n }\n }\n\n #writeEnv(p: Parsed<C>) {\n if (!this.#env || !this.#envPrefix) return\n for (const [field, value] of Object.entries(p.values)) {\n const my = this.#configSet[field]\n this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(\n value,\n my.delim\n )\n }\n }\n\n /**\n * Add a heading to the usage output banner\n */\n heading(text: string): Jack<C> {\n this.#fields.push({ type: 'heading', text })\n return this\n }\n\n /**\n * Add a long-form description to the usage output at this position.\n */\n description(text: string): Jack<C> {\n this.#fields.push({ type: 'description', text })\n return this\n }\n\n /**\n * Add one or more number fields.\n */\n num<F extends ConfigMetaSet<'number', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'number', false, F>> {\n return this.#addFields(fields, num)\n }\n\n /**\n * Add one or more multiple number fields.\n */\n numList<F extends ConfigMetaSet<'number', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'number', true, F>> {\n return this.#addFields(fields, numList)\n }\n\n /**\n * Add one or more string option fields.\n */\n opt<F extends ConfigMetaSet<'string', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'string', false, F>> {\n return this.#addFields(fields, opt)\n }\n\n /**\n * Add one or more multiple string option fields.\n */\n optList<F extends ConfigMetaSet<'string', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'string', true, F>> {\n return this.#addFields(fields, optList)\n }\n\n /**\n * Add one or more flag fields.\n */\n flag<F extends ConfigMetaSet<'boolean', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'boolean', false, F>> {\n return this.#addFields(fields, flag)\n }\n\n /**\n * Add one or more multiple flag fields.\n */\n flagList<F extends ConfigMetaSet<'boolean', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'boolean', true, F>> {\n return this.#addFields(fields, flagList)\n }\n\n /**\n * Generic field definition method. Similar to flag/flagList/number/etc,\n * but you must specify the `type` (and optionally `multiple` and `delim`)\n * fields on each one, or Jack won't know how to define them.\n */\n addFields<F extends ConfigSet>(fields: F): Jack<C & F> {\n const next = this as unknown as Jack<C & F>\n for (const [name, field] of Object.entries(fields)) {\n this.#validateName(name, field)\n next.#fields.push({\n type: 'config',\n name,\n value: field as ConfigOptionBase<ConfigType, boolean>,\n })\n }\n Object.assign(next.#configSet, fields)\n return next\n }\n\n #addFields<\n T extends ConfigType,\n M extends boolean,\n F extends ConfigMetaSet<T, M>\n >(\n fields: F,\n fn: (m: ConfigOptionMeta<T, M>) => ConfigOptionBase<T, M>\n ): Jack<C & ConfigSetFromMetaSet<T, M, F>> {\n type NextC = C & ConfigSetFromMetaSet<T, M, F>\n const next = this as unknown as Jack<NextC>\n Object.assign(\n next.#configSet,\n Object.fromEntries(\n Object.entries(fields).map(([name, field]) => {\n this.#validateName(name, field)\n const option = fn(field)\n next.#fields.push({\n type: 'config',\n name,\n value: option as ConfigOptionBase<ConfigType, boolean>,\n })\n return [name, option]\n })\n )\n )\n return next\n }\n\n #validateName(name: string, field: { short?: string }) {\n if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) {\n throw new TypeError(\n `Invalid option name: ${name}, ` +\n `must be '-' delimited ASCII alphanumeric`\n )\n }\n if (this.#configSet[name]) {\n throw new TypeError(`Cannot redefine option ${field}`)\n }\n if (this.#shorts[name]) {\n throw new TypeError(\n `Cannot redefine option ${name}, already ` +\n `in use for ${this.#shorts[name]}`\n )\n }\n if (field.short) {\n if (!/^[a-zA-Z0-9]$/.test(field.short)) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n 'must be 1 ASCII alphanumeric character'\n )\n }\n if (this.#shorts[field.short]) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n `already in use for ${this.#shorts[field.short]}`\n )\n }\n this.#shorts[field.short] = name\n this.#shorts[name] = name\n }\n }\n\n /**\n * Return the usage banner for the given configuration\n */\n usage(): string {\n if (this.#usage) return this.#usage\n const ui = cliui({ width })\n let start = this.#fields[0]?.type === 'heading' ? 1 : 0\n if (this.#fields[0]?.type === 'heading') {\n ui.div({ text: normalize(this.#fields[0].text) })\n }\n ui.div({ text: 'Usage:' })\n if (this.#options.usage) {\n ui.div({\n text: this.#options.usage,\n padding: [0, 0, 0, 2],\n })\n } else {\n const cmd = basename(process.argv[1])\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n ui.div({\n text: usage,\n padding: [0, 0, 0, 2],\n })\n }\n ui.div({ text: '' })\n const maybeDesc = this.#fields[start]\n if (maybeDesc?.type === 'description') {\n start++\n ui.div({\n text: normalize(maybeDesc.text),\n })\n ui.div({ text: '' })\n }\n\n // turn each config type into a row, and figure out the width of the\n // left hand indentation for the option descriptions.\n let maxMax = Math.max(12, Math.min(26, Math.floor(width / 3)))\n let maxWidth = 8\n let prev: Row | TextRow | undefined = undefined\n const rows: (Row | TextRow)[] = []\n for (const field of this.#fields.slice(start)) {\n if (field.type !== 'config') {\n if (prev) prev.skipLine = true\n prev = undefined\n field.text = normalize(field.text)\n rows.push(field)\n continue\n }\n const { value } = field\n const desc = value.description || ''\n const mult = value.multiple ? 'Can be set multiple times' : ''\n const dmDelim = mult && (desc.includes('\\n') ? '\\n\\n' : '\\n')\n const text = normalize(desc + dmDelim + mult)\n const hint =\n value.hint ||\n (value.type === 'number'\n ? 'n'\n : value.type === 'string'\n ? field.name\n : undefined)\n const short = !value.short\n ? ''\n : value.type === 'boolean'\n ? `-${value.short} `\n : `-${value.short}<${hint}> `\n const left =\n value.type === 'boolean'\n ? `${short}--${field.name}`\n : `${short}--${field.name}=<${hint}>`\n const row: Row = { text, left }\n if (text.length > width - maxMax) {\n row.skipLine = true\n }\n if (prev && left.length > maxMax) prev.skipLine = true\n prev = row\n const len = left.length + 4\n if (len > maxWidth && len < maxMax) {\n maxWidth = len\n }\n\n rows.push(row)\n }\n\n for (const row of rows) {\n if (row.left) {\n // If the row is too long, don't wrap it\n // Bump the right-hand side down a line to make room\n if (row.left.length > maxWidth - 2) {\n ui.div({ text: row.left, padding: [0, 0, 0, 2] })\n ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] })\n } else {\n ui.div(\n {\n text: row.left,\n padding: [0, 1, 0, 2],\n width: maxWidth,\n },\n { text: row.text }\n )\n }\n if (row.skipLine) {\n ui.div({ text: '' })\n }\n } else {\n if (row.type === 'heading') {\n ui.div(row)\n } else {\n ui.div({ ...row, padding: [1, 0, 1, 2] })\n }\n ui.div()\n }\n }\n\n return (this.#usage = ui.toString())\n }\n\n /**\n * Return the configuration options as a plain object\n */\n toJSON() {\n return Object.fromEntries(\n Object.entries(this.#configSet).map(([field, def]) => [\n field,\n {\n type: def.type,\n ...(def.multiple ? { multiple: true } : {}),\n ...(def.delim ? { delim: def.delim } : {}),\n ...(def.short ? { short: def.short } : {}),\n ...(def.description ? { description: def.description } : {}),\n ...(def.validate ? { validate: def.validate } : {}),\n ...(def.default !== undefined ? { default: def.default } : {}),\n },\n ])\n )\n }\n\n /**\n * Custom printer for `util.inspect`\n */\n [inspect.custom](_: number, options: InspectOptions) {\n return `Jack ${inspect(this.toJSON(), options)}`\n }\n}\n\n// Unwrap and un-indent, so we can wrap description\n// strings however makes them look nice in the code.\nconst normalize = (s: string): string =>\n s\n // remove single line breaks\n .replace(/([^\\n])\\n[ \\t]*([^\\n])/g, '$1 $2')\n // normalize mid-line whitespace\n .replace(/([^\\n])[ \\t]+([^\\n])/g, '$1 $2')\n // two line breaks are enough\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n\n/**\n * Main entry point. Create and return a {@link Jack} object.\n */\nexport const jack = (options: JackOptions = {}) => new Jack(options)\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAmC,MAAM,WAAW,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,kDAAkD;AAClD,YAAY;AACZ,OAAO,MAAM,MAAM,OAAO,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAYpC,MAAM,KAAK,GAAG,CAAC,IAAwB,EAAE,EAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAE9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAC3D,EAAE,CACH,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,GAAW,EAAU,EAAE;IACrD,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;SAC9C,IAAI,CAAC,GAAG,CAAC;SACT,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AACvB,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CACf,KAAkE,EAClE,QAAgB,IAAI,EACZ,EAAE;IACV,MAAM,GAAG,GACP,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,OAAO,KAAK,KAAK,SAAS;YAC5B,CAAC,CAAC,KAAK;gBACL,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,GAAG;YACP,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;gBAC3B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACf,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBACtB,CAAC,CAAC,KAAK;yBACF,GAAG,CAAC,CAAC,CAA4B,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;yBAClD,IAAI,CAAC,KAAK,CAAC;oBAChB,CAAC,CAAC,qBAAqB;wBACrB,SAAS,CAAA;IACf,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC3B,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CACrE,CAAA;KACF;IACD,oBAAoB;IACpB,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CACjB,GAAW,EACX,IAAO,EACP,QAAW,EACX,QAAgB,IAAI,EACF,EAAE,CACpB,CAAC,QAAQ;IACP,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,IAAI,KAAK,QAAQ;QACnB,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,IAAI,KAAK,SAAS;YACpB,CAAC,CAAC,GAAG,KAAK,GAAG;YACb,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAA;AAmGtC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAmB,EAAE,CACzD,OAAO,CAAC,KAAK,QAAQ;IACrB,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS,CAAC,CAAA;AAEvD,MAAM,WAAW,GAAG,CAAC,CAAM,EAAE,CAAS,EAAW,EAAE,CACjD,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,CAAA;AAEnC,oDAAoD;AACpD,MAAM,SAAS,GAAG,CAChB,CAO4C,EACpC,EAAE,CACV,OAAO,CAAC,KAAK,QAAQ;IACnB,CAAC,CAAC,QAAQ;IACV,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS;QACxB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ;YACvB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;gBAC1D,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AAE1C,MAAM,SAAS,GAAG,CAAC,KAAe,EAAU,EAAE,CAC5C,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;AAExD,MAAM,YAAY,GAAG,CACnB,CAAM,EACN,IAAO,EACP,KAAQ,EACe,EAAE;IACzB,IAAI,KAAK,EAAE;QACT,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;QACnC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;KAC1D;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAClC,OAAO,OAAO,CAAC,KAAK,IAAI,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,CAAM,EACN,IAAO,EACP,KAAQ,EACqB,EAAE,CAC/B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,QAAQ;IACrB,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IACpB,CAAC,CAAC,IAAI,KAAK,IAAI;IACf,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC9B,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC;IACpC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC7B,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC;IACnC,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAA;AAqCxB,SAAS,GAAG,CACV,IAAuC,EAAE;IAEzC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAA;IAClD,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;QAC5D,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAA;KAC7C;IACD,MAAM,QAAQ,GAAG,GAAG;QAClB,CAAC,CAAE,GAAoD;QACvD,CAAC,CAAC,SAAS,CAAA;IACb,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,GAAG;QACZ,QAAQ;QACR,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,KAAK;KAChB,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CACd,IAAsC,EAAE;IAExC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAA;IAClD,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;QAC3D,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAA;KAC7C;IACD,MAAM,QAAQ,GAAG,GAAG;QAClB,CAAC,CAAE,GAAmD;QACtD,CAAC,CAAC,SAAS,CAAA;IACb,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,GAAG;QACZ,QAAQ;QACR,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;KACf,CAAA;AACH,CAAC;AAED,SAAS,GAAG,CACV,IAAuC,EAAE;IAEzC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAA;IAClD,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;QAC5D,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAA;KAC7C;IACD,MAAM,QAAQ,GAAG,GAAG;QAClB,CAAC,CAAE,GAAoD;QACvD,CAAC,CAAC,SAAS,CAAA;IACb,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,GAAG;QACZ,QAAQ;QACR,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,KAAK;KAChB,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CACd,IAAsC,EAAE;IAExC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAA;IAClD,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;QAC3D,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAA;KAC7C;IACD,MAAM,QAAQ,GAAG,GAAG;QAClB,CAAC,CAAE,GAAmD;QACtD,CAAC,CAAC,SAAS,CAAA;IACb,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,GAAG;QACZ,QAAQ;QACR,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;KACf,CAAA;AACH,CAAC;AAED,SAAS,IAAI,CACX,IAAwC,EAAE;IAE1C,MAAM,EACJ,IAAI,EACJ,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,GAAG,EACb,GAAG,IAAI,EACR,GAAG,CAAuD,CAAA;IAC3D,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE;QAC7D,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAA;KAC7C;IACD,MAAM,QAAQ,GAAG,GAAG;QAClB,CAAC,CAAE,GAAqD;QACxD,CAAC,CAAC,SAAS,CAAA;IACb,IAAI,IAAI,KAAK,SAAS,EAAE;QACtB,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAA;KACpD;IACD,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,GAAG;QACZ,QAAQ;QACR,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,KAAK;KAChB,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CACf,IAAuC,EAAE;IAEzC,MAAM,EACJ,IAAI,EACJ,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,GAAG,EACb,GAAG,IAAI,EACR,GAAG,CAAuD,CAAA;IAC3D,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;QAC5D,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAA;KAC7C;IACD,MAAM,QAAQ,GAAG,GAAG;QAClB,CAAC,CAAE,GAAoD;QACvD,CAAC,CAAC,SAAS,CAAA;IACb,IAAI,IAAI,KAAK,SAAS,EAAE;QACtB,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAA;KACzD;IACD,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,GAAG;QACZ,QAAQ;QACR,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,IAAI;KACf,CAAA;AACH,CAAC;AACD,MAAM,wBAAwB,GAAG,CAC/B,OAAkB,EAC8B,EAAE;IAClD,MAAM,CAAC,GAAmD,EAAE,CAAA;IAC5D,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;QAClC,IAAI,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;YAC1C,CAAC,CAAC,UAAU,CAAC,GAAG;gBACd,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC7C,CAAA;SACF;aAAM,IAAI,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;YAClD,CAAC,CAAC,UAAU,CAAC,GAAG;gBACd,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,KAAK;gBACf,OAAO,EACL,MAAM,CAAC,OAAO,KAAK,SAAS;oBAC1B,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;aAC7B,CAAA;SACF;aAAM;YACL,MAAM,IAAI,GAAG,MAE2B,CAAA;YACxC,CAAC,CAAC,UAAU,CAAC,GAAG;gBACd,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAA;SACF;QACD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;YACpC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;SACnC;QAED,IACE,MAAM,CAAC,IAAI,KAAK,SAAS;YACzB,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;YAC7B,CAAC,OAAO,CAAC,MAAM,UAAU,EAAE,CAAC,EAC5B;YACA,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC,GAAG;gBACtB,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAA;SACF;KACF;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AA8ED;;;GAGG;AACH,MAAM,OAAO,IAAI;IACf,UAAU,CAAG;IACb,OAAO,CAAyB;IAChC,QAAQ,CAAa;IACrB,OAAO,GAAiB,EAAE,CAAA;IAC1B,IAAI,CAAqC;IACzC,UAAU,CAAS;IACnB,iBAAiB,CAAS;IAC1B,MAAM,CAAS;IAEf,YAAY,UAAuB,EAAE;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,KAAK,KAAK,CAAA;QAC3D,IAAI,CAAC,IAAI;YACP,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAA;QACnE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAA;QACnC,uEAAuE;QACvE,wEAAwE;QACxE,uDAAuD;QACvD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAM,CAAA;QAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,MAAyB,EAAE,MAAM,GAAG,EAAE;QACpD,IAAI;YACF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;SACtB;QAAC,OAAO,EAAE,EAAE;YACX,MAAM,MAAM,CAAC,MAAM,CAAC,EAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;SAC3D;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACnD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YACjC,EAAE,CAAC,OAAO,GAAG,KAAK,CAAA;SACnB;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,OAAiB,OAAO,CAAC,IAAI;QACjC,IAAI,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;YACzB,IAAI,GAAG,IAAI,CAAC,KAAK,CACd,OAA8B,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5D,CAAA;SACF;QACD,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACzD,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;gBAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACzB,IAAI,GAAG,KAAK,SAAS,EAAE;oBACrB,EAAE,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;iBAC/D;aACF;SACF;QAED,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC;YACvB,IAAI;YACJ,OAAO;YACP,yCAAyC;YACzC,MAAM,EAAE,KAAK;YACb,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;YACxC,MAAM,EAAE,IAAI;SACb,CAAC,CAAA;QAEF,MAAM,CAAC,GAAc;YACnB,MAAM,EAAE,EAAE;YACV,WAAW,EAAE,EAAE;SAChB,CAAA;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;gBAC/B,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;oBAClC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;oBAClD,OAAO,CAAC,CAAA;iBACT;aACF;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAClC,IAAI,KAAK,GAA0C,SAAS,CAAA;gBAC5D,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;oBAChC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBACtC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBAChD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;oBAClC,IACE,GAAG;wBACH,GAAG,CAAC,IAAI,KAAK,SAAS;wBACtB,CAAC,CAAC,EAAE;4BACF,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAC9D;wBACA,KAAK,GAAG,KAAK,CAAA;wBACb,KAAK,CAAC,IAAI,GAAG,KAAK,CAAA;qBACnB;iBACF;gBACD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACtC,IAAI,CAAC,EAAE,EAAE;oBACP,MAAM,IAAI,KAAK,CACb,mBAAmB,KAAK,CAAC,OAAO,KAAK;wBACnC,wDAAwD;wBACxD,uDAAuD;wBACvD,OAAO,KAAK,CAAC,OAAO,GAAG,CAC1B,CAAA;iBACF;gBACD,IAAI,KAAK,KAAK,SAAS,EAAE;oBACvB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;wBAC7B,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE;4BACzB,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,CAAC,OAAO,cAAc,EAAE,CAAC,IAAI,EAAE,CAC9D,CAAA;yBACF;wBACD,KAAK,GAAG,IAAI,CAAA;qBACb;yBAAM;wBACL,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE;4BACzB,MAAM,IAAI,KAAK,CACb,QAAQ,KAAK,CAAC,OAAO,qCAAqC,KAAK,CAAC,KAAK,GAAG,CACzE,CAAA;yBACF;wBACD,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE;4BACxB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;yBACpB;6BAAM;4BACL,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,CAAA;4BACpB,IAAI,KAAK,KAAK,KAAK,EAAE;gCACnB,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,CAAC,KAAK,iBAAiB;oCAC5C,IAAI,KAAK,CAAC,OAAO,2BAA2B,CAC/C,CAAA;6BACF;yBACF;qBACF;iBACF;gBACD,IAAI,EAAE,CAAC,QAAQ,EAAE;oBACf,MAAM,EAAE,GAAG,CAAC,CAAC,MAEZ,CAAA;oBACD,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;oBACrC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;iBAC3B;qBAAM;oBACL,MAAM,EAAE,GAAG,CAAC,CAAC,MAAoD,CAAA;oBACjE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;iBACvB;aACF;SACF;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACxD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;gBACnD,YAAY;gBACZ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAA;aAC5B;SACF;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAA;YAC7C,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC1B,MAAM,IAAI,KAAK,CACb,gCAAgC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAClE,CAAA;aACF;SACF;QAED,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAEjB,OAAO,CAAC,CAAA;IACV,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,CAAM;QACb,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;SACjD;QACD,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YACrC,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAA;aACnD;YACD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC3D,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,iBAAiB,SAAS,CACxB,CAAC,CAAC,KAAK,CAAC,CACT,QAAQ,KAAK,cAAc,SAAS,CAAC,MAAM,CAAC,EAAE,CAChD,EACD;oBACE,KAAK;oBACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;iBAChB,CACF,CAAA;aACF;YACD,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;gBACjD,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;aAClE;SACF;IACH,CAAC;IAED,SAAS,CAAC,CAAY;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAM;QAC1C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;YACrD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,GAAG,QAAQ,CACpD,KAAK,EACL,EAAE,CAAC,KAAK,CACT,CAAA;SACF;IACH,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAChD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,GAAG,CACD,MAAS;QAET,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,OAAO,CACL,MAAS;QAET,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAED;;OAEG;IACH,GAAG,CACD,MAAS;QAET,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,OAAO,CACL,MAAS;QAET,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAED;;OAEG;IACH,IAAI,CACF,MAAS;QAET,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC;IAED;;OAEG;IACH,QAAQ,CACN,MAAS;QAET,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAsB,MAAS;QACtC,MAAM,IAAI,GAAG,IAA8B,CAAA;QAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAClD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,QAAQ;gBACd,IAAI;gBACJ,KAAK,EAAE,KAA8C;aACtD,CAAC,CAAA;SACH;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACtC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,UAAU,CAKR,MAAS,EACT,EAAyD;QAGzD,MAAM,IAAI,GAAG,IAA8B,CAAA;QAC3C,MAAM,CAAC,MAAM,CACX,IAAI,CAAC,UAAU,EACf,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC/B,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,QAAQ;gBACd,IAAI;gBACJ,KAAK,EAAE,MAA+C;aACvD,CAAC,CAAA;YACF,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACvB,CAAC,CAAC,CACH,CACF,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,KAAyB;QACnD,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1D,MAAM,IAAI,SAAS,CACjB,wBAAwB,IAAI,IAAI;gBAC9B,0CAA0C,CAC7C,CAAA;SACF;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACzB,MAAM,IAAI,SAAS,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAA;SACvD;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtB,MAAM,IAAI,SAAS,CACjB,0BAA0B,IAAI,YAAY;gBACxC,cAAc,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CACrC,CAAA;SACF;QACD,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACtC,MAAM,IAAI,SAAS,CACjB,WAAW,IAAI,kBAAkB,KAAK,CAAC,KAAK,IAAI;oBAC9C,wCAAwC,CAC3C,CAAA;aACF;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,IAAI,SAAS,CACjB,WAAW,IAAI,kBAAkB,KAAK,CAAC,KAAK,IAAI;oBAC9C,sBAAsB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CACpD,CAAA;aACF;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;YAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;SAC1B;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAA;QACnC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvD,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,SAAS,EAAE;YACvC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SAClD;QACD,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACvB,EAAE,CAAC,GAAG,CAAC;gBACL,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBACzB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACtB,CAAC,CAAA;SACH;aAAM;YACL,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACrC,MAAM,UAAU,GAAa,EAAE,CAAA;YAC/B,MAAM,MAAM,GAAe,EAAE,CAAA;YAC7B,MAAM,KAAK,GAAa,EAAE,CAAA;YAC1B,MAAM,IAAI,GAAe,EAAE,CAAA;YAC3B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAC7D,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;wBAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;;wBACvD,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAA;iBACvD;qBAAM;oBACL,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;wBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;;wBAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAA;iBAC9C;aACF;YACD,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YAC9D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC5D,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC1D,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;YACjD,EAAE,CAAC,GAAG,CAAC;gBACL,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACtB,CAAC,CAAA;SACH;QACD,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACrC,IAAI,SAAS,EAAE,IAAI,KAAK,aAAa,EAAE;YACrC,KAAK,EAAE,CAAA;YACP,EAAE,CAAC,GAAG,CAAC;gBACL,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;aAChC,CAAC,CAAA;YACF,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;SACrB;QAED,oEAAoE;QACpE,qDAAqD;QACrD,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9D,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,IAAI,IAAI,GAA8B,SAAS,CAAA;QAC/C,MAAM,IAAI,GAAsB,EAAE,CAAA;QAClC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC3B,IAAI,IAAI;oBAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;gBAC9B,IAAI,GAAG,SAAS,CAAA;gBAChB,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAClC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAChB,SAAQ;aACT;YACD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;YACvB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAA;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAA;YAC9D,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC7D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,CAAA;YAC7C,MAAM,IAAI,GACR,KAAK,CAAC,IAAI;gBACV,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;oBACtB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;wBACzB,CAAC,CAAC,KAAK,CAAC,IAAI;wBACZ,CAAC,CAAC,SAAS,CAAC,CAAA;YAChB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK;gBACxB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;oBAC1B,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG;oBACpB,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,CAAA;YAC/B,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,KAAK,SAAS;gBACtB,CAAC,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE;gBAC3B,CAAC,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,CAAA;YACzC,MAAM,GAAG,GAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;YAC/B,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM,EAAE;gBAChC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAA;aACpB;YACD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM;gBAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;YACtD,IAAI,GAAG,GAAG,CAAA;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;YAC3B,IAAI,GAAG,GAAG,QAAQ,IAAI,GAAG,GAAG,MAAM,EAAE;gBAClC,QAAQ,GAAG,GAAG,CAAA;aACf;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SACf;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,GAAG,CAAC,IAAI,EAAE;gBACZ,wCAAwC;gBACxC,oDAAoD;gBACpD,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,EAAE;oBAClC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;oBACjD,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;iBACzD;qBAAM;oBACL,EAAE,CAAC,GAAG,CACJ;wBACE,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBACrB,KAAK,EAAE,QAAQ;qBAChB,EACD,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CACnB,CAAA;iBACF;gBACD,IAAI,GAAG,CAAC,QAAQ,EAAE;oBAChB,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;iBACrB;aACF;iBAAM;gBACL,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;oBAC1B,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;iBACZ;qBAAM;oBACL,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;iBAC1C;gBACD,EAAE,CAAC,GAAG,EAAE,CAAA;aACT;SACF;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;IACtC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;YACpD,KAAK;YACL;gBACE,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D;SACF,CAAC,CACH,CAAA;IACH,CAAC;IAED;;OAEG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,OAAuB;QACjD,OAAO,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,CAAA;IAClD,CAAC;CACF;AAED,mDAAmD;AACnD,oDAAoD;AACpD,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE,CACtC,CAAC;IACC,4BAA4B;KAC3B,OAAO,CAAC,yBAAyB,EAAE,OAAO,CAAC;IAC5C,gCAAgC;KAC/B,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,6BAA6B;KAC5B,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;KAC1B,IAAI,EAAE,CAAA;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,UAAuB,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA","sourcesContent":["export type ConfigType = 'number' | 'string' | 'boolean'\n\nimport { inspect, InspectOptions, ParseArgsConfig } from 'node:util'\nimport { parseArgs } from './parse-args.js'\n\n// it's a tiny API, just cast it inline, it's fine\n//@ts-ignore\nimport _cliui from 'cliui'\nimport { basename } from 'node:path'\n\ninterface CliUI {\n div(\n ...p: {\n text: string\n padding?: [number, number, number, number]\n width?: number\n }[]\n ): void\n toString(): string\n}\nconst cliui = (o: { width?: number } = {}): CliUI => _cliui(o)\n\nconst width = Math.min(\n (process && process.stdout && process.stdout.columns) || 80,\n 80\n)\n\nconst toEnvKey = (pref: string, key: string): string => {\n return [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')]\n .join(' ')\n .trim()\n .toUpperCase()\n .replace(/ /g, '_')\n}\n\nconst toEnvVal = (\n value: string | boolean | number | string[] | boolean[] | number[],\n delim: string = '\\n'\n): string => {\n const str =\n typeof value === 'string'\n ? value\n : typeof value === 'boolean'\n ? value\n ? '1'\n : '0'\n : typeof value === 'number'\n ? String(value)\n : Array.isArray(value)\n ? value\n .map((v: string | number | boolean) => toEnvVal(v))\n .join(delim)\n : /* c8 ignore start */\n undefined\n if (typeof str !== 'string') {\n throw new Error(\n `could not serialize value to environment: ${JSON.stringify(value)}`\n )\n }\n /* c8 ignore stop */\n return str\n}\n\nconst fromEnvVal = <T extends ConfigType, M extends boolean>(\n env: string,\n type: T,\n multiple: M,\n delim: string = '\\n'\n): ValidValue<T, M> =>\n (multiple\n ? env.split(delim).map(v => fromEnvVal(v, type, false))\n : type === 'string'\n ? env\n : type === 'boolean'\n ? env === '1'\n : +env.trim()) as ValidValue<T, M>\n\n/**\n * Defines the type of value that is valid, given a config definition's\n * {@link ConfigType} and boolean multiple setting\n */\nexport type ValidValue<T extends ConfigType, M extends boolean> = [\n T,\n M\n] extends ['number', true]\n ? number[]\n : [T, M] extends ['string', true]\n ? string[]\n : [T, M] extends ['boolean', true]\n ? boolean[]\n : [T, M] extends ['number', false]\n ? number\n : [T, M] extends ['string', false]\n ? string\n : [T, M] extends ['boolean', false]\n ? boolean\n : [T, M] extends ['string', boolean]\n ? string | string[]\n : [T, M] extends ['boolean', boolean]\n ? boolean | boolean[]\n : [T, M] extends ['number', boolean]\n ? number | number[]\n : [T, M] extends [ConfigType, false]\n ? string | number | boolean\n : [T, M] extends [ConfigType, true]\n ? string[] | number[] | boolean[]\n : string | number | boolean | string[] | number[] | boolean[]\n\n/**\n * The meta information for a config option definition, when the\n * type and multiple values can be inferred by the method being used\n */\nexport type ConfigOptionMeta<T extends ConfigType, M extends boolean> = {\n default?: ValidValue<T, M> | undefined\n description?: string\n validate?: ((v: any) => v is ValidValue<T, M>) | ((v: any) => boolean)\n short?: string | undefined\n type?: T\n} & (T extends 'boolean' ? {} : { hint?: string | undefined }) &\n (M extends false\n ? {}\n : { multiple?: M | undefined; delim?: string | undefined })\n\n/**\n * A set of {@link ConfigOptionMeta} fields, referenced by their longOption\n * string values.\n */\nexport type ConfigMetaSet<T extends ConfigType, M extends boolean> = {\n [longOption: string]: ConfigOptionMeta<T, M>\n}\n\n/**\n * Infer {@link ConfigSet} fields from a given {@link ConfigMetaSet}\n */\nexport type ConfigSetFromMetaSet<\n T extends ConfigType,\n M extends boolean,\n S extends ConfigMetaSet<T, M>\n> = {\n [longOption in keyof S]: ConfigOptionBase<T, M>\n}\n\n/**\n * Fields that can be set on a {@link ConfigOptionBase} or\n * {@link ConfigOptionMeta} based on whether or not the field is known to be\n * multiple.\n */\nexport type MultiType<M extends boolean> = M extends true\n ? {\n multiple: true\n delim?: string | undefined\n }\n : M extends false\n ? {\n multiple?: false | undefined\n delim?: undefined\n }\n : {\n multiple?: boolean | undefined\n delim?: string | undefined\n }\n\n/**\n * A config field definition, in its full representation.\n */\nexport type ConfigOptionBase<T extends ConfigType, M extends boolean> = {\n type: T\n short?: string | undefined\n default?: ValidValue<T, M> | undefined\n description?: string\n hint?: T extends 'boolean' ? undefined : string | undefined\n validate?: (v: any) => v is ValidValue<T, M>\n} & MultiType<M>\n\nexport const isConfigType = (t: string): t is ConfigType =>\n typeof t === 'string' &&\n (t === 'string' || t === 'number' || t === 'boolean')\n\nconst undefOrType = (v: any, t: string): boolean =>\n v === undefined || typeof v === t\n\n// print the value type, for error message reporting\nconst valueType = (\n v:\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[]\n | { type: ConfigType; multiple?: boolean }\n): string =>\n typeof v === 'string'\n ? 'string'\n : typeof v === 'boolean'\n ? 'boolean'\n : typeof v === 'number'\n ? 'number'\n : Array.isArray(v)\n ? joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]'\n : `${v.type}${v.multiple ? '[]' : ''}`\n\nconst joinTypes = (types: string[]): string =>\n types.length === 1 ? types[0] : `(${types.join('|')})`\n\nconst isValidValue = <T extends ConfigType, M extends boolean>(\n v: any,\n type: T,\n multi: M\n): v is ValidValue<T, M> => {\n if (multi) {\n if (!Array.isArray(v)) return false\n return !v.some((v: any) => !isValidValue(v, type, false))\n }\n if (Array.isArray(v)) return false\n return typeof v === type\n}\n\nexport const isConfigOption = <T extends ConfigType, M extends boolean>(\n o: any,\n type: T,\n multi: M\n): o is ConfigOptionBase<T, M> =>\n !!o &&\n typeof o === 'object' &&\n isConfigType(o.type) &&\n o.type === type &&\n undefOrType(o.short, 'string') &&\n undefOrType(o.description, 'string') &&\n undefOrType(o.hint, 'string') &&\n undefOrType(o.validate, 'function') &&\n (o.default === undefined || isValidValue(o.default, type, multi)) &&\n !!o.multiple === multi\n\n/**\n * A set of {@link ConfigOptionBase} objects, referenced by their longOption\n * string values.\n */\nexport type ConfigSet = {\n [longOption: string]: ConfigOptionBase<ConfigType, boolean>\n}\n\n/**\n * The 'values' field returned by {@link Jack#parse}\n */\nexport type OptionsResults<T extends ConfigSet> = {\n [k in keyof T]?: T[k] extends ConfigOptionBase<'string', false>\n ? string\n : T[k] extends ConfigOptionBase<'string', true>\n ? string[]\n : T[k] extends ConfigOptionBase<'number', false>\n ? number\n : T[k] extends ConfigOptionBase<'number', true>\n ? number[]\n : T[k] extends ConfigOptionBase<'boolean', false>\n ? boolean\n : T[k] extends ConfigOptionBase<'boolean', true>\n ? boolean[]\n : never\n}\n\n/**\n * The object retured by {@link Jack#parse}\n */\nexport type Parsed<T extends ConfigSet> = {\n values: OptionsResults<T>\n positionals: string[]\n}\n\nfunction num(\n o: ConfigOptionMeta<'number', false> = {}\n): ConfigOptionBase<'number', false> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'number', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'number',\n multiple: false,\n }\n}\n\nfunction numList(\n o: ConfigOptionMeta<'number', true> = {}\n): ConfigOptionBase<'number', true> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'number', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'number',\n multiple: true,\n }\n}\n\nfunction opt(\n o: ConfigOptionMeta<'string', false> = {}\n): ConfigOptionBase<'string', false> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'string', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'string',\n multiple: false,\n }\n}\n\nfunction optList(\n o: ConfigOptionMeta<'string', true> = {}\n): ConfigOptionBase<'string', true> {\n const { default: def, validate: val, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'string', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n type: 'string',\n multiple: true,\n }\n}\n\nfunction flag(\n o: ConfigOptionMeta<'boolean', false> = {}\n): ConfigOptionBase<'boolean', false> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false> & { hint: any }\n if (def !== undefined && !isValidValue(def, 'boolean', false)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'boolean', false>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: false,\n }\n}\n\nfunction flagList(\n o: ConfigOptionMeta<'boolean', true> = {}\n): ConfigOptionBase<'boolean', true> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false> & { hint: any }\n if (def !== undefined && !isValidValue(def, 'boolean', true)) {\n throw new TypeError('invalid default value')\n }\n const validate = val\n ? (val as (v: any) => v is ValidValue<'boolean', true>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag list')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: true,\n }\n}\nconst toParseArgsOptionsConfig = (\n options: ConfigSet\n): Exclude<ParseArgsConfig['options'], undefined> => {\n const c: Exclude<ParseArgsConfig['options'], undefined> = {}\n for (const longOption in options) {\n const config = options[longOption]\n if (isConfigOption(config, 'number', true)) {\n c[longOption] = {\n type: 'string',\n multiple: true,\n default: config.default?.map(c => String(c)),\n }\n } else if (isConfigOption(config, 'number', false)) {\n c[longOption] = {\n type: 'string',\n multiple: false,\n default:\n config.default === undefined\n ? undefined\n : String(config.default),\n }\n } else {\n const conf = config as\n | ConfigOptionBase<'string', boolean>\n | ConfigOptionBase<'boolean', boolean>\n c[longOption] = {\n type: conf.type,\n multiple: conf.multiple,\n default: conf.default,\n }\n }\n if (typeof config.short === 'string') {\n c[longOption].short = config.short\n }\n\n if (\n config.type === 'boolean' &&\n !longOption.startsWith('no-') &&\n !options[`no-${longOption}`]\n ) {\n c[`no-${longOption}`] = {\n type: 'boolean',\n multiple: config.multiple,\n }\n }\n }\n return c\n}\n\n/**\n * A row used when generating the {@link Jack#usage} string\n */\nexport interface Row {\n left?: string\n text: string\n skipLine?: boolean\n type?: string\n}\n/**\n * A heading or description row used when generating the {@link Jack#usage}\n * string\n */\nexport interface TextRow {\n type: 'heading' | 'description'\n text: string\n left?: ''\n skipLine?: boolean\n}\n/**\n * Either a {@link TextRow} or a reference to a {@link ConfigOptionBase}\n */\nexport type UsageField =\n | TextRow\n | {\n type: 'config'\n name: string\n value: ConfigOptionBase<ConfigType, boolean>\n }\n\n/**\n * Options provided to the {@link Jack} constructor\n */\nexport interface JackOptions {\n /**\n * Whether to allow positional arguments\n *\n * @default true\n */\n allowPositionals?: boolean\n\n /**\n * Prefix to use when reading/writing the environment variables\n *\n * If not specified, environment behavior will not be available.\n */\n envPrefix?: string\n\n /**\n * Environment object to read/write. Defaults `process.env`.\n * No effect if `envPrefix` is not set.\n */\n env?: { [k: string]: string | undefined }\n\n /**\n * A short usage string. If not provided, will be generated from the\n * options provided, but that can of course be rather verbose if\n * there are a lot of options.\n */\n usage?: string\n\n /**\n * Stop parsing flags and opts at the first positional argument.\n * This is to support cases like `cmd [flags] <subcmd> [options]`, where\n * each subcommand may have different options. This effectively treats\n * any positional as a `--` argument. Only relevant if `allowPositionals`\n * is true.\n *\n * To do subcommands, set this option, look at the first positional, and\n * parse the remaining positionals as appropriate.\n *\n * @default false\n */\n stopAtPositional?: boolean\n}\n\n/**\n * Class returned by the {@link jack} function and all configuration\n * definition methods. This is what gets chained together.\n */\nexport class Jack<C extends ConfigSet = {}> {\n #configSet: C\n #shorts: { [k: string]: string }\n #options: JackOptions\n #fields: UsageField[] = []\n #env: { [k: string]: string | undefined }\n #envPrefix?: string\n #allowPositionals: boolean\n #usage?: string\n\n constructor(options: JackOptions = {}) {\n this.#options = options\n this.#allowPositionals = options.allowPositionals !== false\n this.#env =\n this.#options.env === undefined ? process.env : this.#options.env\n this.#envPrefix = options.envPrefix\n // We need to fib a little, because it's always the same object, but it\n // starts out as having an empty config set. Then each method that adds\n // fields returns `this as Jack<C & { ...newConfigs }>`\n this.#configSet = Object.create(null) as C\n this.#shorts = Object.create(null)\n }\n\n /**\n * Set the default value (which will still be overridden by env or cli)\n * as if from a parsed config file. The optional `source` param, if\n * provided, will be included in error messages if a value is invalid or\n * unknown.\n */\n setConfigValues(values: OptionsResults<C>, source = '') {\n try {\n this.validate(values)\n } catch (er) {\n throw Object.assign(er as Error, source ? { source } : {})\n }\n for (const [field, value] of Object.entries(values)) {\n const my = this.#configSet[field]\n my.default = value\n }\n return this\n }\n\n /**\n * Parse a string of arguments, and return the resulting\n * `{ values, positionals }` object.\n *\n * If an {@link JackOptions#envPrefix} is set, then it will read default\n * values from the environment, and write the resulting values back\n * to the environment as well.\n *\n * Environment values always take precedence over any other value, except\n * an explicit CLI setting.\n */\n parse(args: string[] = process.argv): Parsed<C> {\n if (args === process.argv) {\n args = args.slice(\n (process as { _eval?: string })._eval !== undefined ? 1 : 2\n )\n }\n if (this.#envPrefix) {\n for (const [field, my] of Object.entries(this.#configSet)) {\n const ek = toEnvKey(this.#envPrefix, field)\n const env = this.#env[ek]\n if (env !== undefined) {\n my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim)\n }\n }\n }\n\n const options = toParseArgsOptionsConfig(this.#configSet)\n const result = parseArgs({\n args,\n options,\n // always strict, but using our own logic\n strict: false,\n allowPositionals: this.#allowPositionals,\n tokens: true,\n })\n\n const p: Parsed<C> = {\n values: {},\n positionals: [],\n }\n for (const token of result.tokens) {\n if (token.kind === 'positional') {\n p.positionals.push(token.value)\n if (this.#options.stopAtPositional) {\n p.positionals.push(...args.slice(token.index + 1))\n return p\n }\n } else if (token.kind === 'option') {\n let value: string | number | boolean | undefined = undefined\n if (token.name.startsWith('no-')) {\n const my = this.#configSet[token.name]\n const pname = token.name.substring('no-'.length)\n const pos = this.#configSet[pname]\n if (\n pos &&\n pos.type === 'boolean' &&\n (!my ||\n (my.type === 'boolean' && !!my.multiple === !!pos.multiple))\n ) {\n value = false\n token.name = pname\n }\n }\n const my = this.#configSet[token.name]\n if (!my) {\n throw new Error(\n `Unknown option '${token.rawName}'. ` +\n `To specify a positional argument starting with a '-', ` +\n `place it at the end of the command after '--', as in ` +\n `'-- ${token.rawName}'`\n )\n }\n if (value === undefined) {\n if (token.value === undefined) {\n if (my.type !== 'boolean') {\n throw new Error(\n `No value provided for ${token.rawName}, expected ${my.type}`\n )\n }\n value = true\n } else {\n if (my.type === 'boolean') {\n throw new Error(\n `Flag ${token.rawName} does not take a value, received '${token.value}'`\n )\n }\n if (my.type === 'string') {\n value = token.value\n } else {\n value = +token.value\n if (value !== value) {\n throw new Error(\n `Invalid value '${token.value}' provided for ` +\n `'${token.rawName}' option, expected number`\n )\n }\n }\n }\n }\n if (my.multiple) {\n const pv = p.values as {\n [k: string]: (string | number | boolean)[]\n }\n pv[token.name] = pv[token.name] ?? []\n pv[token.name].push(value)\n } else {\n const pv = p.values as { [k: string]: string | number | boolean }\n pv[token.name] = value\n }\n }\n }\n\n for (const [field, c] of Object.entries(this.#configSet)) {\n if (c.default !== undefined && !(field in p.values)) {\n //@ts-ignore\n p.values[field] = c.default\n }\n }\n\n for (const [field, value] of Object.entries(p.values)) {\n const valid = this.#configSet[field].validate\n if (valid && !valid(value)) {\n throw new Error(\n `Invalid value provided for --${field}: ${JSON.stringify(value)}`\n )\n }\n }\n\n this.#writeEnv(p)\n\n return p\n }\n\n /**\n * Validate that any arbitrary object is a valid configuration `values`\n * object. Useful when loading config files or other sources.\n */\n validate(o: any): asserts o is Parsed<C>['values'] {\n if (!o || typeof o !== 'object') {\n throw new Error('Invalid config: not an object')\n }\n for (const field in o) {\n const config = this.#configSet[field]\n if (!config) {\n throw new Error(`Unknown config option: ${field}`)\n }\n if (!isValidValue(o[field], config.type, !!config.multiple)) {\n throw Object.assign(\n new Error(\n `Invalid value ${valueType(\n o[field]\n )} for ${field}, expected ${valueType(config)}`\n ),\n {\n field,\n value: o[field],\n }\n )\n }\n if (config.validate && !config.validate(o[field])) {\n throw new Error(`Invalid config value for ${field}: ${o[field]}`)\n }\n }\n }\n\n #writeEnv(p: Parsed<C>) {\n if (!this.#env || !this.#envPrefix) return\n for (const [field, value] of Object.entries(p.values)) {\n const my = this.#configSet[field]\n this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(\n value,\n my.delim\n )\n }\n }\n\n /**\n * Add a heading to the usage output banner\n */\n heading(text: string): Jack<C> {\n this.#fields.push({ type: 'heading', text })\n return this\n }\n\n /**\n * Add a long-form description to the usage output at this position.\n */\n description(text: string): Jack<C> {\n this.#fields.push({ type: 'description', text })\n return this\n }\n\n /**\n * Add one or more number fields.\n */\n num<F extends ConfigMetaSet<'number', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'number', false, F>> {\n return this.#addFields(fields, num)\n }\n\n /**\n * Add one or more multiple number fields.\n */\n numList<F extends ConfigMetaSet<'number', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'number', true, F>> {\n return this.#addFields(fields, numList)\n }\n\n /**\n * Add one or more string option fields.\n */\n opt<F extends ConfigMetaSet<'string', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'string', false, F>> {\n return this.#addFields(fields, opt)\n }\n\n /**\n * Add one or more multiple string option fields.\n */\n optList<F extends ConfigMetaSet<'string', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'string', true, F>> {\n return this.#addFields(fields, optList)\n }\n\n /**\n * Add one or more flag fields.\n */\n flag<F extends ConfigMetaSet<'boolean', false>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'boolean', false, F>> {\n return this.#addFields(fields, flag)\n }\n\n /**\n * Add one or more multiple flag fields.\n */\n flagList<F extends ConfigMetaSet<'boolean', true>>(\n fields: F\n ): Jack<C & ConfigSetFromMetaSet<'boolean', true, F>> {\n return this.#addFields(fields, flagList)\n }\n\n /**\n * Generic field definition method. Similar to flag/flagList/number/etc,\n * but you must specify the `type` (and optionally `multiple` and `delim`)\n * fields on each one, or Jack won't know how to define them.\n */\n addFields<F extends ConfigSet>(fields: F): Jack<C & F> {\n const next = this as unknown as Jack<C & F>\n for (const [name, field] of Object.entries(fields)) {\n this.#validateName(name, field)\n next.#fields.push({\n type: 'config',\n name,\n value: field as ConfigOptionBase<ConfigType, boolean>,\n })\n }\n Object.assign(next.#configSet, fields)\n return next\n }\n\n #addFields<\n T extends ConfigType,\n M extends boolean,\n F extends ConfigMetaSet<T, M>\n >(\n fields: F,\n fn: (m: ConfigOptionMeta<T, M>) => ConfigOptionBase<T, M>\n ): Jack<C & ConfigSetFromMetaSet<T, M, F>> {\n type NextC = C & ConfigSetFromMetaSet<T, M, F>\n const next = this as unknown as Jack<NextC>\n Object.assign(\n next.#configSet,\n Object.fromEntries(\n Object.entries(fields).map(([name, field]) => {\n this.#validateName(name, field)\n const option = fn(field)\n next.#fields.push({\n type: 'config',\n name,\n value: option as ConfigOptionBase<ConfigType, boolean>,\n })\n return [name, option]\n })\n )\n )\n return next\n }\n\n #validateName(name: string, field: { short?: string }) {\n if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) {\n throw new TypeError(\n `Invalid option name: ${name}, ` +\n `must be '-' delimited ASCII alphanumeric`\n )\n }\n if (this.#configSet[name]) {\n throw new TypeError(`Cannot redefine option ${field}`)\n }\n if (this.#shorts[name]) {\n throw new TypeError(\n `Cannot redefine option ${name}, already ` +\n `in use for ${this.#shorts[name]}`\n )\n }\n if (field.short) {\n if (!/^[a-zA-Z0-9]$/.test(field.short)) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n 'must be 1 ASCII alphanumeric character'\n )\n }\n if (this.#shorts[field.short]) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n `already in use for ${this.#shorts[field.short]}`\n )\n }\n this.#shorts[field.short] = name\n this.#shorts[name] = name\n }\n }\n\n /**\n * Return the usage banner for the given configuration\n */\n usage(): string {\n if (this.#usage) return this.#usage\n const ui = cliui({ width })\n let start = this.#fields[0]?.type === 'heading' ? 1 : 0\n if (this.#fields[0]?.type === 'heading') {\n ui.div({ text: normalize(this.#fields[0].text) })\n }\n ui.div({ text: 'Usage:' })\n if (this.#options.usage) {\n ui.div({\n text: this.#options.usage,\n padding: [0, 0, 0, 2],\n })\n } else {\n const cmd = basename(process.argv[1])\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n ui.div({\n text: usage,\n padding: [0, 0, 0, 2],\n })\n }\n ui.div({ text: '' })\n const maybeDesc = this.#fields[start]\n if (maybeDesc?.type === 'description') {\n start++\n ui.div({\n text: normalize(maybeDesc.text),\n })\n ui.div({ text: '' })\n }\n\n // turn each config type into a row, and figure out the width of the\n // left hand indentation for the option descriptions.\n let maxMax = Math.max(12, Math.min(26, Math.floor(width / 3)))\n let maxWidth = 8\n let prev: Row | TextRow | undefined = undefined\n const rows: (Row | TextRow)[] = []\n for (const field of this.#fields.slice(start)) {\n if (field.type !== 'config') {\n if (prev) prev.skipLine = true\n prev = undefined\n field.text = normalize(field.text)\n rows.push(field)\n continue\n }\n const { value } = field\n const desc = value.description || ''\n const mult = value.multiple ? 'Can be set multiple times' : ''\n const dmDelim = mult && (desc.includes('\\n') ? '\\n\\n' : '\\n')\n const text = normalize(desc + dmDelim + mult)\n const hint =\n value.hint ||\n (value.type === 'number'\n ? 'n'\n : value.type === 'string'\n ? field.name\n : undefined)\n const short = !value.short\n ? ''\n : value.type === 'boolean'\n ? `-${value.short} `\n : `-${value.short}<${hint}> `\n const left =\n value.type === 'boolean'\n ? `${short}--${field.name}`\n : `${short}--${field.name}=<${hint}>`\n const row: Row = { text, left }\n if (text.length > width - maxMax) {\n row.skipLine = true\n }\n if (prev && left.length > maxMax) prev.skipLine = true\n prev = row\n const len = left.length + 4\n if (len > maxWidth && len < maxMax) {\n maxWidth = len\n }\n\n rows.push(row)\n }\n\n for (const row of rows) {\n if (row.left) {\n // If the row is too long, don't wrap it\n // Bump the right-hand side down a line to make room\n if (row.left.length > maxWidth - 2) {\n ui.div({ text: row.left, padding: [0, 0, 0, 2] })\n ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] })\n } else {\n ui.div(\n {\n text: row.left,\n padding: [0, 1, 0, 2],\n width: maxWidth,\n },\n { text: row.text }\n )\n }\n if (row.skipLine) {\n ui.div({ text: '' })\n }\n } else {\n if (row.type === 'heading') {\n ui.div(row)\n } else {\n ui.div({ ...row, padding: [1, 0, 1, 2] })\n }\n ui.div()\n }\n }\n\n return (this.#usage = ui.toString())\n }\n\n /**\n * Return the configuration options as a plain object\n */\n toJSON() {\n return Object.fromEntries(\n Object.entries(this.#configSet).map(([field, def]) => [\n field,\n {\n type: def.type,\n ...(def.multiple ? { multiple: true } : {}),\n ...(def.delim ? { delim: def.delim } : {}),\n ...(def.short ? { short: def.short } : {}),\n ...(def.description ? { description: def.description } : {}),\n ...(def.validate ? { validate: def.validate } : {}),\n ...(def.default !== undefined ? { default: def.default } : {}),\n },\n ])\n )\n }\n\n /**\n * Custom printer for `util.inspect`\n */\n [inspect.custom](_: number, options: InspectOptions) {\n return `Jack ${inspect(this.toJSON(), options)}`\n }\n}\n\n// Unwrap and un-indent, so we can wrap description\n// strings however makes them look nice in the code.\nconst normalize = (s: string): string =>\n s\n // remove single line breaks\n .replace(/([^\\n])\\n[ \\t]*([^\\n])/g, '$1 $2')\n // normalize mid-line whitespace\n .replace(/([^\\n])[ \\t]+([^\\n])/g, '$1 $2')\n // two line breaks are enough\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n\n/**\n * Main entry point. Create and return a {@link Jack} object.\n */\nexport const jack = (options: JackOptions = {}) => new Jack(options)\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jackspeak",
3
- "version": "2.0.2",
3
+ "version": "2.1.0",
4
4
  "description": "A very strict and proper argument parser.",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/mjs/index.js",