@kubb/core 2.0.0-beta.12 → 2.0.0-beta.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-35FDNG5F.cjs +71 -0
- package/dist/chunk-35FDNG5F.cjs.map +1 -0
- package/dist/chunk-7CNPSL5M.js +85 -0
- package/dist/chunk-7CNPSL5M.js.map +1 -0
- package/dist/chunk-DKYWBKNH.js +18 -0
- package/dist/chunk-DKYWBKNH.js.map +1 -0
- package/dist/chunk-EZSRGYAY.js +128 -0
- package/dist/chunk-EZSRGYAY.js.map +1 -0
- package/dist/chunk-GBX7KRCX.cjs +162 -0
- package/dist/chunk-GBX7KRCX.cjs.map +1 -0
- package/dist/chunk-ICRPOCV4.cjs +2290 -0
- package/dist/chunk-ICRPOCV4.cjs.map +1 -0
- package/dist/chunk-LAS7UYTK.cjs +129 -0
- package/dist/chunk-LAS7UYTK.cjs.map +1 -0
- package/dist/chunk-LJHT3DNH.js +67 -0
- package/dist/chunk-LJHT3DNH.js.map +1 -0
- package/dist/chunk-MM42A6GN.cjs +91 -0
- package/dist/chunk-MM42A6GN.cjs.map +1 -0
- package/dist/chunk-SRGTC4FJ.js +129 -0
- package/dist/chunk-SRGTC4FJ.js.map +1 -0
- package/dist/chunk-ST7GHHSU.cjs +104 -0
- package/dist/chunk-ST7GHHSU.cjs.map +1 -0
- package/dist/chunk-U4C2WTCI.cjs +131 -0
- package/dist/chunk-U4C2WTCI.cjs.map +1 -0
- package/dist/chunk-UIQUKFF4.js +155 -0
- package/dist/chunk-UIQUKFF4.js.map +1 -0
- package/dist/chunk-WTSDXEWD.js +71 -0
- package/dist/chunk-WTSDXEWD.js.map +1 -0
- package/dist/fs.cjs +20 -2372
- package/dist/fs.cjs.map +1 -1
- package/dist/fs.d.cts +1 -1
- package/dist/fs.d.ts +1 -1
- package/dist/fs.js +4 -2373
- package/dist/fs.js.map +1 -1
- package/dist/index.cjs +930 -3261
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -15
- package/dist/index.d.ts +17 -15
- package/dist/index.js +208 -3490
- package/dist/index.js.map +1 -1
- package/dist/logger.cjs +19 -141
- package/dist/logger.cjs.map +1 -1
- package/dist/logger.d.cts +1 -0
- package/dist/logger.d.ts +1 -0
- package/dist/logger.js +3 -135
- package/dist/logger.js.map +1 -1
- package/dist/transformers.cjs +40 -208
- package/dist/transformers.cjs.map +1 -1
- package/dist/transformers.js +15 -201
- package/dist/transformers.js.map +1 -1
- package/dist/utils.cjs +22 -524
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +0 -1
- package/dist/utils.d.ts +0 -1
- package/dist/utils.js +11 -517
- package/dist/utils.js.map +1 -1
- package/dist/{write-46ytbnu9.d.cts → write-A6VgHkYA.d.cts} +4 -1
- package/dist/{write-46ytbnu9.d.ts → write-A6VgHkYA.d.ts} +4 -1
- package/package.json +9 -8
- package/src/BarrelManager.ts +3 -3
- package/src/FileManager.ts +66 -62
- package/src/PluginManager.ts +11 -18
- package/src/build.ts +57 -32
- package/src/fs/clean.ts +2 -2
- package/src/fs/read.ts +1 -0
- package/src/fs/write.ts +40 -24
- package/src/logger.ts +10 -0
- package/src/utils/FunctionParams.ts +2 -2
- package/src/utils/URLPath.ts +5 -5
- package/src/utils/index.ts +0 -2
- package/dist/Queue-2-6pMcCx.d.cts +0 -32
- package/dist/Queue-2-6pMcCx.d.ts +0 -32
- package/src/utils/Queue.ts +0 -110
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.0.1_@microsoft+api-extractor@7.38.3_ts-node@10.9.1_typescript@5.3.2/node_modules/tsup/assets/cjs_shims.js","../../../node_modules/.pnpm/universalify@2.0.1/node_modules/universalify/index.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/polyfills.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/legacy-streams.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/clone.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/graceful-fs.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/fs/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/mkdirs/utils.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/mkdirs/make-dir.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/mkdirs/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/path-exists/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/util/utimes.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/util/stat.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/copy.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/copy-sync.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/copy/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/remove/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/empty/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/file.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/link.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink-paths.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink-type.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/symlink.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/ensure/index.js","../../../node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/utils.js","../../../node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/jsonfile.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/output-file/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/output-json.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/output-json-sync.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/json/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/move.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/move-sync.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/move/index.js","../../../node_modules/.pnpm/fs-extra@11.2.0/node_modules/fs-extra/lib/index.js","../../../node_modules/.pnpm/lodash.isequal@4.5.0/node_modules/lodash.isequal/index.js","../src/index.ts","../src/build.ts","../../../node_modules/.pnpm/tinyrainbow@1.1.1/node_modules/tinyrainbow/dist/node.js","../../../node_modules/.pnpm/tinyrainbow@1.1.1/node_modules/tinyrainbow/dist/chunk-5WCZOS7T.js","../src/fs/clean.ts","../src/fs/read.ts","../src/utils/URLPath.ts","../src/transformers/index.ts","../src/transformers/casing.ts","../../../node_modules/.pnpm/change-case@5.2.0/node_modules/change-case/src/index.ts","../src/transformers/combineCodes.ts","../src/transformers/createJSDocBlockText.ts","../src/transformers/escape.ts","../src/transformers/indent.ts","../src/transformers/nameSorter.ts","../src/transformers/searchAndReplace.ts","../src/transformers/transformReservedWord.ts","../src/transformers/trim.ts","../src/config.ts","../src/FileManager.ts","../src/fs/write.ts","../src/utils/timeout.ts","../src/BarrelManager.ts","../src/utils/TreeNode.ts","../src/logger.ts","../src/PluginManager.ts","../src/utils/EventEmitter.ts","../src/utils/Queue.ts","../src/utils/uniqueName.ts","../src/errors.ts","../src/plugin.ts","../src/utils/cache.ts","../src/PromiseManager.ts","../src/utils/executeStrategies.ts","../src/Generator.ts","../src/PackageManager.ts","../../../node_modules/.pnpm/find-up@7.0.0/node_modules/find-up/index.js","../../../node_modules/.pnpm/locate-path@7.2.0/node_modules/locate-path/index.js","../../../node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js","../../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js","../../../node_modules/.pnpm/yocto-queue@1.0.0/node_modules/yocto-queue/index.js","../../../node_modules/.pnpm/unicorn-magic@0.1.0/node_modules/unicorn-magic/node.js","../../../node_modules/.pnpm/path-exists@5.0.0/node_modules/path-exists/index.js"],"names":["resolve","r","d","fs","path","read","err","err2","er","er2","self","queue","options","cb","data","src","dest","flags","go$readdir","mode","buffer","buffers","pathExists","destStat","require_copy","remove","emptyDir","exists","relative","require_utils","require_jsonfile","require_move","Buffer","Symbol","Uint8Array","Map","Promise","Set","WeakMap","othValue","isEqual","p","import_fs_extra","camelCase","pascalCase","b","extname","switcher","treeNode","KubbFile","name","crypto","_queue","factory","_options","pluginName","plugin","process","Queue","fileURLToPath","toPath","fsPromises","_cache","require"],"mappings":"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","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n typeof document === 'undefined'\n ? new URL('file:' + __filename).href\n : (document.currentScript && document.currentScript.src) ||\n new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","'use strict'\n\nexports.fromCallback = function (fn) {\n return Object.defineProperty(function (...args) {\n if (typeof args[args.length - 1] === 'function') fn.apply(this, args)\n else {\n return new Promise((resolve, reject) => {\n args.push((err, res) => (err != null) ? reject(err) : resolve(res))\n fn.apply(this, args)\n })\n }\n }, 'name', { value: fn.name })\n}\n\nexports.fromPromise = function (fn) {\n return Object.defineProperty(function (...args) {\n const cb = args[args.length - 1]\n if (typeof cb !== 'function') return fn.apply(this, args)\n else {\n args.pop()\n fn.apply(this, args).then(r => cb(null, r), cb)\n }\n }, 'name', { value: fn.name })\n}\n","var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n","var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n","'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n","var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n","'use strict'\n// This is adapted from https://github.com/normalize/mz\n// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors\nconst u = require('universalify').fromCallback\nconst fs = require('graceful-fs')\n\nconst api = [\n 'access',\n 'appendFile',\n 'chmod',\n 'chown',\n 'close',\n 'copyFile',\n 'fchmod',\n 'fchown',\n 'fdatasync',\n 'fstat',\n 'fsync',\n 'ftruncate',\n 'futimes',\n 'lchmod',\n 'lchown',\n 'link',\n 'lstat',\n 'mkdir',\n 'mkdtemp',\n 'open',\n 'opendir',\n 'readdir',\n 'readFile',\n 'readlink',\n 'realpath',\n 'rename',\n 'rm',\n 'rmdir',\n 'stat',\n 'symlink',\n 'truncate',\n 'unlink',\n 'utimes',\n 'writeFile'\n].filter(key => {\n // Some commands are not available on some systems. Ex:\n // fs.cp was added in Node.js v16.7.0\n // fs.lchown is not available on at least some Linux\n return typeof fs[key] === 'function'\n})\n\n// Export cloned fs:\nObject.assign(exports, fs)\n\n// Universalify async methods:\napi.forEach(method => {\n exports[method] = u(fs[method])\n})\n\n// We differ from mz/fs in that we still ship the old, broken, fs.exists()\n// since we are a drop-in replacement for the native module\nexports.exists = function (filename, callback) {\n if (typeof callback === 'function') {\n return fs.exists(filename, callback)\n }\n return new Promise(resolve => {\n return fs.exists(filename, resolve)\n })\n}\n\n// fs.read(), fs.write(), fs.readv(), & fs.writev() need special treatment due to multiple callback args\n\nexports.read = function (fd, buffer, offset, length, position, callback) {\n if (typeof callback === 'function') {\n return fs.read(fd, buffer, offset, length, position, callback)\n }\n return new Promise((resolve, reject) => {\n fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {\n if (err) return reject(err)\n resolve({ bytesRead, buffer })\n })\n })\n}\n\n// Function signature can be\n// fs.write(fd, buffer[, offset[, length[, position]]], callback)\n// OR\n// fs.write(fd, string[, position[, encoding]], callback)\n// We need to handle both cases, so we use ...args\nexports.write = function (fd, buffer, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.write(fd, buffer, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffer })\n })\n })\n}\n\n// Function signature is\n// s.readv(fd, buffers[, position], callback)\n// We need to handle the optional arg, so we use ...args\nexports.readv = function (fd, buffers, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.readv(fd, buffers, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.readv(fd, buffers, ...args, (err, bytesRead, buffers) => {\n if (err) return reject(err)\n resolve({ bytesRead, buffers })\n })\n })\n}\n\n// Function signature is\n// s.writev(fd, buffers[, position], callback)\n// We need to handle the optional arg, so we use ...args\nexports.writev = function (fd, buffers, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.writev(fd, buffers, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffers })\n })\n })\n}\n\n// fs.realpath.native sometimes not available if fs is monkey-patched\nif (typeof fs.realpath.native === 'function') {\n exports.realpath.native = u(fs.realpath.native)\n} else {\n process.emitWarning(\n 'fs.realpath.native is not a function. Is fs being monkey-patched?',\n 'Warning', 'fs-extra-WARN0003'\n )\n}\n","// Adapted from https://github.com/sindresorhus/make-dir\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict'\nconst path = require('path')\n\n// https://github.com/nodejs/node/issues/8987\n// https://github.com/libuv/libuv/pull/1088\nmodule.exports.checkPath = function checkPath (pth) {\n if (process.platform === 'win32') {\n const pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''))\n\n if (pathHasInvalidWinCharacters) {\n const error = new Error(`Path contains invalid characters: ${pth}`)\n error.code = 'EINVAL'\n throw error\n }\n }\n}\n","'use strict'\nconst fs = require('../fs')\nconst { checkPath } = require('./utils')\n\nconst getMode = options => {\n const defaults = { mode: 0o777 }\n if (typeof options === 'number') return options\n return ({ ...defaults, ...options }).mode\n}\n\nmodule.exports.makeDir = async (dir, options) => {\n checkPath(dir)\n\n return fs.mkdir(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n\nmodule.exports.makeDirSync = (dir, options) => {\n checkPath(dir)\n\n return fs.mkdirSync(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n","'use strict'\nconst u = require('universalify').fromPromise\nconst { makeDir: _makeDir, makeDirSync } = require('./make-dir')\nconst makeDir = u(_makeDir)\n\nmodule.exports = {\n mkdirs: makeDir,\n mkdirsSync: makeDirSync,\n // alias\n mkdirp: makeDir,\n mkdirpSync: makeDirSync,\n ensureDir: makeDir,\n ensureDirSync: makeDirSync\n}\n","'use strict'\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\n\nfunction pathExists (path) {\n return fs.access(path).then(() => true).catch(() => false)\n}\n\nmodule.exports = {\n pathExists: u(pathExists),\n pathExistsSync: fs.existsSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst u = require('universalify').fromPromise\n\nasync function utimesMillis (path, atime, mtime) {\n // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)\n const fd = await fs.open(path, 'r+')\n\n let closeErr = null\n\n try {\n await fs.futimes(fd, atime, mtime)\n } finally {\n try {\n await fs.close(fd)\n } catch (e) {\n closeErr = e\n }\n }\n\n if (closeErr) {\n throw closeErr\n }\n}\n\nfunction utimesMillisSync (path, atime, mtime) {\n const fd = fs.openSync(path, 'r+')\n fs.futimesSync(fd, atime, mtime)\n return fs.closeSync(fd)\n}\n\nmodule.exports = {\n utimesMillis: u(utimesMillis),\n utimesMillisSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst u = require('universalify').fromPromise\n\nfunction getStats (src, dest, opts) {\n const statFunc = opts.dereference\n ? (file) => fs.stat(file, { bigint: true })\n : (file) => fs.lstat(file, { bigint: true })\n return Promise.all([\n statFunc(src),\n statFunc(dest).catch(err => {\n if (err.code === 'ENOENT') return null\n throw err\n })\n ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))\n}\n\nfunction getStatsSync (src, dest, opts) {\n let destStat\n const statFunc = opts.dereference\n ? (file) => fs.statSync(file, { bigint: true })\n : (file) => fs.lstatSync(file, { bigint: true })\n const srcStat = statFunc(src)\n try {\n destStat = statFunc(dest)\n } catch (err) {\n if (err.code === 'ENOENT') return { srcStat, destStat: null }\n throw err\n }\n return { srcStat, destStat }\n}\n\nasync function checkPaths (src, dest, funcName, opts) {\n const { srcStat, destStat } = await getStats(src, dest, opts)\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return { srcStat, destStat, isChangingCase: true }\n }\n throw new Error('Source and destination must not be the same.')\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n\n return { srcStat, destStat }\n}\n\nfunction checkPathsSync (src, dest, funcName, opts) {\n const { srcStat, destStat } = getStatsSync(src, dest, opts)\n\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return { srcStat, destStat, isChangingCase: true }\n }\n throw new Error('Source and destination must not be the same.')\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return { srcStat, destStat }\n}\n\n// recursively check if dest parent is a subdirectory of src.\n// It works for all file types including symlinks since it\n// checks the src and dest inodes. It starts from the deepest\n// parent and stops once it reaches the src parent or the root path.\nasync function checkParentPaths (src, srcStat, dest, funcName) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return\n\n let destStat\n try {\n destStat = await fs.stat(destParent, { bigint: true })\n } catch (err) {\n if (err.code === 'ENOENT') return\n throw err\n }\n\n if (areIdentical(srcStat, destStat)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n\n return checkParentPaths(src, srcStat, destParent, funcName)\n}\n\nfunction checkParentPathsSync (src, srcStat, dest, funcName) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return\n let destStat\n try {\n destStat = fs.statSync(destParent, { bigint: true })\n } catch (err) {\n if (err.code === 'ENOENT') return\n throw err\n }\n if (areIdentical(srcStat, destStat)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return checkParentPathsSync(src, srcStat, destParent, funcName)\n}\n\nfunction areIdentical (srcStat, destStat) {\n return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev\n}\n\n// return true if dest is a subdir of src, otherwise false.\n// It only checks the path strings.\nfunction isSrcSubdir (src, dest) {\n const srcArr = path.resolve(src).split(path.sep).filter(i => i)\n const destArr = path.resolve(dest).split(path.sep).filter(i => i)\n return srcArr.every((cur, i) => destArr[i] === cur)\n}\n\nfunction errMsg (src, dest, funcName) {\n return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`\n}\n\nmodule.exports = {\n // checkPaths\n checkPaths: u(checkPaths),\n checkPathsSync,\n // checkParent\n checkParentPaths: u(checkParentPaths),\n checkParentPathsSync,\n // Misc\n isSrcSubdir,\n areIdentical\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst { mkdirs } = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst { utimesMillis } = require('../util/utimes')\nconst stat = require('../util/stat')\n\nasync function copy (src, dest, opts = {}) {\n if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n process.emitWarning(\n 'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n 'Warning', 'fs-extra-WARN0001'\n )\n }\n\n const { srcStat, destStat } = await stat.checkPaths(src, dest, 'copy', opts)\n\n await stat.checkParentPaths(src, srcStat, dest, 'copy')\n\n const include = await runFilter(src, dest, opts)\n\n if (!include) return\n\n // check if the parent of dest exists, and create it if it doesn't exist\n const destParent = path.dirname(dest)\n const dirExists = await pathExists(destParent)\n if (!dirExists) {\n await mkdirs(destParent)\n }\n\n await getStatsAndPerformCopy(destStat, src, dest, opts)\n}\n\nasync function runFilter (src, dest, opts) {\n if (!opts.filter) return true\n return opts.filter(src, dest)\n}\n\nasync function getStatsAndPerformCopy (destStat, src, dest, opts) {\n const statFn = opts.dereference ? fs.stat : fs.lstat\n const srcStat = await statFn(src)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n\n if (\n srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()\n ) return onFile(srcStat, destStat, src, dest, opts)\n\n if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n throw new Error(`Unknown file: ${src}`)\n}\n\nasync function onFile (srcStat, destStat, src, dest, opts) {\n if (!destStat) return copyFile(srcStat, src, dest, opts)\n\n if (opts.overwrite) {\n await fs.unlink(dest)\n return copyFile(srcStat, src, dest, opts)\n }\n if (opts.errorOnExist) {\n throw new Error(`'${dest}' already exists`)\n }\n}\n\nasync function copyFile (srcStat, src, dest, opts) {\n await fs.copyFile(src, dest)\n if (opts.preserveTimestamps) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcStat.mode)) {\n await makeFileWritable(dest, srcStat.mode)\n }\n\n // Set timestamps and mode correspondingly\n\n // Note that The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n const updatedSrcStat = await fs.stat(src)\n await utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n }\n\n return fs.chmod(dest, srcStat.mode)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n return fs.chmod(dest, srcMode | 0o200)\n}\n\nasync function onDir (srcStat, destStat, src, dest, opts) {\n // the dest directory might not exist, create it\n if (!destStat) {\n await fs.mkdir(dest)\n }\n\n const items = await fs.readdir(src)\n\n // loop through the files in the current directory to copy everything\n await Promise.all(items.map(async item => {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n\n // skip the item if it is matches by the filter function\n const include = await runFilter(srcItem, destItem, opts)\n if (!include) return\n\n const { destStat } = await stat.checkPaths(srcItem, destItem, 'copy', opts)\n\n // If the item is a copyable file, `getStatsAndPerformCopy` will copy it\n // If the item is a directory, `getStatsAndPerformCopy` will call `onDir` recursively\n return getStatsAndPerformCopy(destStat, srcItem, destItem, opts)\n }))\n\n if (!destStat) {\n await fs.chmod(dest, srcStat.mode)\n }\n}\n\nasync function onLink (destStat, src, dest, opts) {\n let resolvedSrc = await fs.readlink(src)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n if (!destStat) {\n return fs.symlink(resolvedSrc, dest)\n }\n\n let resolvedDest = null\n try {\n resolvedDest = await fs.readlink(dest)\n } catch (e) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (e.code === 'EINVAL' || e.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest)\n throw e\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n }\n\n // do not copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n }\n\n // copy the link\n await fs.unlink(dest)\n return fs.symlink(resolvedSrc, dest)\n}\n\nmodule.exports = copy\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdirsSync = require('../mkdirs').mkdirsSync\nconst utimesMillisSync = require('../util/utimes').utimesMillisSync\nconst stat = require('../util/stat')\n\nfunction copySync (src, dest, opts) {\n if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n opts = opts || {}\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n process.emitWarning(\n 'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n 'Warning', 'fs-extra-WARN0002'\n )\n }\n\n const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'copy')\n if (opts.filter && !opts.filter(src, dest)) return\n const destParent = path.dirname(dest)\n if (!fs.existsSync(destParent)) mkdirsSync(destParent)\n return getStats(destStat, src, dest, opts)\n}\n\nfunction getStats (destStat, src, dest, opts) {\n const statSync = opts.dereference ? fs.statSync : fs.lstatSync\n const srcStat = statSync(src)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n else if (srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)\n else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n throw new Error(`Unknown file: ${src}`)\n}\n\nfunction onFile (srcStat, destStat, src, dest, opts) {\n if (!destStat) return copyFile(srcStat, src, dest, opts)\n return mayCopyFile(srcStat, src, dest, opts)\n}\n\nfunction mayCopyFile (srcStat, src, dest, opts) {\n if (opts.overwrite) {\n fs.unlinkSync(dest)\n return copyFile(srcStat, src, dest, opts)\n } else if (opts.errorOnExist) {\n throw new Error(`'${dest}' already exists`)\n }\n}\n\nfunction copyFile (srcStat, src, dest, opts) {\n fs.copyFileSync(src, dest)\n if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)\n return setDestMode(dest, srcStat.mode)\n}\n\nfunction handleTimestamps (srcMode, src, dest) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)\n return setDestTimestamps(src, dest)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n return setDestMode(dest, srcMode | 0o200)\n}\n\nfunction setDestMode (dest, srcMode) {\n return fs.chmodSync(dest, srcMode)\n}\n\nfunction setDestTimestamps (src, dest) {\n // The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n const updatedSrcStat = fs.statSync(src)\n return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n}\n\nfunction onDir (srcStat, destStat, src, dest, opts) {\n if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)\n return copyDir(src, dest, opts)\n}\n\nfunction mkDirAndCopy (srcMode, src, dest, opts) {\n fs.mkdirSync(dest)\n copyDir(src, dest, opts)\n return setDestMode(dest, srcMode)\n}\n\nfunction copyDir (src, dest, opts) {\n fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))\n}\n\nfunction copyDirItem (item, src, dest, opts) {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n if (opts.filter && !opts.filter(srcItem, destItem)) return\n const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)\n return getStats(destStat, srcItem, destItem, opts)\n}\n\nfunction onLink (destStat, src, dest, opts) {\n let resolvedSrc = fs.readlinkSync(src)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n\n if (!destStat) {\n return fs.symlinkSync(resolvedSrc, dest)\n } else {\n let resolvedDest\n try {\n resolvedDest = fs.readlinkSync(dest)\n } catch (err) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)\n throw err\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n }\n\n // prevent copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n }\n return copyLink(resolvedSrc, dest)\n }\n}\n\nfunction copyLink (resolvedSrc, dest) {\n fs.unlinkSync(dest)\n return fs.symlinkSync(resolvedSrc, dest)\n}\n\nmodule.exports = copySync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nmodule.exports = {\n copy: u(require('./copy')),\n copySync: require('./copy-sync')\n}\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst u = require('universalify').fromCallback\n\nfunction remove (path, callback) {\n fs.rm(path, { recursive: true, force: true }, callback)\n}\n\nfunction removeSync (path) {\n fs.rmSync(path, { recursive: true, force: true })\n}\n\nmodule.exports = {\n remove: u(remove),\n removeSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst remove = require('../remove')\n\nconst emptyDir = u(async function emptyDir (dir) {\n let items\n try {\n items = await fs.readdir(dir)\n } catch {\n return mkdir.mkdirs(dir)\n }\n\n return Promise.all(items.map(item => remove.remove(path.join(dir, item))))\n})\n\nfunction emptyDirSync (dir) {\n let items\n try {\n items = fs.readdirSync(dir)\n } catch {\n return mkdir.mkdirsSync(dir)\n }\n\n items.forEach(item => {\n item = path.join(dir, item)\n remove.removeSync(item)\n })\n}\n\nmodule.exports = {\n emptyDirSync,\n emptydirSync: emptyDirSync,\n emptyDir,\n emptydir: emptyDir\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\nconst mkdir = require('../mkdirs')\n\nasync function createFile (file) {\n let stats\n try {\n stats = await fs.stat(file)\n } catch { }\n if (stats && stats.isFile()) return\n\n const dir = path.dirname(file)\n\n let dirStats = null\n try {\n dirStats = await fs.stat(dir)\n } catch (err) {\n // if the directory doesn't exist, make it\n if (err.code === 'ENOENT') {\n await mkdir.mkdirs(dir)\n await fs.writeFile(file, '')\n return\n } else {\n throw err\n }\n }\n\n if (dirStats.isDirectory()) {\n await fs.writeFile(file, '')\n } else {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n await fs.readdir(dir)\n }\n}\n\nfunction createFileSync (file) {\n let stats\n try {\n stats = fs.statSync(file)\n } catch { }\n if (stats && stats.isFile()) return\n\n const dir = path.dirname(file)\n try {\n if (!fs.statSync(dir).isDirectory()) {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n fs.readdirSync(dir)\n }\n } catch (err) {\n // If the stat call above failed because the directory doesn't exist, create it\n if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)\n else throw err\n }\n\n fs.writeFileSync(file, '')\n}\n\nmodule.exports = {\n createFile: u(createFile),\n createFileSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\nconst mkdir = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst { areIdentical } = require('../util/stat')\n\nasync function createLink (srcpath, dstpath) {\n let dstStat\n try {\n dstStat = await fs.lstat(dstpath)\n } catch {\n // ignore error\n }\n\n let srcStat\n try {\n srcStat = await fs.lstat(srcpath)\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n throw err\n }\n\n if (dstStat && areIdentical(srcStat, dstStat)) return\n\n const dir = path.dirname(dstpath)\n\n const dirExists = await pathExists(dir)\n\n if (!dirExists) {\n await mkdir.mkdirs(dir)\n }\n\n await fs.link(srcpath, dstpath)\n}\n\nfunction createLinkSync (srcpath, dstpath) {\n let dstStat\n try {\n dstStat = fs.lstatSync(dstpath)\n } catch {}\n\n try {\n const srcStat = fs.lstatSync(srcpath)\n if (dstStat && areIdentical(srcStat, dstStat)) return\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n throw err\n }\n\n const dir = path.dirname(dstpath)\n const dirExists = fs.existsSync(dir)\n if (dirExists) return fs.linkSync(srcpath, dstpath)\n mkdir.mkdirsSync(dir)\n\n return fs.linkSync(srcpath, dstpath)\n}\n\nmodule.exports = {\n createLink: u(createLink),\n createLinkSync\n}\n","'use strict'\n\nconst path = require('path')\nconst fs = require('../fs')\nconst { pathExists } = require('../path-exists')\n\nconst u = require('universalify').fromPromise\n\n/**\n * Function that returns two types of paths, one relative to symlink, and one\n * relative to the current working directory. Checks if path is absolute or\n * relative. If the path is relative, this function checks if the path is\n * relative to symlink or relative to current working directory. This is an\n * initiative to find a smarter `srcpath` to supply when building symlinks.\n * This allows you to determine which path to use out of one of three possible\n * types of source paths. The first is an absolute path. This is detected by\n * `path.isAbsolute()`. When an absolute path is provided, it is checked to\n * see if it exists. If it does it's used, if not an error is returned\n * (callback)/ thrown (sync). The other two options for `srcpath` are a\n * relative url. By default Node's `fs.symlink` works by creating a symlink\n * using `dstpath` and expects the `srcpath` to be relative to the newly\n * created symlink. If you provide a `srcpath` that does not exist on the file\n * system it results in a broken symlink. To minimize this, the function\n * checks to see if the 'relative to symlink' source file exists, and if it\n * does it will use it. If it does not, it checks if there's a file that\n * exists that is relative to the current working directory, if does its used.\n * This preserves the expectations of the original fs.symlink spec and adds\n * the ability to pass in `relative to current working direcotry` paths.\n */\n\nasync function symlinkPaths (srcpath, dstpath) {\n if (path.isAbsolute(srcpath)) {\n try {\n await fs.lstat(srcpath)\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n throw err\n }\n\n return {\n toCwd: srcpath,\n toDst: srcpath\n }\n }\n\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n\n const exists = await pathExists(relativeToDst)\n if (exists) {\n return {\n toCwd: relativeToDst,\n toDst: srcpath\n }\n }\n\n try {\n await fs.lstat(srcpath)\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n throw err\n }\n\n return {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n }\n}\n\nfunction symlinkPathsSync (srcpath, dstpath) {\n if (path.isAbsolute(srcpath)) {\n const exists = fs.existsSync(srcpath)\n if (!exists) throw new Error('absolute srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: srcpath\n }\n }\n\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n const exists = fs.existsSync(relativeToDst)\n if (exists) {\n return {\n toCwd: relativeToDst,\n toDst: srcpath\n }\n }\n\n const srcExists = fs.existsSync(srcpath)\n if (!srcExists) throw new Error('relative srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n }\n}\n\nmodule.exports = {\n symlinkPaths: u(symlinkPaths),\n symlinkPathsSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst u = require('universalify').fromPromise\n\nasync function symlinkType (srcpath, type) {\n if (type) return type\n\n let stats\n try {\n stats = await fs.lstat(srcpath)\n } catch {\n return 'file'\n }\n\n return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nfunction symlinkTypeSync (srcpath, type) {\n if (type) return type\n\n let stats\n try {\n stats = fs.lstatSync(srcpath)\n } catch {\n return 'file'\n }\n return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nmodule.exports = {\n symlinkType: u(symlinkType),\n symlinkTypeSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst path = require('path')\nconst fs = require('../fs')\n\nconst { mkdirs, mkdirsSync } = require('../mkdirs')\n\nconst { symlinkPaths, symlinkPathsSync } = require('./symlink-paths')\nconst { symlinkType, symlinkTypeSync } = require('./symlink-type')\n\nconst { pathExists } = require('../path-exists')\n\nconst { areIdentical } = require('../util/stat')\n\nasync function createSymlink (srcpath, dstpath, type) {\n let stats\n try {\n stats = await fs.lstat(dstpath)\n } catch { }\n\n if (stats && stats.isSymbolicLink()) {\n const [srcStat, dstStat] = await Promise.all([\n fs.stat(srcpath),\n fs.stat(dstpath)\n ])\n\n if (areIdentical(srcStat, dstStat)) return\n }\n\n const relative = await symlinkPaths(srcpath, dstpath)\n srcpath = relative.toDst\n const toType = await symlinkType(relative.toCwd, type)\n const dir = path.dirname(dstpath)\n\n if (!(await pathExists(dir))) {\n await mkdirs(dir)\n }\n\n return fs.symlink(srcpath, dstpath, toType)\n}\n\nfunction createSymlinkSync (srcpath, dstpath, type) {\n let stats\n try {\n stats = fs.lstatSync(dstpath)\n } catch { }\n if (stats && stats.isSymbolicLink()) {\n const srcStat = fs.statSync(srcpath)\n const dstStat = fs.statSync(dstpath)\n if (areIdentical(srcStat, dstStat)) return\n }\n\n const relative = symlinkPathsSync(srcpath, dstpath)\n srcpath = relative.toDst\n type = symlinkTypeSync(relative.toCwd, type)\n const dir = path.dirname(dstpath)\n const exists = fs.existsSync(dir)\n if (exists) return fs.symlinkSync(srcpath, dstpath, type)\n mkdirsSync(dir)\n return fs.symlinkSync(srcpath, dstpath, type)\n}\n\nmodule.exports = {\n createSymlink: u(createSymlink),\n createSymlinkSync\n}\n","'use strict'\n\nconst { createFile, createFileSync } = require('./file')\nconst { createLink, createLinkSync } = require('./link')\nconst { createSymlink, createSymlinkSync } = require('./symlink')\n\nmodule.exports = {\n // file\n createFile,\n createFileSync,\n ensureFile: createFile,\n ensureFileSync: createFileSync,\n // link\n createLink,\n createLinkSync,\n ensureLink: createLink,\n ensureLinkSync: createLinkSync,\n // symlink\n createSymlink,\n createSymlinkSync,\n ensureSymlink: createSymlink,\n ensureSymlinkSync: createSymlinkSync\n}\n","function stringify (obj, { EOL = '\\n', finalEOL = true, replacer = null, spaces } = {}) {\n const EOF = finalEOL ? EOL : ''\n const str = JSON.stringify(obj, replacer, spaces)\n\n return str.replace(/\\n/g, EOL) + EOF\n}\n\nfunction stripBom (content) {\n // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified\n if (Buffer.isBuffer(content)) content = content.toString('utf8')\n return content.replace(/^\\uFEFF/, '')\n}\n\nmodule.exports = { stringify, stripBom }\n","let _fs\ntry {\n _fs = require('graceful-fs')\n} catch (_) {\n _fs = require('fs')\n}\nconst universalify = require('universalify')\nconst { stringify, stripBom } = require('./utils')\n\nasync function _readFile (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n let data = await universalify.fromCallback(fs.readFile)(file, options)\n\n data = stripBom(data)\n\n let obj\n try {\n obj = JSON.parse(data, options ? options.reviver : null)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n\n return obj\n}\n\nconst readFile = universalify.fromPromise(_readFile)\n\nfunction readFileSync (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n try {\n let content = fs.readFileSync(file, options)\n content = stripBom(content)\n return JSON.parse(content, options.reviver)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n}\n\nasync function _writeFile (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n\n await universalify.fromCallback(fs.writeFile)(file, str, options)\n}\n\nconst writeFile = universalify.fromPromise(_writeFile)\n\nfunction writeFileSync (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n // not sure if fs.writeFileSync returns anything, but just in case\n return fs.writeFileSync(file, str, options)\n}\n\nconst jsonfile = {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync\n}\n\nmodule.exports = jsonfile\n","'use strict'\n\nconst jsonFile = require('jsonfile')\n\nmodule.exports = {\n // jsonfile exports\n readJson: jsonFile.readFile,\n readJsonSync: jsonFile.readFileSync,\n writeJson: jsonFile.writeFile,\n writeJsonSync: jsonFile.writeFileSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst pathExists = require('../path-exists').pathExists\n\nasync function outputFile (file, data, encoding = 'utf-8') {\n const dir = path.dirname(file)\n\n if (!(await pathExists(dir))) {\n await mkdir.mkdirs(dir)\n }\n\n return fs.writeFile(file, data, encoding)\n}\n\nfunction outputFileSync (file, ...args) {\n const dir = path.dirname(file)\n if (!fs.existsSync(dir)) {\n mkdir.mkdirsSync(dir)\n }\n\n fs.writeFileSync(file, ...args)\n}\n\nmodule.exports = {\n outputFile: u(outputFile),\n outputFileSync\n}\n","'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFile } = require('../output-file')\n\nasync function outputJson (file, data, options = {}) {\n const str = stringify(data, options)\n\n await outputFile(file, str, options)\n}\n\nmodule.exports = outputJson\n","'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFileSync } = require('../output-file')\n\nfunction outputJsonSync (file, data, options) {\n const str = stringify(data, options)\n\n outputFileSync(file, str, options)\n}\n\nmodule.exports = outputJsonSync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst jsonFile = require('./jsonfile')\n\njsonFile.outputJson = u(require('./output-json'))\njsonFile.outputJsonSync = require('./output-json-sync')\n// aliases\njsonFile.outputJSON = jsonFile.outputJson\njsonFile.outputJSONSync = jsonFile.outputJsonSync\njsonFile.writeJSON = jsonFile.writeJson\njsonFile.writeJSONSync = jsonFile.writeJsonSync\njsonFile.readJSON = jsonFile.readJson\njsonFile.readJSONSync = jsonFile.readJsonSync\n\nmodule.exports = jsonFile\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst { copy } = require('../copy')\nconst { remove } = require('../remove')\nconst { mkdirp } = require('../mkdirs')\nconst { pathExists } = require('../path-exists')\nconst stat = require('../util/stat')\n\nasync function move (src, dest, opts = {}) {\n const overwrite = opts.overwrite || opts.clobber || false\n\n const { srcStat, isChangingCase = false } = await stat.checkPaths(src, dest, 'move', opts)\n\n await stat.checkParentPaths(src, srcStat, dest, 'move')\n\n // If the parent of dest is not root, make sure it exists before proceeding\n const destParent = path.dirname(dest)\n const parsedParentPath = path.parse(destParent)\n if (parsedParentPath.root !== destParent) {\n await mkdirp(destParent)\n }\n\n return doRename(src, dest, overwrite, isChangingCase)\n}\n\nasync function doRename (src, dest, overwrite, isChangingCase) {\n if (!isChangingCase) {\n if (overwrite) {\n await remove(dest)\n } else if (await pathExists(dest)) {\n throw new Error('dest already exists.')\n }\n }\n\n try {\n // Try w/ rename first, and try copy + remove if EXDEV\n await fs.rename(src, dest)\n } catch (err) {\n if (err.code !== 'EXDEV') {\n throw err\n }\n await moveAcrossDevice(src, dest, overwrite)\n }\n}\n\nasync function moveAcrossDevice (src, dest, overwrite) {\n const opts = {\n overwrite,\n errorOnExist: true,\n preserveTimestamps: true\n }\n\n await copy(src, dest, opts)\n return remove(src)\n}\n\nmodule.exports = move\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst copySync = require('../copy').copySync\nconst removeSync = require('../remove').removeSync\nconst mkdirpSync = require('../mkdirs').mkdirpSync\nconst stat = require('../util/stat')\n\nfunction moveSync (src, dest, opts) {\n opts = opts || {}\n const overwrite = opts.overwrite || opts.clobber || false\n\n const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'move')\n if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))\n return doRename(src, dest, overwrite, isChangingCase)\n}\n\nfunction isParentRoot (dest) {\n const parent = path.dirname(dest)\n const parsedPath = path.parse(parent)\n return parsedPath.root === parent\n}\n\nfunction doRename (src, dest, overwrite, isChangingCase) {\n if (isChangingCase) return rename(src, dest, overwrite)\n if (overwrite) {\n removeSync(dest)\n return rename(src, dest, overwrite)\n }\n if (fs.existsSync(dest)) throw new Error('dest already exists.')\n return rename(src, dest, overwrite)\n}\n\nfunction rename (src, dest, overwrite) {\n try {\n fs.renameSync(src, dest)\n } catch (err) {\n if (err.code !== 'EXDEV') throw err\n return moveAcrossDevice(src, dest, overwrite)\n }\n}\n\nfunction moveAcrossDevice (src, dest, overwrite) {\n const opts = {\n overwrite,\n errorOnExist: true,\n preserveTimestamps: true\n }\n copySync(src, dest, opts)\n return removeSync(src)\n}\n\nmodule.exports = moveSync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nmodule.exports = {\n move: u(require('./move')),\n moveSync: require('./move-sync')\n}\n","'use strict'\n\nmodule.exports = {\n // Export promiseified graceful-fs:\n ...require('./fs'),\n // Export extra methods:\n ...require('./copy'),\n ...require('./empty'),\n ...require('./ensure'),\n ...require('./json'),\n ...require('./mkdirs'),\n ...require('./move'),\n ...require('./output-file'),\n ...require('./path-exists'),\n ...require('./remove')\n}\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","import { build } from './build.ts'\n\nimport type { ObjValueTuple, TupleToUnion } from '@kubb/types'\n\nexport { build, safeBuild } from './build.ts'\nexport { defineConfig, isInputPath } from './config.ts'\nexport { Warning } from './errors.ts'\nexport { FileManager, KubbFile } from './FileManager.ts'\nexport { Generator } from './Generator.ts'\nexport { PackageManager } from './PackageManager.ts'\n// dprint-ignore\nexport { createPlugin, pluginName as name, pluginName } from './plugin.ts'\nexport { PluginManager } from './PluginManager.ts'\nexport { PromiseManager } from './PromiseManager.ts'\nexport type * from './types.ts'\n\nexport interface _Register {}\nexport type Plugins = _Register\nexport type OptionsPlugins = { [K in keyof Plugins]: Plugins[K]['options'] }\n\nexport type OptionsOfPlugin<K extends keyof Plugins> = Plugins[K]['options']\n\nexport type PluginUnion = TupleToUnion<ObjValueTuple<OptionsPlugins>>\n\nexport type Plugin = keyof Plugins\n\nexport default build\n","import c from 'tinyrainbow'\n\nimport { clean } from './fs/clean.ts'\nimport { read } from './fs/read.ts'\nimport { URLPath } from './utils/URLPath.ts'\nimport { isInputPath } from './config.ts'\nimport { FileManager } from './FileManager.ts'\nimport { createLogger, LogLevel, randomCliColour } from './logger.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport { isPromise } from './PromiseManager.ts'\n\nimport type { KubbFile } from './FileManager.ts'\nimport type { Logger } from './logger.ts'\nimport type { KubbPlugin, PluginContext, PluginParameter, TransformResult } from './types.ts'\nimport type { QueueJob } from './utils/Queue.ts'\n\ntype BuildOptions = {\n config: PluginContext['config']\n /**\n * @default Logger without the spinner\n */\n logger?: Logger\n}\n\ntype BuildOutput = {\n files: FileManager['files']\n pluginManager: PluginManager\n /**\n * Only for safeBuild\n */\n error?: Error\n}\n\nasync function transformReducer(\n this: PluginContext,\n _previousCode: string,\n result: TransformResult | Promise<TransformResult>,\n _plugin: KubbPlugin,\n): Promise<string | null> {\n return result\n}\n\nasync function setup(options: BuildOptions): Promise<PluginManager> {\n const { config, logger = createLogger({ logLevel: LogLevel.silent }) } = options\n\n try {\n if (isInputPath(config) && !new URLPath(config.input.path).isURL) {\n await read(config.input.path)\n }\n } catch (e) {\n if (isInputPath(config)) {\n throw new Error(\n 'Cannot read file/URL defined in `input.path` or set with `kubb generate PATH` in the CLI of your Kubb config ' + c.dim(config.input.path),\n {\n cause: e,\n },\n )\n }\n }\n\n if (config.output.clean) {\n await clean(config.output.path)\n }\n\n const queueTask = async (file: KubbFile.File) => {\n const { path } = file\n\n let code: string | null = FileManager.getSource(file)\n\n const { result: loadedResult } = await pluginManager.hookFirst({\n hookName: 'load',\n parameters: [path],\n })\n if (loadedResult && isPromise(loadedResult)) {\n code = await loadedResult\n }\n if (loadedResult && !isPromise(loadedResult)) {\n code = loadedResult\n }\n\n if (code) {\n const transformedCode = await pluginManager.hookReduceArg0({\n hookName: 'transform',\n parameters: [code, path],\n reduce: transformReducer,\n })\n\n if (config.output.write || config.output.write === undefined) {\n if (file.meta?.pluginKey) {\n // run only for pluginKey defined in the meta of the file\n return pluginManager.hookForPlugin({\n pluginKey: file.meta?.pluginKey,\n hookName: 'writeFile',\n parameters: [transformedCode, path],\n })\n }\n\n return pluginManager.hookFirst({\n hookName: 'writeFile',\n parameters: [transformedCode, path],\n })\n }\n }\n }\n\n const pluginManager = new PluginManager(config, { logger, task: queueTask as QueueJob<KubbFile.ResolvedFile>, writeTimeout: 0 })\n\n pluginManager.on('execute', (executer) => {\n const { hookName, parameters, plugin } = executer\n\n if (hookName === 'writeFile' && logger.spinner) {\n const [code] = parameters as PluginParameter<'writeFile'>\n\n if (logger.logLevel === LogLevel.info) {\n logger.spinner.start(`💾 Writing`)\n }\n\n if (logger.logLevel === LogLevel.debug) {\n logger.info(`PluginKey ${c.dim(JSON.stringify(plugin.key))} \\nwith source\\n\\n${code}`)\n }\n }\n })\n\n pluginManager.on('executed', (executer) => {\n const { hookName, plugin, output, parameters } = executer\n const messsage = `${randomCliColour(plugin.name)} Executing ${hookName}`\n\n if (logger.logLevel === LogLevel.info && logger.spinner) {\n if (hookName === 'writeFile') {\n const [_code, path] = parameters as PluginParameter<'writeFile'>\n\n logger.spinner.suffixText = c.dim(path)\n } else {\n logger.spinner.suffixText = messsage\n }\n }\n\n if (logger.logLevel === LogLevel.debug) {\n logger.info(messsage)\n const logs = [\n parameters && `${c.bgWhite(`Parameters`)} ${randomCliColour(plugin.name)} ${hookName}`,\n JSON.stringify(parameters, undefined, 2),\n output && `${c.bgWhite('Output')} ${randomCliColour(plugin.name)} ${hookName}`,\n output,\n ].filter(Boolean)\n\n console.log(logs.join('\\n'))\n }\n })\n\n return pluginManager\n}\n\nexport async function build(options: BuildOptions): Promise<BuildOutput> {\n const pluginManager = await setup(options)\n\n const { fileManager, logger } = pluginManager\n\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [options.config],\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd' })\n\n if (!fileManager.isExecuting && logger.spinner) {\n logger.spinner.suffixText = ''\n logger.spinner.succeed(`💾 Writing completed`)\n }\n\n return { files: fileManager.files.map((file) => ({ ...file, source: FileManager.getSource(file) })), pluginManager }\n}\n\nexport async function safeBuild(options: BuildOptions): Promise<BuildOutput> {\n const pluginManager = await setup(options)\n\n const { fileManager, logger } = pluginManager\n\n try {\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [options.config],\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd' })\n\n if (!fileManager.isExecuting && logger.spinner) {\n logger.spinner.suffixText = ''\n logger.spinner.succeed(`💾 Writing completed`)\n }\n } catch (e) {\n return { files: fileManager.files.map((file) => ({ ...file, source: FileManager.getSource(file) })), pluginManager, error: e as Error }\n }\n\n return { files: fileManager.files.map((file) => ({ ...file, source: FileManager.getSource(file) })), pluginManager }\n}\n","import {\n a as t,\n b as e,\n c as o\n} from \"./chunk-5WCZOS7T.js\";\n\n// src/node.ts\nimport { isatty as r } from \"tty\";\nvar p = o(r(1));\nexport {\n o as createColors,\n p as default,\n t as getDefaultColors,\n e as isSupported\n};\n","// src/index.ts\nvar b = {\n reset: [0, 0],\n bold: [1, 22, \"\\x1B[22m\\x1B[1m\"],\n dim: [2, 22, \"\\x1B[22m\\x1B[2m\"],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n gray: [90, 39],\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49]\n}, C = Object.entries(b);\nfunction d(r) {\n return String(r);\n}\nd.open = \"\";\nd.close = \"\";\nvar m = /* @__PURE__ */ C.reduce(\n (r, [n]) => (r[n] = d, r),\n { isColorSupported: !1 }\n);\nfunction x() {\n return { ...m };\n}\nfunction p(r = !1) {\n let n = typeof process != \"undefined\" ? process : void 0, t = (n == null ? void 0 : n.env) || {}, a = (n == null ? void 0 : n.argv) || [];\n return !(\"NO_COLOR\" in t || a.includes(\"--no-color\")) && !(\"GITHUB_ACTIONS\" in t) && (\"FORCE_COLOR\" in t || a.includes(\"--color\") || (n == null ? void 0 : n.platform) === \"win32\" || r && t.TERM !== \"dumb\" || \"CI\" in t) || typeof window != \"undefined\" && !!window.chrome;\n}\nfunction w(r = !1) {\n let n = p(r), t = (e, o, c, i) => {\n let u = e.substring(0, i) + c, s = e.substring(i + o.length), l = s.indexOf(o);\n return ~l ? u + t(s, o, c, l) : u + s;\n }, a = (e, o, c = e) => {\n let i = (u) => {\n let s = String(u), l = s.indexOf(o, e.length);\n return ~l ? e + t(s, o, c, l) + o : e + s + o;\n };\n return i.open = e, i.close = o, i;\n }, g = {\n isColorSupported: n\n }, f = (e) => `\\x1B[${e}m`;\n for (let [e, o] of C)\n g[e] = n ? a(\n f(o[0]),\n f(o[1]),\n o[2]\n ) : d;\n return g;\n}\n\nexport {\n x as a,\n p as b,\n w as c\n};\n","import { remove } from 'fs-extra'\n\nexport async function clean(path: string): Promise<void> {\n return remove(path)\n}\n","import { basename, extname, relative } from 'node:path'\n\nimport fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nfunction slash(path: string, platform: 'windows' | 'mac' | 'linux' = 'linux') {\n const isWindowsPath = /^\\\\\\\\\\?\\\\/.test(path)\n\n if (['linux', 'mac'].includes(platform) && !isWindowsPath) {\n // linux and mac\n return path.replaceAll(/\\\\/g, '/').replace('../', '').trimEnd()\n }\n\n // windows\n return path.replaceAll(/\\\\/g, '/').replace('../', '').trimEnd()\n}\n\nexport function getRelativePath(rootDir?: string | null, filePath?: string | null, platform: 'windows' | 'mac' | 'linux' = 'linux'): string {\n if (!rootDir || !filePath) {\n throw new Error(`Root and file should be filled in when retrieving the relativePath, ${rootDir || ''} ${filePath || ''}`)\n }\n\n const relativePath = relative(rootDir, filePath)\n\n // On Windows, paths are separated with a \"\\\"\n // However, web browsers use \"/\" no matter the platform\n const slashedPath = slash(relativePath, platform)\n\n if (slashedPath.startsWith('../')) {\n return slashedPath.replace(basename(slashedPath), basename(slashedPath, extname(filePath)))\n }\n\n return `./${slashedPath.replace(basename(slashedPath), basename(slashedPath, extname(filePath)))}`\n}\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.readFile(path, { encoding: 'utf8' })\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.text()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.readFileSync(path, { encoding: 'utf8' })\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function read(path: string): Promise<string> {\n return reader(path)\n}\n\nexport function readSync(path: string): string {\n return syncReader(path)\n}\n","import transformers from '../transformers/index.ts'\n\nexport type URLObject = {\n url: string\n params?: Record<string, string>\n}\n\ntype ObjectOptions = {\n type?: 'path' | 'template'\n replacer?: (pathParam: string) => string\n stringify?: boolean\n}\n\nexport class URLPath {\n path: string\n\n constructor(path: string) {\n this.path = path\n\n return this\n }\n\n /**\n * Convert Swagger path to URLPath(syntax of Express)\n * @example /pet/{petId} => /pet/:petId\n */\n get URL(): string {\n return this.toURLPath()\n }\n get isURL(): boolean {\n try {\n const url = new URL(this.path)\n if (url?.href) {\n return true\n }\n } catch (error) {\n return false\n }\n return false\n }\n\n /**\n * Convert Swagger path to template literals/ template strings(camelcase)\n * @example /pet/{petId} => `/pet/${petId}`\n * @example /account/monetary-accountID => `/account/${monetaryAccountId}`\n * @example /account/userID => `/account/${userId}`\n */\n get template(): string {\n return this.toTemplateString()\n }\n get object(): URLObject | string {\n return this.toObject()\n }\n get params(): Record<string, string> | undefined {\n return this.getParams()\n }\n\n toObject({ type = 'path', replacer, stringify }: ObjectOptions = {}): URLObject | string {\n const object = {\n url: type === 'path' ? this.toURLPath() : this.toTemplateString(replacer),\n params: this.getParams(),\n }\n\n if (stringify) {\n if (type === 'template') {\n return JSON.stringify(object).replaceAll(\"'\", '').replaceAll(`\"`, '')\n }\n\n if (object.params) {\n return `{ url: '${object.url}', params: ${JSON.stringify(object.params).replaceAll(\"'\", '').replaceAll(`\"`, '')} }`\n }\n\n return `{ url: '${object.url}' }`\n }\n\n return object\n }\n\n /**\n * Convert Swagger path to template literals/ template strings(camelcase)\n * @example /pet/{petId} => `/pet/${petId}`\n * @example /account/monetary-accountID => `/account/${monetaryAccountId}`\n * @example /account/userID => `/account/${userId}`\n */\n toTemplateString(replacer?: (pathParam: string) => string): string {\n const regex = /{(\\w|-)*}/g\n const found = this.path.match(regex)\n let newPath = this.path.replaceAll('{', '${')\n\n if (found) {\n newPath = found.reduce((prev, curr) => {\n const pathParam = replacer\n ? replacer(transformers.camelCase(curr))\n : transformers.camelCase(curr)\n const replacement = `\\${${pathParam}}`\n\n return prev.replace(curr, replacement)\n }, this.path)\n }\n\n return `\\`${newPath}\\``\n }\n\n getParams(replacer?: (pathParam: string) => string): Record<string, string> | undefined {\n const regex = /{(\\w|-)*}/g\n const found = this.path.match(regex)\n\n if (!found) {\n return undefined\n }\n\n const params: Record<string, string> = {}\n found.forEach((item) => {\n item = item.replaceAll('{', '').replaceAll('}', '')\n\n const pathParam = replacer\n ? replacer(transformers.camelCase(item))\n : transformers.camelCase(item)\n\n params[pathParam] = pathParam\n }, this.path)\n\n return params\n }\n\n /**\n * Convert Swagger path to URLPath(syntax of Express)\n * @example /pet/{petId} => /pet/:petId\n */\n toURLPath(): string {\n return this.path.replaceAll('{', ':').replaceAll('}', '')\n }\n}\n","import { camelCase, pascalCase } from './casing.ts'\nimport { combineCodes } from './combineCodes.ts'\nimport { createJSDocBlockText } from './createJSDocBlockText.ts'\nimport { escape, jsStringEscape } from './escape.ts'\nimport { createIndent } from './indent.ts'\nimport { nameSorter } from './nameSorter.ts'\nimport { searchAndReplace } from './searchAndReplace.ts'\nimport { transformReservedWord } from './transformReservedWord.ts'\nimport { trim, trimExtName } from './trim.ts'\n\nexport { camelCase, pascalCase } from './casing.ts'\nexport { combineCodes } from './combineCodes.ts'\nexport { createJSDocBlockText } from './createJSDocBlockText.ts'\nexport { escape, jsStringEscape } from './escape.ts'\nexport { createIndent } from './indent.ts'\nexport { nameSorter } from './nameSorter.ts'\nexport { searchAndReplace } from './searchAndReplace.ts'\nexport { transformReservedWord } from './transformReservedWord.ts'\nexport { trim, trimExtName } from './trim.ts'\n\nexport default {\n combineCodes,\n escape,\n jsStringEscape,\n createIndent,\n transformReservedWord,\n nameSorter,\n searchAndReplace,\n trim,\n trimExtName,\n JSDoc: {\n createJSDocBlockText,\n },\n camelCase,\n pascalCase,\n} as const\n","import { camelCase as changeCaseCamel, pascalCase as changePascalCase } from 'change-case'\n\nexport function camelCase(text: string): string {\n return changeCaseCamel(text, { delimiter: '', mergeAmbiguousCharacters: true })\n}\n\nexport function pascalCase(text: string): string {\n return changePascalCase(text, { delimiter: '', mergeAmbiguousCharacters: true })\n}\n","// Regexps involved with splitting words in various case formats.\nconst SPLIT_LOWER_UPPER_RE = /([\\p{Ll}\\d])(\\p{Lu})/gu;\nconst SPLIT_UPPER_UPPER_RE = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu;\nconst SPLIT_NUMBER_LOWER_RE = /(\\d)(\\p{Ll})/gu;\nconst SPLIT_LETTER_NUMBER_RE = /(\\p{L})(\\d)/gu;\n\n// Regexp involved with stripping non-word characters from the result.\nconst DEFAULT_STRIP_REGEXP = /[^\\p{L}\\d]+/giu;\n\n// The replacement value for splits.\nconst SPLIT_REPLACE_VALUE = \"$1\\0$2\";\n\n// The default characters to keep after transforming case.\nconst DEFAULT_PREFIX_CHARACTERS = \"\";\n\n/**\n * Supported locale values. Use `false` to ignore locale.\n * Defaults to `undefined`, which uses the host environment.\n */\nexport type Locale = string[] | string | false | undefined;\n\n/**\n * Options used for converting strings to pascal/camel case.\n */\nexport interface PascalCaseOptions extends Options {\n mergeAmbiguousCharacters?: boolean;\n}\n\n/**\n * Options used for converting strings to any case.\n */\nexport interface Options extends SplitOptions {\n locale?: Locale;\n delimiter?: string;\n prefixCharacters?: string;\n}\n\n/**\n * Options used for splitting strings into word segments.\n */\nexport interface SplitOptions {\n separateNumbers?: boolean;\n}\n\n/**\n * Split any cased input strings into an array of words.\n */\nexport function split(input: string, options?: SplitOptions) {\n let result = input.trim();\n\n result = result\n .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)\n .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);\n\n if (options?.separateNumbers) {\n result = result\n .replace(SPLIT_NUMBER_LOWER_RE, SPLIT_REPLACE_VALUE)\n .replace(SPLIT_LETTER_NUMBER_RE, SPLIT_REPLACE_VALUE);\n }\n\n result = result.replace(DEFAULT_STRIP_REGEXP, \"\\0\");\n\n let start = 0;\n let end = result.length;\n\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\") start++;\n if (start === end) return [];\n while (result.charAt(end - 1) === \"\\0\") end--;\n\n return result.slice(start, end).split(/\\0/g);\n}\n\n/**\n * Convert a string to space separated lower case (`foo bar`).\n */\nexport function noCase(input: string, options?: Options) {\n const prefix = getPrefix(input, options?.prefixCharacters);\n return (\n prefix +\n split(input, options)\n .map(lowerFactory(options?.locale))\n .join(options?.delimiter ?? \" \")\n );\n}\n\n/**\n * Convert a string to camel case (`fooBar`).\n */\nexport function camelCase(input: string, options?: PascalCaseOptions) {\n const prefix = getPrefix(input, options?.prefixCharacters);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return (\n prefix +\n split(input, options)\n .map((word, index) => {\n if (index === 0) return lower(word);\n return transform(word, index);\n })\n .join(options?.delimiter ?? \"\")\n );\n}\n\n/**\n * Convert a string to pascal case (`FooBar`).\n */\nexport function pascalCase(input: string, options?: PascalCaseOptions) {\n const prefix = getPrefix(input, options?.prefixCharacters);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return (\n prefix +\n split(input, options)\n .map(transform)\n .join(options?.delimiter ?? \"\")\n );\n}\n\n/**\n * Convert a string to pascal snake case (`Foo_Bar`).\n */\nexport function pascalSnakeCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to capital case (`Foo Bar`).\n */\nexport function capitalCase(input: string, options?: Options) {\n const prefix = getPrefix(input, options?.prefixCharacters);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n return (\n prefix +\n split(input, options)\n .map(capitalCaseTransformFactory(lower, upper))\n .join(options?.delimiter ?? \" \")\n );\n}\n\n/**\n * Convert a string to constant case (`FOO_BAR`).\n */\nexport function constantCase(input: string, options?: Options) {\n const prefix = getPrefix(input, options?.prefixCharacters);\n return (\n prefix +\n split(input, options)\n .map(upperFactory(options?.locale))\n .join(options?.delimiter ?? \"_\")\n );\n}\n\n/**\n * Convert a string to dot case (`foo.bar`).\n */\nexport function dotCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \".\", ...options });\n}\n\n/**\n * Convert a string to kebab case (`foo-bar`).\n */\nexport function kebabCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"-\", ...options });\n}\n\n/**\n * Convert a string to path case (`foo/bar`).\n */\nexport function pathCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"/\", ...options });\n}\n\n/**\n * Convert a string to path case (`Foo bar`).\n */\nexport function sentenceCase(input: string, options?: Options) {\n const prefix = getPrefix(input, options?.prefixCharacters);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = capitalCaseTransformFactory(lower, upper);\n return (\n prefix +\n split(input, options)\n .map((word, index) => {\n if (index === 0) return transform(word);\n return lower(word);\n })\n .join(options?.delimiter ?? \" \")\n );\n}\n\n/**\n * Convert a string to snake case (`foo_bar`).\n */\nexport function snakeCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to header case (`Foo-Bar`).\n */\nexport function trainCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"-\", ...options });\n}\n\nfunction lowerFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toLowerCase()\n : (input: string) => input.toLocaleLowerCase(locale);\n}\n\nfunction upperFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toUpperCase()\n : (input: string) => input.toLocaleUpperCase(locale);\n}\n\nfunction capitalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string,\n) {\n return (word: string) => `${upper(word[0])}${lower(word.slice(1))}`;\n}\n\nfunction pascalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string,\n) {\n return (word: string, index: number) => {\n const char0 = word[0];\n const initial =\n index > 0 && char0 >= \"0\" && char0 <= \"9\" ? \"_\" + char0 : upper(char0);\n return initial + lower(word.slice(1));\n };\n}\n\nfunction getPrefix(\n input: string,\n prefixCharacters = DEFAULT_PREFIX_CHARACTERS,\n): string {\n let prefix = \"\";\n for (let i = 0; i < input.length; i++) {\n const char = input.charAt(i);\n if (prefixCharacters.includes(char)) {\n prefix += char;\n } else {\n break;\n }\n }\n return prefix;\n}\n","export function combineCodes(codes: string[]): string {\n return codes.join('\\n')\n}\n","export function createJSDocBlockText({ comments }: { comments: Array<string> }): string {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return ''\n }\n\n return `/**\\n * ${filteredComments.join('\\n * ')}\\n */`\n}\n","export function escape(text?: string): string {\n return text ? text.replaceAll('`', '\\\\`') : ''\n}\n\n/**\n * Escape all characters not included in SingleStringCharacters and DoubleStringCharacters on\n * @link http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\n * @link https://github.com/joliss/js-string-escape/blob/master/index.js\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function jsStringEscape(input: any): string {\n return `${input}`.replace(/[\"'\\\\\\n\\r\\u2028\\u2029]/g, (character) => {\n switch (character) {\n case '\"':\n case \"'\":\n case '\\\\':\n return '\\\\' + character\n // Four possible LineTerminator characters need to be escaped:\n case '\\n':\n return '\\\\n'\n case '\\r':\n return '\\\\r'\n case '\\u2028':\n return '\\\\u2028'\n case '\\u2029':\n return '\\\\u2029'\n default:\n return ''\n }\n })\n}\n","export function createIndent(size: number): string {\n return Array.from({ length: size + 1 }).join(' ')\n}\n","export function nameSorter<T extends { name: string }>(a: T, b: T): 0 | 1 | -1 {\n if (a.name < b.name) {\n return -1\n }\n if (a.name > b.name) {\n return 1\n }\n return 0\n}\n","type Options = {\n text: string\n replaceBy: string\n prefix?: string\n key: string\n searchValues?: (prefix: string, key: string) => Array<RegExp | string>\n}\n\nexport function searchAndReplace(options: Options): string {\n const { text, replaceBy, prefix = '', key } = options\n\n const searchValues = options.searchValues?.(prefix, key) || [\n `${prefix}[\"${key}\"]`,\n `${prefix}['${key}']`,\n `${prefix}[\\`${key}\\`]`,\n `${prefix}\"${key}\"`,\n `${prefix}'${key}'`,\n `${prefix}\\`${key}\\``,\n new RegExp(`${prefix}${key}`, 'g'),\n ]\n\n return searchValues.reduce((prev, searchValue) => {\n return prev.toString().replaceAll(searchValue, replaceBy)\n }, text) as string\n}\n","/**\n * @link https://github.com/jonschlinkert/reserved/blob/master/index.js\n */\nconst reservedWords = [\n 'abstract',\n 'arguments',\n 'boolean',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'class',\n 'const',\n 'continue',\n 'debugger',\n 'default',\n 'delete',\n 'do',\n 'double',\n 'else',\n 'enum',\n 'eval',\n 'export',\n 'extends',\n 'false',\n 'final',\n 'finally',\n 'float',\n 'for',\n 'function',\n 'goto',\n 'if',\n 'implements',\n 'import',\n 'in',\n 'instanceof',\n 'int',\n 'interface',\n 'let',\n 'long',\n 'native',\n 'new',\n 'null',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'return',\n 'short',\n 'static',\n 'super',\n 'switch',\n 'synchronized',\n 'this',\n 'throw',\n 'throws',\n 'transient',\n 'true',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'volatile',\n 'while',\n 'with',\n 'yield',\n\n 'Array',\n 'Date',\n 'eval',\n 'function',\n 'hasOwnProperty',\n 'Infinity',\n 'isFinite',\n 'isNaN',\n 'isPrototypeOf',\n 'length',\n 'Math',\n 'name',\n 'NaN',\n 'Number',\n 'Object',\n 'prototype',\n 'String',\n 'toString',\n 'undefined',\n 'valueOf',\n]\n\nexport function transformReservedWord(word: string): string {\n if ((word && reservedWords.includes(word)) || word?.match(/^\\d/)) {\n return `_${word}`\n }\n\n return word\n}\n","export function trim(text: string): string {\n return text.replaceAll(/\\n/g, '').trim()\n}\n\nexport function trimExtName(text: string): string {\n return text.replace(/\\.[^/.]+$/, '')\n}\n","import type { PossiblePromise } from '@kubb/types'\nimport type { CLIOptions, InputPath, KubbConfig, KubbUserConfig } from './types.ts'\n\n/**\n * Type helper to make it easier to use kubb.config.js\n * accepts a direct {@link KubbConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport function defineConfig(\n options:\n | PossiblePromise<KubbUserConfig | Array<KubbUserConfig>>\n | ((\n /** The options derived from the CLI flags */\n cliOptions: CLIOptions,\n ) => PossiblePromise<KubbUserConfig | Array<KubbUserConfig>>),\n): typeof options {\n return options\n}\n\nexport function isInputPath(result: KubbConfig | undefined): result is KubbConfig<InputPath> {\n return !!result && 'path' in (result as any)\n}\n","/* eslint-disable @typescript-eslint/no-namespace */\nimport crypto from 'node:crypto'\nimport { extname, resolve } from 'node:path'\n\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\n\nimport isEqual from 'lodash.isequal'\nimport { orderBy } from 'natural-orderby'\n\nimport { getRelativePath, read } from './fs/read.ts'\nimport { write } from './fs/write.ts'\nimport transformers from './transformers/index.ts'\nimport { timeout } from './utils/timeout.ts'\nimport { BarrelManager } from './BarrelManager.ts'\n\nimport type { GreaterThan } from '@kubb/types'\nimport type { BarrelManagerOptions } from './BarrelManager.ts'\nimport type { KubbPlugin } from './types.ts'\nimport type { Queue, QueueJob } from './utils/Queue.ts'\n\ntype BasePath<T extends string = string> = `${T}/`\n\nexport namespace KubbFile {\n export type Import = {\n /**\n * Import name to be used\n * @example [\"useState\"]\n * @example \"React\"\n */\n name:\n | string\n | Array<\n string | {\n propertyName: string\n name?: string\n }\n >\n /**\n * Path for the import\n * @xample '@kubb/core'\n */\n path: string\n /**\n * Add `type` prefix to the import, this will result in: `import type { Type } from './path'`.\n */\n isTypeOnly?: boolean\n /**\n * Add `* as` prefix to the import, this will result in: `import * as path from './path'`.\n */\n isNameSpace?: boolean\n /**\n * When root is set it will get the path with relative getRelativePath(root, path).\n */\n root?: string\n }\n\n export type Export = {\n /**\n * Export name to be used.\n * @example [\"useState\"]\n * @example \"React\"\n */\n name?: string | Array<string>\n /**\n * Path for the import.\n * @xample '@kubb/core'\n */\n path: string\n /**\n * Add `type` prefix to the export, this will result in: `export type { Type } from './path'`.\n */\n isTypeOnly?: boolean\n /**\n * Make it possible to override the name, this will result in: `export * as aliasName from './path'`.\n */\n asAlias?: boolean\n }\n\n export declare const dataTagSymbol: unique symbol\n export type DataTag<Type, Value> = Type & {\n [dataTagSymbol]: Value\n }\n\n export type UUID = string\n export type Source = string\n\n export type Extname = '.ts' | '.js' | '.tsx' | '.json' | `.${string}`\n\n export type Mode = 'file' | 'directory'\n\n /**\n * Name to be used to dynamicly create the baseName(based on input.path)\n * Based on UNIX basename\n * @link https://nodejs.org/api/path.html#pathbasenamepath-suffix\n */\n export type BaseName = `${string}${Extname}`\n\n /**\n * Path will be full qualified path to a specified file\n */\n export type Path = string\n\n export type AdvancedPath<T extends BaseName = BaseName> = `${BasePath}${T}`\n\n export type OptionalPath = Path | undefined | null\n\n export type FileMetaBase = {\n pluginKey?: KubbPlugin['key']\n }\n\n export type File<\n TMeta extends FileMetaBase = FileMetaBase,\n TBaseName extends BaseName = BaseName,\n > = {\n /**\n * Unique identifier to reuse later\n * @default crypto.randomUUID()\n */\n id?: string\n /**\n * Name to be used to create the path\n * Based on UNIX basename, `${name}.extName`\n * @link https://nodejs.org/api/path.html#pathbasenamepath-suffix\n */\n baseName: TBaseName\n /**\n * Path will be full qualified path to a specified file\n */\n path: AdvancedPath<TBaseName> | Path\n source: Source\n imports?: Import[]\n exports?: Export[]\n /**\n * This will call fileManager.add instead of fileManager.addOrAppend, adding the source when the files already exists\n * This will also ignore the combinefiles utils\n * @default `false`\n */\n override?: boolean\n /**\n * Use extra meta, this is getting used to generate the barrel/index files.\n */\n meta?: TMeta\n /**\n * This will override `process.env[key]` inside the `source`, see `getFileSource`.\n */\n env?: NodeJS.ProcessEnv\n }\n\n export type ResolvedFile<\n TMeta extends FileMetaBase = FileMetaBase,\n TBaseName extends BaseName = BaseName,\n > = KubbFile.File<TMeta, TBaseName> & {\n /**\n * @default crypto.randomUUID()\n */\n id: UUID\n /**\n * Contains the first part of the baseName, generated based on baseName\n * @link https://nodejs.org/api/path.html#pathformatpathobject\n */\n\n name: string\n }\n}\n\ntype CacheItem = KubbFile.ResolvedFile & {\n cancel?: () => void\n}\n\ntype AddResult<T extends Array<KubbFile.File>> = Promise<\n Awaited<GreaterThan<T['length'], 1> extends true ? Promise<KubbFile.ResolvedFile[]> : Promise<KubbFile.ResolvedFile>>\n>\n\ntype AddIndexesProps = {\n /**\n * Root based on root and output.path specified in the config\n */\n root: string\n /**\n * Output for plugin\n */\n output: {\n path: string\n exportAs?: string\n extName?: KubbFile.Extname\n exportType?: 'barrel' | false\n }\n options?: BarrelManagerOptions\n meta?: KubbFile.File['meta']\n}\n\ntype Options = {\n queue?: Queue\n task?: QueueJob<KubbFile.ResolvedFile>\n /**\n * Timeout between writes\n */\n timeout?: number\n}\n\nexport class FileManager {\n #cache: Map<KubbFile.Path, CacheItem[]> = new Map()\n\n #task?: QueueJob<KubbFile.ResolvedFile>\n #isWriting = false\n /**\n * Timeout between writes\n */\n #timeout: number = 0\n #queue?: Queue\n\n constructor(options?: Options) {\n if (options) {\n this.#task = options.task\n this.#queue = options.queue\n this.#timeout = options.timeout || 0\n }\n\n return this\n }\n\n get files(): Array<KubbFile.File> {\n const files: Array<KubbFile.File> = []\n this.#cache.forEach((item) => {\n files.push(...item.flat(1))\n })\n\n return files\n }\n get isExecuting(): boolean {\n return this.#queue?.hasJobs ?? this.#isWriting ?? false\n }\n\n #validate(file: KubbFile.File): void {\n if (!file.path.toLowerCase().endsWith(file.baseName.toLowerCase())) {\n throw new Error(`${file.path} should end with the baseName ${file.baseName}`)\n }\n }\n\n async add<T extends Array<KubbFile.File> = Array<KubbFile.File>>(\n ...files: T\n ): AddResult<T> {\n const promises = files.map((file) => {\n // this.#validate(file)\n\n if (file.override) {\n return this.#add(file)\n }\n\n return this.#addOrAppend(file)\n })\n\n const resolvedFiles = await Promise.all(promises)\n\n if (files.length > 1) {\n return resolvedFiles as unknown as AddResult<T>\n }\n\n return resolvedFiles[0] as unknown as AddResult<T>\n }\n\n async #add(file: KubbFile.File): Promise<KubbFile.ResolvedFile> {\n const controller = new AbortController()\n const resolvedFile: KubbFile.ResolvedFile = { id: crypto.randomUUID(), name: transformers.trimExtName(file.baseName), ...file }\n\n this.#cache.set(resolvedFile.path, [{ cancel: () => controller.abort(), ...resolvedFile }])\n\n if (this.#queue) {\n await this.#queue.run(\n async () => {\n return this.#task?.(resolvedFile)\n },\n { controller },\n )\n }\n\n return resolvedFile\n }\n\n async #addOrAppend(file: KubbFile.File): Promise<KubbFile.ResolvedFile> {\n const previousCaches = this.#cache.get(file.path)\n const previousCache = previousCaches ? previousCaches.at(previousCaches.length - 1) : undefined\n\n if (previousCache) {\n this.#cache.delete(previousCache.path)\n\n return this.#add({\n ...file,\n source: previousCache.source && file.source ? `${previousCache.source}\\n${file.source}` : '',\n imports: [...(previousCache.imports || []), ...(file.imports || [])],\n exports: [...(previousCache.exports || []), ...(file.exports || [])],\n env: { ...(previousCache.env || {}), ...(file.env || {}) },\n })\n }\n return this.#add(file)\n }\n\n async addIndexes({ root, output, meta, options = {} }: AddIndexesProps): Promise<Array<KubbFile.File> | undefined> {\n const { exportType = 'barrel' } = output\n\n if (!exportType) {\n return undefined\n }\n\n const exportPath = output.path.startsWith('./') ? output.path : `./${output.path}`\n const barrelManager = new BarrelManager({ extName: output.extName, ...options })\n const files = barrelManager.getIndexes(resolve(root, output.path))\n\n if (!files) {\n return undefined\n }\n\n const rootFile: KubbFile.File = {\n path: resolve(root, 'index.ts'),\n baseName: 'index.ts',\n source: '',\n exports: [\n output.exportAs\n ? {\n name: output.exportAs,\n asAlias: true,\n path: exportPath,\n isTypeOnly: options.isTypeOnly,\n }\n : {\n path: exportPath,\n isTypeOnly: options.isTypeOnly,\n },\n ],\n }\n\n await this.#addOrAppend({\n ...rootFile,\n meta: meta ? meta : rootFile.meta,\n })\n\n return await Promise.all(\n files.map((file) => {\n return this.#addOrAppend({\n ...file,\n meta: meta ? meta : file.meta,\n })\n }),\n )\n }\n\n getCacheByUUID(UUID: KubbFile.UUID): KubbFile.File | undefined {\n let cache: KubbFile.File | undefined\n\n this.#cache.forEach((files) => {\n cache = files.find((item) => item.id === UUID)\n })\n return cache\n }\n\n get(path: KubbFile.Path): Array<KubbFile.File> | undefined {\n return this.#cache.get(path)\n }\n\n remove(path: KubbFile.Path): void {\n const cacheItem = this.get(path)\n if (!cacheItem) {\n return\n }\n\n this.#cache.delete(path)\n }\n\n async write(...params: Parameters<typeof write>): Promise<string | undefined> {\n if (!this.#isWriting) {\n this.#isWriting = true\n\n const text = await write(...params)\n\n this.#isWriting = false\n return text\n }\n\n await timeout(this.#timeout)\n\n return this.write(...params)\n }\n\n async read(...params: Parameters<typeof read>): Promise<string> {\n return read(...params)\n }\n\n // statics\n\n static getSource<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(file: KubbFile.File<TMeta>): string {\n return getSource<TMeta>(file)\n }\n static getMode(path: string | undefined | null): KubbFile.Mode {\n if (!path) {\n return 'directory'\n }\n return extname(path) ? 'file' : 'directory'\n }\n\n static get extensions(): Array<KubbFile.Extname> {\n return ['.js', '.ts', '.tsx']\n }\n\n static isExtensionAllowed(baseName: string): boolean {\n return FileManager.extensions.some((extension) => baseName.endsWith(extension))\n }\n}\n\nexport function getSource<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(file: KubbFile.File<TMeta>): string {\n if (!FileManager.isExtensionAllowed(file.baseName)) {\n return file.source\n }\n\n const exports = file.exports ? combineExports(file.exports) : []\n const imports = file.imports ? combineImports(file.imports, exports, file.source) : []\n\n const importNodes = imports.filter(item => {\n // isImportNotNeeded\n // trim extName\n return item.path !== transformers.trimExtName(file.path)\n }).map((item) => {\n return factory.createImportDeclaration({\n name: item.name,\n path: item.root ? getRelativePath(item.root, item.path) : item.path,\n isTypeOnly: item.isTypeOnly,\n })\n })\n const exportNodes = exports.map((item) =>\n factory.createExportDeclaration({\n name: item.name,\n path: item.path,\n isTypeOnly: item.isTypeOnly,\n asAlias: item.asAlias,\n })\n )\n\n return [print([...importNodes, ...exportNodes]), getEnvSource(file.source, file.env)].join('\\n')\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n const combinedExports = orderBy(exports, [(v) => !v.isTypeOnly], ['asc']).reduce((prev, curr) => {\n const name = curr.name\n const prevByPath = prev.findLast((imp) => imp.path === curr.path)\n const prevByPathAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (export type ...)\n return prev\n }\n\n const uniquePrev = prev.findLast(\n (imp) => imp.path === curr.path && isEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias,\n )\n\n if (uniquePrev || (Array.isArray(name) && !name.length) || (prevByPath?.asAlias && !curr.asAlias)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name: Array.isArray(name) ? [...new Set(name)] : name,\n },\n ]\n }\n\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(curr.name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...curr.name])]\n\n return prev\n }\n\n return [...prev, curr]\n }, [] as Array<KubbFile.Export>)\n\n return orderBy(combinedExports, [(v) => !v.isTypeOnly, (v) => v.asAlias], ['desc', 'desc'])\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n const combinedImports = orderBy(imports, [(v) => !v.isTypeOnly], ['asc']).reduce((prev, curr) => {\n let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name\n\n const hasImportInSource = (importName: string) => {\n if (!source) {\n return true\n }\n\n const checker = (name?: string) => name && !!source.includes(name)\n return checker(importName) || exports.some(({ name }) => (Array.isArray(name) ? name.some(checker) : checker(name)))\n }\n\n if (Array.isArray(name)) {\n name = name.filter((item) => typeof item === 'string' ? hasImportInSource(item) : hasImportInSource(item.propertyName))\n }\n\n const prevByPath = prev.findLast((imp) => imp.path === curr.path && imp.isTypeOnly === curr.isTypeOnly)\n const uniquePrev = prev.findLast((imp) => imp.path === curr.path && isEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly)\n const prevByPathNameAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathNameAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (import type ...)\n return prev\n }\n\n if (uniquePrev || (Array.isArray(name) && !name.length)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name,\n },\n ]\n }\n\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...name])]\n\n return prev\n }\n\n if (!Array.isArray(name) && name && !hasImportInSource(name)) {\n return prev\n }\n\n return [...prev, curr]\n }, [] as Array<KubbFile.Import>)\n\n return orderBy(combinedImports, [(v) => !v.isTypeOnly], ['desc'])\n}\n\nfunction getEnvSource(source: string, env: NodeJS.ProcessEnv | undefined): string {\n if (!env) {\n return source\n }\n\n const keys = Object.keys(env)\n\n if (!keys.length) {\n return source\n }\n\n return keys.reduce((prev, key: string) => {\n const environmentValue = env[key]\n const replaceBy = environmentValue ? `'${environmentValue.replaceAll('\"', '')?.replaceAll(\"'\", '')}'` : 'undefined'\n\n if (key.toUpperCase() !== key) {\n throw new TypeError(`Environment should be in upperCase for ${key}`)\n }\n\n if (typeof replaceBy === 'string') {\n prev = transformers.searchAndReplace({ text: prev.replaceAll(`process.env.${key}`, replaceBy), replaceBy, prefix: 'process.env', key })\n // removes `declare const ...`\n prev = transformers.searchAndReplace({ text: prev.replaceAll(new RegExp(`(declare const).*\\n`, 'ig'), ''), replaceBy, key })\n }\n\n return prev\n }, source)\n}\n","import { dirname, resolve } from 'node:path'\n\nimport fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nasync function saveCreateDirectory(path: string): Promise<void> {\n // resolve the full path and get just the directory, ignoring the file and extension\n const passedPath = dirname(resolve(path))\n // make the directory, recursively. Theoretically, if every directory in the path exists, this won't do anything.\n await fs.mkdir(passedPath, { recursive: true })\n}\n\nconst writer = switcher(\n {\n node: async (path: string, data: string) => {\n try {\n await fs.stat(resolve(path))\n const oldContent = await fs.readFile(resolve(path), { encoding: 'utf-8' })\n if (oldContent?.toString() === data?.toString()) {\n return\n }\n } catch (_err) {\n /* empty */\n }\n\n await saveCreateDirectory(path)\n await fs.writeFile(resolve(path), data, { encoding: 'utf-8' })\n\n const savedData = await fs.readFile(resolve(path), { encoding: 'utf-8' })\n\n if (savedData?.toString() !== data?.toString()) {\n throw new Error(`Sanity check failed for ${path}\\n\\nData[${data.length}]:\\n${data}\\n\\nSaved[${savedData.length}]:\\n${savedData}\\n`)\n }\n\n return savedData\n },\n bun: async (path: string, data: string) => {\n try {\n await saveCreateDirectory(path)\n await Bun.write(resolve(path), data)\n\n const file = Bun.file(resolve(path))\n const savedData = await file.text()\n\n if (savedData?.toString() !== data?.toString()) {\n throw new Error(`Sanity check failed for ${path}\\n\\nData[${data.length}]:\\n${data}\\n\\nSaved[${savedData.length}]:\\n${savedData}\\n`)\n }\n\n return savedData\n } catch (e) {\n console.log(e, resolve(path))\n }\n },\n },\n 'node',\n)\n\nexport async function write(data: string, path: string): Promise<string | undefined> {\n if (data.trim() === '') {\n return undefined\n }\n return writer(path, data.trim())\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n","import path from 'path'\n\nimport transformers from './transformers/index.ts'\nimport { TreeNode } from './utils/TreeNode.ts'\n\nimport type { DirectoryTreeOptions } from 'directory-tree'\nimport type { KubbFile } from './FileManager.ts'\nimport type { KubbPlugin } from './index.ts'\n\ntype FileMeta = {\n pluginKey?: KubbPlugin['key']\n treeNode: TreeNode\n}\n\nexport type BarrelManagerOptions = {\n treeNode?: DirectoryTreeOptions\n isTypeOnly?: boolean\n /**\n * Add .ts or .js\n */\n extName?: KubbFile.Extname\n}\n\nexport class BarrelManager {\n #options: BarrelManagerOptions\n\n constructor(options: BarrelManagerOptions = {}) {\n this.#options = options\n\n return this\n }\n\n getIndexes(\n pathToBuild: string,\n ): Array<KubbFile.File<FileMeta>> | null {\n const { treeNode = {}, isTypeOnly, extName } = this.#options\n const tree = TreeNode.build(pathToBuild, treeNode)\n\n if (!tree) {\n return null\n }\n\n const fileReducer = (files: Array<KubbFile.File<FileMeta>>, treeNode: TreeNode) => {\n if (!treeNode.children) {\n return []\n }\n\n if (treeNode.children.length > 1) {\n const indexPath: KubbFile.Path = path.resolve(treeNode.data.path, 'index.ts')\n\n const exports: KubbFile.Export[] = treeNode.children\n .filter(Boolean)\n .map((file) => {\n const importPath: string = file.data.type === 'directory' ? `./${file.data.name}/index` : `./${transformers.trimExtName(file.data.name)}`\n\n if (importPath.endsWith('index') && file.data.type === 'file') {\n return undefined\n }\n\n return {\n path: extName ? `${importPath}${extName}` : importPath,\n isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n\n files.push({\n path: indexPath,\n baseName: 'index.ts',\n source: '',\n exports,\n meta: {\n treeNode,\n },\n })\n } else if (treeNode.children.length === 1) {\n const [treeNodeChild] = treeNode.children as [TreeNode]\n\n const indexPath = path.resolve(treeNode.data.path, 'index.ts')\n const importPath = treeNodeChild.data.type === 'directory'\n ? `./${treeNodeChild.data.name}/index`\n : `./${transformers.trimExtName(treeNodeChild.data.name)}`\n\n const exports = [\n {\n path: extName\n ? `${importPath}${extName}`\n : importPath,\n isTypeOnly,\n },\n ]\n\n files.push({\n path: indexPath,\n baseName: 'index.ts',\n source: '',\n exports,\n meta: {\n treeNode,\n },\n })\n }\n\n treeNode.children.forEach((childItem) => {\n fileReducer(files, childItem)\n })\n\n return files\n }\n\n return fileReducer([], tree).reverse()\n }\n}\n","import dirTree from 'directory-tree'\n\nimport { FileManager } from '../FileManager.ts'\n\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\nimport type { KubbFile } from '../FileManager.ts'\n\nexport type TreeNodeOptions = DirectoryTreeOptions\n\ntype BarrelData = { type: KubbFile.Mode; path: KubbFile.Path; name: string }\n\nexport class TreeNode<T = BarrelData> {\n public data: T\n\n public parent?: TreeNode<T>\n\n public children: Array<TreeNode<T>> = []\n\n constructor(data: T, parent?: TreeNode<T>) {\n this.data = data\n this.parent = parent\n return this\n }\n\n addChild(data: T): TreeNode<T> {\n const child = new TreeNode(data, this)\n if (!this.children) {\n this.children = []\n }\n this.children.push(child)\n return child\n }\n\n find(data?: T): TreeNode<T> | null {\n if (!data) {\n return null\n }\n\n if (data === this.data) {\n return this\n }\n\n if (this.children?.length) {\n for (let i = 0, { length } = this.children, target: TreeNode<T> | null = null; i < length; i++) {\n target = this.children[i]!.find(data)\n if (target) {\n return target\n }\n }\n }\n\n return null\n }\n\n get leaves(): TreeNode<T>[] {\n if (!this.children || this.children.length === 0) {\n // this is a leaf\n return [this]\n }\n\n // if not a leaf, return all children's leaves recursively\n const leaves: TreeNode<T>[] = []\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n // eslint-disable-next-line prefer-spread\n leaves.push.apply(leaves, this.children[i]!.leaves)\n }\n }\n return leaves\n }\n\n get root(): TreeNode<T> {\n if (!this.parent) {\n return this\n }\n return this.parent.root\n }\n\n forEach(callback: (treeNode: TreeNode<T>) => void): this {\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n // run this node through function\n callback(this)\n\n // do the same for all children\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n this.children[i]!.forEach(callback)\n }\n }\n\n return this\n }\n\n public static build(path: string, options: TreeNodeOptions = {}): TreeNode | null {\n try {\n const exclude = Array.isArray(options.exclude) ? options.exclude : [options.exclude].filter(Boolean)\n const filteredTree = dirTree(path, { extensions: options.extensions, exclude: [/node_modules/, ...exclude] })\n\n if (!filteredTree) {\n return null\n }\n\n const treeNode = new TreeNode({ name: filteredTree.name, path: filteredTree.path, type: filteredTree.type || FileManager.getMode(filteredTree.path) })\n\n const recurse = (node: typeof treeNode, item: DirectoryTree) => {\n const subNode = node.addChild({ name: item.name, path: item.path, type: item.type || FileManager.getMode(item.path) })\n\n if (item.children?.length) {\n item.children?.forEach((child) => {\n recurse(subNode, child)\n })\n }\n }\n\n filteredTree.children?.forEach((child) => recurse(treeNode, child))\n\n return treeNode\n } catch (e) {\n throw new Error('Something went wrong with creating index files with the TreehNode class', { cause: e })\n }\n }\n}\n","import seedrandom from 'seedrandom'\nimport c, { createColors } from 'tinyrainbow'\n\nimport type { Ora } from 'ora'\nimport type { Formatter } from 'tinyrainbow'\n\nexport const LogLevel = {\n silent: 'silent',\n info: 'info',\n debug: 'debug',\n} as const\n\nexport type LogLevel = keyof typeof LogLevel\n\nexport type Logger = {\n /**\n * Optional config name to show in CLI output\n */\n name?: string\n logLevel: LogLevel\n log: (message: string | null) => void\n error: (message: string | null) => void\n info: (message: string | null) => void\n warn: (message: string | null) => void\n spinner?: Ora\n logs: string[]\n}\n\ntype Props = {\n name?: string\n logLevel: LogLevel\n spinner?: Ora\n}\n\nexport function createLogger({ logLevel, name, spinner }: Props): Logger {\n const logs: string[] = []\n const log: Logger['log'] = (message) => {\n if (message && spinner) {\n spinner.text = message\n logs.push(message)\n }\n }\n\n const error: Logger['error'] = (message) => {\n if (message) {\n throw new Error(message || 'Something went wrong')\n }\n }\n\n const warn: Logger['warn'] = (message) => {\n if (message && spinner) {\n spinner.warn(c.yellow(message))\n logs.push(message)\n }\n }\n\n const info: Logger['warn'] = (message) => {\n if (message && spinner && logLevel !== LogLevel.silent) {\n spinner.info(message)\n logs.push(message)\n }\n }\n\n const logger: Logger = {\n name,\n logLevel,\n log,\n error,\n warn,\n info,\n spinner,\n logs,\n }\n\n return logger\n}\n\nconst defaultColours = ['black', 'blue', 'darkBlue', 'cyan', 'gray', 'green', 'darkGreen', 'magenta', 'red', 'darkRed', 'yellow', 'darkYellow'] as const\n\nexport function randomColour(text?: string, colours = defaultColours): string {\n if (!text) {\n return 'white'\n }\n\n const random = seedrandom(text)\n const colour = colours.at(Math.floor(random() * colours.length)) || 'white'\n\n return colour\n}\n\nexport function randomCliColour(text?: string, colors = defaultColours): string {\n const colours = createColors(true)\n\n if (!text) {\n return colours.white(text)\n }\n\n const colour = randomColour(text, colors)\n const isDark = colour.includes('dark')\n const key = colour.replace('dark', '').toLowerCase() as keyof typeof colours\n const formatter: Formatter = colours[key] as Formatter\n\n if (isDark) {\n return c.bold(formatter(text))\n }\n\n if (typeof formatter !== 'function') {\n throw new Error('Formatter for picoColor is not of type function/Formatter')\n }\n return formatter(text)\n}\n","/* eslint-disable @typescript-eslint/ban-types, @typescript-eslint/no-unsafe-argument */\n\nimport { transformReservedWord } from './transformers/transformReservedWord.ts'\nimport { EventEmitter } from './utils/EventEmitter.ts'\nimport { Queue } from './utils/Queue.ts'\nimport { setUniqueName } from './utils/uniqueName.ts'\nimport { ValidationPluginError } from './errors.ts'\nimport { FileManager } from './FileManager.ts'\nimport { LogLevel } from './logger.ts'\nimport { definePlugin as defineCorePlugin } from './plugin.ts'\nimport { isPromise, isPromiseRejectedResult } from './PromiseManager.ts'\nimport { PromiseManager } from './PromiseManager.ts'\n\nimport type { PossiblePromise } from '@kubb/types'\nimport type { KubbFile } from './FileManager.ts'\nimport type { Logger } from './logger.ts'\nimport type { CorePluginOptions } from './plugin.ts'\nimport type {\n GetPluginFactoryOptions,\n KubbConfig,\n KubbPlugin,\n KubbPluginWithLifeCycle,\n KubbUserPlugin,\n KubbUserPluginWithLifeCycle,\n PluginFactoryOptions,\n PluginLifecycle,\n PluginLifecycleHooks,\n PluginParameter,\n ResolveNameParams,\n ResolvePathParams,\n} from './types.ts'\nimport type { QueueJob } from './utils/Queue.ts'\n\ntype RequiredPluginLifecycle = Required<PluginLifecycle>\n\n/**\n * Get the type of the first argument in a function.\n * @example Arg0<(a: string, b: number) => void> -> string\n */\ntype Argument0<H extends keyof PluginLifecycle> = Parameters<RequiredPluginLifecycle[H]>[0]\n\ntype Strategy = 'hookFirst' | 'hookForPlugin' | 'hookParallel' | 'hookReduceArg0' | 'hookSeq'\n\ntype Executer<H extends PluginLifecycleHooks = PluginLifecycleHooks> = {\n strategy: Strategy\n hookName: H\n plugin: KubbPlugin\n parameters?: unknown[] | undefined\n output?: unknown\n}\n\ntype ParseResult<H extends PluginLifecycleHooks> = RequiredPluginLifecycle[H]\n\ntype SafeParseResult<H extends PluginLifecycleHooks, Result = ReturnType<ParseResult<H>>> = {\n result: Result\n plugin: KubbPlugin\n}\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\ntype Options = {\n logger: Logger\n\n /**\n * Task for the FileManager\n */\n task: QueueJob<KubbFile.ResolvedFile>\n /**\n * Timeout between writes in the FileManager\n */\n writeTimeout?: number\n}\n\ntype Events = {\n execute: [executer: Executer]\n executed: [executer: Executer]\n error: [error: Error]\n}\n\nexport class PluginManager {\n readonly plugins: KubbPluginWithLifeCycle[]\n readonly fileManager: FileManager\n readonly events: EventEmitter<Events> = new EventEmitter()\n\n readonly queue: Queue\n readonly config: KubbConfig\n\n readonly executed: Array<Executer> = []\n readonly logger: Logger\n readonly #core: KubbPlugin<CorePluginOptions>\n\n readonly #usedPluginNames: Record<string, number> = {}\n readonly #promiseManager: PromiseManager\n\n constructor(config: KubbConfig, options: Options) {\n this.config = config\n this.logger = options.logger\n this.queue = new Queue(100, this.logger.logLevel === LogLevel.debug)\n this.fileManager = new FileManager({ task: options.task, queue: this.queue, timeout: options.writeTimeout })\n this.#promiseManager = new PromiseManager({ nullCheck: (state: SafeParseResult<'resolveName'> | null) => !!state?.result })\n\n const plugins = config.plugins || []\n\n const core = defineCorePlugin({\n config,\n logger: this.logger,\n pluginManager: this,\n fileManager: this.fileManager,\n resolvePath: this.resolvePath.bind(this),\n resolveName: this.resolveName.bind(this),\n getPlugins: this.#getSortedPlugins.bind(this),\n })\n\n // call core.api.call with empty context so we can transform `api()` to `api: {}`\n this.#core = this.#parse(core as unknown as KubbUserPlugin, this as any, core.api.call(null as any)) as KubbPlugin<CorePluginOptions>\n\n this.plugins = [this.#core, ...plugins].map((plugin) => {\n return this.#parse(plugin as KubbUserPlugin, this, this.#core.api)\n })\n\n return this\n }\n\n resolvePath = <TOptions = object>(params: ResolvePathParams<TOptions>): KubbFile.OptionalPath => {\n if (params.pluginKey) {\n const paths = this.hookForPluginSync({\n pluginKey: params.pluginKey,\n hookName: 'resolvePath',\n parameters: [params.baseName, params.directory, params.options as object],\n })\n\n if (paths && paths?.length > 1 && this.logger.logLevel === LogLevel.debug) {\n this.logger.warn(\n `Cannot return a path where the 'pluginKey' ${params.pluginKey ? JSON.stringify(params.pluginKey) : '\"'} is not unique enough\\n\\nPaths: ${\n JSON.stringify(paths, undefined, 2)\n }\\n\\nFalling back on the first item.\\n`,\n )\n }\n\n return paths?.at(0)\n }\n return this.hookFirstSync({\n hookName: 'resolvePath',\n parameters: [params.baseName, params.directory, params.options as object],\n }).result\n }\n resolveName = (params: ResolveNameParams): string => {\n if (params.pluginKey) {\n const names = this.hookForPluginSync({\n pluginKey: params.pluginKey,\n hookName: 'resolveName',\n parameters: [params.name, params.type],\n })\n\n if (names && names?.length > 1 && this.logger.logLevel === LogLevel.debug) {\n this.logger.warn(\n `Cannot return a name where the 'pluginKey' ${params.pluginKey ? JSON.stringify(params.pluginKey) : '\"'} is not unique enough\\n\\nNames: ${\n JSON.stringify(names, undefined, 2)\n }\\n\\nFalling back on the first item.\\n`,\n )\n }\n\n return transformReservedWord(names?.at(0) || params.name)\n }\n\n const name = this.hookFirstSync({\n hookName: 'resolveName',\n parameters: [params.name, params.type],\n }).result\n\n return transformReservedWord(name)\n }\n\n /**\n * Instead of calling `pluginManager.events.on` you can use `pluginManager.on`. This one also has better types.\n */\n on<TEventName extends keyof Events & string>(eventName: TEventName, handler: (...eventArg: Events[TEventName]) => void): void {\n this.events.on(eventName, handler as any)\n }\n\n /**\n * Run a specific hookName for plugin x.\n */\n hookForPlugin<H extends PluginLifecycleHooks>({\n pluginKey,\n hookName,\n parameters,\n }: {\n pluginKey: KubbPlugin['key']\n hookName: H\n parameters: PluginParameter<H>\n }): Promise<Array<ReturnType<ParseResult<H>> | null>> | null {\n const plugins = this.getPluginsByKey(hookName, pluginKey)\n\n const promises = plugins\n .map((plugin) => {\n return this.#execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n })\n .filter(Boolean)\n\n return Promise.all(promises)\n }\n /**\n * Run a specific hookName for plugin x.\n */\n\n hookForPluginSync<H extends PluginLifecycleHooks>({\n pluginKey,\n hookName,\n parameters,\n }: {\n pluginKey: KubbPlugin['key']\n hookName: H\n parameters: PluginParameter<H>\n }): Array<ReturnType<ParseResult<H>>> | null {\n const plugins = this.getPluginsByKey(hookName, pluginKey)\n\n return plugins\n .map((plugin) => {\n return this.#executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n })\n .filter(Boolean)\n }\n\n /**\n * First non-null result stops and will return it's value.\n */\n async hookFirst<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n skipped?: ReadonlySet<KubbPlugin> | null\n }): Promise<SafeParseResult<H>> {\n const promises = this.#getSortedPlugins().filter(plugin => {\n return skipped ? skipped.has(plugin) : true\n }).map((plugin) => {\n return async () => {\n const value = await this.#execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n\n return Promise.resolve(\n {\n plugin,\n result: value,\n } as SafeParseResult<H>,\n )\n }\n })\n\n return this.#promiseManager.run('first', promises)\n }\n\n /**\n * First non-null result stops and will return it's value.\n */\n hookFirstSync<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n skipped?: ReadonlySet<KubbPlugin> | null\n }): SafeParseResult<H> {\n let parseResult: SafeParseResult<H> = null as unknown as SafeParseResult<H>\n\n for (const plugin of this.#getSortedPlugins()) {\n if (skipped && skipped.has(plugin)) {\n continue\n }\n\n parseResult = {\n result: this.#executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n }),\n plugin,\n } as SafeParseResult<H>\n\n if (parseResult?.result != null) {\n break\n }\n }\n return parseResult\n }\n\n /**\n * Run all plugins in parallel(order will be based on `this.plugin` and if `pre` or `post` is set).\n */\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>({\n hookName,\n parameters,\n }: {\n hookName: H\n parameters?: Parameters<RequiredPluginLifecycle[H]> | undefined\n }): Promise<Awaited<TOuput>[]> {\n const promises = this.#getSortedPlugins().map((plugin) => {\n return () => this.#execute({ strategy: 'hookParallel', hookName, parameters, plugin }) as Promise<TOuput>\n })\n\n const results = await this.#promiseManager.run('parallel', promises)\n\n results\n .forEach((result, index) => {\n if (isPromiseRejectedResult<Error>(result)) {\n const plugin = this.#getSortedPlugins()[index]\n\n this.#catcher<H>(result.reason, plugin, hookName)\n }\n })\n\n return results.filter((result) => result.status === 'fulfilled').map((result) => (result as PromiseFulfilledResult<Awaited<TOuput>>).value)\n }\n\n /**\n * Chain all plugins, `reduce` can be passed through to handle every returned value. The return value of the first plugin will be used as the first parameter for the plugin after that.\n */\n hookReduceArg0<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n reduce,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n reduce: (reduction: Argument0<H>, result: ReturnType<ParseResult<H>>, plugin: KubbPlugin) => PossiblePromise<Argument0<H> | null>\n }): Promise<Argument0<H>> {\n const [argument0, ...rest] = parameters\n\n let promise: Promise<Argument0<H>> = Promise.resolve(argument0)\n for (const plugin of this.#getSortedPlugins()) {\n promise = promise\n .then((arg0) => {\n const value = this.#execute({\n strategy: 'hookReduceArg0',\n hookName,\n parameters: [arg0, ...rest] as PluginParameter<H>,\n plugin,\n })\n return value\n })\n .then((result) => reduce.call(this.#core.api, argument0, result as ReturnType<ParseResult<H>>, plugin)) as Promise<Argument0<H>>\n }\n\n return promise\n }\n\n /**\n * Chains plugins\n */\n async hookSeq<H extends PluginLifecycleHooks>({ hookName, parameters }: { hookName: H; parameters?: PluginParameter<H> }): Promise<void> {\n const promises = this.#getSortedPlugins().map((plugin) => {\n return () =>\n this.#execute({\n strategy: 'hookSeq',\n hookName,\n parameters,\n plugin,\n })\n })\n\n return this.#promiseManager.run('seq', promises)\n }\n\n #getSortedPlugins(hookName?: keyof PluginLifecycle): KubbPlugin[] {\n const plugins = [...this.plugins].filter((plugin) => plugin.name !== 'core')\n\n if (hookName) {\n if (this.logger.logLevel === LogLevel.info) {\n const containsHookName = plugins.some((item) => item[hookName])\n if (!containsHookName) {\n this.logger.warn(`No hook ${hookName} found`)\n }\n }\n\n return plugins.filter((item) => item[hookName])\n }\n // TODO add test case for sorting with pre/post\n\n return plugins.map(plugin => {\n if (plugin.pre) {\n const isValid = plugin.pre.every(pluginName => plugins.find(pluginToFind => pluginToFind.name === pluginName))\n\n if (!isValid) {\n throw new ValidationPluginError(`This plugin has a pre set that is not valid(${JSON.stringify(plugin.pre, undefined, 2)})`)\n }\n }\n\n return plugin\n }).sort((a, b) => {\n if (b.pre?.includes(a.name)) {\n return 1\n }\n if (b.post?.includes(a.name)) {\n return -1\n }\n return 0\n })\n }\n\n getPluginsByKey(hookName: keyof PluginLifecycle, pluginKey: KubbPlugin['key']): KubbPlugin[] {\n const plugins = [...this.plugins]\n const [searchPluginName, searchIdentifier] = pluginKey\n\n const pluginByPluginName = plugins\n .filter((plugin) => plugin[hookName])\n .filter((item) => {\n const [name, identifier] = item.key\n\n const identifierCheck = identifier?.toString() === searchIdentifier?.toString()\n const nameCheck = name === searchPluginName\n\n if (searchIdentifier) {\n return identifierCheck && nameCheck\n }\n\n return nameCheck\n })\n\n if (!pluginByPluginName?.length) {\n // fallback on the core plugin when there is no match\n\n const corePlugin = plugins.find((plugin) => plugin.name === 'core' && plugin[hookName])\n\n if (this.logger.logLevel === LogLevel.debug) {\n if (corePlugin) {\n this.logger.warn(`No hook '${hookName}' for pluginKey '${JSON.stringify(pluginKey)}' found, falling back on the '@kubb/core' plugin`)\n } else {\n this.logger.warn(`No hook '${hookName}' for pluginKey '${JSON.stringify(pluginKey)}' found, no fallback found in the '@kubb/core' plugin`)\n }\n }\n\n return corePlugin ? [corePlugin] : []\n }\n\n return pluginByPluginName\n }\n\n #addExecutedToCallStack(executer: Executer | undefined) {\n if (executer) {\n this.events.emit('executed', executer)\n this.executed.push(executer)\n }\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n #execute<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: unknown[] | undefined\n plugin: KubbPluginWithLifeCycle\n }): Promise<ReturnType<ParseResult<H>> | null> | null {\n const hook = plugin[hookName]\n let output: unknown\n\n if (!hook) {\n return null\n }\n\n this.events.emit('execute', { strategy, hookName, parameters, plugin })\n\n const task = Promise.resolve()\n .then(() => {\n if (typeof hook === 'function') {\n const possiblePromiseResult = (hook as Function).apply({ ...this.#core.api, plugin }, parameters) as Promise<ReturnType<ParseResult<H>>>\n\n if (isPromise(possiblePromiseResult)) {\n return Promise.resolve(possiblePromiseResult)\n }\n return possiblePromiseResult\n }\n\n return hook\n })\n .then((result) => {\n output = result\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n })\n\n return result\n })\n .catch((e: Error) => {\n this.#catcher<H>(e, plugin, hookName)\n\n return null\n })\n\n return task\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n #executeSync<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: PluginParameter<H>\n plugin: KubbPluginWithLifeCycle\n }): ReturnType<ParseResult<H>> | null {\n const hook = plugin[hookName]\n let output: unknown\n\n if (!hook) {\n return null\n }\n\n this.events.emit('execute', { strategy, hookName, parameters, plugin })\n\n try {\n if (typeof hook === 'function') {\n const fn = (hook as Function).apply({ ...this.#core.api, plugin }, parameters) as ReturnType<ParseResult<H>>\n\n output = fn\n return fn\n }\n\n output = hook\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n })\n\n return hook\n } catch (e) {\n this.#catcher<H>(e as Error, plugin, hookName)\n\n return null\n }\n }\n\n #catcher<H extends PluginLifecycleHooks>(e: Error, plugin?: KubbPlugin, hookName?: H) {\n const text = `${e.message} (plugin: ${plugin?.name || 'unknown'}, hook: ${hookName || 'unknown'})\\n`\n\n this.logger.error(text)\n this.events.emit('error', e)\n }\n\n #parse<TPlugin extends KubbUserPluginWithLifeCycle>(\n plugin: TPlugin,\n pluginManager: PluginManager,\n context: CorePluginOptions['api'] | undefined,\n ): KubbPlugin<GetPluginFactoryOptions<TPlugin>> {\n const usedPluginNames = pluginManager.#usedPluginNames\n\n setUniqueName(plugin.name, usedPluginNames)\n\n const key = [plugin.name, usedPluginNames[plugin.name]].filter(Boolean) as [typeof plugin.name, string]\n\n if (plugin.name !== 'core' && usedPluginNames[plugin.name]! >= 2) {\n pluginManager.logger.warn('Using multiple of the same plugin is an experimental feature')\n }\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n if (plugin.api && typeof plugin.api === 'function') {\n const api = (plugin.api as Function).call(context) as typeof plugin.api\n\n return {\n ...plugin,\n key,\n api,\n } as unknown as KubbPlugin<GetPluginFactoryOptions<TPlugin>>\n }\n\n return {\n ...plugin,\n key,\n } as unknown as KubbPlugin<GetPluginFactoryOptions<TPlugin>>\n }\n\n static getDependedPlugins<\n T1 extends PluginFactoryOptions,\n T2 extends PluginFactoryOptions = never,\n T3 extends PluginFactoryOptions = never,\n TOutput = T3 extends never ? T2 extends never ? [T1: KubbPlugin<T1>]\n : [T1: KubbPlugin<T1>, T2: KubbPlugin<T2>]\n : [T1: KubbPlugin<T1>, T2: KubbPlugin<T2>, T3: KubbPlugin<T3>],\n >(plugins: Array<KubbPlugin>, dependedPluginNames: string | string[]): TOutput {\n let pluginNames: string[] = []\n if (typeof dependedPluginNames === 'string') {\n pluginNames = [dependedPluginNames]\n } else {\n pluginNames = dependedPluginNames\n }\n\n return pluginNames.map((pluginName) => {\n const plugin = plugins.find((plugin) => plugin.name === pluginName)\n if (!plugin) {\n throw new ValidationPluginError(`This plugin depends on the ${pluginName} plugin.`)\n }\n return plugin\n }) as TOutput\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n static get hooks() {\n return ['buildStart', 'resolvePath', 'resolveName', 'load', 'transform', 'writeFile', 'buildEnd'] as const\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { EventEmitter as NodeEventEmitter } from 'node:events'\n\nexport class EventEmitter<TEvents extends Record<string, any>> {\n constructor() {\n this.#emitter.setMaxListeners(100)\n }\n #emitter = new NodeEventEmitter()\n\n emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArg: TEvents[TEventName]): void {\n this.#emitter.emit(eventName, ...(eventArg as []))\n }\n\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.on(eventName, handler as any)\n }\n\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.off(eventName, handler as any)\n }\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","import crypto from 'node:crypto'\nimport { performance } from 'node:perf_hooks'\n\nimport { EventEmitter } from './EventEmitter.ts'\n\nexport type QueueJob<T = unknown> = {\n (...args: unknown[]): Promise<T | void>\n}\n\ntype RunOptions = {\n controller?: AbortController\n name?: string\n description?: string\n}\n\ntype QueueItem = {\n reject: <T>(reason?: T) => void\n resolve: <T>(value: T | PromiseLike<T>) => void\n job: QueueJob<unknown>\n} & Required<RunOptions>\n\ntype Events = {\n jobDone: [result: unknown]\n jobFailed: [error: Error]\n}\n\nexport class Queue {\n #queue: QueueItem[] = []\n readonly eventEmitter: EventEmitter<Events> = new EventEmitter()\n\n #workerCount = 0\n\n #maxParallel: number\n #debug = false\n\n constructor(maxParallel: number, debug = false) {\n this.#maxParallel = maxParallel\n this.#debug = debug\n }\n\n run<T>(job: QueueJob<T>, options: RunOptions = { controller: new AbortController(), name: crypto.randomUUID(), description: '' }): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const item = { reject, resolve, job, name: options.name, description: options.description || options.name } as QueueItem\n\n options.controller?.signal.addEventListener('abort', () => {\n this.#queue = this.#queue.filter((queueItem) => queueItem.name === item.name)\n\n reject('Aborted')\n })\n\n this.#queue.push(item)\n this.#work()\n })\n }\n\n runSync<T>(job: QueueJob<T>, options: RunOptions = { controller: new AbortController(), name: crypto.randomUUID(), description: '' }): void {\n new Promise<T>((resolve, reject) => {\n const item = { reject, resolve, job, name: options.name, description: options.description || options.name } as QueueItem\n\n options.controller?.signal.addEventListener('abort', () => {\n this.#queue = this.#queue.filter((queueItem) => queueItem.name === item.name)\n })\n\n this.#queue.push(item)\n this.#work()\n })\n }\n\n get hasJobs(): boolean {\n return this.#workerCount > 0 || this.#queue.length > 0\n }\n\n get count(): number {\n return this.#workerCount\n }\n\n #work(): void {\n if (this.#workerCount >= this.#maxParallel) {\n return\n }\n\n this.#workerCount++\n\n let entry: QueueItem | undefined\n while ((entry = this.#queue.shift())) {\n const { reject, resolve, job, name, description } = entry\n\n if (this.#debug) {\n performance.mark(name + '_start')\n }\n\n job()\n .then((result) => {\n this.eventEmitter.emit('jobDone', result)\n\n resolve(result)\n\n if (this.#debug) {\n performance.mark(name + '_stop')\n performance.measure(description, name + '_start', name + '_stop')\n }\n })\n .catch((err) => {\n this.eventEmitter.emit('jobFailed', err as Error)\n reject(err)\n })\n }\n this.#workerCount--\n }\n}\n","export function getUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n originalName += used\n }\n data[originalName] = 1\n return originalName\n}\n\nexport function setUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n\n return originalName\n }\n data[originalName] = 1\n return originalName\n}\n","/**\n * Behaves as an Error to log a warning in the console(still stops the execution)\n */\nexport class Warning extends Error {\n constructor(message?: string, options?: { cause: Error }) {\n super(message, { cause: options?.cause })\n\n this.name = 'Warning'\n }\n}\n\nexport class ValidationPluginError extends Error {}\n","import path from 'node:path'\n\nimport { createPluginCache } from './utils/cache.ts'\n\nimport type { FileManager } from './FileManager.ts'\nimport type { PluginManager } from './PluginManager.ts'\nimport type { KubbPlugin, KubbUserPluginWithLifeCycle, PluginContext, PluginFactoryOptions } from './types.ts'\n\ntype KubbPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => KubbUserPluginWithLifeCycle<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: KubbPluginFactory<T>) {\n return (options: T['options']): ReturnType<KubbPluginFactory<T>> => {\n return factory(options)\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n pluginManager: PluginManager\n resolvePath: PluginContext['resolvePath']\n resolveName: PluginContext['resolveName']\n logger: PluginContext['logger']\n getPlugins: () => Array<KubbPlugin>\n plugin?: PluginContext['plugin']\n}\n\n// not publicly exported\nexport type CorePluginOptions = PluginFactoryOptions<'core', Options, Options, PluginContext, never>\n\nexport const pluginName = 'core' satisfies CorePluginOptions['name']\nexport const pluginKey: CorePluginOptions['key'] = [pluginName] satisfies CorePluginOptions['key']\n\nexport const definePlugin = createPlugin<CorePluginOptions>((options) => {\n const { fileManager, pluginManager, resolvePath, resolveName, logger } = options\n\n return {\n name: pluginName,\n options,\n key: ['core'],\n\n api() {\n return {\n get config() {\n return options.config\n },\n get plugins() {\n return options.getPlugins()\n },\n get plugin() {\n // see pluginManger.#execute where we override with `.call` the this with the correct plugin\n return options.plugin as NonNullable<Options['plugin']>\n },\n logger,\n fileManager,\n pluginManager,\n async addFile(...files) {\n const resolvedFiles = await fileManager.add(...files)\n\n if (!Array.isArray(resolvedFiles)) {\n return [resolvedFiles]\n }\n\n return resolvedFiles\n },\n resolvePath,\n resolveName,\n cache: createPluginCache(),\n }\n },\n resolvePath(baseName) {\n const root = path.resolve(this.config.root, this.config.output.path)\n\n return path.resolve(root, baseName)\n },\n resolveName(name) {\n return name\n },\n }\n})\n","import type { PluginCache } from '../types.ts'\n\nexport interface Cache<TStore extends object = object> {\n delete(id: keyof TStore): boolean\n get(id: keyof TStore): TStore[keyof TStore] | null\n has(id: keyof TStore): boolean\n set(id: keyof TStore, value: unknown): void\n}\n\nexport function createPluginCache<TStore extends PluginCache>(Store: TStore = Object.create(null) as TStore): Cache<TStore> {\n return {\n set(id, value): void {\n Store[id] = [0, value] as TStore[keyof TStore]\n },\n get(id): TStore[keyof TStore] | null {\n const item = Store[id]\n if (!item) {\n return null\n }\n item[0] = 0\n return item[1] as TStore[keyof TStore]\n },\n has(id): boolean {\n const item = Store[id]\n if (!item) {\n return false\n }\n item[0] = 0\n return true\n },\n delete(id: keyof TStore): boolean {\n return delete Store[id]\n },\n }\n}\n","import { hookFirst, hookParallel, hookSeq } from './utils/executeStrategies.ts'\n\nimport type { PossiblePromise } from '@kubb/types'\nimport type { Strategy, StrategySwitch } from './utils/executeStrategies.ts'\n\ntype PromiseFunc<T = unknown, T2 = never> = () => T2 extends never ? Promise<T> : Promise<T> | T2\n\ntype Options<TState = any> = {\n nullCheck?: (state: TState) => boolean\n}\n\nexport class PromiseManager<TState = any> {\n #options: Options<TState> = {}\n\n constructor(options: Options<TState> = {}) {\n this.#options = options\n\n return this\n }\n\n run<TInput extends Array<PromiseFunc<TValue, null>>, TValue, TStrategy extends Strategy, TOutput = StrategySwitch<TStrategy, TInput, TValue>>(\n strategy: TStrategy,\n promises: TInput,\n ): TOutput {\n if (strategy === 'seq') {\n return hookSeq<TInput, TValue, TOutput>(promises)\n }\n\n if (strategy === 'first') {\n return hookFirst<TInput, TValue, TOutput>(promises, this.#options.nullCheck)\n }\n\n if (strategy === 'parallel') {\n return hookParallel<TInput, TValue, TOutput>(promises)\n }\n\n throw new Error(`${strategy} not implemented`)\n }\n}\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","/* eslint-disable unused-imports/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-unused-vars */\ntype PromiseFunc<T = unknown, T2 = never> = (state?: T) => T2 extends never ? Promise<T> : Promise<T> | T2\n\nexport type ValueOfPromiseFuncArray<TInput extends Array<unknown>> = TInput extends Array<PromiseFunc<infer X, infer Y>> ? X | Y : never\n\nexport function noReturn(): void {}\n\ntype SeqOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue> = Array<Awaited<ValueOfPromiseFuncArray<TInput>>>\n\n/**\n * Chains promises\n */\nexport function hookSeq<TInput extends Array<PromiseFunc<TValue, null>>, TValue, TOutput = SeqOutput<TInput, TValue>>(\n promises: TInput,\n): TOutput {\n return promises.filter(Boolean).reduce(\n (promise, func) => {\n if (typeof func !== 'function') {\n throw new Error('HookSeq needs a function that returns a promise `() => Promise<unknown>`')\n }\n\n return promise.then((state) => {\n const calledFunc = func(state as TValue)\n\n if (calledFunc) {\n return calledFunc.then(Array.prototype.concat.bind(state))\n }\n })\n },\n Promise.resolve([] as unknown),\n ) as TOutput\n}\n\ntype HookFirstOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown> = ValueOfPromiseFuncArray<TInput>\n\n/**\n * Chains promises, first non-null result stops and returns\n */\nexport function hookFirst<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown, TOutput = HookFirstOutput<TInput, TValue>>(\n promises: TInput,\n nullCheck = (state: any) => state !== null,\n): TOutput {\n let promise: Promise<unknown> = Promise.resolve(null) as Promise<unknown>\n\n for (const func of promises.filter(Boolean)) {\n promise = promise.then((state) => {\n if (nullCheck(state)) {\n return state\n }\n\n const calledFunc = func(state as TValue)\n\n return calledFunc\n })\n }\n\n return promise as TOutput\n}\n\ntype HookParallelOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue> = Promise<PromiseSettledResult<Awaited<ValueOfPromiseFuncArray<TInput>>>[]>\n\n/**\n * Run promises in parallel with allSettled\n */\nexport function hookParallel<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown, TOutput = HookParallelOutput<TInput, TValue>>(\n promises: TInput,\n): TOutput {\n return Promise.allSettled(promises.filter(Boolean).map(promise => promise())) as TOutput\n}\n\nexport type Strategy = 'seq' | 'first' | 'parallel'\n\nexport type StrategySwitch<TStrategy extends Strategy, TInput extends Array<PromiseFunc<TValue, null>>, TValue> = TStrategy extends 'first'\n ? HookFirstOutput<TInput, TValue>\n : TStrategy extends 'seq' ? SeqOutput<TInput, TValue>\n : TStrategy extends 'parallel' ? HookParallelOutput<TInput, TValue>\n : never\n\n// tests\n\ntype test = ValueOfPromiseFuncArray<Array<PromiseFunc<number, null>>>\n// ^?\n","/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class Generator<TOptions = unknown, TContext = unknown> {\n #options: TOptions = {} as TOptions\n #context: TContext = {} as TContext\n\n constructor(options?: TOptions, context?: TContext) {\n if (context) {\n this.#context = context\n }\n\n if (options) {\n this.#options = options\n }\n\n return this\n }\n\n get options(): TOptions {\n return this.#options\n }\n\n get context(): TContext {\n return this.#context\n }\n\n set options(options: TOptions) {\n this.#options = { ...this.#options, ...options }\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import mod from 'node:module'\nimport os from 'node:os'\nimport { pathToFileURL } from 'node:url'\n\nimport { findUp, findUpSync } from 'find-up'\nimport { coerce, satisfies } from 'semver'\n\ntype PackageJSON = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}\n\ntype DependencyName = string\n\ntype DependencyVersion = string\n\nexport class PackageManager {\n static #cache: Record<DependencyName, DependencyVersion> = {}\n\n #cwd?: string\n #SLASHES = new Set(['/', '\\\\'])\n constructor(workspace?: string) {\n if (workspace) {\n this.#cwd = workspace\n }\n\n return this\n }\n\n set workspace(workspace: string) {\n this.#cwd = workspace\n }\n\n get workspace(): string | undefined {\n return this.#cwd\n }\n\n normalizeDirectory(directory: string): string {\n if (!this.#SLASHES.has(directory[directory.length - 1]!)) {\n return `${directory}/`\n }\n\n return directory\n }\n\n getLocation(path: string): string {\n let location = path\n\n if (this.#cwd) {\n const require = mod.createRequire(this.normalizeDirectory(this.#cwd))\n location = require.resolve(path)\n }\n\n return location\n }\n\n async import(path: string): Promise<any | undefined> {\n try {\n let location = this.getLocation(path)\n\n if (os.platform() == 'win32') {\n location = pathToFileURL(location).href\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const module = await import(location)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n return module?.default ?? module\n } catch (e) {\n console.log(e)\n return undefined\n }\n }\n\n async getPackageJSON(): Promise<PackageJSON | undefined> {\n const pkgPath = await findUp(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n return require(pkgPath) as PackageJSON\n }\n\n getPackageJSONSync(): PackageJSON | undefined {\n const pkgPath = findUpSync(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n return require(pkgPath) as PackageJSON\n }\n\n static setVersion(dependency: DependencyName, version: DependencyVersion): void {\n PackageManager.#cache[dependency] = version\n }\n\n #match(packageJSON: PackageJSON, dependency: DependencyName | RegExp): string | undefined {\n const dependencies = {\n ...packageJSON['dependencies'] || {},\n ...packageJSON['devDependencies'] || {},\n }\n\n if (typeof dependency === 'string' && dependencies[dependency]) {\n return dependencies[dependency]\n }\n\n const matchedDependency = Object.keys(dependencies).find(dep => dep.match(dependency))\n\n return matchedDependency ? dependencies[matchedDependency] : undefined\n }\n\n async getVersion(dependency: DependencyName | RegExp): Promise<DependencyVersion | undefined> {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = await this.getPackageJSON()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n getVersionSync(dependency: DependencyName | RegExp): DependencyVersion | undefined {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = this.getPackageJSONSync()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n async isValid(dependency: DependencyName | RegExp, version: DependencyVersion): Promise<boolean> {\n const packageVersion = await this.getVersion(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n isValidSync(dependency: DependencyName | RegExp, version: DependencyVersion): boolean {\n const packageVersion = this.getVersionSync(dependency)\n\n if (!packageVersion) {\n return false\n }\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n}\n","import path from 'node:path';\nimport {locatePath, locatePathSync} from 'locate-path';\nimport {toPath} from 'unicorn-magic';\n\nexport const findUpStop = Symbol('findUpStop');\n\nexport async function findUpMultiple(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt ?? root));\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = async locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePath(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = await name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePath([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst foundPath = await runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport function findUpMultipleSync(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePathSync(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePathSync([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst foundPath = runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport async function findUp(name, options = {}) {\n\tconst matches = await findUpMultiple(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport function findUpSync(name, options = {}) {\n\tconst matches = findUpMultipleSync(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport {\n\tpathExists,\n\tpathExistsSync,\n} from 'path-exists';\n","import process from 'node:process';\nimport path from 'node:path';\nimport fs, {promises as fsPromises} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\nimport pLocate from 'p-locate';\n\nconst typeMappings = {\n\tdirectory: 'isDirectory',\n\tfile: 'isFile',\n};\n\nfunction checkType(type) {\n\tif (Object.hasOwnProperty.call(typeMappings, type)) {\n\t\treturn;\n\t}\n\n\tthrow new Error(`Invalid type specified: ${type}`);\n}\n\nconst matchType = (type, stat) => stat[typeMappings[type]]();\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport async function locatePath(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t\tconcurrency,\n\t\tpreserveOrder,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fsPromises.stat : fsPromises.lstat;\n\n\treturn pLocate(paths, async path_ => {\n\t\ttry {\n\t\t\tconst stat = await statFunction(path.resolve(cwd, path_));\n\t\t\treturn matchType(type, stat);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, {concurrency, preserveOrder});\n}\n\nexport function locatePathSync(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fs.statSync : fs.lstatSync;\n\n\tfor (const path_ of paths) {\n\t\ttry {\n\t\t\tconst stat = statFunction(path.resolve(cwd, path_), {\n\t\t\t\tthrowIfNoEntry: false,\n\t\t\t});\n\n\t\t\tif (!stat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(type, stat)) {\n\t\t\t\treturn path_;\n\t\t\t}\n\t\t} catch {}\n\t}\n}\n","import pLimit from 'p-limit';\n\nclass EndError extends Error {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n}\n\n// The input can also be a promise, so we await it.\nconst testElement = async (element, tester) => tester(await element);\n\n// The input can also be a promise, so we `Promise.all()` them both.\nconst finder = async element => {\n\tconst values = await Promise.all(element);\n\tif (values[1] === true) {\n\t\tthrow new EndError(values[0]);\n\t}\n\n\treturn false;\n};\n\nexport default async function pLocate(\n\titerable,\n\ttester,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tpreserveOrder = true,\n\t} = {},\n) {\n\tconst limit = pLimit(concurrency);\n\n\t// Start all the promises concurrently with optional limit.\n\tconst items = [...iterable].map(element => [element, limit(testElement, element, tester)]);\n\n\t// Check the promises either serially or concurrently.\n\tconst checkLimit = pLimit(preserveOrder ? 1 : Number.POSITIVE_INFINITY);\n\n\ttry {\n\t\tawait Promise.all(items.map(element => checkLimit(finder, element)));\n\t} catch (error) {\n\t\tif (error instanceof EndError) {\n\t\t\treturn error.value;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\t\treturn current.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n}\n","import {fileURLToPath} from 'node:url';\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport * from './default.js';\n","import fs, {promises as fsPromises} from 'node:fs';\n\nexport async function pathExists(path) {\n\ttry {\n\t\tawait fsPromises.access(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function pathExistsSync(path) {\n\ttry {\n\t\tfs.accessSync(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/lodash.isequal@4.5.0/node_modules/lodash.isequal/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js","../src/index.ts","../src/build.ts","../src/config.ts","../src/FileManager.ts","../../../node_modules/.pnpm/p-queue@7.4.1/node_modules/p-queue/dist/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs","../../../node_modules/.pnpm/p-timeout@5.1.0/node_modules/p-timeout/index.js","../../../node_modules/.pnpm/p-queue@7.4.1/node_modules/p-queue/dist/priority-queue.js","../../../node_modules/.pnpm/p-queue@7.4.1/node_modules/p-queue/dist/lower-bound.js","../src/BarrelManager.ts","../src/utils/TreeNode.ts","../src/PluginManager.ts","../src/utils/EventEmitter.ts","../src/errors.ts","../src/plugin.ts","../src/utils/cache.ts","../src/PromiseManager.ts","../src/utils/executeStrategies.ts","../src/Generator.ts","../src/PackageManager.ts","../../../node_modules/.pnpm/find-up@7.0.0/node_modules/find-up/index.js","../../../node_modules/.pnpm/locate-path@7.2.0/node_modules/locate-path/index.js","../../../node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js","../../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js","../../../node_modules/.pnpm/yocto-queue@1.0.0/node_modules/yocto-queue/index.js","../../../node_modules/.pnpm/unicorn-magic@0.1.0/node_modules/unicorn-magic/node.js","../../../node_modules/.pnpm/path-exists@5.0.0/node_modules/path-exists/index.js"],"names":["Symbol","Map","Promise","Set","WeakMap","othValue","isEqual","EventEmitter","resolve","__classPrivateFieldGet","AbortError","_PQueue_doesIntervalAllowAnother_get","_PQueue_doesConcurrentAllowAnother_get","_PQueue_next","_PQueue_onResumeInterval","_PQueue_isIntervalPaused_get","_PQueue_tryToStartAnother","_PQueue_initializeIntervalIfNeeded","_PQueue_onInterval","_PQueue_processQueue","_PQueue_throwOnAbort","_PQueue_onEvent","path","treeNode","KubbFile","name","factory","_options","pluginName","plugin","fileURLToPath","toPath","fs","fsPromises","_cache","require"],"mappings":"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","sourcesContent":["/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import { build } from './build.ts'\n\nimport type { ObjValueTuple, TupleToUnion } from '@kubb/types'\n\nexport { build, safeBuild } from './build.ts'\nexport { defineConfig, isInputPath } from './config.ts'\nexport { Warning } from './errors.ts'\nexport { FileManager, KubbFile } from './FileManager.ts'\nexport { Generator } from './Generator.ts'\nexport { PackageManager } from './PackageManager.ts'\n// dprint-ignore\nexport { createPlugin, pluginName as name, pluginName } from './plugin.ts'\nexport { PluginManager } from './PluginManager.ts'\nexport { PromiseManager } from './PromiseManager.ts'\nexport type * from './types.ts'\n\nexport interface _Register {}\nexport type Plugins = _Register\nexport type OptionsPlugins = { [K in keyof Plugins]: Plugins[K]['options'] }\n\nexport type OptionsOfPlugin<K extends keyof Plugins> = Plugins[K]['options']\n\nexport type PluginUnion = TupleToUnion<ObjValueTuple<OptionsPlugins>>\n\nexport type Plugin = keyof Plugins\n\nexport default build\n","import c from 'tinyrainbow'\n\nimport { clean } from './fs/clean.ts'\nimport { read } from './fs/read.ts'\nimport { URLPath } from './utils/URLPath.ts'\nimport { isInputPath } from './config.ts'\nimport { FileManager } from './FileManager.ts'\nimport { createLogger, LogLevel, randomCliColour } from './logger.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport { isPromise } from './PromiseManager.ts'\n\nimport type { KubbFile } from './FileManager.ts'\nimport type { Logger } from './logger.ts'\nimport type { KubbPlugin, PluginContext, PluginParameter, TransformResult } from './types.ts'\n\ntype BuildOptions = {\n config: PluginContext['config']\n /**\n * @default Logger without the spinner\n */\n logger?: Logger\n}\n\ntype BuildOutput = {\n files: FileManager['files']\n pluginManager: PluginManager\n /**\n * Only for safeBuild\n */\n error?: Error\n}\n\nasync function transformReducer(\n this: PluginContext,\n _previousCode: string,\n result: TransformResult | Promise<TransformResult>,\n _plugin: KubbPlugin,\n): Promise<string | null> {\n return result\n}\n\nasync function setup(options: BuildOptions): Promise<PluginManager> {\n const { config, logger = createLogger({ logLevel: LogLevel.silent }) } = options\n let count = 0\n\n try {\n if (isInputPath(config) && !new URLPath(config.input.path).isURL) {\n await read(config.input.path)\n }\n } catch (e) {\n if (isInputPath(config)) {\n throw new Error(\n 'Cannot read file/URL defined in `input.path` or set with `kubb generate PATH` in the CLI of your Kubb config ' + c.dim(config.input.path),\n {\n cause: e,\n },\n )\n }\n }\n\n if (config.output.clean) {\n await clean(config.output.path)\n }\n\n const task = async (file: KubbFile.ResolvedFile): Promise<KubbFile.ResolvedFile> => {\n const { path } = file\n\n let source: string | null = FileManager.getSource(file)\n\n const { result: loadedResult } = await pluginManager.hookFirst({\n hookName: 'load',\n parameters: [path],\n })\n if (loadedResult && isPromise(loadedResult)) {\n source = await loadedResult\n }\n if (loadedResult && !isPromise(loadedResult)) {\n source = loadedResult\n }\n\n if (source) {\n source = await pluginManager.hookReduceArg0({\n hookName: 'transform',\n parameters: [source, path],\n reduce: transformReducer,\n })\n\n if (config.output.write || config.output.write === undefined) {\n if (file.meta?.pluginKey) {\n // run only for pluginKey defined in the meta of the file\n await pluginManager.hookForPlugin({\n pluginKey: file.meta?.pluginKey,\n hookName: 'writeFile',\n parameters: [source, path],\n })\n }\n\n await pluginManager.hookFirst({\n hookName: 'writeFile',\n parameters: [source, path],\n })\n }\n }\n\n return {\n ...file,\n source: source || '',\n }\n }\n\n const pluginManager = new PluginManager(config, { logger, task })\n\n pluginManager.on('execute', (executer) => {\n const { hookName, parameters, plugin } = executer\n\n if (hookName === 'writeFile' && logger.spinner) {\n const [code] = parameters as PluginParameter<'writeFile'>\n\n if (logger.logLevel === LogLevel.debug) {\n logger.debug(`PluginKey ${c.dim(JSON.stringify(plugin.key))} \\nwith source\\n\\n${code}`)\n }\n }\n })\n\n pluginManager.queue.on('add', () => {\n if (logger.logLevel !== LogLevel.info) {\n return\n }\n\n if (logger.spinner && count === 0) {\n logger.spinner?.start(`💾 Writing`)\n }\n })\n\n pluginManager.queue.on('active', () => {\n if (logger.logLevel !== LogLevel.info) {\n return\n }\n\n if (logger.spinner && pluginManager.queue.size > 0) {\n const text = `Item: ${count} Size: ${pluginManager.queue.size} Pending: ${pluginManager.queue.pending}`\n\n logger.spinner.suffixText = c.dim(text)\n }\n ;++count\n })\n\n pluginManager.queue.on('completed', () => {\n if (logger.logLevel !== LogLevel.info) {\n return\n }\n\n if (logger.spinner) {\n const text = `Item: ${count} Size: ${pluginManager.queue.size} Pending: ${pluginManager.queue.pending}`\n\n logger.spinner.suffixText = c.dim(text)\n }\n })\n\n pluginManager.on('executed', (executer) => {\n const { hookName, plugin, output, parameters } = executer\n\n if (logger.logLevel === LogLevel.debug) {\n const logs = [\n `${randomCliColour(plugin.name)} Executing ${hookName}`,\n parameters && `${c.bgWhite(`Parameters`)} ${randomCliColour(plugin.name)} ${hookName}`,\n JSON.stringify(parameters, undefined, 2),\n output && `${c.bgWhite('Output')} ${randomCliColour(plugin.name)} ${hookName}`,\n output,\n ].filter(Boolean)\n\n logger.debug(logs.join('\\n'))\n }\n })\n\n return pluginManager\n}\n\nexport async function build(options: BuildOptions): Promise<BuildOutput> {\n const pluginManager = await setup(options)\n\n const { fileManager, logger } = pluginManager\n\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [options.config],\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd' })\n\n if (logger.logLevel === LogLevel.info && logger.spinner) {\n logger.spinner.suffixText = ''\n logger.spinner.succeed(`💾 Writing completed`)\n }\n\n return { files: fileManager.files.map((file) => ({ ...file, source: FileManager.getSource(file) })), pluginManager }\n}\n\nexport async function safeBuild(options: BuildOptions): Promise<BuildOutput> {\n const pluginManager = await setup(options)\n\n const { fileManager, logger } = pluginManager\n\n try {\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [options.config],\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd' })\n\n if (logger.logLevel === LogLevel.info && logger.spinner) {\n logger.spinner.suffixText = ''\n logger.spinner.succeed(`💾 Writing completed`)\n }\n } catch (e) {\n return { files: fileManager.files.map((file) => ({ ...file, source: FileManager.getSource(file) })), pluginManager, error: e as Error }\n }\n\n return { files: fileManager.files.map((file) => ({ ...file, source: FileManager.getSource(file) })), pluginManager }\n}\n","import type { PossiblePromise } from '@kubb/types'\nimport type { CLIOptions, InputPath, KubbConfig, KubbUserConfig } from './types.ts'\n\n/**\n * Type helper to make it easier to use kubb.config.js\n * accepts a direct {@link KubbConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport function defineConfig(\n options:\n | PossiblePromise<KubbUserConfig | Array<KubbUserConfig>>\n | ((\n /** The options derived from the CLI flags */\n cliOptions: CLIOptions,\n ) => PossiblePromise<KubbUserConfig | Array<KubbUserConfig>>),\n): typeof options {\n return options\n}\n\nexport function isInputPath(result: KubbConfig | undefined): result is KubbConfig<InputPath> {\n return !!result && 'path' in (result as any)\n}\n","/* eslint-disable @typescript-eslint/no-namespace */\nimport crypto from 'node:crypto'\nimport { extname, resolve } from 'node:path'\n\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\n\nimport isEqual from 'lodash.isequal'\nimport { orderBy } from 'natural-orderby'\nimport PQueue from 'p-queue'\n\nimport { getRelativePath, read } from './fs/read.ts'\nimport { write } from './fs/write.ts'\nimport { searchAndReplace } from './transformers/searchAndReplace.ts'\nimport { trimExtName } from './transformers/trim.ts'\nimport { BarrelManager } from './BarrelManager.ts'\n\nimport type { GreaterThan } from '@kubb/types'\nimport type { BarrelManagerOptions } from './BarrelManager.ts'\nimport type { KubbPlugin } from './types.ts'\n\ntype BasePath<T extends string = string> = `${T}/`\n\nexport namespace KubbFile {\n export type Import = {\n /**\n * Import name to be used\n * @example [\"useState\"]\n * @example \"React\"\n */\n name:\n | string\n | Array<\n string | {\n propertyName: string\n name?: string\n }\n >\n /**\n * Path for the import\n * @xample '@kubb/core'\n */\n path: string\n /**\n * Add `type` prefix to the import, this will result in: `import type { Type } from './path'`.\n */\n isTypeOnly?: boolean\n /**\n * Add `* as` prefix to the import, this will result in: `import * as path from './path'`.\n */\n isNameSpace?: boolean\n /**\n * When root is set it will get the path with relative getRelativePath(root, path).\n */\n root?: string\n }\n\n export type Export = {\n /**\n * Export name to be used.\n * @example [\"useState\"]\n * @example \"React\"\n */\n name?: string | Array<string>\n /**\n * Path for the import.\n * @xample '@kubb/core'\n */\n path: string\n /**\n * Add `type` prefix to the export, this will result in: `export type { Type } from './path'`.\n */\n isTypeOnly?: boolean\n /**\n * Make it possible to override the name, this will result in: `export * as aliasName from './path'`.\n */\n asAlias?: boolean\n }\n\n export declare const dataTagSymbol: unique symbol\n export type DataTag<Type, Value> = Type & {\n [dataTagSymbol]: Value\n }\n\n export type UUID = string\n export type Source = string\n\n export type Extname = '.ts' | '.js' | '.tsx' | '.json' | `.${string}`\n\n export type Mode = 'file' | 'directory'\n\n /**\n * Name to be used to dynamicly create the baseName(based on input.path)\n * Based on UNIX basename\n * @link https://nodejs.org/api/path.html#pathbasenamepath-suffix\n */\n export type BaseName = `${string}${Extname}`\n\n /**\n * Path will be full qualified path to a specified file\n */\n export type Path = string\n\n export type AdvancedPath<T extends BaseName = BaseName> = `${BasePath}${T}`\n\n export type OptionalPath = Path | undefined | null\n\n export type FileMetaBase = {\n pluginKey?: KubbPlugin['key']\n }\n\n export type File<\n TMeta extends FileMetaBase = FileMetaBase,\n TBaseName extends BaseName = BaseName,\n > = {\n /**\n * Unique identifier to reuse later\n * @default crypto.randomUUID()\n */\n id?: string\n /**\n * Name to be used to create the path\n * Based on UNIX basename, `${name}.extName`\n * @link https://nodejs.org/api/path.html#pathbasenamepath-suffix\n */\n baseName: TBaseName\n /**\n * Path will be full qualified path to a specified file\n */\n path: AdvancedPath<TBaseName> | Path\n source: Source\n imports?: Import[]\n exports?: Export[]\n /**\n * This will call fileManager.add instead of fileManager.addOrAppend, adding the source when the files already exists\n * This will also ignore the combinefiles utils\n * @default `false`\n */\n override?: boolean\n /**\n * Use extra meta, this is getting used to generate the barrel/index files.\n */\n meta?: TMeta\n /**\n * This will override `process.env[key]` inside the `source`, see `getFileSource`.\n */\n env?: NodeJS.ProcessEnv\n }\n\n export type ResolvedFile<\n TMeta extends FileMetaBase = FileMetaBase,\n TBaseName extends BaseName = BaseName,\n > = KubbFile.File<TMeta, TBaseName> & {\n /**\n * @default crypto.randomUUID()\n */\n id: UUID\n /**\n * Contains the first part of the baseName, generated based on baseName\n * @link https://nodejs.org/api/path.html#pathformatpathobject\n */\n\n name: string\n }\n}\n\ntype CacheItem = KubbFile.ResolvedFile & {\n cancel?: () => void\n}\n\ntype AddResult<T extends Array<KubbFile.File>> = Promise<\n Awaited<GreaterThan<T['length'], 1> extends true ? Promise<KubbFile.ResolvedFile[]> : Promise<KubbFile.ResolvedFile>>\n>\n\ntype AddIndexesProps = {\n /**\n * Root based on root and output.path specified in the config\n */\n root: string\n /**\n * Output for plugin\n */\n output: {\n path: string\n exportAs?: string\n extName?: KubbFile.Extname\n exportType?: 'barrel' | false\n }\n options?: BarrelManagerOptions\n meta?: KubbFile.File['meta']\n}\n\ntype Options = {\n queue?: PQueue\n task?: (file: KubbFile.ResolvedFile) => Promise<KubbFile.ResolvedFile>\n}\n\nexport class FileManager {\n #cache: Map<KubbFile.Path, CacheItem[]> = new Map()\n\n #task: Options['task']\n #queue: PQueue\n\n constructor({ task = async (file) => file, queue = new PQueue() }: Options = {}) {\n this.#task = task\n this.#queue = queue\n\n return this\n }\n\n get files(): Array<KubbFile.File> {\n const files: Array<KubbFile.File> = []\n this.#cache.forEach((item) => {\n files.push(...item.flat(1))\n })\n\n return files\n }\n get isExecuting(): boolean {\n return this.#queue.size !== 0 && this.#queue.pending !== 0\n }\n\n async add<T extends Array<KubbFile.File> = Array<KubbFile.File>>(\n ...files: T\n ): AddResult<T> {\n const promises = combineFiles(files).map((file) => {\n if (file.override) {\n return this.#add(file)\n }\n\n return this.#addOrAppend(file)\n })\n\n const resolvedFiles = await Promise.all(promises)\n\n if (files.length > 1) {\n return resolvedFiles as unknown as AddResult<T>\n }\n\n return resolvedFiles[0] as unknown as AddResult<T>\n }\n\n async #add(file: KubbFile.File): Promise<KubbFile.ResolvedFile> {\n const controller = new AbortController()\n const resolvedFile: KubbFile.ResolvedFile = { id: crypto.randomUUID(), name: trimExtName(file.baseName), ...file }\n\n this.#cache.set(resolvedFile.path, [{ cancel: () => controller.abort(), ...resolvedFile }])\n\n return this.#queue.add(\n async () => {\n return this.#task?.(resolvedFile)\n },\n { signal: controller.signal },\n ) as Promise<KubbFile.ResolvedFile>\n }\n\n async #addOrAppend(file: KubbFile.File): Promise<KubbFile.ResolvedFile> {\n const previousCaches = this.#cache.get(file.path)\n const previousCache = previousCaches ? previousCaches.at(previousCaches.length - 1) : undefined\n\n if (previousCache) {\n this.#cache.delete(previousCache.path)\n\n return this.#add({\n ...file,\n source: previousCache.source && file.source ? `${previousCache.source}\\n${file.source}` : '',\n imports: [...(previousCache.imports || []), ...(file.imports || [])],\n exports: [...(previousCache.exports || []), ...(file.exports || [])],\n env: { ...(previousCache.env || {}), ...(file.env || {}) },\n })\n }\n return this.#add(file)\n }\n\n async addIndexes({ root, output, meta, options = {} }: AddIndexesProps): Promise<Array<KubbFile.File> | undefined> {\n const { exportType = 'barrel' } = output\n\n if (!exportType) {\n return undefined\n }\n\n const exportPath = output.path.startsWith('./') ? trimExtName(output.path) : `./${trimExtName(output.path)}`\n const barrelManager = new BarrelManager({ extName: output.extName, ...options })\n const files = barrelManager.getIndexes(resolve(root, output.path))\n\n if (!files) {\n return undefined\n }\n\n const rootFile: KubbFile.File = {\n path: resolve(root, 'index.ts'),\n baseName: 'index.ts',\n source: '',\n exports: [\n output.exportAs\n ? {\n name: output.exportAs,\n asAlias: true,\n path: output.extName ? `${exportPath}${output.extName}` : exportPath,\n isTypeOnly: options.isTypeOnly,\n }\n : {\n path: output.extName ? `${exportPath}${output.extName}` : exportPath,\n isTypeOnly: options.isTypeOnly,\n },\n ],\n }\n\n await this.#addOrAppend({\n ...rootFile,\n meta: meta ? meta : rootFile.meta,\n })\n\n return await Promise.all(\n files.map((file) => {\n return this.#addOrAppend({\n ...file,\n meta: meta ? meta : file.meta,\n })\n }),\n )\n }\n\n getCacheByUUID(UUID: KubbFile.UUID): KubbFile.File | undefined {\n let cache: KubbFile.File | undefined\n\n this.#cache.forEach((files) => {\n cache = files.find((item) => item.id === UUID)\n })\n return cache\n }\n\n get(path: KubbFile.Path): Array<KubbFile.File> | undefined {\n return this.#cache.get(path)\n }\n\n remove(path: KubbFile.Path): void {\n const cacheItem = this.get(path)\n if (!cacheItem) {\n return\n }\n\n this.#cache.delete(path)\n }\n\n async write(...params: Parameters<typeof write>): Promise<string | undefined> {\n return write(...params)\n }\n\n async read(...params: Parameters<typeof read>): Promise<string> {\n return read(...params)\n }\n\n // statics\n\n static getSource<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(file: KubbFile.File<TMeta>): string {\n return getSource<TMeta>(file)\n }\n\n static combineFiles<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(files: Array<KubbFile.File<TMeta> | null>): Array<KubbFile.File<TMeta>> {\n return combineFiles<TMeta>(files)\n }\n static getMode(path: string | undefined | null): KubbFile.Mode {\n if (!path) {\n return 'directory'\n }\n return extname(path) ? 'file' : 'directory'\n }\n\n static get extensions(): Array<KubbFile.Extname> {\n return ['.js', '.ts', '.tsx']\n }\n\n static isExtensionAllowed(baseName: string): boolean {\n return FileManager.extensions.some((extension) => baseName.endsWith(extension))\n }\n}\n\nfunction combineFiles<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(\n files: Array<KubbFile.File<TMeta> | null>,\n): Array<KubbFile.File<TMeta>> {\n return files.filter(Boolean).reduce((acc, file: KubbFile.File<TMeta>) => {\n const prevIndex = acc.findIndex((item) => item.path === file.path)\n\n if (prevIndex === -1) {\n return [...acc, file]\n }\n\n const prev = acc[prevIndex]\n\n if (prev && file.override) {\n acc[prevIndex] = {\n imports: [],\n exports: [],\n ...file,\n }\n return acc\n }\n\n if (prev) {\n acc[prevIndex] = {\n ...file,\n source: prev.source && file.source ? `${prev.source}\\n${file.source}` : '',\n imports: [...(prev.imports || []), ...(file.imports || [])],\n exports: [...(prev.exports || []), ...(file.exports || [])],\n env: { ...(prev.env || {}), ...(file.env || {}) },\n }\n }\n\n return acc\n }, [] as Array<KubbFile.File<TMeta>>)\n}\n\nexport function getSource<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(file: KubbFile.File<TMeta>): string {\n if (!FileManager.isExtensionAllowed(file.baseName)) {\n return file.source\n }\n\n const exports = file.exports ? combineExports(file.exports) : []\n const imports = file.imports ? combineImports(file.imports, exports, file.source) : []\n\n const importNodes = imports.filter(item => {\n // isImportNotNeeded\n // trim extName\n return item.path !== trimExtName(file.path)\n }).map((item) => {\n return factory.createImportDeclaration({\n name: item.name,\n path: item.root ? getRelativePath(item.root, item.path) : item.path,\n isTypeOnly: item.isTypeOnly,\n })\n })\n const exportNodes = exports.map((item) =>\n factory.createExportDeclaration({\n name: item.name,\n path: item.path,\n isTypeOnly: item.isTypeOnly,\n asAlias: item.asAlias,\n })\n )\n\n return [print([...importNodes, ...exportNodes]), getEnvSource(file.source, file.env)].join('\\n')\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n const combinedExports = orderBy(exports, [(v) => !v.isTypeOnly], ['asc']).reduce((prev, curr) => {\n const name = curr.name\n const prevByPath = prev.findLast((imp) => imp.path === curr.path)\n const prevByPathAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (export type ...)\n return prev\n }\n\n const uniquePrev = prev.findLast(\n (imp) => imp.path === curr.path && isEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias,\n )\n\n if (uniquePrev || (Array.isArray(name) && !name.length) || (prevByPath?.asAlias && !curr.asAlias)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name: Array.isArray(name) ? [...new Set(name)] : name,\n },\n ]\n }\n\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(curr.name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...curr.name])]\n\n return prev\n }\n\n return [...prev, curr]\n }, [] as Array<KubbFile.Export>)\n\n return orderBy(combinedExports, [(v) => !v.isTypeOnly, (v) => v.asAlias], ['desc', 'desc'])\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n const combinedImports = orderBy(imports, [(v) => !v.isTypeOnly], ['asc']).reduce((prev, curr) => {\n let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name\n\n const hasImportInSource = (importName: string) => {\n if (!source) {\n return true\n }\n\n const checker = (name?: string) => name && !!source.includes(name)\n return checker(importName) || exports.some(({ name }) => (Array.isArray(name) ? name.some(checker) : checker(name)))\n }\n\n if (Array.isArray(name)) {\n name = name.filter((item) => typeof item === 'string' ? hasImportInSource(item) : hasImportInSource(item.propertyName))\n }\n\n const prevByPath = prev.findLast((imp) => imp.path === curr.path && imp.isTypeOnly === curr.isTypeOnly)\n const uniquePrev = prev.findLast((imp) => imp.path === curr.path && isEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly)\n const prevByPathNameAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathNameAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (import type ...)\n return prev\n }\n\n if (uniquePrev || (Array.isArray(name) && !name.length)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name,\n },\n ]\n }\n\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...name])]\n\n return prev\n }\n\n if (!Array.isArray(name) && name && !hasImportInSource(name)) {\n return prev\n }\n\n return [...prev, curr]\n }, [] as Array<KubbFile.Import>)\n\n return orderBy(combinedImports, [(v) => !v.isTypeOnly], ['desc'])\n}\n\nfunction getEnvSource(source: string, env: NodeJS.ProcessEnv | undefined): string {\n if (!env) {\n return source\n }\n\n const keys = Object.keys(env)\n\n if (!keys.length) {\n return source\n }\n\n return keys.reduce((prev, key: string) => {\n const environmentValue = env[key]\n const replaceBy = environmentValue ? `'${environmentValue.replaceAll('\"', '')?.replaceAll(\"'\", '')}'` : 'undefined'\n\n if (key.toUpperCase() !== key) {\n throw new TypeError(`Environment should be in upperCase for ${key}`)\n }\n\n if (typeof replaceBy === 'string') {\n prev = searchAndReplace({ text: prev.replaceAll(`process.env.${key}`, replaceBy), replaceBy, prefix: 'process.env', key })\n // removes `declare const ...`\n prev = searchAndReplace({ text: prev.replaceAll(new RegExp(`(declare const).*\\n`, 'ig'), ''), replaceBy, key })\n }\n\n return prev\n }, source)\n}\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PQueue_instances, _PQueue_carryoverConcurrencyCount, _PQueue_isIntervalIgnored, _PQueue_intervalCount, _PQueue_intervalCap, _PQueue_interval, _PQueue_intervalEnd, _PQueue_intervalId, _PQueue_timeoutId, _PQueue_queue, _PQueue_queueClass, _PQueue_pending, _PQueue_concurrency, _PQueue_isPaused, _PQueue_throwOnTimeout, _PQueue_doesIntervalAllowAnother_get, _PQueue_doesConcurrentAllowAnother_get, _PQueue_next, _PQueue_onResumeInterval, _PQueue_isIntervalPaused_get, _PQueue_tryToStartAnother, _PQueue_initializeIntervalIfNeeded, _PQueue_onInterval, _PQueue_processQueue, _PQueue_throwOnAbort, _PQueue_onEvent;\nimport { EventEmitter } from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nThe error thrown by `queue.add()` when a job is aborted before it is run. See `signal`.\n*/\nexport class AbortError extends Error {\n}\n/**\nPromise queue with concurrency control.\n*/\nclass PQueue extends EventEmitter {\n // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n constructor(options) {\n var _a, _b, _c, _d;\n super();\n _PQueue_instances.add(this);\n _PQueue_carryoverConcurrencyCount.set(this, void 0);\n _PQueue_isIntervalIgnored.set(this, void 0);\n _PQueue_intervalCount.set(this, 0);\n _PQueue_intervalCap.set(this, void 0);\n _PQueue_interval.set(this, void 0);\n _PQueue_intervalEnd.set(this, 0);\n _PQueue_intervalId.set(this, void 0);\n _PQueue_timeoutId.set(this, void 0);\n _PQueue_queue.set(this, void 0);\n _PQueue_queueClass.set(this, void 0);\n _PQueue_pending.set(this, 0);\n // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n _PQueue_concurrency.set(this, void 0);\n _PQueue_isPaused.set(this, void 0);\n _PQueue_throwOnTimeout.set(this, void 0);\n /**\n Per-operation timeout in milliseconds. Operations fulfill once `timeout` elapses if they haven't already.\n \n Applies to each future operation.\n */\n Object.defineProperty(this, \"timeout\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n options = {\n carryoverConcurrencyCount: false,\n intervalCap: Number.POSITIVE_INFINITY,\n interval: 0,\n concurrency: Number.POSITIVE_INFINITY,\n autoStart: true,\n queueClass: PriorityQueue,\n ...options,\n };\n if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(_b = (_a = options.intervalCap) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''}\\` (${typeof options.intervalCap})`);\n }\n if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ''}\\` (${typeof options.interval})`);\n }\n __classPrivateFieldSet(this, _PQueue_carryoverConcurrencyCount, options.carryoverConcurrencyCount, \"f\");\n __classPrivateFieldSet(this, _PQueue_isIntervalIgnored, options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0, \"f\");\n __classPrivateFieldSet(this, _PQueue_intervalCap, options.intervalCap, \"f\");\n __classPrivateFieldSet(this, _PQueue_interval, options.interval, \"f\");\n __classPrivateFieldSet(this, _PQueue_queue, new options.queueClass(), \"f\");\n __classPrivateFieldSet(this, _PQueue_queueClass, options.queueClass, \"f\");\n this.concurrency = options.concurrency;\n this.timeout = options.timeout;\n __classPrivateFieldSet(this, _PQueue_throwOnTimeout, options.throwOnTimeout === true, \"f\");\n __classPrivateFieldSet(this, _PQueue_isPaused, options.autoStart === false, \"f\");\n }\n get concurrency() {\n return __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n }\n set concurrency(newConcurrency) {\n if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n }\n __classPrivateFieldSet(this, _PQueue_concurrency, newConcurrency, \"f\");\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n }\n async add(function_, options = {}) {\n options = {\n timeout: this.timeout,\n throwOnTimeout: __classPrivateFieldGet(this, _PQueue_throwOnTimeout, \"f\"),\n ...options,\n };\n return new Promise((resolve, reject) => {\n __classPrivateFieldGet(this, _PQueue_queue, \"f\").enqueue(async () => {\n var _a;\n var _b, _c;\n __classPrivateFieldSet(this, _PQueue_pending, (_b = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _b++, _b), \"f\");\n __classPrivateFieldSet(this, _PQueue_intervalCount, (_c = __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\"), _c++, _c), \"f\");\n try {\n // TODO: Use options.signal?.throwIfAborted() when targeting Node.js 18\n if ((_a = options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n throw new AbortError('The task was aborted.');\n }\n let operation = function_({ signal: options.signal });\n if (options.timeout) {\n operation = pTimeout(Promise.resolve(operation), options.timeout);\n }\n if (options.signal) {\n operation = Promise.race([operation, __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_throwOnAbort).call(this, options.signal)]);\n }\n const result = await operation;\n resolve(result);\n this.emit('completed', result);\n }\n catch (error) {\n if (error instanceof TimeoutError && !options.throwOnTimeout) {\n resolve();\n return;\n }\n reject(error);\n this.emit('error', error);\n }\n finally {\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_next).call(this);\n }\n }, options);\n this.emit('add');\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n });\n }\n async addAll(functions, options) {\n return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n }\n /**\n Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n */\n start() {\n if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n return this;\n }\n __classPrivateFieldSet(this, _PQueue_isPaused, false, \"f\");\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n return this;\n }\n /**\n Put queue execution on hold.\n */\n pause() {\n __classPrivateFieldSet(this, _PQueue_isPaused, true, \"f\");\n }\n /**\n Clear the queue.\n */\n clear() {\n __classPrivateFieldSet(this, _PQueue_queue, new (__classPrivateFieldGet(this, _PQueue_queueClass, \"f\"))(), \"f\");\n }\n /**\n Can be called multiple times. Useful if you for example add additional items at a later time.\n\n @returns A promise that settles when the queue becomes empty.\n */\n async onEmpty() {\n // Instantly resolve if the queue is empty\n if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n return;\n }\n await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'empty');\n }\n /**\n @returns A promise that settles when the queue size is less than the given limit: `queue.size < limit`.\n\n If you want to avoid having the queue grow beyond a certain size you can `await queue.onSizeLessThan()` before adding a new item.\n\n Note that this only limits the number of items waiting to start. There could still be up to `concurrency` jobs already running that this call does not include in its calculation.\n */\n async onSizeLessThan(limit) {\n // Instantly resolve if the queue is empty.\n if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit) {\n return;\n }\n await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'next', () => __classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit);\n }\n /**\n The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n */\n async onIdle() {\n // Instantly resolve if none pending and if nothing else is queued\n if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n return;\n }\n await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'idle');\n }\n /**\n Size of the queue, the number of queued items waiting to run.\n */\n get size() {\n return __classPrivateFieldGet(this, _PQueue_queue, \"f\").size;\n }\n /**\n Size of the queue, filtered by the given options.\n\n For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n */\n sizeBy(options) {\n // eslint-disable-next-line unicorn/no-array-callback-reference\n return __classPrivateFieldGet(this, _PQueue_queue, \"f\").filter(options).length;\n }\n /**\n Number of running items (no longer in the queue).\n */\n get pending() {\n return __classPrivateFieldGet(this, _PQueue_pending, \"f\");\n }\n /**\n Whether the queue is currently paused.\n */\n get isPaused() {\n return __classPrivateFieldGet(this, _PQueue_isPaused, \"f\");\n }\n}\n_PQueue_carryoverConcurrencyCount = new WeakMap(), _PQueue_isIntervalIgnored = new WeakMap(), _PQueue_intervalCount = new WeakMap(), _PQueue_intervalCap = new WeakMap(), _PQueue_interval = new WeakMap(), _PQueue_intervalEnd = new WeakMap(), _PQueue_intervalId = new WeakMap(), _PQueue_timeoutId = new WeakMap(), _PQueue_queue = new WeakMap(), _PQueue_queueClass = new WeakMap(), _PQueue_pending = new WeakMap(), _PQueue_concurrency = new WeakMap(), _PQueue_isPaused = new WeakMap(), _PQueue_throwOnTimeout = new WeakMap(), _PQueue_instances = new WeakSet(), _PQueue_doesIntervalAllowAnother_get = function _PQueue_doesIntervalAllowAnother_get() {\n return __classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") < __classPrivateFieldGet(this, _PQueue_intervalCap, \"f\");\n}, _PQueue_doesConcurrentAllowAnother_get = function _PQueue_doesConcurrentAllowAnother_get() {\n return __classPrivateFieldGet(this, _PQueue_pending, \"f\") < __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n}, _PQueue_next = function _PQueue_next() {\n var _a;\n __classPrivateFieldSet(this, _PQueue_pending, (_a = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _a--, _a), \"f\");\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n this.emit('next');\n}, _PQueue_onResumeInterval = function _PQueue_onResumeInterval() {\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n __classPrivateFieldSet(this, _PQueue_timeoutId, undefined, \"f\");\n}, _PQueue_isIntervalPaused_get = function _PQueue_isIntervalPaused_get() {\n const now = Date.now();\n if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\") === undefined) {\n const delay = __classPrivateFieldGet(this, _PQueue_intervalEnd, \"f\") - now;\n if (delay < 0) {\n // Act as the interval was done\n // We don't need to resume it here because it will be resumed on line 160\n __classPrivateFieldSet(this, _PQueue_intervalCount, (__classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\")) ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n }\n else {\n // Act as the interval is pending\n if (__classPrivateFieldGet(this, _PQueue_timeoutId, \"f\") === undefined) {\n __classPrivateFieldSet(this, _PQueue_timeoutId, setTimeout(() => {\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onResumeInterval).call(this);\n }, delay), \"f\");\n }\n return true;\n }\n }\n return false;\n}, _PQueue_tryToStartAnother = function _PQueue_tryToStartAnother() {\n if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n // We can clear the interval (\"pause\")\n // Because we can redo it later (\"resume\")\n if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n }\n __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n this.emit('empty');\n if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0) {\n this.emit('idle');\n }\n return false;\n }\n if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n const canInitializeInterval = !__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_isIntervalPaused_get);\n if (__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesIntervalAllowAnother_get) && __classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesConcurrentAllowAnother_get)) {\n const job = __classPrivateFieldGet(this, _PQueue_queue, \"f\").dequeue();\n if (!job) {\n return false;\n }\n this.emit('active');\n job();\n if (canInitializeInterval) {\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n }\n return true;\n }\n }\n return false;\n}, _PQueue_initializeIntervalIfNeeded = function _PQueue_initializeIntervalIfNeeded() {\n if (__classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalId, \"f\") !== undefined) {\n return;\n }\n __classPrivateFieldSet(this, _PQueue_intervalId, setInterval(() => {\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n }, __classPrivateFieldGet(this, _PQueue_interval, \"f\")), \"f\");\n __classPrivateFieldSet(this, _PQueue_intervalEnd, Date.now() + __classPrivateFieldGet(this, _PQueue_interval, \"f\"), \"f\");\n}, _PQueue_onInterval = function _PQueue_onInterval() {\n if (__classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n }\n __classPrivateFieldSet(this, _PQueue_intervalCount, __classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\") ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n}, _PQueue_processQueue = function _PQueue_processQueue() {\n // eslint-disable-next-line no-empty\n while (__classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this)) { }\n}, _PQueue_throwOnAbort = async function _PQueue_throwOnAbort(signal) {\n return new Promise((_resolve, reject) => {\n signal.addEventListener('abort', () => {\n // TODO: Reject with signal.throwIfAborted() when targeting Node.js 18\n // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n reject(new AbortError('The task was aborted.'));\n }, { once: true });\n });\n}, _PQueue_onEvent = async function _PQueue_onEvent(event, filter) {\n return new Promise(resolve => {\n const listener = () => {\n if (filter && !filter()) {\n return;\n }\n this.off(event, listener);\n resolve();\n };\n this.on(event, listener);\n });\n};\nexport default PQueue;\n","import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n","export class TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\n/**\nAn error to be thrown when the request is aborted by AbortController.\nDOMException is thrown instead of this Error when DOMException is available.\n*/\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\n/**\nTODO: Remove AbortError and just throw DOMException when targeting Node 18.\n*/\nconst getDOMException = errorMessage => globalThis.DOMException === undefined ?\n\tnew AbortError(errorMessage) :\n\tnew DOMException(errorMessage);\n\n/**\nTODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.\n*/\nconst getAbortedReason = signal => {\n\tconst reason = signal.reason === undefined ?\n\t\tgetDOMException('This operation was aborted.') :\n\t\tsignal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, milliseconds, fallback, options) {\n\tlet timer;\n\n\tconst cancelablePromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {\n\t\t\tthrow new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${milliseconds}\\``);\n\t\t}\n\n\t\tif (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tresolve(promise);\n\t\t\treturn;\n\t\t}\n\n\t\toptions = {\n\t\t\tcustomTimers: {setTimeout, clearTimeout},\n\t\t\t...options\n\t\t};\n\n\t\tif (options.signal) {\n\t\t\tconst {signal} = options;\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t});\n\t\t}\n\n\t\ttimer = options.customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (typeof fallback === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\treject(timeoutError);\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\toptions.customTimers.clearTimeout.call(undefined, timer);\n\t\t\t}\n\t\t})();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tclearTimeout(timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n}\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PriorityQueue_queue;\nimport lowerBound from './lower-bound.js';\nclass PriorityQueue {\n constructor() {\n _PriorityQueue_queue.set(this, []);\n }\n enqueue(run, options) {\n options = {\n priority: 0,\n ...options,\n };\n const element = {\n priority: options.priority,\n run,\n };\n if (this.size && __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\")[this.size - 1].priority >= options.priority) {\n __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").push(element);\n return;\n }\n const index = lowerBound(__classPrivateFieldGet(this, _PriorityQueue_queue, \"f\"), element, (a, b) => b.priority - a.priority);\n __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").splice(index, 0, element);\n }\n dequeue() {\n const item = __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").shift();\n return item === null || item === void 0 ? void 0 : item.run;\n }\n filter(options) {\n return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").filter((element) => element.priority === options.priority).map((element) => element.run);\n }\n get size() {\n return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").length;\n }\n}\n_PriorityQueue_queue = new WeakMap();\nexport default PriorityQueue;\n","// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nexport default function lowerBound(array, value, comparator) {\n let first = 0;\n let count = array.length;\n while (count > 0) {\n const step = Math.trunc(count / 2);\n let it = first + step;\n if (comparator(array[it], value) <= 0) {\n first = ++it;\n count -= step + 1;\n }\n else {\n count = step;\n }\n }\n return first;\n}\n","import path from 'path'\n\nimport { trimExtName } from './transformers/trim.ts'\nimport { TreeNode } from './utils/TreeNode.ts'\n\nimport type { DirectoryTreeOptions } from 'directory-tree'\nimport type { KubbFile } from './FileManager.ts'\nimport type { KubbPlugin } from './index.ts'\n\ntype FileMeta = {\n pluginKey?: KubbPlugin['key']\n treeNode: TreeNode\n}\n\nexport type BarrelManagerOptions = {\n treeNode?: DirectoryTreeOptions\n isTypeOnly?: boolean\n /**\n * Add .ts or .js\n */\n extName?: KubbFile.Extname\n}\n\nexport class BarrelManager {\n #options: BarrelManagerOptions\n\n constructor(options: BarrelManagerOptions = {}) {\n this.#options = options\n\n return this\n }\n\n getIndexes(\n pathToBuild: string,\n ): Array<KubbFile.File<FileMeta>> | null {\n const { treeNode = {}, isTypeOnly, extName } = this.#options\n const tree = TreeNode.build(pathToBuild, treeNode)\n\n if (!tree) {\n return null\n }\n\n const fileReducer = (files: Array<KubbFile.File<FileMeta>>, treeNode: TreeNode) => {\n if (!treeNode.children) {\n return []\n }\n\n if (treeNode.children.length > 1) {\n const indexPath: KubbFile.Path = path.resolve(treeNode.data.path, 'index.ts')\n\n const exports: KubbFile.Export[] = treeNode.children\n .filter(Boolean)\n .map((file) => {\n const importPath: string = file.data.type === 'directory' ? `./${file.data.name}/index` : `./${trimExtName(file.data.name)}`\n\n if (importPath.endsWith('index') && file.data.type === 'file') {\n return undefined\n }\n\n return {\n path: extName ? `${importPath}${extName}` : importPath,\n isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n\n files.push({\n path: indexPath,\n baseName: 'index.ts',\n source: '',\n exports,\n meta: {\n treeNode,\n },\n })\n } else if (treeNode.children.length === 1) {\n const [treeNodeChild] = treeNode.children as [TreeNode]\n\n const indexPath = path.resolve(treeNode.data.path, 'index.ts')\n const importPath = treeNodeChild.data.type === 'directory'\n ? `./${treeNodeChild.data.name}/index`\n : `./${trimExtName(treeNodeChild.data.name)}`\n\n const exports = [\n {\n path: extName\n ? `${importPath}${extName}`\n : importPath,\n isTypeOnly,\n },\n ]\n\n files.push({\n path: indexPath,\n baseName: 'index.ts',\n source: '',\n exports,\n meta: {\n treeNode,\n },\n })\n }\n\n treeNode.children.forEach((childItem) => {\n fileReducer(files, childItem)\n })\n\n return files\n }\n\n return fileReducer([], tree).reverse()\n }\n}\n","import dirTree from 'directory-tree'\n\nimport { FileManager } from '../FileManager.ts'\n\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\nimport type { KubbFile } from '../FileManager.ts'\n\nexport type TreeNodeOptions = DirectoryTreeOptions\n\ntype BarrelData = { type: KubbFile.Mode; path: KubbFile.Path; name: string }\n\nexport class TreeNode<T = BarrelData> {\n public data: T\n\n public parent?: TreeNode<T>\n\n public children: Array<TreeNode<T>> = []\n\n constructor(data: T, parent?: TreeNode<T>) {\n this.data = data\n this.parent = parent\n return this\n }\n\n addChild(data: T): TreeNode<T> {\n const child = new TreeNode(data, this)\n if (!this.children) {\n this.children = []\n }\n this.children.push(child)\n return child\n }\n\n find(data?: T): TreeNode<T> | null {\n if (!data) {\n return null\n }\n\n if (data === this.data) {\n return this\n }\n\n if (this.children?.length) {\n for (let i = 0, { length } = this.children, target: TreeNode<T> | null = null; i < length; i++) {\n target = this.children[i]!.find(data)\n if (target) {\n return target\n }\n }\n }\n\n return null\n }\n\n get leaves(): TreeNode<T>[] {\n if (!this.children || this.children.length === 0) {\n // this is a leaf\n return [this]\n }\n\n // if not a leaf, return all children's leaves recursively\n const leaves: TreeNode<T>[] = []\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n // eslint-disable-next-line prefer-spread\n leaves.push.apply(leaves, this.children[i]!.leaves)\n }\n }\n return leaves\n }\n\n get root(): TreeNode<T> {\n if (!this.parent) {\n return this\n }\n return this.parent.root\n }\n\n forEach(callback: (treeNode: TreeNode<T>) => void): this {\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n // run this node through function\n callback(this)\n\n // do the same for all children\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n this.children[i]!.forEach(callback)\n }\n }\n\n return this\n }\n\n public static build(path: string, options: TreeNodeOptions = {}): TreeNode | null {\n try {\n const exclude = Array.isArray(options.exclude) ? options.exclude : [options.exclude].filter(Boolean)\n const filteredTree = dirTree(path, { extensions: options.extensions, exclude: [/node_modules/, ...exclude] })\n\n if (!filteredTree) {\n return null\n }\n\n const treeNode = new TreeNode({ name: filteredTree.name, path: filteredTree.path, type: filteredTree.type || FileManager.getMode(filteredTree.path) })\n\n const recurse = (node: typeof treeNode, item: DirectoryTree) => {\n const subNode = node.addChild({ name: item.name, path: item.path, type: item.type || FileManager.getMode(item.path) })\n\n if (item.children?.length) {\n item.children?.forEach((child) => {\n recurse(subNode, child)\n })\n }\n }\n\n filteredTree.children?.forEach((child) => recurse(treeNode, child))\n\n return treeNode\n } catch (e) {\n throw new Error('Something went wrong with creating index files with the TreehNode class', { cause: e })\n }\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types, @typescript-eslint/no-unsafe-argument */\n\nimport PQueue from 'p-queue'\n\nimport { transformReservedWord } from './transformers/transformReservedWord.ts'\nimport { EventEmitter } from './utils/EventEmitter.ts'\nimport { setUniqueName } from './utils/uniqueName.ts'\nimport { ValidationPluginError } from './errors.ts'\nimport { FileManager } from './FileManager.ts'\nimport { LogLevel } from './logger.ts'\nimport { definePlugin as defineCorePlugin } from './plugin.ts'\nimport { isPromise, isPromiseRejectedResult } from './PromiseManager.ts'\nimport { PromiseManager } from './PromiseManager.ts'\n\nimport type { PossiblePromise } from '@kubb/types'\nimport type { KubbFile } from './FileManager.ts'\nimport type { Logger } from './logger.ts'\nimport type { CorePluginOptions } from './plugin.ts'\nimport type {\n GetPluginFactoryOptions,\n KubbConfig,\n KubbPlugin,\n KubbPluginWithLifeCycle,\n KubbUserPlugin,\n KubbUserPluginWithLifeCycle,\n PluginFactoryOptions,\n PluginLifecycle,\n PluginLifecycleHooks,\n PluginParameter,\n ResolveNameParams,\n ResolvePathParams,\n} from './types.ts'\n\ntype RequiredPluginLifecycle = Required<PluginLifecycle>\n\n/**\n * Get the type of the first argument in a function.\n * @example Arg0<(a: string, b: number) => void> -> string\n */\ntype Argument0<H extends keyof PluginLifecycle> = Parameters<RequiredPluginLifecycle[H]>[0]\n\ntype Strategy = 'hookFirst' | 'hookForPlugin' | 'hookParallel' | 'hookReduceArg0' | 'hookSeq'\n\ntype Executer<H extends PluginLifecycleHooks = PluginLifecycleHooks> = {\n strategy: Strategy\n hookName: H\n plugin: KubbPlugin\n parameters?: unknown[] | undefined\n output?: unknown\n}\n\ntype ParseResult<H extends PluginLifecycleHooks> = RequiredPluginLifecycle[H]\n\ntype SafeParseResult<H extends PluginLifecycleHooks, Result = ReturnType<ParseResult<H>>> = {\n result: Result\n plugin: KubbPlugin\n}\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\ntype Options = {\n logger: Logger\n\n /**\n * Task for the FileManager\n */\n task: (file: KubbFile.ResolvedFile) => Promise<KubbFile.ResolvedFile>\n}\n\ntype Events = {\n execute: [executer: Executer]\n executed: [executer: Executer]\n error: [error: Error]\n}\n\nexport class PluginManager {\n readonly plugins: KubbPluginWithLifeCycle[]\n readonly fileManager: FileManager\n readonly events: EventEmitter<Events> = new EventEmitter()\n\n readonly config: KubbConfig\n\n readonly executed: Array<Executer> = []\n readonly logger: Logger\n readonly #core: KubbPlugin<CorePluginOptions>\n\n readonly #usedPluginNames: Record<string, number> = {}\n readonly #promiseManager: PromiseManager\n\n readonly queue: PQueue\n\n constructor(config: KubbConfig, options: Options) {\n this.config = config\n this.logger = options.logger\n this.queue = new PQueue({ concurrency: 1 })\n this.fileManager = new FileManager({ task: options.task, queue: this.queue })\n this.#promiseManager = new PromiseManager({ nullCheck: (state: SafeParseResult<'resolveName'> | null) => !!state?.result })\n\n const plugins = config.plugins || []\n\n const core = defineCorePlugin({\n config,\n logger: this.logger,\n pluginManager: this,\n fileManager: this.fileManager,\n resolvePath: this.resolvePath.bind(this),\n resolveName: this.resolveName.bind(this),\n getPlugins: this.#getSortedPlugins.bind(this),\n })\n\n // call core.api.call with empty context so we can transform `api()` to `api: {}`\n this.#core = this.#parse(core as unknown as KubbUserPlugin, this as any, core.api.call(null as any)) as KubbPlugin<CorePluginOptions>\n\n this.plugins = [this.#core, ...plugins].map((plugin) => {\n return this.#parse(plugin as KubbUserPlugin, this, this.#core.api)\n })\n\n return this\n }\n\n resolvePath = <TOptions = object>(params: ResolvePathParams<TOptions>): KubbFile.OptionalPath => {\n if (params.pluginKey) {\n const paths = this.hookForPluginSync({\n pluginKey: params.pluginKey,\n hookName: 'resolvePath',\n parameters: [params.baseName, params.directory, params.options as object],\n })\n\n if (paths && paths?.length > 1 && this.logger.logLevel === LogLevel.debug) {\n this.logger.debug(\n `Cannot return a path where the 'pluginKey' ${params.pluginKey ? JSON.stringify(params.pluginKey) : '\"'} is not unique enough\\n\\nPaths: ${\n JSON.stringify(paths, undefined, 2)\n }\\n\\nFalling back on the first item.\\n`,\n )\n }\n\n return paths?.at(0)\n }\n return this.hookFirstSync({\n hookName: 'resolvePath',\n parameters: [params.baseName, params.directory, params.options as object],\n }).result\n }\n resolveName = (params: ResolveNameParams): string => {\n if (params.pluginKey) {\n const names = this.hookForPluginSync({\n pluginKey: params.pluginKey,\n hookName: 'resolveName',\n parameters: [params.name, params.type],\n })\n\n if (names && names?.length > 1 && this.logger.logLevel === LogLevel.debug) {\n this.logger.debug(\n `Cannot return a name where the 'pluginKey' ${params.pluginKey ? JSON.stringify(params.pluginKey) : '\"'} is not unique enough\\n\\nNames: ${\n JSON.stringify(names, undefined, 2)\n }\\n\\nFalling back on the first item.\\n`,\n )\n }\n\n return transformReservedWord(names?.at(0) || params.name)\n }\n\n const name = this.hookFirstSync({\n hookName: 'resolveName',\n parameters: [params.name, params.type],\n }).result\n\n return transformReservedWord(name)\n }\n\n /**\n * Instead of calling `pluginManager.events.on` you can use `pluginManager.on`. This one also has better types.\n */\n on<TEventName extends keyof Events & string>(eventName: TEventName, handler: (...eventArg: Events[TEventName]) => void): void {\n this.events.on(eventName, handler as any)\n }\n\n /**\n * Run a specific hookName for plugin x.\n */\n hookForPlugin<H extends PluginLifecycleHooks>({\n pluginKey,\n hookName,\n parameters,\n }: {\n pluginKey: KubbPlugin['key']\n hookName: H\n parameters: PluginParameter<H>\n }): Promise<Array<ReturnType<ParseResult<H>> | null>> | null {\n const plugins = this.getPluginsByKey(hookName, pluginKey)\n\n const promises = plugins\n .map((plugin) => {\n return this.#execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n })\n .filter(Boolean)\n\n return Promise.all(promises)\n }\n /**\n * Run a specific hookName for plugin x.\n */\n\n hookForPluginSync<H extends PluginLifecycleHooks>({\n pluginKey,\n hookName,\n parameters,\n }: {\n pluginKey: KubbPlugin['key']\n hookName: H\n parameters: PluginParameter<H>\n }): Array<ReturnType<ParseResult<H>>> | null {\n const plugins = this.getPluginsByKey(hookName, pluginKey)\n\n return plugins\n .map((plugin) => {\n return this.#executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n })\n .filter(Boolean)\n }\n\n /**\n * First non-null result stops and will return it's value.\n */\n async hookFirst<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n skipped?: ReadonlySet<KubbPlugin> | null\n }): Promise<SafeParseResult<H>> {\n const promises = this.#getSortedPlugins().filter(plugin => {\n return skipped ? skipped.has(plugin) : true\n }).map((plugin) => {\n return async () => {\n const value = await this.#execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n\n return Promise.resolve(\n {\n plugin,\n result: value,\n } as SafeParseResult<H>,\n )\n }\n })\n\n return this.#promiseManager.run('first', promises)\n }\n\n /**\n * First non-null result stops and will return it's value.\n */\n hookFirstSync<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n skipped?: ReadonlySet<KubbPlugin> | null\n }): SafeParseResult<H> {\n let parseResult: SafeParseResult<H> = null as unknown as SafeParseResult<H>\n\n for (const plugin of this.#getSortedPlugins()) {\n if (skipped && skipped.has(plugin)) {\n continue\n }\n\n parseResult = {\n result: this.#executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n }),\n plugin,\n } as SafeParseResult<H>\n\n if (parseResult?.result != null) {\n break\n }\n }\n return parseResult\n }\n\n /**\n * Run all plugins in parallel(order will be based on `this.plugin` and if `pre` or `post` is set).\n */\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>({\n hookName,\n parameters,\n }: {\n hookName: H\n parameters?: Parameters<RequiredPluginLifecycle[H]> | undefined\n }): Promise<Awaited<TOuput>[]> {\n const promises = this.#getSortedPlugins().map((plugin) => {\n return () => this.#execute({ strategy: 'hookParallel', hookName, parameters, plugin }) as Promise<TOuput>\n })\n\n const results = await this.#promiseManager.run('parallel', promises)\n\n results\n .forEach((result, index) => {\n if (isPromiseRejectedResult<Error>(result)) {\n const plugin = this.#getSortedPlugins()[index]\n\n this.#catcher<H>(result.reason, plugin, hookName)\n }\n })\n\n return results.filter((result) => result.status === 'fulfilled').map((result) => (result as PromiseFulfilledResult<Awaited<TOuput>>).value)\n }\n\n /**\n * Chain all plugins, `reduce` can be passed through to handle every returned value. The return value of the first plugin will be used as the first parameter for the plugin after that.\n */\n hookReduceArg0<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n reduce,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n reduce: (reduction: Argument0<H>, result: ReturnType<ParseResult<H>>, plugin: KubbPlugin) => PossiblePromise<Argument0<H> | null>\n }): Promise<Argument0<H>> {\n const [argument0, ...rest] = parameters\n\n let promise: Promise<Argument0<H>> = Promise.resolve(argument0)\n for (const plugin of this.#getSortedPlugins()) {\n promise = promise\n .then((arg0) => {\n const value = this.#execute({\n strategy: 'hookReduceArg0',\n hookName,\n parameters: [arg0, ...rest] as PluginParameter<H>,\n plugin,\n })\n return value\n })\n .then((result) => reduce.call(this.#core.api, argument0, result as ReturnType<ParseResult<H>>, plugin)) as Promise<Argument0<H>>\n }\n\n return promise\n }\n\n /**\n * Chains plugins\n */\n async hookSeq<H extends PluginLifecycleHooks>({ hookName, parameters }: { hookName: H; parameters?: PluginParameter<H> }): Promise<void> {\n const promises = this.#getSortedPlugins().map((plugin) => {\n return () =>\n this.#execute({\n strategy: 'hookSeq',\n hookName,\n parameters,\n plugin,\n })\n })\n\n return this.#promiseManager.run('seq', promises)\n }\n\n #getSortedPlugins(hookName?: keyof PluginLifecycle): KubbPlugin[] {\n const plugins = [...this.plugins].filter((plugin) => plugin.name !== 'core')\n\n if (hookName) {\n if (this.logger.logLevel === LogLevel.info) {\n const containsHookName = plugins.some((item) => item[hookName])\n if (!containsHookName) {\n this.logger.warn(`No hook ${hookName} found`)\n }\n }\n\n return plugins.filter((item) => item[hookName])\n }\n // TODO add test case for sorting with pre/post\n\n return plugins.map(plugin => {\n if (plugin.pre) {\n const isValid = plugin.pre.every(pluginName => plugins.find(pluginToFind => pluginToFind.name === pluginName))\n\n if (!isValid) {\n throw new ValidationPluginError(`This plugin has a pre set that is not valid(${JSON.stringify(plugin.pre, undefined, 2)})`)\n }\n }\n\n return plugin\n }).sort((a, b) => {\n if (b.pre?.includes(a.name)) {\n return 1\n }\n if (b.post?.includes(a.name)) {\n return -1\n }\n return 0\n })\n }\n\n getPluginsByKey(hookName: keyof PluginLifecycle, pluginKey: KubbPlugin['key']): KubbPlugin[] {\n const plugins = [...this.plugins]\n const [searchPluginName, searchIdentifier] = pluginKey\n\n const pluginByPluginName = plugins\n .filter((plugin) => plugin[hookName])\n .filter((item) => {\n const [name, identifier] = item.key\n\n const identifierCheck = identifier?.toString() === searchIdentifier?.toString()\n const nameCheck = name === searchPluginName\n\n if (searchIdentifier) {\n return identifierCheck && nameCheck\n }\n\n return nameCheck\n })\n\n if (!pluginByPluginName?.length) {\n // fallback on the core plugin when there is no match\n\n const corePlugin = plugins.find((plugin) => plugin.name === 'core' && plugin[hookName])\n\n if (this.logger.logLevel === LogLevel.debug) {\n if (corePlugin) {\n this.logger.debug(`No hook '${hookName}' for pluginKey '${JSON.stringify(pluginKey)}' found, falling back on the '@kubb/core' plugin`)\n } else {\n this.logger.debug(`No hook '${hookName}' for pluginKey '${JSON.stringify(pluginKey)}' found, no fallback found in the '@kubb/core' plugin`)\n }\n }\n\n return corePlugin ? [corePlugin] : []\n }\n\n return pluginByPluginName\n }\n\n #addExecutedToCallStack(executer: Executer | undefined) {\n if (executer) {\n this.events.emit('executed', executer)\n this.executed.push(executer)\n }\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n #execute<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: unknown[] | undefined\n plugin: KubbPluginWithLifeCycle\n }): Promise<ReturnType<ParseResult<H>> | null> | null {\n const hook = plugin[hookName]\n let output: unknown\n\n if (!hook) {\n return null\n }\n\n this.events.emit('execute', { strategy, hookName, parameters, plugin })\n\n const task = Promise.resolve()\n .then(() => {\n if (typeof hook === 'function') {\n const possiblePromiseResult = (hook as Function).apply({ ...this.#core.api, plugin }, parameters) as Promise<ReturnType<ParseResult<H>>>\n\n if (isPromise(possiblePromiseResult)) {\n return Promise.resolve(possiblePromiseResult)\n }\n return possiblePromiseResult\n }\n\n return hook\n })\n .then((result) => {\n output = result\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n })\n\n return result\n })\n .catch((e: Error) => {\n this.#catcher<H>(e, plugin, hookName)\n\n return null\n })\n\n return task\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n #executeSync<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: PluginParameter<H>\n plugin: KubbPluginWithLifeCycle\n }): ReturnType<ParseResult<H>> | null {\n const hook = plugin[hookName]\n let output: unknown\n\n if (!hook) {\n return null\n }\n\n this.events.emit('execute', { strategy, hookName, parameters, plugin })\n\n try {\n if (typeof hook === 'function') {\n const fn = (hook as Function).apply({ ...this.#core.api, plugin }, parameters) as ReturnType<ParseResult<H>>\n\n output = fn\n return fn\n }\n\n output = hook\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n })\n\n return hook\n } catch (e) {\n this.#catcher<H>(e as Error, plugin, hookName)\n\n return null\n }\n }\n\n #catcher<H extends PluginLifecycleHooks>(e: Error, plugin?: KubbPlugin, hookName?: H) {\n const text = `${e.message} (plugin: ${plugin?.name || 'unknown'}, hook: ${hookName || 'unknown'})\\n`\n\n this.logger.error(text)\n this.events.emit('error', e)\n }\n\n #parse<TPlugin extends KubbUserPluginWithLifeCycle>(\n plugin: TPlugin,\n pluginManager: PluginManager,\n context: CorePluginOptions['api'] | undefined,\n ): KubbPlugin<GetPluginFactoryOptions<TPlugin>> {\n const usedPluginNames = pluginManager.#usedPluginNames\n\n setUniqueName(plugin.name, usedPluginNames)\n\n const key = [plugin.name, usedPluginNames[plugin.name]].filter(Boolean) as [typeof plugin.name, string]\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n if (plugin.api && typeof plugin.api === 'function') {\n const api = (plugin.api as Function).call(context) as typeof plugin.api\n\n return {\n ...plugin,\n key,\n api,\n } as unknown as KubbPlugin<GetPluginFactoryOptions<TPlugin>>\n }\n\n return {\n ...plugin,\n key,\n } as unknown as KubbPlugin<GetPluginFactoryOptions<TPlugin>>\n }\n\n static getDependedPlugins<\n T1 extends PluginFactoryOptions,\n T2 extends PluginFactoryOptions = never,\n T3 extends PluginFactoryOptions = never,\n TOutput = T3 extends never ? T2 extends never ? [T1: KubbPlugin<T1>]\n : [T1: KubbPlugin<T1>, T2: KubbPlugin<T2>]\n : [T1: KubbPlugin<T1>, T2: KubbPlugin<T2>, T3: KubbPlugin<T3>],\n >(plugins: Array<KubbPlugin>, dependedPluginNames: string | string[]): TOutput {\n let pluginNames: string[] = []\n if (typeof dependedPluginNames === 'string') {\n pluginNames = [dependedPluginNames]\n } else {\n pluginNames = dependedPluginNames\n }\n\n return pluginNames.map((pluginName) => {\n const plugin = plugins.find((plugin) => plugin.name === pluginName)\n if (!plugin) {\n throw new ValidationPluginError(`This plugin depends on the ${pluginName} plugin.`)\n }\n return plugin\n }) as TOutput\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n static get hooks() {\n return ['buildStart', 'resolvePath', 'resolveName', 'load', 'transform', 'writeFile', 'buildEnd'] as const\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { EventEmitter as NodeEventEmitter } from 'node:events'\n\nexport class EventEmitter<TEvents extends Record<string, any>> {\n constructor() {\n this.#emitter.setMaxListeners(100)\n }\n #emitter = new NodeEventEmitter()\n\n emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArg: TEvents[TEventName]): void {\n this.#emitter.emit(eventName, ...(eventArg as []))\n }\n\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.on(eventName, handler as any)\n }\n\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.off(eventName, handler as any)\n }\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","/**\n * Behaves as an Error to log a warning in the console(still stops the execution)\n */\nexport class Warning extends Error {\n constructor(message?: string, options?: { cause: Error }) {\n super(message, { cause: options?.cause })\n\n this.name = 'Warning'\n }\n}\n\nexport class ValidationPluginError extends Error {}\n","import path from 'node:path'\n\nimport { createPluginCache } from './utils/cache.ts'\n\nimport type { FileManager } from './FileManager.ts'\nimport type { PluginManager } from './PluginManager.ts'\nimport type { KubbPlugin, KubbUserPluginWithLifeCycle, PluginContext, PluginFactoryOptions } from './types.ts'\n\ntype KubbPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => KubbUserPluginWithLifeCycle<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: KubbPluginFactory<T>) {\n return (options: T['options']): ReturnType<KubbPluginFactory<T>> => {\n return factory(options)\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n pluginManager: PluginManager\n resolvePath: PluginContext['resolvePath']\n resolveName: PluginContext['resolveName']\n logger: PluginContext['logger']\n getPlugins: () => Array<KubbPlugin>\n plugin?: PluginContext['plugin']\n}\n\n// not publicly exported\nexport type CorePluginOptions = PluginFactoryOptions<'core', Options, Options, PluginContext, never>\n\nexport const pluginName = 'core' satisfies CorePluginOptions['name']\nexport const pluginKey: CorePluginOptions['key'] = [pluginName] satisfies CorePluginOptions['key']\n\nexport const definePlugin = createPlugin<CorePluginOptions>((options) => {\n const { fileManager, pluginManager, resolvePath, resolveName, logger } = options\n\n return {\n name: pluginName,\n options,\n key: ['core'],\n\n api() {\n return {\n get config() {\n return options.config\n },\n get plugins() {\n return options.getPlugins()\n },\n get plugin() {\n // see pluginManger.#execute where we override with `.call` the this with the correct plugin\n return options.plugin as NonNullable<Options['plugin']>\n },\n logger,\n fileManager,\n pluginManager,\n async addFile(...files) {\n const resolvedFiles = await fileManager.add(...files)\n\n if (!Array.isArray(resolvedFiles)) {\n return [resolvedFiles]\n }\n\n return resolvedFiles\n },\n resolvePath,\n resolveName,\n cache: createPluginCache(),\n }\n },\n resolvePath(baseName) {\n const root = path.resolve(this.config.root, this.config.output.path)\n\n return path.resolve(root, baseName)\n },\n resolveName(name) {\n return name\n },\n }\n})\n","import type { PluginCache } from '../types.ts'\n\nexport interface Cache<TStore extends object = object> {\n delete(id: keyof TStore): boolean\n get(id: keyof TStore): TStore[keyof TStore] | null\n has(id: keyof TStore): boolean\n set(id: keyof TStore, value: unknown): void\n}\n\nexport function createPluginCache<TStore extends PluginCache>(Store: TStore = Object.create(null) as TStore): Cache<TStore> {\n return {\n set(id, value): void {\n Store[id] = [0, value] as TStore[keyof TStore]\n },\n get(id): TStore[keyof TStore] | null {\n const item = Store[id]\n if (!item) {\n return null\n }\n item[0] = 0\n return item[1] as TStore[keyof TStore]\n },\n has(id): boolean {\n const item = Store[id]\n if (!item) {\n return false\n }\n item[0] = 0\n return true\n },\n delete(id: keyof TStore): boolean {\n return delete Store[id]\n },\n }\n}\n","import { hookFirst, hookParallel, hookSeq } from './utils/executeStrategies.ts'\n\nimport type { PossiblePromise } from '@kubb/types'\nimport type { Strategy, StrategySwitch } from './utils/executeStrategies.ts'\n\ntype PromiseFunc<T = unknown, T2 = never> = () => T2 extends never ? Promise<T> : Promise<T> | T2\n\ntype Options<TState = any> = {\n nullCheck?: (state: TState) => boolean\n}\n\nexport class PromiseManager<TState = any> {\n #options: Options<TState> = {}\n\n constructor(options: Options<TState> = {}) {\n this.#options = options\n\n return this\n }\n\n run<TInput extends Array<PromiseFunc<TValue, null>>, TValue, TStrategy extends Strategy, TOutput = StrategySwitch<TStrategy, TInput, TValue>>(\n strategy: TStrategy,\n promises: TInput,\n ): TOutput {\n if (strategy === 'seq') {\n return hookSeq<TInput, TValue, TOutput>(promises)\n }\n\n if (strategy === 'first') {\n return hookFirst<TInput, TValue, TOutput>(promises, this.#options.nullCheck)\n }\n\n if (strategy === 'parallel') {\n return hookParallel<TInput, TValue, TOutput>(promises)\n }\n\n throw new Error(`${strategy} not implemented`)\n }\n}\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","/* eslint-disable unused-imports/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-unused-vars */\ntype PromiseFunc<T = unknown, T2 = never> = (state?: T) => T2 extends never ? Promise<T> : Promise<T> | T2\n\nexport type ValueOfPromiseFuncArray<TInput extends Array<unknown>> = TInput extends Array<PromiseFunc<infer X, infer Y>> ? X | Y : never\n\nexport function noReturn(): void {}\n\ntype SeqOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue> = Array<Awaited<ValueOfPromiseFuncArray<TInput>>>\n\n/**\n * Chains promises\n */\nexport function hookSeq<TInput extends Array<PromiseFunc<TValue, null>>, TValue, TOutput = SeqOutput<TInput, TValue>>(\n promises: TInput,\n): TOutput {\n return promises.filter(Boolean).reduce(\n (promise, func) => {\n if (typeof func !== 'function') {\n throw new Error('HookSeq needs a function that returns a promise `() => Promise<unknown>`')\n }\n\n return promise.then((state) => {\n const calledFunc = func(state as TValue)\n\n if (calledFunc) {\n return calledFunc.then(Array.prototype.concat.bind(state))\n }\n })\n },\n Promise.resolve([] as unknown),\n ) as TOutput\n}\n\ntype HookFirstOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown> = ValueOfPromiseFuncArray<TInput>\n\n/**\n * Chains promises, first non-null result stops and returns\n */\nexport function hookFirst<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown, TOutput = HookFirstOutput<TInput, TValue>>(\n promises: TInput,\n nullCheck = (state: any) => state !== null,\n): TOutput {\n let promise: Promise<unknown> = Promise.resolve(null) as Promise<unknown>\n\n for (const func of promises.filter(Boolean)) {\n promise = promise.then((state) => {\n if (nullCheck(state)) {\n return state\n }\n\n const calledFunc = func(state as TValue)\n\n return calledFunc\n })\n }\n\n return promise as TOutput\n}\n\ntype HookParallelOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue> = Promise<PromiseSettledResult<Awaited<ValueOfPromiseFuncArray<TInput>>>[]>\n\n/**\n * Run promises in parallel with allSettled\n */\nexport function hookParallel<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown, TOutput = HookParallelOutput<TInput, TValue>>(\n promises: TInput,\n): TOutput {\n return Promise.allSettled(promises.filter(Boolean).map(promise => promise())) as TOutput\n}\n\nexport type Strategy = 'seq' | 'first' | 'parallel'\n\nexport type StrategySwitch<TStrategy extends Strategy, TInput extends Array<PromiseFunc<TValue, null>>, TValue> = TStrategy extends 'first'\n ? HookFirstOutput<TInput, TValue>\n : TStrategy extends 'seq' ? SeqOutput<TInput, TValue>\n : TStrategy extends 'parallel' ? HookParallelOutput<TInput, TValue>\n : never\n\n// tests\n\ntype test = ValueOfPromiseFuncArray<Array<PromiseFunc<number, null>>>\n// ^?\n","/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class Generator<TOptions = unknown, TContext = unknown> {\n #options: TOptions = {} as TOptions\n #context: TContext = {} as TContext\n\n constructor(options?: TOptions, context?: TContext) {\n if (context) {\n this.#context = context\n }\n\n if (options) {\n this.#options = options\n }\n\n return this\n }\n\n get options(): TOptions {\n return this.#options\n }\n\n get context(): TContext {\n return this.#context\n }\n\n set options(options: TOptions) {\n this.#options = { ...this.#options, ...options }\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import mod from 'node:module'\nimport os from 'node:os'\nimport { pathToFileURL } from 'node:url'\n\nimport { findUp, findUpSync } from 'find-up'\nimport { coerce, satisfies } from 'semver'\n\ntype PackageJSON = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}\n\ntype DependencyName = string\n\ntype DependencyVersion = string\n\nexport class PackageManager {\n static #cache: Record<DependencyName, DependencyVersion> = {}\n\n #cwd?: string\n #SLASHES = new Set(['/', '\\\\'])\n constructor(workspace?: string) {\n if (workspace) {\n this.#cwd = workspace\n }\n\n return this\n }\n\n set workspace(workspace: string) {\n this.#cwd = workspace\n }\n\n get workspace(): string | undefined {\n return this.#cwd\n }\n\n normalizeDirectory(directory: string): string {\n if (!this.#SLASHES.has(directory[directory.length - 1]!)) {\n return `${directory}/`\n }\n\n return directory\n }\n\n getLocation(path: string): string {\n let location = path\n\n if (this.#cwd) {\n const require = mod.createRequire(this.normalizeDirectory(this.#cwd))\n location = require.resolve(path)\n }\n\n return location\n }\n\n async import(path: string): Promise<any | undefined> {\n try {\n let location = this.getLocation(path)\n\n if (os.platform() == 'win32') {\n location = pathToFileURL(location).href\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const module = await import(location)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n return module?.default ?? module\n } catch (e) {\n console.log(e)\n return undefined\n }\n }\n\n async getPackageJSON(): Promise<PackageJSON | undefined> {\n const pkgPath = await findUp(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n return require(pkgPath) as PackageJSON\n }\n\n getPackageJSONSync(): PackageJSON | undefined {\n const pkgPath = findUpSync(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n return require(pkgPath) as PackageJSON\n }\n\n static setVersion(dependency: DependencyName, version: DependencyVersion): void {\n PackageManager.#cache[dependency] = version\n }\n\n #match(packageJSON: PackageJSON, dependency: DependencyName | RegExp): string | undefined {\n const dependencies = {\n ...packageJSON['dependencies'] || {},\n ...packageJSON['devDependencies'] || {},\n }\n\n if (typeof dependency === 'string' && dependencies[dependency]) {\n return dependencies[dependency]\n }\n\n const matchedDependency = Object.keys(dependencies).find(dep => dep.match(dependency))\n\n return matchedDependency ? dependencies[matchedDependency] : undefined\n }\n\n async getVersion(dependency: DependencyName | RegExp): Promise<DependencyVersion | undefined> {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = await this.getPackageJSON()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n getVersionSync(dependency: DependencyName | RegExp): DependencyVersion | undefined {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = this.getPackageJSONSync()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n async isValid(dependency: DependencyName | RegExp, version: DependencyVersion): Promise<boolean> {\n const packageVersion = await this.getVersion(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n isValidSync(dependency: DependencyName | RegExp, version: DependencyVersion): boolean {\n const packageVersion = this.getVersionSync(dependency)\n\n if (!packageVersion) {\n return false\n }\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n}\n","import path from 'node:path';\nimport {locatePath, locatePathSync} from 'locate-path';\nimport {toPath} from 'unicorn-magic';\n\nexport const findUpStop = Symbol('findUpStop');\n\nexport async function findUpMultiple(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt ?? root));\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = async locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePath(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = await name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePath([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst foundPath = await runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport function findUpMultipleSync(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePathSync(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePathSync([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst foundPath = runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport async function findUp(name, options = {}) {\n\tconst matches = await findUpMultiple(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport function findUpSync(name, options = {}) {\n\tconst matches = findUpMultipleSync(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport {\n\tpathExists,\n\tpathExistsSync,\n} from 'path-exists';\n","import process from 'node:process';\nimport path from 'node:path';\nimport fs, {promises as fsPromises} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\nimport pLocate from 'p-locate';\n\nconst typeMappings = {\n\tdirectory: 'isDirectory',\n\tfile: 'isFile',\n};\n\nfunction checkType(type) {\n\tif (Object.hasOwnProperty.call(typeMappings, type)) {\n\t\treturn;\n\t}\n\n\tthrow new Error(`Invalid type specified: ${type}`);\n}\n\nconst matchType = (type, stat) => stat[typeMappings[type]]();\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport async function locatePath(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t\tconcurrency,\n\t\tpreserveOrder,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fsPromises.stat : fsPromises.lstat;\n\n\treturn pLocate(paths, async path_ => {\n\t\ttry {\n\t\t\tconst stat = await statFunction(path.resolve(cwd, path_));\n\t\t\treturn matchType(type, stat);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, {concurrency, preserveOrder});\n}\n\nexport function locatePathSync(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fs.statSync : fs.lstatSync;\n\n\tfor (const path_ of paths) {\n\t\ttry {\n\t\t\tconst stat = statFunction(path.resolve(cwd, path_), {\n\t\t\t\tthrowIfNoEntry: false,\n\t\t\t});\n\n\t\t\tif (!stat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(type, stat)) {\n\t\t\t\treturn path_;\n\t\t\t}\n\t\t} catch {}\n\t}\n}\n","import pLimit from 'p-limit';\n\nclass EndError extends Error {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n}\n\n// The input can also be a promise, so we await it.\nconst testElement = async (element, tester) => tester(await element);\n\n// The input can also be a promise, so we `Promise.all()` them both.\nconst finder = async element => {\n\tconst values = await Promise.all(element);\n\tif (values[1] === true) {\n\t\tthrow new EndError(values[0]);\n\t}\n\n\treturn false;\n};\n\nexport default async function pLocate(\n\titerable,\n\ttester,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tpreserveOrder = true,\n\t} = {},\n) {\n\tconst limit = pLimit(concurrency);\n\n\t// Start all the promises concurrently with optional limit.\n\tconst items = [...iterable].map(element => [element, limit(testElement, element, tester)]);\n\n\t// Check the promises either serially or concurrently.\n\tconst checkLimit = pLimit(preserveOrder ? 1 : Number.POSITIVE_INFINITY);\n\n\ttry {\n\t\tawait Promise.all(items.map(element => checkLimit(finder, element)));\n\t} catch (error) {\n\t\tif (error instanceof EndError) {\n\t\t\treturn error.value;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\t\treturn current.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n}\n","import {fileURLToPath} from 'node:url';\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport * from './default.js';\n","import fs, {promises as fsPromises} from 'node:fs';\n\nexport async function pathExists(path) {\n\ttry {\n\t\tawait fsPromises.access(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function pathExistsSync(path) {\n\ttry {\n\t\tfs.accessSync(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n"]}
|