parse-my-command 0.4.0 → 0.5.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/dist/index.cjs CHANGED
@@ -1,55 +1,107 @@
1
1
  var __create = Object.create;
2
+ var __getProtoOf = Object.getPrototypeOf;
2
3
  var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
7
+ function __accessProp(key) {
8
+ return this[key];
9
+ }
10
+ var __toESMCache_node;
11
+ var __toESMCache_esm;
12
+ var __toESM = (mod, isNodeMode, target) => {
13
+ var canCache = mod != null && typeof mod === "object";
14
+ if (canCache) {
15
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
16
+ var cached = cache.get(mod);
17
+ if (cached)
18
+ return cached;
19
+ }
20
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
21
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
22
+ for (let key of __getOwnPropNames(mod))
23
+ if (!__hasOwnProp.call(to, key))
24
+ __defProp(to, key, {
25
+ get: __accessProp.bind(mod, key),
26
+ enumerable: true
27
+ });
28
+ if (canCache)
29
+ cache.set(mod, to);
30
+ return to;
10
31
  };
11
- var __copyProps = (to, from, except, desc) => {
32
+ var __toCommonJS = (from) => {
33
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
34
+ if (entry)
35
+ return entry;
36
+ entry = __defProp({}, "__esModule", { value: true });
12
37
  if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
38
+ for (var key of __getOwnPropNames(from))
39
+ if (!__hasOwnProp.call(entry, key))
40
+ __defProp(entry, key, {
41
+ get: __accessProp.bind(from, key),
42
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
43
+ });
16
44
  }
17
- return to;
45
+ __moduleCache.set(from, entry);
46
+ return entry;
47
+ };
48
+ var __moduleCache;
49
+ var __returnValue = (v) => v;
50
+ function __exportSetter(name, newValue) {
51
+ this[name] = __returnValue.bind(null, newValue);
52
+ }
53
+ var __export = (target, all) => {
54
+ for (var name in all)
55
+ __defProp(target, name, {
56
+ get: all[name],
57
+ enumerable: true,
58
+ configurable: true,
59
+ set: __exportSetter.bind(all, name)
60
+ });
18
61
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
62
 
29
63
  // src/index.ts
30
- var index_exports = {};
31
- __export(index_exports, {
32
- findMissingOptions: () => findMissingOptions,
33
- partialParse: () => partialParse
64
+ var exports_src = {};
65
+ __export(exports_src, {
66
+ partialParse: () => partialParse,
67
+ findMissingOptions: () => findMissingOptions
34
68
  });
35
- module.exports = __toCommonJS(index_exports);
69
+ module.exports = __toCommonJS(exports_src);
70
+ var import_camelcase = __toESM(require("camelcase"));
71
+ var import_commander = require("commander");
36
72
 
37
73
  // src/noop.ts
38
- var noop = () => {
39
- };
74
+ var noop = () => {};
40
75
 
41
76
  // src/index.ts
42
- var import_camelcase = __toESM(require("camelcase"), 1);
43
- var import_commander = require("commander");
77
+ var commandSettingKeys = [
78
+ "_allowExcessArguments",
79
+ "_allowUnknownOption",
80
+ "_combineFlagAndOptionalValue",
81
+ "_defaultCommandName",
82
+ "_enablePositionalOptions",
83
+ "_passThroughOptions"
84
+ ];
85
+ var getOrThrow = (map, key) => {
86
+ const value = map.get(key);
87
+ if (value === undefined) {
88
+ throw new Error("Expected map value to be present");
89
+ }
90
+ return value;
91
+ };
44
92
  var findMissingOptions = (command, providedOptionsByCommand) => {
45
- const missingOptionsByCommand = /* @__PURE__ */ new Map();
93
+ const missingOptionsByCommand = new Map;
46
94
  let currentCommand = command;
47
95
  while (currentCommand) {
48
- const missingOptions = /* @__PURE__ */ new Set();
96
+ const missingOptions = new Set;
49
97
  const providedOptions = providedOptionsByCommand.get(currentCommand);
50
98
  for (const option of currentCommand.options) {
51
- const key = option.negate ? (0, import_camelcase.default)(option.long.replace(/^--no-/, "")) : (0, import_camelcase.default)(option.long ?? option.short);
52
- if (providedOptions?.[key] !== void 0) {
99
+ const optionName = option.negate ? option.long?.replace(/^--no-/, "") : option.long ?? option.short;
100
+ if (!optionName) {
101
+ continue;
102
+ }
103
+ const key = import_camelcase.default(optionName);
104
+ if (providedOptions?.[key] !== undefined) {
53
105
  continue;
54
106
  }
55
107
  missingOptions.add(key);
@@ -60,28 +112,19 @@ var findMissingOptions = (command, providedOptionsByCommand) => {
60
112
  return missingOptionsByCommand;
61
113
  };
62
114
  var copyCommandSettings = (source, target) => {
63
- for (const keysToCopy of [
64
- "_allowExcessArguments",
65
- "_allowUnknownOption",
66
- "_combineFlagAndOptionalValue",
67
- "_defaultCommandName",
68
- "_enablePositionalOptions",
69
- "_passThroughOptions"
70
- ]) {
71
- target[keysToCopy] = source[keysToCopy];
115
+ const sourcePrivateState = source;
116
+ const targetPrivateState = target;
117
+ for (const key of commandSettingKeys) {
118
+ targetPrivateState[key] = sourcePrivateState[key];
72
119
  }
73
120
  target.name(source.name());
74
121
  target.aliases(source.aliases());
75
122
  for (const argument of source.registeredArguments) {
76
123
  target.addArgument(argument);
77
124
  }
78
- if (source.version()) {
79
- target.version(
80
- source.version(),
81
- source.options.find(
82
- (option) => option.attributeName() === source._versionOptionName
83
- )?.flags
84
- );
125
+ const version = source.version();
126
+ if (version) {
127
+ target.version(version, source.options.find((option) => option.attributeName() === sourcePrivateState._versionOptionName)?.flags);
85
128
  }
86
129
  };
87
130
  var disableCommandOutput = (command) => {
@@ -103,22 +146,20 @@ var cloneOption = (option) => {
103
146
  if (option.argChoices) {
104
147
  newOption.choices(option.argChoices);
105
148
  }
106
- newOption.conflicts(
107
- option.conflictsWith
108
- );
149
+ newOption.conflicts(option.conflictsWith);
109
150
  newOption.implied = option.implied;
110
151
  return newOption;
111
152
  };
112
153
  var partialParse = (command, argv, options) => {
113
- const providedOptions = /* @__PURE__ */ new Map();
114
- const providedOptionsSources = /* @__PURE__ */ new Map();
115
- const commandsMap = /* @__PURE__ */ new Map();
154
+ const providedOptions = new Map;
155
+ const providedOptionsSources = new Map;
156
+ const commandsMap = new Map;
116
157
  let matchedCommand;
117
158
  const setProvidedOptionSource = (command2, optionKey, source) => {
118
159
  if (!source) {
119
160
  return;
120
161
  }
121
- const sourcesMap = providedOptionsSources.get(command2) ?? /* @__PURE__ */ new Map();
162
+ const sourcesMap = providedOptionsSources.get(command2) ?? new Map;
122
163
  sourcesMap.set(optionKey, source);
123
164
  providedOptionsSources.set(command2, sourcesMap);
124
165
  };
@@ -128,36 +169,25 @@ var partialParse = (command, argv, options) => {
128
169
  disableCommandOutput(parserCommand2);
129
170
  parserCommand2.exitOverride();
130
171
  for (const option of command2.options) {
131
- if (parserCommand2.options.some(
132
- (parserCommandOption) => parserCommandOption.flags === option.flags
133
- )) {
172
+ if (parserCommand2.options.some((parserCommandOption) => parserCommandOption.flags === option.flags)) {
134
173
  continue;
135
174
  }
136
175
  parserCommand2.addOption(cloneOption(option));
137
176
  }
138
177
  parserCommand2.hook("preSubcommand", (thisCommand, actionCommand) => {
139
178
  for (const cmd of [thisCommand, actionCommand]) {
140
- providedOptions.set(commandsMap.get(cmd), cmd.opts());
179
+ const originalCommand = getOrThrow(commandsMap, cmd);
180
+ providedOptions.set(originalCommand, cmd.opts());
141
181
  for (const optionKey of Object.keys(cmd.opts())) {
142
- setProvidedOptionSource(
143
- cmd,
144
- optionKey,
145
- cmd.getOptionValueSource(optionKey)
146
- );
182
+ setProvidedOptionSource(originalCommand, optionKey, cmd.getOptionValueSource(optionKey));
147
183
  }
148
184
  }
149
185
  });
150
186
  parserCommand2.action(() => {
151
- providedOptions.set(
152
- commandsMap.get(parserCommand2),
153
- parserCommand2.opts()
154
- );
187
+ const originalCommand = getOrThrow(commandsMap, parserCommand2);
188
+ providedOptions.set(originalCommand, parserCommand2.opts());
155
189
  for (const optionKey of Object.keys(parserCommand2.opts())) {
156
- setProvidedOptionSource(
157
- commandsMap.get(parserCommand2),
158
- optionKey,
159
- parserCommand2.getOptionValueSource(optionKey)
160
- );
190
+ setProvidedOptionSource(originalCommand, optionKey, parserCommand2.getOptionValueSource(optionKey));
161
191
  }
162
192
  matchedCommand = command2;
163
193
  });
@@ -167,9 +197,9 @@ var partialParse = (command, argv, options) => {
167
197
  }
168
198
  return parserCommand2;
169
199
  };
170
- const parserCommand = createParserCommand(new import_commander.Command(), command);
200
+ const parserCommand = createParserCommand(new import_commander.Command, command);
171
201
  parserCommand.parse(argv, options);
172
- const missingOptions = matchedCommand ? findMissingOptions(matchedCommand, providedOptions) : /* @__PURE__ */ new Map();
202
+ const missingOptions = matchedCommand ? findMissingOptions(matchedCommand, providedOptions) : new Map;
173
203
  return {
174
204
  matchedCommand,
175
205
  missingOptions,
@@ -177,9 +207,6 @@ var partialParse = (command, argv, options) => {
177
207
  providedOptionsSources
178
208
  };
179
209
  };
180
- // Annotate the CommonJS export names for ESM import in node:
181
- 0 && (module.exports = {
182
- findMissingOptions,
183
- partialParse
184
- });
185
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9ub29wLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBub29wIH0gZnJvbSBcIi4vbm9vcC50c1wiO1xuaW1wb3J0IGNhbWVsQ2FzZSBmcm9tIFwiY2FtZWxjYXNlXCI7XG5pbXBvcnQge1xuICB0eXBlIE9wdGlvblZhbHVlcyxcbiAgQ29tbWFuZCxcbiAgdHlwZSBQYXJzZU9wdGlvbnMsXG4gIE9wdGlvbixcbiAgdHlwZSBPcHRpb25WYWx1ZVNvdXJjZSxcbn0gZnJvbSBcImNvbW1hbmRlclwiO1xuXG5leHBvcnQgY29uc3QgZmluZE1pc3NpbmdPcHRpb25zID0gKFxuICBjb21tYW5kOiBDb21tYW5kLFxuICBwcm92aWRlZE9wdGlvbnNCeUNvbW1hbmQ6IE1hcDxDb21tYW5kLCBPcHRpb25WYWx1ZXM+LFxuKSA9PiB7XG4gIGNvbnN0IG1pc3NpbmdPcHRpb25zQnlDb21tYW5kID0gbmV3IE1hcDxDb21tYW5kLCBTZXQ8c3RyaW5nPj4oKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICBsZXQgY3VycmVudENvbW1hbmQ6IENvbW1hbmQgfCB1bmRlZmluZWQgfCBudWxsID0gY29tbWFuZDtcblxuICB3aGlsZSAoY3VycmVudENvbW1hbmQpIHtcbiAgICBjb25zdCBtaXNzaW5nT3B0aW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHByb3ZpZGVkT3B0aW9ucyA9IHByb3ZpZGVkT3B0aW9uc0J5Q29tbWFuZC5nZXQoY3VycmVudENvbW1hbmQpO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGN1cnJlbnRDb21tYW5kLm9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtleSA9IG9wdGlvbi5uZWdhdGVcbiAgICAgICAgPyBjYW1lbENhc2Uob3B0aW9uLmxvbmchLnJlcGxhY2UoL14tLW5vLS8sIFwiXCIpKVxuICAgICAgICA6IGNhbWVsQ2FzZSgob3B0aW9uLmxvbmcgPz8gb3B0aW9uLnNob3J0KSEpO1xuXG4gICAgICBpZiAocHJvdmlkZWRPcHRpb25zPy5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBtaXNzaW5nT3B0aW9ucy5hZGQoa2V5KTtcbiAgICB9XG5cbiAgICBtaXNzaW5nT3B0aW9uc0J5Q29tbWFuZC5zZXQoY3VycmVudENvbW1hbmQsIG1pc3NpbmdPcHRpb25zKTtcbiAgICBjdXJyZW50Q29tbWFuZCA9IGN1cnJlbnRDb21tYW5kLnBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBtaXNzaW5nT3B0aW9uc0J5Q29tbWFuZDtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxQYXJzZVJlc3VsdCA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHdob3NlIGFjdGlvbiB3aWxsIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBtYXRjaGVkQ29tbWFuZDogQ29tbWFuZCB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEEgbWFwIG9mIGNvbW1hbmRzIHRvIGEgc2V0IG9mIG1pc3Npbmcgb3B0aW9ucyBmb3IgdGhhdCBjb21tYW5kXG4gICAqL1xuICBtaXNzaW5nT3B0aW9uczogTWFwPENvbW1hbmQsIFNldDxzdHJpbmc+PjtcbiAgLyoqXG4gICAqIEEgbWFwIG9mIGNvbW1hbmRzIHRvIHRoZSBvcHRpb25zIHByb3ZpZGVkIGZvciB0aGF0IGNvbW1hbmRcbiAgICovXG4gIHByb3ZpZGVkT3B0aW9uczogTWFwPENvbW1hbmQsIE9wdGlvblZhbHVlcz47XG4gIC8qKlxuICAgKiBBIG1hcCBvZiBjb21tYW5kcyB0byBhIG1hcCBvZiBvcHRpb24ga2V5cyB0byB0aGUgc291cmNlIG9mIHRoZSBvcHRpb24gdmFsdWVcbiAgICovXG4gIHByb3ZpZGVkT3B0aW9uc1NvdXJjZXM6IE1hcDxcbiAgICBDb21tYW5kLFxuICAgIE1hcDxzdHJpbmcsIE9wdGlvblZhbHVlU291cmNlIHwgdW5kZWZpbmVkPlxuICA+O1xufTtcblxuY29uc3QgY29weUNvbW1hbmRTZXR0aW5ncyA9IChzb3VyY2U6IENvbW1hbmQsIHRhcmdldDogQ29tbWFuZCkgPT4ge1xuICBmb3IgKGNvbnN0IGtleXNUb0NvcHkgb2YgW1xuICAgIFwiX2FsbG93RXhjZXNzQXJndW1lbnRzXCIsXG4gICAgXCJfYWxsb3dVbmtub3duT3B0aW9uXCIsXG4gICAgXCJfY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlXCIsXG4gICAgXCJfZGVmYXVsdENvbW1hbmROYW1lXCIsXG4gICAgXCJfZW5hYmxlUG9zaXRpb25hbE9wdGlvbnNcIixcbiAgICBcIl9wYXNzVGhyb3VnaE9wdGlvbnNcIixcbiAgXSBhcyBjb25zdCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAodGFyZ2V0IGFzIGFueSlba2V5c1RvQ29weV0gPSAoc291cmNlIGFzIGFueSlba2V5c1RvQ29weV07XG4gIH1cblxuICB0YXJnZXQubmFtZShzb3VyY2UubmFtZSgpKTtcbiAgdGFyZ2V0LmFsaWFzZXMoc291cmNlLmFsaWFzZXMoKSk7XG4gIGZvciAoY29uc3QgYXJndW1lbnQgb2Ygc291cmNlLnJlZ2lzdGVyZWRBcmd1bWVudHMpIHtcbiAgICB0YXJnZXQuYWRkQXJndW1lbnQoYXJndW1lbnQpO1xuICB9XG5cbiAgaWYgKHNvdXJjZS52ZXJzaW9uKCkpIHtcbiAgICB0YXJnZXQudmVyc2lvbihcbiAgICAgIHNvdXJjZS52ZXJzaW9uKCkhLFxuICAgICAgc291cmNlLm9wdGlvbnMuZmluZChcbiAgICAgICAgKG9wdGlvbikgPT5cbiAgICAgICAgICBvcHRpb24uYXR0cmlidXRlTmFtZSgpID09PVxuICAgICAgICAgIChzb3VyY2UgYXMgQ29tbWFuZCAmIHsgX3ZlcnNpb25PcHRpb25OYW1lOiBzdHJpbmcgfSlcbiAgICAgICAgICAgIC5fdmVyc2lvbk9wdGlvbk5hbWUsXG4gICAgICApPy5mbGFncyxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBkaXNhYmxlQ29tbWFuZE91dHB1dCA9IChjb21tYW5kOiBDb21tYW5kKSA9PiB7XG4gIGNvbW1hbmQuY29uZmlndXJlT3V0cHV0KHtcbiAgICB3cml0ZU91dDogbm9vcCxcbiAgICB3cml0ZUVycjogbm9vcCxcbiAgICBvdXRwdXRFcnJvcjogbm9vcCxcbiAgfSk7XG59O1xuXG5jb25zdCBjbG9uZU9wdGlvbiA9IChvcHRpb246IE9wdGlvbikgPT4ge1xuICBjb25zdCBuZXdPcHRpb24gPSBuZXcgT3B0aW9uKG9wdGlvbi5mbGFncywgb3B0aW9uLmRlc2NyaXB0aW9uKTtcbiAgbmV3T3B0aW9uLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpO1xuICBuZXdPcHRpb24uZGVmYXVsdChvcHRpb24uZGVmYXVsdFZhbHVlLCBvcHRpb24uZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24pO1xuXG4gIG5ld09wdGlvbi5wcmVzZXQoKG9wdGlvbiBhcyBPcHRpb24gJiB7IHByZXNldEFyZzogdW5rbm93biB9KS5wcmVzZXRBcmcpO1xuICBuZXdPcHRpb24uZW52KChvcHRpb24gYXMgT3B0aW9uICYgeyBlbnZWYXI6IHN0cmluZyB9KS5lbnZWYXIpO1xuICBpZiAob3B0aW9uLnBhcnNlQXJnKSB7XG4gICAgbmV3T3B0aW9uLmFyZ1BhcnNlcihvcHRpb24ucGFyc2VBcmcpO1xuICB9XG5cbiAgaWYgKG9wdGlvbi5hcmdDaG9pY2VzKSB7XG4gICAgbmV3T3B0aW9uLmNob2ljZXMob3B0aW9uLmFyZ0Nob2ljZXMpO1xuICB9XG5cbiAgbmV3T3B0aW9uLmNvbmZsaWN0cyhcbiAgICAob3B0aW9uIGFzIE9wdGlvbiAmIHsgY29uZmxpY3RzV2l0aDogc3RyaW5nW10gfSkuY29uZmxpY3RzV2l0aCxcbiAgKTtcblxuICAobmV3T3B0aW9uIGFzIE9wdGlvbiAmIHsgaW1wbGllZDogdW5rbm93biB9KS5pbXBsaWVkID0gKFxuICAgIG9wdGlvbiBhcyBPcHRpb24gJiB7IGltcGxpZWQ6IHVua25vd24gfVxuICApLmltcGxpZWQ7XG5cbiAgcmV0dXJuIG5ld09wdGlvbjtcbn07XG5cbi8qKlxuICogUGFydGlhbGx5IHBhcnNlIGFyZ3YgZm9yIGEgY29tbWFuZCB3aXRob3V0IGV4ZWN1dGluZyB0aGUgYWN0aW9uLiBAc2VlIHtAbGluayBDb21tYW5kLnBhcnNlfVxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBtYXRjaGVkIGNvbW1hbmQsIHRoZSBwcm92aWRlZCBvcHRpb25zLCBhbmQgdGhlIG1pc3Npbmcgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnRpYWxQYXJzZSA9IChcbiAgY29tbWFuZDogQ29tbWFuZCxcbiAgYXJndjogcmVhZG9ubHkgc3RyaW5nW10sXG4gIG9wdGlvbnM/OiBQYXJzZU9wdGlvbnMsXG4pOiBQYXJ0aWFsUGFyc2VSZXN1bHQgPT4ge1xuICBjb25zdCBwcm92aWRlZE9wdGlvbnMgPSBuZXcgTWFwPENvbW1hbmQsIE9wdGlvblZhbHVlcz4oKTtcbiAgY29uc3QgcHJvdmlkZWRPcHRpb25zU291cmNlcyA9IG5ldyBNYXA8XG4gICAgQ29tbWFuZCxcbiAgICBNYXA8c3RyaW5nLCBPcHRpb25WYWx1ZVNvdXJjZSB8IHVuZGVmaW5lZD5cbiAgPigpO1xuICBjb25zdCBjb21tYW5kc01hcCA9IG5ldyBNYXA8Q29tbWFuZCwgQ29tbWFuZD4oKTtcbiAgbGV0IG1hdGNoZWRDb21tYW5kOiBDb21tYW5kIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNldFByb3ZpZGVkT3B0aW9uU291cmNlID0gKFxuICAgIGNvbW1hbmQ6IENvbW1hbmQsXG4gICAgb3B0aW9uS2V5OiBzdHJpbmcsXG4gICAgc291cmNlOiBPcHRpb25WYWx1ZVNvdXJjZSB8IHVuZGVmaW5lZCxcbiAgKSA9PiB7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VzTWFwID1cbiAgICAgIHByb3ZpZGVkT3B0aW9uc1NvdXJjZXMuZ2V0KGNvbW1hbmQpID8/XG4gICAgICBuZXcgTWFwPHN0cmluZywgT3B0aW9uVmFsdWVTb3VyY2U+KCk7XG4gICAgc291cmNlc01hcC5zZXQob3B0aW9uS2V5LCBzb3VyY2UpO1xuICAgIHByb3ZpZGVkT3B0aW9uc1NvdXJjZXMuc2V0KGNvbW1hbmQsIHNvdXJjZXNNYXApO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZVBhcnNlckNvbW1hbmQgPSAocGFyc2VyQ29tbWFuZDogQ29tbWFuZCwgY29tbWFuZDogQ29tbWFuZCkgPT4ge1xuICAgIGNvbW1hbmRzTWFwLnNldChwYXJzZXJDb21tYW5kLCBjb21tYW5kKTtcblxuICAgIGNvcHlDb21tYW5kU2V0dGluZ3MoY29tbWFuZCwgcGFyc2VyQ29tbWFuZCk7XG4gICAgZGlzYWJsZUNvbW1hbmRPdXRwdXQocGFyc2VyQ29tbWFuZCk7XG4gICAgcGFyc2VyQ29tbWFuZC5leGl0T3ZlcnJpZGUoKTtcblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGNvbW1hbmQub3B0aW9ucykge1xuICAgICAgLy8gU2tpcCBhZGRpbmcgdGhlIG9wdGlvbiBpZiBpdCdzIGFscmVhZHkgcmVnaXN0ZXJlZFxuICAgICAgaWYgKFxuICAgICAgICBwYXJzZXJDb21tYW5kLm9wdGlvbnMuc29tZShcbiAgICAgICAgICAocGFyc2VyQ29tbWFuZE9wdGlvbikgPT4gcGFyc2VyQ29tbWFuZE9wdGlvbi5mbGFncyA9PT0gb3B0aW9uLmZsYWdzLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlckNvbW1hbmQuYWRkT3B0aW9uKGNsb25lT3B0aW9uKG9wdGlvbikpO1xuICAgIH1cblxuICAgIHBhcnNlckNvbW1hbmQuaG9vayhcInByZVN1YmNvbW1hbmRcIiwgKHRoaXNDb21tYW5kLCBhY3Rpb25Db21tYW5kKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNtZCBvZiBbdGhpc0NvbW1hbmQsIGFjdGlvbkNvbW1hbmRdKSB7XG4gICAgICAgIHByb3ZpZGVkT3B0aW9ucy5zZXQoY29tbWFuZHNNYXAuZ2V0KGNtZCkhLCBjbWQub3B0cygpKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbktleSBvZiBPYmplY3Qua2V5cyhjbWQub3B0cygpKSkge1xuICAgICAgICAgIHNldFByb3ZpZGVkT3B0aW9uU291cmNlKFxuICAgICAgICAgICAgY21kLFxuICAgICAgICAgICAgb3B0aW9uS2V5LFxuICAgICAgICAgICAgY21kLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcGFyc2VyQ29tbWFuZC5hY3Rpb24oKCkgPT4ge1xuICAgICAgcHJvdmlkZWRPcHRpb25zLnNldChcbiAgICAgICAgY29tbWFuZHNNYXAuZ2V0KHBhcnNlckNvbW1hbmQpISxcbiAgICAgICAgcGFyc2VyQ29tbWFuZC5vcHRzKCksXG4gICAgICApO1xuXG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbktleSBvZiBPYmplY3Qua2V5cyhwYXJzZXJDb21tYW5kLm9wdHMoKSkpIHtcbiAgICAgICAgc2V0UHJvdmlkZWRPcHRpb25Tb3VyY2UoXG4gICAgICAgICAgY29tbWFuZHNNYXAuZ2V0KHBhcnNlckNvbW1hbmQpISxcbiAgICAgICAgICBvcHRpb25LZXksXG4gICAgICAgICAgcGFyc2VyQ29tbWFuZC5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBtYXRjaGVkQ29tbWFuZCA9IGNvbW1hbmQ7XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHN1YmNvbW1hbmQgb2YgY29tbWFuZC5jb21tYW5kcyBhcyBDb21tYW5kW10pIHtcbiAgICAgIGNvbnN0IHBhcnNlclN1YmNvbW1hbmQgPSBwYXJzZXJDb21tYW5kLmNvbW1hbmQoc3ViY29tbWFuZC5uYW1lKCkpO1xuICAgICAgY3JlYXRlUGFyc2VyQ29tbWFuZChwYXJzZXJTdWJjb21tYW5kLCBzdWJjb21tYW5kKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VyQ29tbWFuZDtcbiAgfTtcblxuICBjb25zdCBwYXJzZXJDb21tYW5kID0gY3JlYXRlUGFyc2VyQ29tbWFuZChuZXcgQ29tbWFuZCgpLCBjb21tYW5kKTtcbiAgcGFyc2VyQ29tbWFuZC5wYXJzZShhcmd2LCBvcHRpb25zKTtcblxuICBjb25zdCBtaXNzaW5nT3B0aW9ucyA9IG1hdGNoZWRDb21tYW5kXG4gICAgPyBmaW5kTWlzc2luZ09wdGlvbnMobWF0Y2hlZENvbW1hbmQsIHByb3ZpZGVkT3B0aW9ucylcbiAgICA6IG5ldyBNYXA8Q29tbWFuZCwgU2V0PHN0cmluZz4+KCk7XG5cbiAgcmV0dXJuIHtcbiAgICBtYXRjaGVkQ29tbWFuZCxcbiAgICBtaXNzaW5nT3B0aW9ucyxcbiAgICBwcm92aWRlZE9wdGlvbnMsXG4gICAgcHJvdmlkZWRPcHRpb25zU291cmNlcyxcbiAgfTtcbn07XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNDTyxJQUFNLE9BQU8sTUFBTTtBQUFDOzs7QURBM0IsdUJBQXNCO0FBQ3RCLHVCQU1PO0FBRUEsSUFBTSxxQkFBcUIsQ0FDaEMsU0FDQSw2QkFDRztBQUNILFFBQU0sMEJBQTBCLG9CQUFJLElBQTBCO0FBRzlELE1BQUksaUJBQTZDO0FBRWpELFNBQU8sZ0JBQWdCO0FBQ3JCLFVBQU0saUJBQWlCLG9CQUFJLElBQVk7QUFDdkMsVUFBTSxrQkFBa0IseUJBQXlCLElBQUksY0FBYztBQUNuRSxlQUFX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
210
+
211
+ //# debugId=F0B7EB039167465764756E2164756E21
212
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9ub29wLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImltcG9ydCBjYW1lbENhc2UgZnJvbSBcImNhbWVsY2FzZVwiO1xuaW1wb3J0IHtcbiAgQ29tbWFuZCxcbiAgT3B0aW9uLFxuICB0eXBlIE9wdGlvblZhbHVlU291cmNlLFxuICB0eXBlIE9wdGlvblZhbHVlcyxcbiAgdHlwZSBQYXJzZU9wdGlvbnMsXG59IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IG5vb3AgfSBmcm9tIFwiLi9ub29wLmpzXCI7XG5cbmNvbnN0IGNvbW1hbmRTZXR0aW5nS2V5cyA9IFtcbiAgXCJfYWxsb3dFeGNlc3NBcmd1bWVudHNcIixcbiAgXCJfYWxsb3dVbmtub3duT3B0aW9uXCIsXG4gIFwiX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZVwiLFxuICBcIl9kZWZhdWx0Q29tbWFuZE5hbWVcIixcbiAgXCJfZW5hYmxlUG9zaXRpb25hbE9wdGlvbnNcIixcbiAgXCJfcGFzc1Rocm91Z2hPcHRpb25zXCIsXG5dIGFzIGNvbnN0O1xuXG50eXBlIENvbW1hbmRTZXR0aW5nS2V5ID0gKHR5cGVvZiBjb21tYW5kU2V0dGluZ0tleXMpW251bWJlcl07XG50eXBlIENvbW1hbmRQcml2YXRlU3RhdGUgPSBDb21tYW5kICZcbiAgUmVjb3JkPENvbW1hbmRTZXR0aW5nS2V5LCB1bmtub3duPiAmIHtcbiAgICBfdmVyc2lvbk9wdGlvbk5hbWU/OiBzdHJpbmc7XG4gIH07XG5cbmNvbnN0IGdldE9yVGhyb3cgPSA8S2V5LCBWYWx1ZT4obWFwOiBNYXA8S2V5LCBWYWx1ZT4sIGtleTogS2V5KTogVmFsdWUgPT4ge1xuICBjb25zdCB2YWx1ZSA9IG1hcC5nZXQoa2V5KTtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBtYXAgdmFsdWUgdG8gYmUgcHJlc2VudFwiKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTWlzc2luZ09wdGlvbnMgPSAoXG4gIGNvbW1hbmQ6IENvbW1hbmQsXG4gIHByb3ZpZGVkT3B0aW9uc0J5Q29tbWFuZDogTWFwPENvbW1hbmQsIE9wdGlvblZhbHVlcz4sXG4pID0+IHtcbiAgY29uc3QgbWlzc2luZ09wdGlvbnNCeUNvbW1hbmQgPSBuZXcgTWFwPENvbW1hbmQsIFNldDxzdHJpbmc+PigpO1xuXG4gIGxldCBjdXJyZW50Q29tbWFuZDogQ29tbWFuZCB8IHVuZGVmaW5lZCB8IG51bGwgPSBjb21tYW5kO1xuXG4gIHdoaWxlIChjdXJyZW50Q29tbWFuZCkge1xuICAgIGNvbnN0IG1pc3NpbmdPcHRpb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgcHJvdmlkZWRPcHRpb25zID0gcHJvdmlkZWRPcHRpb25zQnlDb21tYW5kLmdldChjdXJyZW50Q29tbWFuZCk7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgY3VycmVudENvbW1hbmQub3B0aW9ucykge1xuICAgICAgY29uc3Qgb3B0aW9uTmFtZSA9IG9wdGlvbi5uZWdhdGVcbiAgICAgICAgPyBvcHRpb24ubG9uZz8ucmVwbGFjZSgvXi0tbm8tLywgXCJcIilcbiAgICAgICAgOiAob3B0aW9uLmxvbmcgPz8gb3B0aW9uLnNob3J0KTtcbiAgICAgIGlmICghb3B0aW9uTmFtZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gY2FtZWxDYXNlKG9wdGlvbk5hbWUpO1xuXG4gICAgICBpZiAocHJvdmlkZWRPcHRpb25zPy5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBtaXNzaW5nT3B0aW9ucy5hZGQoa2V5KTtcbiAgICB9XG5cbiAgICBtaXNzaW5nT3B0aW9uc0J5Q29tbWFuZC5zZXQoY3VycmVudENvbW1hbmQsIG1pc3NpbmdPcHRpb25zKTtcbiAgICBjdXJyZW50Q29tbWFuZCA9IGN1cnJlbnRDb21tYW5kLnBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBtaXNzaW5nT3B0aW9uc0J5Q29tbWFuZDtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxQYXJzZVJlc3VsdCA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHdob3NlIGFjdGlvbiB3aWxsIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBtYXRjaGVkQ29tbWFuZDogQ29tbWFuZCB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEEgbWFwIG9mIGNvbW1hbmRzIHRvIGEgc2V0IG9mIG1pc3Npbmcgb3B0aW9ucyBmb3IgdGhhdCBjb21tYW5kXG4gICAqL1xuICBtaXNzaW5nT3B0aW9uczogTWFwPENvbW1hbmQsIFNldDxzdHJpbmc+PjtcbiAgLyoqXG4gICAqIEEgbWFwIG9mIGNvbW1hbmRzIHRvIHRoZSBvcHRpb25zIHByb3ZpZGVkIGZvciB0aGF0IGNvbW1hbmRcbiAgICovXG4gIHByb3ZpZGVkT3B0aW9uczogTWFwPENvbW1hbmQsIE9wdGlvblZhbHVlcz47XG4gIC8qKlxuICAgKiBBIG1hcCBvZiBjb21tYW5kcyB0byBhIG1hcCBvZiBvcHRpb24ga2V5cyB0byB0aGUgc291cmNlIG9mIHRoZSBvcHRpb24gdmFsdWVcbiAgICovXG4gIHByb3ZpZGVkT3B0aW9uc1NvdXJjZXM6IE1hcDxcbiAgICBDb21tYW5kLFxuICAgIE1hcDxzdHJpbmcsIE9wdGlvblZhbHVlU291cmNlIHwgdW5kZWZpbmVkPlxuICA+O1xufTtcblxuY29uc3QgY29weUNvbW1hbmRTZXR0aW5ncyA9IChzb3VyY2U6IENvbW1hbmQsIHRhcmdldDogQ29tbWFuZCkgPT4ge1xuICBjb25zdCBzb3VyY2VQcml2YXRlU3RhdGUgPSBzb3VyY2UgYXMgQ29tbWFuZFByaXZhdGVTdGF0ZTtcbiAgY29uc3QgdGFyZ2V0UHJpdmF0ZVN0YXRlID0gdGFyZ2V0IGFzIENvbW1hbmRQcml2YXRlU3RhdGU7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgY29tbWFuZFNldHRpbmdLZXlzKSB7XG4gICAgdGFyZ2V0UHJpdmF0ZVN0YXRlW2tleV0gPSBzb3VyY2VQcml2YXRlU3RhdGVba2V5XTtcbiAgfVxuXG4gIHRhcmdldC5uYW1lKHNvdXJjZS5uYW1lKCkpO1xuICB0YXJnZXQuYWxpYXNlcyhzb3VyY2UuYWxpYXNlcygpKTtcbiAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBzb3VyY2UucmVnaXN0ZXJlZEFyZ3VtZW50cykge1xuICAgIHRhcmdldC5hZGRBcmd1bWVudChhcmd1bWVudCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gc291cmNlLnZlcnNpb24oKTtcbiAgaWYgKHZlcnNpb24pIHtcbiAgICB0YXJnZXQudmVyc2lvbihcbiAgICAgIHZlcnNpb24sXG4gICAgICBzb3VyY2Uub3B0aW9ucy5maW5kKFxuICAgICAgICAob3B0aW9uKSA9PlxuICAgICAgICAgIG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkgPT09IHNvdXJjZVByaXZhdGVTdGF0ZS5fdmVyc2lvbk9wdGlvbk5hbWUsXG4gICAgICApPy5mbGFncyxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBkaXNhYmxlQ29tbWFuZE91dHB1dCA9IChjb21tYW5kOiBDb21tYW5kKSA9PiB7XG4gIGNvbW1hbmQuY29uZmlndXJlT3V0cHV0KHtcbiAgICB3cml0ZU91dDogbm9vcCxcbiAgICB3cml0ZUVycjogbm9vcCxcbiAgICBvdXRwdXRFcnJvcjogbm9vcCxcbiAgfSk7XG59O1xuXG5jb25zdCBjbG9uZU9wdGlvbiA9IChvcHRpb246IE9wdGlvbikgPT4ge1xuICBjb25zdCBuZXdPcHRpb24gPSBuZXcgT3B0aW9uKG9wdGlvbi5mbGFncywgb3B0aW9uLmRlc2NyaXB0aW9uKTtcbiAgbmV3T3B0aW9uLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpO1xuICBuZXdPcHRpb24uZGVmYXVsdChvcHRpb24uZGVmYXVsdFZhbHVlLCBvcHRpb24uZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24pO1xuXG4gIG5ld09wdGlvbi5wcmVzZXQoKG9wdGlvbiBhcyBPcHRpb24gJiB7IHByZXNldEFyZzogdW5rbm93biB9KS5wcmVzZXRBcmcpO1xuICBuZXdPcHRpb24uZW52KChvcHRpb24gYXMgT3B0aW9uICYgeyBlbnZWYXI6IHN0cmluZyB9KS5lbnZWYXIpO1xuICBpZiAob3B0aW9uLnBhcnNlQXJnKSB7XG4gICAgbmV3T3B0aW9uLmFyZ1BhcnNlcihvcHRpb24ucGFyc2VBcmcpO1xuICB9XG5cbiAgaWYgKG9wdGlvbi5hcmdDaG9pY2VzKSB7XG4gICAgbmV3T3B0aW9uLmNob2ljZXMob3B0aW9uLmFyZ0Nob2ljZXMpO1xuICB9XG5cbiAgbmV3T3B0aW9uLmNvbmZsaWN0cyhcbiAgICAob3B0aW9uIGFzIE9wdGlvbiAmIHsgY29uZmxpY3RzV2l0aDogc3RyaW5nW10gfSkuY29uZmxpY3RzV2l0aCxcbiAgKTtcblxuICAobmV3T3B0aW9uIGFzIE9wdGlvbiAmIHsgaW1wbGllZDogdW5rbm93biB9KS5pbXBsaWVkID0gKFxuICAgIG9wdGlvbiBhcyBPcHRpb24gJiB7IGltcGxpZWQ6IHVua25vd24gfVxuICApLmltcGxpZWQ7XG5cbiAgcmV0dXJuIG5ld09wdGlvbjtcbn07XG5cbi8qKlxuICogUGFydGlhbGx5IHBhcnNlIGFyZ3YgZm9yIGEgY29tbWFuZCB3aXRob3V0IGV4ZWN1dGluZyB0aGUgYWN0aW9uLiBAc2VlIHtAbGluayBDb21tYW5kLnBhcnNlfVxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBtYXRjaGVkIGNvbW1hbmQsIHRoZSBwcm92aWRlZCBvcHRpb25zLCBhbmQgdGhlIG1pc3Npbmcgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnRpYWxQYXJzZSA9IChcbiAgY29tbWFuZDogQ29tbWFuZCxcbiAgYXJndjogcmVhZG9ubHkgc3RyaW5nW10sXG4gIG9wdGlvbnM/OiBQYXJzZU9wdGlvbnMsXG4pOiBQYXJ0aWFsUGFyc2VSZXN1bHQgPT4ge1xuICBjb25zdCBwcm92aWRlZE9wdGlvbnMgPSBuZXcgTWFwPENvbW1hbmQsIE9wdGlvblZhbHVlcz4oKTtcbiAgY29uc3QgcHJvdmlkZWRPcHRpb25zU291cmNlcyA9IG5ldyBNYXA8XG4gICAgQ29tbWFuZCxcbiAgICBNYXA8c3RyaW5nLCBPcHRpb25WYWx1ZVNvdXJjZSB8IHVuZGVmaW5lZD5cbiAgPigpO1xuICBjb25zdCBjb21tYW5kc01hcCA9IG5ldyBNYXA8Q29tbWFuZCwgQ29tbWFuZD4oKTtcbiAgbGV0IG1hdGNoZWRDb21tYW5kOiBDb21tYW5kIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNldFByb3ZpZGVkT3B0aW9uU291cmNlID0gKFxuICAgIGNvbW1hbmQ6IENvbW1hbmQsXG4gICAgb3B0aW9uS2V5OiBzdHJpbmcsXG4gICAgc291cmNlOiBPcHRpb25WYWx1ZVNvdXJjZSB8IHVuZGVmaW5lZCxcbiAgKSA9PiB7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VzTWFwID1cbiAgICAgIHByb3ZpZGVkT3B0aW9uc1NvdXJjZXMuZ2V0KGNvbW1hbmQpID8/XG4gICAgICBuZXcgTWFwPHN0cmluZywgT3B0aW9uVmFsdWVTb3VyY2U+KCk7XG4gICAgc291cmNlc01hcC5zZXQob3B0aW9uS2V5LCBzb3VyY2UpO1xuICAgIHByb3ZpZGVkT3B0aW9uc1NvdXJjZXMuc2V0KGNvbW1hbmQsIHNvdXJjZXNNYXApO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZVBhcnNlckNvbW1hbmQgPSAocGFyc2VyQ29tbWFuZDogQ29tbWFuZCwgY29tbWFuZDogQ29tbWFuZCkgPT4ge1xuICAgIGNvbW1hbmRzTWFwLnNldChwYXJzZXJDb21tYW5kLCBjb21tYW5kKTtcblxuICAgIGNvcHlDb21tYW5kU2V0dGluZ3MoY29tbWFuZCwgcGFyc2VyQ29tbWFuZCk7XG4gICAgZGlzYWJsZUNvbW1hbmRPdXRwdXQocGFyc2VyQ29tbWFuZCk7XG4gICAgcGFyc2VyQ29tbWFuZC5leGl0T3ZlcnJpZGUoKTtcblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGNvbW1hbmQub3B0aW9ucykge1xuICAgICAgLy8gU2tpcCBhZGRpbmcgdGhlIG9wdGlvbiBpZiBpdCdzIGFscmVhZHkgcmVnaXN0ZXJlZFxuICAgICAgaWYgKFxuICAgICAgICBwYXJzZXJDb21tYW5kLm9wdGlvbnMuc29tZShcbiAgICAgICAgICAocGFyc2VyQ29tbWFuZE9wdGlvbikgPT4gcGFyc2VyQ29tbWFuZE9wdGlvbi5mbGFncyA9PT0gb3B0aW9uLmZsYWdzLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlckNvbW1hbmQuYWRkT3B0aW9uKGNsb25lT3B0aW9uKG9wdGlvbikpO1xuICAgIH1cblxuICAgIHBhcnNlckNvbW1hbmQuaG9vayhcInByZVN1YmNvbW1hbmRcIiwgKHRoaXNDb21tYW5kLCBhY3Rpb25Db21tYW5kKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNtZCBvZiBbdGhpc0NvbW1hbmQsIGFjdGlvbkNvbW1hbmRdKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQ29tbWFuZCA9IGdldE9yVGhyb3coY29tbWFuZHNNYXAsIGNtZCk7XG4gICAgICAgIHByb3ZpZGVkT3B0aW9ucy5zZXQob3JpZ2luYWxDb21tYW5kLCBjbWQub3B0cygpKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbktleSBvZiBPYmplY3Qua2V5cyhjbWQub3B0cygpKSkge1xuICAgICAgICAgIHNldFByb3ZpZGVkT3B0aW9uU291cmNlKFxuICAgICAgICAgICAgb3JpZ2luYWxDb21tYW5kLFxuICAgICAgICAgICAgb3B0aW9uS2V5LFxuICAgICAgICAgICAgY21kLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcGFyc2VyQ29tbWFuZC5hY3Rpb24oKCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWxDb21tYW5kID0gZ2V0T3JUaHJvdyhjb21tYW5kc01hcCwgcGFyc2VyQ29tbWFuZCk7XG4gICAgICBwcm92aWRlZE9wdGlvbnMuc2V0KG9yaWdpbmFsQ29tbWFuZCwgcGFyc2VyQ29tbWFuZC5vcHRzKCkpO1xuXG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbktleSBvZiBPYmplY3Qua2V5cyhwYXJzZXJDb21tYW5kLm9wdHMoKSkpIHtcbiAgICAgICAgc2V0UHJvdmlkZWRPcHRpb25Tb3VyY2UoXG4gICAgICAgICAgb3JpZ2luYWxDb21tYW5kLFxuICAgICAgICAgIG9wdGlvbktleSxcbiAgICAgICAgICBwYXJzZXJDb21tYW5kLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG1hdGNoZWRDb21tYW5kID0gY29tbWFuZDtcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgc3ViY29tbWFuZCBvZiBjb21tYW5kLmNvbW1hbmRzIGFzIENvbW1hbmRbXSkge1xuICAgICAgY29uc3QgcGFyc2VyU3ViY29tbWFuZCA9IHBhcnNlckNvbW1hbmQuY29tbWFuZChzdWJjb21tYW5kLm5hbWUoKSk7XG4gICAgICBjcmVhdGVQYXJzZXJDb21tYW5kKHBhcnNlclN1YmNvbW1hbmQsIHN1YmNvbW1hbmQpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZXJDb21tYW5kO1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlckNvbW1hbmQgPSBjcmVhdGVQYXJzZXJDb21tYW5kKG5ldyBDb21tYW5kKCksIGNvbW1hbmQpO1xuICBwYXJzZXJDb21tYW5kLnBhcnNlKGFyZ3YsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IG1pc3NpbmdPcHRpb25zID0gbWF0Y2hlZENvbW1hbmRcbiAgICA/IGZpbmRNaXNzaW5nT3B0aW9ucyhtYXRjaGVkQ29tbWFuZCwgcHJvdmlkZWRPcHRpb25zKVxuICAgIDogbmV3IE1hcDxDb21tYW5kLCBTZXQ8c3RyaW5nPj4oKTtcblxuICByZXR1cm4ge1xuICAgIG1hdGNoZWRDb21tYW5kLFxuICAgIG1pc3NpbmdPcHRpb25zLFxuICAgIHByb3ZpZGVkT3B0aW9ucyxcbiAgICBwcm92aWRlZE9wdGlvbnNTb3VyY2VzLFxuICB9O1xufTtcbiIsCiAgICAiZXhwb3J0IGNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFzQixJQUF0QjtBQU9PLElBTlA7OztBQ0RPLElBQU0sT0FBTyxNQUFNOzs7QURVMUIsSUFBTSxxQkFBcUI7QUFBQSxFQUN6QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFRQSxJQUFNLGFBQWEsQ0FBYSxLQUFzQixRQUFvQjtBQUFBLEVBQ3hFLE1BQU0sUUFBUSxJQUFJLElBQUksR0FBRztBQUFBLEVBQ3pCLElBQUksVUFBVSxXQUFXO0FBQUEsSUFDdkIsTUFBTSxJQUFJLE1BQU0sa0NBQWtDO0FBQUEsRUFDcEQ7QUFBQSxFQUVBLE9BQU87QUFBQTtBQUdGLElBQU0scUJBQXFCLENBQ2hDLFNBQ0EsNkJBQ0c7QUFBQSxFQUNILE1BQU0sMEJBQTBCLElBQUk7QUFBQSxFQUVwQyxJQUFJLGlCQUE2QztBQUFBLEVBRWpELE9BQU8sZ0JBQWdCO0FBQUEsSUFDckIsTUFBTSxpQkFBaUIsSUFBSTtBQUFBLElBQzNCLE1BQU0sa0JBQWtCLHlCQUF5QixJQUFJLGNBQWM7QUFBQSxJQUNuRSxXQUFXLFVBQVUsZUFBZSxTQUFTO0FBQUEsTUFDM0MsTUFBTSxhQUFhLE9BQU8sU0FDdEIsT0FBTyxNQUFNLFFBQVEsVUFBVSxFQUFFLElBQ2hDLE9BQU8sUUFBUSxPQUFPO0FBQUEsTUFDM0IsSUFBSSxDQUFDLFlBQVk7QUFBQSxRQUNmO0FBQUEsTUFDRjtBQUFBLE1B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
package/dist/index.d.cts CHANGED
@@ -1,7 +1,6 @@
1
- import { Command, OptionValues, OptionValueSource, ParseOptions } from 'commander';
2
-
3
- declare const findMissingOptions: (command: Command, providedOptionsByCommand: Map<Command, OptionValues>) => Map<Command, Set<string>>;
4
- type PartialParseResult = {
1
+ import { Command, type OptionValueSource, type OptionValues, type ParseOptions } from "commander";
2
+ export declare const findMissingOptions: (command: Command, providedOptionsByCommand: Map<Command, OptionValues>) => Map<Command, Set<string>>;
3
+ export type PartialParseResult = {
5
4
  /**
6
5
  * The command whose action will be executed
7
6
  */
@@ -24,6 +23,4 @@ type PartialParseResult = {
24
23
  *
25
24
  * @returns An object containing the matched command, the provided options, and the missing options.
26
25
  */
27
- declare const partialParse: (command: Command, argv: readonly string[], options?: ParseOptions) => PartialParseResult;
28
-
29
- export { type PartialParseResult, findMissingOptions, partialParse };
26
+ export declare const partialParse: (command: Command, argv: readonly string[], options?: ParseOptions) => PartialParseResult;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
- import { Command, OptionValues, OptionValueSource, ParseOptions } from 'commander';
2
-
3
- declare const findMissingOptions: (command: Command, providedOptionsByCommand: Map<Command, OptionValues>) => Map<Command, Set<string>>;
4
- type PartialParseResult = {
1
+ import { Command, type OptionValueSource, type OptionValues, type ParseOptions } from "commander";
2
+ export declare const findMissingOptions: (command: Command, providedOptionsByCommand: Map<Command, OptionValues>) => Map<Command, Set<string>>;
3
+ export type PartialParseResult = {
5
4
  /**
6
5
  * The command whose action will be executed
7
6
  */
@@ -24,6 +23,4 @@ type PartialParseResult = {
24
23
  *
25
24
  * @returns An object containing the matched command, the provided options, and the missing options.
26
25
  */
27
- declare const partialParse: (command: Command, argv: readonly string[], options?: ParseOptions) => PartialParseResult;
28
-
29
- export { type PartialParseResult, findMissingOptions, partialParse };
26
+ export declare const partialParse: (command: Command, argv: readonly string[], options?: ParseOptions) => PartialParseResult;
package/dist/index.js CHANGED
@@ -1,22 +1,42 @@
1
- // src/noop.ts
2
- var noop = () => {
3
- };
4
-
5
1
  // src/index.ts
6
2
  import camelCase from "camelcase";
7
3
  import {
8
4
  Command,
9
5
  Option
10
6
  } from "commander";
7
+
8
+ // src/noop.ts
9
+ var noop = () => {};
10
+
11
+ // src/index.ts
12
+ var commandSettingKeys = [
13
+ "_allowExcessArguments",
14
+ "_allowUnknownOption",
15
+ "_combineFlagAndOptionalValue",
16
+ "_defaultCommandName",
17
+ "_enablePositionalOptions",
18
+ "_passThroughOptions"
19
+ ];
20
+ var getOrThrow = (map, key) => {
21
+ const value = map.get(key);
22
+ if (value === undefined) {
23
+ throw new Error("Expected map value to be present");
24
+ }
25
+ return value;
26
+ };
11
27
  var findMissingOptions = (command, providedOptionsByCommand) => {
12
- const missingOptionsByCommand = /* @__PURE__ */ new Map();
28
+ const missingOptionsByCommand = new Map;
13
29
  let currentCommand = command;
14
30
  while (currentCommand) {
15
- const missingOptions = /* @__PURE__ */ new Set();
31
+ const missingOptions = new Set;
16
32
  const providedOptions = providedOptionsByCommand.get(currentCommand);
17
33
  for (const option of currentCommand.options) {
18
- const key = option.negate ? camelCase(option.long.replace(/^--no-/, "")) : camelCase(option.long ?? option.short);
19
- if (providedOptions?.[key] !== void 0) {
34
+ const optionName = option.negate ? option.long?.replace(/^--no-/, "") : option.long ?? option.short;
35
+ if (!optionName) {
36
+ continue;
37
+ }
38
+ const key = camelCase(optionName);
39
+ if (providedOptions?.[key] !== undefined) {
20
40
  continue;
21
41
  }
22
42
  missingOptions.add(key);
@@ -27,28 +47,19 @@ var findMissingOptions = (command, providedOptionsByCommand) => {
27
47
  return missingOptionsByCommand;
28
48
  };
29
49
  var copyCommandSettings = (source, target) => {
30
- for (const keysToCopy of [
31
- "_allowExcessArguments",
32
- "_allowUnknownOption",
33
- "_combineFlagAndOptionalValue",
34
- "_defaultCommandName",
35
- "_enablePositionalOptions",
36
- "_passThroughOptions"
37
- ]) {
38
- target[keysToCopy] = source[keysToCopy];
50
+ const sourcePrivateState = source;
51
+ const targetPrivateState = target;
52
+ for (const key of commandSettingKeys) {
53
+ targetPrivateState[key] = sourcePrivateState[key];
39
54
  }
40
55
  target.name(source.name());
41
56
  target.aliases(source.aliases());
42
57
  for (const argument of source.registeredArguments) {
43
58
  target.addArgument(argument);
44
59
  }
45
- if (source.version()) {
46
- target.version(
47
- source.version(),
48
- source.options.find(
49
- (option) => option.attributeName() === source._versionOptionName
50
- )?.flags
51
- );
60
+ const version = source.version();
61
+ if (version) {
62
+ target.version(version, source.options.find((option) => option.attributeName() === sourcePrivateState._versionOptionName)?.flags);
52
63
  }
53
64
  };
54
65
  var disableCommandOutput = (command) => {
@@ -70,22 +81,20 @@ var cloneOption = (option) => {
70
81
  if (option.argChoices) {
71
82
  newOption.choices(option.argChoices);
72
83
  }
73
- newOption.conflicts(
74
- option.conflictsWith
75
- );
84
+ newOption.conflicts(option.conflictsWith);
76
85
  newOption.implied = option.implied;
77
86
  return newOption;
78
87
  };
79
88
  var partialParse = (command, argv, options) => {
80
- const providedOptions = /* @__PURE__ */ new Map();
81
- const providedOptionsSources = /* @__PURE__ */ new Map();
82
- const commandsMap = /* @__PURE__ */ new Map();
89
+ const providedOptions = new Map;
90
+ const providedOptionsSources = new Map;
91
+ const commandsMap = new Map;
83
92
  let matchedCommand;
84
93
  const setProvidedOptionSource = (command2, optionKey, source) => {
85
94
  if (!source) {
86
95
  return;
87
96
  }
88
- const sourcesMap = providedOptionsSources.get(command2) ?? /* @__PURE__ */ new Map();
97
+ const sourcesMap = providedOptionsSources.get(command2) ?? new Map;
89
98
  sourcesMap.set(optionKey, source);
90
99
  providedOptionsSources.set(command2, sourcesMap);
91
100
  };
@@ -95,36 +104,25 @@ var partialParse = (command, argv, options) => {
95
104
  disableCommandOutput(parserCommand2);
96
105
  parserCommand2.exitOverride();
97
106
  for (const option of command2.options) {
98
- if (parserCommand2.options.some(
99
- (parserCommandOption) => parserCommandOption.flags === option.flags
100
- )) {
107
+ if (parserCommand2.options.some((parserCommandOption) => parserCommandOption.flags === option.flags)) {
101
108
  continue;
102
109
  }
103
110
  parserCommand2.addOption(cloneOption(option));
104
111
  }
105
112
  parserCommand2.hook("preSubcommand", (thisCommand, actionCommand) => {
106
113
  for (const cmd of [thisCommand, actionCommand]) {
107
- providedOptions.set(commandsMap.get(cmd), cmd.opts());
114
+ const originalCommand = getOrThrow(commandsMap, cmd);
115
+ providedOptions.set(originalCommand, cmd.opts());
108
116
  for (const optionKey of Object.keys(cmd.opts())) {
109
- setProvidedOptionSource(
110
- cmd,
111
- optionKey,
112
- cmd.getOptionValueSource(optionKey)
113
- );
117
+ setProvidedOptionSource(originalCommand, optionKey, cmd.getOptionValueSource(optionKey));
114
118
  }
115
119
  }
116
120
  });
117
121
  parserCommand2.action(() => {
118
- providedOptions.set(
119
- commandsMap.get(parserCommand2),
120
- parserCommand2.opts()
121
- );
122
+ const originalCommand = getOrThrow(commandsMap, parserCommand2);
123
+ providedOptions.set(originalCommand, parserCommand2.opts());
122
124
  for (const optionKey of Object.keys(parserCommand2.opts())) {
123
- setProvidedOptionSource(
124
- commandsMap.get(parserCommand2),
125
- optionKey,
126
- parserCommand2.getOptionValueSource(optionKey)
127
- );
125
+ setProvidedOptionSource(originalCommand, optionKey, parserCommand2.getOptionValueSource(optionKey));
128
126
  }
129
127
  matchedCommand = command2;
130
128
  });
@@ -134,9 +132,9 @@ var partialParse = (command, argv, options) => {
134
132
  }
135
133
  return parserCommand2;
136
134
  };
137
- const parserCommand = createParserCommand(new Command(), command);
135
+ const parserCommand = createParserCommand(new Command, command);
138
136
  parserCommand.parse(argv, options);
139
- const missingOptions = matchedCommand ? findMissingOptions(matchedCommand, providedOptions) : /* @__PURE__ */ new Map();
137
+ const missingOptions = matchedCommand ? findMissingOptions(matchedCommand, providedOptions) : new Map;
140
138
  return {
141
139
  matchedCommand,
142
140
  missingOptions,
@@ -145,7 +143,9 @@ var partialParse = (command, argv, options) => {
145
143
  };
146
144
  };
147
145
  export {
148
- findMissingOptions,
149
- partialParse
146
+ partialParse,
147
+ findMissingOptions
150
148
  };
151
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vb3AudHMiLCAiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuIiwgImltcG9ydCB7IG5vb3AgfSBmcm9tIFwiLi9ub29wLnRzXCI7XG5pbXBvcnQgY2FtZWxDYXNlIGZyb20gXCJjYW1lbGNhc2VcIjtcbmltcG9ydCB7XG4gIHR5cGUgT3B0aW9uVmFsdWVzLFxuICBDb21tYW5kLFxuICB0eXBlIFBhcnNlT3B0aW9ucyxcbiAgT3B0aW9uLFxuICB0eXBlIE9wdGlvblZhbHVlU291cmNlLFxufSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmV4cG9ydCBjb25zdCBmaW5kTWlzc2luZ09wdGlvbnMgPSAoXG4gIGNvbW1hbmQ6IENvbW1hbmQsXG4gIHByb3ZpZGVkT3B0aW9uc0J5Q29tbWFuZDogTWFwPENvbW1hbmQsIE9wdGlvblZhbHVlcz4sXG4pID0+IHtcbiAgY29uc3QgbWlzc2luZ09wdGlvbnNCeUNvbW1hbmQgPSBuZXcgTWFwPENvbW1hbmQsIFNldDxzdHJpbmc+PigpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gIGxldCBjdXJyZW50Q29tbWFuZDogQ29tbWFuZCB8IHVuZGVmaW5lZCB8IG51bGwgPSBjb21tYW5kO1xuXG4gIHdoaWxlIChjdXJyZW50Q29tbWFuZCkge1xuICAgIGNvbnN0IG1pc3NpbmdPcHRpb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgcHJvdmlkZWRPcHRpb25zID0gcHJvdmlkZWRPcHRpb25zQnlDb21tYW5kLmdldChjdXJyZW50Q29tbWFuZCk7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgY3VycmVudENvbW1hbmQub3B0aW9ucykge1xuICAgICAgY29uc3Qga2V5ID0gb3B0aW9uLm5lZ2F0ZVxuICAgICAgICA/IGNhbWVsQ2FzZShvcHRpb24ubG9uZyEucmVwbGFjZSgvXi0tbm8tLywgXCJcIikpXG4gICAgICAgIDogY2FtZWxDYXNlKChvcHRpb24ubG9uZyA/PyBvcHRpb24uc2hvcnQpISk7XG5cbiAgICAgIGlmIChwcm92aWRlZE9wdGlvbnM/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG1pc3NpbmdPcHRpb25zLmFkZChrZXkpO1xuICAgIH1cblxuICAgIG1pc3NpbmdPcHRpb25zQnlDb21tYW5kLnNldChjdXJyZW50Q29tbWFuZCwgbWlzc2luZ09wdGlvbnMpO1xuICAgIGN1cnJlbnRDb21tYW5kID0gY3VycmVudENvbW1hbmQucGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIG1pc3NpbmdPcHRpb25zQnlDb21tYW5kO1xufTtcblxuZXhwb3J0IHR5cGUgUGFydGlhbFBhcnNlUmVzdWx0ID0ge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgd2hvc2UgYWN0aW9uIHdpbGwgYmUgZXhlY3V0ZWRcbiAgICovXG4gIG1hdGNoZWRDb21tYW5kOiBDb21tYW5kIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQSBtYXAgb2YgY29tbWFuZHMgdG8gYSBzZXQgb2YgbWlzc2luZyBvcHRpb25zIGZvciB0aGF0IGNvbW1hbmRcbiAgICovXG4gIG1pc3NpbmdPcHRpb25zOiBNYXA8Q29tbWFuZCwgU2V0PHN0cmluZz4+O1xuICAvKipcbiAgICogQSBtYXAgb2YgY29tbWFuZHMgdG8gdGhlIG9wdGlvbnMgcHJvdmlkZWQgZm9yIHRoYXQgY29tbWFuZFxuICAgKi9cbiAgcHJvdmlkZWRPcHRpb25zOiBNYXA8Q29tbWFuZCwgT3B0aW9uVmFsdWVzPjtcbiAgLyoqXG4gICAqIEEgbWFwIG9mIGNvbW1hbmRzIHRvIGEgbWFwIG9mIG9wdGlvbiBrZXlzIHRvIHRoZSBzb3VyY2Ugb2YgdGhlIG9wdGlvbiB2YWx1ZVxuICAgKi9cbiAgcHJvdmlkZWRPcHRpb25zU291cmNlczogTWFwPFxuICAgIENvbW1hbmQsXG4gICAgTWFwPHN0cmluZywgT3B0aW9uVmFsdWVTb3VyY2UgfCB1bmRlZmluZWQ+XG4gID47XG59O1xuXG5jb25zdCBjb3B5Q29tbWFuZFNldHRpbmdzID0gKHNvdXJjZTogQ29tbWFuZCwgdGFyZ2V0OiBDb21tYW5kKSA9PiB7XG4gIGZvciAoY29uc3Qga2V5c1RvQ29weSBvZiBbXG4gICAgXCJfYWxsb3dFeGNlc3NBcmd1bWVudHNcIixcbiAgICBcIl9hbGxvd1Vua25vd25PcHRpb25cIixcbiAgICBcIl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWVcIixcbiAgICBcIl9kZWZhdWx0Q29tbWFuZE5hbWVcIixcbiAgICBcIl9lbmFibGVQb3NpdGlvbmFsT3B0aW9uc1wiLFxuICAgIFwiX3Bhc3NUaHJvdWdoT3B0aW9uc1wiLFxuICBdIGFzIGNvbnN0KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICh0YXJnZXQgYXMgYW55KVtrZXlzVG9Db3B5XSA9IChzb3VyY2UgYXMgYW55KVtrZXlzVG9Db3B5XTtcbiAgfVxuXG4gIHRhcmdldC5uYW1lKHNvdXJjZS5uYW1lKCkpO1xuICB0YXJnZXQuYWxpYXNlcyhzb3VyY2UuYWxpYXNlcygpKTtcbiAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBzb3VyY2UucmVnaXN0ZXJlZEFyZ3VtZW50cykge1xuICAgIHRhcmdldC5hZGRBcmd1bWVudChhcmd1bWVudCk7XG4gIH1cblxuICBpZiAoc291cmNlLnZlcnNpb24oKSkge1xuICAgIHRhcmdldC52ZXJzaW9uKFxuICAgICAgc291cmNlLnZlcnNpb24oKSEsXG4gICAgICBzb3VyY2Uub3B0aW9ucy5maW5kKFxuICAgICAgICAob3B0aW9uKSA9PlxuICAgICAgICAgIG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkgPT09XG4gICAgICAgICAgKHNvdXJjZSBhcyBDb21tYW5kICYgeyBfdmVyc2lvbk9wdGlvbk5hbWU6IHN0cmluZyB9KVxuICAgICAgICAgICAgLl92ZXJzaW9uT3B0aW9uTmFtZSxcbiAgICAgICk/LmZsYWdzLFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGRpc2FibGVDb21tYW5kT3V0cHV0ID0gKGNvbW1hbmQ6IENvbW1hbmQpID0+IHtcbiAgY29tbWFuZC5jb25maWd1cmVPdXRwdXQoe1xuICAgIHdyaXRlT3V0OiBub29wLFxuICAgIHdyaXRlRXJyOiBub29wLFxuICAgIG91dHB1dEVycm9yOiBub29wLFxuICB9KTtcbn07XG5cbmNvbnN0IGNsb25lT3B0aW9uID0gKG9wdGlvbjogT3B0aW9uKSA9PiB7XG4gIGNvbnN0IG5ld09wdGlvbiA9IG5ldyBPcHRpb24ob3B0aW9uLmZsYWdzLCBvcHRpb24uZGVzY3JpcHRpb24pO1xuICBuZXdPcHRpb24ubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSk7XG4gIG5ld09wdGlvbi5kZWZhdWx0KG9wdGlvbi5kZWZhdWx0VmFsdWUsIG9wdGlvbi5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbik7XG5cbiAgbmV3T3B0aW9uLnByZXNldCgob3B0aW9uIGFzIE9wdGlvbiAmIHsgcHJlc2V0QXJnOiB1bmtub3duIH0pLnByZXNldEFyZyk7XG4gIG5ld09wdGlvbi5lbnYoKG9wdGlvbiBhcyBPcHRpb24gJiB7IGVudlZhcjogc3RyaW5nIH0pLmVudlZhcik7XG4gIGlmIChvcHRpb24ucGFyc2VBcmcpIHtcbiAgICBuZXdPcHRpb24uYXJnUGFyc2VyKG9wdGlvbi5wYXJzZUFyZyk7XG4gIH1cblxuICBpZiAob3B0aW9uLmFyZ0Nob2ljZXMpIHtcbiAgICBuZXdPcHRpb24uY2hvaWNlcyhvcHRpb24uYXJnQ2hvaWNlcyk7XG4gIH1cblxuICBuZXdPcHRpb24uY29uZmxpY3RzKFxuICAgIChvcHRpb24gYXMgT3B0aW9uICYgeyBjb25mbGljdHNXaXRoOiBzdHJpbmdbXSB9KS5jb25mbGljdHNXaXRoLFxuICApO1xuXG4gIChuZXdPcHRpb24gYXMgT3B0aW9uICYgeyBpbXBsaWVkOiB1bmtub3duIH0pLmltcGxpZWQgPSAoXG4gICAgb3B0aW9uIGFzIE9wdGlvbiAmIHsgaW1wbGllZDogdW5rbm93biB9XG4gICkuaW1wbGllZDtcblxuICByZXR1cm4gbmV3T3B0aW9uO1xufTtcblxuLyoqXG4gKiBQYXJ0aWFsbHkgcGFyc2UgYXJndiBmb3IgYSBjb21tYW5kIHdpdGhvdXQgZXhlY3V0aW5nIHRoZSBhY3Rpb24uIEBzZWUge0BsaW5rIENvbW1hbmQucGFyc2V9XG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1hdGNoZWQgY29tbWFuZCwgdGhlIHByb3ZpZGVkIG9wdGlvbnMsIGFuZCB0aGUgbWlzc2luZyBvcHRpb25zLlxuICovXG5leHBvcnQgY29uc3QgcGFydGlhbFBhcnNlID0gKFxuICBjb21tYW5kOiBDb21tYW5kLFxuICBhcmd2OiByZWFkb25seSBzdHJpbmdbXSxcbiAgb3B0aW9ucz86IFBhcnNlT3B0aW9ucyxcbik6IFBhcnRpYWxQYXJzZVJlc3VsdCA9PiB7XG4gIGNvbnN0IHByb3ZpZGVkT3B0aW9ucyA9IG5ldyBNYXA8Q29tbWFuZCwgT3B0aW9uVmFsdWVzPigpO1xuICBjb25zdCBwcm92aWRlZE9wdGlvbnNTb3VyY2VzID0gbmV3IE1hcDxcbiAgICBDb21tYW5kLFxuICAgIE1hcDxzdHJpbmcsIE9wdGlvblZhbHVlU291cmNlIHwgdW5kZWZpbmVkPlxuICA+KCk7XG4gIGNvbnN0IGNvbW1hbmRzTWFwID0gbmV3IE1hcDxDb21tYW5kLCBDb21tYW5kPigpO1xuICBsZXQgbWF0Y2hlZENvbW1hbmQ6IENvbW1hbmQgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgc2V0UHJvdmlkZWRPcHRpb25Tb3VyY2UgPSAoXG4gICAgY29tbWFuZDogQ29tbWFuZCxcbiAgICBvcHRpb25LZXk6IHN0cmluZyxcbiAgICBzb3VyY2U6IE9wdGlvblZhbHVlU291cmNlIHwgdW5kZWZpbmVkLFxuICApID0+IHtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZXNNYXAgPVxuICAgICAgcHJvdmlkZWRPcHRpb25zU291cmNlcy5nZXQoY29tbWFuZCkgPz9cbiAgICAgIG5ldyBNYXA8c3RyaW5nLCBPcHRpb25WYWx1ZVNvdXJjZT4oKTtcbiAgICBzb3VyY2VzTWFwLnNldChvcHRpb25LZXksIHNvdXJjZSk7XG4gICAgcHJvdmlkZWRPcHRpb25zU291cmNlcy5zZXQoY29tbWFuZCwgc291cmNlc01hcCk7XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlUGFyc2VyQ29tbWFuZCA9IChwYXJzZXJDb21tYW5kOiBDb21tYW5kLCBjb21tYW5kOiBDb21tYW5kKSA9PiB7XG4gICAgY29tbWFuZHNNYXAuc2V0KHBhcnNlckNvbW1hbmQsIGNvbW1hbmQpO1xuXG4gICAgY29weUNvbW1hbmRTZXR0aW5ncyhjb21tYW5kLCBwYXJzZXJDb21tYW5kKTtcbiAgICBkaXNhYmxlQ29tbWFuZE91dHB1dChwYXJzZXJDb21tYW5kKTtcbiAgICBwYXJzZXJDb21tYW5kLmV4aXRPdmVycmlkZSgpO1xuXG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgY29tbWFuZC5vcHRpb25zKSB7XG4gICAgICAvLyBTa2lwIGFkZGluZyB0aGUgb3B0aW9uIGlmIGl0J3MgYWxyZWFkeSByZWdpc3RlcmVkXG4gICAgICBpZiAoXG4gICAgICAgIHBhcnNlckNvbW1hbmQub3B0aW9ucy5zb21lKFxuICAgICAgICAgIChwYXJzZXJDb21tYW5kT3B0aW9uKSA9PiBwYXJzZXJDb21tYW5kT3B0aW9uLmZsYWdzID09PSBvcHRpb24uZmxhZ3MsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcGFyc2VyQ29tbWFuZC5hZGRPcHRpb24oY2xvbmVPcHRpb24ob3B0aW9uKSk7XG4gICAgfVxuXG4gICAgcGFyc2VyQ29tbWFuZC5ob29rKFwicHJlU3ViY29tbWFuZFwiLCAodGhpc0NvbW1hbmQsIGFjdGlvbkNvbW1hbmQpID0+IHtcbiAgICAgIGZvciAoY29uc3QgY21kIG9mIFt0aGlzQ29tbWFuZCwgYWN0aW9uQ29tbWFuZF0pIHtcbiAgICAgICAgcHJvdmlkZWRPcHRpb25zLnNldChjb21tYW5kc01hcC5nZXQoY21kKSEsIGNtZC5vcHRzKCkpO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uS2V5IG9mIE9iamVjdC5rZXlzKGNtZC5vcHRzKCkpKSB7XG4gICAgICAgICAgc2V0UHJvdmlkZWRPcHRpb25Tb3VyY2UoXG4gICAgICAgICAgICBjbWQsXG4gICAgICAgICAgICBvcHRpb25LZXksXG4gICAgICAgICAgICBjbWQuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBwYXJzZXJDb21tYW5kLmFjdGlvbigoKSA9PiB7XG4gICAgICBwcm92aWRlZE9wdGlvbnMuc2V0KFxuICAgICAgICBjb21tYW5kc01hcC5nZXQocGFyc2VyQ29tbWFuZCkhLFxuICAgICAgICBwYXJzZXJDb21tYW5kLm9wdHMoKSxcbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uS2V5IG9mIE9iamVjdC5rZXlzKHBhcnNlckNvbW1hbmQub3B0cygpKSkge1xuICAgICAgICBzZXRQcm92aWRlZE9wdGlvblNvdXJjZShcbiAgICAgICAgICBjb21tYW5kc01hcC5nZXQocGFyc2VyQ29tbWFuZCkhLFxuICAgICAgICAgIG9wdGlvbktleSxcbiAgICAgICAgICBwYXJzZXJDb21tYW5kLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG1hdGNoZWRDb21tYW5kID0gY29tbWFuZDtcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgc3ViY29tbWFuZCBvZiBjb21tYW5kLmNvbW1hbmRzIGFzIENvbW1hbmRbXSkge1xuICAgICAgY29uc3QgcGFyc2VyU3ViY29tbWFuZCA9IHBhcnNlckNvbW1hbmQuY29tbWFuZChzdWJjb21tYW5kLm5hbWUoKSk7XG4gICAgICBjcmVhdGVQYXJzZXJDb21tYW5kKHBhcnNlclN1YmNvbW1hbmQsIHN1YmNvbW1hbmQpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZXJDb21tYW5kO1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlckNvbW1hbmQgPSBjcmVhdGVQYXJzZXJDb21tYW5kKG5ldyBDb21tYW5kKCksIGNvbW1hbmQpO1xuICBwYXJzZXJDb21tYW5kLnBhcnNlKGFyZ3YsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IG1pc3NpbmdPcHRpb25zID0gbWF0Y2hlZENvbW1hbmRcbiAgICA/IGZpbmRNaXNzaW5nT3B0aW9ucyhtYXRjaGVkQ29tbWFuZCwgcHJvdmlkZWRPcHRpb25zKVxuICAgIDogbmV3IE1hcDxDb21tYW5kLCBTZXQ8c3RyaW5nPj4oKTtcblxuICByZXR1cm4ge1xuICAgIG1hdGNoZWRDb21tYW5kLFxuICAgIG1pc3NpbmdPcHRpb25zLFxuICAgIHByb3ZpZGVkT3B0aW9ucyxcbiAgICBwcm92aWRlZE9wdGlvbnNTb3VyY2VzLFxuICB9O1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFDTyxJQUFNLE9BQU8sTUFBTTtBQUFDOzs7QUNBM0IsT0FBTyxlQUFlO0FBQ3RCO0FBQUEsRUFFRTtBQUFBLEVBRUE7QUFBQSxPQUVLO0FBRUEsSUFBTSxxQkFBcUIsQ0FDaEMsU0FDQSw2QkFDRztBQUNILFFBQU0sMEJBQTBCLG9CQUFJLElBQTBCO0FBRzlELE1BQUksaUJBQTZDO0FBRWpELFNBQU8sZ0JBQWdCO0FBQ3JCLFVBQU0saUJBQWlCLG9CQUFJLElBQVk7QUFDdkMsVUFBTSxrQkFBa0IseUJBQXlCLElBQUksY0FBYztBQUNuRSxlQUFXLFVBQVUsZUFBZSxTQUFTO0FBQzNDLFlBQU0sTUFBTSxP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
149
+
150
+ //# debugId=0F2D30EA8353D1EC64756E2164756E21
151
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9ub29wLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImltcG9ydCBjYW1lbENhc2UgZnJvbSBcImNhbWVsY2FzZVwiO1xuaW1wb3J0IHtcbiAgQ29tbWFuZCxcbiAgT3B0aW9uLFxuICB0eXBlIE9wdGlvblZhbHVlU291cmNlLFxuICB0eXBlIE9wdGlvblZhbHVlcyxcbiAgdHlwZSBQYXJzZU9wdGlvbnMsXG59IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IG5vb3AgfSBmcm9tIFwiLi9ub29wLmpzXCI7XG5cbmNvbnN0IGNvbW1hbmRTZXR0aW5nS2V5cyA9IFtcbiAgXCJfYWxsb3dFeGNlc3NBcmd1bWVudHNcIixcbiAgXCJfYWxsb3dVbmtub3duT3B0aW9uXCIsXG4gIFwiX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZVwiLFxuICBcIl9kZWZhdWx0Q29tbWFuZE5hbWVcIixcbiAgXCJfZW5hYmxlUG9zaXRpb25hbE9wdGlvbnNcIixcbiAgXCJfcGFzc1Rocm91Z2hPcHRpb25zXCIsXG5dIGFzIGNvbnN0O1xuXG50eXBlIENvbW1hbmRTZXR0aW5nS2V5ID0gKHR5cGVvZiBjb21tYW5kU2V0dGluZ0tleXMpW251bWJlcl07XG50eXBlIENvbW1hbmRQcml2YXRlU3RhdGUgPSBDb21tYW5kICZcbiAgUmVjb3JkPENvbW1hbmRTZXR0aW5nS2V5LCB1bmtub3duPiAmIHtcbiAgICBfdmVyc2lvbk9wdGlvbk5hbWU/OiBzdHJpbmc7XG4gIH07XG5cbmNvbnN0IGdldE9yVGhyb3cgPSA8S2V5LCBWYWx1ZT4obWFwOiBNYXA8S2V5LCBWYWx1ZT4sIGtleTogS2V5KTogVmFsdWUgPT4ge1xuICBjb25zdCB2YWx1ZSA9IG1hcC5nZXQoa2V5KTtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBtYXAgdmFsdWUgdG8gYmUgcHJlc2VudFwiKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTWlzc2luZ09wdGlvbnMgPSAoXG4gIGNvbW1hbmQ6IENvbW1hbmQsXG4gIHByb3ZpZGVkT3B0aW9uc0J5Q29tbWFuZDogTWFwPENvbW1hbmQsIE9wdGlvblZhbHVlcz4sXG4pID0+IHtcbiAgY29uc3QgbWlzc2luZ09wdGlvbnNCeUNvbW1hbmQgPSBuZXcgTWFwPENvbW1hbmQsIFNldDxzdHJpbmc+PigpO1xuXG4gIGxldCBjdXJyZW50Q29tbWFuZDogQ29tbWFuZCB8IHVuZGVmaW5lZCB8IG51bGwgPSBjb21tYW5kO1xuXG4gIHdoaWxlIChjdXJyZW50Q29tbWFuZCkge1xuICAgIGNvbnN0IG1pc3NpbmdPcHRpb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgcHJvdmlkZWRPcHRpb25zID0gcHJvdmlkZWRPcHRpb25zQnlDb21tYW5kLmdldChjdXJyZW50Q29tbWFuZCk7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgY3VycmVudENvbW1hbmQub3B0aW9ucykge1xuICAgICAgY29uc3Qgb3B0aW9uTmFtZSA9IG9wdGlvbi5uZWdhdGVcbiAgICAgICAgPyBvcHRpb24ubG9uZz8ucmVwbGFjZSgvXi0tbm8tLywgXCJcIilcbiAgICAgICAgOiAob3B0aW9uLmxvbmcgPz8gb3B0aW9uLnNob3J0KTtcbiAgICAgIGlmICghb3B0aW9uTmFtZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gY2FtZWxDYXNlKG9wdGlvbk5hbWUpO1xuXG4gICAgICBpZiAocHJvdmlkZWRPcHRpb25zPy5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBtaXNzaW5nT3B0aW9ucy5hZGQoa2V5KTtcbiAgICB9XG5cbiAgICBtaXNzaW5nT3B0aW9uc0J5Q29tbWFuZC5zZXQoY3VycmVudENvbW1hbmQsIG1pc3NpbmdPcHRpb25zKTtcbiAgICBjdXJyZW50Q29tbWFuZCA9IGN1cnJlbnRDb21tYW5kLnBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBtaXNzaW5nT3B0aW9uc0J5Q29tbWFuZDtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxQYXJzZVJlc3VsdCA9IHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHdob3NlIGFjdGlvbiB3aWxsIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBtYXRjaGVkQ29tbWFuZDogQ29tbWFuZCB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEEgbWFwIG9mIGNvbW1hbmRzIHRvIGEgc2V0IG9mIG1pc3Npbmcgb3B0aW9ucyBmb3IgdGhhdCBjb21tYW5kXG4gICAqL1xuICBtaXNzaW5nT3B0aW9uczogTWFwPENvbW1hbmQsIFNldDxzdHJpbmc+PjtcbiAgLyoqXG4gICAqIEEgbWFwIG9mIGNvbW1hbmRzIHRvIHRoZSBvcHRpb25zIHByb3ZpZGVkIGZvciB0aGF0IGNvbW1hbmRcbiAgICovXG4gIHByb3ZpZGVkT3B0aW9uczogTWFwPENvbW1hbmQsIE9wdGlvblZhbHVlcz47XG4gIC8qKlxuICAgKiBBIG1hcCBvZiBjb21tYW5kcyB0byBhIG1hcCBvZiBvcHRpb24ga2V5cyB0byB0aGUgc291cmNlIG9mIHRoZSBvcHRpb24gdmFsdWVcbiAgICovXG4gIHByb3ZpZGVkT3B0aW9uc1NvdXJjZXM6IE1hcDxcbiAgICBDb21tYW5kLFxuICAgIE1hcDxzdHJpbmcsIE9wdGlvblZhbHVlU291cmNlIHwgdW5kZWZpbmVkPlxuICA+O1xufTtcblxuY29uc3QgY29weUNvbW1hbmRTZXR0aW5ncyA9IChzb3VyY2U6IENvbW1hbmQsIHRhcmdldDogQ29tbWFuZCkgPT4ge1xuICBjb25zdCBzb3VyY2VQcml2YXRlU3RhdGUgPSBzb3VyY2UgYXMgQ29tbWFuZFByaXZhdGVTdGF0ZTtcbiAgY29uc3QgdGFyZ2V0UHJpdmF0ZVN0YXRlID0gdGFyZ2V0IGFzIENvbW1hbmRQcml2YXRlU3RhdGU7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgY29tbWFuZFNldHRpbmdLZXlzKSB7XG4gICAgdGFyZ2V0UHJpdmF0ZVN0YXRlW2tleV0gPSBzb3VyY2VQcml2YXRlU3RhdGVba2V5XTtcbiAgfVxuXG4gIHRhcmdldC5uYW1lKHNvdXJjZS5uYW1lKCkpO1xuICB0YXJnZXQuYWxpYXNlcyhzb3VyY2UuYWxpYXNlcygpKTtcbiAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBzb3VyY2UucmVnaXN0ZXJlZEFyZ3VtZW50cykge1xuICAgIHRhcmdldC5hZGRBcmd1bWVudChhcmd1bWVudCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gc291cmNlLnZlcnNpb24oKTtcbiAgaWYgKHZlcnNpb24pIHtcbiAgICB0YXJnZXQudmVyc2lvbihcbiAgICAgIHZlcnNpb24sXG4gICAgICBzb3VyY2Uub3B0aW9ucy5maW5kKFxuICAgICAgICAob3B0aW9uKSA9PlxuICAgICAgICAgIG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkgPT09IHNvdXJjZVByaXZhdGVTdGF0ZS5fdmVyc2lvbk9wdGlvbk5hbWUsXG4gICAgICApPy5mbGFncyxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBkaXNhYmxlQ29tbWFuZE91dHB1dCA9IChjb21tYW5kOiBDb21tYW5kKSA9PiB7XG4gIGNvbW1hbmQuY29uZmlndXJlT3V0cHV0KHtcbiAgICB3cml0ZU91dDogbm9vcCxcbiAgICB3cml0ZUVycjogbm9vcCxcbiAgICBvdXRwdXRFcnJvcjogbm9vcCxcbiAgfSk7XG59O1xuXG5jb25zdCBjbG9uZU9wdGlvbiA9IChvcHRpb246IE9wdGlvbikgPT4ge1xuICBjb25zdCBuZXdPcHRpb24gPSBuZXcgT3B0aW9uKG9wdGlvbi5mbGFncywgb3B0aW9uLmRlc2NyaXB0aW9uKTtcbiAgbmV3T3B0aW9uLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpO1xuICBuZXdPcHRpb24uZGVmYXVsdChvcHRpb24uZGVmYXVsdFZhbHVlLCBvcHRpb24uZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24pO1xuXG4gIG5ld09wdGlvbi5wcmVzZXQoKG9wdGlvbiBhcyBPcHRpb24gJiB7IHByZXNldEFyZzogdW5rbm93biB9KS5wcmVzZXRBcmcpO1xuICBuZXdPcHRpb24uZW52KChvcHRpb24gYXMgT3B0aW9uICYgeyBlbnZWYXI6IHN0cmluZyB9KS5lbnZWYXIpO1xuICBpZiAob3B0aW9uLnBhcnNlQXJnKSB7XG4gICAgbmV3T3B0aW9uLmFyZ1BhcnNlcihvcHRpb24ucGFyc2VBcmcpO1xuICB9XG5cbiAgaWYgKG9wdGlvbi5hcmdDaG9pY2VzKSB7XG4gICAgbmV3T3B0aW9uLmNob2ljZXMob3B0aW9uLmFyZ0Nob2ljZXMpO1xuICB9XG5cbiAgbmV3T3B0aW9uLmNvbmZsaWN0cyhcbiAgICAob3B0aW9uIGFzIE9wdGlvbiAmIHsgY29uZmxpY3RzV2l0aDogc3RyaW5nW10gfSkuY29uZmxpY3RzV2l0aCxcbiAgKTtcblxuICAobmV3T3B0aW9uIGFzIE9wdGlvbiAmIHsgaW1wbGllZDogdW5rbm93biB9KS5pbXBsaWVkID0gKFxuICAgIG9wdGlvbiBhcyBPcHRpb24gJiB7IGltcGxpZWQ6IHVua25vd24gfVxuICApLmltcGxpZWQ7XG5cbiAgcmV0dXJuIG5ld09wdGlvbjtcbn07XG5cbi8qKlxuICogUGFydGlhbGx5IHBhcnNlIGFyZ3YgZm9yIGEgY29tbWFuZCB3aXRob3V0IGV4ZWN1dGluZyB0aGUgYWN0aW9uLiBAc2VlIHtAbGluayBDb21tYW5kLnBhcnNlfVxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBtYXRjaGVkIGNvbW1hbmQsIHRoZSBwcm92aWRlZCBvcHRpb25zLCBhbmQgdGhlIG1pc3Npbmcgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnRpYWxQYXJzZSA9IChcbiAgY29tbWFuZDogQ29tbWFuZCxcbiAgYXJndjogcmVhZG9ubHkgc3RyaW5nW10sXG4gIG9wdGlvbnM/OiBQYXJzZU9wdGlvbnMsXG4pOiBQYXJ0aWFsUGFyc2VSZXN1bHQgPT4ge1xuICBjb25zdCBwcm92aWRlZE9wdGlvbnMgPSBuZXcgTWFwPENvbW1hbmQsIE9wdGlvblZhbHVlcz4oKTtcbiAgY29uc3QgcHJvdmlkZWRPcHRpb25zU291cmNlcyA9IG5ldyBNYXA8XG4gICAgQ29tbWFuZCxcbiAgICBNYXA8c3RyaW5nLCBPcHRpb25WYWx1ZVNvdXJjZSB8IHVuZGVmaW5lZD5cbiAgPigpO1xuICBjb25zdCBjb21tYW5kc01hcCA9IG5ldyBNYXA8Q29tbWFuZCwgQ29tbWFuZD4oKTtcbiAgbGV0IG1hdGNoZWRDb21tYW5kOiBDb21tYW5kIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNldFByb3ZpZGVkT3B0aW9uU291cmNlID0gKFxuICAgIGNvbW1hbmQ6IENvbW1hbmQsXG4gICAgb3B0aW9uS2V5OiBzdHJpbmcsXG4gICAgc291cmNlOiBPcHRpb25WYWx1ZVNvdXJjZSB8IHVuZGVmaW5lZCxcbiAgKSA9PiB7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VzTWFwID1cbiAgICAgIHByb3ZpZGVkT3B0aW9uc1NvdXJjZXMuZ2V0KGNvbW1hbmQpID8/XG4gICAgICBuZXcgTWFwPHN0cmluZywgT3B0aW9uVmFsdWVTb3VyY2U+KCk7XG4gICAgc291cmNlc01hcC5zZXQob3B0aW9uS2V5LCBzb3VyY2UpO1xuICAgIHByb3ZpZGVkT3B0aW9uc1NvdXJjZXMuc2V0KGNvbW1hbmQsIHNvdXJjZXNNYXApO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZVBhcnNlckNvbW1hbmQgPSAocGFyc2VyQ29tbWFuZDogQ29tbWFuZCwgY29tbWFuZDogQ29tbWFuZCkgPT4ge1xuICAgIGNvbW1hbmRzTWFwLnNldChwYXJzZXJDb21tYW5kLCBjb21tYW5kKTtcblxuICAgIGNvcHlDb21tYW5kU2V0dGluZ3MoY29tbWFuZCwgcGFyc2VyQ29tbWFuZCk7XG4gICAgZGlzYWJsZUNvbW1hbmRPdXRwdXQocGFyc2VyQ29tbWFuZCk7XG4gICAgcGFyc2VyQ29tbWFuZC5leGl0T3ZlcnJpZGUoKTtcblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGNvbW1hbmQub3B0aW9ucykge1xuICAgICAgLy8gU2tpcCBhZGRpbmcgdGhlIG9wdGlvbiBpZiBpdCdzIGFscmVhZHkgcmVnaXN0ZXJlZFxuICAgICAgaWYgKFxuICAgICAgICBwYXJzZXJDb21tYW5kLm9wdGlvbnMuc29tZShcbiAgICAgICAgICAocGFyc2VyQ29tbWFuZE9wdGlvbikgPT4gcGFyc2VyQ29tbWFuZE9wdGlvbi5mbGFncyA9PT0gb3B0aW9uLmZsYWdzLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlckNvbW1hbmQuYWRkT3B0aW9uKGNsb25lT3B0aW9uKG9wdGlvbikpO1xuICAgIH1cblxuICAgIHBhcnNlckNvbW1hbmQuaG9vayhcInByZVN1YmNvbW1hbmRcIiwgKHRoaXNDb21tYW5kLCBhY3Rpb25Db21tYW5kKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNtZCBvZiBbdGhpc0NvbW1hbmQsIGFjdGlvbkNvbW1hbmRdKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQ29tbWFuZCA9IGdldE9yVGhyb3coY29tbWFuZHNNYXAsIGNtZCk7XG4gICAgICAgIHByb3ZpZGVkT3B0aW9ucy5zZXQob3JpZ2luYWxDb21tYW5kLCBjbWQub3B0cygpKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbktleSBvZiBPYmplY3Qua2V5cyhjbWQub3B0cygpKSkge1xuICAgICAgICAgIHNldFByb3ZpZGVkT3B0aW9uU291cmNlKFxuICAgICAgICAgICAgb3JpZ2luYWxDb21tYW5kLFxuICAgICAgICAgICAgb3B0aW9uS2V5LFxuICAgICAgICAgICAgY21kLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcGFyc2VyQ29tbWFuZC5hY3Rpb24oKCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWxDb21tYW5kID0gZ2V0T3JUaHJvdyhjb21tYW5kc01hcCwgcGFyc2VyQ29tbWFuZCk7XG4gICAgICBwcm92aWRlZE9wdGlvbnMuc2V0KG9yaWdpbmFsQ29tbWFuZCwgcGFyc2VyQ29tbWFuZC5vcHRzKCkpO1xuXG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbktleSBvZiBPYmplY3Qua2V5cyhwYXJzZXJDb21tYW5kLm9wdHMoKSkpIHtcbiAgICAgICAgc2V0UHJvdmlkZWRPcHRpb25Tb3VyY2UoXG4gICAgICAgICAgb3JpZ2luYWxDb21tYW5kLFxuICAgICAgICAgIG9wdGlvbktleSxcbiAgICAgICAgICBwYXJzZXJDb21tYW5kLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG1hdGNoZWRDb21tYW5kID0gY29tbWFuZDtcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgc3ViY29tbWFuZCBvZiBjb21tYW5kLmNvbW1hbmRzIGFzIENvbW1hbmRbXSkge1xuICAgICAgY29uc3QgcGFyc2VyU3ViY29tbWFuZCA9IHBhcnNlckNvbW1hbmQuY29tbWFuZChzdWJjb21tYW5kLm5hbWUoKSk7XG4gICAgICBjcmVhdGVQYXJzZXJDb21tYW5kKHBhcnNlclN1YmNvbW1hbmQsIHN1YmNvbW1hbmQpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZXJDb21tYW5kO1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlckNvbW1hbmQgPSBjcmVhdGVQYXJzZXJDb21tYW5kKG5ldyBDb21tYW5kKCksIGNvbW1hbmQpO1xuICBwYXJzZXJDb21tYW5kLnBhcnNlKGFyZ3YsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IG1pc3NpbmdPcHRpb25zID0gbWF0Y2hlZENvbW1hbmRcbiAgICA/IGZpbmRNaXNzaW5nT3B0aW9ucyhtYXRjaGVkQ29tbWFuZCwgcHJvdmlkZWRPcHRpb25zKVxuICAgIDogbmV3IE1hcDxDb21tYW5kLCBTZXQ8c3RyaW5nPj4oKTtcblxuICByZXR1cm4ge1xuICAgIG1hdGNoZWRDb21tYW5kLFxuICAgIG1pc3NpbmdPcHRpb25zLFxuICAgIHByb3ZpZGVkT3B0aW9ucyxcbiAgICBwcm92aWRlZE9wdGlvbnNTb3VyY2VzLFxuICB9O1xufTtcbiIsCiAgICAiZXhwb3J0IGNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBOzs7QUNETyxJQUFNLE9BQU8sTUFBTTs7O0FEVTFCLElBQU0scUJBQXFCO0FBQUEsRUFDekI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBUUEsSUFBTSxhQUFhLENBQWEsS0FBc0IsUUFBb0I7QUFBQSxFQUN4RSxNQUFNLFFBQVEsSUFBSSxJQUFJLEdBQUc7QUFBQSxFQUN6QixJQUFJLFVBQVUsV0FBVztBQUFBLElBQ3ZCLE1BQU0sSUFBSSxNQUFNLGtDQUFrQztBQUFBLEVBQ3BEO0FBQUEsRUFFQSxPQUFPO0FBQUE7QUFHRixJQUFNLHFCQUFxQixDQUNoQyxTQUNBLDZCQUNHO0FBQUEsRUFDSCxNQUFNLDBCQUEwQixJQUFJO0FBQUEsRUFFcEMsSUFBSSxpQkFBNkM7QUFBQSxFQUVqRCxPQUFPLGdCQUFnQjtBQUFBLElBQ3JCLE1BQU0saUJBQWlCLElBQUk7QUFBQSxJQUMzQixNQUFNLGtCQUFrQix5QkFBeUIsSUFBSSxjQUFjO0FBQUEsSUFDbkUsV0FBVyxVQUFVLGVBQWUsU0FBUztBQUFBLE1BQzNDLE1BQU0sYUFBYSxPQUFPLFNBQ3RCLE9BQU8sTUFBTSxRQUFRLFVBQVUsRUFBRSxJQUNoQyxPQUFPLFFBQVEsT0FBTztBQUFBLE1BQzNCLElBQUksQ0FBQyxZQUFZO0FBQUEsUUFDZjtBQUFBLE1BQ0Y7QUFBQSxNQUVBLE1BQU0sTUFBTSxVQUFVLFVBQVU7QUFBQSxNQUVoQyxJQUFJLGtCQUFrQixTQUFTLFdBQVc7QUFBQSxRQUN4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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-my-command",
3
- "version": "0.4.0",
3
+ "version": "0.5.1",
4
4
  "description": "Parse argv with Commander.js without executing the command",
5
5
  "keywords": [
6
6
  "parser",
@@ -40,43 +40,31 @@
40
40
  "dist/index.js"
41
41
  ],
42
42
  "scripts": {
43
- "fix": "prettier --write . && eslint --ext .js --ext .cjs --ext .mjs --ext .ts --ext .cts --ext .mts --ext .d.ts --fix .",
44
- "lint": "prettier --check . && eslint --ext .js --ext .cjs --ext .mjs --ext .ts --ext .cts --ext .mts --ext .d.ts .",
45
- "prepare": "tsup ./src/index.ts --format esm,cjs --dts --clean --sourcemap inline --silent",
46
- "pretest": "tsc",
47
- "test": "glob -c \"tsx --test --test-reporter spec\" \"test/**/*.test.ts\"",
48
- "posttest": "npm run lint",
49
- "test:coverage": "c8 npm run test"
50
- },
51
- "c8": {
52
- "reporter": [
53
- "lcov"
54
- ]
43
+ "build": "bun run clean && bun run build:esm && bun run build:cjs && bun run build:types",
44
+ "build:cjs": "bun build ./src/index.ts --format cjs --target node --packages external --outdir ./dist --entry-naming index.cjs --sourcemap=inline",
45
+ "build:esm": "bun build ./src/index.ts --format esm --target node --packages external --outdir ./dist --entry-naming index.js --sourcemap=inline",
46
+ "build:types": "tsc -p tsconfig.build.json && cp ./dist/index.d.ts ./dist/index.d.cts",
47
+ "clean": "rm -rf coverage dist",
48
+ "fix": "bunx biome check --write .",
49
+ "lint": "bunx biome check .",
50
+ "prepack": "bun run build",
51
+ "test": "bun run typecheck && bun run test:unit && bun run lint",
52
+ "test:coverage": "bun run typecheck && bun test --coverage --coverage-reporter=lcov",
53
+ "test:unit": "bun test",
54
+ "typecheck": "tsc -p tsconfig.json",
55
+ "update:deps": "bun update --latest && bun run fix"
55
56
  },
56
57
  "dependencies": {
57
- "camelcase": "^8.0.0",
58
- "commander": "^13.1.0"
58
+ "camelcase": "^9.0.0",
59
+ "commander": "^14.0.3"
59
60
  },
60
61
  "devDependencies": {
61
- "@trivago/prettier-plugin-sort-imports": "^4.3.0",
62
- "@types/node": "^20.12.4",
63
- "@typescript-eslint/eslint-plugin": "^7.5.0",
64
- "@typescript-eslint/parser": "^7.5.0",
65
- "c8": "^9.1.0",
66
- "eslint": "^8.57.0",
67
- "eslint-config-prettier": "^9.1.0",
68
- "eslint-config-xo": "^0.44.0",
69
- "eslint-config-xo-typescript": "^4.0.0",
70
- "eslint-plugin-unicorn": "^52.0.0",
71
- "glob": "^10.3.12",
72
- "npm-check-updates": "^16.14.18",
73
- "prettier": "^3.2.5",
74
- "prettier-plugin-packagejson": "^2.4.14",
75
- "tsup": "^8.0.2",
76
- "tsx": "^4.7.2",
77
- "typescript": "^5.4.4"
62
+ "@biomejs/biome": "^2.4.9",
63
+ "@types/bun": "^1.3.11",
64
+ "typescript": "^6.0.2"
78
65
  },
66
+ "packageManager": "bun@1.3.10",
79
67
  "engines": {
80
- "node": ">=18"
68
+ "node": ">=20"
81
69
  }
82
70
  }