jiek 0.4.7 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. package/README.md +22 -1
  2. package/bin/jiek.js +9 -5
  3. package/dist/cli.cjs +4703 -362
  4. package/dist/cli.d.cts +112 -0
  5. package/dist/cli.d.ts +111 -1
  6. package/dist/cli.js +5010 -0
  7. package/dist/cli.min.cjs +19 -2
  8. package/dist/cli.min.js +19 -0
  9. package/dist/index.cjs +0 -1
  10. package/dist/index.d.cts +73 -0
  11. package/dist/index.d.ts +62 -46
  12. package/dist/{index.esm.js → index.js} +0 -1
  13. package/dist/index.min.cjs +0 -1
  14. package/dist/index.min.js +1 -0
  15. package/dist/rollup/index.cjs +4688 -0
  16. package/dist/rollup/index.d.cts +53 -0
  17. package/dist/rollup/index.d.ts +53 -0
  18. package/dist/rollup/index.js +4673 -0
  19. package/dist/rollup/index.min.cjs +19 -0
  20. package/dist/rollup/index.min.js +19 -0
  21. package/package.json +42 -33
  22. package/src/cli.ts +9 -0
  23. package/src/commands/base.ts +8 -0
  24. package/src/commands/build.ts +158 -0
  25. package/src/commands/init.ts +373 -0
  26. package/src/commands/publish.ts +170 -0
  27. package/src/index.ts +8 -0
  28. package/src/inner.ts +11 -0
  29. package/src/merge-package-json.ts +75 -0
  30. package/src/rollup/base.ts +72 -0
  31. package/src/rollup/index.ts +422 -0
  32. package/src/rollup/plugins/globals.ts +34 -0
  33. package/src/rollup/plugins/progress.ts +26 -0
  34. package/src/rollup/plugins/skip.ts +23 -0
  35. package/src/rollup/utils/commonOptions.ts +9 -0
  36. package/src/rollup/utils/externalResolver.ts +21 -0
  37. package/src/rollup/utils/globalResolver.ts +13 -0
  38. package/src/rollup/utils/withMinify.ts +18 -0
  39. package/src/utils/filterSupport.ts +84 -0
  40. package/src/utils/getExports.ts +104 -0
  41. package/src/utils/getRoot.ts +16 -0
  42. package/src/utils/getWD.ts +31 -0
  43. package/src/utils/loadConfig.ts +93 -0
  44. package/src/utils/tsRegister.ts +26 -0
  45. package/dist/base.esm.d.ts +0 -55
  46. package/dist/cli.cjs.map +0 -1
  47. package/dist/cli.esm.d.ts +0 -2
  48. package/dist/cli.esm.js +0 -9
  49. package/dist/cli.esm.js.map +0 -1
  50. package/dist/cli.esm.min.js +0 -2
  51. package/dist/cli.esm.min.js.map +0 -1
  52. package/dist/cli.min.cjs.map +0 -1
  53. package/dist/commands/base.esm.js +0 -5
  54. package/dist/commands/base.esm.js.map +0 -1
  55. package/dist/commands/base.esm.min.js +0 -2
  56. package/dist/commands/base.esm.min.js.map +0 -1
  57. package/dist/commands/build.esm.js +0 -58
  58. package/dist/commands/build.esm.js.map +0 -1
  59. package/dist/commands/build.esm.min.js +0 -2
  60. package/dist/commands/build.esm.min.js.map +0 -1
  61. package/dist/commands/init.esm.js +0 -271
  62. package/dist/commands/init.esm.js.map +0 -1
  63. package/dist/commands/init.esm.min.js +0 -2
  64. package/dist/commands/init.esm.min.js.map +0 -1
  65. package/dist/commands/publish.esm.js +0 -87
  66. package/dist/commands/publish.esm.js.map +0 -1
  67. package/dist/commands/publish.esm.min.js +0 -2
  68. package/dist/commands/publish.esm.min.js.map +0 -1
  69. package/dist/index.cjs.map +0 -1
  70. package/dist/index.esm.d.ts +0 -6
  71. package/dist/index.esm.js.map +0 -1
  72. package/dist/index.esm.min.js +0 -2
  73. package/dist/index.esm.min.js.map +0 -1
  74. package/dist/index.min.cjs.map +0 -1
  75. package/dist/inner.esm.js +0 -10
  76. package/dist/inner.esm.js.map +0 -1
  77. package/dist/inner.esm.min.js +0 -2
  78. package/dist/inner.esm.min.js.map +0 -1
  79. package/dist/merge-package-json.esm.js +0 -64
  80. package/dist/merge-package-json.esm.js.map +0 -1
  81. package/dist/merge-package-json.esm.min.js +0 -2
  82. package/dist/merge-package-json.esm.min.js.map +0 -1
  83. package/dist/pkg.esm.js +0 -4
  84. package/dist/pkg.esm.js.map +0 -1
  85. package/dist/pkg.esm.min.js +0 -2
  86. package/dist/pkg.esm.min.js.map +0 -1
  87. package/dist/rollup/plugins/globals.esm.js +0 -31
  88. package/dist/rollup/plugins/globals.esm.js.map +0 -1
  89. package/dist/rollup/plugins/globals.esm.min.js +0 -2
  90. package/dist/rollup/plugins/globals.esm.min.js.map +0 -1
  91. package/dist/rollup/plugins/skip.esm.js +0 -16
  92. package/dist/rollup/plugins/skip.esm.js.map +0 -1
  93. package/dist/rollup/plugins/skip.esm.min.js +0 -2
  94. package/dist/rollup/plugins/skip.esm.min.js.map +0 -1
  95. package/dist/rollup/utils/commonOptions.esm.js +0 -9
  96. package/dist/rollup/utils/commonOptions.esm.js.map +0 -1
  97. package/dist/rollup/utils/commonOptions.esm.min.js +0 -2
  98. package/dist/rollup/utils/commonOptions.esm.min.js.map +0 -1
  99. package/dist/rollup/utils/externalResolver.esm.js +0 -12
  100. package/dist/rollup/utils/externalResolver.esm.js.map +0 -1
  101. package/dist/rollup/utils/externalResolver.esm.min.js +0 -2
  102. package/dist/rollup/utils/externalResolver.esm.min.js.map +0 -1
  103. package/dist/rollup/utils/globalResolver.esm.js +0 -9
  104. package/dist/rollup/utils/globalResolver.esm.js.map +0 -1
  105. package/dist/rollup/utils/globalResolver.esm.min.js +0 -2
  106. package/dist/rollup/utils/globalResolver.esm.min.js.map +0 -1
  107. package/dist/rollup/utils/withMinify.esm.js +0 -15
  108. package/dist/rollup/utils/withMinify.esm.js.map +0 -1
  109. package/dist/rollup/utils/withMinify.esm.min.js +0 -2
  110. package/dist/rollup/utils/withMinify.esm.min.js.map +0 -1
  111. package/dist/rollup.cjs +0 -330
  112. package/dist/rollup.cjs.map +0 -1
  113. package/dist/rollup.d.ts +0 -23
  114. package/dist/rollup.esm.d.ts +0 -23
  115. package/dist/rollup.esm.js +0 -248
  116. package/dist/rollup.esm.js.map +0 -1
  117. package/dist/rollup.esm.min.js +0 -2
  118. package/dist/rollup.esm.min.js.map +0 -1
  119. package/dist/rollup.min.cjs +0 -2
  120. package/dist/rollup.min.cjs.map +0 -1
  121. package/dist/utils/commondir.esm.js +0 -25
  122. package/dist/utils/commondir.esm.js.map +0 -1
  123. package/dist/utils/commondir.esm.min.js +0 -2
  124. package/dist/utils/commondir.esm.min.js.map +0 -1
  125. package/dist/utils/filterSupport.esm.js +0 -67
  126. package/dist/utils/filterSupport.esm.js.map +0 -1
  127. package/dist/utils/filterSupport.esm.min.js +0 -2
  128. package/dist/utils/filterSupport.esm.min.js.map +0 -1
  129. package/dist/utils/getRoot.esm.js +0 -14
  130. package/dist/utils/getRoot.esm.js.map +0 -1
  131. package/dist/utils/getRoot.esm.min.js +0 -2
  132. package/dist/utils/getRoot.esm.min.js.map +0 -1
  133. package/dist/utils/getWD.esm.js +0 -31
  134. package/dist/utils/getWD.esm.js.map +0 -1
  135. package/dist/utils/getWD.esm.min.js +0 -2
  136. package/dist/utils/getWD.esm.min.js.map +0 -1
  137. package/dist/utils/loadConfig.esm.js +0 -75
  138. package/dist/utils/loadConfig.esm.js.map +0 -1
  139. package/dist/utils/loadConfig.esm.min.js +0 -2
  140. package/dist/utils/loadConfig.esm.min.js.map +0 -1
  141. package/dist/utils/tsRegister.esm.js +0 -24
  142. package/dist/utils/tsRegister.esm.js.map +0 -1
  143. package/dist/utils/tsRegister.esm.min.js +0 -2
  144. package/dist/utils/tsRegister.esm.min.js.map +0 -1
