@powerlines/nx 0.8.1 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{chunk-HHPODCTP.js → chunk-4UWZOCEA.js} +6 -4
  3. package/dist/{chunk-SEKRZM2M.mjs → chunk-A6R3IFS4.mjs} +1 -1
  4. package/dist/{chunk-ZN4SPOFK.mjs → chunk-AEUGK5NW.mjs} +1 -1
  5. package/dist/{chunk-LB2WKEBP.js → chunk-DYBB74M5.js} +2 -2
  6. package/dist/{chunk-22QO45EK.mjs → chunk-FFBOHADM.mjs} +1 -1
  7. package/dist/{chunk-SMAXXYNQ.js → chunk-GBMB632G.js} +2 -2
  8. package/dist/{chunk-6ZIN2CAX.js → chunk-HGVVLZRZ.js} +2 -2
  9. package/dist/{chunk-Z4BJ37JY.js → chunk-IFMXBBI7.js} +3 -3
  10. package/dist/{chunk-5XZZZSXP.mjs → chunk-KXYDHGLW.mjs} +1 -1
  11. package/dist/{chunk-VDJPCGIO.mjs → chunk-KZPEAPED.mjs} +528 -526
  12. package/dist/{chunk-RDBAXMH3.js → chunk-MUKKEYV2.js} +2 -2
  13. package/dist/{chunk-5BGY6YWV.mjs → chunk-R5YABITA.mjs} +1 -1
  14. package/dist/{chunk-CYWOTYVX.mjs → chunk-SV7QXBCB.mjs} +6 -4
  15. package/dist/{chunk-DBX2Y6G3.mjs → chunk-VGG6K4L5.mjs} +1 -1
  16. package/dist/{chunk-OYUWBYK7.js → chunk-XTPTXR6Y.js} +546 -544
  17. package/dist/{chunk-DGAY3PM7.js → chunk-ZJSHMHBZ.js} +2 -2
  18. package/dist/executors.js +12 -12
  19. package/dist/executors.mjs +7 -7
  20. package/dist/index.js +15 -15
  21. package/dist/index.mjs +8 -8
  22. package/dist/src/base/base-executor.js +3 -3
  23. package/dist/src/base/base-executor.mjs +2 -2
  24. package/dist/src/executors/build/executor.js +5 -5
  25. package/dist/src/executors/build/executor.mjs +3 -3
  26. package/dist/src/executors/clean/executor.js +5 -5
  27. package/dist/src/executors/clean/executor.mjs +3 -3
  28. package/dist/src/executors/docs/executor.js +5 -5
  29. package/dist/src/executors/docs/executor.mjs +3 -3
  30. package/dist/src/executors/lint/executor.js +5 -5
  31. package/dist/src/executors/lint/executor.mjs +3 -3
  32. package/dist/src/executors/prepare/executor.js +5 -5
  33. package/dist/src/executors/prepare/executor.mjs +3 -3
  34. package/dist/src/plugin/index.js +4 -4
  35. package/dist/src/plugin/index.mjs +2 -2
  36. package/package.json +3 -3
  37. package/dist/src/executors/build/schema.d.ts +0 -85
  38. package/dist/src/executors/build/schema.json +0 -96
  39. package/dist/src/executors/clean/schema.d.ts +0 -75
  40. package/dist/src/executors/clean/schema.json +0 -77
  41. package/dist/src/executors/docs/schema.d.ts +0 -75
  42. package/dist/src/executors/docs/schema.json +0 -77
  43. package/dist/src/executors/lint/schema.d.ts +0 -75
  44. package/dist/src/executors/lint/schema.json +0 -77
  45. package/dist/src/executors/prepare/schema.d.ts +0 -75
  46. package/dist/src/executors/prepare/schema.json +0 -77
  47. package/dist/src/generators/sync/schema.d.ts +0 -15
  48. package/dist/src/generators/sync/schema.json +0 -19
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkHHPODCTP_js = require('./chunk-HHPODCTP.js');
3
+ var chunk4UWZOCEA_js = require('./chunk-4UWZOCEA.js');
4
4
  var chunkSHUYVCID_js = require('./chunk-SHUYVCID.js');
5
5
  var logger = require('@storm-software/config-tools/logger');
6
6
  var baseExecutor = require('@storm-software/workspace-tools/base/base-executor');
@@ -15,8 +15,6 @@ var helpers = require('@stryke/fs/helpers');
15
15
  var install = require('@stryke/fs/install');
16
16
  var listFiles = require('@stryke/fs/list-files');
17
17
  var packageFns = require('@stryke/fs/package-fns');
18
- var filePathFns = require('@stryke/path/file-path-fns');
19
- var isParentPath = require('@stryke/path/is-parent-path');
20
18
  var joinPaths = require('@stryke/path/join-paths');
21
19
  var replace = require('@stryke/path/replace');
22
20
  var isFunction = require('@stryke/type-checks/is-function');
@@ -30,16 +28,18 @@ var Handlebars = require('handlebars');
30
28
  var json = require('@stryke/fs/json');
31
29
  var append = require('@stryke/path/append');
32
30
  var ts2 = require('typescript');
33
- var titleCase = require('@stryke/string-format/title-case');
34
31
  var isUndefined = require('@stryke/type-checks/is-undefined');
35
32
  var writeFile$1 = require('@stryke/fs/write-file');
36
33
  var prettier = require('prettier');
37
34
  var resolve = require('@stryke/fs/resolve');
35
+ var titleCase = require('@stryke/string-format/title-case');
38
36
  var getEnvPaths = require('@stryke/env/get-env-paths');
39
37
  var getWorkspaceRoot = require('@stryke/fs/get-workspace-root');
40
38
  var murmurhash = require('@stryke/hash/murmurhash');
41
39
  var getUnique = require('@stryke/helpers/get-unique');
42
40
  var omit = require('@stryke/helpers/omit');
41
+ var filePathFns = require('@stryke/path/file-path-fns');
42
+ var isType = require('@stryke/path/is-type');
43
43
  var join = require('@stryke/path/join');
44
44
  var isNull = require('@stryke/type-checks/is-null');
45
45
  var isString = require('@stryke/type-checks/is-string');
@@ -50,7 +50,7 @@ var colors = require('@storm-software/config-tools/utilities/colors');
50
50
  var noop = require('@stryke/helpers/noop');
51
51
  var jiti = require('jiti');
52
52
  var bufferToString = require('@stryke/convert/buffer-to-string');
53
- var isType = require('@stryke/path/is-type');
53
+ var isParentPath = require('@stryke/path/is-parent-path');
54
54
  var prettyBytes = require('@stryke/string-format/pretty-bytes');
55
55
  var isBuffer = require('@stryke/type-checks/is-buffer');
56
56
  var memfs = require('memfs');
