.pnp.loader.mjs (69466B)
1 import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url'; 2 import fs from 'fs'; 3 import path from 'path'; 4 import moduleExports, { Module } from 'module'; 5 import { EOL } from 'os'; 6 import assert from 'assert'; 7 8 const SAFE_TIME = 456789e3; 9 10 const PortablePath = { 11 root: `/`, 12 dot: `.`, 13 parent: `..` 14 }; 15 const npath = Object.create(path); 16 const ppath = Object.create(path.posix); 17 npath.cwd = () => process.cwd(); 18 ppath.cwd = () => toPortablePath(process.cwd()); 19 ppath.resolve = (...segments) => { 20 if (segments.length > 0 && ppath.isAbsolute(segments[0])) { 21 return path.posix.resolve(...segments); 22 } else { 23 return path.posix.resolve(ppath.cwd(), ...segments); 24 } 25 }; 26 const contains = function(pathUtils, from, to) { 27 from = pathUtils.normalize(from); 28 to = pathUtils.normalize(to); 29 if (from === to) 30 return `.`; 31 if (!from.endsWith(pathUtils.sep)) 32 from = from + pathUtils.sep; 33 if (to.startsWith(from)) { 34 return to.slice(from.length); 35 } else { 36 return null; 37 } 38 }; 39 npath.fromPortablePath = fromPortablePath; 40 npath.toPortablePath = toPortablePath; 41 npath.contains = (from, to) => contains(npath, from, to); 42 ppath.contains = (from, to) => contains(ppath, from, to); 43 const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; 44 const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; 45 const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; 46 const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; 47 function fromPortablePath(p) { 48 if (process.platform !== `win32`) 49 return p; 50 let portablePathMatch, uncPortablePathMatch; 51 if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) 52 p = portablePathMatch[1]; 53 else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) 54 p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; 55 else 56 return p; 57 return p.replace(/\//g, `\\`); 58 } 59 function toPortablePath(p) { 60 if (process.platform !== `win32`) 61 return p; 62 p = p.replace(/\\/g, `/`); 63 let windowsPathMatch, uncWindowsPathMatch; 64 if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) 65 p = `/${windowsPathMatch[1]}`; 66 else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) 67 p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; 68 return p; 69 } 70 function convertPath(targetPathUtils, sourcePath) { 71 return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); 72 } 73 74 const defaultTime = new Date(SAFE_TIME * 1e3); 75 async function copyPromise(destinationFs, destination, sourceFs, source, opts) { 76 const normalizedDestination = destinationFs.pathUtils.normalize(destination); 77 const normalizedSource = sourceFs.pathUtils.normalize(source); 78 const prelayout = []; 79 const postlayout = []; 80 const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); 81 await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); 82 const updateTime = typeof destinationFs.lutimesPromise === `function` ? destinationFs.lutimesPromise.bind(destinationFs) : destinationFs.utimesPromise.bind(destinationFs); 83 await copyImpl(prelayout, postlayout, updateTime, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); 84 for (const operation of prelayout) 85 await operation(); 86 await Promise.all(postlayout.map((operation) => { 87 return operation(); 88 })); 89 } 90 async function copyImpl(prelayout, postlayout, updateTime, destinationFs, destination, sourceFs, source, opts) { 91 var _a, _b; 92 const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; 93 const sourceStat = await sourceFs.lstatPromise(source); 94 const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; 95 let updated; 96 switch (true) { 97 case sourceStat.isDirectory(): 98 { 99 updated = await copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); 100 } 101 break; 102 case sourceStat.isFile(): 103 { 104 updated = await copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); 105 } 106 break; 107 case sourceStat.isSymbolicLink(): 108 { 109 updated = await copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); 110 } 111 break; 112 default: 113 { 114 throw new Error(`Unsupported file type (${sourceStat.mode})`); 115 } 116 } 117 if (updated || ((_a = destinationStat == null ? void 0 : destinationStat.mtime) == null ? void 0 : _a.getTime()) !== mtime.getTime() || ((_b = destinationStat == null ? void 0 : destinationStat.atime) == null ? void 0 : _b.getTime()) !== atime.getTime()) { 118 postlayout.push(() => updateTime(destination, atime, mtime)); 119 updated = true; 120 } 121 if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { 122 postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); 123 updated = true; 124 } 125 return updated; 126 } 127 async function maybeLStat(baseFs, p) { 128 try { 129 return await baseFs.lstatPromise(p); 130 } catch (e) { 131 return null; 132 } 133 } 134 async function copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { 135 if (destinationStat !== null && !destinationStat.isDirectory()) { 136 if (opts.overwrite) { 137 prelayout.push(async () => destinationFs.removePromise(destination)); 138 destinationStat = null; 139 } else { 140 return false; 141 } 142 } 143 let updated = false; 144 if (destinationStat === null) { 145 prelayout.push(async () => { 146 try { 147 await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); 148 } catch (err) { 149 if (err.code !== `EEXIST`) { 150 throw err; 151 } 152 } 153 }); 154 updated = true; 155 } 156 const entries = await sourceFs.readdirPromise(source); 157 const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; 158 if (opts.stableSort) { 159 for (const entry of entries.sort()) { 160 if (await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { 161 updated = true; 162 } 163 } 164 } else { 165 const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { 166 await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); 167 })); 168 if (entriesUpdateStatus.some((status) => status)) { 169 updated = true; 170 } 171 } 172 return updated; 173 } 174 const isCloneSupportedCache = /* @__PURE__ */ new WeakMap(); 175 function makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy) { 176 return async () => { 177 await opFs.linkPromise(source, destination); 178 if (linkStrategy === "readOnly" /* ReadOnly */) { 179 sourceStat.mode &= ~146; 180 await opFs.chmodPromise(destination, sourceStat.mode); 181 } 182 }; 183 } 184 function makeCloneLinkOperation(opFs, destination, source, sourceStat, linkStrategy) { 185 const isCloneSupported = isCloneSupportedCache.get(opFs); 186 if (typeof isCloneSupported === `undefined`) { 187 return async () => { 188 try { 189 await opFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE_FORCE); 190 isCloneSupportedCache.set(opFs, true); 191 } catch (err) { 192 if (err.code === `ENOSYS` || err.code === `ENOTSUP`) { 193 isCloneSupportedCache.set(opFs, false); 194 await makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy)(); 195 } else { 196 throw err; 197 } 198 } 199 }; 200 } else { 201 if (isCloneSupported) { 202 return async () => opFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE_FORCE); 203 } else { 204 return makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy); 205 } 206 } 207 } 208 async function copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { 209 var _a; 210 if (destinationStat !== null) { 211 if (opts.overwrite) { 212 prelayout.push(async () => destinationFs.removePromise(destination)); 213 destinationStat = null; 214 } else { 215 return false; 216 } 217 } 218 const linkStrategy = (_a = opts.linkStrategy) != null ? _a : null; 219 const op = destinationFs === sourceFs ? linkStrategy !== null ? makeCloneLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE) : linkStrategy !== null ? makeLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.writeFilePromise(destination, await sourceFs.readFilePromise(source)); 220 prelayout.push(async () => op()); 221 return true; 222 } 223 async function copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { 224 if (destinationStat !== null) { 225 if (opts.overwrite) { 226 prelayout.push(async () => destinationFs.removePromise(destination)); 227 destinationStat = null; 228 } else { 229 return false; 230 } 231 } 232 prelayout.push(async () => { 233 await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); 234 }); 235 return true; 236 } 237 238 function makeError(code, message) { 239 return Object.assign(new Error(`${code}: ${message}`), { code }); 240 } 241 function ENOSYS(message, reason) { 242 return makeError(`ENOSYS`, `${message}, ${reason}`); 243 } 244 245 class FakeFS { 246 constructor(pathUtils) { 247 this.pathUtils = pathUtils; 248 } 249 async *genTraversePromise(init, { stableSort = false } = {}) { 250 const stack = [init]; 251 while (stack.length > 0) { 252 const p = stack.shift(); 253 const entry = await this.lstatPromise(p); 254 if (entry.isDirectory()) { 255 const entries = await this.readdirPromise(p); 256 if (stableSort) { 257 for (const entry2 of entries.sort()) { 258 stack.push(this.pathUtils.join(p, entry2)); 259 } 260 } else { 261 throw new Error(`Not supported`); 262 } 263 } else { 264 yield p; 265 } 266 } 267 } 268 async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { 269 let stat; 270 try { 271 stat = await this.lstatPromise(p); 272 } catch (error) { 273 if (error.code === `ENOENT`) { 274 return; 275 } else { 276 throw error; 277 } 278 } 279 if (stat.isDirectory()) { 280 if (recursive) { 281 const entries = await this.readdirPromise(p); 282 await Promise.all(entries.map((entry) => { 283 return this.removePromise(this.pathUtils.resolve(p, entry)); 284 })); 285 } 286 for (let t = 0; t <= maxRetries; t++) { 287 try { 288 await this.rmdirPromise(p); 289 break; 290 } catch (error) { 291 if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { 292 throw error; 293 } else if (t < maxRetries) { 294 await new Promise((resolve) => setTimeout(resolve, t * 100)); 295 } 296 } 297 } 298 } else { 299 await this.unlinkPromise(p); 300 } 301 } 302 removeSync(p, { recursive = true } = {}) { 303 let stat; 304 try { 305 stat = this.lstatSync(p); 306 } catch (error) { 307 if (error.code === `ENOENT`) { 308 return; 309 } else { 310 throw error; 311 } 312 } 313 if (stat.isDirectory()) { 314 if (recursive) 315 for (const entry of this.readdirSync(p)) 316 this.removeSync(this.pathUtils.resolve(p, entry)); 317 this.rmdirSync(p); 318 } else { 319 this.unlinkSync(p); 320 } 321 } 322 async mkdirpPromise(p, { chmod, utimes } = {}) { 323 p = this.resolve(p); 324 if (p === this.pathUtils.dirname(p)) 325 return void 0; 326 const parts = p.split(this.pathUtils.sep); 327 let createdDirectory; 328 for (let u = 2; u <= parts.length; ++u) { 329 const subPath = parts.slice(0, u).join(this.pathUtils.sep); 330 if (!this.existsSync(subPath)) { 331 try { 332 await this.mkdirPromise(subPath); 333 } catch (error) { 334 if (error.code === `EEXIST`) { 335 continue; 336 } else { 337 throw error; 338 } 339 } 340 createdDirectory != null ? createdDirectory : createdDirectory = subPath; 341 if (chmod != null) 342 await this.chmodPromise(subPath, chmod); 343 if (utimes != null) { 344 await this.utimesPromise(subPath, utimes[0], utimes[1]); 345 } else { 346 const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); 347 await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); 348 } 349 } 350 } 351 return createdDirectory; 352 } 353 mkdirpSync(p, { chmod, utimes } = {}) { 354 p = this.resolve(p); 355 if (p === this.pathUtils.dirname(p)) 356 return void 0; 357 const parts = p.split(this.pathUtils.sep); 358 let createdDirectory; 359 for (let u = 2; u <= parts.length; ++u) { 360 const subPath = parts.slice(0, u).join(this.pathUtils.sep); 361 if (!this.existsSync(subPath)) { 362 try { 363 this.mkdirSync(subPath); 364 } catch (error) { 365 if (error.code === `EEXIST`) { 366 continue; 367 } else { 368 throw error; 369 } 370 } 371 createdDirectory != null ? createdDirectory : createdDirectory = subPath; 372 if (chmod != null) 373 this.chmodSync(subPath, chmod); 374 if (utimes != null) { 375 this.utimesSync(subPath, utimes[0], utimes[1]); 376 } else { 377 const parentStat = this.statSync(this.pathUtils.dirname(subPath)); 378 this.utimesSync(subPath, parentStat.atime, parentStat.mtime); 379 } 380 } 381 } 382 return createdDirectory; 383 } 384 async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { 385 return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); 386 } 387 copySync(destination, source, { baseFs = this, overwrite = true } = {}) { 388 const stat = baseFs.lstatSync(source); 389 const exists = this.existsSync(destination); 390 if (stat.isDirectory()) { 391 this.mkdirpSync(destination); 392 const directoryListing = baseFs.readdirSync(source); 393 for (const entry of directoryListing) { 394 this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); 395 } 396 } else if (stat.isFile()) { 397 if (!exists || overwrite) { 398 if (exists) 399 this.removeSync(destination); 400 const content = baseFs.readFileSync(source); 401 this.writeFileSync(destination, content); 402 } 403 } else if (stat.isSymbolicLink()) { 404 if (!exists || overwrite) { 405 if (exists) 406 this.removeSync(destination); 407 const target = baseFs.readlinkSync(source); 408 this.symlinkSync(convertPath(this.pathUtils, target), destination); 409 } 410 } else { 411 throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); 412 } 413 const mode = stat.mode & 511; 414 this.chmodSync(destination, mode); 415 } 416 async changeFilePromise(p, content, opts = {}) { 417 if (Buffer.isBuffer(content)) { 418 return this.changeFileBufferPromise(p, content, opts); 419 } else { 420 return this.changeFileTextPromise(p, content, opts); 421 } 422 } 423 async changeFileBufferPromise(p, content, { mode } = {}) { 424 let current = Buffer.alloc(0); 425 try { 426 current = await this.readFilePromise(p); 427 } catch (error) { 428 } 429 if (Buffer.compare(current, content) === 0) 430 return; 431 await this.writeFilePromise(p, content, { mode }); 432 } 433 async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { 434 let current = ``; 435 try { 436 current = await this.readFilePromise(p, `utf8`); 437 } catch (error) { 438 } 439 const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; 440 if (current === normalizedContent) 441 return; 442 await this.writeFilePromise(p, normalizedContent, { mode }); 443 } 444 changeFileSync(p, content, opts = {}) { 445 if (Buffer.isBuffer(content)) { 446 return this.changeFileBufferSync(p, content, opts); 447 } else { 448 return this.changeFileTextSync(p, content, opts); 449 } 450 } 451 changeFileBufferSync(p, content, { mode } = {}) { 452 let current = Buffer.alloc(0); 453 try { 454 current = this.readFileSync(p); 455 } catch (error) { 456 } 457 if (Buffer.compare(current, content) === 0) 458 return; 459 this.writeFileSync(p, content, { mode }); 460 } 461 changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { 462 let current = ``; 463 try { 464 current = this.readFileSync(p, `utf8`); 465 } catch (error) { 466 } 467 const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; 468 if (current === normalizedContent) 469 return; 470 this.writeFileSync(p, normalizedContent, { mode }); 471 } 472 async movePromise(fromP, toP) { 473 try { 474 await this.renamePromise(fromP, toP); 475 } catch (error) { 476 if (error.code === `EXDEV`) { 477 await this.copyPromise(toP, fromP); 478 await this.removePromise(fromP); 479 } else { 480 throw error; 481 } 482 } 483 } 484 moveSync(fromP, toP) { 485 try { 486 this.renameSync(fromP, toP); 487 } catch (error) { 488 if (error.code === `EXDEV`) { 489 this.copySync(toP, fromP); 490 this.removeSync(fromP); 491 } else { 492 throw error; 493 } 494 } 495 } 496 async lockPromise(affectedPath, callback) { 497 const lockPath = `${affectedPath}.flock`; 498 const interval = 1e3 / 60; 499 const startTime = Date.now(); 500 let fd = null; 501 const isAlive = async () => { 502 let pid; 503 try { 504 [pid] = await this.readJsonPromise(lockPath); 505 } catch (error) { 506 return Date.now() - startTime < 500; 507 } 508 try { 509 process.kill(pid, 0); 510 return true; 511 } catch (error) { 512 return false; 513 } 514 }; 515 while (fd === null) { 516 try { 517 fd = await this.openPromise(lockPath, `wx`); 518 } catch (error) { 519 if (error.code === `EEXIST`) { 520 if (!await isAlive()) { 521 try { 522 await this.unlinkPromise(lockPath); 523 continue; 524 } catch (error2) { 525 } 526 } 527 if (Date.now() - startTime < 60 * 1e3) { 528 await new Promise((resolve) => setTimeout(resolve, interval)); 529 } else { 530 throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); 531 } 532 } else { 533 throw error; 534 } 535 } 536 } 537 await this.writePromise(fd, JSON.stringify([process.pid])); 538 try { 539 return await callback(); 540 } finally { 541 try { 542 await this.closePromise(fd); 543 await this.unlinkPromise(lockPath); 544 } catch (error) { 545 } 546 } 547 } 548 async readJsonPromise(p) { 549 const content = await this.readFilePromise(p, `utf8`); 550 try { 551 return JSON.parse(content); 552 } catch (error) { 553 error.message += ` (in ${p})`; 554 throw error; 555 } 556 } 557 readJsonSync(p) { 558 const content = this.readFileSync(p, `utf8`); 559 try { 560 return JSON.parse(content); 561 } catch (error) { 562 error.message += ` (in ${p})`; 563 throw error; 564 } 565 } 566 async writeJsonPromise(p, data) { 567 return await this.writeFilePromise(p, `${JSON.stringify(data, null, 2)} 568 `); 569 } 570 writeJsonSync(p, data) { 571 return this.writeFileSync(p, `${JSON.stringify(data, null, 2)} 572 `); 573 } 574 async preserveTimePromise(p, cb) { 575 const stat = await this.lstatPromise(p); 576 const result = await cb(); 577 if (typeof result !== `undefined`) 578 p = result; 579 if (this.lutimesPromise) { 580 await this.lutimesPromise(p, stat.atime, stat.mtime); 581 } else if (!stat.isSymbolicLink()) { 582 await this.utimesPromise(p, stat.atime, stat.mtime); 583 } 584 } 585 async preserveTimeSync(p, cb) { 586 const stat = this.lstatSync(p); 587 const result = cb(); 588 if (typeof result !== `undefined`) 589 p = result; 590 if (this.lutimesSync) { 591 this.lutimesSync(p, stat.atime, stat.mtime); 592 } else if (!stat.isSymbolicLink()) { 593 this.utimesSync(p, stat.atime, stat.mtime); 594 } 595 } 596 } 597 class BasePortableFakeFS extends FakeFS { 598 constructor() { 599 super(ppath); 600 } 601 } 602 function getEndOfLine(content) { 603 const matches = content.match(/\r?\n/g); 604 if (matches === null) 605 return EOL; 606 const crlf = matches.filter((nl) => nl === `\r 607 `).length; 608 const lf = matches.length - crlf; 609 return crlf > lf ? `\r 610 ` : ` 611 `; 612 } 613 function normalizeLineEndings(originalContent, newContent) { 614 return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); 615 } 616 617 class NodeFS extends BasePortableFakeFS { 618 constructor(realFs = fs) { 619 super(); 620 this.realFs = realFs; 621 if (typeof this.realFs.lutimes !== `undefined`) { 622 this.lutimesPromise = this.lutimesPromiseImpl; 623 this.lutimesSync = this.lutimesSyncImpl; 624 } 625 } 626 getExtractHint() { 627 return false; 628 } 629 getRealPath() { 630 return PortablePath.root; 631 } 632 resolve(p) { 633 return ppath.resolve(p); 634 } 635 async openPromise(p, flags, mode) { 636 return await new Promise((resolve, reject) => { 637 this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); 638 }); 639 } 640 openSync(p, flags, mode) { 641 return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); 642 } 643 async opendirPromise(p, opts) { 644 return await new Promise((resolve, reject) => { 645 if (typeof opts !== `undefined`) { 646 this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); 647 } else { 648 this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); 649 } 650 }).then((dir) => { 651 return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true }); 652 }); 653 } 654 opendirSync(p, opts) { 655 const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); 656 return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true }); 657 } 658 async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { 659 return await new Promise((resolve, reject) => { 660 this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { 661 if (error) { 662 reject(error); 663 } else { 664 resolve(bytesRead); 665 } 666 }); 667 }); 668 } 669 readSync(fd, buffer, offset, length, position) { 670 return this.realFs.readSync(fd, buffer, offset, length, position); 671 } 672 async writePromise(fd, buffer, offset, length, position) { 673 return await new Promise((resolve, reject) => { 674 if (typeof buffer === `string`) { 675 return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); 676 } else { 677 return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); 678 } 679 }); 680 } 681 writeSync(fd, buffer, offset, length, position) { 682 if (typeof buffer === `string`) { 683 return this.realFs.writeSync(fd, buffer, offset); 684 } else { 685 return this.realFs.writeSync(fd, buffer, offset, length, position); 686 } 687 } 688 async closePromise(fd) { 689 await new Promise((resolve, reject) => { 690 this.realFs.close(fd, this.makeCallback(resolve, reject)); 691 }); 692 } 693 closeSync(fd) { 694 this.realFs.closeSync(fd); 695 } 696 createReadStream(p, opts) { 697 const realPath = p !== null ? npath.fromPortablePath(p) : p; 698 return this.realFs.createReadStream(realPath, opts); 699 } 700 createWriteStream(p, opts) { 701 const realPath = p !== null ? npath.fromPortablePath(p) : p; 702 return this.realFs.createWriteStream(realPath, opts); 703 } 704 async realpathPromise(p) { 705 return await new Promise((resolve, reject) => { 706 this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); 707 }).then((path) => { 708 return npath.toPortablePath(path); 709 }); 710 } 711 realpathSync(p) { 712 return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); 713 } 714 async existsPromise(p) { 715 return await new Promise((resolve) => { 716 this.realFs.exists(npath.fromPortablePath(p), resolve); 717 }); 718 } 719 accessSync(p, mode) { 720 return this.realFs.accessSync(npath.fromPortablePath(p), mode); 721 } 722 async accessPromise(p, mode) { 723 return await new Promise((resolve, reject) => { 724 this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); 725 }); 726 } 727 existsSync(p) { 728 return this.realFs.existsSync(npath.fromPortablePath(p)); 729 } 730 async statPromise(p, opts) { 731 return await new Promise((resolve, reject) => { 732 if (opts) { 733 this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); 734 } else { 735 this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); 736 } 737 }); 738 } 739 statSync(p, opts) { 740 if (opts) { 741 return this.realFs.statSync(npath.fromPortablePath(p), opts); 742 } else { 743 return this.realFs.statSync(npath.fromPortablePath(p)); 744 } 745 } 746 async fstatPromise(fd, opts) { 747 return await new Promise((resolve, reject) => { 748 if (opts) { 749 this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); 750 } else { 751 this.realFs.fstat(fd, this.makeCallback(resolve, reject)); 752 } 753 }); 754 } 755 fstatSync(fd, opts) { 756 if (opts) { 757 return this.realFs.fstatSync(fd, opts); 758 } else { 759 return this.realFs.fstatSync(fd); 760 } 761 } 762 async lstatPromise(p, opts) { 763 return await new Promise((resolve, reject) => { 764 if (opts) { 765 this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); 766 } else { 767 this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); 768 } 769 }); 770 } 771 lstatSync(p, opts) { 772 if (opts) { 773 return this.realFs.lstatSync(npath.fromPortablePath(p), opts); 774 } else { 775 return this.realFs.lstatSync(npath.fromPortablePath(p)); 776 } 777 } 778 async fchmodPromise(fd, mask) { 779 return await new Promise((resolve, reject) => { 780 this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); 781 }); 782 } 783 fchmodSync(fd, mask) { 784 return this.realFs.fchmodSync(fd, mask); 785 } 786 async chmodPromise(p, mask) { 787 return await new Promise((resolve, reject) => { 788 this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); 789 }); 790 } 791 chmodSync(p, mask) { 792 return this.realFs.chmodSync(npath.fromPortablePath(p), mask); 793 } 794 async fchownPromise(fd, uid, gid) { 795 return await new Promise((resolve, reject) => { 796 this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); 797 }); 798 } 799 fchownSync(fd, uid, gid) { 800 return this.realFs.fchownSync(fd, uid, gid); 801 } 802 async chownPromise(p, uid, gid) { 803 return await new Promise((resolve, reject) => { 804 this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); 805 }); 806 } 807 chownSync(p, uid, gid) { 808 return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); 809 } 810 async renamePromise(oldP, newP) { 811 return await new Promise((resolve, reject) => { 812 this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); 813 }); 814 } 815 renameSync(oldP, newP) { 816 return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); 817 } 818 async copyFilePromise(sourceP, destP, flags = 0) { 819 return await new Promise((resolve, reject) => { 820 this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); 821 }); 822 } 823 copyFileSync(sourceP, destP, flags = 0) { 824 return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); 825 } 826 async appendFilePromise(p, content, opts) { 827 return await new Promise((resolve, reject) => { 828 const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; 829 if (opts) { 830 this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); 831 } else { 832 this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); 833 } 834 }); 835 } 836 appendFileSync(p, content, opts) { 837 const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; 838 if (opts) { 839 this.realFs.appendFileSync(fsNativePath, content, opts); 840 } else { 841 this.realFs.appendFileSync(fsNativePath, content); 842 } 843 } 844 async writeFilePromise(p, content, opts) { 845 return await new Promise((resolve, reject) => { 846 const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; 847 if (opts) { 848 this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); 849 } else { 850 this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); 851 } 852 }); 853 } 854 writeFileSync(p, content, opts) { 855 const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; 856 if (opts) { 857 this.realFs.writeFileSync(fsNativePath, content, opts); 858 } else { 859 this.realFs.writeFileSync(fsNativePath, content); 860 } 861 } 862 async unlinkPromise(p) { 863 return await new Promise((resolve, reject) => { 864 this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); 865 }); 866 } 867 unlinkSync(p) { 868 return this.realFs.unlinkSync(npath.fromPortablePath(p)); 869 } 870 async utimesPromise(p, atime, mtime) { 871 return await new Promise((resolve, reject) => { 872 this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); 873 }); 874 } 875 utimesSync(p, atime, mtime) { 876 this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); 877 } 878 async lutimesPromiseImpl(p, atime, mtime) { 879 const lutimes = this.realFs.lutimes; 880 if (typeof lutimes === `undefined`) 881 throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`); 882 return await new Promise((resolve, reject) => { 883 lutimes.call(this.realFs, npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); 884 }); 885 } 886 lutimesSyncImpl(p, atime, mtime) { 887 const lutimesSync = this.realFs.lutimesSync; 888 if (typeof lutimesSync === `undefined`) 889 throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`); 890 lutimesSync.call(this.realFs, npath.fromPortablePath(p), atime, mtime); 891 } 892 async mkdirPromise(p, opts) { 893 return await new Promise((resolve, reject) => { 894 this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); 895 }); 896 } 897 mkdirSync(p, opts) { 898 return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); 899 } 900 async rmdirPromise(p, opts) { 901 return await new Promise((resolve, reject) => { 902 if (opts) { 903 this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); 904 } else { 905 this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); 906 } 907 }); 908 } 909 rmdirSync(p, opts) { 910 return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); 911 } 912 async linkPromise(existingP, newP) { 913 return await new Promise((resolve, reject) => { 914 this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); 915 }); 916 } 917 linkSync(existingP, newP) { 918 return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); 919 } 920 async symlinkPromise(target, p, type) { 921 return await new Promise((resolve, reject) => { 922 this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); 923 }); 924 } 925 symlinkSync(target, p, type) { 926 return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); 927 } 928 async readFilePromise(p, encoding) { 929 return await new Promise((resolve, reject) => { 930 const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; 931 this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); 932 }); 933 } 934 readFileSync(p, encoding) { 935 const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; 936 return this.realFs.readFileSync(fsNativePath, encoding); 937 } 938 async readdirPromise(p, opts) { 939 return await new Promise((resolve, reject) => { 940 if (opts == null ? void 0 : opts.withFileTypes) { 941 this.realFs.readdir(npath.fromPortablePath(p), { withFileTypes: true }, this.makeCallback(resolve, reject)); 942 } else { 943 this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback((value) => resolve(value), reject)); 944 } 945 }); 946 } 947 readdirSync(p, opts) { 948 if (opts == null ? void 0 : opts.withFileTypes) { 949 return this.realFs.readdirSync(npath.fromPortablePath(p), { withFileTypes: true }); 950 } else { 951 return this.realFs.readdirSync(npath.fromPortablePath(p)); 952 } 953 } 954 async readlinkPromise(p) { 955 return await new Promise((resolve, reject) => { 956 this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); 957 }).then((path) => { 958 return npath.toPortablePath(path); 959 }); 960 } 961 readlinkSync(p) { 962 return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); 963 } 964 async truncatePromise(p, len) { 965 return await new Promise((resolve, reject) => { 966 this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); 967 }); 968 } 969 truncateSync(p, len) { 970 return this.realFs.truncateSync(npath.fromPortablePath(p), len); 971 } 972 async ftruncatePromise(fd, len) { 973 return await new Promise((resolve, reject) => { 974 this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); 975 }); 976 } 977 ftruncateSync(fd, len) { 978 return this.realFs.ftruncateSync(fd, len); 979 } 980 watch(p, a, b) { 981 return this.realFs.watch( 982 npath.fromPortablePath(p), 983 a, 984 b 985 ); 986 } 987 watchFile(p, a, b) { 988 return this.realFs.watchFile( 989 npath.fromPortablePath(p), 990 a, 991 b 992 ); 993 } 994 unwatchFile(p, cb) { 995 return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); 996 } 997 makeCallback(resolve, reject) { 998 return (err, result) => { 999 if (err) { 1000 reject(err); 1001 } else { 1002 resolve(result); 1003 } 1004 }; 1005 } 1006 } 1007 1008 class ProxiedFS extends FakeFS { 1009 getExtractHint(hints) { 1010 return this.baseFs.getExtractHint(hints); 1011 } 1012 resolve(path) { 1013 return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); 1014 } 1015 getRealPath() { 1016 return this.mapFromBase(this.baseFs.getRealPath()); 1017 } 1018 async openPromise(p, flags, mode) { 1019 return this.baseFs.openPromise(this.mapToBase(p), flags, mode); 1020 } 1021 openSync(p, flags, mode) { 1022 return this.baseFs.openSync(this.mapToBase(p), flags, mode); 1023 } 1024 async opendirPromise(p, opts) { 1025 return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); 1026 } 1027 opendirSync(p, opts) { 1028 return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); 1029 } 1030 async readPromise(fd, buffer, offset, length, position) { 1031 return await this.baseFs.readPromise(fd, buffer, offset, length, position); 1032 } 1033 readSync(fd, buffer, offset, length, position) { 1034 return this.baseFs.readSync(fd, buffer, offset, length, position); 1035 } 1036 async writePromise(fd, buffer, offset, length, position) { 1037 if (typeof buffer === `string`) { 1038 return await this.baseFs.writePromise(fd, buffer, offset); 1039 } else { 1040 return await this.baseFs.writePromise(fd, buffer, offset, length, position); 1041 } 1042 } 1043 writeSync(fd, buffer, offset, length, position) { 1044 if (typeof buffer === `string`) { 1045 return this.baseFs.writeSync(fd, buffer, offset); 1046 } else { 1047 return this.baseFs.writeSync(fd, buffer, offset, length, position); 1048 } 1049 } 1050 async closePromise(fd) { 1051 return this.baseFs.closePromise(fd); 1052 } 1053 closeSync(fd) { 1054 this.baseFs.closeSync(fd); 1055 } 1056 createReadStream(p, opts) { 1057 return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); 1058 } 1059 createWriteStream(p, opts) { 1060 return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); 1061 } 1062 async realpathPromise(p) { 1063 return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); 1064 } 1065 realpathSync(p) { 1066 return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); 1067 } 1068 async existsPromise(p) { 1069 return this.baseFs.existsPromise(this.mapToBase(p)); 1070 } 1071 existsSync(p) { 1072 return this.baseFs.existsSync(this.mapToBase(p)); 1073 } 1074 accessSync(p, mode) { 1075 return this.baseFs.accessSync(this.mapToBase(p), mode); 1076 } 1077 async accessPromise(p, mode) { 1078 return this.baseFs.accessPromise(this.mapToBase(p), mode); 1079 } 1080 async statPromise(p, opts) { 1081 return this.baseFs.statPromise(this.mapToBase(p), opts); 1082 } 1083 statSync(p, opts) { 1084 return this.baseFs.statSync(this.mapToBase(p), opts); 1085 } 1086 async fstatPromise(fd, opts) { 1087 return this.baseFs.fstatPromise(fd, opts); 1088 } 1089 fstatSync(fd, opts) { 1090 return this.baseFs.fstatSync(fd, opts); 1091 } 1092 lstatPromise(p, opts) { 1093 return this.baseFs.lstatPromise(this.mapToBase(p), opts); 1094 } 1095 lstatSync(p, opts) { 1096 return this.baseFs.lstatSync(this.mapToBase(p), opts); 1097 } 1098 async fchmodPromise(fd, mask) { 1099 return this.baseFs.fchmodPromise(fd, mask); 1100 } 1101 fchmodSync(fd, mask) { 1102 return this.baseFs.fchmodSync(fd, mask); 1103 } 1104 async chmodPromise(p, mask) { 1105 return this.baseFs.chmodPromise(this.mapToBase(p), mask); 1106 } 1107 chmodSync(p, mask) { 1108 return this.baseFs.chmodSync(this.mapToBase(p), mask); 1109 } 1110 async fchownPromise(fd, uid, gid) { 1111 return this.baseFs.fchownPromise(fd, uid, gid); 1112 } 1113 fchownSync(fd, uid, gid) { 1114 return this.baseFs.fchownSync(fd, uid, gid); 1115 } 1116 async chownPromise(p, uid, gid) { 1117 return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); 1118 } 1119 chownSync(p, uid, gid) { 1120 return this.baseFs.chownSync(this.mapToBase(p), uid, gid); 1121 } 1122 async renamePromise(oldP, newP) { 1123 return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); 1124 } 1125 renameSync(oldP, newP) { 1126 return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); 1127 } 1128 async copyFilePromise(sourceP, destP, flags = 0) { 1129 return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); 1130 } 1131 copyFileSync(sourceP, destP, flags = 0) { 1132 return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); 1133 } 1134 async appendFilePromise(p, content, opts) { 1135 return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); 1136 } 1137 appendFileSync(p, content, opts) { 1138 return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); 1139 } 1140 async writeFilePromise(p, content, opts) { 1141 return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); 1142 } 1143 writeFileSync(p, content, opts) { 1144 return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); 1145 } 1146 async unlinkPromise(p) { 1147 return this.baseFs.unlinkPromise(this.mapToBase(p)); 1148 } 1149 unlinkSync(p) { 1150 return this.baseFs.unlinkSync(this.mapToBase(p)); 1151 } 1152 async utimesPromise(p, atime, mtime) { 1153 return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); 1154 } 1155 utimesSync(p, atime, mtime) { 1156 return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); 1157 } 1158 async mkdirPromise(p, opts) { 1159 return this.baseFs.mkdirPromise(this.mapToBase(p), opts); 1160 } 1161 mkdirSync(p, opts) { 1162 return this.baseFs.mkdirSync(this.mapToBase(p), opts); 1163 } 1164 async rmdirPromise(p, opts) { 1165 return this.baseFs.rmdirPromise(this.mapToBase(p), opts); 1166 } 1167 rmdirSync(p, opts) { 1168 return this.baseFs.rmdirSync(this.mapToBase(p), opts); 1169 } 1170 async linkPromise(existingP, newP) { 1171 return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); 1172 } 1173 linkSync(existingP, newP) { 1174 return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); 1175 } 1176 async symlinkPromise(target, p, type) { 1177 const mappedP = this.mapToBase(p); 1178 if (this.pathUtils.isAbsolute(target)) 1179 return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); 1180 const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); 1181 const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); 1182 return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); 1183 } 1184 symlinkSync(target, p, type) { 1185 const mappedP = this.mapToBase(p); 1186 if (this.pathUtils.isAbsolute(target)) 1187 return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); 1188 const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); 1189 const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); 1190 return this.baseFs.symlinkSync(mappedTarget, mappedP, type); 1191 } 1192 async readFilePromise(p, encoding) { 1193 if (encoding === `utf8`) { 1194 return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); 1195 } else { 1196 return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); 1197 } 1198 } 1199 readFileSync(p, encoding) { 1200 if (encoding === `utf8`) { 1201 return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); 1202 } else { 1203 return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); 1204 } 1205 } 1206 async readdirPromise(p, opts) { 1207 return this.baseFs.readdirPromise(this.mapToBase(p), opts); 1208 } 1209 readdirSync(p, opts) { 1210 return this.baseFs.readdirSync(this.mapToBase(p), opts); 1211 } 1212 async readlinkPromise(p) { 1213 return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); 1214 } 1215 readlinkSync(p) { 1216 return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); 1217 } 1218 async truncatePromise(p, len) { 1219 return this.baseFs.truncatePromise(this.mapToBase(p), len); 1220 } 1221 truncateSync(p, len) { 1222 return this.baseFs.truncateSync(this.mapToBase(p), len); 1223 } 1224 async ftruncatePromise(fd, len) { 1225 return this.baseFs.ftruncatePromise(fd, len); 1226 } 1227 ftruncateSync(fd, len) { 1228 return this.baseFs.ftruncateSync(fd, len); 1229 } 1230 watch(p, a, b) { 1231 return this.baseFs.watch( 1232 this.mapToBase(p), 1233 a, 1234 b 1235 ); 1236 } 1237 watchFile(p, a, b) { 1238 return this.baseFs.watchFile( 1239 this.mapToBase(p), 1240 a, 1241 b 1242 ); 1243 } 1244 unwatchFile(p, cb) { 1245 return this.baseFs.unwatchFile(this.mapToBase(p), cb); 1246 } 1247 fsMapToBase(p) { 1248 if (typeof p === `number`) { 1249 return p; 1250 } else { 1251 return this.mapToBase(p); 1252 } 1253 } 1254 } 1255 1256 const NUMBER_REGEXP = /^[0-9]+$/; 1257 const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; 1258 const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; 1259 class VirtualFS extends ProxiedFS { 1260 constructor({ baseFs = new NodeFS() } = {}) { 1261 super(ppath); 1262 this.baseFs = baseFs; 1263 } 1264 static makeVirtualPath(base, component, to) { 1265 if (ppath.basename(base) !== `__virtual__`) 1266 throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); 1267 if (!ppath.basename(component).match(VALID_COMPONENT)) 1268 throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); 1269 const target = ppath.relative(ppath.dirname(base), to); 1270 const segments = target.split(`/`); 1271 let depth = 0; 1272 while (depth < segments.length && segments[depth] === `..`) 1273 depth += 1; 1274 const finalSegments = segments.slice(depth); 1275 const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); 1276 return fullVirtualPath; 1277 } 1278 static resolveVirtual(p) { 1279 const match = p.match(VIRTUAL_REGEXP); 1280 if (!match || !match[3] && match[5]) 1281 return p; 1282 const target = ppath.dirname(match[1]); 1283 if (!match[3] || !match[4]) 1284 return target; 1285 const isnum = NUMBER_REGEXP.test(match[4]); 1286 if (!isnum) 1287 return p; 1288 const depth = Number(match[4]); 1289 const backstep = `../`.repeat(depth); 1290 const subpath = match[5] || `.`; 1291 return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); 1292 } 1293 getExtractHint(hints) { 1294 return this.baseFs.getExtractHint(hints); 1295 } 1296 getRealPath() { 1297 return this.baseFs.getRealPath(); 1298 } 1299 realpathSync(p) { 1300 const match = p.match(VIRTUAL_REGEXP); 1301 if (!match) 1302 return this.baseFs.realpathSync(p); 1303 if (!match[5]) 1304 return p; 1305 const realpath = this.baseFs.realpathSync(this.mapToBase(p)); 1306 return VirtualFS.makeVirtualPath(match[1], match[3], realpath); 1307 } 1308 async realpathPromise(p) { 1309 const match = p.match(VIRTUAL_REGEXP); 1310 if (!match) 1311 return await this.baseFs.realpathPromise(p); 1312 if (!match[5]) 1313 return p; 1314 const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); 1315 return VirtualFS.makeVirtualPath(match[1], match[3], realpath); 1316 } 1317 mapToBase(p) { 1318 if (p === ``) 1319 return p; 1320 if (this.pathUtils.isAbsolute(p)) 1321 return VirtualFS.resolveVirtual(p); 1322 const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); 1323 const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); 1324 return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; 1325 } 1326 mapFromBase(p) { 1327 return p; 1328 } 1329 } 1330 1331 const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); 1332 const HAS_CONSOLIDATED_HOOKS = major > 16 || major === 16 && minor >= 12; 1333 const HAS_UNFLAGGED_JSON_MODULES = major > 17 || major === 17 && minor >= 5 || major === 16 && minor >= 15; 1334 const HAS_JSON_IMPORT_ASSERTION_REQUIREMENT = major > 17 || major === 17 && minor >= 1 || major === 16 && minor > 14; 1335 const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2; 1336 1337 const builtinModules = new Set(Module.builtinModules || Object.keys(process.binding(`natives`))); 1338 const isBuiltinModule = (request) => request.startsWith(`node:`) || builtinModules.has(request); 1339 function readPackageScope(checkPath) { 1340 const rootSeparatorIndex = checkPath.indexOf(npath.sep); 1341 let separatorIndex; 1342 do { 1343 separatorIndex = checkPath.lastIndexOf(npath.sep); 1344 checkPath = checkPath.slice(0, separatorIndex); 1345 if (checkPath.endsWith(`${npath.sep}node_modules`)) 1346 return false; 1347 const pjson = readPackage(checkPath + npath.sep); 1348 if (pjson) { 1349 return { 1350 data: pjson, 1351 path: checkPath 1352 }; 1353 } 1354 } while (separatorIndex > rootSeparatorIndex); 1355 return false; 1356 } 1357 function readPackage(requestPath) { 1358 const jsonPath = npath.resolve(requestPath, `package.json`); 1359 if (!fs.existsSync(jsonPath)) 1360 return null; 1361 return JSON.parse(fs.readFileSync(jsonPath, `utf8`)); 1362 } 1363 1364 async function tryReadFile$1(path2) { 1365 try { 1366 return await fs.promises.readFile(path2, `utf8`); 1367 } catch (error) { 1368 if (error.code === `ENOENT`) 1369 return null; 1370 throw error; 1371 } 1372 } 1373 function tryParseURL(str, base) { 1374 try { 1375 return new URL$1(str, base); 1376 } catch { 1377 return null; 1378 } 1379 } 1380 let entrypointPath = null; 1381 function setEntrypointPath(file) { 1382 entrypointPath = file; 1383 } 1384 function getFileFormat(filepath) { 1385 var _a, _b; 1386 const ext = path.extname(filepath); 1387 switch (ext) { 1388 case `.mjs`: { 1389 return `module`; 1390 } 1391 case `.cjs`: { 1392 return `commonjs`; 1393 } 1394 case `.wasm`: { 1395 throw new Error( 1396 `Unknown file extension ".wasm" for ${filepath}` 1397 ); 1398 } 1399 case `.json`: { 1400 if (HAS_UNFLAGGED_JSON_MODULES) 1401 return `json`; 1402 throw new Error( 1403 `Unknown file extension ".json" for ${filepath}` 1404 ); 1405 } 1406 case `.js`: { 1407 const pkg = readPackageScope(filepath); 1408 if (!pkg) 1409 return `commonjs`; 1410 return (_a = pkg.data.type) != null ? _a : `commonjs`; 1411 } 1412 default: { 1413 if (entrypointPath !== filepath) 1414 return null; 1415 const pkg = readPackageScope(filepath); 1416 if (!pkg) 1417 return `commonjs`; 1418 if (pkg.data.type === `module`) 1419 return null; 1420 return (_b = pkg.data.type) != null ? _b : `commonjs`; 1421 } 1422 } 1423 } 1424 1425 async function getFormat$1(resolved, context, defaultGetFormat) { 1426 const url = tryParseURL(resolved); 1427 if ((url == null ? void 0 : url.protocol) !== `file:`) 1428 return defaultGetFormat(resolved, context, defaultGetFormat); 1429 const format = getFileFormat(fileURLToPath(url)); 1430 if (format) { 1431 return { 1432 format 1433 }; 1434 } 1435 return defaultGetFormat(resolved, context, defaultGetFormat); 1436 } 1437 1438 async function getSource$1(urlString, context, defaultGetSource) { 1439 const url = tryParseURL(urlString); 1440 if ((url == null ? void 0 : url.protocol) !== `file:`) 1441 return defaultGetSource(urlString, context, defaultGetSource); 1442 return { 1443 source: await fs.promises.readFile(fileURLToPath(url), `utf8`) 1444 }; 1445 } 1446 1447 async function load$1(urlString, context, nextLoad) { 1448 var _a; 1449 const url = tryParseURL(urlString); 1450 if ((url == null ? void 0 : url.protocol) !== `file:`) 1451 return nextLoad(urlString, context, nextLoad); 1452 const filePath = fileURLToPath(url); 1453 const format = getFileFormat(filePath); 1454 if (!format) 1455 return nextLoad(urlString, context, nextLoad); 1456 if (HAS_JSON_IMPORT_ASSERTION_REQUIREMENT && format === `json` && ((_a = context.importAssertions) == null ? void 0 : _a.type) !== `json`) { 1457 const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import assertion of type "json"`); 1458 err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`; 1459 throw err; 1460 } 1461 if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { 1462 const pathToSend = pathToFileURL( 1463 npath.fromPortablePath( 1464 VirtualFS.resolveVirtual(npath.toPortablePath(filePath)) 1465 ) 1466 ).href; 1467 process.send({ 1468 "watch:import": WATCH_MODE_MESSAGE_USES_ARRAYS ? [pathToSend] : pathToSend 1469 }); 1470 } 1471 return { 1472 format, 1473 source: await fs.promises.readFile(filePath, `utf8`), 1474 shortCircuit: true 1475 }; 1476 } 1477 1478 const ArrayIsArray = Array.isArray; 1479 const JSONStringify = JSON.stringify; 1480 const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; 1481 const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); 1482 const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); 1483 const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); 1484 const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); 1485 const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); 1486 const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); 1487 const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); 1488 const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); 1489 const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); 1490 const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); 1491 const SafeMap = Map; 1492 const JSONParse = JSON.parse; 1493 1494 function createErrorType(code, messageCreator, errorType) { 1495 return class extends errorType { 1496 constructor(...args) { 1497 super(messageCreator(...args)); 1498 this.code = code; 1499 this.name = `${errorType.name} [${code}]`; 1500 } 1501 }; 1502 } 1503 const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( 1504 `ERR_PACKAGE_IMPORT_NOT_DEFINED`, 1505 (specifier, packagePath, base) => { 1506 return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; 1507 }, 1508 TypeError 1509 ); 1510 const ERR_INVALID_MODULE_SPECIFIER = createErrorType( 1511 `ERR_INVALID_MODULE_SPECIFIER`, 1512 (request, reason, base = void 0) => { 1513 return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; 1514 }, 1515 TypeError 1516 ); 1517 const ERR_INVALID_PACKAGE_TARGET = createErrorType( 1518 `ERR_INVALID_PACKAGE_TARGET`, 1519 (pkgPath, key, target, isImport = false, base = void 0) => { 1520 const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); 1521 if (key === `.`) { 1522 assert(isImport === false); 1523 return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; 1524 } 1525 return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( 1526 target 1527 )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; 1528 }, 1529 Error 1530 ); 1531 const ERR_INVALID_PACKAGE_CONFIG = createErrorType( 1532 `ERR_INVALID_PACKAGE_CONFIG`, 1533 (path, base, message) => { 1534 return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; 1535 }, 1536 Error 1537 ); 1538 1539 function filterOwnProperties(source, keys) { 1540 const filtered = /* @__PURE__ */ Object.create(null); 1541 for (let i = 0; i < keys.length; i++) { 1542 const key = keys[i]; 1543 if (ObjectPrototypeHasOwnProperty(source, key)) { 1544 filtered[key] = source[key]; 1545 } 1546 } 1547 return filtered; 1548 } 1549 1550 const packageJSONCache = new SafeMap(); 1551 function getPackageConfig(path, specifier, base, readFileSyncFn) { 1552 const existing = packageJSONCache.get(path); 1553 if (existing !== void 0) { 1554 return existing; 1555 } 1556 const source = readFileSyncFn(path); 1557 if (source === void 0) { 1558 const packageConfig2 = { 1559 pjsonPath: path, 1560 exists: false, 1561 main: void 0, 1562 name: void 0, 1563 type: "none", 1564 exports: void 0, 1565 imports: void 0 1566 }; 1567 packageJSONCache.set(path, packageConfig2); 1568 return packageConfig2; 1569 } 1570 let packageJSON; 1571 try { 1572 packageJSON = JSONParse(source); 1573 } catch (error) { 1574 throw new ERR_INVALID_PACKAGE_CONFIG( 1575 path, 1576 (base ? `"${specifier}" from ` : "") + fileURLToPath(base || specifier), 1577 error.message 1578 ); 1579 } 1580 let { imports, main, name, type } = filterOwnProperties(packageJSON, [ 1581 "imports", 1582 "main", 1583 "name", 1584 "type" 1585 ]); 1586 const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; 1587 if (typeof imports !== "object" || imports === null) { 1588 imports = void 0; 1589 } 1590 if (typeof main !== "string") { 1591 main = void 0; 1592 } 1593 if (typeof name !== "string") { 1594 name = void 0; 1595 } 1596 if (type !== "module" && type !== "commonjs") { 1597 type = "none"; 1598 } 1599 const packageConfig = { 1600 pjsonPath: path, 1601 exists: true, 1602 main, 1603 name, 1604 type, 1605 exports, 1606 imports 1607 }; 1608 packageJSONCache.set(path, packageConfig); 1609 return packageConfig; 1610 } 1611 function getPackageScopeConfig(resolved, readFileSyncFn) { 1612 let packageJSONUrl = new URL("./package.json", resolved); 1613 while (true) { 1614 const packageJSONPath2 = packageJSONUrl.pathname; 1615 if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { 1616 break; 1617 } 1618 const packageConfig2 = getPackageConfig( 1619 fileURLToPath(packageJSONUrl), 1620 resolved, 1621 void 0, 1622 readFileSyncFn 1623 ); 1624 if (packageConfig2.exists) { 1625 return packageConfig2; 1626 } 1627 const lastPackageJSONUrl = packageJSONUrl; 1628 packageJSONUrl = new URL("../package.json", packageJSONUrl); 1629 if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { 1630 break; 1631 } 1632 } 1633 const packageJSONPath = fileURLToPath(packageJSONUrl); 1634 const packageConfig = { 1635 pjsonPath: packageJSONPath, 1636 exists: false, 1637 main: void 0, 1638 name: void 0, 1639 type: "none", 1640 exports: void 0, 1641 imports: void 0 1642 }; 1643 packageJSONCache.set(packageJSONPath, packageConfig); 1644 return packageConfig; 1645 } 1646 1647 /** 1648 @license 1649 Copyright Node.js contributors. All rights reserved. 1650 1651 Permission is hereby granted, free of charge, to any person obtaining a copy 1652 of this software and associated documentation files (the "Software"), to 1653 deal in the Software without restriction, including without limitation the 1654 rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 1655 sell copies of the Software, and to permit persons to whom the Software is 1656 furnished to do so, subject to the following conditions: 1657 1658 The above copyright notice and this permission notice shall be included in 1659 all copies or substantial portions of the Software. 1660 1661 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1662 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1663 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1664 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1665 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 1666 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 1667 IN THE SOFTWARE. 1668 */ 1669 function throwImportNotDefined(specifier, packageJSONUrl, base) { 1670 throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( 1671 specifier, 1672 packageJSONUrl && fileURLToPath(new URL(".", packageJSONUrl)), 1673 fileURLToPath(base) 1674 ); 1675 } 1676 function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { 1677 const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${fileURLToPath(packageJSONUrl)}`; 1678 throw new ERR_INVALID_MODULE_SPECIFIER( 1679 subpath, 1680 reason, 1681 base && fileURLToPath(base) 1682 ); 1683 } 1684 function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { 1685 if (typeof target === "object" && target !== null) { 1686 target = JSONStringify(target, null, ""); 1687 } else { 1688 target = `${target}`; 1689 } 1690 throw new ERR_INVALID_PACKAGE_TARGET( 1691 fileURLToPath(new URL(".", packageJSONUrl)), 1692 subpath, 1693 target, 1694 internal, 1695 base && fileURLToPath(base) 1696 ); 1697 } 1698 const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; 1699 const patternRegEx = /\*/g; 1700 function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { 1701 if (subpath !== "" && !pattern && target[target.length - 1] !== "/") 1702 throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); 1703 if (!StringPrototypeStartsWith(target, "./")) { 1704 if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { 1705 let isURL = false; 1706 try { 1707 new URL(target); 1708 isURL = true; 1709 } catch { 1710 } 1711 if (!isURL) { 1712 const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; 1713 return exportTarget; 1714 } 1715 } 1716 throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); 1717 } 1718 if (RegExpPrototypeExec( 1719 invalidSegmentRegEx, 1720 StringPrototypeSlice(target, 2) 1721 ) !== null) 1722 throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); 1723 const resolved = new URL(target, packageJSONUrl); 1724 const resolvedPath = resolved.pathname; 1725 const packagePath = new URL(".", packageJSONUrl).pathname; 1726 if (!StringPrototypeStartsWith(resolvedPath, packagePath)) 1727 throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); 1728 if (subpath === "") 1729 return resolved; 1730 if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { 1731 const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; 1732 throwInvalidSubpath(request, packageJSONUrl, internal, base); 1733 } 1734 if (pattern) { 1735 return new URL( 1736 RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) 1737 ); 1738 } 1739 return new URL(subpath, resolved); 1740 } 1741 function isArrayIndex(key) { 1742 const keyNum = +key; 1743 if (`${keyNum}` !== key) 1744 return false; 1745 return keyNum >= 0 && keyNum < 4294967295; 1746 } 1747 function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { 1748 if (typeof target === "string") { 1749 return resolvePackageTargetString( 1750 target, 1751 subpath, 1752 packageSubpath, 1753 packageJSONUrl, 1754 base, 1755 pattern, 1756 internal); 1757 } else if (ArrayIsArray(target)) { 1758 if (target.length === 0) { 1759 return null; 1760 } 1761 let lastException; 1762 for (let i = 0; i < target.length; i++) { 1763 const targetItem = target[i]; 1764 let resolveResult; 1765 try { 1766 resolveResult = resolvePackageTarget( 1767 packageJSONUrl, 1768 targetItem, 1769 subpath, 1770 packageSubpath, 1771 base, 1772 pattern, 1773 internal, 1774 conditions 1775 ); 1776 } catch (e) { 1777 lastException = e; 1778 if (e.code === "ERR_INVALID_PACKAGE_TARGET") { 1779 continue; 1780 } 1781 throw e; 1782 } 1783 if (resolveResult === void 0) { 1784 continue; 1785 } 1786 if (resolveResult === null) { 1787 lastException = null; 1788 continue; 1789 } 1790 return resolveResult; 1791 } 1792 if (lastException === void 0 || lastException === null) 1793 return lastException; 1794 throw lastException; 1795 } else if (typeof target === "object" && target !== null) { 1796 const keys = ObjectGetOwnPropertyNames(target); 1797 for (let i = 0; i < keys.length; i++) { 1798 const key = keys[i]; 1799 if (isArrayIndex(key)) { 1800 throw new ERR_INVALID_PACKAGE_CONFIG( 1801 fileURLToPath(packageJSONUrl), 1802 base, 1803 '"exports" cannot contain numeric property keys.' 1804 ); 1805 } 1806 } 1807 for (let i = 0; i < keys.length; i++) { 1808 const key = keys[i]; 1809 if (key === "default" || conditions.has(key)) { 1810 const conditionalTarget = target[key]; 1811 const resolveResult = resolvePackageTarget( 1812 packageJSONUrl, 1813 conditionalTarget, 1814 subpath, 1815 packageSubpath, 1816 base, 1817 pattern, 1818 internal, 1819 conditions 1820 ); 1821 if (resolveResult === void 0) 1822 continue; 1823 return resolveResult; 1824 } 1825 } 1826 return void 0; 1827 } else if (target === null) { 1828 return null; 1829 } 1830 throwInvalidPackageTarget( 1831 packageSubpath, 1832 target, 1833 packageJSONUrl, 1834 internal, 1835 base 1836 ); 1837 } 1838 function patternKeyCompare(a, b) { 1839 const aPatternIndex = StringPrototypeIndexOf(a, "*"); 1840 const bPatternIndex = StringPrototypeIndexOf(b, "*"); 1841 const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; 1842 const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; 1843 if (baseLenA > baseLenB) 1844 return -1; 1845 if (baseLenB > baseLenA) 1846 return 1; 1847 if (aPatternIndex === -1) 1848 return 1; 1849 if (bPatternIndex === -1) 1850 return -1; 1851 if (a.length > b.length) 1852 return -1; 1853 if (b.length > a.length) 1854 return 1; 1855 return 0; 1856 } 1857 function packageImportsResolve({ 1858 name, 1859 base, 1860 conditions, 1861 readFileSyncFn 1862 }) { 1863 if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { 1864 const reason = "is not a valid internal imports specifier name"; 1865 throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base)); 1866 } 1867 let packageJSONUrl; 1868 const packageConfig = getPackageScopeConfig(base, readFileSyncFn); 1869 if (packageConfig.exists) { 1870 packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); 1871 const imports = packageConfig.imports; 1872 if (imports) { 1873 if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { 1874 const resolveResult = resolvePackageTarget( 1875 packageJSONUrl, 1876 imports[name], 1877 "", 1878 name, 1879 base, 1880 false, 1881 true, 1882 conditions 1883 ); 1884 if (resolveResult != null) { 1885 return resolveResult; 1886 } 1887 } else { 1888 let bestMatch = ""; 1889 let bestMatchSubpath; 1890 const keys = ObjectGetOwnPropertyNames(imports); 1891 for (let i = 0; i < keys.length; i++) { 1892 const key = keys[i]; 1893 const patternIndex = StringPrototypeIndexOf(key, "*"); 1894 if (patternIndex !== -1 && StringPrototypeStartsWith( 1895 name, 1896 StringPrototypeSlice(key, 0, patternIndex) 1897 )) { 1898 const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); 1899 if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { 1900 bestMatch = key; 1901 bestMatchSubpath = StringPrototypeSlice( 1902 name, 1903 patternIndex, 1904 name.length - patternTrailer.length 1905 ); 1906 } 1907 } 1908 } 1909 if (bestMatch) { 1910 const target = imports[bestMatch]; 1911 const resolveResult = resolvePackageTarget( 1912 packageJSONUrl, 1913 target, 1914 bestMatchSubpath, 1915 bestMatch, 1916 base, 1917 true, 1918 true, 1919 conditions 1920 ); 1921 if (resolveResult != null) { 1922 return resolveResult; 1923 } 1924 } 1925 } 1926 } 1927 } 1928 throwImportNotDefined(name, packageJSONUrl, base); 1929 } 1930 1931 const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; 1932 const isRelativeRegexp = /^\.{0,2}\//; 1933 function tryReadFile(filePath) { 1934 try { 1935 return fs.readFileSync(filePath, `utf8`); 1936 } catch (err) { 1937 if (err.code === `ENOENT`) 1938 return void 0; 1939 throw err; 1940 } 1941 } 1942 async function resolvePrivateRequest(specifier, issuer, context, nextResolve) { 1943 const resolved = packageImportsResolve({ 1944 name: specifier, 1945 base: pathToFileURL(issuer), 1946 conditions: new Set(context.conditions), 1947 readFileSyncFn: tryReadFile 1948 }); 1949 if (resolved instanceof URL) { 1950 return { url: resolved.href, shortCircuit: true }; 1951 } else { 1952 if (resolved.startsWith(`#`)) 1953 throw new Error(`Mapping from one private import to another isn't allowed`); 1954 return resolve$1(resolved, context, nextResolve); 1955 } 1956 } 1957 async function resolve$1(originalSpecifier, context, nextResolve) { 1958 var _a; 1959 const { findPnpApi } = moduleExports; 1960 if (!findPnpApi || isBuiltinModule(originalSpecifier)) 1961 return nextResolve(originalSpecifier, context, nextResolve); 1962 let specifier = originalSpecifier; 1963 const url = tryParseURL(specifier, isRelativeRegexp.test(specifier) ? context.parentURL : void 0); 1964 if (url) { 1965 if (url.protocol !== `file:`) 1966 return nextResolve(originalSpecifier, context, nextResolve); 1967 specifier = fileURLToPath(url); 1968 } 1969 const { parentURL, conditions = [] } = context; 1970 const issuer = parentURL ? fileURLToPath(parentURL) : process.cwd(); 1971 const pnpapi = (_a = findPnpApi(issuer)) != null ? _a : url ? findPnpApi(specifier) : null; 1972 if (!pnpapi) 1973 return nextResolve(originalSpecifier, context, nextResolve); 1974 if (specifier.startsWith(`#`)) 1975 return resolvePrivateRequest(specifier, issuer, context, nextResolve); 1976 const dependencyNameMatch = specifier.match(pathRegExp); 1977 let allowLegacyResolve = false; 1978 if (dependencyNameMatch) { 1979 const [, dependencyName, subPath] = dependencyNameMatch; 1980 if (subPath === ``) { 1981 const resolved = pnpapi.resolveToUnqualified(`${dependencyName}/package.json`, issuer); 1982 if (resolved) { 1983 const content = await tryReadFile$1(resolved); 1984 if (content) { 1985 const pkg = JSON.parse(content); 1986 allowLegacyResolve = pkg.exports == null; 1987 } 1988 } 1989 } 1990 } 1991 const result = pnpapi.resolveRequest(specifier, issuer, { 1992 conditions: new Set(conditions), 1993 extensions: allowLegacyResolve ? void 0 : [] 1994 }); 1995 if (!result) 1996 throw new Error(`Resolving '${specifier}' from '${issuer}' failed`); 1997 const resultURL = pathToFileURL(result); 1998 if (url) { 1999 resultURL.search = url.search; 2000 resultURL.hash = url.hash; 2001 } 2002 if (!parentURL) 2003 setEntrypointPath(fileURLToPath(resultURL)); 2004 return { 2005 url: resultURL.href, 2006 shortCircuit: true 2007 }; 2008 } 2009 2010 const binding = process.binding(`fs`); 2011 const originalfstat = binding.fstat; 2012 const ZIP_MASK = 4278190080; 2013 const ZIP_MAGIC = 704643072; 2014 binding.fstat = function(...args) { 2015 const [fd, useBigint, req] = args; 2016 if ((fd & ZIP_MASK) === ZIP_MAGIC && useBigint === false && req === void 0) { 2017 try { 2018 const stats = fs.fstatSync(fd); 2019 return new Float64Array([ 2020 stats.dev, 2021 stats.mode, 2022 stats.nlink, 2023 stats.uid, 2024 stats.gid, 2025 stats.rdev, 2026 stats.blksize, 2027 stats.ino, 2028 stats.size, 2029 stats.blocks 2030 ]); 2031 } catch { 2032 } 2033 } 2034 return originalfstat.apply(this, args); 2035 }; 2036 2037 const resolve = resolve$1; 2038 const getFormat = HAS_CONSOLIDATED_HOOKS ? void 0 : getFormat$1; 2039 const getSource = HAS_CONSOLIDATED_HOOKS ? void 0 : getSource$1; 2040 const load = HAS_CONSOLIDATED_HOOKS ? load$1 : void 0; 2041 2042 export { getFormat, getSource, load, resolve };