@@ -0,0 +1,4688 @@
1
+ 'use strict';
2
+
3
+ var fs = require('node:fs');
4
+ var path = require('node:path');
5
+ var entrypoints = require('@jiek/pkger/entrypoints');
6
+ var rollupPluginDts = require('@jiek/rollup-plugin-dts');
7
+ var getWorkspaceDir = require('@jiek/utils/getWorkspaceDir');
8
+ var commonjs = require('@rollup/plugin-commonjs');
9
+ var json = require('@rollup/plugin-json');
10
+ var pluginNodeResolve = require('@rollup/plugin-node-resolve');
11
+ var terser = require('@rollup/plugin-terser');
12
+ var execa = require('execa');
13
+ var jsoncParser = require('jsonc-parser');
14
+ var require$$0 = require('util');
15
+ var require$$0$1 = require('path');
16
+ var esbuild = require('rollup-plugin-esbuild');
17
+ var ts = require('typescript');
18
+ var commander = require('commander');
19
+ var jsYaml = require('js-yaml');
20
+ var node_module = require('node:module');
21
+ require('@pnpm/filter-workspace-packages');
22
+
23
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
24
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
25
+
26
+ var fs__default = /*#__PURE__*/_interopDefault(fs);
27
+ var path__default = /*#__PURE__*/_interopDefault(path);
28
+ var commonjs__default = /*#__PURE__*/_interopDefault(commonjs);
29
+ var json__default = /*#__PURE__*/_interopDefault(json);
30
+ var terser__default = /*#__PURE__*/_interopDefault(terser);
31
+ var require$$0__default = /*#__PURE__*/_interopDefault(require$$0);
32
+ var require$$0__default$1 = /*#__PURE__*/_interopDefault(require$$0$1);
33
+ var esbuild__default = /*#__PURE__*/_interopDefault(esbuild);
34
+ var ts__default = /*#__PURE__*/_interopDefault(ts);
35
+
36
+ var utils$1 = {};
37
+
38
+ var hasRequiredUtils$1;
39
+
40
+ function requireUtils$1 () {
41
+ if (hasRequiredUtils$1) return utils$1;
42
+ hasRequiredUtils$1 = 1;
43
+ (function (exports) {
44
+
45
+ exports.isInteger = num => {
46
+ if (typeof num === 'number') {
47
+ return Number.isInteger(num);
48
+ }
49
+ if (typeof num === 'string' && num.trim() !== '') {
50
+ return Number.isInteger(Number(num));
51
+ }
52
+ return false;
53
+ };
54
+
55
+ /**
56
+ * Find a node of the given type
57
+ */
58
+
59
+ exports.find = (node, type) => node.nodes.find(node => node.type === type);
60
+
61
+ /**
62
+ * Find a node of the given type
63
+ */
64
+
65
+ exports.exceedsLimit = (min, max, step = 1, limit) => {
66
+ if (limit === false) return false;
67
+ if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
68
+ return ((Number(max) - Number(min)) / Number(step)) >= limit;
69
+ };
70
+
71
+ /**
72
+ * Escape the given node with '\\' before node.value
73
+ */
74
+
75
+ exports.escapeNode = (block, n = 0, type) => {
76
+ let node = block.nodes[n];
77
+ if (!node) return;
78
+
79
+ if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
80
+ if (node.escaped !== true) {
81
+ node.value = '\\' + node.value;
82
+ node.escaped = true;
83
+ }
84
+ }
85
+ };
86
+
87
+ /**
88
+ * Returns true if the given brace node should be enclosed in literal braces
89
+ */
90
+
91
+ exports.encloseBrace = node => {
92
+ if (node.type !== 'brace') return false;
93
+ if ((node.commas >> 0 + node.ranges >> 0) === 0) {
94
+ node.invalid = true;
95
+ return true;
96
+ }
97
+ return false;
98
+ };
99
+
100
+ /**
101
+ * Returns true if a brace node is invalid.
102
+ */
103
+
104
+ exports.isInvalidBrace = block => {
105
+ if (block.type !== 'brace') return false;
106
+ if (block.invalid === true || block.dollar) return true;
107
+ if ((block.commas >> 0 + block.ranges >> 0) === 0) {
108
+ block.invalid = true;
109
+ return true;
110
+ }
111
+ if (block.open !== true || block.close !== true) {
112
+ block.invalid = true;
113
+ return true;
114
+ }
115
+ return false;
116
+ };
117
+
118
+ /**
119
+ * Returns true if a node is an open or close node
120
+ */
121
+
122
+ exports.isOpenOrClose = node => {
123
+ if (node.type === 'open' || node.type === 'close') {
124
+ return true;
125
+ }
126
+ return node.open === true || node.close === true;
127
+ };
128
+
129
+ /**
130
+ * Reduce an array of text nodes.
131
+ */
132
+
133
+ exports.reduce = nodes => nodes.reduce((acc, node) => {
134
+ if (node.type === 'text') acc.push(node.value);
135
+ if (node.type === 'range') node.type = 'text';
136
+ return acc;
137
+ }, []);
138
+
139
+ /**
140
+ * Flatten an array
141
+ */
142
+
143
+ exports.flatten = (...args) => {
144
+ const result = [];
145
+ const flat = arr => {
146
+ for (let i = 0; i < arr.length; i++) {
147
+ let ele = arr[i];
148
+ Array.isArray(ele) ? flat(ele) : ele !== void 0 && result.push(ele);
149
+ }
150
+ return result;
151
+ };
152
+ flat(args);
153
+ return result;
154
+ };
155
+ } (utils$1));
156
+ return utils$1;
157
+ }
158
+
159
+ var stringify;
160
+ var hasRequiredStringify;
161
+
162
+ function requireStringify () {
163
+ if (hasRequiredStringify) return stringify;
164
+ hasRequiredStringify = 1;
165
+
166
+ const utils = requireUtils$1();
167
+
168
+ stringify = (ast, options = {}) => {
169
+ let stringify = (node, parent = {}) => {
170
+ let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);
171
+ let invalidNode = node.invalid === true && options.escapeInvalid === true;
172
+ let output = '';
173
+
174
+ if (node.value) {
175
+ if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {
176
+ return '\\' + node.value;
177
+ }
178
+ return node.value;
179
+ }
180
+
181
+ if (node.value) {
182
+ return node.value;
183
+ }
184
+
185
+ if (node.nodes) {
186
+ for (let child of node.nodes) {
187
+ output += stringify(child);
188
+ }
189
+ }
190
+ return output;
191
+ };
192
+
193
+ return stringify(ast);
194
+ };
195
+ return stringify;
196
+ }
197
+
198
+ /*!
199
+ * is-number <https://github.com/jonschlinkert/is-number>
200
+ *
201
+ * Copyright (c) 2014-present, Jon Schlinkert.
202
+ * Released under the MIT License.
203
+ */
204
+
205
+ var isNumber;
206
+ var hasRequiredIsNumber;
207
+
208
+ function requireIsNumber () {
209
+ if (hasRequiredIsNumber) return isNumber;
210
+ hasRequiredIsNumber = 1;
211
+
212
+ isNumber = function(num) {
213
+ if (typeof num === 'number') {
214
+ return num - num === 0;
215
+ }
216
+ if (typeof num === 'string' && num.trim() !== '') {
217
+ return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
218
+ }
219
+ return false;
220
+ };
221
+ return isNumber;
222
+ }
223
+
224
+ /*!
225
+ * to-regex-range <https://github.com/micromatch/to-regex-range>
226
+ *
227
+ * Copyright (c) 2015-present, Jon Schlinkert.
228
+ * Released under the MIT License.
229
+ */
230
+
231
+ var toRegexRange_1;
232
+ var hasRequiredToRegexRange;
233
+
234
+ function requireToRegexRange () {
235
+ if (hasRequiredToRegexRange) return toRegexRange_1;
236
+ hasRequiredToRegexRange = 1;
237
+
238
+ const isNumber = requireIsNumber();
239
+
240
+ const toRegexRange = (min, max, options) => {
241
+ if (isNumber(min) === false) {
242
+ throw new TypeError('toRegexRange: expected the first argument to be a number');
243
+ }
244
+
245
+ if (max === void 0 || min === max) {
246
+ return String(min);
247
+ }
248
+
249
+ if (isNumber(max) === false) {
250
+ throw new TypeError('toRegexRange: expected the second argument to be a number.');
251
+ }
252
+
253
+ let opts = { relaxZeros: true, ...options };
254
+ if (typeof opts.strictZeros === 'boolean') {
255
+ opts.relaxZeros = opts.strictZeros === false;
256
+ }
257
+
258
+ let relax = String(opts.relaxZeros);
259
+ let shorthand = String(opts.shorthand);
260
+ let capture = String(opts.capture);
261
+ let wrap = String(opts.wrap);
262
+ let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;
263
+
264
+ if (toRegexRange.cache.hasOwnProperty(cacheKey)) {
265
+ return toRegexRange.cache[cacheKey].result;
266
+ }
267
+
268
+ let a = Math.min(min, max);
269
+ let b = Math.max(min, max);
270
+
271
+ if (Math.abs(a - b) === 1) {
272
+ let result = min + '|' + max;
273
+ if (opts.capture) {
274
+ return `(${result})`;
275
+ }
276
+ if (opts.wrap === false) {
277
+ return result;
278
+ }
279
+ return `(?:${result})`;
280
+ }
281
+
282
+ let isPadded = hasPadding(min) || hasPadding(max);
283
+ let state = { min, max, a, b };
284
+ let positives = [];
285
+ let negatives = [];
286
+
287
+ if (isPadded) {
288
+ state.isPadded = isPadded;
289
+ state.maxLen = String(state.max).length;
290
+ }
291
+
292
+ if (a < 0) {
293
+ let newMin = b < 0 ? Math.abs(b) : 1;
294
+ negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
295
+ a = state.a = 0;
296
+ }
297
+
298
+ if (b >= 0) {
299
+ positives = splitToPatterns(a, b, state, opts);
300
+ }
301
+
302
+ state.negatives = negatives;
303
+ state.positives = positives;
304
+ state.result = collatePatterns(negatives, positives);
305
+
306
+ if (opts.capture === true) {
307
+ state.result = `(${state.result})`;
308
+ } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
309
+ state.result = `(?:${state.result})`;
310
+ }
311
+
312
+ toRegexRange.cache[cacheKey] = state;
313
+ return state.result;
314
+ };
315
+
316
+ function collatePatterns(neg, pos, options) {
317
+ let onlyNegative = filterPatterns(neg, pos, '-', false) || [];
318
+ let onlyPositive = filterPatterns(pos, neg, '', false) || [];
319
+ let intersected = filterPatterns(neg, pos, '-?', true) || [];
320
+ let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
321
+ return subpatterns.join('|');
322
+ }
323
+
324
+ function splitToRanges(min, max) {
325
+ let nines = 1;
326
+ let zeros = 1;
327
+
328
+ let stop = countNines(min, nines);
329
+ let stops = new Set([max]);
330
+
331
+ while (min <= stop && stop <= max) {
332
+ stops.add(stop);
333
+ nines += 1;
334
+ stop = countNines(min, nines);
335
+ }
336
+
337
+ stop = countZeros(max + 1, zeros) - 1;
338
+
339
+ while (min < stop && stop <= max) {
340
+ stops.add(stop);
341
+ zeros += 1;
342
+ stop = countZeros(max + 1, zeros) - 1;
343
+ }
344
+
345
+ stops = [...stops];
346
+ stops.sort(compare);
347
+ return stops;
348
+ }
349
+
350
+ /**
351
+ * Convert a range to a regex pattern
352
+ * @param {Number} `start`
353
+ * @param {Number} `stop`
354
+ * @return {String}
355
+ */
356
+
357
+ function rangeToPattern(start, stop, options) {
358
+ if (start === stop) {
359
+ return { pattern: start, count: [], digits: 0 };
360
+ }
361
+
362
+ let zipped = zip(start, stop);
363
+ let digits = zipped.length;
364
+ let pattern = '';
365
+ let count = 0;
366
+
367
+ for (let i = 0; i < digits; i++) {
368
+ let [startDigit, stopDigit] = zipped[i];
369
+
370
+ if (startDigit === stopDigit) {
371
+ pattern += startDigit;
372
+
373
+ } else if (startDigit !== '0' || stopDigit !== '9') {
374
+ pattern += toCharacterClass(startDigit, stopDigit);
375
+
376
+ } else {
377
+ count++;
378
+ }
379
+ }
380
+
381
+ if (count) {
382
+ pattern += options.shorthand === true ? '\\d' : '[0-9]';
383
+ }
384
+
385
+ return { pattern, count: [count], digits };
386
+ }
387
+
388
+ function splitToPatterns(min, max, tok, options) {
389
+ let ranges = splitToRanges(min, max);
390
+ let tokens = [];
391
+ let start = min;
392
+ let prev;
393
+
394
+ for (let i = 0; i < ranges.length; i++) {
395
+ let max = ranges[i];
396
+ let obj = rangeToPattern(String(start), String(max), options);
397
+ let zeros = '';
398
+
399
+ if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
400
+ if (prev.count.length > 1) {
401
+ prev.count.pop();
402
+ }
403
+
404
+ prev.count.push(obj.count[0]);
405
+ prev.string = prev.pattern + toQuantifier(prev.count);
406
+ start = max + 1;
407
+ continue;
408
+ }
409
+
410
+ if (tok.isPadded) {
411
+ zeros = padZeros(max, tok, options);
412
+ }
413
+
414
+ obj.string = zeros + obj.pattern + toQuantifier(obj.count);
415
+ tokens.push(obj);
416
+ start = max + 1;
417
+ prev = obj;
418
+ }
419
+
420
+ return tokens;
421
+ }
422
+
423
+ function filterPatterns(arr, comparison, prefix, intersection, options) {
424
+ let result = [];
425
+
426
+ for (let ele of arr) {
427
+ let { string } = ele;
428
+
429
+ // only push if _both_ are negative...
430
+ if (!intersection && !contains(comparison, 'string', string)) {
431
+ result.push(prefix + string);
432
+ }
433
+
434
+ // or _both_ are positive
435
+ if (intersection && contains(comparison, 'string', string)) {
436
+ result.push(prefix + string);
437
+ }
438
+ }
439
+ return result;
440
+ }
441
+
442
+ /**
443
+ * Zip strings
444
+ */
445
+
446
+ function zip(a, b) {
447
+ let arr = [];
448
+ for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
449
+ return arr;
450
+ }
451
+
452
+ function compare(a, b) {
453
+ return a > b ? 1 : b > a ? -1 : 0;
454
+ }
455
+
456
+ function contains(arr, key, val) {
457
+ return arr.some(ele => ele[key] === val);
458
+ }
459
+
460
+ function countNines(min, len) {
461
+ return Number(String(min).slice(0, -len) + '9'.repeat(len));
462
+ }
463
+
464
+ function countZeros(integer, zeros) {
465
+ return integer - (integer % Math.pow(10, zeros));
466
+ }
467
+
468
+ function toQuantifier(digits) {
469
+ let [start = 0, stop = ''] = digits;
470
+ if (stop || start > 1) {
471
+ return `{${start + (stop ? ',' + stop : '')}}`;
472
+ }
473
+ return '';
474
+ }
475
+
476
+ function toCharacterClass(a, b, options) {
477
+ return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
478
+ }
479
+
480
+ function hasPadding(str) {
481
+ return /^-?(0+)\d/.test(str);
482
+ }
483
+
484
+ function padZeros(value, tok, options) {
485
+ if (!tok.isPadded) {
486
+ return value;
487
+ }
488
+
489
+ let diff = Math.abs(tok.maxLen - String(value).length);
490
+ let relax = options.relaxZeros !== false;
491
+
492
+ switch (diff) {
493
+ case 0:
494
+ return '';
495
+ case 1:
496
+ return relax ? '0?' : '0';
497
+ case 2:
498
+ return relax ? '0{0,2}' : '00';
499
+ default: {
500
+ return relax ? `0{0,${diff}}` : `0{${diff}}`;
501
+ }
502
+ }
503
+ }
504
+
505
+ /**
506
+ * Cache
507
+ */
508
+
509
+ toRegexRange.cache = {};
510
+ toRegexRange.clearCache = () => (toRegexRange.cache = {});
511
+
512
+ /**
513
+ * Expose `toRegexRange`
514
+ */
515
+
516
+ toRegexRange_1 = toRegexRange;
517
+ return toRegexRange_1;
518
+ }
519
+
520
+ /*!
521
+ * fill-range <https://github.com/jonschlinkert/fill-range>
522
+ *
523
+ * Copyright (c) 2014-present, Jon Schlinkert.
524
+ * Licensed under the MIT License.
525
+ */
526
+
527
+ var fillRange;
528
+ var hasRequiredFillRange;
529
+
530
+ function requireFillRange () {
531
+ if (hasRequiredFillRange) return fillRange;
532
+ hasRequiredFillRange = 1;
533
+
534
+ const util = require$$0__default.default;
535
+ const toRegexRange = requireToRegexRange();
536
+
537
+ const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
538
+
539
+ const transform = toNumber => {
540
+ return value => toNumber === true ? Number(value) : String(value);
541
+ };
542
+
543
+ const isValidValue = value => {
544
+ return typeof value === 'number' || (typeof value === 'string' && value !== '');
545
+ };
546
+
547
+ const isNumber = num => Number.isInteger(+num);
548
+
549
+ const zeros = input => {
550
+ let value = `${input}`;
551
+ let index = -1;
552
+ if (value[0] === '-') value = value.slice(1);
553
+ if (value === '0') return false;
554
+ while (value[++index] === '0');
555
+ return index > 0;
556
+ };
557
+
558
+ const stringify = (start, end, options) => {
559
+ if (typeof start === 'string' || typeof end === 'string') {
560
+ return true;
561
+ }
562
+ return options.stringify === true;
563
+ };
564
+
565
+ const pad = (input, maxLength, toNumber) => {
566
+ if (maxLength > 0) {
567
+ let dash = input[0] === '-' ? '-' : '';
568
+ if (dash) input = input.slice(1);
569
+ input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));
570
+ }
571
+ if (toNumber === false) {
572
+ return String(input);
573
+ }
574
+ return input;
575
+ };
576
+
577
+ const toMaxLen = (input, maxLength) => {
578
+ let negative = input[0] === '-' ? '-' : '';
579
+ if (negative) {
580
+ input = input.slice(1);
581
+ maxLength--;
582
+ }
583
+ while (input.length < maxLength) input = '0' + input;
584
+ return negative ? ('-' + input) : input;
585
+ };
586
+
587
+ const toSequence = (parts, options) => {
588
+ parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
589
+ parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
590
+
591
+ let prefix = options.capture ? '' : '?:';
592
+ let positives = '';
593
+ let negatives = '';
594
+ let result;
595
+
596
+ if (parts.positives.length) {
597
+ positives = parts.positives.join('|');
598
+ }
599
+
600
+ if (parts.negatives.length) {
601
+ negatives = `-(${prefix}${parts.negatives.join('|')})`;
602
+ }
603
+
604
+ if (positives && negatives) {
605
+ result = `${positives}|${negatives}`;
606
+ } else {
607
+ result = positives || negatives;
608
+ }
609
+
610
+ if (options.wrap) {
611
+ return `(${prefix}${result})`;
612
+ }
613
+
614
+ return result;
615
+ };
616
+
617
+ const toRange = (a, b, isNumbers, options) => {
618
+ if (isNumbers) {
619
+ return toRegexRange(a, b, { wrap: false, ...options });
620
+ }
621
+
622
+ let start = String.fromCharCode(a);
623
+ if (a === b) return start;
624
+
625
+ let stop = String.fromCharCode(b);
626
+ return `[${start}-${stop}]`;
627
+ };
628
+
629
+ const toRegex = (start, end, options) => {
630
+ if (Array.isArray(start)) {
631
+ let wrap = options.wrap === true;
632
+ let prefix = options.capture ? '' : '?:';
633
+ return wrap ? `(${prefix}${start.join('|')})` : start.join('|');
634
+ }
635
+ return toRegexRange(start, end, options);
636
+ };
637
+
638
+ const rangeError = (...args) => {
639
+ return new RangeError('Invalid range arguments: ' + util.inspect(...args));
640
+ };
641
+
642
+ const invalidRange = (start, end, options) => {
643
+ if (options.strictRanges === true) throw rangeError([start, end]);
644
+ return [];
645
+ };
646
+
647
+ const invalidStep = (step, options) => {
648
+ if (options.strictRanges === true) {
649
+ throw new TypeError(`Expected step "${step}" to be a number`);
650
+ }
651
+ return [];
652
+ };
653
+
654
+ const fillNumbers = (start, end, step = 1, options = {}) => {
655
+ let a = Number(start);
656
+ let b = Number(end);
657
+
658
+ if (!Number.isInteger(a) || !Number.isInteger(b)) {
659
+ if (options.strictRanges === true) throw rangeError([start, end]);
660
+ return [];
661
+ }
662
+
663
+ // fix negative zero
664
+ if (a === 0) a = 0;
665
+ if (b === 0) b = 0;
666
+
667
+ let descending = a > b;
668
+ let startString = String(start);
669
+ let endString = String(end);
670
+ let stepString = String(step);
671
+ step = Math.max(Math.abs(step), 1);
672
+
673
+ let padded = zeros(startString) || zeros(endString) || zeros(stepString);
674
+ let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
675
+ let toNumber = padded === false && stringify(start, end, options) === false;
676
+ let format = options.transform || transform(toNumber);
677
+
678
+ if (options.toRegex && step === 1) {
679
+ return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
680
+ }
681
+
682
+ let parts = { negatives: [], positives: [] };
683
+ let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
684
+ let range = [];
685
+ let index = 0;
686
+
687
+ while (descending ? a >= b : a <= b) {
688
+ if (options.toRegex === true && step > 1) {
689
+ push(a);
690
+ } else {
691
+ range.push(pad(format(a, index), maxLen, toNumber));
692
+ }
693
+ a = descending ? a - step : a + step;
694
+ index++;
695
+ }
696
+
697
+ if (options.toRegex === true) {
698
+ return step > 1
699
+ ? toSequence(parts, options)
700
+ : toRegex(range, null, { wrap: false, ...options });
701
+ }
702
+
703
+ return range;
704
+ };
705
+
706
+ const fillLetters = (start, end, step = 1, options = {}) => {
707
+ if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {
708
+ return invalidRange(start, end, options);
709
+ }
710
+
711
+
712
+ let format = options.transform || (val => String.fromCharCode(val));
713
+ let a = `${start}`.charCodeAt(0);
714
+ let b = `${end}`.charCodeAt(0);
715
+
716
+ let descending = a > b;
717
+ let min = Math.min(a, b);
718
+ let max = Math.max(a, b);
719
+
720
+ if (options.toRegex && step === 1) {
721
+ return toRange(min, max, false, options);
722
+ }
723
+
724
+ let range = [];
725
+ let index = 0;
726
+
727
+ while (descending ? a >= b : a <= b) {
728
+ range.push(format(a, index));
729
+ a = descending ? a - step : a + step;
730
+ index++;
731
+ }
732
+
733
+ if (options.toRegex === true) {
734
+ return toRegex(range, null, { wrap: false, options });
735
+ }
736
+
737
+ return range;
738
+ };
739
+
740
+ const fill = (start, end, step, options = {}) => {
741
+ if (end == null && isValidValue(start)) {
742
+ return [start];
743
+ }
744
+
745
+ if (!isValidValue(start) || !isValidValue(end)) {
746
+ return invalidRange(start, end, options);
747
+ }
748
+
749
+ if (typeof step === 'function') {
750
+ return fill(start, end, 1, { transform: step });
751
+ }
752
+
753
+ if (isObject(step)) {
754
+ return fill(start, end, 0, step);
755
+ }
756
+
757
+ let opts = { ...options };
758
+ if (opts.capture === true) opts.wrap = true;
759
+ step = step || opts.step || 1;
760
+
761
+ if (!isNumber(step)) {
762
+ if (step != null && !isObject(step)) return invalidStep(step, opts);
763
+ return fill(start, end, 1, step);
764
+ }
765
+
766
+ if (isNumber(start) && isNumber(end)) {
767
+ return fillNumbers(start, end, step, opts);
768
+ }
769
+
770
+ return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
771
+ };
772
+
773
+ fillRange = fill;
774
+ return fillRange;
775
+ }
776
+
777
+ var compile_1;
778
+ var hasRequiredCompile;
779
+
780
+ function requireCompile () {
781
+ if (hasRequiredCompile) return compile_1;
782
+ hasRequiredCompile = 1;
783
+
784
+ const fill = requireFillRange();
785
+ const utils = requireUtils$1();
786
+
787
+ const compile = (ast, options = {}) => {
788
+ let walk = (node, parent = {}) => {
789
+ let invalidBlock = utils.isInvalidBrace(parent);
790
+ let invalidNode = node.invalid === true && options.escapeInvalid === true;
791
+ let invalid = invalidBlock === true || invalidNode === true;
792
+ let prefix = options.escapeInvalid === true ? '\\' : '';
793
+ let output = '';
794
+
795
+ if (node.isOpen === true) {
796
+ return prefix + node.value;
797
+ }
798
+ if (node.isClose === true) {
799
+ return prefix + node.value;
800
+ }
801
+
802
+ if (node.type === 'open') {
803
+ return invalid ? (prefix + node.value) : '(';
804
+ }
805
+
806
+ if (node.type === 'close') {
807
+ return invalid ? (prefix + node.value) : ')';
808
+ }
809
+
810
+ if (node.type === 'comma') {
811
+ return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
812
+ }
813
+
814
+ if (node.value) {
815
+ return node.value;
816
+ }
817
+
818
+ if (node.nodes && node.ranges > 0) {
819
+ let args = utils.reduce(node.nodes);
820
+ let range = fill(...args, { ...options, wrap: false, toRegex: true });
821
+
822
+ if (range.length !== 0) {
823
+ return args.length > 1 && range.length > 1 ? `(${range})` : range;
824
+ }
825
+ }
826
+
827
+ if (node.nodes) {
828
+ for (let child of node.nodes) {
829
+ output += walk(child, node);
830
+ }
831
+ }
832
+ return output;
833
+ };
834
+
835
+ return walk(ast);
836
+ };
837
+
838
+ compile_1 = compile;
839
+ return compile_1;
840
+ }
841
+
842
+ var expand_1;
843
+ var hasRequiredExpand;
844
+
845
+ function requireExpand () {
846
+ if (hasRequiredExpand) return expand_1;
847
+ hasRequiredExpand = 1;
848
+
849
+ const fill = requireFillRange();
850
+ const stringify = requireStringify();
851
+ const utils = requireUtils$1();
852
+
853
+ const append = (queue = '', stash = '', enclose = false) => {
854
+ let result = [];
855
+
856
+ queue = [].concat(queue);
857
+ stash = [].concat(stash);
858
+
859
+ if (!stash.length) return queue;
860
+ if (!queue.length) {
861
+ return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;
862
+ }
863
+
864
+ for (let item of queue) {
865
+ if (Array.isArray(item)) {
866
+ for (let value of item) {
867
+ result.push(append(value, stash, enclose));
868
+ }
869
+ } else {
870
+ for (let ele of stash) {
871
+ if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;
872
+ result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));
873
+ }
874
+ }
875
+ }
876
+ return utils.flatten(result);
877
+ };
878
+
879
+ const expand = (ast, options = {}) => {
880
+ let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
881
+
882
+ let walk = (node, parent = {}) => {
883
+ node.queue = [];
884
+
885
+ let p = parent;
886
+ let q = parent.queue;
887
+
888
+ while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
889
+ p = p.parent;
890
+ q = p.queue;
891
+ }
892
+
893
+ if (node.invalid || node.dollar) {
894
+ q.push(append(q.pop(), stringify(node, options)));
895
+ return;
896
+ }
897
+
898
+ if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
899
+ q.push(append(q.pop(), ['{}']));
900
+ return;
901
+ }
902
+
903
+ if (node.nodes && node.ranges > 0) {
904
+ let args = utils.reduce(node.nodes);
905
+
906
+ if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
907
+ throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
908
+ }
909
+
910
+ let range = fill(...args, options);
911
+ if (range.length === 0) {
912
+ range = stringify(node, options);
913
+ }
914
+
915
+ q.push(append(q.pop(), range));
916
+ node.nodes = [];
917
+ return;
918
+ }
919
+
920
+ let enclose = utils.encloseBrace(node);
921
+ let queue = node.queue;
922
+ let block = node;
923
+
924
+ while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
925
+ block = block.parent;
926
+ queue = block.queue;
927
+ }
928
+
929
+ for (let i = 0; i < node.nodes.length; i++) {
930
+ let child = node.nodes[i];
931
+
932
+ if (child.type === 'comma' && node.type === 'brace') {
933
+ if (i === 1) queue.push('');
934
+ queue.push('');
935
+ continue;
936
+ }
937
+
938
+ if (child.type === 'close') {
939
+ q.push(append(q.pop(), queue, enclose));
940
+ continue;
941
+ }
942
+
943
+ if (child.value && child.type !== 'open') {
944
+ queue.push(append(queue.pop(), child.value));
945
+ continue;
946
+ }
947
+
948
+ if (child.nodes) {
949
+ walk(child, node);
950
+ }
951
+ }
952
+
953
+ return queue;
954
+ };
955
+
956
+ return utils.flatten(walk(ast));
957
+ };
958
+
959
+ expand_1 = expand;
960
+ return expand_1;
961
+ }
962
+
963
+ var constants$1;
964
+ var hasRequiredConstants$1;
965
+
966
+ function requireConstants$1 () {
967
+ if (hasRequiredConstants$1) return constants$1;
968
+ hasRequiredConstants$1 = 1;
969
+
970
+ constants$1 = {
971
+ MAX_LENGTH: 1024 * 64,
972
+
973
+ // Digits
974
+ CHAR_0: '0', /* 0 */
975
+ CHAR_9: '9', /* 9 */
976
+
977
+ // Alphabet chars.
978
+ CHAR_UPPERCASE_A: 'A', /* A */
979
+ CHAR_LOWERCASE_A: 'a', /* a */
980
+ CHAR_UPPERCASE_Z: 'Z', /* Z */
981
+ CHAR_LOWERCASE_Z: 'z', /* z */
982
+
983
+ CHAR_LEFT_PARENTHESES: '(', /* ( */
984
+ CHAR_RIGHT_PARENTHESES: ')', /* ) */
985
+
986
+ CHAR_ASTERISK: '*', /* * */
987
+
988
+ // Non-alphabetic chars.
989
+ CHAR_AMPERSAND: '&', /* & */
990
+ CHAR_AT: '@', /* @ */
991
+ CHAR_BACKSLASH: '\\', /* \ */
992
+ CHAR_BACKTICK: '`', /* ` */
993
+ CHAR_CARRIAGE_RETURN: '\r', /* \r */
994
+ CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */
995
+ CHAR_COLON: ':', /* : */
996
+ CHAR_COMMA: ',', /* , */
997
+ CHAR_DOLLAR: '$', /* . */
998
+ CHAR_DOT: '.', /* . */
999
+ CHAR_DOUBLE_QUOTE: '"', /* " */
1000
+ CHAR_EQUAL: '=', /* = */
1001
+ CHAR_EXCLAMATION_MARK: '!', /* ! */
1002
+ CHAR_FORM_FEED: '\f', /* \f */
1003
+ CHAR_FORWARD_SLASH: '/', /* / */
1004
+ CHAR_HASH: '#', /* # */
1005
+ CHAR_HYPHEN_MINUS: '-', /* - */
1006
+ CHAR_LEFT_ANGLE_BRACKET: '<', /* < */
1007
+ CHAR_LEFT_CURLY_BRACE: '{', /* { */
1008
+ CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */
1009
+ CHAR_LINE_FEED: '\n', /* \n */
1010
+ CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */
1011
+ CHAR_PERCENT: '%', /* % */
1012
+ CHAR_PLUS: '+', /* + */
1013
+ CHAR_QUESTION_MARK: '?', /* ? */
1014
+ CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */
1015
+ CHAR_RIGHT_CURLY_BRACE: '}', /* } */
1016
+ CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */
1017
+ CHAR_SEMICOLON: ';', /* ; */
1018
+ CHAR_SINGLE_QUOTE: '\'', /* ' */
1019
+ CHAR_SPACE: ' ', /* */
1020
+ CHAR_TAB: '\t', /* \t */
1021
+ CHAR_UNDERSCORE: '_', /* _ */
1022
+ CHAR_VERTICAL_LINE: '|', /* | */
1023
+ CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
1024
+ };
1025
+ return constants$1;
1026
+ }
1027
+
1028
+ var parse_1$1;
1029
+ var hasRequiredParse$1;
1030
+
1031
+ function requireParse$1 () {
1032
+ if (hasRequiredParse$1) return parse_1$1;
1033
+ hasRequiredParse$1 = 1;
1034
+
1035
+ const stringify = requireStringify();
1036
+
1037
+ /**
1038
+ * Constants
1039
+ */
1040
+
1041
+ const {
1042
+ MAX_LENGTH,
1043
+ CHAR_BACKSLASH, /* \ */
1044
+ CHAR_BACKTICK, /* ` */
1045
+ CHAR_COMMA, /* , */
1046
+ CHAR_DOT, /* . */
1047
+ CHAR_LEFT_PARENTHESES, /* ( */
1048
+ CHAR_RIGHT_PARENTHESES, /* ) */
1049
+ CHAR_LEFT_CURLY_BRACE, /* { */
1050
+ CHAR_RIGHT_CURLY_BRACE, /* } */
1051
+ CHAR_LEFT_SQUARE_BRACKET, /* [ */
1052
+ CHAR_RIGHT_SQUARE_BRACKET, /* ] */
1053
+ CHAR_DOUBLE_QUOTE, /* " */
1054
+ CHAR_SINGLE_QUOTE, /* ' */
1055
+ CHAR_NO_BREAK_SPACE,
1056
+ CHAR_ZERO_WIDTH_NOBREAK_SPACE
1057
+ } = requireConstants$1();
1058
+
1059
+ /**
1060
+ * parse
1061
+ */
1062
+
1063
+ const parse = (input, options = {}) => {
1064
+ if (typeof input !== 'string') {
1065
+ throw new TypeError('Expected a string');
1066
+ }
1067
+
1068
+ let opts = options || {};
1069
+ let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
1070
+ if (input.length > max) {
1071
+ throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
1072
+ }
1073
+
1074
+ let ast = { type: 'root', input, nodes: [] };
1075
+ let stack = [ast];
1076
+ let block = ast;
1077
+ let prev = ast;
1078
+ let brackets = 0;
1079
+ let length = input.length;
1080
+ let index = 0;
1081
+ let depth = 0;
1082
+ let value;
1083
+
1084
+ /**
1085
+ * Helpers
1086
+ */
1087
+
1088
+ const advance = () => input[index++];
1089
+ const push = node => {
1090
+ if (node.type === 'text' && prev.type === 'dot') {
1091
+ prev.type = 'text';
1092
+ }
1093
+
1094
+ if (prev && prev.type === 'text' && node.type === 'text') {
1095
+ prev.value += node.value;
1096
+ return;
1097
+ }
1098
+
1099
+ block.nodes.push(node);
1100
+ node.parent = block;
1101
+ node.prev = prev;
1102
+ prev = node;
1103
+ return node;
1104
+ };
1105
+
1106
+ push({ type: 'bos' });
1107
+
1108
+ while (index < length) {
1109
+ block = stack[stack.length - 1];
1110
+ value = advance();
1111
+
1112
+ /**
1113
+ * Invalid chars
1114
+ */
1115
+
1116
+ if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
1117
+ continue;
1118
+ }
1119
+
1120
+ /**
1121
+ * Escaped chars
1122
+ */
1123
+
1124
+ if (value === CHAR_BACKSLASH) {
1125
+ push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
1126
+ continue;
1127
+ }
1128
+
1129
+ /**
1130
+ * Right square bracket (literal): ']'
1131
+ */
1132
+
1133
+ if (value === CHAR_RIGHT_SQUARE_BRACKET) {
1134
+ push({ type: 'text', value: '\\' + value });
1135
+ continue;
1136
+ }
1137
+
1138
+ /**
1139
+ * Left square bracket: '['
1140
+ */
1141
+
1142
+ if (value === CHAR_LEFT_SQUARE_BRACKET) {
1143
+ brackets++;
1144
+ let next;
1145
+
1146
+ while (index < length && (next = advance())) {
1147
+ value += next;
1148
+
1149
+ if (next === CHAR_LEFT_SQUARE_BRACKET) {
1150
+ brackets++;
1151
+ continue;
1152
+ }
1153
+
1154
+ if (next === CHAR_BACKSLASH) {
1155
+ value += advance();
1156
+ continue;
1157
+ }
1158
+
1159
+ if (next === CHAR_RIGHT_SQUARE_BRACKET) {
1160
+ brackets--;
1161
+
1162
+ if (brackets === 0) {
1163
+ break;
1164
+ }
1165
+ }
1166
+ }
1167
+
1168
+ push({ type: 'text', value });
1169
+ continue;
1170
+ }
1171
+
1172
+ /**
1173
+ * Parentheses
1174
+ */
1175
+
1176
+ if (value === CHAR_LEFT_PARENTHESES) {
1177
+ block = push({ type: 'paren', nodes: [] });
1178
+ stack.push(block);
1179
+ push({ type: 'text', value });
1180
+ continue;
1181
+ }
1182
+
1183
+ if (value === CHAR_RIGHT_PARENTHESES) {
1184
+ if (block.type !== 'paren') {
1185
+ push({ type: 'text', value });
1186
+ continue;
1187
+ }
1188
+ block = stack.pop();
1189
+ push({ type: 'text', value });
1190
+ block = stack[stack.length - 1];
1191
+ continue;
1192
+ }
1193
+
1194
+ /**
1195
+ * Quotes: '|"|`
1196
+ */
1197
+
1198
+ if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
1199
+ let open = value;
1200
+ let next;
1201
+
1202
+ if (options.keepQuotes !== true) {
1203
+ value = '';
1204
+ }
1205
+
1206
+ while (index < length && (next = advance())) {
1207
+ if (next === CHAR_BACKSLASH) {
1208
+ value += next + advance();
1209
+ continue;
1210
+ }
1211
+
1212
+ if (next === open) {
1213
+ if (options.keepQuotes === true) value += next;
1214
+ break;
1215
+ }
1216
+
1217
+ value += next;
1218
+ }
1219
+
1220
+ push({ type: 'text', value });
1221
+ continue;
1222
+ }
1223
+
1224
+ /**
1225
+ * Left curly brace: '{'
1226
+ */
1227
+
1228
+ if (value === CHAR_LEFT_CURLY_BRACE) {
1229
+ depth++;
1230
+
1231
+ let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;
1232
+ let brace = {
1233
+ type: 'brace',
1234
+ open: true,
1235
+ close: false,
1236
+ dollar,
1237
+ depth,
1238
+ commas: 0,
1239
+ ranges: 0,
1240
+ nodes: []
1241
+ };
1242
+
1243
+ block = push(brace);
1244
+ stack.push(block);
1245
+ push({ type: 'open', value });
1246
+ continue;
1247
+ }
1248
+
1249
+ /**
1250
+ * Right curly brace: '}'
1251
+ */
1252
+
1253
+ if (value === CHAR_RIGHT_CURLY_BRACE) {
1254
+ if (block.type !== 'brace') {
1255
+ push({ type: 'text', value });
1256
+ continue;
1257
+ }
1258
+
1259
+ let type = 'close';
1260
+ block = stack.pop();
1261
+ block.close = true;
1262
+
1263
+ push({ type, value });
1264
+ depth--;
1265
+
1266
+ block = stack[stack.length - 1];
1267
+ continue;
1268
+ }
1269
+
1270
+ /**
1271
+ * Comma: ','
1272
+ */
1273
+
1274
+ if (value === CHAR_COMMA && depth > 0) {
1275
+ if (block.ranges > 0) {
1276
+ block.ranges = 0;
1277
+ let open = block.nodes.shift();
1278
+ block.nodes = [open, { type: 'text', value: stringify(block) }];
1279
+ }
1280
+
1281
+ push({ type: 'comma', value });
1282
+ block.commas++;
1283
+ continue;
1284
+ }
1285
+
1286
+ /**
1287
+ * Dot: '.'
1288
+ */
1289
+
1290
+ if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
1291
+ let siblings = block.nodes;
1292
+
1293
+ if (depth === 0 || siblings.length === 0) {
1294
+ push({ type: 'text', value });
1295
+ continue;
1296
+ }
1297
+
1298
+ if (prev.type === 'dot') {
1299
+ block.range = [];
1300
+ prev.value += value;
1301
+ prev.type = 'range';
1302
+
1303
+ if (block.nodes.length !== 3 && block.nodes.length !== 5) {
1304
+ block.invalid = true;
1305
+ block.ranges = 0;
1306
+ prev.type = 'text';
1307
+ continue;
1308
+ }
1309
+
1310
+ block.ranges++;
1311
+ block.args = [];
1312
+ continue;
1313
+ }
1314
+
1315
+ if (prev.type === 'range') {
1316
+ siblings.pop();
1317
+
1318
+ let before = siblings[siblings.length - 1];
1319
+ before.value += prev.value + value;
1320
+ prev = before;
1321
+ block.ranges--;
1322
+ continue;
1323
+ }
1324
+
1325
+ push({ type: 'dot', value });
1326
+ continue;
1327
+ }
1328
+
1329
+ /**
1330
+ * Text
1331
+ */
1332
+
1333
+ push({ type: 'text', value });
1334
+ }
1335
+
1336
+ // Mark imbalanced braces and brackets as invalid
1337
+ do {
1338
+ block = stack.pop();
1339
+
1340
+ if (block.type !== 'root') {
1341
+ block.nodes.forEach(node => {
1342
+ if (!node.nodes) {
1343
+ if (node.type === 'open') node.isOpen = true;
1344
+ if (node.type === 'close') node.isClose = true;
1345
+ if (!node.nodes) node.type = 'text';
1346
+ node.invalid = true;
1347
+ }
1348
+ });
1349
+
1350
+ // get the location of the block on parent.nodes (block's siblings)
1351
+ let parent = stack[stack.length - 1];
1352
+ let index = parent.nodes.indexOf(block);
1353
+ // replace the (invalid) block with it's nodes
1354
+ parent.nodes.splice(index, 1, ...block.nodes);
1355
+ }
1356
+ } while (stack.length > 0);
1357
+
1358
+ push({ type: 'eos' });
1359
+ return ast;
1360
+ };
1361
+
1362
+ parse_1$1 = parse;
1363
+ return parse_1$1;
1364
+ }
1365
+
1366
+ var braces_1;
1367
+ var hasRequiredBraces;
1368
+
1369
+ function requireBraces () {
1370
+ if (hasRequiredBraces) return braces_1;
1371
+ hasRequiredBraces = 1;
1372
+
1373
+ const stringify = requireStringify();
1374
+ const compile = requireCompile();
1375
+ const expand = requireExpand();
1376
+ const parse = requireParse$1();
1377
+
1378
+ /**
1379
+ * Expand the given pattern or create a regex-compatible string.
1380
+ *
1381
+ * ```js
1382
+ * const braces = require('braces');
1383
+ * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']
1384
+ * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']
1385
+ * ```
1386
+ * @param {String} `str`
1387
+ * @param {Object} `options`
1388
+ * @return {String}
1389
+ * @api public
1390
+ */
1391
+
1392
+ const braces = (input, options = {}) => {
1393
+ let output = [];
1394
+
1395
+ if (Array.isArray(input)) {
1396
+ for (let pattern of input) {
1397
+ let result = braces.create(pattern, options);
1398
+ if (Array.isArray(result)) {
1399
+ output.push(...result);
1400
+ } else {
1401
+ output.push(result);
1402
+ }
1403
+ }
1404
+ } else {
1405
+ output = [].concat(braces.create(input, options));
1406
+ }
1407
+
1408
+ if (options && options.expand === true && options.nodupes === true) {
1409
+ output = [...new Set(output)];
1410
+ }
1411
+ return output;
1412
+ };
1413
+
1414
+ /**
1415
+ * Parse the given `str` with the given `options`.
1416
+ *
1417
+ * ```js
1418
+ * // braces.parse(pattern, [, options]);
1419
+ * const ast = braces.parse('a/{b,c}/d');
1420
+ * console.log(ast);
1421
+ * ```
1422
+ * @param {String} pattern Brace pattern to parse
1423
+ * @param {Object} options
1424
+ * @return {Object} Returns an AST
1425
+ * @api public
1426
+ */
1427
+
1428
+ braces.parse = (input, options = {}) => parse(input, options);
1429
+
1430
+ /**
1431
+ * Creates a braces string from an AST, or an AST node.
1432
+ *
1433
+ * ```js
1434
+ * const braces = require('braces');
1435
+ * let ast = braces.parse('foo/{a,b}/bar');
1436
+ * console.log(stringify(ast.nodes[2])); //=> '{a,b}'
1437
+ * ```
1438
+ * @param {String} `input` Brace pattern or AST.
1439
+ * @param {Object} `options`
1440
+ * @return {Array} Returns an array of expanded values.
1441
+ * @api public
1442
+ */
1443
+
1444
+ braces.stringify = (input, options = {}) => {
1445
+ if (typeof input === 'string') {
1446
+ return stringify(braces.parse(input, options), options);
1447
+ }
1448
+ return stringify(input, options);
1449
+ };
1450
+
1451
+ /**
1452
+ * Compiles a brace pattern into a regex-compatible, optimized string.
1453
+ * This method is called by the main [braces](#braces) function by default.
1454
+ *
1455
+ * ```js
1456
+ * const braces = require('braces');
1457
+ * console.log(braces.compile('a/{b,c}/d'));
1458
+ * //=> ['a/(b|c)/d']
1459
+ * ```
1460
+ * @param {String} `input` Brace pattern or AST.
1461
+ * @param {Object} `options`
1462
+ * @return {Array} Returns an array of expanded values.
1463
+ * @api public
1464
+ */
1465
+
1466
+ braces.compile = (input, options = {}) => {
1467
+ if (typeof input === 'string') {
1468
+ input = braces.parse(input, options);
1469
+ }
1470
+ return compile(input, options);
1471
+ };
1472
+
1473
+ /**
1474
+ * Expands a brace pattern into an array. This method is called by the
1475
+ * main [braces](#braces) function when `options.expand` is true. Before
1476
+ * using this method it's recommended that you read the [performance notes](#performance))
1477
+ * and advantages of using [.compile](#compile) instead.
1478
+ *
1479
+ * ```js
1480
+ * const braces = require('braces');
1481
+ * console.log(braces.expand('a/{b,c}/d'));
1482
+ * //=> ['a/b/d', 'a/c/d'];
1483
+ * ```
1484
+ * @param {String} `pattern` Brace pattern
1485
+ * @param {Object} `options`
1486
+ * @return {Array} Returns an array of expanded values.
1487
+ * @api public
1488
+ */
1489
+
1490
+ braces.expand = (input, options = {}) => {
1491
+ if (typeof input === 'string') {
1492
+ input = braces.parse(input, options);
1493
+ }
1494
+
1495
+ let result = expand(input, options);
1496
+
1497
+ // filter out empty strings if specified
1498
+ if (options.noempty === true) {
1499
+ result = result.filter(Boolean);
1500
+ }
1501
+
1502
+ // filter out duplicates if specified
1503
+ if (options.nodupes === true) {
1504
+ result = [...new Set(result)];
1505
+ }
1506
+
1507
+ return result;
1508
+ };
1509
+
1510
+ /**
1511
+ * Processes a brace pattern and returns either an expanded array
1512
+ * (if `options.expand` is true), a highly optimized regex-compatible string.
1513
+ * This method is called by the main [braces](#braces) function.
1514
+ *
1515
+ * ```js
1516
+ * const braces = require('braces');
1517
+ * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))
1518
+ * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'
1519
+ * ```
1520
+ * @param {String} `pattern` Brace pattern
1521
+ * @param {Object} `options`
1522
+ * @return {Array} Returns an array of expanded values.
1523
+ * @api public
1524
+ */
1525
+
1526
+ braces.create = (input, options = {}) => {
1527
+ if (input === '' || input.length < 3) {
1528
+ return [input];
1529
+ }
1530
+
1531
+ return options.expand !== true
1532
+ ? braces.compile(input, options)
1533
+ : braces.expand(input, options);
1534
+ };
1535
+
1536
+ /**
1537
+ * Expose "braces"
1538
+ */
1539
+
1540
+ braces_1 = braces;
1541
+ return braces_1;
1542
+ }
1543
+
1544
+ var utils = {};
1545
+
1546
+ var constants;
1547
+ var hasRequiredConstants;
1548
+
1549
+ function requireConstants () {
1550
+ if (hasRequiredConstants) return constants;
1551
+ hasRequiredConstants = 1;
1552
+
1553
+ const path = require$$0__default$1.default;
1554
+ const WIN_SLASH = '\\\\/';
1555
+ const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
1556
+
1557
+ /**
1558
+ * Posix glob regex
1559
+ */
1560
+
1561
+ const DOT_LITERAL = '\\.';
1562
+ const PLUS_LITERAL = '\\+';
1563
+ const QMARK_LITERAL = '\\?';
1564
+ const SLASH_LITERAL = '\\/';
1565
+ const ONE_CHAR = '(?=.)';
1566
+ const QMARK = '[^/]';
1567
+ const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
1568
+ const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
1569
+ const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
1570
+ const NO_DOT = `(?!${DOT_LITERAL})`;
1571
+ const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
1572
+ const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
1573
+ const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
1574
+ const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
1575
+ const STAR = `${QMARK}*?`;
1576
+
1577
+ const POSIX_CHARS = {
1578
+ DOT_LITERAL,
1579
+ PLUS_LITERAL,
1580
+ QMARK_LITERAL,
1581
+ SLASH_LITERAL,
1582
+ ONE_CHAR,
1583
+ QMARK,
1584
+ END_ANCHOR,
1585
+ DOTS_SLASH,
1586
+ NO_DOT,
1587
+ NO_DOTS,
1588
+ NO_DOT_SLASH,
1589
+ NO_DOTS_SLASH,
1590
+ QMARK_NO_DOT,
1591
+ STAR,
1592
+ START_ANCHOR
1593
+ };
1594
+
1595
+ /**
1596
+ * Windows glob regex
1597
+ */
1598
+
1599
+ const WINDOWS_CHARS = {
1600
+ ...POSIX_CHARS,
1601
+
1602
+ SLASH_LITERAL: `[${WIN_SLASH}]`,
1603
+ QMARK: WIN_NO_SLASH,
1604
+ STAR: `${WIN_NO_SLASH}*?`,
1605
+ DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
1606
+ NO_DOT: `(?!${DOT_LITERAL})`,
1607
+ NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
1608
+ NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
1609
+ NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
1610
+ QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
1611
+ START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
1612
+ END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
1613
+ };
1614
+
1615
+ /**
1616
+ * POSIX Bracket Regex
1617
+ */
1618
+
1619
+ const POSIX_REGEX_SOURCE = {
1620
+ alnum: 'a-zA-Z0-9',
1621
+ alpha: 'a-zA-Z',
1622
+ ascii: '\\x00-\\x7F',
1623
+ blank: ' \\t',
1624
+ cntrl: '\\x00-\\x1F\\x7F',
1625
+ digit: '0-9',
1626
+ graph: '\\x21-\\x7E',
1627
+ lower: 'a-z',
1628
+ print: '\\x20-\\x7E ',
1629
+ punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
1630
+ space: ' \\t\\r\\n\\v\\f',
1631
+ upper: 'A-Z',
1632
+ word: 'A-Za-z0-9_',
1633
+ xdigit: 'A-Fa-f0-9'
1634
+ };
1635
+
1636
+ constants = {
1637
+ MAX_LENGTH: 1024 * 64,
1638
+ POSIX_REGEX_SOURCE,
1639
+
1640
+ // regular expressions
1641
+ REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
1642
+ REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
1643
+ REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
1644
+ REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
1645
+ REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
1646
+ REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
1647
+
1648
+ // Replace globs with equivalent patterns to reduce parsing time.
1649
+ REPLACEMENTS: {
1650
+ '***': '*',
1651
+ '**/**': '**',
1652
+ '**/**/**': '**'
1653
+ },
1654
+
1655
+ // Digits
1656
+ CHAR_0: 48, /* 0 */
1657
+ CHAR_9: 57, /* 9 */
1658
+
1659
+ // Alphabet chars.
1660
+ CHAR_UPPERCASE_A: 65, /* A */
1661
+ CHAR_LOWERCASE_A: 97, /* a */
1662
+ CHAR_UPPERCASE_Z: 90, /* Z */
1663
+ CHAR_LOWERCASE_Z: 122, /* z */
1664
+
1665
+ CHAR_LEFT_PARENTHESES: 40, /* ( */
1666
+ CHAR_RIGHT_PARENTHESES: 41, /* ) */
1667
+
1668
+ CHAR_ASTERISK: 42, /* * */
1669
+
1670
+ // Non-alphabetic chars.
1671
+ CHAR_AMPERSAND: 38, /* & */
1672
+ CHAR_AT: 64, /* @ */
1673
+ CHAR_BACKWARD_SLASH: 92, /* \ */
1674
+ CHAR_CARRIAGE_RETURN: 13, /* \r */
1675
+ CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
1676
+ CHAR_COLON: 58, /* : */
1677
+ CHAR_COMMA: 44, /* , */
1678
+ CHAR_DOT: 46, /* . */
1679
+ CHAR_DOUBLE_QUOTE: 34, /* " */
1680
+ CHAR_EQUAL: 61, /* = */
1681
+ CHAR_EXCLAMATION_MARK: 33, /* ! */
1682
+ CHAR_FORM_FEED: 12, /* \f */
1683
+ CHAR_FORWARD_SLASH: 47, /* / */
1684
+ CHAR_GRAVE_ACCENT: 96, /* ` */
1685
+ CHAR_HASH: 35, /* # */
1686
+ CHAR_HYPHEN_MINUS: 45, /* - */
1687
+ CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
1688
+ CHAR_LEFT_CURLY_BRACE: 123, /* { */
1689
+ CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
1690
+ CHAR_LINE_FEED: 10, /* \n */
1691
+ CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
1692
+ CHAR_PERCENT: 37, /* % */
1693
+ CHAR_PLUS: 43, /* + */
1694
+ CHAR_QUESTION_MARK: 63, /* ? */
1695
+ CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
1696
+ CHAR_RIGHT_CURLY_BRACE: 125, /* } */
1697
+ CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
1698
+ CHAR_SEMICOLON: 59, /* ; */
1699
+ CHAR_SINGLE_QUOTE: 39, /* ' */
1700
+ CHAR_SPACE: 32, /* */
1701
+ CHAR_TAB: 9, /* \t */
1702
+ CHAR_UNDERSCORE: 95, /* _ */
1703
+ CHAR_VERTICAL_LINE: 124, /* | */
1704
+ CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
1705
+
1706
+ SEP: path.sep,
1707
+
1708
+ /**
1709
+ * Create EXTGLOB_CHARS
1710
+ */
1711
+
1712
+ extglobChars(chars) {
1713
+ return {
1714
+ '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
1715
+ '?': { type: 'qmark', open: '(?:', close: ')?' },
1716
+ '+': { type: 'plus', open: '(?:', close: ')+' },
1717
+ '*': { type: 'star', open: '(?:', close: ')*' },
1718
+ '@': { type: 'at', open: '(?:', close: ')' }
1719
+ };
1720
+ },
1721
+
1722
+ /**
1723
+ * Create GLOB_CHARS
1724
+ */
1725
+
1726
+ globChars(win32) {
1727
+ return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
1728
+ }
1729
+ };
1730
+ return constants;
1731
+ }
1732
+
1733
+ var hasRequiredUtils;
1734
+
1735
+ function requireUtils () {
1736
+ if (hasRequiredUtils) return utils;
1737
+ hasRequiredUtils = 1;
1738
+ (function (exports) {
1739
+
1740
+ const path = require$$0__default$1.default;
1741
+ const win32 = process.platform === 'win32';
1742
+ const {
1743
+ REGEX_BACKSLASH,
1744
+ REGEX_REMOVE_BACKSLASH,
1745
+ REGEX_SPECIAL_CHARS,
1746
+ REGEX_SPECIAL_CHARS_GLOBAL
1747
+ } = requireConstants();
1748
+
1749
+ exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
1750
+ exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
1751
+ exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
1752
+ exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
1753
+ exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
1754
+
1755
+ exports.removeBackslashes = str => {
1756
+ return str.replace(REGEX_REMOVE_BACKSLASH, match => {
1757
+ return match === '\\' ? '' : match;
1758
+ });
1759
+ };
1760
+
1761
+ exports.supportsLookbehinds = () => {
1762
+ const segs = process.version.slice(1).split('.').map(Number);
1763
+ if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
1764
+ return true;
1765
+ }
1766
+ return false;
1767
+ };
1768
+
1769
+ exports.isWindows = options => {
1770
+ if (options && typeof options.windows === 'boolean') {
1771
+ return options.windows;
1772
+ }
1773
+ return win32 === true || path.sep === '\\';
1774
+ };
1775
+
1776
+ exports.escapeLast = (input, char, lastIdx) => {
1777
+ const idx = input.lastIndexOf(char, lastIdx);
1778
+ if (idx === -1) return input;
1779
+ if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
1780
+ return `${input.slice(0, idx)}\\${input.slice(idx)}`;
1781
+ };
1782
+
1783
+ exports.removePrefix = (input, state = {}) => {
1784
+ let output = input;
1785
+ if (output.startsWith('./')) {
1786
+ output = output.slice(2);
1787
+ state.prefix = './';
1788
+ }
1789
+ return output;
1790
+ };
1791
+
1792
+ exports.wrapOutput = (input, state = {}, options = {}) => {
1793
+ const prepend = options.contains ? '' : '^';
1794
+ const append = options.contains ? '' : '$';
1795
+
1796
+ let output = `${prepend}(?:${input})${append}`;
1797
+ if (state.negated === true) {
1798
+ output = `(?:^(?!${output}).*$)`;
1799
+ }
1800
+ return output;
1801
+ };
1802
+ } (utils));
1803
+ return utils;
1804
+ }
1805
+
1806
+ var scan_1;
1807
+ var hasRequiredScan;
1808
+
1809
+ function requireScan () {
1810
+ if (hasRequiredScan) return scan_1;
1811
+ hasRequiredScan = 1;
1812
+
1813
+ const utils = requireUtils();
1814
+ const {
1815
+ CHAR_ASTERISK, /* * */
1816
+ CHAR_AT, /* @ */
1817
+ CHAR_BACKWARD_SLASH, /* \ */
1818
+ CHAR_COMMA, /* , */
1819
+ CHAR_DOT, /* . */
1820
+ CHAR_EXCLAMATION_MARK, /* ! */
1821
+ CHAR_FORWARD_SLASH, /* / */
1822
+ CHAR_LEFT_CURLY_BRACE, /* { */
1823
+ CHAR_LEFT_PARENTHESES, /* ( */
1824
+ CHAR_LEFT_SQUARE_BRACKET, /* [ */
1825
+ CHAR_PLUS, /* + */
1826
+ CHAR_QUESTION_MARK, /* ? */
1827
+ CHAR_RIGHT_CURLY_BRACE, /* } */
1828
+ CHAR_RIGHT_PARENTHESES, /* ) */
1829
+ CHAR_RIGHT_SQUARE_BRACKET /* ] */
1830
+ } = requireConstants();
1831
+
1832
+ const isPathSeparator = code => {
1833
+ return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
1834
+ };
1835
+
1836
+ const depth = token => {
1837
+ if (token.isPrefix !== true) {
1838
+ token.depth = token.isGlobstar ? Infinity : 1;
1839
+ }
1840
+ };
1841
+
1842
+ /**
1843
+ * Quickly scans a glob pattern and returns an object with a handful of
1844
+ * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
1845
+ * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not
1846
+ * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).
1847
+ *
1848
+ * ```js
1849
+ * const pm = require('picomatch');
1850
+ * console.log(pm.scan('foo/bar/*.js'));
1851
+ * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
1852
+ * ```
1853
+ * @param {String} `str`
1854
+ * @param {Object} `options`
1855
+ * @return {Object} Returns an object with tokens and regex source string.
1856
+ * @api public
1857
+ */
1858
+
1859
+ const scan = (input, options) => {
1860
+ const opts = options || {};
1861
+
1862
+ const length = input.length - 1;
1863
+ const scanToEnd = opts.parts === true || opts.scanToEnd === true;
1864
+ const slashes = [];
1865
+ const tokens = [];
1866
+ const parts = [];
1867
+
1868
+ let str = input;
1869
+ let index = -1;
1870
+ let start = 0;
1871
+ let lastIndex = 0;
1872
+ let isBrace = false;
1873
+ let isBracket = false;
1874
+ let isGlob = false;
1875
+ let isExtglob = false;
1876
+ let isGlobstar = false;
1877
+ let braceEscaped = false;
1878
+ let backslashes = false;
1879
+ let negated = false;
1880
+ let negatedExtglob = false;
1881
+ let finished = false;
1882
+ let braces = 0;
1883
+ let prev;
1884
+ let code;
1885
+ let token = { value: '', depth: 0, isGlob: false };
1886
+
1887
+ const eos = () => index >= length;
1888
+ const peek = () => str.charCodeAt(index + 1);
1889
+ const advance = () => {
1890
+ prev = code;
1891
+ return str.charCodeAt(++index);
1892
+ };
1893
+
1894
+ while (index < length) {
1895
+ code = advance();
1896
+ let next;
1897
+
1898
+ if (code === CHAR_BACKWARD_SLASH) {
1899
+ backslashes = token.backslashes = true;
1900
+ code = advance();
1901
+
1902
+ if (code === CHAR_LEFT_CURLY_BRACE) {
1903
+ braceEscaped = true;
1904
+ }
1905
+ continue;
1906
+ }
1907
+
1908
+ if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
1909
+ braces++;
1910
+
1911
+ while (eos() !== true && (code = advance())) {
1912
+ if (code === CHAR_BACKWARD_SLASH) {
1913
+ backslashes = token.backslashes = true;
1914
+ advance();
1915
+ continue;
1916
+ }
1917
+
1918
+ if (code === CHAR_LEFT_CURLY_BRACE) {
1919
+ braces++;
1920
+ continue;
1921
+ }
1922
+
1923
+ if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
1924
+ isBrace = token.isBrace = true;
1925
+ isGlob = token.isGlob = true;
1926
+ finished = true;
1927
+
1928
+ if (scanToEnd === true) {
1929
+ continue;
1930
+ }
1931
+
1932
+ break;
1933
+ }
1934
+
1935
+ if (braceEscaped !== true && code === CHAR_COMMA) {
1936
+ isBrace = token.isBrace = true;
1937
+ isGlob = token.isGlob = true;
1938
+ finished = true;
1939
+
1940
+ if (scanToEnd === true) {
1941
+ continue;
1942
+ }
1943
+
1944
+ break;
1945
+ }
1946
+
1947
+ if (code === CHAR_RIGHT_CURLY_BRACE) {
1948
+ braces--;
1949
+
1950
+ if (braces === 0) {
1951
+ braceEscaped = false;
1952
+ isBrace = token.isBrace = true;
1953
+ finished = true;
1954
+ break;
1955
+ }
1956
+ }
1957
+ }
1958
+
1959
+ if (scanToEnd === true) {
1960
+ continue;
1961
+ }
1962
+
1963
+ break;
1964
+ }
1965
+
1966
+ if (code === CHAR_FORWARD_SLASH) {
1967
+ slashes.push(index);
1968
+ tokens.push(token);
1969
+ token = { value: '', depth: 0, isGlob: false };
1970
+
1971
+ if (finished === true) continue;
1972
+ if (prev === CHAR_DOT && index === (start + 1)) {
1973
+ start += 2;
1974
+ continue;
1975
+ }
1976
+
1977
+ lastIndex = index + 1;
1978
+ continue;
1979
+ }
1980
+
1981
+ if (opts.noext !== true) {
1982
+ const isExtglobChar = code === CHAR_PLUS
1983
+ || code === CHAR_AT
1984
+ || code === CHAR_ASTERISK
1985
+ || code === CHAR_QUESTION_MARK
1986
+ || code === CHAR_EXCLAMATION_MARK;
1987
+
1988
+ if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
1989
+ isGlob = token.isGlob = true;
1990
+ isExtglob = token.isExtglob = true;
1991
+ finished = true;
1992
+ if (code === CHAR_EXCLAMATION_MARK && index === start) {
1993
+ negatedExtglob = true;
1994
+ }
1995
+
1996
+ if (scanToEnd === true) {
1997
+ while (eos() !== true && (code = advance())) {
1998
+ if (code === CHAR_BACKWARD_SLASH) {
1999
+ backslashes = token.backslashes = true;
2000
+ code = advance();
2001
+ continue;
2002
+ }
2003
+
2004
+ if (code === CHAR_RIGHT_PARENTHESES) {
2005
+ isGlob = token.isGlob = true;
2006
+ finished = true;
2007
+ break;
2008
+ }
2009
+ }
2010
+ continue;
2011
+ }
2012
+ break;
2013
+ }
2014
+ }
2015
+
2016
+ if (code === CHAR_ASTERISK) {
2017
+ if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
2018
+ isGlob = token.isGlob = true;
2019
+ finished = true;
2020
+
2021
+ if (scanToEnd === true) {
2022
+ continue;
2023
+ }
2024
+ break;
2025
+ }
2026
+
2027
+ if (code === CHAR_QUESTION_MARK) {
2028
+ isGlob = token.isGlob = true;
2029
+ finished = true;
2030
+
2031
+ if (scanToEnd === true) {
2032
+ continue;
2033
+ }
2034
+ break;
2035
+ }
2036
+
2037
+ if (code === CHAR_LEFT_SQUARE_BRACKET) {
2038
+ while (eos() !== true && (next = advance())) {
2039
+ if (next === CHAR_BACKWARD_SLASH) {
2040
+ backslashes = token.backslashes = true;
2041
+ advance();
2042
+ continue;
2043
+ }
2044
+
2045
+ if (next === CHAR_RIGHT_SQUARE_BRACKET) {
2046
+ isBracket = token.isBracket = true;
2047
+ isGlob = token.isGlob = true;
2048
+ finished = true;
2049
+ break;
2050
+ }
2051
+ }
2052
+
2053
+ if (scanToEnd === true) {
2054
+ continue;
2055
+ }
2056
+
2057
+ break;
2058
+ }
2059
+
2060
+ if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
2061
+ negated = token.negated = true;
2062
+ start++;
2063
+ continue;
2064
+ }
2065
+
2066
+ if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
2067
+ isGlob = token.isGlob = true;
2068
+
2069
+ if (scanToEnd === true) {
2070
+ while (eos() !== true && (code = advance())) {
2071
+ if (code === CHAR_LEFT_PARENTHESES) {
2072
+ backslashes = token.backslashes = true;
2073
+ code = advance();
2074
+ continue;
2075
+ }
2076
+
2077
+ if (code === CHAR_RIGHT_PARENTHESES) {
2078
+ finished = true;
2079
+ break;
2080
+ }
2081
+ }
2082
+ continue;
2083
+ }
2084
+ break;
2085
+ }
2086
+
2087
+ if (isGlob === true) {
2088
+ finished = true;
2089
+
2090
+ if (scanToEnd === true) {
2091
+ continue;
2092
+ }
2093
+
2094
+ break;
2095
+ }
2096
+ }
2097
+
2098
+ if (opts.noext === true) {
2099
+ isExtglob = false;
2100
+ isGlob = false;
2101
+ }
2102
+
2103
+ let base = str;
2104
+ let prefix = '';
2105
+ let glob = '';
2106
+
2107
+ if (start > 0) {
2108
+ prefix = str.slice(0, start);
2109
+ str = str.slice(start);
2110
+ lastIndex -= start;
2111
+ }
2112
+
2113
+ if (base && isGlob === true && lastIndex > 0) {
2114
+ base = str.slice(0, lastIndex);
2115
+ glob = str.slice(lastIndex);
2116
+ } else if (isGlob === true) {
2117
+ base = '';
2118
+ glob = str;
2119
+ } else {
2120
+ base = str;
2121
+ }
2122
+
2123
+ if (base && base !== '' && base !== '/' && base !== str) {
2124
+ if (isPathSeparator(base.charCodeAt(base.length - 1))) {
2125
+ base = base.slice(0, -1);
2126
+ }
2127
+ }
2128
+
2129
+ if (opts.unescape === true) {
2130
+ if (glob) glob = utils.removeBackslashes(glob);
2131
+
2132
+ if (base && backslashes === true) {
2133
+ base = utils.removeBackslashes(base);
2134
+ }
2135
+ }
2136
+
2137
+ const state = {
2138
+ prefix,
2139
+ input,
2140
+ start,
2141
+ base,
2142
+ glob,
2143
+ isBrace,
2144
+ isBracket,
2145
+ isGlob,
2146
+ isExtglob,
2147
+ isGlobstar,
2148
+ negated,
2149
+ negatedExtglob
2150
+ };
2151
+
2152
+ if (opts.tokens === true) {
2153
+ state.maxDepth = 0;
2154
+ if (!isPathSeparator(code)) {
2155
+ tokens.push(token);
2156
+ }
2157
+ state.tokens = tokens;
2158
+ }
2159
+
2160
+ if (opts.parts === true || opts.tokens === true) {
2161
+ let prevIndex;
2162
+
2163
+ for (let idx = 0; idx < slashes.length; idx++) {
2164
+ const n = prevIndex ? prevIndex + 1 : start;
2165
+ const i = slashes[idx];
2166
+ const value = input.slice(n, i);
2167
+ if (opts.tokens) {
2168
+ if (idx === 0 && start !== 0) {
2169
+ tokens[idx].isPrefix = true;
2170
+ tokens[idx].value = prefix;
2171
+ } else {
2172
+ tokens[idx].value = value;
2173
+ }
2174
+ depth(tokens[idx]);
2175
+ state.maxDepth += tokens[idx].depth;
2176
+ }
2177
+ if (idx !== 0 || value !== '') {
2178
+ parts.push(value);
2179
+ }
2180
+ prevIndex = i;
2181
+ }
2182
+
2183
+ if (prevIndex && prevIndex + 1 < input.length) {
2184
+ const value = input.slice(prevIndex + 1);
2185
+ parts.push(value);
2186
+
2187
+ if (opts.tokens) {
2188
+ tokens[tokens.length - 1].value = value;
2189
+ depth(tokens[tokens.length - 1]);
2190
+ state.maxDepth += tokens[tokens.length - 1].depth;
2191
+ }
2192
+ }
2193
+
2194
+ state.slashes = slashes;
2195
+ state.parts = parts;
2196
+ }
2197
+
2198
+ return state;
2199
+ };
2200
+
2201
+ scan_1 = scan;
2202
+ return scan_1;
2203
+ }
2204
+
2205
+ var parse_1;
2206
+ var hasRequiredParse;
2207
+
2208
+ function requireParse () {
2209
+ if (hasRequiredParse) return parse_1;
2210
+ hasRequiredParse = 1;
2211
+
2212
+ const constants = requireConstants();
2213
+ const utils = requireUtils();
2214
+
2215
+ /**
2216
+ * Constants
2217
+ */
2218
+
2219
+ const {
2220
+ MAX_LENGTH,
2221
+ POSIX_REGEX_SOURCE,
2222
+ REGEX_NON_SPECIAL_CHARS,
2223
+ REGEX_SPECIAL_CHARS_BACKREF,
2224
+ REPLACEMENTS
2225
+ } = constants;
2226
+
2227
+ /**
2228
+ * Helpers
2229
+ */
2230
+
2231
+ const expandRange = (args, options) => {
2232
+ if (typeof options.expandRange === 'function') {
2233
+ return options.expandRange(...args, options);
2234
+ }
2235
+
2236
+ args.sort();
2237
+ const value = `[${args.join('-')}]`;
2238
+
2239
+ try {
2240
+ /* eslint-disable-next-line no-new */
2241
+ new RegExp(value);
2242
+ } catch (ex) {
2243
+ return args.map(v => utils.escapeRegex(v)).join('..');
2244
+ }
2245
+
2246
+ return value;
2247
+ };
2248
+
2249
+ /**
2250
+ * Create the message for a syntax error
2251
+ */
2252
+
2253
+ const syntaxError = (type, char) => {
2254
+ return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
2255
+ };
2256
+
2257
+ /**
2258
+ * Parse the given input string.
2259
+ * @param {String} input
2260
+ * @param {Object} options
2261
+ * @return {Object}
2262
+ */
2263
+
2264
+ const parse = (input, options) => {
2265
+ if (typeof input !== 'string') {
2266
+ throw new TypeError('Expected a string');
2267
+ }
2268
+
2269
+ input = REPLACEMENTS[input] || input;
2270
+
2271
+ const opts = { ...options };
2272
+ const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
2273
+
2274
+ let len = input.length;
2275
+ if (len > max) {
2276
+ throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
2277
+ }
2278
+
2279
+ const bos = { type: 'bos', value: '', output: opts.prepend || '' };
2280
+ const tokens = [bos];
2281
+
2282
+ const capture = opts.capture ? '' : '?:';
2283
+ const win32 = utils.isWindows(options);
2284
+
2285
+ // create constants based on platform, for windows or posix
2286
+ const PLATFORM_CHARS = constants.globChars(win32);
2287
+ const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
2288
+
2289
+ const {
2290
+ DOT_LITERAL,
2291
+ PLUS_LITERAL,
2292
+ SLASH_LITERAL,
2293
+ ONE_CHAR,
2294
+ DOTS_SLASH,
2295
+ NO_DOT,
2296
+ NO_DOT_SLASH,
2297
+ NO_DOTS_SLASH,
2298
+ QMARK,
2299
+ QMARK_NO_DOT,
2300
+ STAR,
2301
+ START_ANCHOR
2302
+ } = PLATFORM_CHARS;
2303
+
2304
+ const globstar = opts => {
2305
+ return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
2306
+ };
2307
+
2308
+ const nodot = opts.dot ? '' : NO_DOT;
2309
+ const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
2310
+ let star = opts.bash === true ? globstar(opts) : STAR;
2311
+
2312
+ if (opts.capture) {
2313
+ star = `(${star})`;
2314
+ }
2315
+
2316
+ // minimatch options support
2317
+ if (typeof opts.noext === 'boolean') {
2318
+ opts.noextglob = opts.noext;
2319
+ }
2320
+
2321
+ const state = {
2322
+ input,
2323
+ index: -1,
2324
+ start: 0,
2325
+ dot: opts.dot === true,
2326
+ consumed: '',
2327
+ output: '',
2328
+ prefix: '',
2329
+ backtrack: false,
2330
+ negated: false,
2331
+ brackets: 0,
2332
+ braces: 0,
2333
+ parens: 0,
2334
+ quotes: 0,
2335
+ globstar: false,
2336
+ tokens
2337
+ };
2338
+
2339
+ input = utils.removePrefix(input, state);
2340
+ len = input.length;
2341
+
2342
+ const extglobs = [];
2343
+ const braces = [];
2344
+ const stack = [];
2345
+ let prev = bos;
2346
+ let value;
2347
+
2348
+ /**
2349
+ * Tokenizing helpers
2350
+ */
2351
+
2352
+ const eos = () => state.index === len - 1;
2353
+ const peek = state.peek = (n = 1) => input[state.index + n];
2354
+ const advance = state.advance = () => input[++state.index] || '';
2355
+ const remaining = () => input.slice(state.index + 1);
2356
+ const consume = (value = '', num = 0) => {
2357
+ state.consumed += value;
2358
+ state.index += num;
2359
+ };
2360
+
2361
+ const append = token => {
2362
+ state.output += token.output != null ? token.output : token.value;
2363
+ consume(token.value);
2364
+ };
2365
+
2366
+ const negate = () => {
2367
+ let count = 1;
2368
+
2369
+ while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
2370
+ advance();
2371
+ state.start++;
2372
+ count++;
2373
+ }
2374
+
2375
+ if (count % 2 === 0) {
2376
+ return false;
2377
+ }
2378
+
2379
+ state.negated = true;
2380
+ state.start++;
2381
+ return true;
2382
+ };
2383
+
2384
+ const increment = type => {
2385
+ state[type]++;
2386
+ stack.push(type);
2387
+ };
2388
+
2389
+ const decrement = type => {
2390
+ state[type]--;
2391
+ stack.pop();
2392
+ };
2393
+
2394
+ /**
2395
+ * Push tokens onto the tokens array. This helper speeds up
2396
+ * tokenizing by 1) helping us avoid backtracking as much as possible,
2397
+ * and 2) helping us avoid creating extra tokens when consecutive
2398
+ * characters are plain text. This improves performance and simplifies
2399
+ * lookbehinds.
2400
+ */
2401
+
2402
+ const push = tok => {
2403
+ if (prev.type === 'globstar') {
2404
+ const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
2405
+ const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));
2406
+
2407
+ if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
2408
+ state.output = state.output.slice(0, -prev.output.length);
2409
+ prev.type = 'star';
2410
+ prev.value = '*';
2411
+ prev.output = star;
2412
+ state.output += prev.output;
2413
+ }
2414
+ }
2415
+
2416
+ if (extglobs.length && tok.type !== 'paren') {
2417
+ extglobs[extglobs.length - 1].inner += tok.value;
2418
+ }
2419
+
2420
+ if (tok.value || tok.output) append(tok);
2421
+ if (prev && prev.type === 'text' && tok.type === 'text') {
2422
+ prev.value += tok.value;
2423
+ prev.output = (prev.output || '') + tok.value;
2424
+ return;
2425
+ }
2426
+
2427
+ tok.prev = prev;
2428
+ tokens.push(tok);
2429
+ prev = tok;
2430
+ };
2431
+
2432
+ const extglobOpen = (type, value) => {
2433
+ const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
2434
+
2435
+ token.prev = prev;
2436
+ token.parens = state.parens;
2437
+ token.output = state.output;
2438
+ const output = (opts.capture ? '(' : '') + token.open;
2439
+
2440
+ increment('parens');
2441
+ push({ type, value, output: state.output ? '' : ONE_CHAR });
2442
+ push({ type: 'paren', extglob: true, value: advance(), output });
2443
+ extglobs.push(token);
2444
+ };
2445
+
2446
+ const extglobClose = token => {
2447
+ let output = token.close + (opts.capture ? ')' : '');
2448
+ let rest;
2449
+
2450
+ if (token.type === 'negate') {
2451
+ let extglobStar = star;
2452
+
2453
+ if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
2454
+ extglobStar = globstar(opts);
2455
+ }
2456
+
2457
+ if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
2458
+ output = token.close = `)$))${extglobStar}`;
2459
+ }
2460
+
2461
+ if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) {
2462
+ // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.
2463
+ // In this case, we need to parse the string and use it in the output of the original pattern.
2464
+ // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.
2465
+ //
2466
+ // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.
2467
+ const expression = parse(rest, { ...options, fastpaths: false }).output;
2468
+
2469
+ output = token.close = `)${expression})${extglobStar})`;
2470
+ }
2471
+
2472
+ if (token.prev.type === 'bos') {
2473
+ state.negatedExtglob = true;
2474
+ }
2475
+ }
2476
+
2477
+ push({ type: 'paren', extglob: true, value, output });
2478
+ decrement('parens');
2479
+ };
2480
+
2481
+ /**
2482
+ * Fast paths
2483
+ */
2484
+
2485
+ if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
2486
+ let backslashes = false;
2487
+
2488
+ let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
2489
+ if (first === '\\') {
2490
+ backslashes = true;
2491
+ return m;
2492
+ }
2493
+
2494
+ if (first === '?') {
2495
+ if (esc) {
2496
+ return esc + first + (rest ? QMARK.repeat(rest.length) : '');
2497
+ }
2498
+ if (index === 0) {
2499
+ return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
2500
+ }
2501
+ return QMARK.repeat(chars.length);
2502
+ }
2503
+
2504
+ if (first === '.') {
2505
+ return DOT_LITERAL.repeat(chars.length);
2506
+ }
2507
+
2508
+ if (first === '*') {
2509
+ if (esc) {
2510
+ return esc + first + (rest ? star : '');
2511
+ }
2512
+ return star;
2513
+ }
2514
+ return esc ? m : `\\${m}`;
2515
+ });
2516
+
2517
+ if (backslashes === true) {
2518
+ if (opts.unescape === true) {
2519
+ output = output.replace(/\\/g, '');
2520
+ } else {
2521
+ output = output.replace(/\\+/g, m => {
2522
+ return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
2523
+ });
2524
+ }
2525
+ }
2526
+
2527
+ if (output === input && opts.contains === true) {
2528
+ state.output = input;
2529
+ return state;
2530
+ }
2531
+
2532
+ state.output = utils.wrapOutput(output, state, options);
2533
+ return state;
2534
+ }
2535
+
2536
+ /**
2537
+ * Tokenize input until we reach end-of-string
2538
+ */
2539
+
2540
+ while (!eos()) {
2541
+ value = advance();
2542
+
2543
+ if (value === '\u0000') {
2544
+ continue;
2545
+ }
2546
+
2547
+ /**
2548
+ * Escaped characters
2549
+ */
2550
+
2551
+ if (value === '\\') {
2552
+ const next = peek();
2553
+
2554
+ if (next === '/' && opts.bash !== true) {
2555
+ continue;
2556
+ }
2557
+
2558
+ if (next === '.' || next === ';') {
2559
+ continue;
2560
+ }
2561
+
2562
+ if (!next) {
2563
+ value += '\\';
2564
+ push({ type: 'text', value });
2565
+ continue;
2566
+ }
2567
+
2568
+ // collapse slashes to reduce potential for exploits
2569
+ const match = /^\\+/.exec(remaining());
2570
+ let slashes = 0;
2571
+
2572
+ if (match && match[0].length > 2) {
2573
+ slashes = match[0].length;
2574
+ state.index += slashes;
2575
+ if (slashes % 2 !== 0) {
2576
+ value += '\\';
2577
+ }
2578
+ }
2579
+
2580
+ if (opts.unescape === true) {
2581
+ value = advance();
2582
+ } else {
2583
+ value += advance();
2584
+ }
2585
+
2586
+ if (state.brackets === 0) {
2587
+ push({ type: 'text', value });
2588
+ continue;
2589
+ }
2590
+ }
2591
+
2592
+ /**
2593
+ * If we're inside a regex character class, continue
2594
+ * until we reach the closing bracket.
2595
+ */
2596
+
2597
+ if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
2598
+ if (opts.posix !== false && value === ':') {
2599
+ const inner = prev.value.slice(1);
2600
+ if (inner.includes('[')) {
2601
+ prev.posix = true;
2602
+
2603
+ if (inner.includes(':')) {
2604
+ const idx = prev.value.lastIndexOf('[');
2605
+ const pre = prev.value.slice(0, idx);
2606
+ const rest = prev.value.slice(idx + 2);
2607
+ const posix = POSIX_REGEX_SOURCE[rest];
2608
+ if (posix) {
2609
+ prev.value = pre + posix;
2610
+ state.backtrack = true;
2611
+ advance();
2612
+
2613
+ if (!bos.output && tokens.indexOf(prev) === 1) {
2614
+ bos.output = ONE_CHAR;
2615
+ }
2616
+ continue;
2617
+ }
2618
+ }
2619
+ }
2620
+ }
2621
+
2622
+ if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
2623
+ value = `\\${value}`;
2624
+ }
2625
+
2626
+ if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
2627
+ value = `\\${value}`;
2628
+ }
2629
+
2630
+ if (opts.posix === true && value === '!' && prev.value === '[') {
2631
+ value = '^';
2632
+ }
2633
+
2634
+ prev.value += value;
2635
+ append({ value });
2636
+ continue;
2637
+ }
2638
+
2639
+ /**
2640
+ * If we're inside a quoted string, continue
2641
+ * until we reach the closing double quote.
2642
+ */
2643
+
2644
+ if (state.quotes === 1 && value !== '"') {
2645
+ value = utils.escapeRegex(value);
2646
+ prev.value += value;
2647
+ append({ value });
2648
+ continue;
2649
+ }
2650
+
2651
+ /**
2652
+ * Double quotes
2653
+ */
2654
+
2655
+ if (value === '"') {
2656
+ state.quotes = state.quotes === 1 ? 0 : 1;
2657
+ if (opts.keepQuotes === true) {
2658
+ push({ type: 'text', value });
2659
+ }
2660
+ continue;
2661
+ }
2662
+
2663
+ /**
2664
+ * Parentheses
2665
+ */
2666
+
2667
+ if (value === '(') {
2668
+ increment('parens');
2669
+ push({ type: 'paren', value });
2670
+ continue;
2671
+ }
2672
+
2673
+ if (value === ')') {
2674
+ if (state.parens === 0 && opts.strictBrackets === true) {
2675
+ throw new SyntaxError(syntaxError('opening', '('));
2676
+ }
2677
+
2678
+ const extglob = extglobs[extglobs.length - 1];
2679
+ if (extglob && state.parens === extglob.parens + 1) {
2680
+ extglobClose(extglobs.pop());
2681
+ continue;
2682
+ }
2683
+
2684
+ push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
2685
+ decrement('parens');
2686
+ continue;
2687
+ }
2688
+
2689
+ /**
2690
+ * Square brackets
2691
+ */
2692
+
2693
+ if (value === '[') {
2694
+ if (opts.nobracket === true || !remaining().includes(']')) {
2695
+ if (opts.nobracket !== true && opts.strictBrackets === true) {
2696
+ throw new SyntaxError(syntaxError('closing', ']'));
2697
+ }
2698
+
2699
+ value = `\\${value}`;
2700
+ } else {
2701
+ increment('brackets');
2702
+ }
2703
+
2704
+ push({ type: 'bracket', value });
2705
+ continue;
2706
+ }
2707
+
2708
+ if (value === ']') {
2709
+ if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
2710
+ push({ type: 'text', value, output: `\\${value}` });
2711
+ continue;
2712
+ }
2713
+
2714
+ if (state.brackets === 0) {
2715
+ if (opts.strictBrackets === true) {
2716
+ throw new SyntaxError(syntaxError('opening', '['));
2717
+ }
2718
+
2719
+ push({ type: 'text', value, output: `\\${value}` });
2720
+ continue;
2721
+ }
2722
+
2723
+ decrement('brackets');
2724
+
2725
+ const prevValue = prev.value.slice(1);
2726
+ if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
2727
+ value = `/${value}`;
2728
+ }
2729
+
2730
+ prev.value += value;
2731
+ append({ value });
2732
+
2733
+ // when literal brackets are explicitly disabled
2734
+ // assume we should match with a regex character class
2735
+ if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
2736
+ continue;
2737
+ }
2738
+
2739
+ const escaped = utils.escapeRegex(prev.value);
2740
+ state.output = state.output.slice(0, -prev.value.length);
2741
+
2742
+ // when literal brackets are explicitly enabled
2743
+ // assume we should escape the brackets to match literal characters
2744
+ if (opts.literalBrackets === true) {
2745
+ state.output += escaped;
2746
+ prev.value = escaped;
2747
+ continue;
2748
+ }
2749
+
2750
+ // when the user specifies nothing, try to match both
2751
+ prev.value = `(${capture}${escaped}|${prev.value})`;
2752
+ state.output += prev.value;
2753
+ continue;
2754
+ }
2755
+
2756
+ /**
2757
+ * Braces
2758
+ */
2759
+
2760
+ if (value === '{' && opts.nobrace !== true) {
2761
+ increment('braces');
2762
+
2763
+ const open = {
2764
+ type: 'brace',
2765
+ value,
2766
+ output: '(',
2767
+ outputIndex: state.output.length,
2768
+ tokensIndex: state.tokens.length
2769
+ };
2770
+
2771
+ braces.push(open);
2772
+ push(open);
2773
+ continue;
2774
+ }
2775
+
2776
+ if (value === '}') {
2777
+ const brace = braces[braces.length - 1];
2778
+
2779
+ if (opts.nobrace === true || !brace) {
2780
+ push({ type: 'text', value, output: value });
2781
+ continue;
2782
+ }
2783
+
2784
+ let output = ')';
2785
+
2786
+ if (brace.dots === true) {
2787
+ const arr = tokens.slice();
2788
+ const range = [];
2789
+
2790
+ for (let i = arr.length - 1; i >= 0; i--) {
2791
+ tokens.pop();
2792
+ if (arr[i].type === 'brace') {
2793
+ break;
2794
+ }
2795
+ if (arr[i].type !== 'dots') {
2796
+ range.unshift(arr[i].value);
2797
+ }
2798
+ }
2799
+
2800
+ output = expandRange(range, opts);
2801
+ state.backtrack = true;
2802
+ }
2803
+
2804
+ if (brace.comma !== true && brace.dots !== true) {
2805
+ const out = state.output.slice(0, brace.outputIndex);
2806
+ const toks = state.tokens.slice(brace.tokensIndex);
2807
+ brace.value = brace.output = '\\{';
2808
+ value = output = '\\}';
2809
+ state.output = out;
2810
+ for (const t of toks) {
2811
+ state.output += (t.output || t.value);
2812
+ }
2813
+ }
2814
+
2815
+ push({ type: 'brace', value, output });
2816
+ decrement('braces');
2817
+ braces.pop();
2818
+ continue;
2819
+ }
2820
+
2821
+ /**
2822
+ * Pipes
2823
+ */
2824
+
2825
+ if (value === '|') {
2826
+ if (extglobs.length > 0) {
2827
+ extglobs[extglobs.length - 1].conditions++;
2828
+ }
2829
+ push({ type: 'text', value });
2830
+ continue;
2831
+ }
2832
+
2833
+ /**
2834
+ * Commas
2835
+ */
2836
+
2837
+ if (value === ',') {
2838
+ let output = value;
2839
+
2840
+ const brace = braces[braces.length - 1];
2841
+ if (brace && stack[stack.length - 1] === 'braces') {
2842
+ brace.comma = true;
2843
+ output = '|';
2844
+ }
2845
+
2846
+ push({ type: 'comma', value, output });
2847
+ continue;
2848
+ }
2849
+
2850
+ /**
2851
+ * Slashes
2852
+ */
2853
+
2854
+ if (value === '/') {
2855
+ // if the beginning of the glob is "./", advance the start
2856
+ // to the current index, and don't add the "./" characters
2857
+ // to the state. This greatly simplifies lookbehinds when
2858
+ // checking for BOS characters like "!" and "." (not "./")
2859
+ if (prev.type === 'dot' && state.index === state.start + 1) {
2860
+ state.start = state.index + 1;
2861
+ state.consumed = '';
2862
+ state.output = '';
2863
+ tokens.pop();
2864
+ prev = bos; // reset "prev" to the first token
2865
+ continue;
2866
+ }
2867
+
2868
+ push({ type: 'slash', value, output: SLASH_LITERAL });
2869
+ continue;
2870
+ }
2871
+
2872
+ /**
2873
+ * Dots
2874
+ */
2875
+
2876
+ if (value === '.') {
2877
+ if (state.braces > 0 && prev.type === 'dot') {
2878
+ if (prev.value === '.') prev.output = DOT_LITERAL;
2879
+ const brace = braces[braces.length - 1];
2880
+ prev.type = 'dots';
2881
+ prev.output += value;
2882
+ prev.value += value;
2883
+ brace.dots = true;
2884
+ continue;
2885
+ }
2886
+
2887
+ if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
2888
+ push({ type: 'text', value, output: DOT_LITERAL });
2889
+ continue;
2890
+ }
2891
+
2892
+ push({ type: 'dot', value, output: DOT_LITERAL });
2893
+ continue;
2894
+ }
2895
+
2896
+ /**
2897
+ * Question marks
2898
+ */
2899
+
2900
+ if (value === '?') {
2901
+ const isGroup = prev && prev.value === '(';
2902
+ if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
2903
+ extglobOpen('qmark', value);
2904
+ continue;
2905
+ }
2906
+
2907
+ if (prev && prev.type === 'paren') {
2908
+ const next = peek();
2909
+ let output = value;
2910
+
2911
+ if (next === '<' && !utils.supportsLookbehinds()) {
2912
+ throw new Error('Node.js v10 or higher is required for regex lookbehinds');
2913
+ }
2914
+
2915
+ if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
2916
+ output = `\\${value}`;
2917
+ }
2918
+
2919
+ push({ type: 'text', value, output });
2920
+ continue;
2921
+ }
2922
+
2923
+ if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
2924
+ push({ type: 'qmark', value, output: QMARK_NO_DOT });
2925
+ continue;
2926
+ }
2927
+
2928
+ push({ type: 'qmark', value, output: QMARK });
2929
+ continue;
2930
+ }
2931
+
2932
+ /**
2933
+ * Exclamation
2934
+ */
2935
+
2936
+ if (value === '!') {
2937
+ if (opts.noextglob !== true && peek() === '(') {
2938
+ if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
2939
+ extglobOpen('negate', value);
2940
+ continue;
2941
+ }
2942
+ }
2943
+
2944
+ if (opts.nonegate !== true && state.index === 0) {
2945
+ negate();
2946
+ continue;
2947
+ }
2948
+ }
2949
+
2950
+ /**
2951
+ * Plus
2952
+ */
2953
+
2954
+ if (value === '+') {
2955
+ if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
2956
+ extglobOpen('plus', value);
2957
+ continue;
2958
+ }
2959
+
2960
+ if ((prev && prev.value === '(') || opts.regex === false) {
2961
+ push({ type: 'plus', value, output: PLUS_LITERAL });
2962
+ continue;
2963
+ }
2964
+
2965
+ if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
2966
+ push({ type: 'plus', value });
2967
+ continue;
2968
+ }
2969
+
2970
+ push({ type: 'plus', value: PLUS_LITERAL });
2971
+ continue;
2972
+ }
2973
+
2974
+ /**
2975
+ * Plain text
2976
+ */
2977
+
2978
+ if (value === '@') {
2979
+ if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
2980
+ push({ type: 'at', extglob: true, value, output: '' });
2981
+ continue;
2982
+ }
2983
+
2984
+ push({ type: 'text', value });
2985
+ continue;
2986
+ }
2987
+
2988
+ /**
2989
+ * Plain text
2990
+ */
2991
+
2992
+ if (value !== '*') {
2993
+ if (value === '$' || value === '^') {
2994
+ value = `\\${value}`;
2995
+ }
2996
+
2997
+ const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
2998
+ if (match) {
2999
+ value += match[0];
3000
+ state.index += match[0].length;
3001
+ }
3002
+
3003
+ push({ type: 'text', value });
3004
+ continue;
3005
+ }
3006
+
3007
+ /**
3008
+ * Stars
3009
+ */
3010
+
3011
+ if (prev && (prev.type === 'globstar' || prev.star === true)) {
3012
+ prev.type = 'star';
3013
+ prev.star = true;
3014
+ prev.value += value;
3015
+ prev.output = star;
3016
+ state.backtrack = true;
3017
+ state.globstar = true;
3018
+ consume(value);
3019
+ continue;
3020
+ }
3021
+
3022
+ let rest = remaining();
3023
+ if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
3024
+ extglobOpen('star', value);
3025
+ continue;
3026
+ }
3027
+
3028
+ if (prev.type === 'star') {
3029
+ if (opts.noglobstar === true) {
3030
+ consume(value);
3031
+ continue;
3032
+ }
3033
+
3034
+ const prior = prev.prev;
3035
+ const before = prior.prev;
3036
+ const isStart = prior.type === 'slash' || prior.type === 'bos';
3037
+ const afterStar = before && (before.type === 'star' || before.type === 'globstar');
3038
+
3039
+ if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
3040
+ push({ type: 'star', value, output: '' });
3041
+ continue;
3042
+ }
3043
+
3044
+ const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
3045
+ const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
3046
+ if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
3047
+ push({ type: 'star', value, output: '' });
3048
+ continue;
3049
+ }
3050
+
3051
+ // strip consecutive `/**/`
3052
+ while (rest.slice(0, 3) === '/**') {
3053
+ const after = input[state.index + 4];
3054
+ if (after && after !== '/') {
3055
+ break;
3056
+ }
3057
+ rest = rest.slice(3);
3058
+ consume('/**', 3);
3059
+ }
3060
+
3061
+ if (prior.type === 'bos' && eos()) {
3062
+ prev.type = 'globstar';
3063
+ prev.value += value;
3064
+ prev.output = globstar(opts);
3065
+ state.output = prev.output;
3066
+ state.globstar = true;
3067
+ consume(value);
3068
+ continue;
3069
+ }
3070
+
3071
+ if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
3072
+ state.output = state.output.slice(0, -(prior.output + prev.output).length);
3073
+ prior.output = `(?:${prior.output}`;
3074
+
3075
+ prev.type = 'globstar';
3076
+ prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');
3077
+ prev.value += value;
3078
+ state.globstar = true;
3079
+ state.output += prior.output + prev.output;
3080
+ consume(value);
3081
+ continue;
3082
+ }
3083
+
3084
+ if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
3085
+ const end = rest[1] !== void 0 ? '|$' : '';
3086
+
3087
+ state.output = state.output.slice(0, -(prior.output + prev.output).length);
3088
+ prior.output = `(?:${prior.output}`;
3089
+
3090
+ prev.type = 'globstar';
3091
+ prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
3092
+ prev.value += value;
3093
+
3094
+ state.output += prior.output + prev.output;
3095
+ state.globstar = true;
3096
+
3097
+ consume(value + advance());
3098
+
3099
+ push({ type: 'slash', value: '/', output: '' });
3100
+ continue;
3101
+ }
3102
+
3103
+ if (prior.type === 'bos' && rest[0] === '/') {
3104
+ prev.type = 'globstar';
3105
+ prev.value += value;
3106
+ prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
3107
+ state.output = prev.output;
3108
+ state.globstar = true;
3109
+ consume(value + advance());
3110
+ push({ type: 'slash', value: '/', output: '' });
3111
+ continue;
3112
+ }
3113
+
3114
+ // remove single star from output
3115
+ state.output = state.output.slice(0, -prev.output.length);
3116
+
3117
+ // reset previous token to globstar
3118
+ prev.type = 'globstar';
3119
+ prev.output = globstar(opts);
3120
+ prev.value += value;
3121
+
3122
+ // reset output with globstar
3123
+ state.output += prev.output;
3124
+ state.globstar = true;
3125
+ consume(value);
3126
+ continue;
3127
+ }
3128
+
3129
+ const token = { type: 'star', value, output: star };
3130
+
3131
+ if (opts.bash === true) {
3132
+ token.output = '.*?';
3133
+ if (prev.type === 'bos' || prev.type === 'slash') {
3134
+ token.output = nodot + token.output;
3135
+ }
3136
+ push(token);
3137
+ continue;
3138
+ }
3139
+
3140
+ if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
3141
+ token.output = value;
3142
+ push(token);
3143
+ continue;
3144
+ }
3145
+
3146
+ if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
3147
+ if (prev.type === 'dot') {
3148
+ state.output += NO_DOT_SLASH;
3149
+ prev.output += NO_DOT_SLASH;
3150
+
3151
+ } else if (opts.dot === true) {
3152
+ state.output += NO_DOTS_SLASH;
3153
+ prev.output += NO_DOTS_SLASH;
3154
+
3155
+ } else {
3156
+ state.output += nodot;
3157
+ prev.output += nodot;
3158
+ }
3159
+
3160
+ if (peek() !== '*') {
3161
+ state.output += ONE_CHAR;
3162
+ prev.output += ONE_CHAR;
3163
+ }
3164
+ }
3165
+
3166
+ push(token);
3167
+ }
3168
+
3169
+ while (state.brackets > 0) {
3170
+ if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
3171
+ state.output = utils.escapeLast(state.output, '[');
3172
+ decrement('brackets');
3173
+ }
3174
+
3175
+ while (state.parens > 0) {
3176
+ if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
3177
+ state.output = utils.escapeLast(state.output, '(');
3178
+ decrement('parens');
3179
+ }
3180
+
3181
+ while (state.braces > 0) {
3182
+ if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
3183
+ state.output = utils.escapeLast(state.output, '{');
3184
+ decrement('braces');
3185
+ }
3186
+
3187
+ if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
3188
+ push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
3189
+ }
3190
+
3191
+ // rebuild the output if we had to backtrack at any point
3192
+ if (state.backtrack === true) {
3193
+ state.output = '';
3194
+
3195
+ for (const token of state.tokens) {
3196
+ state.output += token.output != null ? token.output : token.value;
3197
+
3198
+ if (token.suffix) {
3199
+ state.output += token.suffix;
3200
+ }
3201
+ }
3202
+ }
3203
+
3204
+ return state;
3205
+ };
3206
+
3207
+ /**
3208
+ * Fast paths for creating regular expressions for common glob patterns.
3209
+ * This can significantly speed up processing and has very little downside
3210
+ * impact when none of the fast paths match.
3211
+ */
3212
+
3213
+ parse.fastpaths = (input, options) => {
3214
+ const opts = { ...options };
3215
+ const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
3216
+ const len = input.length;
3217
+ if (len > max) {
3218
+ throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
3219
+ }
3220
+
3221
+ input = REPLACEMENTS[input] || input;
3222
+ const win32 = utils.isWindows(options);
3223
+
3224
+ // create constants based on platform, for windows or posix
3225
+ const {
3226
+ DOT_LITERAL,
3227
+ SLASH_LITERAL,
3228
+ ONE_CHAR,
3229
+ DOTS_SLASH,
3230
+ NO_DOT,
3231
+ NO_DOTS,
3232
+ NO_DOTS_SLASH,
3233
+ STAR,
3234
+ START_ANCHOR
3235
+ } = constants.globChars(win32);
3236
+
3237
+ const nodot = opts.dot ? NO_DOTS : NO_DOT;
3238
+ const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
3239
+ const capture = opts.capture ? '' : '?:';
3240
+ const state = { negated: false, prefix: '' };
3241
+ let star = opts.bash === true ? '.*?' : STAR;
3242
+
3243
+ if (opts.capture) {
3244
+ star = `(${star})`;
3245
+ }
3246
+
3247
+ const globstar = opts => {
3248
+ if (opts.noglobstar === true) return star;
3249
+ return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
3250
+ };
3251
+
3252
+ const create = str => {
3253
+ switch (str) {
3254
+ case '*':
3255
+ return `${nodot}${ONE_CHAR}${star}`;
3256
+
3257
+ case '.*':
3258
+ return `${DOT_LITERAL}${ONE_CHAR}${star}`;
3259
+
3260
+ case '*.*':
3261
+ return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
3262
+
3263
+ case '*/*':
3264
+ return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
3265
+
3266
+ case '**':
3267
+ return nodot + globstar(opts);
3268
+
3269
+ case '**/*':
3270
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
3271
+
3272
+ case '**/*.*':
3273
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
3274
+
3275
+ case '**/.*':
3276
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
3277
+
3278
+ default: {
3279
+ const match = /^(.*?)\.(\w+)$/.exec(str);
3280
+ if (!match) return;
3281
+
3282
+ const source = create(match[1]);
3283
+ if (!source) return;
3284
+
3285
+ return source + DOT_LITERAL + match[2];
3286
+ }
3287
+ }
3288
+ };
3289
+
3290
+ const output = utils.removePrefix(input, state);
3291
+ let source = create(output);
3292
+
3293
+ if (source && opts.strictSlashes !== true) {
3294
+ source += `${SLASH_LITERAL}?`;
3295
+ }
3296
+
3297
+ return source;
3298
+ };
3299
+
3300
+ parse_1 = parse;
3301
+ return parse_1;
3302
+ }
3303
+
3304
+ var picomatch_1;
3305
+ var hasRequiredPicomatch$1;
3306
+
3307
+ function requirePicomatch$1 () {
3308
+ if (hasRequiredPicomatch$1) return picomatch_1;
3309
+ hasRequiredPicomatch$1 = 1;
3310
+
3311
+ const path = require$$0__default$1.default;
3312
+ const scan = requireScan();
3313
+ const parse = requireParse();
3314
+ const utils = requireUtils();
3315
+ const constants = requireConstants();
3316
+ const isObject = val => val && typeof val === 'object' && !Array.isArray(val);
3317
+
3318
+ /**
3319
+ * Creates a matcher function from one or more glob patterns. The
3320
+ * returned function takes a string to match as its first argument,
3321
+ * and returns true if the string is a match. The returned matcher
3322
+ * function also takes a boolean as the second argument that, when true,
3323
+ * returns an object with additional information.
3324
+ *
3325
+ * ```js
3326
+ * const picomatch = require('picomatch');
3327
+ * // picomatch(glob[, options]);
3328
+ *
3329
+ * const isMatch = picomatch('*.!(*a)');
3330
+ * console.log(isMatch('a.a')); //=> false
3331
+ * console.log(isMatch('a.b')); //=> true
3332
+ * ```
3333
+ * @name picomatch
3334
+ * @param {String|Array} `globs` One or more glob patterns.
3335
+ * @param {Object=} `options`
3336
+ * @return {Function=} Returns a matcher function.
3337
+ * @api public
3338
+ */
3339
+
3340
+ const picomatch = (glob, options, returnState = false) => {
3341
+ if (Array.isArray(glob)) {
3342
+ const fns = glob.map(input => picomatch(input, options, returnState));
3343
+ const arrayMatcher = str => {
3344
+ for (const isMatch of fns) {
3345
+ const state = isMatch(str);
3346
+ if (state) return state;
3347
+ }
3348
+ return false;
3349
+ };
3350
+ return arrayMatcher;
3351
+ }
3352
+
3353
+ const isState = isObject(glob) && glob.tokens && glob.input;
3354
+
3355
+ if (glob === '' || (typeof glob !== 'string' && !isState)) {
3356
+ throw new TypeError('Expected pattern to be a non-empty string');
3357
+ }
3358
+
3359
+ const opts = options || {};
3360
+ const posix = utils.isWindows(options);
3361
+ const regex = isState
3362
+ ? picomatch.compileRe(glob, options)
3363
+ : picomatch.makeRe(glob, options, false, true);
3364
+
3365
+ const state = regex.state;
3366
+ delete regex.state;
3367
+
3368
+ let isIgnored = () => false;
3369
+ if (opts.ignore) {
3370
+ const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
3371
+ isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
3372
+ }
3373
+
3374
+ const matcher = (input, returnObject = false) => {
3375
+ const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
3376
+ const result = { glob, state, regex, posix, input, output, match, isMatch };
3377
+
3378
+ if (typeof opts.onResult === 'function') {
3379
+ opts.onResult(result);
3380
+ }
3381
+
3382
+ if (isMatch === false) {
3383
+ result.isMatch = false;
3384
+ return returnObject ? result : false;
3385
+ }
3386
+
3387
+ if (isIgnored(input)) {
3388
+ if (typeof opts.onIgnore === 'function') {
3389
+ opts.onIgnore(result);
3390
+ }
3391
+ result.isMatch = false;
3392
+ return returnObject ? result : false;
3393
+ }
3394
+
3395
+ if (typeof opts.onMatch === 'function') {
3396
+ opts.onMatch(result);
3397
+ }
3398
+ return returnObject ? result : true;
3399
+ };
3400
+
3401
+ if (returnState) {
3402
+ matcher.state = state;
3403
+ }
3404
+
3405
+ return matcher;
3406
+ };
3407
+
3408
+ /**
3409
+ * Test `input` with the given `regex`. This is used by the main
3410
+ * `picomatch()` function to test the input string.
3411
+ *
3412
+ * ```js
3413
+ * const picomatch = require('picomatch');
3414
+ * // picomatch.test(input, regex[, options]);
3415
+ *
3416
+ * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
3417
+ * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
3418
+ * ```
3419
+ * @param {String} `input` String to test.
3420
+ * @param {RegExp} `regex`
3421
+ * @return {Object} Returns an object with matching info.
3422
+ * @api public
3423
+ */
3424
+
3425
+ picomatch.test = (input, regex, options, { glob, posix } = {}) => {
3426
+ if (typeof input !== 'string') {
3427
+ throw new TypeError('Expected input to be a string');
3428
+ }
3429
+
3430
+ if (input === '') {
3431
+ return { isMatch: false, output: '' };
3432
+ }
3433
+
3434
+ const opts = options || {};
3435
+ const format = opts.format || (posix ? utils.toPosixSlashes : null);
3436
+ let match = input === glob;
3437
+ let output = (match && format) ? format(input) : input;
3438
+
3439
+ if (match === false) {
3440
+ output = format ? format(input) : input;
3441
+ match = output === glob;
3442
+ }
3443
+
3444
+ if (match === false || opts.capture === true) {
3445
+ if (opts.matchBase === true || opts.basename === true) {
3446
+ match = picomatch.matchBase(input, regex, options, posix);
3447
+ } else {
3448
+ match = regex.exec(output);
3449
+ }
3450
+ }
3451
+
3452
+ return { isMatch: Boolean(match), match, output };
3453
+ };
3454
+
3455
+ /**
3456
+ * Match the basename of a filepath.
3457
+ *
3458
+ * ```js
3459
+ * const picomatch = require('picomatch');
3460
+ * // picomatch.matchBase(input, glob[, options]);
3461
+ * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
3462
+ * ```
3463
+ * @param {String} `input` String to test.
3464
+ * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
3465
+ * @return {Boolean}
3466
+ * @api public
3467
+ */
3468
+
3469
+ picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
3470
+ const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
3471
+ return regex.test(path.basename(input));
3472
+ };
3473
+
3474
+ /**
3475
+ * Returns true if **any** of the given glob `patterns` match the specified `string`.
3476
+ *
3477
+ * ```js
3478
+ * const picomatch = require('picomatch');
3479
+ * // picomatch.isMatch(string, patterns[, options]);
3480
+ *
3481
+ * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
3482
+ * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
3483
+ * ```
3484
+ * @param {String|Array} str The string to test.
3485
+ * @param {String|Array} patterns One or more glob patterns to use for matching.
3486
+ * @param {Object} [options] See available [options](#options).
3487
+ * @return {Boolean} Returns true if any patterns match `str`
3488
+ * @api public
3489
+ */
3490
+
3491
+ picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
3492
+
3493
+ /**
3494
+ * Parse a glob pattern to create the source string for a regular
3495
+ * expression.
3496
+ *
3497
+ * ```js
3498
+ * const picomatch = require('picomatch');
3499
+ * const result = picomatch.parse(pattern[, options]);
3500
+ * ```
3501
+ * @param {String} `pattern`
3502
+ * @param {Object} `options`
3503
+ * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
3504
+ * @api public
3505
+ */
3506
+
3507
+ picomatch.parse = (pattern, options) => {
3508
+ if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));
3509
+ return parse(pattern, { ...options, fastpaths: false });
3510
+ };
3511
+
3512
+ /**
3513
+ * Scan a glob pattern to separate the pattern into segments.
3514
+ *
3515
+ * ```js
3516
+ * const picomatch = require('picomatch');
3517
+ * // picomatch.scan(input[, options]);
3518
+ *
3519
+ * const result = picomatch.scan('!./foo/*.js');
3520
+ * console.log(result);
3521
+ * { prefix: '!./',
3522
+ * input: '!./foo/*.js',
3523
+ * start: 3,
3524
+ * base: 'foo',
3525
+ * glob: '*.js',
3526
+ * isBrace: false,
3527
+ * isBracket: false,
3528
+ * isGlob: true,
3529
+ * isExtglob: false,
3530
+ * isGlobstar: false,
3531
+ * negated: true }
3532
+ * ```
3533
+ * @param {String} `input` Glob pattern to scan.
3534
+ * @param {Object} `options`
3535
+ * @return {Object} Returns an object with
3536
+ * @api public
3537
+ */
3538
+
3539
+ picomatch.scan = (input, options) => scan(input, options);
3540
+
3541
+ /**
3542
+ * Compile a regular expression from the `state` object returned by the
3543
+ * [parse()](#parse) method.
3544
+ *
3545
+ * @param {Object} `state`
3546
+ * @param {Object} `options`
3547
+ * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.
3548
+ * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.
3549
+ * @return {RegExp}
3550
+ * @api public
3551
+ */
3552
+
3553
+ picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {
3554
+ if (returnOutput === true) {
3555
+ return state.output;
3556
+ }
3557
+
3558
+ const opts = options || {};
3559
+ const prepend = opts.contains ? '' : '^';
3560
+ const append = opts.contains ? '' : '$';
3561
+
3562
+ let source = `${prepend}(?:${state.output})${append}`;
3563
+ if (state && state.negated === true) {
3564
+ source = `^(?!${source}).*$`;
3565
+ }
3566
+
3567
+ const regex = picomatch.toRegex(source, options);
3568
+ if (returnState === true) {
3569
+ regex.state = state;
3570
+ }
3571
+
3572
+ return regex;
3573
+ };
3574
+
3575
+ /**
3576
+ * Create a regular expression from a parsed glob pattern.
3577
+ *
3578
+ * ```js
3579
+ * const picomatch = require('picomatch');
3580
+ * const state = picomatch.parse('*.js');
3581
+ * // picomatch.compileRe(state[, options]);
3582
+ *
3583
+ * console.log(picomatch.compileRe(state));
3584
+ * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
3585
+ * ```
3586
+ * @param {String} `state` The object returned from the `.parse` method.
3587
+ * @param {Object} `options`
3588
+ * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.
3589
+ * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.
3590
+ * @return {RegExp} Returns a regex created from the given pattern.
3591
+ * @api public
3592
+ */
3593
+
3594
+ picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {
3595
+ if (!input || typeof input !== 'string') {
3596
+ throw new TypeError('Expected a non-empty string');
3597
+ }
3598
+
3599
+ let parsed = { negated: false, fastpaths: true };
3600
+
3601
+ if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
3602
+ parsed.output = parse.fastpaths(input, options);
3603
+ }
3604
+
3605
+ if (!parsed.output) {
3606
+ parsed = parse(input, options);
3607
+ }
3608
+
3609
+ return picomatch.compileRe(parsed, options, returnOutput, returnState);
3610
+ };
3611
+
3612
+ /**
3613
+ * Create a regular expression from the given regex source string.
3614
+ *
3615
+ * ```js
3616
+ * const picomatch = require('picomatch');
3617
+ * // picomatch.toRegex(source[, options]);
3618
+ *
3619
+ * const { output } = picomatch.parse('*.js');
3620
+ * console.log(picomatch.toRegex(output));
3621
+ * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
3622
+ * ```
3623
+ * @param {String} `source` Regular expression source string.
3624
+ * @param {Object} `options`
3625
+ * @return {RegExp}
3626
+ * @api public
3627
+ */
3628
+
3629
+ picomatch.toRegex = (source, options) => {
3630
+ try {
3631
+ const opts = options || {};
3632
+ return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
3633
+ } catch (err) {
3634
+ if (options && options.debug === true) throw err;
3635
+ return /$^/;
3636
+ }
3637
+ };
3638
+
3639
+ /**
3640
+ * Picomatch constants.
3641
+ * @return {Object}
3642
+ */
3643
+
3644
+ picomatch.constants = constants;
3645
+
3646
+ /**
3647
+ * Expose "picomatch"
3648
+ */
3649
+
3650
+ picomatch_1 = picomatch;
3651
+ return picomatch_1;
3652
+ }
3653
+
3654
+ var picomatch;
3655
+ var hasRequiredPicomatch;
3656
+
3657
+ function requirePicomatch () {
3658
+ if (hasRequiredPicomatch) return picomatch;
3659
+ hasRequiredPicomatch = 1;
3660
+
3661
+ picomatch = requirePicomatch$1();
3662
+ return picomatch;
3663
+ }
3664
+
3665
+ var micromatch_1;
3666
+ var hasRequiredMicromatch;
3667
+
3668
+ function requireMicromatch () {
3669
+ if (hasRequiredMicromatch) return micromatch_1;
3670
+ hasRequiredMicromatch = 1;
3671
+
3672
+ const util = require$$0__default.default;
3673
+ const braces = requireBraces();
3674
+ const picomatch = requirePicomatch();
3675
+ const utils = requireUtils();
3676
+ const isEmptyString = val => val === '' || val === './';
3677
+
3678
+ /**
3679
+ * Returns an array of strings that match one or more glob patterns.
3680
+ *
3681
+ * ```js
3682
+ * const mm = require('micromatch');
3683
+ * // mm(list, patterns[, options]);
3684
+ *
3685
+ * console.log(mm(['a.js', 'a.txt'], ['*.js']));
3686
+ * //=> [ 'a.js' ]
3687
+ * ```
3688
+ * @param {String|Array<string>} `list` List of strings to match.
3689
+ * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.
3690
+ * @param {Object} `options` See available [options](#options)
3691
+ * @return {Array} Returns an array of matches
3692
+ * @summary false
3693
+ * @api public
3694
+ */
3695
+
3696
+ const micromatch = (list, patterns, options) => {
3697
+ patterns = [].concat(patterns);
3698
+ list = [].concat(list);
3699
+
3700
+ let omit = new Set();
3701
+ let keep = new Set();
3702
+ let items = new Set();
3703
+ let negatives = 0;
3704
+
3705
+ let onResult = state => {
3706
+ items.add(state.output);
3707
+ if (options && options.onResult) {
3708
+ options.onResult(state);
3709
+ }
3710
+ };
3711
+
3712
+ for (let i = 0; i < patterns.length; i++) {
3713
+ let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);
3714
+ let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
3715
+ if (negated) negatives++;
3716
+
3717
+ for (let item of list) {
3718
+ let matched = isMatch(item, true);
3719
+
3720
+ let match = negated ? !matched.isMatch : matched.isMatch;
3721
+ if (!match) continue;
3722
+
3723
+ if (negated) {
3724
+ omit.add(matched.output);
3725
+ } else {
3726
+ omit.delete(matched.output);
3727
+ keep.add(matched.output);
3728
+ }
3729
+ }
3730
+ }
3731
+
3732
+ let result = negatives === patterns.length ? [...items] : [...keep];
3733
+ let matches = result.filter(item => !omit.has(item));
3734
+
3735
+ if (options && matches.length === 0) {
3736
+ if (options.failglob === true) {
3737
+ throw new Error(`No matches found for "${patterns.join(', ')}"`);
3738
+ }
3739
+
3740
+ if (options.nonull === true || options.nullglob === true) {
3741
+ return options.unescape ? patterns.map(p => p.replace(/\\/g, '')) : patterns;
3742
+ }
3743
+ }
3744
+
3745
+ return matches;
3746
+ };
3747
+
3748
+ /**
3749
+ * Backwards compatibility
3750
+ */
3751
+
3752
+ micromatch.match = micromatch;
3753
+
3754
+ /**
3755
+ * Returns a matcher function from the given glob `pattern` and `options`.
3756
+ * The returned function takes a string to match as its only argument and returns
3757
+ * true if the string is a match.
3758
+ *
3759
+ * ```js
3760
+ * const mm = require('micromatch');
3761
+ * // mm.matcher(pattern[, options]);
3762
+ *
3763
+ * const isMatch = mm.matcher('*.!(*a)');
3764
+ * console.log(isMatch('a.a')); //=> false
3765
+ * console.log(isMatch('a.b')); //=> true
3766
+ * ```
3767
+ * @param {String} `pattern` Glob pattern
3768
+ * @param {Object} `options`
3769
+ * @return {Function} Returns a matcher function.
3770
+ * @api public
3771
+ */
3772
+
3773
+ micromatch.matcher = (pattern, options) => picomatch(pattern, options);
3774
+
3775
+ /**
3776
+ * Returns true if **any** of the given glob `patterns` match the specified `string`.
3777
+ *
3778
+ * ```js
3779
+ * const mm = require('micromatch');
3780
+ * // mm.isMatch(string, patterns[, options]);
3781
+ *
3782
+ * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true
3783
+ * console.log(mm.isMatch('a.a', 'b.*')); //=> false
3784
+ * ```
3785
+ * @param {String} `str` The string to test.
3786
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
3787
+ * @param {Object} `[options]` See available [options](#options).
3788
+ * @return {Boolean} Returns true if any patterns match `str`
3789
+ * @api public
3790
+ */
3791
+
3792
+ micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
3793
+
3794
+ /**
3795
+ * Backwards compatibility
3796
+ */
3797
+
3798
+ micromatch.any = micromatch.isMatch;
3799
+
3800
+ /**
3801
+ * Returns a list of strings that _**do not match any**_ of the given `patterns`.
3802
+ *
3803
+ * ```js
3804
+ * const mm = require('micromatch');
3805
+ * // mm.not(list, patterns[, options]);
3806
+ *
3807
+ * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
3808
+ * //=> ['b.b', 'c.c']
3809
+ * ```
3810
+ * @param {Array} `list` Array of strings to match.
3811
+ * @param {String|Array} `patterns` One or more glob pattern to use for matching.
3812
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
3813
+ * @return {Array} Returns an array of strings that **do not match** the given patterns.
3814
+ * @api public
3815
+ */
3816
+
3817
+ micromatch.not = (list, patterns, options = {}) => {
3818
+ patterns = [].concat(patterns).map(String);
3819
+ let result = new Set();
3820
+ let items = [];
3821
+
3822
+ let onResult = state => {
3823
+ if (options.onResult) options.onResult(state);
3824
+ items.push(state.output);
3825
+ };
3826
+
3827
+ let matches = new Set(micromatch(list, patterns, { ...options, onResult }));
3828
+
3829
+ for (let item of items) {
3830
+ if (!matches.has(item)) {
3831
+ result.add(item);
3832
+ }
3833
+ }
3834
+ return [...result];
3835
+ };
3836
+
3837
+ /**
3838
+ * Returns true if the given `string` contains the given pattern. Similar
3839
+ * to [.isMatch](#isMatch) but the pattern can match any part of the string.
3840
+ *
3841
+ * ```js
3842
+ * var mm = require('micromatch');
3843
+ * // mm.contains(string, pattern[, options]);
3844
+ *
3845
+ * console.log(mm.contains('aa/bb/cc', '*b'));
3846
+ * //=> true
3847
+ * console.log(mm.contains('aa/bb/cc', '*d'));
3848
+ * //=> false
3849
+ * ```
3850
+ * @param {String} `str` The string to match.
3851
+ * @param {String|Array} `patterns` Glob pattern to use for matching.
3852
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
3853
+ * @return {Boolean} Returns true if any of the patterns matches any part of `str`.
3854
+ * @api public
3855
+ */
3856
+
3857
+ micromatch.contains = (str, pattern, options) => {
3858
+ if (typeof str !== 'string') {
3859
+ throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
3860
+ }
3861
+
3862
+ if (Array.isArray(pattern)) {
3863
+ return pattern.some(p => micromatch.contains(str, p, options));
3864
+ }
3865
+
3866
+ if (typeof pattern === 'string') {
3867
+ if (isEmptyString(str) || isEmptyString(pattern)) {
3868
+ return false;
3869
+ }
3870
+
3871
+ if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {
3872
+ return true;
3873
+ }
3874
+ }
3875
+
3876
+ return micromatch.isMatch(str, pattern, { ...options, contains: true });
3877
+ };
3878
+
3879
+ /**
3880
+ * Filter the keys of the given object with the given `glob` pattern
3881
+ * and `options`. Does not attempt to match nested keys. If you need this feature,
3882
+ * use [glob-object][] instead.
3883
+ *
3884
+ * ```js
3885
+ * const mm = require('micromatch');
3886
+ * // mm.matchKeys(object, patterns[, options]);
3887
+ *
3888
+ * const obj = { aa: 'a', ab: 'b', ac: 'c' };
3889
+ * console.log(mm.matchKeys(obj, '*b'));
3890
+ * //=> { ab: 'b' }
3891
+ * ```
3892
+ * @param {Object} `object` The object with keys to filter.
3893
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
3894
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
3895
+ * @return {Object} Returns an object with only keys that match the given patterns.
3896
+ * @api public
3897
+ */
3898
+
3899
+ micromatch.matchKeys = (obj, patterns, options) => {
3900
+ if (!utils.isObject(obj)) {
3901
+ throw new TypeError('Expected the first argument to be an object');
3902
+ }
3903
+ let keys = micromatch(Object.keys(obj), patterns, options);
3904
+ let res = {};
3905
+ for (let key of keys) res[key] = obj[key];
3906
+ return res;
3907
+ };
3908
+
3909
+ /**
3910
+ * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
3911
+ *
3912
+ * ```js
3913
+ * const mm = require('micromatch');
3914
+ * // mm.some(list, patterns[, options]);
3915
+ *
3916
+ * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
3917
+ * // true
3918
+ * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
3919
+ * // false
3920
+ * ```
3921
+ * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.
3922
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
3923
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
3924
+ * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`
3925
+ * @api public
3926
+ */
3927
+
3928
+ micromatch.some = (list, patterns, options) => {
3929
+ let items = [].concat(list);
3930
+
3931
+ for (let pattern of [].concat(patterns)) {
3932
+ let isMatch = picomatch(String(pattern), options);
3933
+ if (items.some(item => isMatch(item))) {
3934
+ return true;
3935
+ }
3936
+ }
3937
+ return false;
3938
+ };
3939
+
3940
+ /**
3941
+ * Returns true if every string in the given `list` matches
3942
+ * any of the given glob `patterns`.
3943
+ *
3944
+ * ```js
3945
+ * const mm = require('micromatch');
3946
+ * // mm.every(list, patterns[, options]);
3947
+ *
3948
+ * console.log(mm.every('foo.js', ['foo.js']));
3949
+ * // true
3950
+ * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
3951
+ * // true
3952
+ * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
3953
+ * // false
3954
+ * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
3955
+ * // false
3956
+ * ```
3957
+ * @param {String|Array} `list` The string or array of strings to test.
3958
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
3959
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
3960
+ * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`
3961
+ * @api public
3962
+ */
3963
+
3964
+ micromatch.every = (list, patterns, options) => {
3965
+ let items = [].concat(list);
3966
+
3967
+ for (let pattern of [].concat(patterns)) {
3968
+ let isMatch = picomatch(String(pattern), options);
3969
+ if (!items.every(item => isMatch(item))) {
3970
+ return false;
3971
+ }
3972
+ }
3973
+ return true;
3974
+ };
3975
+
3976
+ /**
3977
+ * Returns true if **all** of the given `patterns` match
3978
+ * the specified string.
3979
+ *
3980
+ * ```js
3981
+ * const mm = require('micromatch');
3982
+ * // mm.all(string, patterns[, options]);
3983
+ *
3984
+ * console.log(mm.all('foo.js', ['foo.js']));
3985
+ * // true
3986
+ *
3987
+ * console.log(mm.all('foo.js', ['*.js', '!foo.js']));
3988
+ * // false
3989
+ *
3990
+ * console.log(mm.all('foo.js', ['*.js', 'foo.js']));
3991
+ * // true
3992
+ *
3993
+ * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
3994
+ * // true
3995
+ * ```
3996
+ * @param {String|Array} `str` The string to test.
3997
+ * @param {String|Array} `patterns` One or more glob patterns to use for matching.
3998
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
3999
+ * @return {Boolean} Returns true if any patterns match `str`
4000
+ * @api public
4001
+ */
4002
+
4003
+ micromatch.all = (str, patterns, options) => {
4004
+ if (typeof str !== 'string') {
4005
+ throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
4006
+ }
4007
+
4008
+ return [].concat(patterns).every(p => picomatch(p, options)(str));
4009
+ };
4010
+
4011
+ /**
4012
+ * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.
4013
+ *
4014
+ * ```js
4015
+ * const mm = require('micromatch');
4016
+ * // mm.capture(pattern, string[, options]);
4017
+ *
4018
+ * console.log(mm.capture('test/*.js', 'test/foo.js'));
4019
+ * //=> ['foo']
4020
+ * console.log(mm.capture('test/*.js', 'foo/bar.css'));
4021
+ * //=> null
4022
+ * ```
4023
+ * @param {String} `glob` Glob pattern to use for matching.
4024
+ * @param {String} `input` String to match
4025
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
4026
+ * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.
4027
+ * @api public
4028
+ */
4029
+
4030
+ micromatch.capture = (glob, input, options) => {
4031
+ let posix = utils.isWindows(options);
4032
+ let regex = picomatch.makeRe(String(glob), { ...options, capture: true });
4033
+ let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);
4034
+
4035
+ if (match) {
4036
+ return match.slice(1).map(v => v === void 0 ? '' : v);
4037
+ }
4038
+ };
4039
+
4040
+ /**
4041
+ * Create a regular expression from the given glob `pattern`.
4042
+ *
4043
+ * ```js
4044
+ * const mm = require('micromatch');
4045
+ * // mm.makeRe(pattern[, options]);
4046
+ *
4047
+ * console.log(mm.makeRe('*.js'));
4048
+ * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
4049
+ * ```
4050
+ * @param {String} `pattern` A glob pattern to convert to regex.
4051
+ * @param {Object} `options`
4052
+ * @return {RegExp} Returns a regex created from the given pattern.
4053
+ * @api public
4054
+ */
4055
+
4056
+ micromatch.makeRe = (...args) => picomatch.makeRe(...args);
4057
+
4058
+ /**
4059
+ * Scan a glob pattern to separate the pattern into segments. Used
4060
+ * by the [split](#split) method.
4061
+ *
4062
+ * ```js
4063
+ * const mm = require('micromatch');
4064
+ * const state = mm.scan(pattern[, options]);
4065
+ * ```
4066
+ * @param {String} `pattern`
4067
+ * @param {Object} `options`
4068
+ * @return {Object} Returns an object with
4069
+ * @api public
4070
+ */
4071
+
4072
+ micromatch.scan = (...args) => picomatch.scan(...args);
4073
+
4074
+ /**
4075
+ * Parse a glob pattern to create the source string for a regular
4076
+ * expression.
4077
+ *
4078
+ * ```js
4079
+ * const mm = require('micromatch');
4080
+ * const state = mm.parse(pattern[, options]);
4081
+ * ```
4082
+ * @param {String} `glob`
4083
+ * @param {Object} `options`
4084
+ * @return {Object} Returns an object with useful properties and output to be used as regex source string.
4085
+ * @api public
4086
+ */
4087
+
4088
+ micromatch.parse = (patterns, options) => {
4089
+ let res = [];
4090
+ for (let pattern of [].concat(patterns || [])) {
4091
+ for (let str of braces(String(pattern), options)) {
4092
+ res.push(picomatch.parse(str, options));
4093
+ }
4094
+ }
4095
+ return res;
4096
+ };
4097
+
4098
+ /**
4099
+ * Process the given brace `pattern`.
4100
+ *
4101
+ * ```js
4102
+ * const { braces } = require('micromatch');
4103
+ * console.log(braces('foo/{a,b,c}/bar'));
4104
+ * //=> [ 'foo/(a|b|c)/bar' ]
4105
+ *
4106
+ * console.log(braces('foo/{a,b,c}/bar', { expand: true }));
4107
+ * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]
4108
+ * ```
4109
+ * @param {String} `pattern` String with brace pattern to process.
4110
+ * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.
4111
+ * @return {Array}
4112
+ * @api public
4113
+ */
4114
+
4115
+ micromatch.braces = (pattern, options) => {
4116
+ if (typeof pattern !== 'string') throw new TypeError('Expected a string');
4117
+ if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) {
4118
+ return [pattern];
4119
+ }
4120
+ return braces(pattern, options);
4121
+ };
4122
+
4123
+ /**
4124
+ * Expand braces
4125
+ */
4126
+
4127
+ micromatch.braceExpand = (pattern, options) => {
4128
+ if (typeof pattern !== 'string') throw new TypeError('Expected a string');
4129
+ return micromatch.braces(pattern, { ...options, expand: true });
4130
+ };
4131
+
4132
+ /**
4133
+ * Expose micromatch
4134
+ */
4135
+
4136
+ micromatch_1 = micromatch;
4137
+ return micromatch_1;
4138
+ }
4139
+
4140
+ var micromatchExports = requireMicromatch();
4141
+
4142
+ const intersection = (a, b) => new Set([...a].filter((i) => b.has(i)));
4143
+ function getExports({
4144
+ entrypoints: entrypoints$1,
4145
+ pkgIsModule,
4146
+ entries,
4147
+ config,
4148
+ dir,
4149
+ noFilter,
4150
+ isPublish
4151
+ }) {
4152
+ const dirResolve = (...paths) => path.resolve(dir ?? process.cwd(), ...paths);
4153
+ const dirRelative = (path$1) => path.relative(dir ?? process.cwd(), path$1);
4154
+ const {
4155
+ build = {},
4156
+ publish: {
4157
+ withSuffix = false,
4158
+ withSource = true
4159
+ } = {}
4160
+ } = config ?? {};
4161
+ const {
4162
+ crossModuleConvertor = true
4163
+ } = build;
4164
+ const jsOutdir = `./${dirRelative(dirResolve(
4165
+ (typeof build?.output?.dir === "object" ? build.output.dir.js : build?.output?.dir) ?? "dist"
4166
+ ))}`;
4167
+ const [, resolvedEntrypoints] = entrypoints.resolveEntrypoints(entrypoints$1);
4168
+ if (entries) {
4169
+ Object.entries(resolvedEntrypoints).forEach(([key]) => {
4170
+ if (!entries.some((e) => micromatchExports.isMatch(key, e, { matchBase: true }))) {
4171
+ delete resolvedEntrypoints[key];
4172
+ }
4173
+ });
4174
+ }
4175
+ const filteredResolvedEntrypoints = noFilter ? resolvedEntrypoints : entrypoints.filterLeafs(
4176
+ resolvedEntrypoints,
4177
+ {
4178
+ skipValue: [
4179
+ // ignore values that filename starts with `.jk-noentry`
4180
+ /(^|\/)\.jk-noentry/,
4181
+ ...entrypoints.DEFAULT_SKIP_VALUES
4182
+ ]
4183
+ }
4184
+ );
4185
+ const crossModuleWithConditional = crossModuleConvertor ? {
4186
+ import: (opts) => !pkgIsModule && intersection(
4187
+ new Set(opts.conditionals),
4188
+ /* @__PURE__ */ new Set(["import", "module"])
4189
+ ).size === 0 ? opts.dist.replace(/\.js$/, ".mjs") : false,
4190
+ require: (opts) => pkgIsModule && intersection(
4191
+ new Set(opts.conditionals),
4192
+ /* @__PURE__ */ new Set(["require", "node"])
4193
+ ).size === 0 ? opts.dist.replace(/\.js$/, ".cjs") : false
4194
+ } : {};
4195
+ return [
4196
+ filteredResolvedEntrypoints,
4197
+ entrypoints.entrypoints2Exports(filteredResolvedEntrypoints, {
4198
+ outdir: jsOutdir,
4199
+ withSuffix: isPublish ? withSuffix : void 0,
4200
+ withSource: isPublish ? withSource : void 0,
4201
+ withConditional: {
4202
+ ...crossModuleWithConditional
4203
+ }
4204
+ })
4205
+ ];
4206
+ }
4207
+
4208
+ let root;
4209
+ function getRoot() {
4210
+ if (root)
4211
+ return root;
4212
+ const rootOption = commander.program.getOptionValue("root");
4213
+ root = rootOption ? path__default.default.isAbsolute(rootOption) ? rootOption : path__default.default.resolve(process.cwd(), rootOption) : void 0;
4214
+ return root;
4215
+ }
4216
+
4217
+ let type = "";
4218
+ try {
4219
+ const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
4220
+ require$1.resolve("@pnpm/filter-workspace-packages");
4221
+ type = "pnpm";
4222
+ } catch {
4223
+ }
4224
+ if (type !== "") {
4225
+ commander.program.option("-f, --filter <filter>", "filter packages");
4226
+ }
4227
+
4228
+ let wd;
4229
+ let notWorkspace = false;
4230
+ function getWD() {
4231
+ if (wd)
4232
+ return { wd, notWorkspace };
4233
+ const root = getRoot();
4234
+ if (root !== void 0) {
4235
+ const isWorkspace = getWorkspaceDir.isWorkspaceDir(root, type);
4236
+ notWorkspace = !isWorkspace;
4237
+ wd = root;
4238
+ return { wd, notWorkspace };
4239
+ }
4240
+ try {
4241
+ wd = getWorkspaceDir.getWorkspaceDir(type);
4242
+ } catch (e) {
4243
+ if ("message" in e && e.message === "workspace root not found") {
4244
+ wd = root;
4245
+ notWorkspace = true;
4246
+ } else {
4247
+ throw e;
4248
+ }
4249
+ }
4250
+ return { wd, notWorkspace };
4251
+ }
4252
+
4253
+ const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
4254
+ function packageIsExist(name) {
4255
+ try {
4256
+ require$1.resolve(name);
4257
+ return true;
4258
+ } catch (e) {
4259
+ return false;
4260
+ }
4261
+ }
4262
+ let tsRegisterName;
4263
+ const registers = [
4264
+ process.env.JIEK_TS_REGISTER,
4265
+ "esbuild-register",
4266
+ "@swc-node/register",
4267
+ "ts-node/register"
4268
+ ].filter(Boolean);
4269
+ for (const register of registers) {
4270
+ if (packageIsExist(register)) {
4271
+ tsRegisterName = register;
4272
+ break;
4273
+ }
4274
+ }
4275
+
4276
+ let configName = "jiek.config";
4277
+ function getConfigPath(root, dir) {
4278
+ const isSupportTsLoader = !!tsRegisterName;
4279
+ function configWithExtIsExist(ext) {
4280
+ const filenames = [
4281
+ path__default.default.resolve(process.cwd(), `${configName}.${ext}`),
4282
+ path__default.default.resolve(process.cwd(), `.${configName}.${ext}`),
4283
+ path__default.default.resolve(root, `${configName}.${ext}`),
4284
+ path__default.default.resolve(root, `.${configName}.${ext}`)
4285
+ ];
4286
+ if (dir) {
4287
+ filenames.unshift(...[
4288
+ path__default.default.resolve(dir, `${configName}.${ext}`),
4289
+ path__default.default.resolve(dir, `.${configName}.${ext}`)
4290
+ ]);
4291
+ }
4292
+ for (const filename of filenames) {
4293
+ if (fs__default.default.existsSync(filename) && fs__default.default.lstatSync(filename).isFile()) {
4294
+ return filename;
4295
+ }
4296
+ }
4297
+ return;
4298
+ }
4299
+ configName = configWithExtIsExist("js") ?? configName;
4300
+ configName = configWithExtIsExist("json") ?? configName;
4301
+ configName = configWithExtIsExist("yaml") ?? configName;
4302
+ if (isSupportTsLoader) {
4303
+ configName = configWithExtIsExist("ts") ?? configName;
4304
+ }
4305
+ return path__default.default.resolve(root, configName);
4306
+ }
4307
+ function loadConfig(dir) {
4308
+ const { wd: root } = getWD();
4309
+ let configPath = commander.program.getOptionValue("configPath");
4310
+ if (!configPath) {
4311
+ configPath = getConfigPath(root, dir);
4312
+ } else {
4313
+ if (!fs__default.default.existsSync(configPath)) {
4314
+ throw new Error(`config file not found: ${configPath}`);
4315
+ }
4316
+ if (!path__default.default.isAbsolute(configPath)) {
4317
+ configPath = path__default.default.resolve(root, configPath);
4318
+ }
4319
+ }
4320
+ const ext = path__default.default.extname(configPath);
4321
+ let module;
4322
+ switch (ext) {
4323
+ case ".js":
4324
+ module = require(configPath);
4325
+ break;
4326
+ case ".json":
4327
+ return require(configPath);
4328
+ case ".yaml":
4329
+ return jsYaml.load(fs__default.default.readFileSync(configPath, "utf-8"));
4330
+ case ".ts":
4331
+ if (tsRegisterName) {
4332
+ require(tsRegisterName);
4333
+ module = require(configPath);
4334
+ break;
4335
+ }
4336
+ throw new Error(
4337
+ "ts config file is not supported without ts register, please install esbuild-register or set JIEK_TS_REGISTER env for custom ts register"
4338
+ );
4339
+ case ".config":
4340
+ module = {};
4341
+ break;
4342
+ default:
4343
+ throw new Error(`unsupported config file type: ${ext}`);
4344
+ }
4345
+ if (!module)
4346
+ throw new Error("config file is empty");
4347
+ return module.default ?? module;
4348
+ }
4349
+
4350
+ var progress = (options = {}) => {
4351
+ const { onEvent } = options;
4352
+ return {
4353
+ name: "progress",
4354
+ buildStart: () => onEvent?.("start", "Start building..."),
4355
+ buildEnd: () => onEvent?.("end", "Build completed!"),
4356
+ resolveId: {
4357
+ order: "post",
4358
+ handler: (source) => onEvent?.("resolve", `Resolving ${source}...`)
4359
+ },
4360
+ load: {
4361
+ order: "post",
4362
+ handler: (id) => onEvent?.("load", `Loading ${id}...`)
4363
+ },
4364
+ transform: {
4365
+ order: "post",
4366
+ handler: (_, id) => onEvent?.("transform", `Transforming ${id}...`)
4367
+ }
4368
+ };
4369
+ };
4370
+
4371
+ var skip = (options = {}) => {
4372
+ return {
4373
+ name: "skip",
4374
+ // skip the specified files by `options.patterns`
4375
+ load(id) {
4376
+ if (options.patterns?.some(
4377
+ (pattern) => typeof pattern === "string" ? id.includes(pattern) : pattern.test(id)
4378
+ )) {
4379
+ return "";
4380
+ }
4381
+ }
4382
+ };
4383
+ };
4384
+
4385
+ function externalResolver(jsonOrPath = process.cwd()) {
4386
+ const pkg = typeof jsonOrPath === "string" ? fs__default.default.existsSync(`${jsonOrPath}/package.json`) ? JSON.parse(fs__default.default.readFileSync(`${jsonOrPath}/package.json`, "utf-8")) : {} : jsonOrPath;
4387
+ const { dependencies = {}, peerDependencies = {}, optionalDependencies = {} } = pkg;
4388
+ const external = Object.keys(dependencies).concat(Object.keys(peerDependencies)).concat(Object.keys(optionalDependencies));
4389
+ return external.map((dep) => new RegExp(`^${dep}(/.*)?$`)).concat([
4390
+ /^node:/
4391
+ ]);
4392
+ }
4393
+
4394
+ const {
4395
+ JIEK_ROOT,
4396
+ JIEK_ENTRIES
4397
+ } = process.env;
4398
+ const WORKSPACE_ROOT = JIEK_ROOT ?? getWorkspaceDir.getWorkspaceDir();
4399
+ const COMMON_OPTIONS = {};
4400
+ const COMMON_PLUGINS = [
4401
+ json__default.default()
4402
+ ];
4403
+ const config = loadConfig() ?? {};
4404
+ const { build = {} } = config;
4405
+ const jsOutdir = `./${path.relative(
4406
+ process.cwd(),
4407
+ path.resolve(
4408
+ (typeof build?.output?.dir === "object" ? build.output.dir.js : build?.output?.dir) ?? "dist"
4409
+ )
4410
+ )}`;
4411
+ const STYLE_REGEXP = /\.(css|s[ac]ss|less|styl)$/;
4412
+ const resolveWorkspacePath = (p) => path.resolve(WORKSPACE_ROOT, p);
4413
+ const pascalCase = (str) => str.replace(/[@|/-](\w)/g, (_, $1) => $1.toUpperCase()).replace(/(?:^|-)(\w)/g, (_, $1) => $1.toUpperCase());
4414
+ const reveal = (obj, keys) => keys.reduce((acc, key) => {
4415
+ if (typeof acc === "string")
4416
+ throw new Error("key not found in exports");
4417
+ if (!(key in acc))
4418
+ throw new Error(`key ${key} not found in exports`);
4419
+ return acc[key];
4420
+ }, obj);
4421
+ const withMinify = (output, minify = build?.output?.minify) => minify === false ? [output] : minify === "only-minify" ? [{
4422
+ ...output,
4423
+ // TODO replace suffix when pubish to npm and the `build.output.minify` is 'only-minify'
4424
+ // TODO resolve dts output file name
4425
+ file: output.file?.replace(/(\.[cm]?js)$/, ".min$1"),
4426
+ plugins: [
4427
+ ...output.plugins ?? [],
4428
+ terser__default.default()
4429
+ ]
4430
+ }] : [
4431
+ output,
4432
+ {
4433
+ ...output,
4434
+ file: output.file?.replace(/(\.[cm]?js)$/, ".min$1"),
4435
+ plugins: [
4436
+ ...output.plugins ?? [],
4437
+ terser__default.default()
4438
+ ]
4439
+ }
4440
+ ];
4441
+ const getTSConfig = (p) => !fs__default.default.existsSync(p) || !fs__default.default.statSync(p).isFile() ? {} : jsoncParser.parse(fs__default.default.readFileSync(p, "utf-8"), [], { allowTrailingComma: true, allowEmptyContent: true });
4442
+ const getExtendTSConfig = (tsconfigPath) => {
4443
+ tsconfigPath = path.resolve(tsconfigPath);
4444
+ const tsconfigPathDirname = path.dirname(tsconfigPath);
4445
+ const { extends: exts, ...tsconfig } = getTSConfig(tsconfigPath);
4446
+ const resolvePaths = (paths) => paths?.map((p) => path.resolve(tsconfigPathDirname, p)) ?? [];
4447
+ const extendsPaths = resolvePaths(
4448
+ exts ? Array.isArray(exts) ? exts : [exts] : []
4449
+ );
4450
+ if (extendsPaths.length === 0)
4451
+ return tsconfig;
4452
+ return extendsPaths.map(getExtendTSConfig).concat(tsconfig).reduce((acc, { compilerOptions = {}, references: _, ...curr }) => ({
4453
+ ...acc,
4454
+ ...curr,
4455
+ compilerOptions: {
4456
+ ...acc.compilerOptions,
4457
+ ...compilerOptions
4458
+ }
4459
+ }), {});
4460
+ };
4461
+ const getCompilerOptionsByFilePath = (tsconfigPath, filePath) => {
4462
+ tsconfigPath = path.resolve(tsconfigPath);
4463
+ filePath = path.resolve(filePath);
4464
+ const tsconfigPathDirname = path.dirname(tsconfigPath);
4465
+ const tsconfig = getExtendTSConfig(tsconfigPath);
4466
+ const resolvePaths = (paths) => paths?.map((p) => path.resolve(tsconfigPathDirname, p)) ?? [];
4467
+ const [
4468
+ references,
4469
+ files,
4470
+ include,
4471
+ exclude
4472
+ ] = [
4473
+ tsconfig.references?.map(({ path }) => path),
4474
+ tsconfig.files,
4475
+ tsconfig.include,
4476
+ tsconfig.exclude
4477
+ ].map(resolvePaths);
4478
+ if (exclude.length > 0 && exclude.some((i) => micromatchExports.isMatch(filePath, i)))
4479
+ return;
4480
+ if (tsconfig.files?.length === 0 && tsconfig.include?.length === 0)
4481
+ return;
4482
+ let isInclude = false;
4483
+ isInclude || (isInclude = files.length > 0 && files.includes(filePath));
4484
+ isInclude || (isInclude = include.length > 0 && include.some((i) => micromatchExports.isMatch(filePath, i)));
4485
+ if (isInclude) {
4486
+ return tsconfig.compilerOptions ?? {};
4487
+ } else {
4488
+ if (tsconfig.files && tsconfig.files.length > 0 || tsconfig.include && tsconfig.include.length > 0)
4489
+ return;
4490
+ }
4491
+ references.reverse();
4492
+ for (const ref of references) {
4493
+ const compilerOptions = getCompilerOptionsByFilePath(ref, filePath);
4494
+ if (compilerOptions)
4495
+ return compilerOptions;
4496
+ }
4497
+ return tsconfig.compilerOptions;
4498
+ };
4499
+ const generateConfigs = ({
4500
+ path: path$1,
4501
+ name,
4502
+ input,
4503
+ output,
4504
+ external,
4505
+ pkgIsModule,
4506
+ conditionals
4507
+ }, options = {}) => {
4508
+ const isModule = conditionals.includes("import");
4509
+ const isCommonJS = conditionals.includes("require");
4510
+ const isBrowser = conditionals.includes("browser");
4511
+ const dtsTSConfigPaths = [
4512
+ resolveWorkspacePath("tsconfig.json"),
4513
+ resolveWorkspacePath("tsconfig.dts.json")
4514
+ ];
4515
+ let dtsTSConfigPath;
4516
+ dtsTSConfigPaths.forEach((p) => {
4517
+ if (fs__default.default.existsSync(p) && fs__default.default.statSync(p).isFile()) {
4518
+ dtsTSConfigPath = p;
4519
+ }
4520
+ });
4521
+ let compilerOptions = {};
4522
+ if (dtsTSConfigPath) {
4523
+ const jsonCompilerOptions = getCompilerOptionsByFilePath(dtsTSConfigPath, path.resolve(input));
4524
+ const { options: options2, errors } = ts__default.default.convertCompilerOptionsFromJson(
4525
+ jsonCompilerOptions,
4526
+ path.dirname(dtsTSConfigPath)
4527
+ );
4528
+ if (errors.length > 0) {
4529
+ throw new Error(errors.map((e) => e.messageText).join("\n"));
4530
+ }
4531
+ compilerOptions = options2;
4532
+ }
4533
+ const exportConditions = [...conditionals, ...compilerOptions.customConditions ?? []];
4534
+ const throughEventProps = {
4535
+ type: "progress",
4536
+ data: { name, path: path$1, exportConditions, input }
4537
+ };
4538
+ const outdir = options?.output?.dir;
4539
+ return [
4540
+ {
4541
+ input,
4542
+ external,
4543
+ output: [
4544
+ ...withMinify({
4545
+ file: output,
4546
+ name,
4547
+ interop: "auto",
4548
+ sourcemap: typeof options?.output?.sourcemap === "object" ? options.output.sourcemap.js : options?.output?.sourcemap,
4549
+ format: isModule ? "esm" : isCommonJS ? "cjs" : isBrowser ? "umd" : pkgIsModule ? "esm" : "cjs",
4550
+ strict: typeof options?.output?.strict === "object" ? options.output.strict.js : options?.output?.strict
4551
+ })
4552
+ ],
4553
+ plugins: [
4554
+ pluginNodeResolve.nodeResolve({ exportConditions }),
4555
+ import('rollup-plugin-postcss').then(
4556
+ ({ default: postcss }) => postcss({
4557
+ extract: path.resolve(output.replace(/\.[cm]?js$/, ".css")),
4558
+ minimize: true
4559
+ })
4560
+ ).catch(() => void 0),
4561
+ esbuild__default.default(),
4562
+ commonjs__default.default(),
4563
+ progress({
4564
+ onEvent: (event, message) => execa.sendMessage(
4565
+ {
4566
+ ...throughEventProps,
4567
+ data: { ...throughEventProps.data, event, message, tags: ["js"] }
4568
+ }
4569
+ )
4570
+ })
4571
+ ]
4572
+ },
4573
+ {
4574
+ input,
4575
+ external,
4576
+ output: [
4577
+ {
4578
+ dir: path.resolve((typeof outdir === "object" ? outdir.dts : outdir) ?? "dist"),
4579
+ sourcemap: typeof options?.output?.sourcemap === "object" ? options.output.sourcemap.dts : options?.output?.sourcemap,
4580
+ entryFileNames: () => output.replace(`${jsOutdir}/`, "").replace(/(\.[cm]?)js$/, ".d$1ts"),
4581
+ strict: typeof options?.output?.strict === "object" ? options.output.strict.dts : options?.output?.strict
4582
+ }
4583
+ ],
4584
+ plugins: [
4585
+ pluginNodeResolve.nodeResolve({ exportConditions }),
4586
+ skip({ patterns: [STYLE_REGEXP] }),
4587
+ rollupPluginDts.dts({
4588
+ respectExternal: true,
4589
+ compilerOptions
4590
+ }),
4591
+ progress({
4592
+ onEvent: (event, message) => execa.sendMessage(
4593
+ {
4594
+ ...throughEventProps,
4595
+ data: { ...throughEventProps.data, event, message, tags: ["dts"] }
4596
+ }
4597
+ )
4598
+ })
4599
+ ]
4600
+ }
4601
+ ];
4602
+ };
4603
+ function template(packageJSON) {
4604
+ const { name, type, exports: entrypoints$1 } = packageJSON;
4605
+ const pkgIsModule = type === "module";
4606
+ if (!name)
4607
+ throw new Error("package.json name is required");
4608
+ if (!entrypoints$1)
4609
+ throw new Error("package.json exports is required");
4610
+ const entries = JIEK_ENTRIES?.split(",").map((e) => e.trim()).map((e) => ({
4611
+ "index": "."
4612
+ })[e] ?? e);
4613
+ const packageName = pascalCase(name);
4614
+ const external = externalResolver(packageJSON);
4615
+ const [filteredResolvedEntrypoints, exports] = getExports({
4616
+ entrypoints: entrypoints$1,
4617
+ pkgIsModule,
4618
+ entries,
4619
+ config
4620
+ });
4621
+ const leafMap = /* @__PURE__ */ new Map();
4622
+ entrypoints.getAllLeafs(filteredResolvedEntrypoints, ({ keys, value }) => {
4623
+ if (typeof value === "string") {
4624
+ const keysArr = leafMap.get(value) ?? [];
4625
+ leafMap.set(value, keysArr);
4626
+ keysArr.push(keys);
4627
+ }
4628
+ return false;
4629
+ });
4630
+ const configs = [];
4631
+ leafMap.forEach(
4632
+ (keysArr, input) => keysArr.forEach((keys) => {
4633
+ const [path, ...conditionals] = keys;
4634
+ const name2 = packageName + (path === "." ? "" : pascalCase(path));
4635
+ const keyExports = reveal(exports, keys);
4636
+ const commonOptions = {
4637
+ path,
4638
+ name: name2,
4639
+ input,
4640
+ external,
4641
+ pkgIsModule
4642
+ };
4643
+ switch (typeof keyExports) {
4644
+ case "string": {
4645
+ configs.push(...generateConfigs({
4646
+ ...commonOptions,
4647
+ output: keyExports,
4648
+ conditionals
4649
+ }, build));
4650
+ break;
4651
+ }
4652
+ case "object": {
4653
+ entrypoints.getAllLeafs(keyExports, ({ keys: nextKeys, value }) => {
4654
+ const allConditionals = [.../* @__PURE__ */ new Set([...conditionals, ...nextKeys])];
4655
+ if (typeof value === "string") {
4656
+ configs.push(...generateConfigs({
4657
+ ...commonOptions,
4658
+ output: value,
4659
+ conditionals: allConditionals
4660
+ }, build));
4661
+ }
4662
+ return false;
4663
+ });
4664
+ break;
4665
+ }
4666
+ }
4667
+ })
4668
+ );
4669
+ execa.sendMessage(
4670
+ {
4671
+ type: "init",
4672
+ data: {
4673
+ leafMap,
4674
+ targetsLength: configs.length
4675
+ }
4676
+ }
4677
+ );
4678
+ return configs.map((c) => ({
4679
+ ...COMMON_OPTIONS,
4680
+ ...c,
4681
+ plugins: [
4682
+ ...COMMON_PLUGINS,
4683
+ c.plugins
4684
+ ]
4685
+ }));
4686
+ }
4687
+
4688
+ exports.template = template;