@@ -183,26 +183,6 @@ ${parsedCommandLine.errors.map((error) => `- ${(error.category !== void 0 && err
183
183
  };
184
184
  }
185
185
  chunkSHUYVCID_js.__name(getParsedTypeScriptConfig, "getParsedTypeScriptConfig");
186
- function getBaseFileHeader(context) {
187
- return `
188
- // Generated with ${titleCase.titleCase(context.config.framework)}
189
- // Note: Do not edit this file manually - it will be overwritten automatically
190
- `;
191
- }
192
- chunkSHUYVCID_js.__name(getBaseFileHeader, "getBaseFileHeader");
193
- function getFileHeader(context, options = {}) {
194
- const { directive = null, prettierIgnore = false } = options;
195
- return `/* eslint-disable */
196
- // biome-ignore lint: disable
197
- ${prettierIgnore ? `// prettier-ignore` : ""}${directive ? `
198
-
199
- ${directive}
200
- ` : "\n"}
201
- ${getBaseFileHeader(context)}
202
-
203
- `;
204
- }
205
- chunkSHUYVCID_js.__name(getFileHeader, "getFileHeader");
206
186
 
207
187
  // ../powerlines/src/types/commands.ts
208
188
  var SUPPORTED_COMMANDS = [
@@ -432,6 +412,154 @@ function createResolver(options) {
432
412
  return baseResolver;
433
413
  }
434
414
  chunkSHUYVCID_js.__name(createResolver, "createResolver");
415
+ function isBufferEncoding(options) {
416
+ return isSetString.isSetString(options) || options === null;
417
+ }
418
+ chunkSHUYVCID_js.__name(isBufferEncoding, "isBufferEncoding");
419
+ function isPowerlinesWriteFileOptions(options) {
420
+ return !isBufferEncoding(options) && isSetObject.isSetObject(options) && ("skipFormat" in options || "mode" in options && (options.mode === "fs" || options.mode === "virtual"));
421
+ }
422
+ chunkSHUYVCID_js.__name(isPowerlinesWriteFileOptions, "isPowerlinesWriteFileOptions");
423
+ function isNodeWriteFileOptions(options) {
424
+ return !isUndefined.isUndefined(options) && (isBufferEncoding(options) || !isPowerlinesWriteFileOptions(options));
425
+ }
426
+ chunkSHUYVCID_js.__name(isNodeWriteFileOptions, "isNodeWriteFileOptions");
427
+ function isPowerLinesWriteFileData(data) {
428
+ return !!(isSetObject.isSetObject(data) && "code" in data && data.code);
429
+ }
430
+ chunkSHUYVCID_js.__name(isPowerLinesWriteFileData, "isPowerLinesWriteFileData");
431
+ var FILE_PREFIX = "file://";
432
+ function toFilePath(pathOrUrl) {
433
+ if (!pathOrUrl) {
434
+ throw new Error("No Path or URL provided to Virtual File System");
435
+ }
436
+ let result = pathOrUrl.toString();
437
+ if (result.startsWith(FILE_PREFIX)) {
438
+ result = result.slice(FILE_PREFIX.length);
439
+ }
440
+ return result;
441
+ }
442
+ chunkSHUYVCID_js.__name(toFilePath, "toFilePath");
443
+ var FS_METHODS = [
444
+ "mkdir",
445
+ "mkdirSync",
446
+ "rmdir",
447
+ "rmdirSync",
448
+ "unlink",
449
+ "unlinkSync",
450
+ "existsSync",
451
+ "realpathSync",
452
+ "writeFileSync",
453
+ "readFileSync",
454
+ "readdirSync",
455
+ "createWriteStream",
456
+ "WriteStream",
457
+ "createReadStream",
458
+ "ReadStream"
459
+ ];
460
+ var FS_PROMISE_METHODS = [
461
+ "mkdir",
462
+ "rm",
463
+ "rmdir",
464
+ "unlink",
465
+ "writeFile",
466
+ "readFile",
467
+ "readdir",
468
+ "stat",
469
+ "lstat"
470
+ ];
471
+ function cloneFS(originalFS) {
472
+ const clonedFS = {
473
+ ...originalFS,
474
+ promises: {
475
+ ...originalFS.promises ?? {}
476
+ }
477
+ };
478
+ for (const method of FS_METHODS) {
479
+ if (originalFS[method]) {
480
+ clonedFS[method] = originalFS[method];
481
+ }
482
+ }
483
+ originalFS.promises ??= {};
484
+ for (const method of FS_PROMISE_METHODS) {
485
+ if (originalFS.promises[method]) {
486
+ clonedFS.promises ??= {};
487
+ clonedFS.promises[method] = originalFS.promises[method];
488
+ clonedFS[method] = originalFS.promises[method];
489
+ }
490
+ }
491
+ for (const prop in clonedFS) {
492
+ if (isFunction.isFunction(clonedFS[prop])) {
493
+ clonedFS[prop] = clonedFS[prop].bind(originalFS);
494
+ if (isFunction.isFunction(clonedFS.promises[prop])) {
495
+ clonedFS.promises[prop] = clonedFS.promises[prop].bind(originalFS);
496
+ }
497
+ }
498
+ }
499
+ for (const prop in clonedFS.promises) {
500
+ if (isFunction.isFunction(clonedFS.promises[prop])) {
501
+ clonedFS.promises[prop] = clonedFS.promises[prop].bind(originalFS);
502
+ }
503
+ }
504
+ return clonedFS;
505
+ }
506
+ chunkSHUYVCID_js.__name(cloneFS, "cloneFS");
507
+ function patchFS(originalFS, vfs) {
508
+ const clonedFS = cloneFS(originalFS);
509
+ originalFS.mkdirSync = (file, options) => vfs.mkdirSync(toFilePath(file), options);
510
+ originalFS.mkdir = (file, options, callback) => vfs.mkdir(toFilePath(file), options, callback);
511
+ originalFS.promises.mkdir = async (file, options) => vfs.mkdir(toFilePath(file), options);
512
+ originalFS.unlinkSync = (file) => vfs.unlinkSync(toFilePath(file));
513
+ originalFS.promises.rm = async (file, options) => vfs.rm(toFilePath(file), options);
514
+ originalFS.promises.unlink = async (file) => vfs.unlink(toFilePath(file));
515
+ originalFS.existsSync = (file) => vfs.existsSync(toFilePath(file));
516
+ Object.defineProperty(originalFS, "realpathSync", {
517
+ value: /* @__PURE__ */ chunkSHUYVCID_js.__name((file, options) => vfs.realpathSync(toFilePath(file), options), "value")
518
+ });
519
+ originalFS.writeFileSync = (file, data, options) => vfs.writeFileSync(toFilePath(file), data, options);
520
+ originalFS.promises.writeFile = async (file, data, options) => vfs.writeFile(toFilePath(file), data, options);
521
+ originalFS.readFileSync = (file, options) => vfs.readFileSync(toFilePath(file), options);
522
+ originalFS.promises.readFile = (file, options) => vfs.readFile(toFilePath(file), options);
523
+ originalFS.readdirSync = (file, options) => vfs.readdirSync(toFilePath(file), options);
524
+ originalFS.promises.readdir = (file, options) => vfs.readdir(toFilePath(file), options);
525
+ Object.defineProperty(originalFS, "statSync", {
526
+ value: /* @__PURE__ */ chunkSHUYVCID_js.__name((file, options) => vfs.statSync(toFilePath(file), options), "value")
527
+ });
528
+ originalFS.stat = (file, options) => vfs.statSync(toFilePath(file), options);
529
+ originalFS.promises.stat = (file, options) => vfs.stat(toFilePath(file), options);
530
+ Object.defineProperty(originalFS, "lstatSync", {
531
+ value: /* @__PURE__ */ chunkSHUYVCID_js.__name((file, options) => vfs.lstatSync(toFilePath(file), options), "value")
532
+ });
533
+ originalFS.lstat = (file, options) => vfs.lstatSync(toFilePath(file), options);
534
+ originalFS.promises.lstat = (file, options) => vfs.lstat(toFilePath(file), options);
535
+ return () => {
536
+ originalFS.mkdirSync = clonedFS.mkdirSync;
537
+ originalFS.mkdir = clonedFS.mkdir;
538
+ originalFS.promises.mkdir = clonedFS.promises.mkdir;
539
+ originalFS.unlinkSync = clonedFS.unlinkSync;
540
+ originalFS.promises.rm = clonedFS.promises.rm;
541
+ originalFS.promises.unlink = clonedFS.promises.unlink;
542
+ originalFS.existsSync = clonedFS.existsSync;
543
+ originalFS.realpathSync = clonedFS.realpathSync;
544
+ originalFS.writeFileSync = clonedFS.writeFileSync;
545
+ originalFS.promises.writeFile = clonedFS.promises.writeFile;
546
+ originalFS.readFileSync = clonedFS.readFileSync;
547
+ originalFS.promises.readFile = clonedFS.promises.readFile;
548
+ originalFS.readdirSync = clonedFS.readdirSync;
549
+ originalFS.promises.readdir = clonedFS.promises.readdir;
550
+ Object.defineProperty(originalFS, "statSync", {
551
+ value: clonedFS.statSync
552
+ });
553
+ originalFS.stat = clonedFS.stat;
554
+ originalFS.promises.stat = clonedFS.promises.stat;
555
+ Object.defineProperty(originalFS, "lstatSync", {
556
+ value: clonedFS.lstatSync
557
+ });
558
+ originalFS.lstat = clonedFS.lstat;
559
+ originalFS.promises.lstat = clonedFS.promises.lstat;
560
+ };
561
+ }
562
+ chunkSHUYVCID_js.__name(patchFS, "patchFS");
435
563
  var VirtualFileSystem = class {
436
564
  static {
437
565
  chunkSHUYVCID_js.__name(this, "VirtualFileSystem");
@@ -439,7 +567,11 @@ var VirtualFileSystem = class {
439
567
  /**
440
568
  * The internal map of virtual files.
441
569
  */
442
- #builtinIdMap = /* @__PURE__ */ new Map();
570
+ #meta = {};
571
+ /**
572
+ * A map of unique identifiers to their virtual file paths.
573
+ */
574
+ #ids = {};
443
575
  /**
444
576
  * A map of virtual file paths to their underlying file content.
445
577
  */
@@ -480,39 +612,88 @@ var VirtualFileSystem = class {
480
612
  */
481
613
  #log;
482
614
  /**
615
+ * Checks if a path exists in the virtual file system (VFS).
616
+ *
617
+ * @param path - The path to check.
618
+ * @returns `true` if the path exists, otherwise `false`.
619
+ */
620
+ #existsSync(path) {
621
+ const formattedPath = this.formatPath(path);
622
+ return this.#virtualFS.existsSync(formattedPath) || this.#fs.existsSync(formattedPath) || this.resolveFS(path).existsSync(formattedPath);
623
+ }
624
+ /**
483
625
  * Exposes the internal VFS map for advanced usage.
484
626
  */
485
- get [chunkHHPODCTP_js.__VFS_CACHE__]() {
627
+ get [chunk4UWZOCEA_js.__VFS_CACHE__]() {
486
628
  return this.#cachedFS;
487
629
  }
488
630
  /**
489
631
  * Exposes the internal VFS resolver cache for advanced usage.
490
632
  */
491
- get [chunkHHPODCTP_js.__VFS_RESOLVER__]() {
633
+ get [chunk4UWZOCEA_js.__VFS_RESOLVER__]() {
492
634
  return this.#cachedResolver;
493
635
  }
494
636
  /**
495
637
  * Exposes the internal VFS map for advanced usage.
496
638
  */
497
- get [chunkHHPODCTP_js.__VFS_VIRTUAL__]() {
639
+ get [chunk4UWZOCEA_js.__VFS_VIRTUAL__]() {
498
640
  return this.#virtualFS;
499
641
  }
500
642
  /**
501
643
  * Exposes the internal UFS map for advanced usage.
502
644
  */
503
- get [chunkHHPODCTP_js.__VFS_UNIFIED__]() {
645
+ get [chunk4UWZOCEA_js.__VFS_UNIFIED__]() {
504
646
  return this.#unifiedFS;
505
647
  }
506
648
  /**
649
+ * A proxy to access the underlying file metadata.
650
+ */
651
+ get meta() {
652
+ return new Proxy(this.#meta, {
653
+ get: /* @__PURE__ */ chunkSHUYVCID_js.__name((target, prop) => {
654
+ if (target[prop]) {
655
+ return {
656
+ id: prop,
657
+ mode: this.#virtualFS.existsSync(prop) ? "virtual" : this.#fs.existsSync(prop) ? "fs" : this.#context.config.output.mode,
658
+ details: {},
659
+ variant: "normal",
660
+ ...target[prop]
661
+ };
662
+ }
663
+ return void 0;
664
+ }, "get"),
665
+ set: /* @__PURE__ */ chunkSHUYVCID_js.__name((target, prop, value) => {
666
+ target[prop] = value;
667
+ this.#ids[value.id || prop] = prop;
668
+ return true;
669
+ }, "set"),
670
+ deleteProperty: /* @__PURE__ */ chunkSHUYVCID_js.__name((target, prop) => {
671
+ delete this.#ids[target[prop]?.id || prop];
672
+ delete target[prop];
673
+ return true;
674
+ }, "deleteProperty")
675
+ });
676
+ }
677
+ /**
678
+ * A map of module ids to their file paths.
679
+ */
680
+ get ids() {
681
+ return this.#ids;
682
+ }
683
+ /**
507
684
  * Creates a new instance of the VirtualFileSystem.
508
685
  *
509
686
  * @param context - The context of the virtual file system, typically containing options and logging functions.
510
687
  * @param serialized - A map of files/file contents to populate in cache
511
688
  */
512
- constructor(context, serialized) {
689
+ constructor(context, serialized = {}) {
513
690
  this.#context = context;
514
691
  this.#cachedFS = /* @__PURE__ */ new Map();
515
- this.#builtinIdMap = new Map(Object.entries(serialized?.builtinIdMap ?? {}));
692
+ this.#meta = Object.fromEntries(Object.entries(serialized.virtualFilesMeta ?? {}));
693
+ this.#ids = Object.fromEntries(Object.entries(this.#meta).map(([path, data]) => [
694
+ data.id || path,
695
+ path
696
+ ]));
516
697
  if (!this.#fs.existsSync(this.#context.dataPath)) {
517
698
  this.#fs.mkdirSync(this.#context.dataPath, {
518
699
  recursive: true
@@ -578,13 +759,13 @@ var VirtualFileSystem = class {
578
759
  }
579
760
  this.#log = extendLog(this.#context.log, "virtual-file-system");
580
761
  }
581
- [chunkHHPODCTP_js.__VFS_INIT__]() {
762
+ [chunk4UWZOCEA_js.__VFS_INIT__]() {
582
763
  if (!this.#isPatched && this.#context.config.output.mode !== "fs") {
583
764
  this.#revert = patchFS(fs__default.default, this);
584
765
  this.#isPatched = true;
585
766
  }
586
767
  }
587
- [chunkHHPODCTP_js.__VFS_REVERT__]() {
768
+ [chunk4UWZOCEA_js.__VFS_REVERT__]() {
588
769
  if (this.#isPatched && this.#context.config.output.mode !== "fs") {
589
770
  if (!this.#revert) {
590
771
  throw new Error("Attempting to revert File System patch prior to calling `__init__` function");
@@ -594,65 +775,44 @@ var VirtualFileSystem = class {
594
775
  }
595
776
  }
596
777
  /**
597
- * Returns a Map of all runtime file IDs and their corresponding paths in the virtual file system.
598
- *
599
- * @returns A Map where the keys are runtime file IDs (strings) and the values are their corresponding paths (strings).
600
- */
601
- get builtinIdMap() {
602
- return this.#builtinIdMap;
603
- }
604
- /**
605
- * Lists all runtime IDs in the virtual file system.
778
+ * Check if a path or id corresponds to a virtual file **(does not actually exists on disk)**.
606
779
  *
607
- * @returns An array of formatted runtime IDs.
780
+ * @param pathOrId - The path or id to check.
781
+ * @param options - Optional parameters for resolving the path.
782
+ * @returns Whether the path or id corresponds to a virtual file **(does not actually exists on disk)**.
608
783
  */
609
- get runtimeIds() {
610
- return Array.from(this.builtinIdMap.keys()).map((id) => this.formatRuntimeId(id));
611
- }
612
- /**
613
- * Checks if a given path or ID corresponds to a runtime file.
614
- *
615
- * @param pathOrId - The path or ID to check.
616
- * @param options - Options for resolving the path, such as paths to check.
617
- * @returns `true` if the path or ID corresponds to a runtime file, otherwise `false`.
618
- */
619
- isBuiltinFile(pathOrId, options) {
620
- return !!this.builtinIdMap.values().find((path) => path === this.resolvePath(pathOrId, {
784
+ isVirtual(pathOrId, options = {}) {
785
+ if (!pathOrId) {
786
+ return false;
787
+ }
788
+ const resolvedPath = this.resolve(pathOrId, {
621
789
  ...options,
622
790
  type: "file"
623
- }));
624
- }
625
- /**
626
- * Checks if a provided string is a valid runtime ID (does not need to already be created in the file system).
627
- *
628
- * @param id - The ID to check.
629
- * @returns Whether the ID is a valid runtime ID.
630
- */
631
- isValidBuiltinId(id) {
632
- return id.startsWith(`${this.#context.config.output.builtinPrefix}:`);
791
+ });
792
+ if (!resolvedPath) {
793
+ return false;
794
+ }
795
+ return this.meta[resolvedPath]?.mode === "virtual";
633
796
  }
