@oclif/core 1.13.10 → 1.14.1

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/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [1.14.1](https://github.com/oclif/core/compare/v1.14.0...v1.14.1) (2022-08-16)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * parser doesn't validate against options parameter if the value is provided through a env var ([#474](https://github.com/oclif/core/issues/474)) ([fe6dfea](https://github.com/oclif/core/commit/fe6dfea0bcc5cae69c91962430996670decf7887))
11
+
12
+ ## [1.14.0](https://github.com/oclif/core/compare/v1.13.11...v1.14.0) (2022-08-16)
13
+
14
+
15
+ ### Features
16
+
17
+ * all oclif flag types support custom parsers ([ad86faf](https://github.com/oclif/core/commit/ad86faf08f7a6d7984afe356819df458aaf04674))
18
+
19
+ ### [1.13.11](https://github.com/oclif/core/compare/v1.13.10...v1.13.11) (2022-08-16)
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * more custom flag type overloads ([#471](https://github.com/oclif/core/issues/471)) ([ac4baf2](https://github.com/oclif/core/commit/ac4baf260f8e87bb5618c7b790f35372d55096c7))
25
+
5
26
  ### [1.13.10](https://github.com/oclif/core/compare/v1.13.9...v1.13.10) (2022-08-09)
6
27
 
7
28
  ### [1.13.9](https://github.com/oclif/core/compare/v1.13.8...v1.13.9) (2022-08-09)
@@ -146,7 +146,14 @@ export declare type OptionFlag<T> = FlagBase<T, string> & OptionFlagProps & {
146
146
  export declare type Definition<T> = {
147
147
  (options: {
148
148
  multiple: true;
149
- } & Partial<OptionFlag<T[]>>): OptionFlag<T[]>;
149
+ } & ({
150
+ required: true;
151
+ } | {
152
+ default: Default<T>;
153
+ }) & Partial<OptionFlag<T>>): OptionFlag<T[]>;
154
+ (options: {
155
+ multiple: true;
156
+ } & Partial<OptionFlag<T[]>>): OptionFlag<T[] | undefined>;
150
157
  (options: ({
151
158
  required: true;
152
159
  } | {
@@ -6,6 +6,22 @@ export declare function build<T>(defaults: {
6
6
  } & Partial<OptionFlag<T>>): Definition<T>;
7
7
  export declare function build(defaults: Partial<OptionFlag<string>>): Definition<string>;
8
8
  export declare function boolean<T = boolean>(options?: Partial<BooleanFlag<T>>): BooleanFlag<T>;
9
+ export declare function integer(opts: Partial<OptionFlag<number>> & {
10
+ min?: number;
11
+ max?: number;
12
+ } & {
13
+ multiple: true;
14
+ } & ({
15
+ required: true;
16
+ } | {
17
+ default: Default<number>;
18
+ })): OptionFlag<number[]>;
19
+ export declare function integer(opts: Partial<OptionFlag<number>> & {
20
+ min?: number;
21
+ max?: number;
22
+ } & {
23
+ multiple: true;
24
+ }): OptionFlag<number[] | undefined>;
9
25
  export declare function integer(opts: Partial<OptionFlag<number>> & {
10
26
  min?: number;
11
27
  max?: number;
@@ -18,6 +34,20 @@ export declare function integer(opts?: Partial<OptionFlag<number>> & {
18
34
  min?: number;
19
35
  max?: number;
20
36
  }): OptionFlag<number | undefined>;
37
+ export declare function directory(opts: Partial<OptionFlag<string>> & {
38
+ exists?: boolean;
39
+ } & {
40
+ multiple: true;
41
+ } & ({
42
+ required: true;
43
+ } | {
44
+ default: Default<string>;
45
+ })): OptionFlag<string[]>;
46
+ export declare function directory(opts: Partial<OptionFlag<string>> & {
47
+ exists?: boolean;
48
+ } & {
49
+ multiple: true;
50
+ }): OptionFlag<string[] | undefined>;
21
51
  export declare function directory(opts: {
22
52
  exists?: boolean;
23
53
  } & Partial<OptionFlag<string>> & ({
@@ -28,6 +58,20 @@ export declare function directory(opts: {
28
58
  export declare function directory(opts?: {
29
59
  exists?: boolean;
30
60
  } & Partial<OptionFlag<string>>): OptionFlag<string | undefined>;
61
+ export declare function file(opts: Partial<OptionFlag<string>> & {
62
+ exists?: boolean;
63
+ } & {
64
+ multiple: true;
65
+ } & ({
66
+ required: true;
67
+ } | {
68
+ default: Default<string>;
69
+ })): OptionFlag<string[]>;
70
+ export declare function file(opts: Partial<OptionFlag<string>> & {
71
+ exists?: boolean;
72
+ } & {
73
+ multiple: true;
74
+ }): OptionFlag<string[] | undefined>;
31
75
  export declare function file(opts: {
32
76
  exists?: boolean;
33
77
  } & Partial<OptionFlag<string>> & ({
@@ -37,7 +37,7 @@ function integer(opts = {}) {
37
37
  throw new Error(`Expected an integer greater than or equal to ${opts.min} but received: ${input}`);
38
38
  if (opts.max !== undefined && num > opts.max)
39
39
  throw new Error(`Expected an integer less than or equal to ${opts.max} but received: ${input}`);
40
- return num;
40
+ return opts.parse ? opts.parse(input, 1) : num;
41
41
  },
42
42
  })();
43
43
  }
@@ -45,14 +45,26 @@ exports.integer = integer;
45
45
  function directory(opts = {}) {
46
46
  return build({
47
47
  ...opts,
48
- parse: async (input) => opts.exists ? dirExists(input) : input,
48
+ parse: async (input) => {
49
+ if (opts.exists) {
50
+ // 2nd "context" arg is required but unused
51
+ return opts.parse ? opts.parse(await dirExists(input), true) : dirExists(input);
52
+ }
53
+ return opts.parse ? opts.parse(input, true) : input;
54
+ },
49
55
  })();
50
56
  }
51
57
  exports.directory = directory;
52
58
  function file(opts = {}) {
53
59
  return build({
54
60
  ...opts,
55
- parse: async (input) => opts.exists ? fileExists(input) : input,
61
+ parse: async (input) => {
62
+ if (opts.exists) {
63
+ // 2nd "context" arg is required but unused
64
+ return opts.parse ? opts.parse(await fileExists(input), true) : fileExists(input);
65
+ }
66
+ return opts.parse ? opts.parse(input, true) : input;
67
+ },
56
68
  })();
57
69
  }
58
70
  exports.file = file;
@@ -17,6 +17,7 @@ export declare class Parser<T extends ParserInput, TFlags extends OutputFlags<T[
17
17
  }>;
18
18
  private _args;
19
19
  private _flags;
20
+ private _validateOptions;
20
21
  private _argv;
21
22
  private _debugOutput;
22
23
  private _debugInput;
@@ -153,9 +153,7 @@ class Parser {
153
153
  }
154
154
  else {
155
155
  const input = token.input;
156
- if (flag.options && !flag.options.includes(input)) {
157
- throw new m.errors.FlagInvalidOptionError(flag, input);
158
- }
156
+ this._validateOptions(flag, input);
159
157
  // eslint-disable-next-line no-await-in-loop
160
158
  const value = flag.parse ? await flag.parse(input, this.context) : input;
161
159
  if (flag.multiple) {
@@ -173,9 +171,11 @@ class Parser {
173
171
  continue;
174
172
  if (flag.type === 'option' && flag.env) {
175
173
  const input = process.env[flag.env];
176
- // eslint-disable-next-line no-await-in-loop
177
- if (input)
174
+ if (input) {
175
+ this._validateOptions(flag, input);
176
+ // eslint-disable-next-line no-await-in-loop
178
177
  flags[k] = await flag.parse(input, this.context);
178
+ }
179
179
  }
180
180
  if (!(k in flags) && flag.default !== undefined) {
181
181
  this.metaData.flags[k] = { setFromDefault: true };
@@ -186,6 +186,10 @@ class Parser {
186
186
  }
187
187
  return flags;
188
188
  }
189
+ _validateOptions(flag, input) {
190
+ if (flag.options && !flag.options.includes(input))
191
+ throw new m.errors.FlagInvalidOptionError(flag, input);
192
+ }
189
193
  async _argv() {
190
194
  const args = [];
191
195
  const tokens = this._argTokens;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oclif/core",
3
3
  "description": "base library for oclif CLIs",
4
- "version": "1.13.10",
4
+ "version": "1.14.1",
5
5
  "author": "Salesforce",
6
6
  "bugs": "https://github.com/oclif/core/issues",
7
7
  "dependencies": {