AK-21/Graphite-Industrial-Intelligence
0
1Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });2//#region \0rolldown/runtime.js3var __create = Object.create;4var __defProp = Object.defineProperty;5var __getOwnPropDesc = Object.getOwnPropertyDescriptor;6var __getOwnPropNames = Object.getOwnPropertyNames;7var __getProtoOf = Object.getPrototypeOf;8var __hasOwnProp = Object.prototype.hasOwnProperty;9var __copyProps = (to, from, except, desc) => {10 if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {11 key = keys[i];12 if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {13 get: ((k) => from[k]).bind(null, key),14 enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable15 });16 }17 return to;18};19var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {20 value: mod,21 enumerable: true22}) : target, mod));23//#endregion24let fs = require("fs");25let path = require("path");26let url = require("url");27let fdir = require("fdir");28let picomatch = require("picomatch");29picomatch = __toESM(picomatch, 1);30//#region src/utils.ts31const isReadonlyArray = Array.isArray;32const BACKSLASHES = /\\/g;33const DRIVE_RELATIVE_PATH = /^[A-Za-z]:$/;34const isWin = process.platform === "win32";35const ONLY_PARENT_DIRECTORIES = /^(\/?\.\.)+$/;36function getPartialMatcher(patterns, options = {}) {37 const patternsCount = patterns.length;38 const patternsParts = Array(patternsCount);39 const matchers = Array(patternsCount);40 let i, j;41 for (i = 0; i < patternsCount; i++) {42 const parts = splitPattern(patterns[i]);43 patternsParts[i] = parts;44 const partsCount = parts.length;45 const partMatchers = Array(partsCount);46 for (j = 0; j < partsCount; j++) partMatchers[j] = (0, picomatch.default)(parts[j], options);47 matchers[i] = partMatchers;48 }49 return (input) => {50 const inputParts = input.split("/");51 if (inputParts[0] === ".." && ONLY_PARENT_DIRECTORIES.test(input)) return true;52 for (i = 0; i < patternsCount; i++) {53 const patternParts = patternsParts[i];54 const matcher = matchers[i];55 const inputPatternCount = inputParts.length;56 const minParts = Math.min(inputPatternCount, patternParts.length);57 j = 0;58 while (j < minParts) {59 const part = patternParts[j];60 if (part.includes("/")) return true;61 if (!matcher[j](inputParts[j])) break;62 if (!options.noglobstar && part === "**") return true;63 j++;64 }65 if (j === inputPatternCount) return true;66 }67 return false;68 };69}70/* node:coverage ignore next 2 */71const WIN32_ROOT_DIR = /^[A-Z]:\/$/i;72const isRoot = isWin ? (p) => WIN32_ROOT_DIR.test(p) : (p) => p === "/";73function buildFormat(cwd, root, absolute) {74 if (cwd === root || root.startsWith(`${cwd}/`)) {75 if (absolute) {76 const start = cwd.length + +!isRoot(cwd);77 return (p, isDir) => p.slice(start, isDir ? -1 : void 0) || ".";78 }79 const prefix = root.slice(cwd.length + 1);80 if (prefix) return (p, isDir) => {81 if (p === ".") return prefix;82 const result = `${prefix}/${p}`;83 return isDir ? result.slice(0, -1) : result;84 };85 return (p, isDir) => isDir && p !== "." ? p.slice(0, -1) : p;86 }87 if (absolute) return (p) => path.posix.relative(cwd, p) || ".";88 return (p) => path.posix.relative(cwd, `${root}/${p}`) || ".";89}90function buildRelative(cwd, root) {91 if (root.startsWith(`${cwd}/`)) {92 const prefix = root.slice(cwd.length + 1);93 return (p) => `${prefix}/${p}`;94 }95 return (p) => {96 const result = path.posix.relative(cwd, `${root}/${p}`);97 return p[p.length - 1] === "/" && result !== "" ? `${result}/` : result || ".";98 };99}100function ensureNonDriveRelativePath(path$1) {101 return path$1.replace(DRIVE_RELATIVE_PATH, (match) => `${match}/`);102}103const splitPatternOptions = { parts: true };104function splitPattern(path$2) {105 var _result$parts;106 const result = picomatch.default.scan(path$2, splitPatternOptions);107 return ((_result$parts = result.parts) === null || _result$parts === void 0 ? void 0 : _result$parts.length) ? result.parts : [path$2];108}109const ESCAPED_WIN32_BACKSLASHES = /\\(?![()[\]{}!+@])/g;110function convertPosixPathToPattern(path$3) {111 return escapePosixPath(path$3);112}113function convertWin32PathToPattern(path$4) {114 return escapeWin32Path(path$4).replace(ESCAPED_WIN32_BACKSLASHES, "/");115}116/**117* Converts a path to a pattern depending on the platform.118* Identical to {@link escapePath} on POSIX systems.119* @see {@link https://superchupu.dev/tinyglobby/documentation#convertPathToPattern}120*/121/* node:coverage ignore next 3 */122const convertPathToPattern = isWin ? convertWin32PathToPattern : convertPosixPathToPattern;123const POSIX_UNESCAPED_GLOB_SYMBOLS = /(?<!\\)([()[\]{}*?|]|^!|[!+@](?=\()|\\(?![()[\]{}!*+?@|]))/g;124const WIN32_UNESCAPED_GLOB_SYMBOLS = /(?<!\\)([()[\]{}]|^!|[!+@](?=\())/g;125const escapePosixPath = (path$5) => path$5.replace(POSIX_UNESCAPED_GLOB_SYMBOLS, "\\$&");126const escapeWin32Path = (path$6) => path$6.replace(WIN32_UNESCAPED_GLOB_SYMBOLS, "\\$&");127/**128* Escapes a path's special characters depending on the platform.129* @see {@link https://superchupu.dev/tinyglobby/documentation#escapePath}130*/131/* node:coverage ignore next */132const escapePath = isWin ? escapeWin32Path : escapePosixPath;133/**134* Checks if a pattern has dynamic parts.135*136* Has a few minor differences with [`fast-glob`](https://github.com/mrmlnc/fast-glob) for better accuracy:137*138* - Doesn't necessarily return `false` on patterns that include `\`.139* - Returns `true` if the pattern includes parentheses, regardless of them representing one single pattern or not.140* - Returns `true` for unfinished glob extensions i.e. `(h`, `+(h`.141* - Returns `true` for unfinished brace expansions as long as they include `,` or `..`.142*143* @see {@link https://superchupu.dev/tinyglobby/documentation#isDynamicPattern}144*/145function isDynamicPattern(pattern, options) {146 if ((options === null || options === void 0 ? void 0 : options.caseSensitiveMatch) === false) return true;147 const scan = picomatch.default.scan(pattern);148 return scan.isGlob || scan.negated;149}150function log(...tasks) {151 console.log(`[tinyglobby ${(/* @__PURE__ */ new Date()).toLocaleTimeString("es")}]`, ...tasks);152}153function ensureStringArray(value) {154 return typeof value === "string" ? [value] : value !== null && value !== void 0 ? value : [];155}156//#endregion157//#region src/patterns.ts158const PARENT_DIRECTORY = /^(\/?\.\.)+/;159const ESCAPING_BACKSLASHES = /\\(?=[()[\]{}!*+?@|])/g;160function normalizePattern(pattern, opts, props, isIgnore) {161 var _PARENT_DIRECTORY$exe;162 const cwd = opts.cwd;163 let result = pattern;164 if (pattern[pattern.length - 1] === "/") result = pattern.slice(0, -1);165 if (result[result.length - 1] !== "*" && opts.expandDirectories) result += "/**";166 const escapedCwd = escapePath(cwd);167 result = (0, path.isAbsolute)(result.replace(ESCAPING_BACKSLASHES, "")) ? path.posix.relative(escapedCwd, result) : path.posix.normalize(result);168 const parentDir = (_PARENT_DIRECTORY$exe = PARENT_DIRECTORY.exec(result)) === null || _PARENT_DIRECTORY$exe === void 0 ? void 0 : _PARENT_DIRECTORY$exe[0];169 const parts = splitPattern(result);170 if (parentDir) {171 const n = (parentDir.length + 1) / 3;172 let i = 0;173 const cwdParts = escapedCwd.split("/");174 while (i < n && parts[i + n] === cwdParts[cwdParts.length + i - n]) {175 result = result.slice(0, (n - i - 1) * 3) + result.slice((n - i) * 3 + parts[i + n].length + 1) || ".";176 i++;177 }178 const potentialRoot = path.posix.join(cwd, parentDir.slice(i * 3));179 if (potentialRoot[0] !== "." && props.root.length > potentialRoot.length) {180 props.root = ensureNonDriveRelativePath(potentialRoot);181 props.depthOffset = -n + i;182 }183 }184 if (!isIgnore && props.depthOffset >= 0) {185 var _props$commonPath;186 (_props$commonPath = props.commonPath) !== null && _props$commonPath !== void 0 || (props.commonPath = parts);187 const newCommonPath = [];188 const length = Math.min(props.commonPath.length, parts.length);189 for (let i = 0; i < length; i++) {190 const part = parts[i];191 if (part === "**" && !parts[i + 1]) {192 newCommonPath.pop();193 break;194 }195 if (i === parts.length - 1 || part !== props.commonPath[i] || isDynamicPattern(part)) break;196 newCommonPath.push(part);197 }198 props.depthOffset = newCommonPath.length;199 props.commonPath = newCommonPath;200 props.root = ensureNonDriveRelativePath(newCommonPath.length > 0 ? path.posix.join(cwd, ...newCommonPath) : cwd);201 }202 return result;203}204function processPatterns(options, patterns, props) {205 const matchPatterns = [];206 const ignorePatterns = [];207 for (const pattern of options.ignore) {208 if (!pattern) continue;209 if (pattern[0] !== "!" || pattern[1] === "(") ignorePatterns.push(normalizePattern(pattern, options, props, true));210 }211 for (const pattern of patterns) {212 if (!pattern) continue;213 if (pattern[0] !== "!" || pattern[1] === "(") matchPatterns.push(normalizePattern(pattern, options, props, false));214 else if (pattern[1] !== "!" || pattern[2] === "(") ignorePatterns.push(normalizePattern(pattern.slice(1), options, props, true));215 }216 return {217 match: matchPatterns,218 ignore: ignorePatterns219 };220}221//#endregion222//#region src/crawler.ts223function buildCrawler(options, patterns) {224 const cwd = options.cwd;225 const props = {226 root: cwd,227 depthOffset: 0228 };229 const processed = processPatterns(options, patterns, props);230 if (options.debug) log("internal processing patterns:", processed);231 const { absolute, caseSensitiveMatch, debug, dot, followSymbolicLinks, onlyDirectories } = options;232 const root = props.root.replace(BACKSLASHES, "");233 const matchOptions = {234 dot,235 nobrace: options.braceExpansion === false,236 nocase: !caseSensitiveMatch,237 noextglob: options.extglob === false,238 noglobstar: options.globstar === false,239 posix: true240 };241 const matcher = (0, picomatch.default)(processed.match, matchOptions);242 const ignore = (0, picomatch.default)(processed.ignore, matchOptions);243 const partialMatcher = getPartialMatcher(processed.match, matchOptions);244 const format = buildFormat(cwd, root, absolute);245 const excludeFormatter = absolute ? format : buildFormat(cwd, root, true);246 const excludePredicate = (_, p) => {247 const relativePath = excludeFormatter(p, true);248 return relativePath !== "." && !partialMatcher(relativePath) || ignore(relativePath);249 };250 let maxDepth;251 if (options.deep !== void 0) maxDepth = Math.round(options.deep - props.depthOffset);252 const crawler = new fdir.fdir({253 filters: [debug ? (p, isDirectory) => {254 const path = format(p, isDirectory);255 const matches = matcher(path) && !ignore(path);256 if (matches) log(`matched ${path}`);257 return matches;258 } : (p, isDirectory) => {259 const path = format(p, isDirectory);260 return matcher(path) && !ignore(path);261 }],262 exclude: debug ? (_, p) => {263 const skipped = excludePredicate(_, p);264 log(`${skipped ? "skipped" : "crawling"} ${p}`);265 return skipped;266 } : excludePredicate,267 fs: options.fs,268 pathSeparator: "/",269 relativePaths: !absolute,270 resolvePaths: absolute,271 includeBasePath: absolute,272 resolveSymlinks: followSymbolicLinks,273 excludeSymlinks: !followSymbolicLinks,274 excludeFiles: onlyDirectories,275 includeDirs: onlyDirectories || !options.onlyFiles,276 maxDepth,277 signal: options.signal278 }).crawl(root);279 if (options.debug) log("internal properties:", {280 ...props,281 root282 });283 return [crawler, cwd !== root && !absolute && buildRelative(cwd, root)];284}285//#endregion286//#region src/index.ts287function formatPaths(paths, mapper) {288 if (mapper) for (let i = paths.length - 1; i >= 0; i--) paths[i] = mapper(paths[i]);289 return paths;290}291const defaultOptions = {292 caseSensitiveMatch: true,293 debug: !!process.env.TINYGLOBBY_DEBUG,294 expandDirectories: true,295 followSymbolicLinks: true,296 onlyFiles: true297};298function getOptions(options) {299 const opts = Object.assign({}, options);300 for (const key in defaultOptions) if (opts[key] === void 0) Object.assign(opts, { [key]: defaultOptions[key] });301 opts.cwd = (opts.cwd instanceof URL ? (0, url.fileURLToPath)(opts.cwd) : (0, path.resolve)(opts.cwd || process.cwd())).replace(BACKSLASHES, "/");302 opts.ignore = ensureStringArray(opts.ignore);303 opts.fs && (opts.fs = {304 readdir: opts.fs.readdir || fs.readdir,305 readdirSync: opts.fs.readdirSync || fs.readdirSync,306 realpath: opts.fs.realpath || fs.realpath,307 realpathSync: opts.fs.realpathSync || fs.realpathSync,308 stat: opts.fs.stat || fs.stat,309 statSync: opts.fs.statSync || fs.statSync310 });311 if (opts.debug) log("globbing with options:", opts);312 return opts;313}314function getCrawler(globInput, inputOptions = {}) {315 var _ref;316 if (globInput && (inputOptions === null || inputOptions === void 0 ? void 0 : inputOptions.patterns)) throw new Error("Cannot pass patterns as both an argument and an option");317 const isModern = isReadonlyArray(globInput) || typeof globInput === "string";318 const patterns = ensureStringArray((_ref = isModern ? globInput : globInput.patterns) !== null && _ref !== void 0 ? _ref : "**/*");319 const options = getOptions(isModern ? inputOptions : globInput);320 return patterns.length > 0 ? buildCrawler(options, patterns) : [];321}322async function glob(globInput, options) {323 const [crawler, relative] = getCrawler(globInput, options);324 return crawler ? formatPaths(await crawler.withPromise(), relative) : [];325}326function globSync(globInput, options) {327 const [crawler, relative] = getCrawler(globInput, options);328 return crawler ? formatPaths(crawler.sync(), relative) : [];329}330//#endregion331exports.convertPathToPattern = convertPathToPattern;332exports.escapePath = escapePath;333exports.glob = glob;334exports.globSync = globSync;335exports.isDynamicPattern = isDynamicPattern;336 