634
797
  /**
635
- * Check if a path or ID corresponds to a virtual file.
798
+ * Check if a path or id corresponds to a file written to the file system **(actually exists on disk)**.
636
799
  *
637
- * @param pathOrId - The path or ID to check.
638
- * @param options - Options for resolving the path, such as paths to check.
639
- * @returns Whether the path or ID corresponds to a virtual file.
800
+ * @param pathOrId - The path or id to check.
801
+ * @param options - Optional parameters for resolving the path.
802
+ * @returns Whether the path or id corresponds to a file written to the file system **(actually exists on disk)**.
640
803
  */
641
- isVirtualFile(pathOrId, options = {}) {
804
+ isFs(pathOrId, options = {}) {
642
805
  if (!pathOrId) {
643
806
  return false;
644
807
  }
645
- const resolvedPath = this.resolvePath(pathOrId, {
808
+ const resolvedPath = this.resolve(pathOrId, {
646
809
  ...options,
647
810
  type: "file"
648
811
  });
649
812
  if (!resolvedPath) {
650
813
  return false;
651
814
  }
652
- if (this.builtinIdMap.values().find((path) => path === resolvedPath)) {
653
- return true;
654
- }
655
- return this.#virtualFS.existsSync(resolvedPath);
815
+ return this.meta[resolvedPath]?.mode === "fs";
656
816
  }
657
817
  /**
658
818
  * Check if a path exists within one of the directories specified in the tsconfig.json's `path` field.
@@ -666,37 +826,6 @@ var VirtualFileSystem = class {
666
826
  return !!this.#context.tsconfig.options.paths && Object.keys(this.#context.tsconfig.options.paths).some((path) => pathOrId.startsWith(path.replaceAll("*", "")));
667
827
  }
668
828
  /**
669
- * Checks if a given ID corresponds to a runtime file path.
670
- *
671
- * @param id - The unique identifier for the runtime file.
672
- * @param pathOrId - The path or ID to check.
673
- * @returns `true` if the ID corresponds to the path or ID of a runtime file, otherwise `false`.
674
- */
675
- isMatchingBuiltinId(id, pathOrId) {
676
- const resolvedPath = this.resolvePath(pathOrId);
677
- const resolvedId = this.resolveId(pathOrId);
678
- return !!(this.isBuiltinFile(pathOrId) && (resolvedPath && (resolvedPath === this.builtinIdMap.get(id) || resolvedPath === this.builtinIdMap.get(this.formatRuntimeId(id))) || resolvedId && (resolvedId === this.builtinIdMap.get(id) || resolvedId === this.builtinIdMap.get(this.formatRuntimeId(id)))));
679
- }
680
- /**
681
- * Lists all runtime files in the virtual file system.
682
- *
683
- * @returns A promise that resolves to an array of runtime files.
684
- */
685
- async listBuiltinFiles() {
686
- const runtimeFiles = [];
687
- for (const [id, path] of this.builtinIdMap.entries()) {
688
- const contents = await this.readFile(path);
689
- if (contents) {
690
- runtimeFiles.push({
691
- id: this.formatRuntimeId(id),
692
- path,
693
- contents
694
- });
695
- }
696
- }
697
- return runtimeFiles;
698
- }
699
- /**
700
829
  * Lists files in a given path.
701
830
  *
702
831
  * @param path - The path to list files from.
@@ -713,7 +842,7 @@ var VirtualFileSystem = class {
713
842
  */
714
843
  unlinkSync(path, options) {
715
844
  const formattedPath = toFilePath(path);
716
- if (!this.fileExistsSync(path)) {
845
+ if (!this.isFile(formattedPath)) {
717
846
  return;
718
847
  }
719
848
  this.#log(types.LogLevelLabel.TRACE, `Synchronously removing file: ${formattedPath}`);
@@ -728,7 +857,7 @@ var VirtualFileSystem = class {
728
857
  */
729
858
  async unlink(path, options) {
730
859
  const formattedPath = toFilePath(path);
731
- if (!this.fileExistsSync(path)) {
860
+ if (!this.isFile(formattedPath)) {
732
861
  return;
733
862
  }
734
863
  this.#log(types.LogLevelLabel.TRACE, `Removing file: ${formattedPath}`);
@@ -748,7 +877,7 @@ var VirtualFileSystem = class {
748
877
  */
749
878
  rmdirSync(path, options = {}) {
750
879
  const formattedPath = toFilePath(path);
751
- if (!this.directoryExistsSync(path)) {
880
+ if (!this.isDirectory(formattedPath)) {
752
881
  return;
753
882
  }
754
883
  this.#log(types.LogLevelLabel.TRACE, `Synchronously removing directory: ${formattedPath}`);
@@ -767,7 +896,7 @@ var VirtualFileSystem = class {
767
896
  */
768
897
  async rmdir(path, options = {}) {
769
898
  const formattedPath = toFilePath(path);
770
- if (!this.directoryExistsSync(path)) {
899
+ if (!this.isDirectory(formattedPath)) {
771
900
  return;
772
901
  }
773
902
  this.#log(types.LogLevelLabel.TRACE, `Removing directory: ${formattedPath}`);
@@ -794,7 +923,7 @@ var VirtualFileSystem = class {
794
923
  */
795
924
  async rm(path, options = {}) {
796
925
  this.#log(types.LogLevelLabel.TRACE, `Removing: ${toFilePath(path)}`);
797
- if (this.directoryExistsSync(path)) {
926
+ if (this.isDirectory(path)) {
798
927
  return this.rmdir(path, options);
799
928
  }
800
929
  return this.unlink(path, options);
@@ -838,12 +967,12 @@ var VirtualFileSystem = class {
838
967
  /**
839
968
  * Lists files in a given path.
840
969
  *
841
- * @param path - The path to list files from.
970
+ * @param pathOrId - The path to list files from.
842
971
  * @param options - Options for listing files, such as encoding and recursion.
843
972
  * @returns An array of file names in the specified path.
844
973
  */
845
- async readdir(path, options = "utf8") {
846
- return this.resolveFS(path).promises.readdir(toFilePath(path), options);
974
+ async readdir(pathOrId, options = "utf8") {
975
+ return this.resolveFS(pathOrId).promises.readdir(toFilePath(pathOrId), options);
847
976
  }
848
977
  /**
849
978
  * Asynchronously reads a file from the virtual file system (VFS).
@@ -855,7 +984,7 @@ var VirtualFileSystem = class {
855
984
  if (!pathOrId) {
856
985
  return void 0;
857
986
  }
858
- const filePath = this.resolvePath(toFilePath(pathOrId), {
987
+ const filePath = this.resolve(toFilePath(pathOrId), {
859
988
  type: "file"
860
989
  });
861
990
  if (filePath) {
@@ -884,7 +1013,7 @@ var VirtualFileSystem = class {
884
1013
  if (!pathOrId) {
885
1014
  return void 0;
886
1015
  }
887
- const filePath = this.resolvePath(toFilePath(pathOrId), {
1016
+ const filePath = this.resolve(toFilePath(pathOrId), {
888
1017
  type: "file"
889
1018
  });
890
1019
  if (filePath) {
@@ -901,137 +1030,80 @@ var VirtualFileSystem = class {
901
1030
  /**
902
1031
  * Writes a file to the virtual file system (VFS).
903
1032
  *
904
- * @param file - The path to the file.
1033
+ * @param path - The path to the file.
905
1034
  * @param data - The contents of the file.
906
1035
  * @param options - Optional parameters for writing the file.
907
1036
  * @returns A promise that resolves when the file is written.
908
1037
  */
909
- async writeFile(file, data = "", options = "utf8") {
910
- const absolutePath = this.formatAbsoluteFilePath(toFilePath(file));
911
- if (!this.directoryExistsSync(filePathFns.findFilePath(absolutePath))) {
912
- await this.mkdir(filePathFns.findFilePath(absolutePath), options);
1038
+ async writeFile(path, data = "", options = "utf8") {
1039
+ const formattedPath = this.formatPath(path);
1040
+ if (!this.isDirectory(filePathFns.findFilePath(formattedPath))) {
1041
+ await this.mkdir(filePathFns.findFilePath(formattedPath), isPowerlinesWriteFileOptions(options) ? options : void 0);
913
1042
  }
914
- this.#log(types.LogLevelLabel.TRACE, `Writing ${absolutePath} file to the ${this.resolveOutputMode(absolutePath, options) === "fs" ? "" : "virtual "}file system (size: ${prettyBytes.prettyBytes(new buffer.Blob(toArray.toArray(data)).size)})`);
915
- this.#cachedFS.set(absolutePath, data.toString());
916
- this.clearResolverCache(absolutePath);
917
- const ifs = this.resolveFS(absolutePath, options);
1043
+ let code = isPowerLinesWriteFileData(data) ? data.code : data;
1044
+ if ((!isPowerlinesWriteFileOptions(options) || !options.skipFormat) && isSetString.isSetString(code)) {
1045
+ const resolvedConfig = await prettier.resolveConfig(formattedPath);
1046
+ if (resolvedConfig) {
1047
+ code = await prettier.format(code, {
1048
+ absolutePath: formattedPath,
1049
+ ...resolvedConfig
1050
+ });
1051
+ }
1052
+ }
1053
+ const outputMode = this.resolveOutputMode(formattedPath, isPowerlinesWriteFileOptions(options) ? options : void 0);
1054
+ this.#log(types.LogLevelLabel.TRACE, `Writing ${formattedPath} file to the ${outputMode === "fs" ? "" : "virtual "}file system (size: ${prettyBytes.prettyBytes(new buffer.Blob(toArray.toArray(code)).size)})`);
1055
+ this.meta[formattedPath] = {
1056
+ path: formattedPath,
1057
+ code,
1058
+ mode: outputMode,
1059
+ variant: "normal",
1060
+ ...isPowerLinesWriteFileData(data) ? data : {}
1061
+ };
1062
+ this.clearResolverCache(formattedPath);
1063
+ const ifs = this.resolveFS(formattedPath, isPowerlinesWriteFileOptions(options) ? options : void 0);
918
1064
  if (isFunction.isFunction(ifs.promises.writeFile)) {
919
- return ifs.promises.writeFile(absolutePath, data, omit.omit(options, [
920
- "mode"
921
- ]));
1065
+ return ifs.promises.writeFile(formattedPath, code, isNodeWriteFileOptions(options) ? options : "utf8");
922
1066
  }
923
- return ifs.writeFileSync(absolutePath, data, omit.omit(options, [
924
- "mode"
925
- ]));
1067
+ return ifs.writeFileSync(formattedPath, code, isNodeWriteFileOptions(options) ? options : "utf8");
926
1068
  }
927
1069
  /**
928
1070
  * Synchronously writes a file to the virtual file system (VFS).
929
1071
  *
930
- * @param file - The file to write.
1072
+ * @param path - The file to write.
931
1073
  * @param data - The contents of the file.
932
1074
  * @param options - Optional parameters for writing the file.
933
1075
  */
934
- writeFileSync(file, data = "", options = "utf8") {
935
- const absolutePath = this.formatAbsoluteFilePath(toFilePath(file));
936
- if (!this.directoryExistsSync(filePathFns.findFilePath(absolutePath))) {
937
- this.mkdirSync(filePathFns.findFilePath(absolutePath));
938
- }
939
- this.#log(types.LogLevelLabel.TRACE, `Writing ${absolutePath} file to the ${this.resolveOutputMode(absolutePath, options) === "fs" ? "" : "virtual "} (size: ${prettyBytes.prettyBytes(new buffer.Blob(toArray.toArray(data)).size)})`);
940
- this.#cachedFS.set(absolutePath, data.toString());
941
- this.clearResolverCache(absolutePath);
942
- const writeStream = this.resolveFS(absolutePath, omit.omit(options, [
943
- "mode"
944
- ])).createWriteStream(absolutePath);
1076
+ writeFileSync(path, data = "", options = "utf8") {
1077
+ const formattedPath = this.formatPath(path);
1078
+ if (!this.isDirectory(filePathFns.findFilePath(formattedPath))) {
1079
+ this.mkdirSync(filePathFns.findFilePath(formattedPath), isPowerlinesWriteFileOptions(options) ? options : void 0);
1080
+ }
1081
+ const code = isPowerLinesWriteFileData(data) ? data.code : data;
1082
+ const outputMode = this.resolveOutputMode(formattedPath, isPowerlinesWriteFileOptions(options) ? options : void 0);
1083
+ this.#log(types.LogLevelLabel.TRACE, `Writing ${formattedPath} file to the ${outputMode === "fs" ? "" : "virtual "}file system (size: ${prettyBytes.prettyBytes(new buffer.Blob(toArray.toArray(code)).size)})`);
1084
+ this.meta[formattedPath] = {
1085
+ path: formattedPath,
1086
+ code,
1087
+ mode: outputMode,
1088
+ variant: "normal",
1089
+ ...isPowerLinesWriteFileData(data) ? data : {}
1090
+ };
1091
+ this.clearResolverCache(formattedPath);
1092
+ const writeStream = this.resolveFS(formattedPath, isPowerlinesWriteFileOptions(options) ? options : void 0).createWriteStream(formattedPath);
945
1093
  try {
946
- writeStream.write(data);
1094
+ writeStream.write(code);
947
1095
  } finally {
948
1096
  writeStream.close();
949
1097
  }
950
1098
  }
951
1099
  /**
952
- * Writes a runtime file to the virtual file system (VFS).
953
- *
954
- * @param id - The unique identifier for the runtime file.
955
- * @param path - The path to the runtime file.
956
- * @param contents - The contents of the runtime file.
957
- * @param options - Optional parameters for writing the runtime file.
958
- * @returns A promise that resolves when the file is written.
959
- */
960
- async writeBuiltinFile(id, path, contents, options = {}) {
961
- const formattedId = this.formatRuntimeId(id);
962
- const absolutePath = this.formatAbsoluteFilePath(toFilePath(path));
963
- this.builtinIdMap.set(formattedId, absolutePath);
964
- let data = contents;
965
- if (!options.skipFormat) {
966
- data = await prettier.format(contents, {
967
- absolutePath,
968
- ...await prettier.resolveConfig(absolutePath)
969
- });
970
- }
971
- const _options = defu4__default.default(isSetString.isSetString(options) ? {} : options ?? {}, {
972
- encoding: isSetString.isSetString(options) ? options : "utf8",
973
- mode: "virtual"
974
- });
975
- this.#log(types.LogLevelLabel.DEBUG, `Writing runtime file ${absolutePath} (size: ${prettyBytes.prettyBytes(new buffer.Blob(toArray.toArray(data)).size)}) to ${this.resolveOutputMode(absolutePath, _options) === "fs" ? "disk" : "memory"}`);
976
- return this.writeFile(absolutePath, data, _options);
977
- }
978
- /**
979
- * Adds an entry file to the virtual file system.
980
- *
981
- * @param name - The file name or absolute path of the entry module.
982
- * @param contents - The contents of the entry file.
983
- * @param options - Optional parameters for writing the entry file.
984
- */
985
- async writeEntryFile(name, contents, options = {}) {
986
- const absolutePath = this.formatAbsoluteFilePath(isType.isAbsolutePath(toFilePath(name)) ? toFilePath(name) : toFilePath(joinPaths.joinPaths(this.#context.entryPath, name)));
987
- let data = contents;
988
- if (!options.skipFormat) {
989
- data = await prettier.format(contents, {
990
- absolutePath,
991
- ...await prettier.resolveConfig(absolutePath)
992
- });
993
- }
994
- const _options = defu4__default.default(isSetString.isSetString(options) ? {} : options ?? {}, {
995
- encoding: isSetString.isSetString(options) ? options : "utf8",
996
- mode: "virtual"
997
- });
998
- this.#log(types.LogLevelLabel.DEBUG, `Writing entry file ${absolutePath} (size: ${prettyBytes.prettyBytes(new buffer.Blob(toArray.toArray(data)).size)}) to ${this.resolveOutputMode(absolutePath, _options) === "fs" ? "disk" : "virtual memory"}`);
999
- return this.writeFile(absolutePath, data, _options);
1000
- }
1001
- /**
1002
- * Writes a file to disk from the physical file system (on disk).
1003
- *
1004
- * @param path - The path to the file to write.
1005
- * @param contents - The contents of the file to write.
1006
- * @param options - Optional parameters for writing the file.
1007
- * @returns A promise that resolves when the file is written.
1008
- */
1009
- async writeFileToDisk(path, contents, options = {}) {
1010
- const absolutePath = this.formatAbsoluteFilePath(toFilePath(path));
1011
- let data = contents;
1012
- if (!options.skipFormat) {
1013
- const resolvedConfig = await prettier.resolveConfig(absolutePath);
1014
- if (resolvedConfig) {
1015
- data = await prettier.format(contents, {
1016
- absolutePath,
1017
- ...resolvedConfig
1018
- });
1019
- }
1020
- }
1021
- return this.writeFile(absolutePath, data, defu4__default.default({
1022
- mode: "fs"
1023
- }, isSetString.isSetString(options) ? {} : options ?? {}, {
1024
- encoding: isSetString.isSetString(options) ? options : "utf8"
1025
- }));
1026
- }
1027
- /**
1028
1100
  * Synchronously checks if a file exists in the virtual file system (VFS).
1029
1101
  *
1030
1102
  * @param pathOrId - The path or ID of the file to check.
1031
1103
  * @returns `true` if the file exists, otherwise `false`.
1032
1104
  */
1033
1105
  existsSync(pathOrId) {
1034
- return this.pathExistsSync(this.resolvePath(toFilePath(pathOrId)) || toFilePath(pathOrId));
1106
+ return this.resolve(pathOrId) !== false;
1035
1107
  }
1036
1108
  /**
1037
1109
  * Checks if a file exists in the virtual file system (VFS).
@@ -1039,32 +1111,22 @@ var VirtualFileSystem = class {
1039
1111
  * @remarks
1040
1112
  * This is a base method used by {@link existsSync} - it does not try to resolve the path prior to checking if it exists or not.
1041
1113
  *
1042
- * @param path - The path of the file to check.
1114
+ * @param pathOrId - The path of the file to check.
1043
1115
  * @returns `true` if the file exists, otherwise `false`.
1044
1116
  */
1045
- fileExistsSync(path) {
1046
- const formattedPath = this.formatAbsoluteFilePath(toFilePath(path));
1047
- return this.isValidBuiltinId(formattedPath) || this.#virtualFS.existsSync(formattedPath) && this.#virtualFS.lstatSync(formattedPath).isFile() || this.#fs.existsSync(formattedPath) && this.#fs.lstatSync(formattedPath).isFile() || this.resolveFS(path).existsSync(formattedPath) && this.resolveFS(path).lstatSync(formattedPath).isFile();
1117
+ isFile(pathOrId) {
1118
+ const resolved = this.resolve(pathOrId);
1119
+ return !!(resolved && (this.#virtualFS.existsSync(resolved) && this.#virtualFS.lstatSync(resolved).isFile() || this.#fs.existsSync(resolved) && this.#fs.lstatSync(resolved).isFile() || this.resolveFS(resolved).existsSync(resolved) && this.resolveFS(resolved).lstatSync(resolved).isFile()));
1048
1120
  }
1049
1121
  /**
1050
1122
  * Checks if a directory exists in the virtual file system (VFS).
1051
1123
  *
1052
- * @param path - The path of the directory to check.
1124
+ * @param pathOrId - The path of the directory to check.
1053
1125
  * @returns `true` if the directory exists, otherwise `false`.
1054
1126
  */
1055
- directoryExistsSync(path) {
1056
- const formattedPath = this.formatAbsoluteFilePath(toFilePath(path));
1057
- return this.#virtualFS.existsSync(formattedPath) && this.#virtualFS.lstatSync(formattedPath).isDirectory() || this.#fs.existsSync(formattedPath) && this.#fs.lstatSync(formattedPath).isDirectory() || this.resolveFS(path).existsSync(formattedPath) && this.resolveFS(path).lstatSync(formattedPath).isDirectory();
1058
- }
1059
- /**
1060
- * Checks if a path exists in the virtual file system (VFS).
1061
- *
1062
- * @param path - The path to check.
1063
- * @returns `true` if the path exists, otherwise `false`.
1064
- */
1065
- pathExistsSync(path) {
1066
- const formattedPath = this.formatAbsoluteFilePath(toFilePath(path));
1067
- return this.isValidBuiltinId(formattedPath) || this.#virtualFS.existsSync(formattedPath) || this.#fs.existsSync(formattedPath) || this.resolveFS(path).existsSync(formattedPath);
1127
+ isDirectory(pathOrId) {
1128
+ const resolved = this.resolve(pathOrId);
1129
+ return !!(resolved && (this.#virtualFS.existsSync(resolved) && this.#virtualFS.lstatSync(resolved).isDirectory() || this.#fs.existsSync(resolved) && this.#fs.lstatSync(resolved).isDirectory() || this.resolveFS(resolved).existsSync(resolved) && this.resolveFS(resolved).lstatSync(resolved).isDirectory()));
1068
1130
  }
1069
1131
  /**
1070
1132
  * Retrieves the status of a file in the virtual file system (VFS).
@@ -1073,7 +1135,7 @@ var VirtualFileSystem = class {
1073
1135
  * @returns A promise that resolves to the file's status information, or false if the file does not exist.
1074
1136
  */
1075
1137
  async stat(pathOrId, options) {
1076
- return this.resolveFS(pathOrId).promises.stat(this.resolvePath(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
1138
+ return this.resolveFS(pathOrId).promises.stat(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
1077
1139
  }
1078
1140
  /**
1079
1141
  * Synchronously retrieves the status of a file in the virtual file system (VFS).
@@ -1082,7 +1144,7 @@ var VirtualFileSystem = class {
1082
1144
  * @returns The file's status information, or false if the file does not exist.
1083
1145
  */
1084
1146
  statSync(pathOrId) {
1085
- return this.resolveFS(pathOrId).statSync(this.resolvePath(toFilePath(pathOrId)) || toFilePath(pathOrId));
1147
+ return this.resolveFS(pathOrId).statSync(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId));
1086
1148
  }
1087
1149
  /**
1088
1150
  * Retrieves the status of a symbolic link in the virtual file system (VFS).
@@ -1091,7 +1153,7 @@ var VirtualFileSystem = class {
1091
1153
  * @returns A promise that resolves to the symbolic link's status information, or false if the link does not exist.
1092
1154
  */
1093
1155
  async lstat(pathOrId, options) {
1094
- return this.resolveFS(pathOrId).promises.lstat(this.resolvePath(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
1156
+ return this.resolveFS(pathOrId).promises.lstat(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
1095
1157
  }
1096
1158
  /**
1097
1159
  * Synchronously retrieves the status of a symbolic link in the virtual file system (VFS).
@@ -1100,23 +1162,7 @@ var VirtualFileSystem = class {
1100
1162
  * @returns The symbolic link's status information, or false if the link does not exist.
1101
1163
  */
1102
1164
  lstatSync(pathOrId, options) {
1103
- return this.resolveFS(pathOrId).lstatSync(this.resolvePath(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
1104
- }
1105
- /**
1106
- * Resolves a path or ID to a runtime file id in the virtual file system.
1107
- *
1108
- * @param pathOrId - The path or id of the file to resolve.
1109
- * @returns The resolved id of the runtime file if it exists, otherwise false.
1110
- */
1111
- resolveId(pathOrId) {
1112
- if (this.builtinIdMap.has(this.formatRuntimeId(toFilePath(pathOrId)))) {
1113
- return this.formatRuntimeId(toFilePath(pathOrId));
1114
- }
1115
- const filePath = this.resolvePath(toFilePath(pathOrId));
1116
- if (filePath) {
1117
- return this.builtinIdMap.keys().find((id) => this.builtinIdMap.get(id) === filePath) || false;
1118
- }
1119
- return false;
1165
+ return this.resolveFS(pathOrId).lstatSync(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
1120
1166
  }
1121
1167
  /**
1122
1168
  * Resolves a path based on TypeScript's `tsconfig.json` paths.
@@ -1129,9 +1175,9 @@ var VirtualFileSystem = class {
1129
1175
  resolveTsconfigPath(path) {
1130
1176
  if (this.#context.tsconfig.options.paths) {
1131
1177
  for (const tsconfigPathKey of Object.keys(this.#context.tsconfig.options.paths).filter((tsconfigPath) => path.startsWith(tsconfigPath.replaceAll("*", "")))) {
1132
- const resolvedPath = this.#context.tsconfig.options.paths[tsconfigPathKey]?.find((tsconfigPath) => this.resolvePathName(joinPaths.joinPaths(this.#context.workspaceConfig.workspaceRoot, tsconfigPath.replaceAll("*", ""), path.replace(tsconfigPathKey.replaceAll("*", ""), ""))) || this.formatAbsoluteFilePath(tsconfigPath) === this.formatAbsoluteFilePath(path));
1178
+ const resolvedPath = this.#context.tsconfig.options.paths[tsconfigPathKey]?.find((tsconfigPath) => this.resolvePath(joinPaths.joinPaths(this.#context.workspaceConfig.workspaceRoot, tsconfigPath.replaceAll("*", ""), path.replace(tsconfigPathKey.replaceAll("*", ""), ""))) || this.formatPath(tsconfigPath) === this.formatPath(path));
1133
1179
  if (resolvedPath) {
1134
- return this.formatAbsoluteFilePath(resolvedPath) === this.formatAbsoluteFilePath(path) ? this.formatAbsoluteFilePath(resolvedPath) : this.resolvePathName(joinPaths.joinPaths(this.#context.workspaceConfig.workspaceRoot, resolvedPath.replaceAll("*", ""), path.replace(tsconfigPathKey.replaceAll("*", ""), "")));
1180
+ return this.formatPath(resolvedPath) === this.formatPath(path) ? this.formatPath(resolvedPath) : this.resolvePath(joinPaths.joinPaths(this.#context.workspaceConfig.workspaceRoot, resolvedPath.replaceAll("*", ""), path.replace(tsconfigPathKey.replaceAll("*", ""), "")));
1135
1181
  }
1136
1182
  }
1137
1183
  }
@@ -1161,7 +1207,7 @@ var VirtualFileSystem = class {
1161
1207
  * @returns The resolved real path if it exists, otherwise undefined.
1162
1208
  */
1163
1209
  realpathSync(pathOrId) {
1164
- const filePath = this.resolvePath(toFilePath(pathOrId));
1210
+ const filePath = this.resolve(toFilePath(pathOrId));
1165
1211
  if (!filePath) {
1166
1212
  throw new Error(`File not found: ${toFilePath(pathOrId)}`);
1167
1213
  }
@@ -1174,24 +1220,18 @@ var VirtualFileSystem = class {
1174
1220
  * @param options - Optional parameters for resolving the path, such as whether to include the file extension.
1175
1221
  * @returns The resolved file path if it exists, otherwise undefined.
1176
1222
  */
1177
- resolvePath(pathOrId, options = {}) {
1178
- const formattedPath = toFilePath(pathOrId);
1179
- const resolverKey = `${formattedPath}${options.withExtension ? "-ext" : ""}${options.paths ? `-${murmurhash.murmurhash(options.paths)}` : ""}${options.type ? `-${options.type}` : ""}`;
1223
+ resolve(pathOrId, options = {}) {
1224
+ const formattedPathOrId = toFilePath(pathOrId);
1225
+ const resolverKey = `${formattedPathOrId}${options.withExtension ? "-ext" : ""}${options.paths ? `-${murmurhash.murmurhash(options.paths)}` : ""}${options.type ? `-${options.type}` : ""}`;
1180
1226
  if (this.#cachedResolver.has(resolverKey)) {
1181
1227
  return this.#cachedResolver.get(resolverKey);
1182
- } else if (this.#cachedFS.has(formattedPath)) {
1183
- return formattedPath;
1184
1228
  }
1185
- let result = false;
1186
- if (this.isValidBuiltinId(formattedPath)) {
1187
- result = this.builtinIdMap.get(this.formatRuntimeId(formattedPath));
1188
- } else {
1189
- result = this.resolvePathName(formattedPath, options);
1229
+ let result = this.resolveId(formattedPathOrId);
1230
+ if (!result) {
1231
+ result = this.resolvePath(formattedPathOrId, options);
1190
1232
  }
1191
1233
  if (!result) {
1192
1234
  result = false;
1193
- } else {
1194
- result = toFilePath(result);
1195
1235
  }
1196
1236
  if (result && options.withExtension === false) {
1197
1237
  return result.replace(/\.[m|c]?[t|j]sx?$/, "");
@@ -1200,16 +1240,12 @@ var VirtualFileSystem = class {
1200
1240
  return result;
1201
1241
  }
1202
1242
  /**
1203
- * Formats a file path by removing the runtime prefix and leading null character.
1243
+ * Retrieves the partial metadata for all files in the virtual file system (VFS).
1204
1244
  *
1205
- * @param path - The file path to format.
1206
- * @returns The formatted file path.
1245
+ * @returns A record containing the partial metadata for all files.
1207
1246
  */
1208
- formatFilePath(path) {
1209
- if (!isSetString.isSetString(path)) {
1210
- throw new Error(`Invalid path provided. Expected a string or a valid file path.`);
1211
- }
1212
- return path.replace(new RegExp(`^${this.#context.config.output.builtinPrefix}:`), "").replace(/^\\0/, "");
1247
+ getPartialMeta() {
1248
+ return Object.fromEntries(Object.entries(this.#meta).filter(([_, data]) => isSetObject.isSetObject(data)));
1213
1249
  }
1214
1250
  /**
1215
1251
  * Converts a relative path to an absolute path based on the workspace and project root.
@@ -1217,56 +1253,67 @@ var VirtualFileSystem = class {
1217
1253
  * @param path - The relative path to convert.
1218
1254
  * @returns The absolute path.
1219
1255
  */
1220
- formatAbsoluteFilePath = /* @__PURE__ */ chunkSHUYVCID_js.__name((path) => {
1221
- const formattedPath = this.formatFilePath(path);
1256
+ formatPath(path) {
1257
+ const formattedPath = toFilePath(path);
1222
1258
  if (isType.isAbsolutePath(formattedPath) || formattedPath.startsWith(this.#context.workspaceConfig.workspaceRoot)) {
1223
1259
  return formattedPath;
1224
1260
  } else if (formattedPath.startsWith(this.#context.config.projectRoot)) {
1225
1261
  return joinPaths.joinPaths(this.#context.workspaceConfig.workspaceRoot, formattedPath);
1226
1262
  }
1227
1263
  return formattedPath;
1228
- }, "formatAbsoluteFilePath");
1264
+ }
1229
1265
  /**
1230
- * Formats a runtime ID by removing the file extension and prepending the runtime prefix.
1266
+ * Formats a file id by removing the file extension and prepending the runtime prefix.
1231
1267
  *
1232
- * @param id - The runtime ID to format.
1233
- * @returns The formatted runtime ID.
1268
+ * @param id - The file ID to format.
1269
+ * @returns The formatted file ID.
1234
1270
  */
1235
- formatRuntimeId(id) {
1236
- return `${this.#context.config.output.builtinPrefix}:${this.formatFilePath(id).replace(/\.[m|c]?[t|j]sx?$/, "")}`;
1271
+ formatId(id) {
1272
+ const formattedId = toFilePath(id);
1273
+ return `${this.#context.config.output.builtinPrefix}:${formattedId.replace(new RegExp(`^${this.#context.config.output.builtinPrefix}:`), "").replace(/^\\0/, "").replace(filePathFns.findFileExtensionSafe(formattedId), "")}`;
1237
1274
  }
1238
1275
  /**
1239
- * Resolves a path or ID parameter to a corresponding virtual file path in the virtual file system (VFS).
1276
+ * Resolves an id parameter to a corresponding virtual file path in the virtual file system (VFS).
1240
1277
  *
1241
- * @param pathOrId - The path or ID to resolve.
1242
- * @returns The resolved file path if it exists, otherwise undefined.
1278
+ * @param id - The id to resolve.
1279
+ * @returns The resolved file id if it exists, otherwise undefined.
1243
1280
  */
1244
- resolvePathName(pathOrId, options = {}) {
1245
- if (pathOrId.startsWith(`${this.#context.config.output.builtinPrefix}:`)) {
1246
- return false;
1281
+ resolveId(id) {
1282
+ if (this.#ids[this.formatId(id)]) {
1283
+ return this.#ids[this.formatId(id)] || false;
1247
1284
  }
1248
- if (isType.isAbsolutePath(pathOrId)) {
1249
- if (options.type === "file" ? this.fileExistsSync(pathOrId) : this.pathExistsSync(pathOrId)) {
1250
- return pathOrId;
1285
+ return false;
1286
+ }
1287
+ /**
1288
+ * Resolves a path parameter to a corresponding virtual file path in the virtual file system (VFS).
1289
+ *
1290
+ * @param path - The path to resolve.
1291
+ * @param options - Optional parameters for resolving the path.
1292
+ * @returns The resolved file path if it exists, otherwise undefined.
1293
+ */
1294
+ resolvePath(path, options = {}) {
1295
+ if (isType.isAbsolutePath(path)) {
1296
+ if (this.#existsSync(path)) {
1297
+ return path;
1251
1298
  }
1252
- const result = checkVariants(pathOrId, this);
1299
+ const result = this.checkVariants(path);
1253
1300
  if (result) {
1254
1301
  return result;
1255
1302
  }
1256
1303
  }
1257
- for (const path of this.resolveParentPaths(pathOrId, options.paths)) {
1258
- const request = joinPaths.joinPaths(path, pathOrId);
1259
- if (options.type === "file" ? this.fileExistsSync(pathOrId) : this.pathExistsSync(pathOrId)) {
1304
+ for (const parentPath of this.resolveParentPaths(path, options.paths)) {
1305
+ const request = joinPaths.joinPaths(parentPath, path);
1306
+ if (this.#existsSync(request)) {
1260
1307
  return request;
1261
1308
  }
1262
- const result = checkVariants(request, this);
1309
+ const result = this.checkVariants(request);
1263
1310
  if (result) {
1264
1311
  return result;
1265
1312
  }
1266
1313
  }
1267
1314
  return false;
1268
1315
  }
1269
- resolveParentPaths(request, current = []) {
1316
+ resolveParentPaths(request, parents = []) {
1270
1317
  let paths = [
1271
1318
  this.#context.workspaceConfig.workspaceRoot,
1272
1319
  joinPaths.joinPaths(this.#context.workspaceConfig.workspaceRoot, this.#context.config.projectRoot)
@@ -1284,7 +1331,7 @@ var VirtualFileSystem = class {
1284
1331
  ret.push(path);
1285
1332
  }
1286
1333
  return ret;
1287
- }, current.filter(Boolean).map((p) => this.formatAbsoluteFilePath(toFilePath(p))));
1334
+ }, parents.filter(Boolean).map((p) => this.formatPath(p)));
1288
1335
  }
1289
1336
  /**
1290
1337
  * Select the file system module to use for the operation based on the path or URL.
@@ -1315,7 +1362,7 @@ var VirtualFileSystem = class {
1315
1362
  } else if (options.mode === "fs" || this.#context.config.output.mode === "fs" || isParentPath.isParentPath(toFilePath(pathOrUrl), this.#context.dataPath) || isParentPath.isParentPath(toFilePath(pathOrUrl), this.#context.cachePath) || isParentPath.isParentPath(toFilePath(pathOrUrl), joinPaths.joinPaths(this.#context.workspaceConfig.workspaceRoot, this.#context.config.output.outputPath))) {
1316
1363
  return "fs";
1317
1364
  }
1318
- return null;
1365
+ return void 0;
1319
1366
  }
1320
1367
  /**
1321
1368
  * Clears the resolver cache for a given path.
@@ -1325,208 +1372,93 @@ var VirtualFileSystem = class {
1325
1372
  clearResolverCache(path) {
1326
1373
  this.#cachedResolver.keys().filter((key) => key.startsWith(toFilePath(path))).forEach((key) => this.#cachedResolver.delete(key));
1327
1374
  }
1328
- };
1329
- var FILE_PREFIX = "file://";
1330
- function toFilePath(pathOrUrl) {
1331
- if (!pathOrUrl) {
1332
- throw new Error("No Path or URL provided to Virtual File System");
1333
- }
1334
- let result = pathOrUrl.toString();
1335
- if (result.startsWith(FILE_PREFIX)) {
1336
- result = result.slice(FILE_PREFIX.length);
1337
- }
1338
- return result;
1339
- }
1340
- chunkSHUYVCID_js.__name(toFilePath, "toFilePath");
1341
- var FS_METHODS = [
1342
- "mkdir",
1343
- "mkdirSync",
1344
- "rmdir",
1345
- "rmdirSync",
1346
- "unlink",
1347
- "unlinkSync",
1348
- "existsSync",
1349
- "realpathSync",
1350
- "writeFileSync",
1351
- "readFileSync",
1352
- "readdirSync",
1353
- "createWriteStream",
1354
- "WriteStream",
1355
- "createReadStream",
1356
- "ReadStream"
1357
- ];
1358
- var FS_PROMISE_METHODS = [
1359
- "mkdir",
1360
- "rm",
1361
- "rmdir",
1362
- "unlink",
1363
- "writeFile",
1364
- "readFile",
1365
- "readdir",
1366
- "stat",
1367
- "lstat"
1368
- ];
1369
- function cloneFS(originalFS) {
1370
- const clonedFS = {
1371
- ...originalFS,
1372
- promises: {
1373
- ...originalFS.promises ?? {}
1375
+ /**
1376
+ * Check if the file exists with different variants (index, extensions).
1377
+ *
1378
+ * @param request - The request path to check.
1379
+ * @param parentPath - An optional parent path to prepend to the request.
1380
+ * @returns The file path if it exists, otherwise false.
1381
+ */
1382
+ checkVariants(request, parentPath) {
1383
+ const path = parentPath ? joinPaths.joinPaths(parentPath, request) : request;
1384
+ let file = this.checkExtensions(path);
1385
+ if (file) {
1386
+ return file;
1374
1387
  }
1375
- };
1376
- for (const method of FS_METHODS) {
1377
- if (originalFS[method]) {
1378
- clonedFS[method] = originalFS[method];
1388
+ file = this.checkIndex(path);
1389
+ if (file) {
1390
+ return file;
1379
1391
  }
1392
+ return false;
1380
1393
  }
1381
- originalFS.promises ??= {};
1382
- for (const method of FS_PROMISE_METHODS) {
1383
- if (originalFS.promises[method]) {
1384
- clonedFS.promises ??= {};
1385
- clonedFS.promises[method] = originalFS.promises[method];
1386
- clonedFS[method] = originalFS.promises[method];
1394
+ /**
1395
+ * Check if the index file exists in the given request path.
1396
+ *
1397
+ * @param request - The request path to check.
1398
+ * @returns The index file path if it exists, otherwise false.
1399
+ */
1400
+ checkIndex(request) {
1401
+ let file = joinPaths.joinPaths(request, "index");
1402
+ if (this.#existsSync(file)) {
1403
+ return file;
1387
1404
  }
1388
- }
1389
- for (const prop in clonedFS) {
1390
- if (isFunction.isFunction(clonedFS[prop])) {
1391
- clonedFS[prop] = clonedFS[prop].bind(originalFS);
1392
- if (isFunction.isFunction(clonedFS.promises[prop])) {
1393
- clonedFS.promises[prop] = clonedFS.promises[prop].bind(originalFS);
1394
- }
1405
+ file = this.checkExtensions(file);
1406
+ if (file) {
1407
+ return file;
1395
1408
  }
1409
+ return false;
1396
1410
  }
1397
- for (const prop in clonedFS.promises) {
1398
- if (isFunction.isFunction(clonedFS.promises[prop])) {
1399
- clonedFS.promises[prop] = clonedFS.promises[prop].bind(originalFS);
1411
+ /**
1412
+ * Check if the file exists with different extensions.
1413
+ *
1414
+ * @param request - The request path to check.
1415
+ * @param vfs - The file system module to use for checking file existence.
1416
+ * @returns The file path if it exists with any of the checked extensions, otherwise false.
1417
+ */
1418
+ checkExtensions(request) {
1419
+ let file = `${request}.ts`;
1420
+ if (this.#existsSync(file)) {
1421
+ return file;
1400
1422
  }
1423
+ file = `${request}.mts`;
1424
+ if (this.#existsSync(file)) {
1425
+ return file;
1426
+ }
1427
+ file = `${request}.cts`;
1428
+ if (this.#existsSync(file)) {
1429
+ return file;
1430
+ }
1431
+ file = `${request}.tsx`;
1432
+ if (this.#existsSync(file)) {
1433
+ return file;
1434
+ }
1435
+ file = `${request}.js`;
1436
+ if (this.#existsSync(file)) {
1437
+ return file;
1438
+ }
1439
+ file = `${request}.mjs`;
1440
+ if (this.#existsSync(file)) {
1441
+ return file;
1442
+ }
1443
+ file = `${request}.cjs`;
1444
+ if (this.#existsSync(file)) {
1445
+ return file;
1446
+ }
1447
+ file = `${request}.jsx`;
1448
+ if (this.#existsSync(file)) {
1449
+ return file;
1450
+ }
1451
+ file = `${request}.json`;
1452
+ if (this.#existsSync(file)) {
1453
+ return file;
1454
+ }
1455
+ file = `${request}.d.ts`;
1456
+ if (this.#existsSync(file)) {
1457
+ return file;
1458
+ }
1459
+ return false;
1401
1460
  }
1402
- return clonedFS;
1403
- }
1404
- chunkSHUYVCID_js.__name(cloneFS, "cloneFS");
1405
- function patchFS(originalFS, vfs) {
1406
- const clonedFS = cloneFS(originalFS);
1407
- originalFS.mkdirSync = (file, options) => vfs.mkdirSync(toFilePath(file), options);
1408
- originalFS.mkdir = (file, options, callback) => vfs.mkdir(toFilePath(file), options, callback);
1409
- originalFS.promises.mkdir = async (file, options) => vfs.mkdir(toFilePath(file), options);
1410
- originalFS.unlinkSync = (file) => vfs.unlinkSync(toFilePath(file));
1411
- originalFS.promises.rm = async (file, options) => vfs.rm(toFilePath(file), options);
1412
- originalFS.promises.unlink = async (file) => vfs.unlink(toFilePath(file));
1413
- originalFS.existsSync = (file) => vfs.existsSync(toFilePath(file));
1414
- Object.defineProperty(originalFS, "realpathSync", {
1415
- value: /* @__PURE__ */ chunkSHUYVCID_js.__name((file, options) => vfs.realpathSync(toFilePath(file), options), "value")
1416
- });
1417
- originalFS.writeFileSync = (file, data, options) => vfs.writeFileSync(toFilePath(file), data, options);
1418
- originalFS.promises.writeFile = async (file, data, options) => vfs.writeFile(toFilePath(file), data, options);
1419
- originalFS.readFileSync = (file, options) => vfs.readFileSync(toFilePath(file), options);
1420
- originalFS.promises.readFile = (file, options) => vfs.readFile(toFilePath(file), options);
1421
- originalFS.readdirSync = (file, options) => vfs.readdirSync(toFilePath(file), options);
1422
- originalFS.promises.readdir = (file, options) => vfs.readdir(toFilePath(file), options);
1423
- Object.defineProperty(originalFS, "statSync", {
1424
- value: /* @__PURE__ */ chunkSHUYVCID_js.__name((file, options) => vfs.statSync(toFilePath(file), options), "value")
1425
- });
1426
- originalFS.stat = (file, options) => vfs.statSync(toFilePath(file), options);
1427
- originalFS.promises.stat = (file, options) => vfs.stat(toFilePath(file), options);
1428
- Object.defineProperty(originalFS, "lstatSync", {
1429
- value: /* @__PURE__ */ chunkSHUYVCID_js.__name((file, options) => vfs.lstatSync(toFilePath(file), options), "value")
1430
- });
1431
- originalFS.lstat = (file, options) => vfs.lstatSync(toFilePath(file), options);
1432
- originalFS.promises.lstat = (file, options) => vfs.lstat(toFilePath(file), options);
1433
- return () => {
1434
- originalFS.mkdirSync = clonedFS.mkdirSync;
1435
- originalFS.mkdir = clonedFS.mkdir;
1436
- originalFS.promises.mkdir = clonedFS.promises.mkdir;
1437
- originalFS.unlinkSync = clonedFS.unlinkSync;
1438
- originalFS.promises.rm = clonedFS.promises.rm;
1439
- originalFS.promises.unlink = clonedFS.promises.unlink;
1440
- originalFS.existsSync = clonedFS.existsSync;
1441
- originalFS.realpathSync = clonedFS.realpathSync;
1442
- originalFS.writeFileSync = clonedFS.writeFileSync;
1443
- originalFS.promises.writeFile = clonedFS.promises.writeFile;
1444
- originalFS.readFileSync = clonedFS.readFileSync;
1445
- originalFS.promises.readFile = clonedFS.promises.readFile;
1446
- originalFS.readdirSync = clonedFS.readdirSync;
1447
- originalFS.promises.readdir = clonedFS.promises.readdir;
1448
- Object.defineProperty(originalFS, "statSync", {
1449
- value: clonedFS.statSync
1450
- });
1451
- originalFS.stat = clonedFS.stat;
1452
- originalFS.promises.stat = clonedFS.promises.stat;
1453
- Object.defineProperty(originalFS, "lstatSync", {
1454
- value: clonedFS.lstatSync
1455
- });
1456
- originalFS.lstat = clonedFS.lstat;
1457
- originalFS.promises.lstat = clonedFS.promises.lstat;
1458
- };
1459
- }
1460
- chunkSHUYVCID_js.__name(patchFS, "patchFS");
1461
- function checkVariants(request, vfs, parentPath) {
1462
- const path = parentPath ? joinPaths.joinPaths(parentPath, request) : request;
1463
- let file = checkExtensions(path, vfs);
1464
- if (file) {
1465
- return file;
1466
- }
1467
- file = checkIndex(path, vfs);
1468
- if (file) {
1469
- return file;
1470
- }
1471
- return false;
1472
- }
1473
- chunkSHUYVCID_js.__name(checkVariants, "checkVariants");
1474
- function checkIndex(request, vfs) {
1475
- let file = joinPaths.joinPaths(request, "index");
1476
- if (vfs.fileExistsSync(file)) {
1477
- return file;
1478
- }
1479
- file = checkExtensions(file, vfs);
1480
- if (file) {
1481
- return file;
1482
- }
1483
- return false;
1484
- }
1485
- chunkSHUYVCID_js.__name(checkIndex, "checkIndex");
1486
- function checkExtensions(request, vfs) {
1487
- let file = `${request}.ts`;
1488
- if (vfs.fileExistsSync(file)) {
1489
- return file;
1490
- }
1491
- file = `${request}.mts`;
1492
- if (vfs.fileExistsSync(file)) {
1493
- return file;
1494
- }
1495
- file = `${request}.cts`;
1496
- if (vfs.fileExistsSync(file)) {
1497
- return file;
1498
- }
1499
- file = `${request}.tsx`;
1500
- if (vfs.fileExistsSync(file)) {
1501
- return file;
1502
- }
1503
- file = `${request}.js`;
1504
- if (vfs.fileExistsSync(file)) {
1505
- return file;
1506
- }
1507
- file = `${request}.mjs`;
1508
- if (vfs.fileExistsSync(file)) {
1509
- return file;
1510
- }
1511
- file = `${request}.cjs`;
1512
- if (vfs.fileExistsSync(file)) {
1513
- return file;
1514
- }
1515
- file = `${request}.jsx`;
1516
- if (vfs.fileExistsSync(file)) {
1517
- return file;
1518
- }
1519
- file = `${request}.json`;
1520
- if (vfs.fileExistsSync(file)) {
1521
- return file;
1522
- }
1523
- file = `${request}.d.ts`;
1524
- if (vfs.fileExistsSync(file)) {
1525
- return file;
1526
- }
1527
- return false;
1528
- }
1529
- chunkSHUYVCID_js.__name(checkExtensions, "checkExtensions");
1461
+ };
1530
1462
  function createVfs(context) {
1531
1463
  const vfs = new VirtualFileSystem(context);
1532
1464
  return vfs;
@@ -1584,7 +1516,7 @@ var PowerlinesContext = class _PowerlinesContext {
1584
1516
  * @returns A promise that resolves to the new context.
1585
1517
  */
1586
1518
  static async from(workspaceRoot, config) {
1587
- const context = new _PowerlinesContext(await chunkHHPODCTP_js.loadWorkspaceConfig(workspaceRoot, config.root));
1519
+ const context = new _PowerlinesContext(await chunk4UWZOCEA_js.loadWorkspaceConfig(workspaceRoot, config.root));
1588
1520
  await context.withUserConfig(config);
1589
1521
  context.powerlinesPath = await resolve.resolvePackage("powerlines");
1590
1522
  if (!context.powerlinesPath) {
@@ -1671,10 +1603,10 @@ var PowerlinesContext = class _PowerlinesContext {
1671
1603
  workspaceRoot: this.workspaceConfig?.workspaceRoot,
1672
1604
  projectRoot: this.config?.projectRoot
1673
1605
  }, {
1674
- maxLength: chunkHHPODCTP_js.PROJECT_ROOT_HASH_LENGTH
1606
+ maxLength: chunk4UWZOCEA_js.PROJECT_ROOT_HASH_LENGTH
1675
1607
  }),
1676
1608
  configHash: murmurhash.murmurhash(this.config, {
1677
- maxLength: chunkHHPODCTP_js.CACHE_HASH_LENGTH
1609
+ maxLength: chunk4UWZOCEA_js.CACHE_HASH_LENGTH
1678
1610
  }),
1679
1611
  builtinIdMap: {},
1680
1612
  virtualFiles: {}
@@ -1736,7 +1668,7 @@ var PowerlinesContext = class _PowerlinesContext {
1736
1668
  * Get the path to the data directory for the project
1737
1669
  */
1738
1670
  get dataPath() {
1739
- return join.joinPaths(this.envPaths.data, "projects", chunkHHPODCTP_js.getPrefixedProjectRootHash(this.config.name, this.meta.projectRootHash));
1671
+ return join.joinPaths(this.envPaths.data, "projects", chunk4UWZOCEA_js.getPrefixedProjectRootHash(this.config.name, this.meta.projectRootHash));
1740
1672
  }
1741
1673
  /**
1742
1674
  * Get the path to the cache directory for the project
@@ -1746,7 +1678,7 @@ var PowerlinesContext = class _PowerlinesContext {
1746
1678
  checksum: this.#checksum,
1747
1679
  config: this.meta.configHash
1748
1680
  }, {
1749
- maxLength: chunkHHPODCTP_js.CACHE_HASH_LENGTH
1681
+ maxLength: chunk4UWZOCEA_js.CACHE_HASH_LENGTH
1750
1682
  }));
1751
1683
  }
1752
1684
  /**
@@ -1762,6 +1694,57 @@ var PowerlinesContext = class _PowerlinesContext {
1762
1694
  return getWorkspaceRoot.relativeToWorkspaceRoot(this.config.projectRoot);
1763
1695
  }
1764
1696
  /**
1697
+ * The builtin module id that exist in the Powerlines virtual file system
1698
+ */
1699
+ get builtins() {
1700
+ return Object.values(this.fs.meta).filter((meta) => meta && meta.variant === "builtin").map((meta) => meta?.id).filter(Boolean);
1701
+ }
1702
+ /**
1703
+ * Get the project root relative to the workspace root
1704
+ */
1705
+ async getBuiltins() {
1706
+ return Promise.all(Object.entries(this.fs.meta).filter(([, meta]) => meta && meta.variant === "builtin").map(async ([path, meta]) => {
1707
+ const code = await this.fs.readFile(path);
1708
+ return {
1709
+ ...meta,
1710
+ path,
1711
+ code
1712
+ };
1713
+ }));
1714
+ }
1715
+ /**
1716
+ * Resolves a entry virtual file and writes it to the VFS if it does not already exist
1717
+ *
1718
+ * @param code - The source code of the entry file
1719
+ * @param path - A path to write the entry file to
1720
+ * @param options - Optional write file options
1721
+ */
1722
+ async writeEntry(code, path, options = {}) {
1723
+ return this.fs.writeFile(isType.isAbsolute(path) ? path : append.appendPath(path, this.entryPath), {
1724
+ code,
1725
+ variant: "entry"
1726
+ }, defu4__default.default(options, {
1727
+ mode: this.config.output.mode
1728
+ }));
1729
+ }
1730
+ /**
1731
+ * Resolves a builtin virtual file and writes it to the VFS if it does not already exist
1732
+ *
1733
+ * @param code - The source code of the builtin file
1734
+ * @param id - The unique identifier of the builtin file
1735
+ * @param path - An optional path to write the builtin file to
1736
+ * @param options - Optional write file options
1737
+ */
1738
+ async writeBuiltin(code, id, path, options = {}) {
1739
+ return this.fs.writeFile(path ? isType.isAbsolute(path) ? path : join.joinPaths(this.builtinsPath, path) : append.appendPath(id, this.builtinsPath), {
1740
+ id,
1741
+ code,
1742
+ variant: "builtin"
1743
+ }, defu4__default.default(options, {
1744
+ mode: this.config.output.mode
1745
+ }));
1746
+ }
1747
+ /**
1765
1748
  * Parses the source code and returns a {@link ParseResult} object.
1766
1749
  *
1767
1750
  * @param code - The source code to parse.
@@ -1899,7 +1882,7 @@ ${result.errors.map((error) => ` [${error.severity}] ${error.message}${error.co
1899
1882
  if (exists.existsSync(packageJsonPath)) {
1900
1883
  this.packageJson = await json.readJsonFile(packageJsonPath);
1901
1884
  }
1902
- this.#checksum = await chunkHHPODCTP_js.getChecksum(cacheKey.projectRoot);
1885
+ this.#checksum = await chunk4UWZOCEA_js.getChecksum(cacheKey.projectRoot);
1903
1886
  this.resolver = createResolver({
1904
1887
  workspaceRoot: this.workspaceConfig.workspaceRoot,
1905
1888
  projectRoot: cacheKey.projectRoot,
@@ -1907,7 +1890,7 @@ ${result.errors.map((error) => ` [${error.severity}] ${error.message}${error.co
1907
1890
  mode: cacheKey.mode,
1908
1891
  skipCache: cacheKey.skipCache
1909
1892
  });
1910
- const userConfig = await chunkHHPODCTP_js.loadUserConfigFile(cacheKey.projectRoot, this.resolver, cacheKey.command, cacheKey.mode, cacheKey.configFile);
1893
+ const userConfig = await chunk4UWZOCEA_js.loadUserConfigFile(cacheKey.projectRoot, this.resolver, cacheKey.command, cacheKey.mode, cacheKey.configFile);
1911
1894
  this.mergeUserConfig(userConfig.config);
1912
1895
  configCache.set(cacheKey, {
1913
1896
  projectJson: this.projectJson,
@@ -2271,7 +2254,7 @@ var PowerlinesAPIContext = class _PowerlinesAPIContext extends PowerlinesContext
2271
2254
  * @returns A promise that resolves to the new context.
2272
2255
  */
2273
2256
  static async from(workspaceRoot, config) {
2274
- const context = new _PowerlinesAPIContext(await chunkHHPODCTP_js.loadWorkspaceConfig(workspaceRoot, config.root));
2257
+ const context = new _PowerlinesAPIContext(await chunk4UWZOCEA_js.loadWorkspaceConfig(workspaceRoot, config.root));
2275
2258
  await context.withUserConfig(config);
2276
2259
  context.powerlinesPath = await resolve.resolvePackage("powerlines");
2277
2260
  if (!context.powerlinesPath) {
@@ -2363,6 +2346,26 @@ var PowerlinesAPIContext = class _PowerlinesAPIContext extends PowerlinesContext
2363
2346
  }
2364
2347
  }
2365
2348
  };
2349
+ function getBaseFileHeader(context) {
2350
+ return `
2351
+ // Generated with ${titleCase.titleCase(context.config.framework)}
2352
+ // Note: Do not edit this file manually - it will be overwritten automatically
2353
+ `;
2354
+ }
2355
+ chunkSHUYVCID_js.__name(getBaseFileHeader, "getBaseFileHeader");
2356
+ function getFileHeader(context, options = {}) {
2357
+ const { directive = null, prettierIgnore = false } = options;
2358
+ return `/* eslint-disable */
2359
+ // biome-ignore lint: disable
2360
+ ${prettierIgnore ? `// prettier-ignore` : ""}${directive ? `
2361
+
2362
+ ${directive}
2363
+ ` : "\n"}
2364
+ ${getBaseFileHeader(context)}
2365
+
2366
+ `;
2367
+ }
2368
+ chunkSHUYVCID_js.__name(getFileHeader, "getFileHeader");
2366
2369
  function getString(code) {
2367
2370
  if (!code) {
2368
2371
  return "";
@@ -2397,7 +2400,7 @@ function resolveModulePath(nodePath, state) {
2397
2400
  return;
2398
2401
  }
2399
2402
  const sourcePath = nodePath.node.value;
2400
- const resolvedPath = state.context?.fs.resolvePath(sourcePath);
2403
+ const resolvedPath = state.context?.fs.resolve(sourcePath);
2401
2404
  if (resolvedPath) {
2402
2405
  nodePath.replaceWith(t__namespace.stringLiteral(
2403
2406
  // Remove the file extension if it exists
@@ -2498,8 +2501,9 @@ var moduleResolverBabelPlugin = /* @__PURE__ */ chunkSHUYVCID_js.__name((context
2498
2501
  async function generateTypes(context) {
2499
2502
  context.log(types.LogLevelLabel.TRACE, `Preparing the TypeScript definitions for the Powerlines project.`);
2500
2503
  context.log(types.LogLevelLabel.TRACE, "Transforming built-ins runtime modules files.");
2501
- const builtinFiles = await Promise.all((await context.fs.listBuiltinFiles()).filter((file) => !context.fs.isMatchingBuiltinId("index", file.id)).map(async (file) => {
2502
- const result = await core.transformAsync(file.contents, {
2504
+ const builtinFiles = await context.getBuiltins();
2505
+ const builtinFilePaths = await Promise.all(builtinFiles.map(async (file) => {
2506
+ const result = await core.transformAsync(file.code.toString(), {
2503
2507
  highlightCode: true,
2504
2508
  code: true,
2505
2509
  ast: false,
@@ -2527,14 +2531,14 @@ async function generateTypes(context) {
2527
2531
  throw new Error(`Powerlines - Generate Types failed to compile ${file.id}`);
2528
2532
  }
2529
2533
  context.log(types.LogLevelLabel.TRACE, `Writing transformed built-in runtime file ${file.id}.`);
2530
- await context.fs.writeBuiltinFile(file.id, file.path, result.code);
2534
+ await context.writeBuiltin(result.code, file.id, file.path);
2531
2535
  return file.path;
2532
2536
  }));
2533
2537
  const typescriptPath = await resolve.resolvePackage("typescript");
2534
2538
  if (!typescriptPath) {
2535
2539
  throw new Error("Could not resolve TypeScript package location. Please ensure TypeScript is installed.");
2536
2540
  }
2537
- const files = builtinFiles.reduce((ret, fileName) => {
2541
+ const files = builtinFilePaths.reduce((ret, fileName) => {
2538
2542
  const formatted = replace.replacePath(fileName, context.workspaceConfig.workspaceRoot);
2539
2543
  if (!ret.includes(formatted)) {
2540
2544
  ret.push(formatted);
@@ -2569,9 +2573,9 @@ async function generateTypes(context) {
2569
2573
  const emitResult = program.emit(void 0, (fileName, text, _, __, sourceFiles, _data) => {
2570
2574
  const sourceFile2 = sourceFiles?.[0];
2571
2575
  if (sourceFile2?.fileName && !fileName.endsWith(".map")) {
2572
- if (context.fs.isBuiltinFile(sourceFile2.fileName)) {
2576
+ if (builtinFiles.some((file) => file.id === sourceFile2.fileName || file.path === sourceFile2.fileName)) {
2573
2577
  builtinModules += `
2574
- declare module "${context.fs.resolveId(sourceFile2.fileName)}" {
2578
+ declare module "${context.fs.resolve(sourceFile2.fileName)}" {
2575
2579
  ${text.trim().replace(/^\s*export\s*declare\s*/gm, "export ").replace(/^\s*declare\s*/gm, "")}
2576
2580
  }
2577
2581
  `;
@@ -2610,7 +2614,9 @@ ${builtinModules}`.replace(
2610
2614
  /import\s*(?:type\s*)?\{?[\w,\s]*(?:\}\s*)?from\s*(?:'|")@?[a-zA-Z0-9-\\/.]*(?:'|");?/g,
2611
2615
  ""
2612
2616
  ).replaceAll("#private;", "").replace(/__Ω/g, ""));
2613
- await context.fs.writeFileToDisk(sourceFile.id, getString(sourceFile.code));
2617
+ await context.fs.writeFile(sourceFile.id, getString(sourceFile.code), {
2618
+ mode: "fs"
2619
+ });
2614
2620
  }
2615
2621
  chunkSHUYVCID_js.__name(generateTypes, "generateTypes");
2616
2622
  async function installPackage(context, packageName, dev = false) {
@@ -2774,7 +2780,9 @@ async function initializeTsconfig(context) {
2774
2780
  const tsconfigFilePath = getTsconfigFilePath(context.workspaceConfig.workspaceRoot, context.config.projectRoot, context.config.tsconfig);
2775
2781
  context.tsconfig.originalTsconfigJson = await json.readJsonFile(tsconfigFilePath);
2776
2782
  context.tsconfig.tsconfigJson = await resolveTsconfigChanges(context);
2777
- await context.fs.writeFileToDisk(tsconfigFilePath, stormJson.StormJSON.stringify(context.tsconfig.tsconfigJson));
2783
+ await context.fs.writeFile(tsconfigFilePath, stormJson.StormJSON.stringify(context.tsconfig.tsconfigJson), {
2784
+ mode: "fs"
2785
+ });
2778
2786
  context.tsconfig = getParsedTypeScriptConfig(context.workspaceConfig.workspaceRoot, context.config.projectRoot, context.config.tsconfig, context.config.tsconfigRaw, context.tsconfig.originalTsconfigJson);
2779
2787
  }
2780
2788
  chunkSHUYVCID_js.__name(initializeTsconfig, "initializeTsconfig");
@@ -2898,8 +2906,8 @@ ${context.entry.map((entry) => `- ${entry.input.file || entry.file}${entry.outpu
2898
2906
  context.log(types.LogLevelLabel.TRACE, `Powerlines configuration has been resolved:
2899
2907
 
2900
2908
  ${console.formatLogMessage(context.config)}`);
2901
- context.fs[chunkHHPODCTP_js.__VFS_INIT__]();
2902
- await chunkHHPODCTP_js.writeMetaFile(context);
2909
+ context.fs[chunk4UWZOCEA_js.__VFS_INIT__]();
2910
+ await chunk4UWZOCEA_js.writeMetaFile(context);
2903
2911
  context.persistedMeta = context.meta;
2904
2912
  if (!exists.existsSync(context.cachePath)) {
2905
2913
  await helpers.createDirectory(context.cachePath);
@@ -2910,11 +2918,6 @@ ${console.formatLogMessage(context.config)}`);
2910
2918
  await this.callPreHook(context, "prepare");
2911
2919
  if (context.config.projectType === "application") {
2912
2920
  context.log(types.LogLevelLabel.TRACE, "Generating built-in barrel file");
2913
- await context.fs.writeBuiltinFile("index", joinPaths.joinPaths(context.builtinsPath, "index.ts"), `
2914
- ${getFileHeader(context)}
2915
-
2916
- ${(await context.fs.listBuiltinFiles()).filter((file) => !isParentPath.isParentPath(file.path, joinPaths.joinPaths(context.builtinsPath, "log")) && !isParentPath.isParentPath(file.path, joinPaths.joinPaths(context.builtinsPath, "storage"))).map((file) => `export * from "./${replace.replacePath(file.path, context.builtinsPath).replace(`.${filePathFns.findFileExtensionSafe(file.path)}`, "")}";`).join("\n")}
2917
- `);
2918
2921
  }
2919
2922
  if (context.config.output.dts !== false) {
2920
2923
  await generateTypes(context);
@@ -2925,8 +2928,8 @@ ${console.formatLogMessage(context.config)}`);
2925
2928
  throw new Error("Failed to parse the TypeScript configuration file.");
2926
2929
  }
2927
2930
  await this.callPostHook(context, "prepare");
2928
- await chunkHHPODCTP_js.writeMetaFile(context);
2929
- context.fs[chunkHHPODCTP_js.__VFS_REVERT__]();
2931
+ await chunk4UWZOCEA_js.writeMetaFile(context);
2932
+ context.fs[chunk4UWZOCEA_js.__VFS_REVERT__]();
2930
2933
  });
2931
2934
  this.context.log(types.LogLevelLabel.INFO, "Powerlines API has been prepared successfully");
2932
2935
  }
@@ -3085,7 +3088,7 @@ ${console.formatLogMessage(context.config)}`);
3085
3088
  this.context.log(types.LogLevelLabel.TRACE, "Powerlines finalize execution started");
3086
3089
  await this.#executeEnvironments(async (context) => {
3087
3090
  await this.callHook(context, "finalize");
3088
- context.fs[chunkHHPODCTP_js.__VFS_REVERT__]();
3091
+ context.fs[chunk4UWZOCEA_js.__VFS_REVERT__]();
3089
3092
  });
3090
3093
  this.context.log(types.LogLevelLabel.TRACE, "Powerlines finalize execution completed");
3091
3094
  }
@@ -3358,8 +3361,8 @@ var DEFAULT_ESBUILD_CONFIG = {
3358
3361
  };
3359
3362
  function extractESBuildConfig(context) {
3360
3363
  return defu4__default.default({
3361
- alias: context.fs.builtinIdMap.keys().reduce((ret, id) => {
3362
- const path = context.fs.builtinIdMap.get(id);
3364
+ alias: context.builtins.reduce((ret, id) => {
3365
+ const path = context.fs.ids[id];
3363
3366
  if (path) {
3364
3367
  ret[id] = path;
3365
3368
  }
@@ -3402,8 +3405,8 @@ var DEFAULT_VITE_CONFIG = {
3402
3405
  function extractViteConfig(context) {
3403
3406
  return defu4__default.default({
3404
3407
  resolve: {
3405
- alias: context.fs.builtinIdMap.keys().reduce((ret, id) => {
3406
- const path = context.fs.builtinIdMap.get(id);
3408
+ alias: context.builtins.reduce((ret, id) => {
3409
+ const path = context.fs.ids[id];
3407
3410
  if (path) {
3408
3411
  ret[id] = path;
3409
3412
  }
@@ -3427,7 +3430,7 @@ function extractViteConfig(context) {
3427
3430
  esbuild: extractESBuildConfig(context),
3428
3431
  logLevel: context.config.logLevel ?? void 0,
3429
3432
  envDir: context.config.projectRoot,
3430
- noExternal: Array.from(context.fs.builtinIdMap.keys())
3433
+ noExternal: context.builtins
3431
3434
  }, context.config.build.variant === "vite" ? context.config.build : {}, {
3432
3435
  build: {
3433
3436
  minify: context.config.mode !== "development",
@@ -3440,16 +3443,16 @@ chunkSHUYVCID_js.__name(extractViteConfig, "extractViteConfig");
3440
3443
  var NON_NODE_MODULE_REGEX = /^[A-Z]:[/\\]|^\.{0,2}\/|^\.{1,2}$/;
3441
3444
  async function handleResolveId(context, args, options = {}) {
3442
3445
  if (args.id) {
3443
- if (context.fs.isVirtualFile(args.id) || args.importer && context.fs.isVirtualFile(args.id, {
3446
+ if (context.fs.isVirtual(args.id) || args.importer && context.fs.isVirtual(args.id, {
3444
3447
  paths: [
3445
3448
  args.importer
3446
3449
  ]
3447
3450
  })) {
3448
- const resolvedPath = args.importer ? context.fs.resolvePath(args.id, {
3451
+ const resolvedPath = args.importer ? context.fs.resolve(args.id, {
3449
3452
  paths: [
3450
3453
  args.importer
3451
3454
  ]
3452
- }) : context.fs.resolvePath(args.id);
3455
+ }) : context.fs.resolve(args.id);
3453
3456
  if (resolvedPath) {
3454
3457
  return {
3455
3458
  id: resolvedPath,
@@ -3487,11 +3490,12 @@ async function handleResolveId(context, args, options = {}) {
3487
3490
  };
3488
3491
  }
3489
3492
  } else {
3490
- if (bundleRequire.match(args.id, options.noExternal) || context.fs.isBuiltinFile(args.id) || args.importer && context.fs.isBuiltinFile(args.id, {
3491
- paths: [
3493
+ const resolvedPath = context.fs.resolve(args.id, {
3494
+ paths: args.importer ? [
3492
3495
  args.importer
3493
- ]
3494
- })) {
3496
+ ] : []
3497
+ });
3498
+ if (bundleRequire.match(args.id, options.noExternal) || resolvedPath && context.fs.meta[resolvedPath]?.variant === "builtin") {
3495
3499
  return void 0;
3496
3500
  }
3497
3501
  if (bundleRequire.match(args.id, options.external) || args.id.startsWith("node:")) {
@@ -3550,9 +3554,7 @@ function createUnpluginFactory(variant, decorate) {
3550
3554
  async function load(id) {
3551
3555
  const environment = await api.context.getEnvironment();
3552
3556
  if (id) {
3553
- const resolvedPath = environment.fs.resolvePath(id, {
3554
- type: "file"
3555
- });
3557
+ const resolvedPath = environment.fs.resolve(id);
3556
3558
  if (resolvedPath) {
3557
3559
  return environment.fs.readFile(resolvedPath);
3558
3560
  }