@c4a/core 0.4.15-alpha.8 → 0.4.15-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +1841 -0
  2. package/package.json +2 -1
package/index.js CHANGED
@@ -6978,6 +6978,1685 @@ var require_dist = __commonJS((exports) => {
6978
6978
  exports.visitAsync = visit.visitAsync;
6979
6979
  });
6980
6980
 
6981
+ // ../../node_modules/.bun/picomatch@4.0.4/node_modules/picomatch/lib/constants.js
6982
+ var require_constants = __commonJS((exports, module) => {
6983
+ var WIN_SLASH = "\\\\/";
6984
+ var WIN_NO_SLASH = `[^${WIN_SLASH}]`;
6985
+ var DEFAULT_MAX_EXTGLOB_RECURSION = 0;
6986
+ var DOT_LITERAL = "\\.";
6987
+ var PLUS_LITERAL = "\\+";
6988
+ var QMARK_LITERAL = "\\?";
6989
+ var SLASH_LITERAL = "\\/";
6990
+ var ONE_CHAR = "(?=.)";
6991
+ var QMARK = "[^/]";
6992
+ var END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
6993
+ var START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
6994
+ var DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
6995
+ var NO_DOT = `(?!${DOT_LITERAL})`;
6996
+ var NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
6997
+ var NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
6998
+ var NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
6999
+ var QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
7000
+ var STAR = `${QMARK}*?`;
7001
+ var SEP = "/";
7002
+ var POSIX_CHARS = {
7003
+ DOT_LITERAL,
7004
+ PLUS_LITERAL,
7005
+ QMARK_LITERAL,
7006
+ SLASH_LITERAL,
7007
+ ONE_CHAR,
7008
+ QMARK,
7009
+ END_ANCHOR,
7010
+ DOTS_SLASH,
7011
+ NO_DOT,
7012
+ NO_DOTS,
7013
+ NO_DOT_SLASH,
7014
+ NO_DOTS_SLASH,
7015
+ QMARK_NO_DOT,
7016
+ STAR,
7017
+ START_ANCHOR,
7018
+ SEP
7019
+ };
7020
+ var WINDOWS_CHARS = {
7021
+ ...POSIX_CHARS,
7022
+ SLASH_LITERAL: `[${WIN_SLASH}]`,
7023
+ QMARK: WIN_NO_SLASH,
7024
+ STAR: `${WIN_NO_SLASH}*?`,
7025
+ DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
7026
+ NO_DOT: `(?!${DOT_LITERAL})`,
7027
+ NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
7028
+ NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
7029
+ NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
7030
+ QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
7031
+ START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
7032
+ END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,
7033
+ SEP: "\\"
7034
+ };
7035
+ var POSIX_REGEX_SOURCE = {
7036
+ __proto__: null,
7037
+ alnum: "a-zA-Z0-9",
7038
+ alpha: "a-zA-Z",
7039
+ ascii: "\\x00-\\x7F",
7040
+ blank: " \\t",
7041
+ cntrl: "\\x00-\\x1F\\x7F",
7042
+ digit: "0-9",
7043
+ graph: "\\x21-\\x7E",
7044
+ lower: "a-z",
7045
+ print: "\\x20-\\x7E ",
7046
+ punct: "\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",
7047
+ space: " \\t\\r\\n\\v\\f",
7048
+ upper: "A-Z",
7049
+ word: "A-Za-z0-9_",
7050
+ xdigit: "A-Fa-f0-9"
7051
+ };
7052
+ module.exports = {
7053
+ DEFAULT_MAX_EXTGLOB_RECURSION,
7054
+ MAX_LENGTH: 1024 * 64,
7055
+ POSIX_REGEX_SOURCE,
7056
+ REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
7057
+ REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
7058
+ REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
7059
+ REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
7060
+ REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
7061
+ REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
7062
+ REPLACEMENTS: {
7063
+ __proto__: null,
7064
+ "***": "*",
7065
+ "**/**": "**",
7066
+ "**/**/**": "**"
7067
+ },
7068
+ CHAR_0: 48,
7069
+ CHAR_9: 57,
7070
+ CHAR_UPPERCASE_A: 65,
7071
+ CHAR_LOWERCASE_A: 97,
7072
+ CHAR_UPPERCASE_Z: 90,
7073
+ CHAR_LOWERCASE_Z: 122,
7074
+ CHAR_LEFT_PARENTHESES: 40,
7075
+ CHAR_RIGHT_PARENTHESES: 41,
7076
+ CHAR_ASTERISK: 42,
7077
+ CHAR_AMPERSAND: 38,
7078
+ CHAR_AT: 64,
7079
+ CHAR_BACKWARD_SLASH: 92,
7080
+ CHAR_CARRIAGE_RETURN: 13,
7081
+ CHAR_CIRCUMFLEX_ACCENT: 94,
7082
+ CHAR_COLON: 58,
7083
+ CHAR_COMMA: 44,
7084
+ CHAR_DOT: 46,
7085
+ CHAR_DOUBLE_QUOTE: 34,
7086
+ CHAR_EQUAL: 61,
7087
+ CHAR_EXCLAMATION_MARK: 33,
7088
+ CHAR_FORM_FEED: 12,
7089
+ CHAR_FORWARD_SLASH: 47,
7090
+ CHAR_GRAVE_ACCENT: 96,
7091
+ CHAR_HASH: 35,
7092
+ CHAR_HYPHEN_MINUS: 45,
7093
+ CHAR_LEFT_ANGLE_BRACKET: 60,
7094
+ CHAR_LEFT_CURLY_BRACE: 123,
7095
+ CHAR_LEFT_SQUARE_BRACKET: 91,
7096
+ CHAR_LINE_FEED: 10,
7097
+ CHAR_NO_BREAK_SPACE: 160,
7098
+ CHAR_PERCENT: 37,
7099
+ CHAR_PLUS: 43,
7100
+ CHAR_QUESTION_MARK: 63,
7101
+ CHAR_RIGHT_ANGLE_BRACKET: 62,
7102
+ CHAR_RIGHT_CURLY_BRACE: 125,
7103
+ CHAR_RIGHT_SQUARE_BRACKET: 93,
7104
+ CHAR_SEMICOLON: 59,
7105
+ CHAR_SINGLE_QUOTE: 39,
7106
+ CHAR_SPACE: 32,
7107
+ CHAR_TAB: 9,
7108
+ CHAR_UNDERSCORE: 95,
7109
+ CHAR_VERTICAL_LINE: 124,
7110
+ CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279,
7111
+ extglobChars(chars) {
7112
+ return {
7113
+ "!": { type: "negate", open: "(?:(?!(?:", close: `))${chars.STAR})` },
7114
+ "?": { type: "qmark", open: "(?:", close: ")?" },
7115
+ "+": { type: "plus", open: "(?:", close: ")+" },
7116
+ "*": { type: "star", open: "(?:", close: ")*" },
7117
+ "@": { type: "at", open: "(?:", close: ")" }
7118
+ };
7119
+ },
7120
+ globChars(win32) {
7121
+ return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
7122
+ }
7123
+ };
7124
+ });
7125
+
7126
+ // ../../node_modules/.bun/picomatch@4.0.4/node_modules/picomatch/lib/utils.js
7127
+ var require_utils = __commonJS((exports) => {
7128
+ var {
7129
+ REGEX_BACKSLASH,
7130
+ REGEX_REMOVE_BACKSLASH,
7131
+ REGEX_SPECIAL_CHARS,
7132
+ REGEX_SPECIAL_CHARS_GLOBAL
7133
+ } = require_constants();
7134
+ exports.isObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val);
7135
+ exports.hasRegexChars = (str) => REGEX_SPECIAL_CHARS.test(str);
7136
+ exports.isRegexChar = (str) => str.length === 1 && exports.hasRegexChars(str);
7137
+ exports.escapeRegex = (str) => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, "\\$1");
7138
+ exports.toPosixSlashes = (str) => str.replace(REGEX_BACKSLASH, "/");
7139
+ exports.isWindows = () => {
7140
+ if (typeof navigator !== "undefined" && navigator.platform) {
7141
+ const platform = navigator.platform.toLowerCase();
7142
+ return platform === "win32" || platform === "windows";
7143
+ }
7144
+ if (typeof process !== "undefined" && process.platform) {
7145
+ return process.platform === "win32";
7146
+ }
7147
+ return false;
7148
+ };
7149
+ exports.removeBackslashes = (str) => {
7150
+ return str.replace(REGEX_REMOVE_BACKSLASH, (match) => {
7151
+ return match === "\\" ? "" : match;
7152
+ });
7153
+ };
7154
+ exports.escapeLast = (input, char, lastIdx) => {
7155
+ const idx = input.lastIndexOf(char, lastIdx);
7156
+ if (idx === -1)
7157
+ return input;
7158
+ if (input[idx - 1] === "\\")
7159
+ return exports.escapeLast(input, char, idx - 1);
7160
+ return `${input.slice(0, idx)}\\${input.slice(idx)}`;
7161
+ };
7162
+ exports.removePrefix = (input, state = {}) => {
7163
+ let output = input;
7164
+ if (output.startsWith("./")) {
7165
+ output = output.slice(2);
7166
+ state.prefix = "./";
7167
+ }
7168
+ return output;
7169
+ };
7170
+ exports.wrapOutput = (input, state = {}, options = {}) => {
7171
+ const prepend = options.contains ? "" : "^";
7172
+ const append = options.contains ? "" : "$";
7173
+ let output = `${prepend}(?:${input})${append}`;
7174
+ if (state.negated === true) {
7175
+ output = `(?:^(?!${output}).*$)`;
7176
+ }
7177
+ return output;
7178
+ };
7179
+ exports.basename = (path2, { windows } = {}) => {
7180
+ const segs = path2.split(windows ? /[\\/]/ : "/");
7181
+ const last = segs[segs.length - 1];
7182
+ if (last === "") {
7183
+ return segs[segs.length - 2];
7184
+ }
7185
+ return last;
7186
+ };
7187
+ });
7188
+
7189
+ // ../../node_modules/.bun/picomatch@4.0.4/node_modules/picomatch/lib/scan.js
7190
+ var require_scan = __commonJS((exports, module) => {
7191
+ var utils = require_utils();
7192
+ var {
7193
+ CHAR_ASTERISK,
7194
+ CHAR_AT,
7195
+ CHAR_BACKWARD_SLASH,
7196
+ CHAR_COMMA,
7197
+ CHAR_DOT,
7198
+ CHAR_EXCLAMATION_MARK,
7199
+ CHAR_FORWARD_SLASH,
7200
+ CHAR_LEFT_CURLY_BRACE,
7201
+ CHAR_LEFT_PARENTHESES,
7202
+ CHAR_LEFT_SQUARE_BRACKET,
7203
+ CHAR_PLUS,
7204
+ CHAR_QUESTION_MARK,
7205
+ CHAR_RIGHT_CURLY_BRACE,
7206
+ CHAR_RIGHT_PARENTHESES,
7207
+ CHAR_RIGHT_SQUARE_BRACKET
7208
+ } = require_constants();
7209
+ var isPathSeparator = (code) => {
7210
+ return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
7211
+ };
7212
+ var depth = (token) => {
7213
+ if (token.isPrefix !== true) {
7214
+ token.depth = token.isGlobstar ? Infinity : 1;
7215
+ }
7216
+ };
7217
+ var scan = (input, options) => {
7218
+ const opts = options || {};
7219
+ const length = input.length - 1;
7220
+ const scanToEnd = opts.parts === true || opts.scanToEnd === true;
7221
+ const slashes = [];
7222
+ const tokens = [];
7223
+ const parts = [];
7224
+ let str = input;
7225
+ let index = -1;
7226
+ let start = 0;
7227
+ let lastIndex = 0;
7228
+ let isBrace = false;
7229
+ let isBracket = false;
7230
+ let isGlob = false;
7231
+ let isExtglob = false;
7232
+ let isGlobstar = false;
7233
+ let braceEscaped = false;
7234
+ let backslashes = false;
7235
+ let negated = false;
7236
+ let negatedExtglob = false;
7237
+ let finished = false;
7238
+ let braces = 0;
7239
+ let prev;
7240
+ let code;
7241
+ let token = { value: "", depth: 0, isGlob: false };
7242
+ const eos = () => index >= length;
7243
+ const peek = () => str.charCodeAt(index + 1);
7244
+ const advance = () => {
7245
+ prev = code;
7246
+ return str.charCodeAt(++index);
7247
+ };
7248
+ while (index < length) {
7249
+ code = advance();
7250
+ let next;
7251
+ if (code === CHAR_BACKWARD_SLASH) {
7252
+ backslashes = token.backslashes = true;
7253
+ code = advance();
7254
+ if (code === CHAR_LEFT_CURLY_BRACE) {
7255
+ braceEscaped = true;
7256
+ }
7257
+ continue;
7258
+ }
7259
+ if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
7260
+ braces++;
7261
+ while (eos() !== true && (code = advance())) {
7262
+ if (code === CHAR_BACKWARD_SLASH) {
7263
+ backslashes = token.backslashes = true;
7264
+ advance();
7265
+ continue;
7266
+ }
7267
+ if (code === CHAR_LEFT_CURLY_BRACE) {
7268
+ braces++;
7269
+ continue;
7270
+ }
7271
+ if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
7272
+ isBrace = token.isBrace = true;
7273
+ isGlob = token.isGlob = true;
7274
+ finished = true;
7275
+ if (scanToEnd === true) {
7276
+ continue;
7277
+ }
7278
+ break;
7279
+ }
7280
+ if (braceEscaped !== true && code === CHAR_COMMA) {
7281
+ isBrace = token.isBrace = true;
7282
+ isGlob = token.isGlob = true;
7283
+ finished = true;
7284
+ if (scanToEnd === true) {
7285
+ continue;
7286
+ }
7287
+ break;
7288
+ }
7289
+ if (code === CHAR_RIGHT_CURLY_BRACE) {
7290
+ braces--;
7291
+ if (braces === 0) {
7292
+ braceEscaped = false;
7293
+ isBrace = token.isBrace = true;
7294
+ finished = true;
7295
+ break;
7296
+ }
7297
+ }
7298
+ }
7299
+ if (scanToEnd === true) {
7300
+ continue;
7301
+ }
7302
+ break;
7303
+ }
7304
+ if (code === CHAR_FORWARD_SLASH) {
7305
+ slashes.push(index);
7306
+ tokens.push(token);
7307
+ token = { value: "", depth: 0, isGlob: false };
7308
+ if (finished === true)
7309
+ continue;
7310
+ if (prev === CHAR_DOT && index === start + 1) {
7311
+ start += 2;
7312
+ continue;
7313
+ }
7314
+ lastIndex = index + 1;
7315
+ continue;
7316
+ }
7317
+ if (opts.noext !== true) {
7318
+ const isExtglobChar = code === CHAR_PLUS || code === CHAR_AT || code === CHAR_ASTERISK || code === CHAR_QUESTION_MARK || code === CHAR_EXCLAMATION_MARK;
7319
+ if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
7320
+ isGlob = token.isGlob = true;
7321
+ isExtglob = token.isExtglob = true;
7322
+ finished = true;
7323
+ if (code === CHAR_EXCLAMATION_MARK && index === start) {
7324
+ negatedExtglob = true;
7325
+ }
7326
+ if (scanToEnd === true) {
7327
+ while (eos() !== true && (code = advance())) {
7328
+ if (code === CHAR_BACKWARD_SLASH) {
7329
+ backslashes = token.backslashes = true;
7330
+ code = advance();
7331
+ continue;
7332
+ }
7333
+ if (code === CHAR_RIGHT_PARENTHESES) {
7334
+ isGlob = token.isGlob = true;
7335
+ finished = true;
7336
+ break;
7337
+ }
7338
+ }
7339
+ continue;
7340
+ }
7341
+ break;
7342
+ }
7343
+ }
7344
+ if (code === CHAR_ASTERISK) {
7345
+ if (prev === CHAR_ASTERISK)
7346
+ isGlobstar = token.isGlobstar = true;
7347
+ isGlob = token.isGlob = true;
7348
+ finished = true;
7349
+ if (scanToEnd === true) {
7350
+ continue;
7351
+ }
7352
+ break;
7353
+ }
7354
+ if (code === CHAR_QUESTION_MARK) {
7355
+ isGlob = token.isGlob = true;
7356
+ finished = true;
7357
+ if (scanToEnd === true) {
7358
+ continue;
7359
+ }
7360
+ break;
7361
+ }
7362
+ if (code === CHAR_LEFT_SQUARE_BRACKET) {
7363
+ while (eos() !== true && (next = advance())) {
7364
+ if (next === CHAR_BACKWARD_SLASH) {
7365
+ backslashes = token.backslashes = true;
7366
+ advance();
7367
+ continue;
7368
+ }
7369
+ if (next === CHAR_RIGHT_SQUARE_BRACKET) {
7370
+ isBracket = token.isBracket = true;
7371
+ isGlob = token.isGlob = true;
7372
+ finished = true;
7373
+ break;
7374
+ }
7375
+ }
7376
+ if (scanToEnd === true) {
7377
+ continue;
7378
+ }
7379
+ break;
7380
+ }
7381
+ if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
7382
+ negated = token.negated = true;
7383
+ start++;
7384
+ continue;
7385
+ }
7386
+ if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
7387
+ isGlob = token.isGlob = true;
7388
+ if (scanToEnd === true) {
7389
+ while (eos() !== true && (code = advance())) {
7390
+ if (code === CHAR_LEFT_PARENTHESES) {
7391
+ backslashes = token.backslashes = true;
7392
+ code = advance();
7393
+ continue;
7394
+ }
7395
+ if (code === CHAR_RIGHT_PARENTHESES) {
7396
+ finished = true;
7397
+ break;
7398
+ }
7399
+ }
7400
+ continue;
7401
+ }
7402
+ break;
7403
+ }
7404
+ if (isGlob === true) {
7405
+ finished = true;
7406
+ if (scanToEnd === true) {
7407
+ continue;
7408
+ }
7409
+ break;
7410
+ }
7411
+ }
7412
+ if (opts.noext === true) {
7413
+ isExtglob = false;
7414
+ isGlob = false;
7415
+ }
7416
+ let base2 = str;
7417
+ let prefix = "";
7418
+ let glob = "";
7419
+ if (start > 0) {
7420
+ prefix = str.slice(0, start);
7421
+ str = str.slice(start);
7422
+ lastIndex -= start;
7423
+ }
7424
+ if (base2 && isGlob === true && lastIndex > 0) {
7425
+ base2 = str.slice(0, lastIndex);
7426
+ glob = str.slice(lastIndex);
7427
+ } else if (isGlob === true) {
7428
+ base2 = "";
7429
+ glob = str;
7430
+ } else {
7431
+ base2 = str;
7432
+ }
7433
+ if (base2 && base2 !== "" && base2 !== "/" && base2 !== str) {
7434
+ if (isPathSeparator(base2.charCodeAt(base2.length - 1))) {
7435
+ base2 = base2.slice(0, -1);
7436
+ }
7437
+ }
7438
+ if (opts.unescape === true) {
7439
+ if (glob)
7440
+ glob = utils.removeBackslashes(glob);
7441
+ if (base2 && backslashes === true) {
7442
+ base2 = utils.removeBackslashes(base2);
7443
+ }
7444
+ }
7445
+ const state = {
7446
+ prefix,
7447
+ input,
7448
+ start,
7449
+ base: base2,
7450
+ glob,
7451
+ isBrace,
7452
+ isBracket,
7453
+ isGlob,
7454
+ isExtglob,
7455
+ isGlobstar,
7456
+ negated,
7457
+ negatedExtglob
7458
+ };
7459
+ if (opts.tokens === true) {
7460
+ state.maxDepth = 0;
7461
+ if (!isPathSeparator(code)) {
7462
+ tokens.push(token);
7463
+ }
7464
+ state.tokens = tokens;
7465
+ }
7466
+ if (opts.parts === true || opts.tokens === true) {
7467
+ let prevIndex;
7468
+ for (let idx = 0;idx < slashes.length; idx++) {
7469
+ const n = prevIndex ? prevIndex + 1 : start;
7470
+ const i = slashes[idx];
7471
+ const value = input.slice(n, i);
7472
+ if (opts.tokens) {
7473
+ if (idx === 0 && start !== 0) {
7474
+ tokens[idx].isPrefix = true;
7475
+ tokens[idx].value = prefix;
7476
+ } else {
7477
+ tokens[idx].value = value;
7478
+ }
7479
+ depth(tokens[idx]);
7480
+ state.maxDepth += tokens[idx].depth;
7481
+ }
7482
+ if (idx !== 0 || value !== "") {
7483
+ parts.push(value);
7484
+ }
7485
+ prevIndex = i;
7486
+ }
7487
+ if (prevIndex && prevIndex + 1 < input.length) {
7488
+ const value = input.slice(prevIndex + 1);
7489
+ parts.push(value);
7490
+ if (opts.tokens) {
7491
+ tokens[tokens.length - 1].value = value;
7492
+ depth(tokens[tokens.length - 1]);
7493
+ state.maxDepth += tokens[tokens.length - 1].depth;
7494
+ }
7495
+ }
7496
+ state.slashes = slashes;
7497
+ state.parts = parts;
7498
+ }
7499
+ return state;
7500
+ };
7501
+ module.exports = scan;
7502
+ });
7503
+
7504
+ // ../../node_modules/.bun/picomatch@4.0.4/node_modules/picomatch/lib/parse.js
7505
+ var require_parse = __commonJS((exports, module) => {
7506
+ var constants = require_constants();
7507
+ var utils = require_utils();
7508
+ var {
7509
+ MAX_LENGTH,
7510
+ POSIX_REGEX_SOURCE,
7511
+ REGEX_NON_SPECIAL_CHARS,
7512
+ REGEX_SPECIAL_CHARS_BACKREF,
7513
+ REPLACEMENTS
7514
+ } = constants;
7515
+ var expandRange = (args, options) => {
7516
+ if (typeof options.expandRange === "function") {
7517
+ return options.expandRange(...args, options);
7518
+ }
7519
+ args.sort();
7520
+ const value = `[${args.join("-")}]`;
7521
+ try {
7522
+ new RegExp(value);
7523
+ } catch (ex) {
7524
+ return args.map((v) => utils.escapeRegex(v)).join("..");
7525
+ }
7526
+ return value;
7527
+ };
7528
+ var syntaxError = (type, char) => {
7529
+ return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
7530
+ };
7531
+ var splitTopLevel = (input) => {
7532
+ const parts = [];
7533
+ let bracket = 0;
7534
+ let paren = 0;
7535
+ let quote = 0;
7536
+ let value = "";
7537
+ let escaped = false;
7538
+ for (const ch of input) {
7539
+ if (escaped === true) {
7540
+ value += ch;
7541
+ escaped = false;
7542
+ continue;
7543
+ }
7544
+ if (ch === "\\") {
7545
+ value += ch;
7546
+ escaped = true;
7547
+ continue;
7548
+ }
7549
+ if (ch === '"') {
7550
+ quote = quote === 1 ? 0 : 1;
7551
+ value += ch;
7552
+ continue;
7553
+ }
7554
+ if (quote === 0) {
7555
+ if (ch === "[") {
7556
+ bracket++;
7557
+ } else if (ch === "]" && bracket > 0) {
7558
+ bracket--;
7559
+ } else if (bracket === 0) {
7560
+ if (ch === "(") {
7561
+ paren++;
7562
+ } else if (ch === ")" && paren > 0) {
7563
+ paren--;
7564
+ } else if (ch === "|" && paren === 0) {
7565
+ parts.push(value);
7566
+ value = "";
7567
+ continue;
7568
+ }
7569
+ }
7570
+ }
7571
+ value += ch;
7572
+ }
7573
+ parts.push(value);
7574
+ return parts;
7575
+ };
7576
+ var isPlainBranch = (branch) => {
7577
+ let escaped = false;
7578
+ for (const ch of branch) {
7579
+ if (escaped === true) {
7580
+ escaped = false;
7581
+ continue;
7582
+ }
7583
+ if (ch === "\\") {
7584
+ escaped = true;
7585
+ continue;
7586
+ }
7587
+ if (/[?*+@!()[\]{}]/.test(ch)) {
7588
+ return false;
7589
+ }
7590
+ }
7591
+ return true;
7592
+ };
7593
+ var normalizeSimpleBranch = (branch) => {
7594
+ let value = branch.trim();
7595
+ let changed = true;
7596
+ while (changed === true) {
7597
+ changed = false;
7598
+ if (/^@\([^\\()[\]{}|]+\)$/.test(value)) {
7599
+ value = value.slice(2, -1);
7600
+ changed = true;
7601
+ }
7602
+ }
7603
+ if (!isPlainBranch(value)) {
7604
+ return;
7605
+ }
7606
+ return value.replace(/\\(.)/g, "$1");
7607
+ };
7608
+ var hasRepeatedCharPrefixOverlap = (branches) => {
7609
+ const values = branches.map(normalizeSimpleBranch).filter(Boolean);
7610
+ for (let i = 0;i < values.length; i++) {
7611
+ for (let j = i + 1;j < values.length; j++) {
7612
+ const a = values[i];
7613
+ const b = values[j];
7614
+ const char = a[0];
7615
+ if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) {
7616
+ continue;
7617
+ }
7618
+ if (a === b || a.startsWith(b) || b.startsWith(a)) {
7619
+ return true;
7620
+ }
7621
+ }
7622
+ }
7623
+ return false;
7624
+ };
7625
+ var parseRepeatedExtglob = (pattern, requireEnd = true) => {
7626
+ if (pattern[0] !== "+" && pattern[0] !== "*" || pattern[1] !== "(") {
7627
+ return;
7628
+ }
7629
+ let bracket = 0;
7630
+ let paren = 0;
7631
+ let quote = 0;
7632
+ let escaped = false;
7633
+ for (let i = 1;i < pattern.length; i++) {
7634
+ const ch = pattern[i];
7635
+ if (escaped === true) {
7636
+ escaped = false;
7637
+ continue;
7638
+ }
7639
+ if (ch === "\\") {
7640
+ escaped = true;
7641
+ continue;
7642
+ }
7643
+ if (ch === '"') {
7644
+ quote = quote === 1 ? 0 : 1;
7645
+ continue;
7646
+ }
7647
+ if (quote === 1) {
7648
+ continue;
7649
+ }
7650
+ if (ch === "[") {
7651
+ bracket++;
7652
+ continue;
7653
+ }
7654
+ if (ch === "]" && bracket > 0) {
7655
+ bracket--;
7656
+ continue;
7657
+ }
7658
+ if (bracket > 0) {
7659
+ continue;
7660
+ }
7661
+ if (ch === "(") {
7662
+ paren++;
7663
+ continue;
7664
+ }
7665
+ if (ch === ")") {
7666
+ paren--;
7667
+ if (paren === 0) {
7668
+ if (requireEnd === true && i !== pattern.length - 1) {
7669
+ return;
7670
+ }
7671
+ return {
7672
+ type: pattern[0],
7673
+ body: pattern.slice(2, i),
7674
+ end: i
7675
+ };
7676
+ }
7677
+ }
7678
+ }
7679
+ };
7680
+ var getStarExtglobSequenceOutput = (pattern) => {
7681
+ let index = 0;
7682
+ const chars = [];
7683
+ while (index < pattern.length) {
7684
+ const match = parseRepeatedExtglob(pattern.slice(index), false);
7685
+ if (!match || match.type !== "*") {
7686
+ return;
7687
+ }
7688
+ const branches = splitTopLevel(match.body).map((branch2) => branch2.trim());
7689
+ if (branches.length !== 1) {
7690
+ return;
7691
+ }
7692
+ const branch = normalizeSimpleBranch(branches[0]);
7693
+ if (!branch || branch.length !== 1) {
7694
+ return;
7695
+ }
7696
+ chars.push(branch);
7697
+ index += match.end + 1;
7698
+ }
7699
+ if (chars.length < 1) {
7700
+ return;
7701
+ }
7702
+ const source2 = chars.length === 1 ? utils.escapeRegex(chars[0]) : `[${chars.map((ch) => utils.escapeRegex(ch)).join("")}]`;
7703
+ return `${source2}*`;
7704
+ };
7705
+ var repeatedExtglobRecursion = (pattern) => {
7706
+ let depth = 0;
7707
+ let value = pattern.trim();
7708
+ let match = parseRepeatedExtglob(value);
7709
+ while (match) {
7710
+ depth++;
7711
+ value = match.body.trim();
7712
+ match = parseRepeatedExtglob(value);
7713
+ }
7714
+ return depth;
7715
+ };
7716
+ var analyzeRepeatedExtglob = (body, options) => {
7717
+ if (options.maxExtglobRecursion === false) {
7718
+ return { risky: false };
7719
+ }
7720
+ const max = typeof options.maxExtglobRecursion === "number" ? options.maxExtglobRecursion : constants.DEFAULT_MAX_EXTGLOB_RECURSION;
7721
+ const branches = splitTopLevel(body).map((branch) => branch.trim());
7722
+ if (branches.length > 1) {
7723
+ if (branches.some((branch) => branch === "") || branches.some((branch) => /^[*?]+$/.test(branch)) || hasRepeatedCharPrefixOverlap(branches)) {
7724
+ return { risky: true };
7725
+ }
7726
+ }
7727
+ for (const branch of branches) {
7728
+ const safeOutput = getStarExtglobSequenceOutput(branch);
7729
+ if (safeOutput) {
7730
+ return { risky: true, safeOutput };
7731
+ }
7732
+ if (repeatedExtglobRecursion(branch) > max) {
7733
+ return { risky: true };
7734
+ }
7735
+ }
7736
+ return { risky: false };
7737
+ };
7738
+ var parse = (input, options) => {
7739
+ if (typeof input !== "string") {
7740
+ throw new TypeError("Expected a string");
7741
+ }
7742
+ input = REPLACEMENTS[input] || input;
7743
+ const opts = { ...options };
7744
+ const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
7745
+ let len = input.length;
7746
+ if (len > max) {
7747
+ throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
7748
+ }
7749
+ const bos = { type: "bos", value: "", output: opts.prepend || "" };
7750
+ const tokens = [bos];
7751
+ const capture = opts.capture ? "" : "?:";
7752
+ const PLATFORM_CHARS = constants.globChars(opts.windows);
7753
+ const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
7754
+ const {
7755
+ DOT_LITERAL,
7756
+ PLUS_LITERAL,
7757
+ SLASH_LITERAL,
7758
+ ONE_CHAR,
7759
+ DOTS_SLASH,
7760
+ NO_DOT,
7761
+ NO_DOT_SLASH,
7762
+ NO_DOTS_SLASH,
7763
+ QMARK,
7764
+ QMARK_NO_DOT,
7765
+ STAR,
7766
+ START_ANCHOR
7767
+ } = PLATFORM_CHARS;
7768
+ const globstar = (opts2) => {
7769
+ return `(${capture}(?:(?!${START_ANCHOR}${opts2.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
7770
+ };
7771
+ const nodot = opts.dot ? "" : NO_DOT;
7772
+ const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
7773
+ let star = opts.bash === true ? globstar(opts) : STAR;
7774
+ if (opts.capture) {
7775
+ star = `(${star})`;
7776
+ }
7777
+ if (typeof opts.noext === "boolean") {
7778
+ opts.noextglob = opts.noext;
7779
+ }
7780
+ const state = {
7781
+ input,
7782
+ index: -1,
7783
+ start: 0,
7784
+ dot: opts.dot === true,
7785
+ consumed: "",
7786
+ output: "",
7787
+ prefix: "",
7788
+ backtrack: false,
7789
+ negated: false,
7790
+ brackets: 0,
7791
+ braces: 0,
7792
+ parens: 0,
7793
+ quotes: 0,
7794
+ globstar: false,
7795
+ tokens
7796
+ };
7797
+ input = utils.removePrefix(input, state);
7798
+ len = input.length;
7799
+ const extglobs = [];
7800
+ const braces = [];
7801
+ const stack = [];
7802
+ let prev = bos;
7803
+ let value;
7804
+ const eos = () => state.index === len - 1;
7805
+ const peek = state.peek = (n = 1) => input[state.index + n];
7806
+ const advance = state.advance = () => input[++state.index] || "";
7807
+ const remaining = () => input.slice(state.index + 1);
7808
+ const consume = (value2 = "", num = 0) => {
7809
+ state.consumed += value2;
7810
+ state.index += num;
7811
+ };
7812
+ const append = (token) => {
7813
+ state.output += token.output != null ? token.output : token.value;
7814
+ consume(token.value);
7815
+ };
7816
+ const negate = () => {
7817
+ let count = 1;
7818
+ while (peek() === "!" && (peek(2) !== "(" || peek(3) === "?")) {
7819
+ advance();
7820
+ state.start++;
7821
+ count++;
7822
+ }
7823
+ if (count % 2 === 0) {
7824
+ return false;
7825
+ }
7826
+ state.negated = true;
7827
+ state.start++;
7828
+ return true;
7829
+ };
7830
+ const increment = (type) => {
7831
+ state[type]++;
7832
+ stack.push(type);
7833
+ };
7834
+ const decrement = (type) => {
7835
+ state[type]--;
7836
+ stack.pop();
7837
+ };
7838
+ const push = (tok) => {
7839
+ if (prev.type === "globstar") {
7840
+ const isBrace = state.braces > 0 && (tok.type === "comma" || tok.type === "brace");
7841
+ const isExtglob = tok.extglob === true || extglobs.length && (tok.type === "pipe" || tok.type === "paren");
7842
+ if (tok.type !== "slash" && tok.type !== "paren" && !isBrace && !isExtglob) {
7843
+ state.output = state.output.slice(0, -prev.output.length);
7844
+ prev.type = "star";
7845
+ prev.value = "*";
7846
+ prev.output = star;
7847
+ state.output += prev.output;
7848
+ }
7849
+ }
7850
+ if (extglobs.length && tok.type !== "paren") {
7851
+ extglobs[extglobs.length - 1].inner += tok.value;
7852
+ }
7853
+ if (tok.value || tok.output)
7854
+ append(tok);
7855
+ if (prev && prev.type === "text" && tok.type === "text") {
7856
+ prev.output = (prev.output || prev.value) + tok.value;
7857
+ prev.value += tok.value;
7858
+ return;
7859
+ }
7860
+ tok.prev = prev;
7861
+ tokens.push(tok);
7862
+ prev = tok;
7863
+ };
7864
+ const extglobOpen = (type, value2) => {
7865
+ const token = { ...EXTGLOB_CHARS[value2], conditions: 1, inner: "" };
7866
+ token.prev = prev;
7867
+ token.parens = state.parens;
7868
+ token.output = state.output;
7869
+ token.startIndex = state.index;
7870
+ token.tokensIndex = tokens.length;
7871
+ const output = (opts.capture ? "(" : "") + token.open;
7872
+ increment("parens");
7873
+ push({ type, value: value2, output: state.output ? "" : ONE_CHAR });
7874
+ push({ type: "paren", extglob: true, value: advance(), output });
7875
+ extglobs.push(token);
7876
+ };
7877
+ const extglobClose = (token) => {
7878
+ const literal = input.slice(token.startIndex, state.index + 1);
7879
+ const body = input.slice(token.startIndex + 2, state.index);
7880
+ const analysis = analyzeRepeatedExtglob(body, opts);
7881
+ if ((token.type === "plus" || token.type === "star") && analysis.risky) {
7882
+ const safeOutput = analysis.safeOutput ? (token.output ? "" : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput) : undefined;
7883
+ const open = tokens[token.tokensIndex];
7884
+ open.type = "text";
7885
+ open.value = literal;
7886
+ open.output = safeOutput || utils.escapeRegex(literal);
7887
+ for (let i = token.tokensIndex + 1;i < tokens.length; i++) {
7888
+ tokens[i].value = "";
7889
+ tokens[i].output = "";
7890
+ delete tokens[i].suffix;
7891
+ }
7892
+ state.output = token.output + open.output;
7893
+ state.backtrack = true;
7894
+ push({ type: "paren", extglob: true, value, output: "" });
7895
+ decrement("parens");
7896
+ return;
7897
+ }
7898
+ let output = token.close + (opts.capture ? ")" : "");
7899
+ let rest;
7900
+ if (token.type === "negate") {
7901
+ let extglobStar = star;
7902
+ if (token.inner && token.inner.length > 1 && token.inner.includes("/")) {
7903
+ extglobStar = globstar(opts);
7904
+ }
7905
+ if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
7906
+ output = token.close = `)$))${extglobStar}`;
7907
+ }
7908
+ if (token.inner.includes("*") && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) {
7909
+ const expression = parse(rest, { ...options, fastpaths: false }).output;
7910
+ output = token.close = `)${expression})${extglobStar})`;
7911
+ }
7912
+ if (token.prev.type === "bos") {
7913
+ state.negatedExtglob = true;
7914
+ }
7915
+ }
7916
+ push({ type: "paren", extglob: true, value, output });
7917
+ decrement("parens");
7918
+ };
7919
+ if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
7920
+ let backslashes = false;
7921
+ let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
7922
+ if (first === "\\") {
7923
+ backslashes = true;
7924
+ return m;
7925
+ }
7926
+ if (first === "?") {
7927
+ if (esc) {
7928
+ return esc + first + (rest ? QMARK.repeat(rest.length) : "");
7929
+ }
7930
+ if (index === 0) {
7931
+ return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : "");
7932
+ }
7933
+ return QMARK.repeat(chars.length);
7934
+ }
7935
+ if (first === ".") {
7936
+ return DOT_LITERAL.repeat(chars.length);
7937
+ }
7938
+ if (first === "*") {
7939
+ if (esc) {
7940
+ return esc + first + (rest ? star : "");
7941
+ }
7942
+ return star;
7943
+ }
7944
+ return esc ? m : `\\${m}`;
7945
+ });
7946
+ if (backslashes === true) {
7947
+ if (opts.unescape === true) {
7948
+ output = output.replace(/\\/g, "");
7949
+ } else {
7950
+ output = output.replace(/\\+/g, (m) => {
7951
+ return m.length % 2 === 0 ? "\\\\" : m ? "\\" : "";
7952
+ });
7953
+ }
7954
+ }
7955
+ if (output === input && opts.contains === true) {
7956
+ state.output = input;
7957
+ return state;
7958
+ }
7959
+ state.output = utils.wrapOutput(output, state, options);
7960
+ return state;
7961
+ }
7962
+ while (!eos()) {
7963
+ value = advance();
7964
+ if (value === "\x00") {
7965
+ continue;
7966
+ }
7967
+ if (value === "\\") {
7968
+ const next = peek();
7969
+ if (next === "/" && opts.bash !== true) {
7970
+ continue;
7971
+ }
7972
+ if (next === "." || next === ";") {
7973
+ continue;
7974
+ }
7975
+ if (!next) {
7976
+ value += "\\";
7977
+ push({ type: "text", value });
7978
+ continue;
7979
+ }
7980
+ const match = /^\\+/.exec(remaining());
7981
+ let slashes = 0;
7982
+ if (match && match[0].length > 2) {
7983
+ slashes = match[0].length;
7984
+ state.index += slashes;
7985
+ if (slashes % 2 !== 0) {
7986
+ value += "\\";
7987
+ }
7988
+ }
7989
+ if (opts.unescape === true) {
7990
+ value = advance();
7991
+ } else {
7992
+ value += advance();
7993
+ }
7994
+ if (state.brackets === 0) {
7995
+ push({ type: "text", value });
7996
+ continue;
7997
+ }
7998
+ }
7999
+ if (state.brackets > 0 && (value !== "]" || prev.value === "[" || prev.value === "[^")) {
8000
+ if (opts.posix !== false && value === ":") {
8001
+ const inner = prev.value.slice(1);
8002
+ if (inner.includes("[")) {
8003
+ prev.posix = true;
8004
+ if (inner.includes(":")) {
8005
+ const idx = prev.value.lastIndexOf("[");
8006
+ const pre = prev.value.slice(0, idx);
8007
+ const rest2 = prev.value.slice(idx + 2);
8008
+ const posix = POSIX_REGEX_SOURCE[rest2];
8009
+ if (posix) {
8010
+ prev.value = pre + posix;
8011
+ state.backtrack = true;
8012
+ advance();
8013
+ if (!bos.output && tokens.indexOf(prev) === 1) {
8014
+ bos.output = ONE_CHAR;
8015
+ }
8016
+ continue;
8017
+ }
8018
+ }
8019
+ }
8020
+ }
8021
+ if (value === "[" && peek() !== ":" || value === "-" && peek() === "]") {
8022
+ value = `\\${value}`;
8023
+ }
8024
+ if (value === "]" && (prev.value === "[" || prev.value === "[^")) {
8025
+ value = `\\${value}`;
8026
+ }
8027
+ if (opts.posix === true && value === "!" && prev.value === "[") {
8028
+ value = "^";
8029
+ }
8030
+ prev.value += value;
8031
+ append({ value });
8032
+ continue;
8033
+ }
8034
+ if (state.quotes === 1 && value !== '"') {
8035
+ value = utils.escapeRegex(value);
8036
+ prev.value += value;
8037
+ append({ value });
8038
+ continue;
8039
+ }
8040
+ if (value === '"') {
8041
+ state.quotes = state.quotes === 1 ? 0 : 1;
8042
+ if (opts.keepQuotes === true) {
8043
+ push({ type: "text", value });
8044
+ }
8045
+ continue;
8046
+ }
8047
+ if (value === "(") {
8048
+ increment("parens");
8049
+ push({ type: "paren", value });
8050
+ continue;
8051
+ }
8052
+ if (value === ")") {
8053
+ if (state.parens === 0 && opts.strictBrackets === true) {
8054
+ throw new SyntaxError(syntaxError("opening", "("));
8055
+ }
8056
+ const extglob = extglobs[extglobs.length - 1];
8057
+ if (extglob && state.parens === extglob.parens + 1) {
8058
+ extglobClose(extglobs.pop());
8059
+ continue;
8060
+ }
8061
+ push({ type: "paren", value, output: state.parens ? ")" : "\\)" });
8062
+ decrement("parens");
8063
+ continue;
8064
+ }
8065
+ if (value === "[") {
8066
+ if (opts.nobracket === true || !remaining().includes("]")) {
8067
+ if (opts.nobracket !== true && opts.strictBrackets === true) {
8068
+ throw new SyntaxError(syntaxError("closing", "]"));
8069
+ }
8070
+ value = `\\${value}`;
8071
+ } else {
8072
+ increment("brackets");
8073
+ }
8074
+ push({ type: "bracket", value });
8075
+ continue;
8076
+ }
8077
+ if (value === "]") {
8078
+ if (opts.nobracket === true || prev && prev.type === "bracket" && prev.value.length === 1) {
8079
+ push({ type: "text", value, output: `\\${value}` });
8080
+ continue;
8081
+ }
8082
+ if (state.brackets === 0) {
8083
+ if (opts.strictBrackets === true) {
8084
+ throw new SyntaxError(syntaxError("opening", "["));
8085
+ }
8086
+ push({ type: "text", value, output: `\\${value}` });
8087
+ continue;
8088
+ }
8089
+ decrement("brackets");
8090
+ const prevValue = prev.value.slice(1);
8091
+ if (prev.posix !== true && prevValue[0] === "^" && !prevValue.includes("/")) {
8092
+ value = `/${value}`;
8093
+ }
8094
+ prev.value += value;
8095
+ append({ value });
8096
+ if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
8097
+ continue;
8098
+ }
8099
+ const escaped = utils.escapeRegex(prev.value);
8100
+ state.output = state.output.slice(0, -prev.value.length);
8101
+ if (opts.literalBrackets === true) {
8102
+ state.output += escaped;
8103
+ prev.value = escaped;
8104
+ continue;
8105
+ }
8106
+ prev.value = `(${capture}${escaped}|${prev.value})`;
8107
+ state.output += prev.value;
8108
+ continue;
8109
+ }
8110
+ if (value === "{" && opts.nobrace !== true) {
8111
+ increment("braces");
8112
+ const open = {
8113
+ type: "brace",
8114
+ value,
8115
+ output: "(",
8116
+ outputIndex: state.output.length,
8117
+ tokensIndex: state.tokens.length
8118
+ };
8119
+ braces.push(open);
8120
+ push(open);
8121
+ continue;
8122
+ }
8123
+ if (value === "}") {
8124
+ const brace = braces[braces.length - 1];
8125
+ if (opts.nobrace === true || !brace) {
8126
+ push({ type: "text", value, output: value });
8127
+ continue;
8128
+ }
8129
+ let output = ")";
8130
+ if (brace.dots === true) {
8131
+ const arr = tokens.slice();
8132
+ const range = [];
8133
+ for (let i = arr.length - 1;i >= 0; i--) {
8134
+ tokens.pop();
8135
+ if (arr[i].type === "brace") {
8136
+ break;
8137
+ }
8138
+ if (arr[i].type !== "dots") {
8139
+ range.unshift(arr[i].value);
8140
+ }
8141
+ }
8142
+ output = expandRange(range, opts);
8143
+ state.backtrack = true;
8144
+ }
8145
+ if (brace.comma !== true && brace.dots !== true) {
8146
+ const out = state.output.slice(0, brace.outputIndex);
8147
+ const toks = state.tokens.slice(brace.tokensIndex);
8148
+ brace.value = brace.output = "\\{";
8149
+ value = output = "\\}";
8150
+ state.output = out;
8151
+ for (const t of toks) {
8152
+ state.output += t.output || t.value;
8153
+ }
8154
+ }
8155
+ push({ type: "brace", value, output });
8156
+ decrement("braces");
8157
+ braces.pop();
8158
+ continue;
8159
+ }
8160
+ if (value === "|") {
8161
+ if (extglobs.length > 0) {
8162
+ extglobs[extglobs.length - 1].conditions++;
8163
+ }
8164
+ push({ type: "text", value });
8165
+ continue;
8166
+ }
8167
+ if (value === ",") {
8168
+ let output = value;
8169
+ const brace = braces[braces.length - 1];
8170
+ if (brace && stack[stack.length - 1] === "braces") {
8171
+ brace.comma = true;
8172
+ output = "|";
8173
+ }
8174
+ push({ type: "comma", value, output });
8175
+ continue;
8176
+ }
8177
+ if (value === "/") {
8178
+ if (prev.type === "dot" && state.index === state.start + 1) {
8179
+ state.start = state.index + 1;
8180
+ state.consumed = "";
8181
+ state.output = "";
8182
+ tokens.pop();
8183
+ prev = bos;
8184
+ continue;
8185
+ }
8186
+ push({ type: "slash", value, output: SLASH_LITERAL });
8187
+ continue;
8188
+ }
8189
+ if (value === ".") {
8190
+ if (state.braces > 0 && prev.type === "dot") {
8191
+ if (prev.value === ".")
8192
+ prev.output = DOT_LITERAL;
8193
+ const brace = braces[braces.length - 1];
8194
+ prev.type = "dots";
8195
+ prev.output += value;
8196
+ prev.value += value;
8197
+ brace.dots = true;
8198
+ continue;
8199
+ }
8200
+ if (state.braces + state.parens === 0 && prev.type !== "bos" && prev.type !== "slash") {
8201
+ push({ type: "text", value, output: DOT_LITERAL });
8202
+ continue;
8203
+ }
8204
+ push({ type: "dot", value, output: DOT_LITERAL });
8205
+ continue;
8206
+ }
8207
+ if (value === "?") {
8208
+ const isGroup = prev && prev.value === "(";
8209
+ if (!isGroup && opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
8210
+ extglobOpen("qmark", value);
8211
+ continue;
8212
+ }
8213
+ if (prev && prev.type === "paren") {
8214
+ const next = peek();
8215
+ let output = value;
8216
+ if (prev.value === "(" && !/[!=<:]/.test(next) || next === "<" && !/<([!=]|\w+>)/.test(remaining())) {
8217
+ output = `\\${value}`;
8218
+ }
8219
+ push({ type: "text", value, output });
8220
+ continue;
8221
+ }
8222
+ if (opts.dot !== true && (prev.type === "slash" || prev.type === "bos")) {
8223
+ push({ type: "qmark", value, output: QMARK_NO_DOT });
8224
+ continue;
8225
+ }
8226
+ push({ type: "qmark", value, output: QMARK });
8227
+ continue;
8228
+ }
8229
+ if (value === "!") {
8230
+ if (opts.noextglob !== true && peek() === "(") {
8231
+ if (peek(2) !== "?" || !/[!=<:]/.test(peek(3))) {
8232
+ extglobOpen("negate", value);
8233
+ continue;
8234
+ }
8235
+ }
8236
+ if (opts.nonegate !== true && state.index === 0) {
8237
+ negate();
8238
+ continue;
8239
+ }
8240
+ }
8241
+ if (value === "+") {
8242
+ if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
8243
+ extglobOpen("plus", value);
8244
+ continue;
8245
+ }
8246
+ if (prev && prev.value === "(" || opts.regex === false) {
8247
+ push({ type: "plus", value, output: PLUS_LITERAL });
8248
+ continue;
8249
+ }
8250
+ if (prev && (prev.type === "bracket" || prev.type === "paren" || prev.type === "brace") || state.parens > 0) {
8251
+ push({ type: "plus", value });
8252
+ continue;
8253
+ }
8254
+ push({ type: "plus", value: PLUS_LITERAL });
8255
+ continue;
8256
+ }
8257
+ if (value === "@") {
8258
+ if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
8259
+ push({ type: "at", extglob: true, value, output: "" });
8260
+ continue;
8261
+ }
8262
+ push({ type: "text", value });
8263
+ continue;
8264
+ }
8265
+ if (value !== "*") {
8266
+ if (value === "$" || value === "^") {
8267
+ value = `\\${value}`;
8268
+ }
8269
+ const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
8270
+ if (match) {
8271
+ value += match[0];
8272
+ state.index += match[0].length;
8273
+ }
8274
+ push({ type: "text", value });
8275
+ continue;
8276
+ }
8277
+ if (prev && (prev.type === "globstar" || prev.star === true)) {
8278
+ prev.type = "star";
8279
+ prev.star = true;
8280
+ prev.value += value;
8281
+ prev.output = star;
8282
+ state.backtrack = true;
8283
+ state.globstar = true;
8284
+ consume(value);
8285
+ continue;
8286
+ }
8287
+ let rest = remaining();
8288
+ if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
8289
+ extglobOpen("star", value);
8290
+ continue;
8291
+ }
8292
+ if (prev.type === "star") {
8293
+ if (opts.noglobstar === true) {
8294
+ consume(value);
8295
+ continue;
8296
+ }
8297
+ const prior = prev.prev;
8298
+ const before = prior.prev;
8299
+ const isStart = prior.type === "slash" || prior.type === "bos";
8300
+ const afterStar = before && (before.type === "star" || before.type === "globstar");
8301
+ if (opts.bash === true && (!isStart || rest[0] && rest[0] !== "/")) {
8302
+ push({ type: "star", value, output: "" });
8303
+ continue;
8304
+ }
8305
+ const isBrace = state.braces > 0 && (prior.type === "comma" || prior.type === "brace");
8306
+ const isExtglob = extglobs.length && (prior.type === "pipe" || prior.type === "paren");
8307
+ if (!isStart && prior.type !== "paren" && !isBrace && !isExtglob) {
8308
+ push({ type: "star", value, output: "" });
8309
+ continue;
8310
+ }
8311
+ while (rest.slice(0, 3) === "/**") {
8312
+ const after = input[state.index + 4];
8313
+ if (after && after !== "/") {
8314
+ break;
8315
+ }
8316
+ rest = rest.slice(3);
8317
+ consume("/**", 3);
8318
+ }
8319
+ if (prior.type === "bos" && eos()) {
8320
+ prev.type = "globstar";
8321
+ prev.value += value;
8322
+ prev.output = globstar(opts);
8323
+ state.output = prev.output;
8324
+ state.globstar = true;
8325
+ consume(value);
8326
+ continue;
8327
+ }
8328
+ if (prior.type === "slash" && prior.prev.type !== "bos" && !afterStar && eos()) {
8329
+ state.output = state.output.slice(0, -(prior.output + prev.output).length);
8330
+ prior.output = `(?:${prior.output}`;
8331
+ prev.type = "globstar";
8332
+ prev.output = globstar(opts) + (opts.strictSlashes ? ")" : "|$)");
8333
+ prev.value += value;
8334
+ state.globstar = true;
8335
+ state.output += prior.output + prev.output;
8336
+ consume(value);
8337
+ continue;
8338
+ }
8339
+ if (prior.type === "slash" && prior.prev.type !== "bos" && rest[0] === "/") {
8340
+ const end = rest[1] !== undefined ? "|$" : "";
8341
+ state.output = state.output.slice(0, -(prior.output + prev.output).length);
8342
+ prior.output = `(?:${prior.output}`;
8343
+ prev.type = "globstar";
8344
+ prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
8345
+ prev.value += value;
8346
+ state.output += prior.output + prev.output;
8347
+ state.globstar = true;
8348
+ consume(value + advance());
8349
+ push({ type: "slash", value: "/", output: "" });
8350
+ continue;
8351
+ }
8352
+ if (prior.type === "bos" && rest[0] === "/") {
8353
+ prev.type = "globstar";
8354
+ prev.value += value;
8355
+ prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
8356
+ state.output = prev.output;
8357
+ state.globstar = true;
8358
+ consume(value + advance());
8359
+ push({ type: "slash", value: "/", output: "" });
8360
+ continue;
8361
+ }
8362
+ state.output = state.output.slice(0, -prev.output.length);
8363
+ prev.type = "globstar";
8364
+ prev.output = globstar(opts);
8365
+ prev.value += value;
8366
+ state.output += prev.output;
8367
+ state.globstar = true;
8368
+ consume(value);
8369
+ continue;
8370
+ }
8371
+ const token = { type: "star", value, output: star };
8372
+ if (opts.bash === true) {
8373
+ token.output = ".*?";
8374
+ if (prev.type === "bos" || prev.type === "slash") {
8375
+ token.output = nodot + token.output;
8376
+ }
8377
+ push(token);
8378
+ continue;
8379
+ }
8380
+ if (prev && (prev.type === "bracket" || prev.type === "paren") && opts.regex === true) {
8381
+ token.output = value;
8382
+ push(token);
8383
+ continue;
8384
+ }
8385
+ if (state.index === state.start || prev.type === "slash" || prev.type === "dot") {
8386
+ if (prev.type === "dot") {
8387
+ state.output += NO_DOT_SLASH;
8388
+ prev.output += NO_DOT_SLASH;
8389
+ } else if (opts.dot === true) {
8390
+ state.output += NO_DOTS_SLASH;
8391
+ prev.output += NO_DOTS_SLASH;
8392
+ } else {
8393
+ state.output += nodot;
8394
+ prev.output += nodot;
8395
+ }
8396
+ if (peek() !== "*") {
8397
+ state.output += ONE_CHAR;
8398
+ prev.output += ONE_CHAR;
8399
+ }
8400
+ }
8401
+ push(token);
8402
+ }
8403
+ while (state.brackets > 0) {
8404
+ if (opts.strictBrackets === true)
8405
+ throw new SyntaxError(syntaxError("closing", "]"));
8406
+ state.output = utils.escapeLast(state.output, "[");
8407
+ decrement("brackets");
8408
+ }
8409
+ while (state.parens > 0) {
8410
+ if (opts.strictBrackets === true)
8411
+ throw new SyntaxError(syntaxError("closing", ")"));
8412
+ state.output = utils.escapeLast(state.output, "(");
8413
+ decrement("parens");
8414
+ }
8415
+ while (state.braces > 0) {
8416
+ if (opts.strictBrackets === true)
8417
+ throw new SyntaxError(syntaxError("closing", "}"));
8418
+ state.output = utils.escapeLast(state.output, "{");
8419
+ decrement("braces");
8420
+ }
8421
+ if (opts.strictSlashes !== true && (prev.type === "star" || prev.type === "bracket")) {
8422
+ push({ type: "maybe_slash", value: "", output: `${SLASH_LITERAL}?` });
8423
+ }
8424
+ if (state.backtrack === true) {
8425
+ state.output = "";
8426
+ for (const token of state.tokens) {
8427
+ state.output += token.output != null ? token.output : token.value;
8428
+ if (token.suffix) {
8429
+ state.output += token.suffix;
8430
+ }
8431
+ }
8432
+ }
8433
+ return state;
8434
+ };
8435
+ parse.fastpaths = (input, options) => {
8436
+ const opts = { ...options };
8437
+ const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
8438
+ const len = input.length;
8439
+ if (len > max) {
8440
+ throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
8441
+ }
8442
+ input = REPLACEMENTS[input] || input;
8443
+ const {
8444
+ DOT_LITERAL,
8445
+ SLASH_LITERAL,
8446
+ ONE_CHAR,
8447
+ DOTS_SLASH,
8448
+ NO_DOT,
8449
+ NO_DOTS,
8450
+ NO_DOTS_SLASH,
8451
+ STAR,
8452
+ START_ANCHOR
8453
+ } = constants.globChars(opts.windows);
8454
+ const nodot = opts.dot ? NO_DOTS : NO_DOT;
8455
+ const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
8456
+ const capture = opts.capture ? "" : "?:";
8457
+ const state = { negated: false, prefix: "" };
8458
+ let star = opts.bash === true ? ".*?" : STAR;
8459
+ if (opts.capture) {
8460
+ star = `(${star})`;
8461
+ }
8462
+ const globstar = (opts2) => {
8463
+ if (opts2.noglobstar === true)
8464
+ return star;
8465
+ return `(${capture}(?:(?!${START_ANCHOR}${opts2.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
8466
+ };
8467
+ const create = (str) => {
8468
+ switch (str) {
8469
+ case "*":
8470
+ return `${nodot}${ONE_CHAR}${star}`;
8471
+ case ".*":
8472
+ return `${DOT_LITERAL}${ONE_CHAR}${star}`;
8473
+ case "*.*":
8474
+ return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
8475
+ case "*/*":
8476
+ return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
8477
+ case "**":
8478
+ return nodot + globstar(opts);
8479
+ case "**/*":
8480
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
8481
+ case "**/*.*":
8482
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
8483
+ case "**/.*":
8484
+ return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
8485
+ default: {
8486
+ const match = /^(.*?)\.(\w+)$/.exec(str);
8487
+ if (!match)
8488
+ return;
8489
+ const source3 = create(match[1]);
8490
+ if (!source3)
8491
+ return;
8492
+ return source3 + DOT_LITERAL + match[2];
8493
+ }
8494
+ }
8495
+ };
8496
+ const output = utils.removePrefix(input, state);
8497
+ let source2 = create(output);
8498
+ if (source2 && opts.strictSlashes !== true) {
8499
+ source2 += `${SLASH_LITERAL}?`;
8500
+ }
8501
+ return source2;
8502
+ };
8503
+ module.exports = parse;
8504
+ });
8505
+
8506
+ // ../../node_modules/.bun/picomatch@4.0.4/node_modules/picomatch/lib/picomatch.js
8507
+ var require_picomatch = __commonJS((exports, module) => {
8508
+ var scan = require_scan();
8509
+ var parse = require_parse();
8510
+ var utils = require_utils();
8511
+ var constants = require_constants();
8512
+ var isObject = (val) => val && typeof val === "object" && !Array.isArray(val);
8513
+ var picomatch = (glob, options, returnState = false) => {
8514
+ if (Array.isArray(glob)) {
8515
+ const fns = glob.map((input) => picomatch(input, options, returnState));
8516
+ const arrayMatcher = (str) => {
8517
+ for (const isMatch of fns) {
8518
+ const state2 = isMatch(str);
8519
+ if (state2)
8520
+ return state2;
8521
+ }
8522
+ return false;
8523
+ };
8524
+ return arrayMatcher;
8525
+ }
8526
+ const isState = isObject(glob) && glob.tokens && glob.input;
8527
+ if (glob === "" || typeof glob !== "string" && !isState) {
8528
+ throw new TypeError("Expected pattern to be a non-empty string");
8529
+ }
8530
+ const opts = options || {};
8531
+ const posix = opts.windows;
8532
+ const regex = isState ? picomatch.compileRe(glob, options) : picomatch.makeRe(glob, options, false, true);
8533
+ const state = regex.state;
8534
+ delete regex.state;
8535
+ let isIgnored = () => false;
8536
+ if (opts.ignore) {
8537
+ const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
8538
+ isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
8539
+ }
8540
+ const matcher = (input, returnObject = false) => {
8541
+ const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
8542
+ const result = { glob, state, regex, posix, input, output, match, isMatch };
8543
+ if (typeof opts.onResult === "function") {
8544
+ opts.onResult(result);
8545
+ }
8546
+ if (isMatch === false) {
8547
+ result.isMatch = false;
8548
+ return returnObject ? result : false;
8549
+ }
8550
+ if (isIgnored(input)) {
8551
+ if (typeof opts.onIgnore === "function") {
8552
+ opts.onIgnore(result);
8553
+ }
8554
+ result.isMatch = false;
8555
+ return returnObject ? result : false;
8556
+ }
8557
+ if (typeof opts.onMatch === "function") {
8558
+ opts.onMatch(result);
8559
+ }
8560
+ return returnObject ? result : true;
8561
+ };
8562
+ if (returnState) {
8563
+ matcher.state = state;
8564
+ }
8565
+ return matcher;
8566
+ };
8567
+ picomatch.test = (input, regex, options, { glob, posix } = {}) => {
8568
+ if (typeof input !== "string") {
8569
+ throw new TypeError("Expected input to be a string");
8570
+ }
8571
+ if (input === "") {
8572
+ return { isMatch: false, output: "" };
8573
+ }
8574
+ const opts = options || {};
8575
+ const format = opts.format || (posix ? utils.toPosixSlashes : null);
8576
+ let match = input === glob;
8577
+ let output = match && format ? format(input) : input;
8578
+ if (match === false) {
8579
+ output = format ? format(input) : input;
8580
+ match = output === glob;
8581
+ }
8582
+ if (match === false || opts.capture === true) {
8583
+ if (opts.matchBase === true || opts.basename === true) {
8584
+ match = picomatch.matchBase(input, regex, options, posix);
8585
+ } else {
8586
+ match = regex.exec(output);
8587
+ }
8588
+ }
8589
+ return { isMatch: Boolean(match), match, output };
8590
+ };
8591
+ picomatch.matchBase = (input, glob, options) => {
8592
+ const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
8593
+ return regex.test(utils.basename(input));
8594
+ };
8595
+ picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
8596
+ picomatch.parse = (pattern, options) => {
8597
+ if (Array.isArray(pattern))
8598
+ return pattern.map((p) => picomatch.parse(p, options));
8599
+ return parse(pattern, { ...options, fastpaths: false });
8600
+ };
8601
+ picomatch.scan = (input, options) => scan(input, options);
8602
+ picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {
8603
+ if (returnOutput === true) {
8604
+ return state.output;
8605
+ }
8606
+ const opts = options || {};
8607
+ const prepend = opts.contains ? "" : "^";
8608
+ const append = opts.contains ? "" : "$";
8609
+ let source2 = `${prepend}(?:${state.output})${append}`;
8610
+ if (state && state.negated === true) {
8611
+ source2 = `^(?!${source2}).*$`;
8612
+ }
8613
+ const regex = picomatch.toRegex(source2, options);
8614
+ if (returnState === true) {
8615
+ regex.state = state;
8616
+ }
8617
+ return regex;
8618
+ };
8619
+ picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {
8620
+ if (!input || typeof input !== "string") {
8621
+ throw new TypeError("Expected a non-empty string");
8622
+ }
8623
+ let parsed = { negated: false, fastpaths: true };
8624
+ if (options.fastpaths !== false && (input[0] === "." || input[0] === "*")) {
8625
+ parsed.output = parse.fastpaths(input, options);
8626
+ }
8627
+ if (!parsed.output) {
8628
+ parsed = parse(input, options);
8629
+ }
8630
+ return picomatch.compileRe(parsed, options, returnOutput, returnState);
8631
+ };
8632
+ picomatch.toRegex = (source2, options) => {
8633
+ try {
8634
+ const opts = options || {};
8635
+ return new RegExp(source2, opts.flags || (opts.nocase ? "i" : ""));
8636
+ } catch (err) {
8637
+ if (options && options.debug === true)
8638
+ throw err;
8639
+ return /$^/;
8640
+ }
8641
+ };
8642
+ picomatch.constants = constants;
8643
+ module.exports = picomatch;
8644
+ });
8645
+
8646
+ // ../../node_modules/.bun/picomatch@4.0.4/node_modules/picomatch/index.js
8647
+ var require_picomatch2 = __commonJS((exports, module) => {
8648
+ var pico = require_picomatch();
8649
+ var utils = require_utils();
8650
+ function picomatch(glob, options, returnState = false) {
8651
+ if (options && (options.windows === null || options.windows === undefined)) {
8652
+ options = { ...options, windows: utils.isWindows() };
8653
+ }
8654
+ return pico(glob, options, returnState);
8655
+ }
8656
+ Object.assign(picomatch, pico);
8657
+ module.exports = picomatch;
8658
+ });
8659
+
6981
8660
  // src/types/base.ts
6982
8661
  var EntityType;
6983
8662
  ((EntityType2) => {
@@ -7209,10 +8888,33 @@ var DEFAULT_SERVER_CONFIG = {
7209
8888
  default_model: "gemini-3-pro-preview"
7210
8889
  }
7211
8890
  },
8891
+ task: {
8892
+ concurrency: {
8893
+ code_index: 2,
8894
+ doc_index: 2,
8895
+ remote_clone: 2,
8896
+ modeling: 1
8897
+ },
8898
+ default_timeout_ms: 150 * 60 * 1000,
8899
+ memory_ttl_ms: 48 * 60 * 60 * 1000,
8900
+ cleanup_interval_ms: 10 * 60 * 1000,
8901
+ log_max_entries: 500
8902
+ },
7212
8903
  indexing: {
7213
8904
  task_timeout_ms: 150 * 60 * 1000,
7214
8905
  file_timeout_ms: 15 * 60 * 1000
7215
8906
  },
8907
+ intent_router: {
8908
+ provider: "huggingface",
8909
+ huggingface: {
8910
+ model_id: "context4ai/intent-router-onnx",
8911
+ cache_dir: "./models/intent-router"
8912
+ },
8913
+ xenova: {
8914
+ model_id: "context4ai/intent-router-onnx",
8915
+ cache_dir: "./models/intent-router"
8916
+ }
8917
+ },
7216
8918
  embedding: {
7217
8919
  provider: "huggingface",
7218
8920
  huggingface: {
@@ -11670,6 +13372,45 @@ var docChunkParagraphSchema = exports_external.object({
11670
13372
  var docChunkResultSchema = exports_external.object({
11671
13373
  paragraphs: exports_external.array(docChunkParagraphSchema)
11672
13374
  });
13375
+ // src/types/pathFilter.ts
13376
+ var PathFilterConfigSchema = exports_external.object({
13377
+ package: exports_external.object({ include: exports_external.array(exports_external.string()).default([]) }).default({}),
13378
+ code: exports_external.object({
13379
+ include: exports_external.array(exports_external.string()).default([]),
13380
+ exclude: exports_external.array(exports_external.string()).default([])
13381
+ }).default({}),
13382
+ doc: exports_external.object({
13383
+ include: exports_external.array(exports_external.string()).default([]),
13384
+ exclude: exports_external.array(exports_external.string()).default([])
13385
+ }).default({})
13386
+ });
13387
+ var DEFAULT_PATH_FILTER = {
13388
+ package: {
13389
+ include: [
13390
+ "**/{package.json,pyproject.toml,setup.py,go.mod,Cargo.toml,pom.xml,build.gradle}"
13391
+ ]
13392
+ },
13393
+ code: {
13394
+ include: ["**/*.{ts,tsx}"],
13395
+ exclude: [
13396
+ "**/__{tests,test,e2e,mocks,fixtures,snapshots}__/**",
13397
+ "**/*.{test,spec,d}.{ts,tsx}"
13398
+ ]
13399
+ },
13400
+ doc: {
13401
+ include: ["*.md", "docs/**/*.md"],
13402
+ exclude: ["**/CHANGELOG.md"]
13403
+ }
13404
+ };
13405
+ function resolvePathFilter(metadata) {
13406
+ const raw = metadata?.path_filter;
13407
+ if (raw == null)
13408
+ return { config: DEFAULT_PATH_FILTER, isDefault: true };
13409
+ const parsed = PathFilterConfigSchema.safeParse(raw);
13410
+ if (!parsed.success)
13411
+ return { config: DEFAULT_PATH_FILTER, isDefault: true };
13412
+ return { config: parsed.data, isDefault: false };
13413
+ }
11673
13414
  // src/schemas/entitySchema.ts
11674
13415
  var baseEntitySchema = exports_external.object({
11675
13416
  id: exports_external.string(),
@@ -11926,6 +13667,10 @@ var ErrorCode;
11926
13667
  ErrorCode2["DIGEST_NOT_FOUND"] = "DIGEST_NOT_FOUND";
11927
13668
  ErrorCode2["INVALID_REGEX"] = "INVALID_REGEX";
11928
13669
  ErrorCode2["SOURCE_ACCESS_DENIED"] = "SOURCE_ACCESS_DENIED";
13670
+ ErrorCode2["NOT_INDEXED"] = "NOT_INDEXED";
13671
+ ErrorCode2["QUERY_TIMEOUT"] = "QUERY_TIMEOUT";
13672
+ ErrorCode2["INTENT_NOT_AVAILABLE"] = "INTENT_NOT_AVAILABLE";
13673
+ ErrorCode2["SUB_PATH_CONFLICT"] = "SUB_PATH_CONFLICT";
11929
13674
  ErrorCode2["WORKSPACE_ISOLATION"] = "WORKSPACE_ISOLATION";
11930
13675
  ErrorCode2["VECTOR_DIMENSION_MISMATCH"] = "VECTOR_DIMENSION_MISMATCH";
11931
13676
  ErrorCode2["VECTOR_REBUILD_PARTIAL"] = "VECTOR_REBUILD_PARTIAL";
@@ -11962,9 +13707,11 @@ var ERROR_CODE_HTTP_STATUS = {
11962
13707
  ["BACKUP_DIR_NOT_FOUND" /* BACKUP_DIR_NOT_FOUND */]: 404,
11963
13708
  ["SOURCE_NOT_FOUND" /* SOURCE_NOT_FOUND */]: 404,
11964
13709
  ["DIGEST_NOT_FOUND" /* DIGEST_NOT_FOUND */]: 404,
13710
+ ["NOT_INDEXED" /* NOT_INDEXED */]: 422,
11965
13711
  ["STORAGE_CONFLICT" /* STORAGE_CONFLICT */]: 409,
11966
13712
  ["ENTITY_DUPLICATE" /* ENTITY_DUPLICATE */]: 409,
11967
13713
  ["INDEX_IN_PROGRESS" /* INDEX_IN_PROGRESS */]: 409,
13714
+ ["SUB_PATH_CONFLICT" /* SUB_PATH_CONFLICT */]: 409,
11968
13715
  ["API_UNAUTHORIZED" /* API_UNAUTHORIZED */]: 401,
11969
13716
  ["LLM_AUTH_FAILED" /* LLM_AUTH_FAILED */]: 401,
11970
13717
  ["AUTH_REQUIRED" /* AUTH_REQUIRED */]: 401,
@@ -11980,6 +13727,7 @@ var ERROR_CODE_HTTP_STATUS = {
11980
13727
  ["API_RATE_LIMITED" /* API_RATE_LIMITED */]: 429,
11981
13728
  ["GIT_API_RATE_LIMITED" /* GIT_API_RATE_LIMITED */]: 429,
11982
13729
  ["API_NOT_IMPLEMENTED" /* API_NOT_IMPLEMENTED */]: 501,
13730
+ ["INTENT_NOT_AVAILABLE" /* INTENT_NOT_AVAILABLE */]: 501,
11983
13731
  ["BATCH_PARTIAL_FAILURE" /* BATCH_PARTIAL_FAILURE */]: 200,
11984
13732
  ["VECTOR_REBUILD_PARTIAL" /* VECTOR_REBUILD_PARTIAL */]: 200,
11985
13733
  ["STORAGE_FAILED" /* STORAGE_FAILED */]: 500,
@@ -11992,6 +13740,7 @@ var ERROR_CODE_HTTP_STATUS = {
11992
13740
  ["GIT_ARCHIVE_FAILED" /* GIT_ARCHIVE_FAILED */]: 500,
11993
13741
  ["EMBEDDING_NOT_AVAILABLE" /* EMBEDDING_NOT_AVAILABLE */]: 503,
11994
13742
  ["LLM_NOT_AVAILABLE" /* LLM_NOT_AVAILABLE */]: 503,
13743
+ ["QUERY_TIMEOUT" /* QUERY_TIMEOUT */]: 504,
11995
13744
  ["DAEMON_OFFLINE" /* DAEMON_OFFLINE */]: 503,
11996
13745
  ["DAEMON_AUTO_START_FAILED" /* DAEMON_AUTO_START_FAILED */]: 503,
11997
13746
  ["GIT_API_AUTH_FAILED" /* GIT_API_AUTH_FAILED */]: 502,
@@ -12059,6 +13808,29 @@ function parseYaml(value) {
12059
13808
  throw new C4AError("PARSE_YAML" /* PARSE_YAML */, message, { input: value });
12060
13809
  }
12061
13810
  }
13811
+ // src/utils/glob.ts
13812
+ var import_picomatch = __toESM(require_picomatch2(), 1);
13813
+ var globToRegex = (glob) => import_picomatch.default.makeRe(glob, { dot: false });
13814
+ function createPathMatcher(rules) {
13815
+ if (rules.include.length === 0)
13816
+ return () => false;
13817
+ const isIncluded = import_picomatch.default(rules.include, { dot: false });
13818
+ const isExcluded = rules.exclude.length > 0 ? import_picomatch.default(rules.exclude, { dot: false }) : () => false;
13819
+ return (path2) => isIncluded(path2) && !isExcluded(path2);
13820
+ }
13821
+ function matchesPathFilter(path2, category, config) {
13822
+ const section = config[category];
13823
+ const include = section.include;
13824
+ const exclude = "exclude" in section ? section.exclude : [];
13825
+ if (include.length === 0)
13826
+ return false;
13827
+ const isIncluded = import_picomatch.default.isMatch(path2, include, { dot: false });
13828
+ if (!isIncluded)
13829
+ return false;
13830
+ if (exclude.length > 0 && import_picomatch.default.isMatch(path2, exclude, { dot: false }))
13831
+ return false;
13832
+ return true;
13833
+ }
12062
13834
  // src/constants.ts
12063
13835
  var DEFAULT_WORKSPACE_NAME = "My Brain";
12064
13836
  var DEFAULT_CLOUD_LIBRARY_NAME = "My Drive";
@@ -12068,6 +13840,52 @@ var RESERVED_USER_NAMES = ["SuperTest"];
12068
13840
  var DAEMON_HEARTBEAT_INTERVAL = 30000;
12069
13841
  var DAEMON_OFFLINE_THRESHOLD = 60000;
12070
13842
  var CLOUD_DAEMON_IDLE_TIMEOUT = 300000;
13843
+ var SCAN_EXCLUDED_DIRS = new Set([
13844
+ ".git",
13845
+ ".svn",
13846
+ ".hg",
13847
+ "node_modules",
13848
+ "dist",
13849
+ "build",
13850
+ "out",
13851
+ "coverage",
13852
+ ".next",
13853
+ ".nuxt",
13854
+ ".turbo",
13855
+ ".cache",
13856
+ ".parcel-cache",
13857
+ "__pycache__",
13858
+ ".venv",
13859
+ "venv",
13860
+ ".mypy_cache",
13861
+ ".pytest_cache",
13862
+ ".ruff_cache",
13863
+ "site-packages",
13864
+ ".eggs",
13865
+ "vendor",
13866
+ "target",
13867
+ ".gradle",
13868
+ ".m2",
13869
+ "__tests__",
13870
+ "__test__",
13871
+ "__e2e__",
13872
+ "__mocks__",
13873
+ "__fixtures__",
13874
+ "__snapshots__",
13875
+ "fixtures",
13876
+ ".tmp"
13877
+ ]);
13878
+ var CODE_DIGEST_TYPE = "code_tc_b";
13879
+ var hasExcludedSegment = (filePath) => {
13880
+ const segments = filePath.split("/");
13881
+ for (let i = 0;i < segments.length - 1; i++) {
13882
+ const seg = segments[i];
13883
+ if (SCAN_EXCLUDED_DIRS.has(seg) || seg.startsWith(".") && seg !== "." || seg.endsWith(".egg-info")) {
13884
+ return true;
13885
+ }
13886
+ }
13887
+ return false;
13888
+ };
12071
13889
  // src/contentTypeRegistry.ts
12072
13890
  var DEFAULT_CONTENT_TYPES = [
12073
13891
  {
@@ -12211,6 +14029,13 @@ var WS_INDEX_PROGRESS = "index/progress";
12211
14029
  var WS_INDEX_DONE = "index/done";
12212
14030
  var WS_INDEX_ERROR = "index/error";
12213
14031
  var WS_INDEX_TIMEOUT = "index/timeout";
14032
+ var WS_TASK_QUEUED = "task/queued";
14033
+ var WS_TASK_STARTED = "task/started";
14034
+ var WS_TASK_PROGRESS = "task/progress";
14035
+ var WS_TASK_DONE = "task/done";
14036
+ var WS_TASK_FAILED = "task/failed";
14037
+ var WS_TASK_CANCELLED = "task/cancelled";
14038
+ var WS_TASK_QUEUE_UPDATE = "task/queue_update";
12214
14039
  export {
12215
14040
  validateAtomsWhitelist,
12216
14041
  transitionAtomSchema,
@@ -12226,6 +14051,7 @@ export {
12226
14051
  scopeSchema,
12227
14052
  ruleAtomSchema,
12228
14053
  roleAtomSchema,
14054
+ resolvePathFilter,
12229
14055
  relationTypeSchema,
12230
14056
  relationSchema,
12231
14057
  relationDataSchema,
@@ -12240,12 +14066,15 @@ export {
12240
14066
  metricMilestoneSchema,
12241
14067
  metricAtomSchema,
12242
14068
  metadataSchema,
14069
+ matchesPathFilter,
12243
14070
  mapErrorCodeToStatus,
12244
14071
  kindSchema,
12245
14072
  isValidManifest,
12246
14073
  isRefPointer,
12247
14074
  isPathSafe,
12248
14075
  isIndexableFile,
14076
+ hasExcludedSegment,
14077
+ globToRegex,
12249
14078
  getFileExtension,
12250
14079
  generateUUID,
12251
14080
  generateId,
@@ -12269,6 +14098,7 @@ export {
12269
14098
  decisionPhaseSchema,
12270
14099
  decisionAtomSchema,
12271
14100
  dataAtomsSchema,
14101
+ createPathMatcher,
12272
14102
  contractEntitySchema,
12273
14103
  contractDataSchema,
12274
14104
  contentHash,
@@ -12287,6 +14117,13 @@ export {
12287
14117
  alternativeSchema,
12288
14118
  allowedAtomFieldSchema,
12289
14119
  adrDataSchema,
14120
+ WS_TASK_STARTED,
14121
+ WS_TASK_QUEUE_UPDATE,
14122
+ WS_TASK_QUEUED,
14123
+ WS_TASK_PROGRESS,
14124
+ WS_TASK_FAILED,
14125
+ WS_TASK_DONE,
14126
+ WS_TASK_CANCELLED,
12290
14127
  WS_SESSION_STATUS,
12291
14128
  WS_SESSION_PROGRESS,
12292
14129
  WS_LIBRARY_UPDATED,
@@ -12305,9 +14142,11 @@ export {
12305
14142
  TEXT_EXTENSIONS,
12306
14143
  SUPERTEST_USER_NAME,
12307
14144
  SUPERTEST_EMAIL,
14145
+ SCAN_EXCLUDED_DIRS,
12308
14146
  RelationType,
12309
14147
  RESERVED_USER_NAMES,
12310
14148
  Perspective,
14149
+ PathFilterConfigSchema,
12311
14150
  Kind,
12312
14151
  INDEXABLE_EXTENSIONS,
12313
14152
  INDEXABLE_DOC_EXTENSIONS,
@@ -12317,12 +14156,14 @@ export {
12317
14156
  EDGE_SYNC_RULES,
12318
14157
  DEFAULT_WORKSPACE_NAME,
12319
14158
  DEFAULT_SERVER_CONFIG,
14159
+ DEFAULT_PATH_FILTER,
12320
14160
  DEFAULT_CONTENT_TYPE_DEFINITIONS,
12321
14161
  DEFAULT_CLOUD_LIBRARY_NAME,
12322
14162
  DAEMON_OFFLINE_THRESHOLD,
12323
14163
  DAEMON_HEARTBEAT_INTERVAL,
12324
14164
  ContentTypeRegistry,
12325
14165
  CODE_PACKAGE_FILES,
14166
+ CODE_DIGEST_TYPE,
12326
14167
  CLOUD_DAEMON_IDLE_TIMEOUT,
12327
14168
  C4AError,
12328
14169
  AtomField