{"version":3,"sources":["jsdelivr-header.js","/npm/cheetah-core@1.0.10/dist/commonjs/index.js"],"names":[],"mappings":"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","file":"/npm/cheetah-core@1.0.10/dist/commonjs/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/cheetah-core@1.0.10/dist/commonjs/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/* eslint-disable */\n'use strict';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nfunction __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\n\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n  }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n  var res = '';\n  var lastSegmentLength = 0;\n  var lastSlash = -1;\n  var dots = 0;\n  var code;\n  for (var i = 0; i <= path.length; ++i) {\n    if (i < path.length)\n      code = path.charCodeAt(i);\n    else if (code === 47 /*/*/)\n      break;\n    else\n      code = 47 /*/*/;\n    if (code === 47 /*/*/) {\n      if (lastSlash === i - 1 || dots === 1) ; else if (lastSlash !== i - 1 && dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n          if (res.length > 2) {\n            var lastSlashIndex = res.lastIndexOf('/');\n            if (lastSlashIndex !== res.length - 1) {\n              if (lastSlashIndex === -1) {\n                res = '';\n                lastSegmentLength = 0;\n              } else {\n                res = res.slice(0, lastSlashIndex);\n                lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n              }\n              lastSlash = i;\n              dots = 0;\n              continue;\n            }\n          } else if (res.length === 2 || res.length === 1) {\n            res = '';\n            lastSegmentLength = 0;\n            lastSlash = i;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          if (res.length > 0)\n            res += '/..';\n          else\n            res = '..';\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0)\n          res += '/' + path.slice(lastSlash + 1, i);\n        else\n          res = path.slice(lastSlash + 1, i);\n        lastSegmentLength = i - lastSlash - 1;\n      }\n      lastSlash = i;\n      dots = 0;\n    } else if (code === 46 /*.*/ && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n}\n\nfunction _format(sep, pathObject) {\n  var dir = pathObject.dir || pathObject.root;\n  var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n  if (!dir) {\n    return base;\n  }\n  if (dir === pathObject.root) {\n    return dir + base;\n  }\n  return dir + sep + base;\n}\n\nvar posix = {\n  // path.resolve([from ...], to)\n  resolve: function resolve() {\n    var resolvedPath = '';\n    var resolvedAbsolute = false;\n    var cwd;\n\n    for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n      var path;\n      if (i >= 0)\n        path = arguments[i];\n      else {\n        if (cwd === undefined)\n          cwd = process.cwd();\n        path = cwd;\n      }\n\n      assertPath(path);\n\n      // Skip empty entries\n      if (path.length === 0) {\n        continue;\n      }\n\n      resolvedPath = path + '/' + resolvedPath;\n      resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    }\n\n    // At this point the path should be resolved to a full absolute path, but\n    // handle relative paths to be safe (might happen when process.cwd() fails)\n\n    // Normalize the path\n    resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n    if (resolvedAbsolute) {\n      if (resolvedPath.length > 0)\n        return '/' + resolvedPath;\n      else\n        return '/';\n    } else if (resolvedPath.length > 0) {\n      return resolvedPath;\n    } else {\n      return '.';\n    }\n  },\n\n  normalize: function normalize(path) {\n    assertPath(path);\n\n    if (path.length === 0) return '.';\n\n    var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n    // Normalize the path\n    path = normalizeStringPosix(path, !isAbsolute);\n\n    if (path.length === 0 && !isAbsolute) path = '.';\n    if (path.length > 0 && trailingSeparator) path += '/';\n\n    if (isAbsolute) return '/' + path;\n    return path;\n  },\n\n  isAbsolute: function isAbsolute(path) {\n    assertPath(path);\n    return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n  },\n\n  join: function join() {\n    if (arguments.length === 0)\n      return '.';\n    var joined;\n    for (var i = 0; i < arguments.length; ++i) {\n      var arg = arguments[i];\n      assertPath(arg);\n      if (arg.length > 0) {\n        if (joined === undefined)\n          joined = arg;\n        else\n          joined += '/' + arg;\n      }\n    }\n    if (joined === undefined)\n      return '.';\n    return posix.normalize(joined);\n  },\n\n  relative: function relative(from, to) {\n    assertPath(from);\n    assertPath(to);\n\n    if (from === to) return '';\n\n    from = posix.resolve(from);\n    to = posix.resolve(to);\n\n    if (from === to) return '';\n\n    // Trim any leading backslashes\n    var fromStart = 1;\n    for (; fromStart < from.length; ++fromStart) {\n      if (from.charCodeAt(fromStart) !== 47 /*/*/)\n        break;\n    }\n    var fromEnd = from.length;\n    var fromLen = fromEnd - fromStart;\n\n    // Trim any leading backslashes\n    var toStart = 1;\n    for (; toStart < to.length; ++toStart) {\n      if (to.charCodeAt(toStart) !== 47 /*/*/)\n        break;\n    }\n    var toEnd = to.length;\n    var toLen = toEnd - toStart;\n\n    // Compare paths to find the longest common path from root\n    var length = fromLen < toLen ? fromLen : toLen;\n    var lastCommonSep = -1;\n    var i = 0;\n    for (; i <= length; ++i) {\n      if (i === length) {\n        if (toLen > length) {\n          if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n            // We get here if `from` is the exact base path for `to`.\n            // For example: from='/foo/bar'; to='/foo/bar/baz'\n            return to.slice(toStart + i + 1);\n          } else if (i === 0) {\n            // We get here if `from` is the root\n            // For example: from='/'; to='/foo'\n            return to.slice(toStart + i);\n          }\n        } else if (fromLen > length) {\n          if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n            // We get here if `to` is the exact base path for `from`.\n            // For example: from='/foo/bar/baz'; to='/foo/bar'\n            lastCommonSep = i;\n          } else if (i === 0) {\n            // We get here if `to` is the root.\n            // For example: from='/foo'; to='/'\n            lastCommonSep = 0;\n          }\n        }\n        break;\n      }\n      var fromCode = from.charCodeAt(fromStart + i);\n      var toCode = to.charCodeAt(toStart + i);\n      if (fromCode !== toCode)\n        break;\n      else if (fromCode === 47 /*/*/)\n        lastCommonSep = i;\n    }\n\n    var out = '';\n    // Generate the relative path based on the path difference between `to`\n    // and `from`\n    for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n      if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n        if (out.length === 0)\n          out += '..';\n        else\n          out += '/..';\n      }\n    }\n\n    // Lastly, append the rest of the destination (`to`) path that comes after\n    // the common path parts\n    if (out.length > 0)\n      return out + to.slice(toStart + lastCommonSep);\n    else {\n      toStart += lastCommonSep;\n      if (to.charCodeAt(toStart) === 47 /*/*/)\n        ++toStart;\n      return to.slice(toStart);\n    }\n  },\n\n  _makeLong: function _makeLong(path) {\n    return path;\n  },\n\n  dirname: function dirname(path) {\n    assertPath(path);\n    if (path.length === 0) return '.';\n    var code = path.charCodeAt(0);\n    var hasRoot = code === 47 /*/*/;\n    var end = -1;\n    var matchedSlash = true;\n    for (var i = path.length - 1; i >= 1; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          if (!matchedSlash) {\n            end = i;\n            break;\n          }\n        } else {\n        // We saw the first non-path separator\n        matchedSlash = false;\n      }\n    }\n\n    if (end === -1) return hasRoot ? '/' : '.';\n    if (hasRoot && end === 1) return '//';\n    return path.slice(0, end);\n  },\n\n  basename: function basename(path, ext) {\n    if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n    assertPath(path);\n\n    var start = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i;\n\n    if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n      if (ext.length === path.length && ext === path) return '';\n      var extIdx = ext.length - 1;\n      var firstNonSlashEnd = -1;\n      for (i = path.length - 1; i >= 0; --i) {\n        var code = path.charCodeAt(i);\n        if (code === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else {\n          if (firstNonSlashEnd === -1) {\n            // We saw the first non-path separator, remember this index in case\n            // we need it if the extension ends up not matching\n            matchedSlash = false;\n            firstNonSlashEnd = i + 1;\n          }\n          if (extIdx >= 0) {\n            // Try to match the explicit extension\n            if (code === ext.charCodeAt(extIdx)) {\n              if (--extIdx === -1) {\n                // We matched the extension, so mark this as the end of our path\n                // component\n                end = i;\n              }\n            } else {\n              // Extension does not match, so our result is the entire path\n              // component\n              extIdx = -1;\n              end = firstNonSlashEnd;\n            }\n          }\n        }\n      }\n\n      if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n      return path.slice(start, end);\n    } else {\n      for (i = path.length - 1; i >= 0; --i) {\n        if (path.charCodeAt(i) === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else if (end === -1) {\n          // We saw the first non-path separator, mark this as the end of our\n          // path component\n          matchedSlash = false;\n          end = i + 1;\n        }\n      }\n\n      if (end === -1) return '';\n      return path.slice(start, end);\n    }\n  },\n\n  extname: function extname(path) {\n    assertPath(path);\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n    for (var i = path.length - 1; i >= 0; --i) {\n      var code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1)\n            startDot = i;\n          else if (preDotState !== 1)\n            preDotState = 1;\n      } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n        // We saw a non-dot character immediately before the dot\n        preDotState === 0 ||\n        // The (right-most) trimmed path component is exactly '..'\n        preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      return '';\n    }\n    return path.slice(startDot, end);\n  },\n\n  format: function format(pathObject) {\n    if (pathObject === null || typeof pathObject !== 'object') {\n      throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n    }\n    return _format('/', pathObject);\n  },\n\n  parse: function parse(path) {\n    assertPath(path);\n\n    var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n    if (path.length === 0) return ret;\n    var code = path.charCodeAt(0);\n    var isAbsolute = code === 47 /*/*/;\n    var start;\n    if (isAbsolute) {\n      ret.root = '/';\n      start = 1;\n    } else {\n      start = 0;\n    }\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i = path.length - 1;\n\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n\n    // Get non-dir info\n    for (; i >= start; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n        } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n    // We saw a non-dot character immediately before the dot\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly '..'\n    preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      if (end !== -1) {\n        if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n      }\n    } else {\n      if (startPart === 0 && isAbsolute) {\n        ret.name = path.slice(1, startDot);\n        ret.base = path.slice(1, end);\n      } else {\n        ret.name = path.slice(startPart, startDot);\n        ret.base = path.slice(startPart, end);\n      }\n      ret.ext = path.slice(startDot, end);\n    }\n\n    if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n    return ret;\n  },\n\n  sep: '/',\n  delimiter: ':',\n  win32: null,\n  posix: null\n};\n\nposix.posix = posix;\n\nvar pathBrowserify = posix;\n\n// 搜索项目时需要排除的目录\r\nconst ignoreFolders = [\r\n    'node_modules',\r\n];\r\n// 排除目录的正则表达式\r\nconst ignoreFoldersReg = new RegExp(ignoreFolders.join('|'), 'i');\r\nconst isTxiki = !!global.tjs;\n\n/**\r\n * @description: 获取环境变量\r\n * @param {string} envName 要获取的环境变量名称\r\n * @param {any} defaultValue 默认值\r\n * @return {string} 获取到的环境变量值\r\n */\r\nfunction getEnv(envName, defaultValue) {\r\n    try {\r\n        return isTxiki ? tjs.getenv(envName) : process.env[envName];\r\n    }\r\n    catch (error) {\r\n        return defaultValue;\r\n    }\r\n}\r\n/**\r\n * @description: 读取文件内容\r\n * @param {string} filePath 文件路径\r\n * @return {Promise<string>} 文件内容\r\n */\r\nfunction readFile(filePath) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        let fileContent = '';\r\n        try {\r\n            if (isTxiki) {\r\n                const buffer = yield tjs.readFile(filePath);\r\n                const decoder = new TextDecoder();\r\n                fileContent = decoder.decode(buffer);\r\n            }\r\n            else {\r\n                const fs = require('fs');\r\n                fileContent = fs.readFileSync(filePath).toString();\r\n            }\r\n            return fileContent;\r\n        }\r\n        catch (error) {\r\n            throw new Error('100');\r\n        }\r\n    });\r\n}\r\n/**\r\n * @description: 写入文件内容\r\n * @param {string} filePath 文件路径\r\n * @param {string} content 文件内容\r\n * @return {Promise<void>}\r\n */\r\nfunction writeFile(filePath, content) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        try {\r\n            if (isTxiki) {\r\n                const cacheFile = yield tjs.open(filePath, 'rw', 0o666);\r\n                const encoder = new TextEncoder();\r\n                yield cacheFile.write(encoder.encode(content));\r\n            }\r\n            else {\r\n                const fs = require('fs');\r\n                const dirname = filePath.replace(/(\\/|(\\\\)+)\\w*\\.json/, '');\r\n                console.log(dirname);\r\n                fs.mkdirSync(dirname, { recursive: true });\r\n                fs.writeFileSync(filePath, content);\r\n            }\r\n        }\r\n        catch (error) {\r\n            console.log(error);\r\n            throw new Error('101');\r\n        }\r\n    });\r\n}\r\n/**\r\n * @description: 读取文件夹下所有内容\r\n * @param {string} dirPath 文件夹路径\r\n * @return {ChildInfo[]} 文件夹下文件对象集合\r\n */\r\nfunction readDir(dirPath) {\r\n    var e_1, _a;\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        let dirIter;\r\n        try {\r\n            if (isTxiki) {\r\n                dirIter = yield tjs.readdir(dirPath);\r\n            }\r\n            else {\r\n                const fs = require('fs');\r\n                dirIter = fs.readdirSync(dirPath);\r\n            }\r\n            const files = [];\r\n            try {\r\n                for (var dirIter_1 = __asyncValues(dirIter), dirIter_1_1; dirIter_1_1 = yield dirIter_1.next(), !dirIter_1_1.done;) {\r\n                    const item = dirIter_1_1.value;\r\n                    const name = isTxiki ? item.name : item;\r\n                    if (['System Volume Information', '$RECYCLE.BIN'].includes(name)) {\r\n                        continue;\r\n                    }\r\n                    const itemPath = pathBrowserify.join(dirPath, name);\r\n                    let isDir = false;\r\n                    if (isTxiki) {\r\n                        isDir = item.isDirectory;\r\n                    }\r\n                    else {\r\n                        const fs = require('fs');\r\n                        isDir = fs.statSync(itemPath).isDirectory(); // node 判断是否文件夹\r\n                    }\r\n                    files.push({\r\n                        name,\r\n                        isDir,\r\n                        path: itemPath,\r\n                    });\r\n                }\r\n            }\r\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n            finally {\r\n                try {\r\n                    if (dirIter_1_1 && !dirIter_1_1.done && (_a = dirIter_1.return)) yield _a.call(dirIter_1);\r\n                }\r\n                finally { if (e_1) throw e_1.error; }\r\n            }\r\n            return files;\r\n        }\r\n        catch (error) {\r\n            console.log(error);\r\n            throw new Error('108');\r\n        }\r\n    });\r\n}\r\n/**\r\n * @description: 删除文件\r\n * @param {string} filePath 文件路径\r\n * @return {Promise<void>}\r\n */\r\nfunction unlink(filePath) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        try {\r\n            if (isTxiki) {\r\n                yield tjs.unlink(filePath);\r\n            }\r\n            else {\r\n                const fs = require('fs');\r\n                fs.unlinkSync(filePath);\r\n            }\r\n        }\r\n        catch (error) {\r\n            throw new Error('102');\r\n        }\r\n    });\r\n}\r\nfunction pathNormalization(path) {\r\n    if (!platform.isWindows) {\r\n        return path;\r\n    }\r\n    return path.replace(/((\\\\)+(\\/)?)|(\\/)/g, '\\\\');\r\n}\n\nvar _a, _b;\r\n// 执行的命令\r\nexports.COMMAND = void 0;\r\n(function (COMMAND) {\r\n    COMMAND[\"OPEN\"] = \"open\";\r\n    COMMAND[\"GIT_GUI_OPEN\"] = \"git_gui_open\";\r\n    COMMAND[\"TERMINAL_OPEN\"] = \"terminal_open\";\r\n    COMMAND[\"FOLDER_OPEN\"] = \"folder_open\";\r\n    COMMAND[\"SET_APPLICATION\"] = \"set_application\";\r\n})(exports.COMMAND || (exports.COMMAND = {}));\r\n// 系统平台枚举\r\nexports.PlatformType = void 0;\r\n(function (PlatformType) {\r\n    PlatformType[\"MAC\"] = \"Mac\";\r\n    PlatformType[\"WINDOWS\"] = \"Windows\";\r\n    PlatformType[\"LINUX\"] = \"Linux\";\r\n})(exports.PlatformType || (exports.PlatformType = {}));\r\n// 错误代码对应的文字提示\r\nconst ErrorCodeMessage = {\r\n    '100': '文件读取失败',\r\n    '101': '文件写入失败',\r\n    '102': '文件删除失败',\r\n    '103': '工作目录未配置',\r\n    '104': '缓存文件路径未配置',\r\n    '105': '系统平台未配置',\r\n    '106': '环境变量读取失败',\r\n    '107': '缓存文件写入失败',\r\n    '108': '读取文件夹失败',\r\n    '109': '未知的终端程序，降级为文件夹打开',\r\n    '110': '缓存内无此项目',\r\n    '111': '应用路径为空',\r\n};\r\n// 系统用户目录\r\nconst HOME_PATH = (_b = (_a = getEnv('HOME')) !== null && _a !== void 0 ? _a : getEnv('APPDATA')) !== null && _b !== void 0 ? _b : '';\n\n/**\r\n * @description: 初始化核心模块，将缓存文件路径，工作区参数挂载到全局对象\r\n * @param {InitParams} initParams\r\n * @return {*}\r\n */\r\nfunction init(initParams) {\r\n    const { cachePath, workspaces, platformType } = initParams;\r\n    const platform = {\r\n        isMac: platformType === exports.PlatformType.MAC,\r\n        isWindows: platformType === exports.PlatformType.WINDOWS,\r\n        isLinux: platformType === exports.PlatformType.LINUX,\r\n    };\r\n    Object.assign(global, {\r\n        cachePath,\r\n        workspaces: workspaces.split(/[,，]/),\r\n        platform,\r\n    });\r\n}\r\n/**\r\n * @description: 合并编辑器配置\r\n * @param {Editors} editor 缓存中的编辑器配置\r\n * @param {Project[]} cache 项目合集\r\n * @return {Editors} 合并后的编辑器配置\r\n */\r\nfunction combinedEditorList(editor, cache) {\r\n    const newEditor = Object.assign({}, editor);\r\n    const currentEditor = Object.keys(newEditor);\r\n    cache.forEach(({ type }) => {\r\n        if (!currentEditor.includes(type)) {\r\n            newEditor[type] = '';\r\n        }\r\n    });\r\n    return newEditor;\r\n}\r\n/**\r\n * @description: 读取缓存\r\n * @return {Promise<Config>} 缓存内容\r\n */\r\nfunction readCache() {\r\n    var _a;\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const { cachePath } = global;\r\n        if (!cachePath) {\r\n            throw new Error('104');\r\n        }\r\n        try {\r\n            const history = yield readFile(cachePath);\r\n            return (_a = JSON.parse(history)) !== null && _a !== void 0 ? _a : { editor: {}, cache: [] };\r\n        }\r\n        catch (error) {\r\n            if (error.message === '100') {\r\n                // eslint-disable-next-line no-use-before-define\r\n                writeCache([]);\r\n                return { editor: {}, cache: [] };\r\n            }\r\n            return { editor: {}, cache: [] };\r\n        }\r\n    });\r\n}\r\n/**\r\n * @description: 写入缓存\r\n * @param {Project} newCache 最新的项目查找结果集合\r\n * @return {Promise<void>}\r\n */\r\nfunction writeCache(newCache) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const { cachePath } = global;\r\n        if (!cachePath) {\r\n            throw new Error('104');\r\n        }\r\n        const { editor } = yield readCache();\r\n        const newEditorList = combinedEditorList(editor, newCache);\r\n        const newConfig = { editor: newEditorList, cache: newCache };\r\n        const historyString = JSON.stringify(newConfig, null, 2);\r\n        yield writeFile(cachePath, historyString);\r\n    });\r\n}\r\n/**\r\n * @description: 更新缓存时合并项目点击数\r\n * @param {Project[]} newCache 最新的项目查找结果集合\r\n * @return {Promise<Project[]>} 合并后的项目集合\r\n */\r\nfunction combinedCache(newCache) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const { cache } = yield readCache();\r\n        // 筛选有点击记录的项目\r\n        const needMergeList = {};\r\n        cache\r\n            .filter((item) => item.hits > 0 || item.idePath)\r\n            .forEach((item) => {\r\n            needMergeList[item.path] = item;\r\n        });\r\n        // 合并点击数\r\n        newCache.forEach((item) => {\r\n            var _a;\r\n            const selfItem = item;\r\n            const cacheItem = (_a = needMergeList[selfItem.path]) !== null && _a !== void 0 ? _a : {};\r\n            const { hits = 0, idePath = '' } = cacheItem;\r\n            selfItem.hits = selfItem.hits > hits ? selfItem.hits : hits;\r\n            selfItem.idePath = idePath;\r\n        });\r\n        return newCache;\r\n    });\r\n}\r\n/**\r\n * @description: 查找项目内的 submodule\r\n * @param {string} projectPath 项目路径\r\n * @return {Promise<ChildInfo[]>} submodule 目录合集\r\n */\r\nfunction findSubmodules(projectPath) {\r\n    var _a;\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const fileContent = yield readFile(projectPath);\r\n        const matchModules = (_a = fileContent.match(/(?<=path = )([\\S]*)(?=\\n)/g)) !== null && _a !== void 0 ? _a : [];\r\n        return matchModules.map((module) => ({\r\n            name: module,\r\n            isDir: true,\r\n            path: pathBrowserify.join(pathBrowserify.dirname(projectPath), module),\r\n        }));\r\n    });\r\n}\r\n/**\r\n * @description: 判断文件集合中是否包含指定文件\r\n * @param {ChildInfo} allFile 所有文件集合\r\n * @param {string} fileNames 文件名称\r\n * @return {boolean}\r\n */\r\nfunction findFileFromProject(allFile, fileNames) {\r\n    const reg = new RegExp(`^(${fileNames.join('|')})$`, 'i');\r\n    const findFileList = allFile.filter(({ name }) => reg.test(name));\r\n    return findFileList.length === fileNames.length;\r\n}\r\n/**\r\n * @description: 判断依赖集合中是否包含指定依赖\r\n * @param {string} allDependList 总依赖集合\r\n * @param {string} dependList 包含的依赖集合\r\n * @return {boolean}\r\n */\r\nfunction findDependFromPackage(allDependList, dependList) {\r\n    const reg = new RegExp(`^(${dependList.join('|')})$`, 'i');\r\n    const findDependList = allDependList.filter((item) => reg.test(item));\r\n    return findDependList.length >= dependList.length;\r\n}\r\n/**\r\n * @description: 获取 package.json 文件内的依赖列表\r\n * @param {ChildInfo} allFile 所有用于判断的文件列表\r\n * @return {Promise<string[]>} 查找到的所有依赖名称集合\r\n */\r\nfunction getDependList(allFile) {\r\n    var _a, _b;\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const packageJsonFilePath = (_b = (_a = allFile.find(({ name }) => name === 'package.json')) === null || _a === void 0 ? void 0 : _a.path) !== null && _b !== void 0 ? _b : '';\r\n        if (!packageJsonFilePath) {\r\n            return [];\r\n        }\r\n        const { dependencies = [], devDependencies = [] } = JSON.parse(yield readFile(packageJsonFilePath));\r\n        const dependList = Object.assign(Object.assign({}, dependencies), devDependencies);\r\n        return Object.keys(dependList);\r\n    });\r\n}\r\n/**\r\n * @description: 解析项目类型\r\n * @param {ChildInfo} children 项目下包含的文件列表\r\n * @return {*}\r\n */\r\nfunction projectTypeParse(children) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        if (findFileFromProject(children, ['cargo.toml'])) {\r\n            return 'rust';\r\n        }\r\n        if (findFileFromProject(children, ['pubspec.yaml'])) {\r\n            return 'dart';\r\n        }\r\n        if (findFileFromProject(children, ['.*.xcodeproj'])) {\r\n            return 'applescript';\r\n        }\r\n        if (findFileFromProject(children, ['app', 'gradle'])) {\r\n            return 'android';\r\n        }\r\n        // js 项目还可以细分\r\n        if (findFileFromProject(children, ['package.json'])) {\r\n            if (findFileFromProject(children, ['nuxt.config.js'])) {\r\n                return 'nuxt';\r\n            }\r\n            if (findFileFromProject(children, ['vue.config.js'])) {\r\n                return 'vue';\r\n            }\r\n            if (findFileFromProject(children, ['.vscodeignore'])) {\r\n                return 'vscode';\r\n            }\r\n            const isTS = findFileFromProject(children, ['tsconfig.json']);\r\n            const dependList = yield getDependList(children);\r\n            if (findDependFromPackage(dependList, ['react'])) {\r\n                return isTS ? 'react_ts' : 'react';\r\n            }\r\n            if (findDependFromPackage(dependList, ['hexo'])) {\r\n                return 'hexo';\r\n            }\r\n            return isTS ? 'typescript' : 'javascript';\r\n        }\r\n        return 'unknown';\r\n    });\r\n}\r\n/**\r\n * @description: 递归查找指定目录下的 git 项目\r\n * @param {string} dirPath 目录路径\r\n * @return {Promise<Project[]>} 查找到的项目集合\r\n */\r\nfunction findProject(dirPath) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const result = [];\r\n        let currentChildren = [];\r\n        if (ignoreFoldersReg.test(dirPath)) {\r\n            return result;\r\n        }\r\n        try {\r\n            currentChildren = yield readDir(dirPath);\r\n        }\r\n        catch (error) {\r\n            console.log(error);\r\n            return result;\r\n        }\r\n        const isGitProject = currentChildren.some(({ name }) => name === '.git');\r\n        const hasSubmodules = currentChildren.some(({ name }) => name === '.gitmodules');\r\n        if (isGitProject) {\r\n            result.push({\r\n                name: pathBrowserify.basename(dirPath),\r\n                path: pathNormalization(dirPath),\r\n                type: yield projectTypeParse(currentChildren),\r\n                hits: 0,\r\n                idePath: '',\r\n            });\r\n        }\r\n        let nextLevelDir = [];\r\n        if (!isGitProject) {\r\n            nextLevelDir = currentChildren.filter(({ isDir }) => isDir);\r\n        }\r\n        if (isGitProject && hasSubmodules) {\r\n            nextLevelDir = yield findSubmodules(pathBrowserify.join(dirPath, '.gitmodules'));\r\n        }\r\n        for (let i = 0; i < nextLevelDir.length; i += 1) {\r\n            const dir = nextLevelDir[i];\r\n            // eslint-disable-next-line no-await-in-loop\r\n            result.push(...(yield findProject(pathBrowserify.join(dirPath, dir.name))));\r\n        }\r\n        return result;\r\n    });\r\n}\r\n/**\r\n * @description: 根据关键字过滤项目\r\n * @param {Project} projectList 项目合集\r\n * @param {string} keyword 关键字\r\n * @return {Project[]} 符合关键字匹配的项目合集\r\n */\r\nfunction filterProject(projectList, keyword) {\r\n    const result = projectList.filter(({ name }) => {\r\n        const reg = new RegExp(keyword, 'i');\r\n        return reg.test(name);\r\n    });\r\n    // 排序规则：项目名称以关键词开头的权重最高，剩余的以点击量降序排序\r\n    const startMatch = [];\r\n    const otherMatch = [];\r\n    result.forEach((item) => {\r\n        if (item.name.startsWith(keyword)) {\r\n            startMatch.push(item);\r\n        }\r\n        else {\r\n            otherMatch.push(item);\r\n        }\r\n    });\r\n    return [\r\n        ...startMatch.sort((a, b) => b.hits - a.hits),\r\n        ...otherMatch.sort((a, b) => b.hits - a.hits),\r\n    ];\r\n}\r\n/**\r\n * @description: 在多个工作目录下搜索项目\r\n * @return {Promise<Project[]>} 查找到的项目合集\r\n */\r\nfunction batchFindProject() {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const { workspaces } = global;\r\n        if (!workspaces.length) {\r\n            throw new Error('103');\r\n        }\r\n        const projectList = [];\r\n        for (let i = 0; i < workspaces.length; i += 1) {\r\n            const dirPath = workspaces[i];\r\n            console.log(`searching ${dirPath}`);\r\n            // eslint-disable-next-line no-await-in-loop\r\n            const children = yield findProject(dirPath);\r\n            projectList.push(...children);\r\n        }\r\n        return projectList;\r\n    });\r\n}\r\n/**\r\n * @description: 从缓存中过滤\r\n * @param {string} keyword 关键字\r\n * @return {Promise<Project[]>} 匹配结果项目合集\r\n */\r\nfunction filterWithCache(keyword) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const { cache } = yield readCache();\r\n        return filterProject(cache, keyword);\r\n    });\r\n}\r\n/**\r\n * @description: 从搜索结果中过滤\r\n * @param {string} keyword 关键字\r\n * @return {Promise<Project[]>} 匹配结果项目合集\r\n */\r\nfunction filterWithSearchResult(keyword) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        try {\r\n            const projectList = yield batchFindProject();\r\n            yield writeCache(yield combinedCache(projectList));\r\n            return filterWithCache(keyword);\r\n        }\r\n        catch (error) {\r\n            console.log(error.message);\r\n            return Promise.resolve([]);\r\n        }\r\n    });\r\n}\r\n/**\r\n * @description: 清除缓存\r\n * @return {*}\r\n */\r\nfunction clearCache() {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const { cachePath } = global;\r\n        if (!cachePath) {\r\n            throw new Error('104');\r\n        }\r\n        yield unlink(cachePath);\r\n    });\r\n}\n\n/**\r\n * @description: 兜底方案，返回文件夹打开的应用路径\r\n * @param {*}\r\n * @return {*}\r\n */\r\nfunction openFolderAppPath() {\r\n    const { platform } = global;\r\n    if (platform.isWindows) {\r\n        return 'start';\r\n    }\r\n    return 'Finder';\r\n}\r\n/**\r\n * @description: windows 下终端命令处理\r\n * @param {string} realAppPath 应用路径\r\n * @param {string} projectPath 项目路径\r\n * @return {*}\r\n */\r\nfunction windowsTerminal(realAppPath, projectPath) {\r\n    if (/powershell/i.test(realAppPath)) {\r\n        return `start powershell -NoExit -Command \"cd ${projectPath}\"`;\r\n    }\r\n    if (/cmd/i.test(realAppPath)) {\r\n        return `start /D ${projectPath}`;\r\n    }\r\n    throw new Error('109');\r\n}\r\n/**\r\n * @description: 处理 windows 路径\r\n * @param {string} path\r\n * @return {*}\r\n */\r\nfunction pathConvert(path) {\r\n    return platform.isMac ? path : path.replace(/\\\\/g, '\\\\\\\\');\r\n}\r\n/**\r\n * @description: 获取打开项目的命令\r\n * @param {string} commandType 命令类型\r\n * @param {ResultItem} projectItem 项目信息\r\n * @return {*}\r\n */\r\nfunction getOpenCommand(projectItem, commandType = exports.COMMAND.FOLDER_OPEN, defaultAppPath = '') {\r\n    var _a;\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const { editor } = yield readCache();\r\n        const { type = '', path = '', idePath } = projectItem !== null && projectItem !== void 0 ? projectItem : {};\r\n        // 类型应用\r\n        const typeAppPath = (_a = editor === null || editor === void 0 ? void 0 : editor[type]) !== null && _a !== void 0 ? _a : '';\r\n        // 最终使用的应用\r\n        const targetAppPath = idePath || typeAppPath || defaultAppPath;\r\n        let realAppPath = pathConvert(targetAppPath);\r\n        const projectPath = pathConvert(path);\r\n        // 打开文件夹为兜底选项\r\n        if (!realAppPath) {\r\n            realAppPath = openFolderAppPath();\r\n        }\r\n        if (platform.isMac) {\r\n            return `open -a \"${realAppPath}\" \"${projectPath}\"`;\r\n        }\r\n        if (commandType === exports.COMMAND.TERMINAL_OPEN) {\r\n            return windowsTerminal(realAppPath, projectPath);\r\n        }\r\n        if (realAppPath === 'start') {\r\n            return `start ${projectPath}`;\r\n        }\r\n        return `\"${realAppPath}\" \"${projectPath}\"`;\r\n    });\r\n}\r\n/**\r\n * @description: 设置项目专属编辑器\r\n * @param {string} projectPath 被选择的项目条目\r\n * @param {string} appPath 应用路径\r\n * @return {*}\r\n */\r\nfunction setProjectApp(projectPath, appPath) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const { cache: cacheList = [] } = yield readCache();\r\n        if (!appPath) {\r\n            throw new Error('111');\r\n        }\r\n        const targetProject = cacheList.find((item) => item.path === projectPath);\r\n        if (!targetProject) {\r\n            throw new Error('110');\r\n        }\r\n        // 更新项目编辑器\r\n        targetProject.idePath = appPath;\r\n        yield writeCache(cacheList);\r\n    });\r\n}\r\n/**\r\n * @description: 更新项目打开次数，用于排序\r\n * @param {string} projectPath 被选择的项目路径\r\n * @return {Promise<void>}\r\n */\r\nfunction updateHits(projectPath) {\r\n    return __awaiter(this, void 0, void 0, function* () {\r\n        const { cache: cacheList = [] } = yield readCache();\r\n        const targetProject = cacheList.find((item) => item.path === projectPath);\r\n        if (!targetProject) {\r\n            throw new Error('110');\r\n        }\r\n        targetProject.hits += 1;\r\n        yield writeCache(cacheList);\r\n    });\r\n}\n\nexports.ErrorCodeMessage = ErrorCodeMessage;\nexports.HOME_PATH = HOME_PATH;\nexports.clearCache = clearCache;\nexports.filterProject = filterProject;\nexports.filterWithCache = filterWithCache;\nexports.filterWithSearchResult = filterWithSearchResult;\nexports.findProject = findProject;\nexports.findSubmodules = findSubmodules;\nexports.getEnv = getEnv;\nexports.getOpenCommand = getOpenCommand;\nexports.ignoreFoldersReg = ignoreFoldersReg;\nexports.init = init;\nexports.isTxiki = isTxiki;\nexports.pathConvert = pathConvert;\nexports.pathNormalization = pathNormalization;\nexports.readCache = readCache;\nexports.readDir = readDir;\nexports.readFile = readFile;\nexports.setProjectApp = setProjectApp;\nexports.unlink = unlink;\nexports.updateHits = updateHits;\nexports.writeCache = writeCache;\nexports.writeFile = writeFile;\n"]}