powerlines 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.cjs +4 -4
- package/dist/api.d.cts +7 -8
- package/dist/api.d.ts +7 -8
- package/dist/api.js +3 -3
- package/dist/astro.cjs +10 -10
- package/dist/astro.d.cts +1 -2
- package/dist/astro.d.ts +1 -2
- package/dist/astro.js +7 -7
- package/dist/{chunk-WRP6ANCC.js → chunk-237NITCY.js} +20 -5
- package/dist/{chunk-LM6YBGC6.cjs → chunk-2HNC5JVK.cjs} +2 -2
- package/dist/{chunk-4KCSCJ6E.js → chunk-2Q2PSPZK.js} +1 -1
- package/dist/{chunk-24AZZCCW.js → chunk-3FS7K4DZ.js} +1 -1
- package/dist/{chunk-OQNYDN5F.cjs → chunk-3JH36WUJ.cjs} +2 -2
- package/dist/{chunk-CTSV5JAF.cjs → chunk-44UTUCBG.cjs} +21 -8
- package/dist/{chunk-MOH4CWHN.cjs → chunk-6XRDZOE3.cjs} +968 -664
- package/dist/{chunk-MZQXGWUK.cjs → chunk-7C2NEC7D.cjs} +2 -2
- package/dist/{chunk-SIEHJFKB.js → chunk-A5GTERYN.js} +2 -2
- package/dist/chunk-B4KLWFY6.cjs +32 -0
- package/dist/{chunk-FBMQTOMN.js → chunk-C5TKY75S.js} +1 -1
- package/dist/{chunk-T4AJOD6A.cjs → chunk-DMXXNXLS.cjs} +4 -4
- package/dist/{chunk-IHWRGHX6.cjs → chunk-F4BD5CXH.cjs} +2 -2
- package/dist/chunk-GRAVJX3I.js +29 -0
- package/dist/{chunk-WE7PLY4H.cjs → chunk-HV7SHEHD.cjs} +11 -4
- package/dist/{chunk-WJ4CZKXY.js → chunk-JKBJF3UI.js} +1 -1
- package/dist/{chunk-2QGVOWKM.js → chunk-L4AXJFX2.js} +19 -6
- package/dist/{chunk-VXF37DA2.cjs → chunk-LKYBC6DX.cjs} +4 -4
- package/dist/{chunk-A2EZ3M22.js → chunk-M6XGEVJY.js} +1 -1
- package/dist/{chunk-FYKDALJL.js → chunk-NZXMP4J5.js} +1 -1
- package/dist/{chunk-F4TS44KB.js → chunk-OZU47JET.js} +999 -702
- package/dist/{chunk-FCTNMPJF.cjs → chunk-PAMSESZV.cjs} +1 -1
- package/dist/{chunk-TY3QAXEY.js → chunk-PDFOF6ZP.js} +11 -4
- package/dist/{chunk-IMMNZSFZ.cjs → chunk-PJP4MECA.cjs} +2 -2
- package/dist/{chunk-VSZXQLMI.js → chunk-QQGXARP3.js} +1 -1
- package/dist/{chunk-6UVRB3IN.cjs → chunk-SQANNMRF.cjs} +22 -7
- package/dist/{chunk-2KGMZZ36.js → chunk-SVDPKN3U.js} +1 -1
- package/dist/chunk-SVF4ATJR.cjs +8 -0
- package/dist/{chunk-VVFIZVYE.cjs → chunk-UVM4JAR3.cjs} +2 -2
- package/dist/{chunk-JKF342AW.js → chunk-WU7I52LM.js} +2 -2
- package/dist/{chunk-P3BP6LXC.cjs → chunk-WYJGOC3Y.cjs} +2 -2
- package/dist/{chunk-KL7HP7JM.cjs → chunk-YG5ORYN2.cjs} +2 -2
- package/dist/{chunk-QH3M5FBF.js → chunk-ZPOCM5XZ.js} +1 -1
- package/dist/chunk-ZWF7LZXE.js +5 -0
- package/dist/config.d.cts +1 -2
- package/dist/config.d.ts +1 -2
- package/dist/esbuild.cjs +9 -9
- package/dist/esbuild.d.cts +1 -2
- package/dist/esbuild.d.ts +1 -2
- package/dist/esbuild.js +6 -6
- package/dist/farm.cjs +5 -5
- package/dist/farm.d.cts +1 -2
- package/dist/farm.d.ts +1 -2
- package/dist/farm.js +4 -4
- package/dist/{hooks-CUxY7WKY.d.cts → hooks-CJ1W5lrx.d.cts} +1 -1
- package/dist/{hooks-BBZyf9CN.d.ts → hooks-CNEZpkMS.d.ts} +1 -1
- package/dist/index.cjs +45 -287
- package/dist/index.d.cts +3 -4
- package/dist/index.d.ts +3 -4
- package/dist/index.js +20 -244
- package/dist/lib/build/esbuild.cjs +5 -5
- package/dist/lib/build/esbuild.d.cts +1 -3
- package/dist/lib/build/esbuild.d.ts +1 -3
- package/dist/lib/build/esbuild.js +2 -2
- package/dist/lib/build/index.cjs +23 -23
- package/dist/lib/build/index.d.cts +2 -4
- package/dist/lib/build/index.d.ts +2 -4
- package/dist/lib/build/index.js +8 -8
- package/dist/lib/build/rolldown.cjs +3 -3
- package/dist/lib/build/rolldown.d.cts +1 -3
- package/dist/lib/build/rolldown.d.ts +1 -3
- package/dist/lib/build/rolldown.js +2 -2
- package/dist/lib/build/rollup.cjs +3 -3
- package/dist/lib/build/rollup.d.cts +1 -3
- package/dist/lib/build/rollup.d.ts +1 -3
- package/dist/lib/build/rollup.js +1 -1
- package/dist/lib/build/rspack.d.cts +1 -3
- package/dist/lib/build/rspack.d.ts +1 -3
- package/dist/lib/build/tsup.cjs +6 -6
- package/dist/lib/build/tsup.d.cts +1 -3
- package/dist/lib/build/tsup.d.ts +1 -3
- package/dist/lib/build/tsup.js +3 -3
- package/dist/lib/build/unbuild.cjs +5 -5
- package/dist/lib/build/unbuild.d.cts +2 -4
- package/dist/lib/build/unbuild.d.ts +2 -4
- package/dist/lib/build/unbuild.js +2 -2
- package/dist/lib/build/vite.cjs +5 -5
- package/dist/lib/build/vite.d.cts +1 -3
- package/dist/lib/build/vite.d.ts +1 -3
- package/dist/lib/build/vite.js +3 -3
- package/dist/lib/build/webpack.cjs +2 -2
- package/dist/lib/build/webpack.d.cts +1 -3
- package/dist/lib/build/webpack.d.ts +1 -3
- package/dist/lib/build/webpack.js +1 -1
- package/dist/lib/{chunk-K4FER6YK.cjs → chunk-27VJFYDM.cjs} +13 -6
- package/dist/lib/{chunk-ZJNDT3GX.js → chunk-3G4C3YAU.js} +12 -5
- package/dist/lib/{chunk-TTKY3DR4.js → chunk-43VJVIL2.js} +975 -679
- package/dist/lib/{chunk-CLV4J4L7.cjs → chunk-4FX4VOLA.cjs} +2 -3
- package/dist/lib/{chunk-DFRWBQQT.js → chunk-5GM5UAUO.js} +3 -4
- package/dist/lib/{chunk-S5F4DE65.js → chunk-5SADLYYK.js} +1 -1
- package/dist/lib/{chunk-TNHDC2ZQ.cjs → chunk-7XHBIYIN.cjs} +1 -20
- package/dist/lib/{chunk-SM3S7DYW.js → chunk-BHDQZ6YX.js} +12 -2
- package/dist/lib/{chunk-FGYAS4NB.cjs → chunk-CSJ6KNIX.cjs} +11 -4
- package/dist/lib/{chunk-O36FCQM6.cjs → chunk-E2MVGKGH.cjs} +2 -2
- package/dist/lib/{chunk-O5LNKYQV.cjs → chunk-FN7673NC.cjs} +2 -2
- package/dist/lib/{chunk-HIY6WOU3.cjs → chunk-GDXHCTCX.cjs} +13 -6
- package/dist/lib/{chunk-IBONIIAZ.cjs → chunk-HCOHRD3Q.cjs} +19 -6
- package/dist/lib/{chunk-OI2V6L7D.js → chunk-HOZ37BFN.js} +2 -3
- package/dist/lib/{chunk-4QRL5CNE.js → chunk-HQ5YA43H.js} +11 -4
- package/dist/lib/{chunk-IXREPTHZ.js → chunk-IOM7GRZU.js} +1 -1
- package/dist/lib/{chunk-WFUO3YPK.js → chunk-L4NEN725.js} +19 -4
- package/dist/lib/{chunk-H7V7EPB2.cjs → chunk-LAFEAMNN.cjs} +2 -2
- package/dist/lib/{chunk-7Y5MJRWF.js → chunk-LIN4KAV3.js} +57 -34
- package/dist/lib/{chunk-MWA3DWY5.cjs → chunk-LMO7PRBP.cjs} +4 -5
- package/dist/lib/{chunk-ARCFV3IJ.cjs → chunk-LPA7UJIR.cjs} +955 -657
- package/dist/lib/{chunk-OTBLE55Z.cjs → chunk-MPCVQK2D.cjs} +12 -1
- package/dist/lib/{chunk-4RUHX7LV.js → chunk-QAXCBFBP.js} +1 -1
- package/dist/lib/{chunk-WWNNBLU7.js → chunk-T7RMV2FW.js} +18 -5
- package/dist/lib/{chunk-7K7JH3DF.cjs → chunk-ULJVBW4L.cjs} +19 -4
- package/dist/lib/{chunk-UDJ37BEE.cjs → chunk-VGSV2BEL.cjs} +57 -34
- package/dist/lib/{chunk-GRJJZ5VJ.js → chunk-YH5GOJS3.js} +2 -15
- package/dist/lib/{chunk-NU4GDWLL.js → chunk-YV6MDKW4.js} +12 -5
- package/dist/lib/{config-DN8Ad0lv.d.cts → config-7vXtXiGg.d.cts} +67 -67
- package/dist/lib/{config-Bag1Ft7u.d.ts → config-B9aVEiiX.d.ts} +67 -67
- package/dist/lib/config-file.d.cts +1 -3
- package/dist/lib/config-file.d.ts +1 -3
- package/dist/lib/create-program.d.cts +1 -3
- package/dist/lib/create-program.d.ts +1 -3
- package/dist/lib/entry.cjs +9 -9
- package/dist/lib/entry.d.cts +1 -3
- package/dist/lib/entry.d.ts +1 -3
- package/dist/lib/entry.js +1 -1
- package/dist/lib/{hooks-BVnPAWgt.d.ts → hooks-BxUBzqCb.d.ts} +1 -1
- package/dist/lib/{hooks-H2P-7xA4.d.cts → hooks-cvv50JDh.d.cts} +1 -1
- package/dist/lib/index.cjs +32 -28
- package/dist/lib/index.d.cts +326 -7
- package/dist/lib/index.d.ts +326 -7
- package/dist/lib/index.js +8 -8
- package/dist/lib/logger.d.cts +1 -3
- package/dist/lib/logger.d.ts +1 -3
- package/dist/lib/typescript/compiler-host.d.cts +1 -3
- package/dist/lib/typescript/compiler-host.d.ts +1 -3
- package/dist/lib/typescript/import-transformer.d.cts +1 -3
- package/dist/lib/typescript/import-transformer.d.ts +1 -3
- package/dist/lib/typescript/index.d.cts +1 -3
- package/dist/lib/typescript/index.d.ts +1 -3
- package/dist/lib/typescript/program.d.cts +1 -3
- package/dist/lib/typescript/program.d.ts +1 -3
- package/dist/lib/unplugin/factory.cjs +5 -5
- package/dist/lib/unplugin/factory.d.cts +7 -9
- package/dist/lib/unplugin/factory.d.ts +7 -9
- package/dist/lib/unplugin/factory.js +4 -4
- package/dist/lib/unplugin/index.cjs +8 -8
- package/dist/lib/unplugin/index.d.cts +2 -4
- package/dist/lib/unplugin/index.d.ts +2 -4
- package/dist/lib/unplugin/index.js +5 -5
- package/dist/lib/unplugin/plugin.cjs +3 -3
- package/dist/lib/unplugin/plugin.d.cts +1 -3
- package/dist/lib/unplugin/plugin.d.ts +1 -3
- package/dist/lib/unplugin/plugin.js +2 -2
- package/dist/lib/unplugin/resolve-id.cjs +2 -2
- package/dist/lib/unplugin/resolve-id.d.cts +1 -3
- package/dist/lib/unplugin/resolve-id.d.ts +1 -3
- package/dist/lib/unplugin/resolve-id.js +1 -1
- package/dist/lib/utilities/bundle.cjs +4 -4
- package/dist/lib/utilities/bundle.d.cts +1 -3
- package/dist/lib/utilities/bundle.d.ts +1 -3
- package/dist/lib/utilities/bundle.js +3 -3
- package/dist/lib/utilities/cache.d.cts +1 -3
- package/dist/lib/utilities/cache.d.ts +1 -3
- package/dist/lib/utilities/file-header.d.cts +1 -3
- package/dist/lib/utilities/file-header.d.ts +1 -3
- package/dist/lib/utilities/index.cjs +14 -14
- package/dist/lib/utilities/index.d.cts +1 -3
- package/dist/lib/utilities/index.d.ts +1 -3
- package/dist/lib/utilities/index.js +5 -5
- package/dist/lib/utilities/meta.cjs +8 -8
- package/dist/lib/utilities/meta.d.cts +1 -3
- package/dist/lib/utilities/meta.d.ts +1 -3
- package/dist/lib/utilities/meta.js +1 -1
- package/dist/lib/utilities/resolve-path.d.cts +1 -3
- package/dist/lib/utilities/resolve-path.d.ts +1 -3
- package/dist/lib/utilities/resolve.cjs +5 -5
- package/dist/lib/utilities/resolve.d.cts +1 -3
- package/dist/lib/utilities/resolve.d.ts +1 -3
- package/dist/lib/utilities/resolve.js +4 -4
- package/dist/lib/utilities/source-file.d.cts +1 -3
- package/dist/lib/utilities/source-file.d.ts +1 -3
- package/dist/lib/utilities/source-map.d.cts +1 -3
- package/dist/lib/utilities/source-map.d.ts +1 -3
- package/dist/lib/utilities/worker.d.cts +1 -3
- package/dist/lib/utilities/worker.d.ts +1 -3
- package/dist/lib/utilities/write-file.d.cts +1 -3
- package/dist/lib/utilities/write-file.d.ts +1 -3
- package/dist/next.cjs +9 -9
- package/dist/next.js +6 -6
- package/dist/nuxt.cjs +11 -11
- package/dist/nuxt.js +8 -8
- package/dist/plugin-utils/{chunk-YKIS7BLU.cjs → chunk-5MO4BCOW.cjs} +24 -0
- package/dist/plugin-utils/{chunk-HHFA3IEZ.js → chunk-CYVV2MB7.js} +24 -0
- package/dist/plugin-utils/{chunk-75UVEMIV.cjs → chunk-DZZPNO5H.cjs} +2 -2
- package/dist/plugin-utils/{chunk-WEIEQXIJ.cjs → chunk-ECFS7DPV.cjs} +5 -5
- package/dist/plugin-utils/{chunk-MQOW6ENT.cjs → chunk-F65J5WOX.cjs} +1 -1
- package/dist/plugin-utils/{chunk-IHME6YWJ.js → chunk-GV7O3E7P.js} +1 -1
- package/dist/plugin-utils/{chunk-PK6PYFWY.js → chunk-L277XSSN.js} +1 -1
- package/dist/plugin-utils/{chunk-YDYJAGMP.js → chunk-QKMG6ZAU.js} +1 -1
- package/dist/plugin-utils/{chunk-5TL6KEQ5.cjs → chunk-UNAGYQRB.cjs} +4 -4
- package/dist/plugin-utils/{chunk-432MQOUZ.js → chunk-XIXI67PY.js} +1 -1
- package/dist/plugin-utils/{config-pwKiZvzJ.d.cts → config-BzVVjChJ.d.cts} +65 -65
- package/dist/plugin-utils/{config-pwKiZvzJ.d.ts → config-BzVVjChJ.d.ts} +65 -65
- package/dist/plugin-utils/enforce.cjs +5 -5
- package/dist/plugin-utils/enforce.d.cts +1 -3
- package/dist/plugin-utils/enforce.d.ts +1 -3
- package/dist/plugin-utils/enforce.js +4 -4
- package/dist/plugin-utils/extend.cjs +4 -4
- package/dist/plugin-utils/extend.d.cts +1 -3
- package/dist/plugin-utils/extend.d.ts +1 -3
- package/dist/plugin-utils/extend.js +3 -3
- package/dist/plugin-utils/get-config-path.cjs +2 -2
- package/dist/plugin-utils/get-config-path.d.cts +1 -3
- package/dist/plugin-utils/get-config-path.d.ts +1 -3
- package/dist/plugin-utils/get-config-path.js +1 -1
- package/dist/plugin-utils/helpers.cjs +14 -14
- package/dist/plugin-utils/helpers.d.cts +1 -3
- package/dist/plugin-utils/helpers.d.ts +1 -3
- package/dist/plugin-utils/helpers.js +1 -1
- package/dist/plugin-utils/index.cjs +22 -22
- package/dist/plugin-utils/index.d.cts +1 -3
- package/dist/plugin-utils/index.d.ts +1 -3
- package/dist/plugin-utils/index.js +5 -5
- package/dist/plugin-utils/merge.cjs +3 -3
- package/dist/plugin-utils/merge.d.cts +1 -3
- package/dist/plugin-utils/merge.d.ts +1 -3
- package/dist/plugin-utils/merge.js +2 -2
- package/dist/plugin-utils/paths.d.cts +2 -4
- package/dist/plugin-utils/paths.d.ts +2 -4
- package/dist/{resolved-ohMN-3VJ.d.cts → resolved-D8vIizyA.d.cts} +15 -16
- package/dist/{resolved-Sxyrlt6g.d.ts → resolved-DWxXKJYy.d.ts} +15 -16
- package/dist/rolldown.cjs +8 -8
- package/dist/rolldown.d.cts +1 -2
- package/dist/rolldown.d.ts +1 -2
- package/dist/rolldown.js +5 -5
- package/dist/rollup.cjs +8 -8
- package/dist/rollup.d.cts +1 -2
- package/dist/rollup.d.ts +1 -2
- package/dist/rollup.js +5 -5
- package/dist/rspack.cjs +8 -8
- package/dist/rspack.d.cts +1 -2
- package/dist/rspack.d.ts +1 -2
- package/dist/rspack.js +5 -5
- package/dist/tsup.cjs +10 -10
- package/dist/tsup.js +7 -7
- package/dist/types/babel.d.cts +1 -2
- package/dist/types/babel.d.ts +1 -2
- package/dist/types/build.d.cts +18 -1
- package/dist/types/build.d.ts +18 -1
- package/dist/types/commands.cjs +2 -2
- package/dist/types/commands.d.cts +1 -2
- package/dist/types/commands.d.ts +1 -2
- package/dist/types/commands.js +1 -1
- package/dist/types/config.d.cts +1 -2
- package/dist/types/config.d.ts +1 -2
- package/dist/types/context.d.cts +1 -2
- package/dist/types/context.d.ts +1 -2
- package/dist/types/hooks.d.cts +1 -2
- package/dist/types/hooks.d.ts +1 -2
- package/dist/types/index.cjs +6 -22
- package/dist/types/index.d.cts +2 -3
- package/dist/types/index.d.ts +2 -3
- package/dist/types/index.js +2 -2
- package/dist/types/internal.d.cts +2 -3
- package/dist/types/internal.d.ts +2 -3
- package/dist/types/plugin.d.cts +1 -2
- package/dist/types/plugin.d.ts +1 -2
- package/dist/types/resolved.d.cts +1 -2
- package/dist/types/resolved.d.ts +1 -2
- package/dist/types/unplugin.d.cts +1 -2
- package/dist/types/unplugin.d.ts +1 -2
- package/dist/types/vfs.cjs +4 -20
- package/dist/types/vfs.d.cts +47 -54
- package/dist/types/vfs.d.ts +47 -54
- package/dist/types/vfs.js +1 -1
- package/dist/unloader.cjs +8 -8
- package/dist/unloader.d.cts +1 -2
- package/dist/unloader.d.ts +1 -2
- package/dist/unloader.js +5 -5
- package/dist/unplugin.cjs +20 -20
- package/dist/unplugin.d.cts +2 -3
- package/dist/unplugin.d.ts +2 -3
- package/dist/unplugin.js +17 -17
- package/dist/vite.cjs +9 -9
- package/dist/vite.d.cts +1 -2
- package/dist/vite.d.ts +1 -2
- package/dist/vite.js +6 -6
- package/dist/webpack.cjs +8 -8
- package/dist/webpack.d.cts +1 -2
- package/dist/webpack.d.ts +1 -2
- package/dist/webpack.js +5 -5
- package/package.json +3 -3
- package/dist/chunk-OBYFBPPO.js +0 -9
- package/dist/chunk-RF6RSWD4.cjs +0 -16
- package/dist/chunk-SECEPZQ3.cjs +0 -32
- package/dist/chunk-XBS3AHAK.js +0 -29
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { writeFile } from './chunk-TANQDHYY.js';
|
|
2
2
|
import { getFileHeader } from './chunk-GANVMM73.js';
|
|
3
|
-
import {
|
|
4
|
-
import { handleResolveId } from './chunk-
|
|
3
|
+
import { CACHE_HASH_LENGTH, PROJECT_ROOT_HASH_LENGTH, getPrefixedProjectRootHash, getChecksum, writeMetaFile } from './chunk-YH5GOJS3.js';
|
|
4
|
+
import { handleResolveId } from './chunk-L4NEN725.js';
|
|
5
5
|
import { getParsedTypeScriptConfig, getTsconfigFilePath, isIncludeMatchFound } from './chunk-YOENMDZY.js';
|
|
6
6
|
import { loadWorkspaceConfig, loadUserConfigFile } from './chunk-ZPIKFR7Z.js';
|
|
7
7
|
import { extendLog, createLog } from './chunk-ENRLU4UR.js';
|
|
8
8
|
import { getString } from './chunk-M263EZ4F.js';
|
|
9
|
-
import { resolveEntriesSync, getUniqueEntries } from './chunk-
|
|
9
|
+
import { resolveEntriesSync, getUniqueEntries, replacePathTokens } from './chunk-BHDQZ6YX.js';
|
|
10
10
|
import { __name } from './chunk-SHUYVCID.js';
|
|
11
11
|
import { LogLevelLabel } from '@storm-software/config-tools/types';
|
|
12
12
|
import { relativeToWorkspaceRoot, getWorkspaceRoot } from '@stryke/fs/get-workspace-root';
|
|
@@ -21,7 +21,7 @@ import { install } from '@stryke/fs/install';
|
|
|
21
21
|
import { listFiles } from '@stryke/fs/list-files';
|
|
22
22
|
import { isPackageExists, isPackageListed, doesPackageMatch, getPackageListing } from '@stryke/fs/package-fns';
|
|
23
23
|
import { resolvePackage } from '@stryke/fs/resolve';
|
|
24
|
-
import { joinPaths } from '@stryke/path/join-paths';
|
|
24
|
+
import { joinPaths as joinPaths$1 } from '@stryke/path/join-paths';
|
|
25
25
|
import { replacePath } from '@stryke/path/replace';
|
|
26
26
|
import { isError } from '@stryke/type-checks/is-error';
|
|
27
27
|
import { isFunction } from '@stryke/type-checks/is-function';
|
|
@@ -31,7 +31,7 @@ import { isSet } from '@stryke/type-checks/is-set';
|
|
|
31
31
|
import { isSetObject } from '@stryke/type-checks/is-set-object';
|
|
32
32
|
import { isSetString } from '@stryke/type-checks/is-set-string';
|
|
33
33
|
import chalk4 from 'chalk';
|
|
34
|
-
import
|
|
34
|
+
import defu2, { defu } from 'defu';
|
|
35
35
|
import Handlebars from 'handlebars';
|
|
36
36
|
import { declare } from '@babel/helper-plugin-utils';
|
|
37
37
|
import * as t from '@babel/types';
|
|
@@ -43,24 +43,26 @@ import { getUnique } from '@stryke/helpers/get-unique';
|
|
|
43
43
|
import { omit } from '@stryke/helpers/omit';
|
|
44
44
|
import { StormJSON } from '@stryke/json/storm-json';
|
|
45
45
|
import { appendPath } from '@stryke/path/append';
|
|
46
|
-
import {
|
|
46
|
+
import { findFileDotExtensionSafe, findFilePath, hasFileExtension, relativePath, findFileName } from '@stryke/path/file-path-fns';
|
|
47
47
|
import { isAbsolutePath, isAbsolute } from '@stryke/path/is-type';
|
|
48
|
-
import { joinPaths
|
|
48
|
+
import { joinPaths } from '@stryke/path/join';
|
|
49
49
|
import { isNull } from '@stryke/type-checks/is-null';
|
|
50
50
|
import { isString } from '@stryke/type-checks/is-string';
|
|
51
51
|
import { uuid } from '@stryke/unique-id/uuid';
|
|
52
52
|
import { parseAsync } from 'oxc-parser';
|
|
53
|
-
import
|
|
54
|
-
import { createJiti } from 'jiti';
|
|
53
|
+
import * as $ from '@stryke/capnp';
|
|
55
54
|
import { bufferToString } from '@stryke/convert/buffer-to-string';
|
|
56
|
-
import {
|
|
55
|
+
import { readFileBuffer, readFileBufferSync, writeFileBuffer } from '@stryke/fs/buffer';
|
|
57
56
|
import { prettyBytes } from '@stryke/string-format/pretty-bytes';
|
|
58
57
|
import { isBuffer } from '@stryke/type-checks/is-buffer';
|
|
59
|
-
import { Volume } from 'memfs';
|
|
60
58
|
import { Blob } from 'node:buffer';
|
|
61
59
|
import fs from 'node:fs';
|
|
62
60
|
import { resolveConfig, format } from 'prettier';
|
|
61
|
+
import { isUndefined } from '@stryke/type-checks/is-undefined';
|
|
62
|
+
import { isParentPath } from '@stryke/path/is-parent-path';
|
|
63
|
+
import { Volume } from 'memfs/lib/node/volume';
|
|
63
64
|
import { Union } from 'unionfs';
|
|
65
|
+
import { createJiti } from 'jiti';
|
|
64
66
|
import { isObject } from '@stryke/type-checks/is-object';
|
|
65
67
|
import ts, { createProgram, createCompilerHost, getPreEmitDiagnostics, getLineAndCharacterOfPosition, flattenDiagnosticMessageText } from 'typescript';
|
|
66
68
|
import { getPackageName, hasPackageVersion, getPackageVersion } from '@stryke/string-format/package';
|
|
@@ -170,7 +172,7 @@ var moduleResolverBabelPlugin = /* @__PURE__ */ __name((context) => {
|
|
|
170
172
|
}, "moduleResolverBabelPlugin");
|
|
171
173
|
var DEFAULT_ENVIRONMENT = "default";
|
|
172
174
|
function createEnvironment(name, userConfig) {
|
|
173
|
-
return
|
|
175
|
+
return defu2(userConfig.environments?.[name] ?? {}, {
|
|
174
176
|
name,
|
|
175
177
|
title: userConfig.title || titleCase(userConfig.name),
|
|
176
178
|
ssr: false,
|
|
@@ -213,94 +215,232 @@ function createDefaultEnvironment(userConfig) {
|
|
|
213
215
|
return createEnvironment(DEFAULT_ENVIRONMENT, userConfig);
|
|
214
216
|
}
|
|
215
217
|
__name(createDefaultEnvironment, "createDefaultEnvironment");
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
"clean",
|
|
221
|
-
"prepare",
|
|
222
|
-
"lint",
|
|
223
|
-
"test",
|
|
224
|
-
"build",
|
|
225
|
-
"docs",
|
|
226
|
-
"release",
|
|
227
|
-
"finalize"
|
|
228
|
-
];
|
|
229
|
-
|
|
230
|
-
// src/plugin-utils/helpers.ts
|
|
231
|
-
function isPlugin(value) {
|
|
232
|
-
return isSetObject(value) && "name" in value && isSetString(value.name) && (isUndefined(value.applyToEnvironment) || "applyToEnvironment" in value && isFunction(value.applyToEnvironment)) && (isUndefined(value.dedupe) || "dedupe" in value && isFunction(value.dedupe)) && (isUndefined(value.dependsOn) || "dependsOn" in value && Array.isArray(value.dependsOn) && value.dependsOn.every(isPluginConfig)) && SUPPORTED_COMMANDS.every((command) => isUndefined(value[command]) || command in value && (isFunction(value[command]) || isSetObject(value[command]) && "handler" in value[command] && isFunction(value[command].handler)));
|
|
233
|
-
}
|
|
234
|
-
__name(isPlugin, "isPlugin");
|
|
235
|
-
function isPluginConfigObject(value) {
|
|
236
|
-
return isSetObject(value) && "plugin" in value && ((isSetString(value.plugin) || isFunction(value.plugin)) && "options" in value && isSetObject(value.options) || isPlugin(value.plugin));
|
|
237
|
-
}
|
|
238
|
-
__name(isPluginConfigObject, "isPluginConfigObject");
|
|
239
|
-
function isPluginConfigTuple(value) {
|
|
240
|
-
return Array.isArray(value) && (value.length === 1 || value.length === 2) && ((isSetString(value[0]) || isFunction(value[0])) && value.length > 1 && isSetObject(value[1]) || isPlugin(value[0]));
|
|
241
|
-
}
|
|
242
|
-
__name(isPluginConfigTuple, "isPluginConfigTuple");
|
|
243
|
-
function isPluginConfig(value) {
|
|
244
|
-
return isSetString(value) || isFunction(value) || isPlugin(value) || isPluginConfigObject(value) || isPluginConfigTuple(value);
|
|
245
|
-
}
|
|
246
|
-
__name(isPluginConfig, "isPluginConfig");
|
|
247
|
-
function isPluginHookFunction(value) {
|
|
248
|
-
return isFunction(value) || isSetObject(value) && "handler" in value && isFunction(value.handler);
|
|
249
|
-
}
|
|
250
|
-
__name(isPluginHookFunction, "isPluginHookFunction");
|
|
251
|
-
function isPluginHookObject(value) {
|
|
252
|
-
return isSetObject(value) && "handler" in value && isFunction(value.handler);
|
|
253
|
-
}
|
|
254
|
-
__name(isPluginHookObject, "isPluginHookObject");
|
|
255
|
-
function isPluginHook(value) {
|
|
256
|
-
return isPluginHookFunction(value) || isPluginHookObject(value);
|
|
257
|
-
}
|
|
258
|
-
__name(isPluginHook, "isPluginHook");
|
|
259
|
-
function getHookHandler(pluginHook) {
|
|
260
|
-
return isFunction(pluginHook) ? pluginHook : pluginHook.handler;
|
|
261
|
-
}
|
|
262
|
-
__name(getHookHandler, "getHookHandler");
|
|
263
|
-
function isHookExternal(hook) {
|
|
264
|
-
return hook.startsWith("vite:") || hook.startsWith("esbuild:") || hook.startsWith("rolldown:") || hook.startsWith("rollup:") || hook.startsWith("webpack:") || hook.startsWith("rspack:") || hook.startsWith("farm:");
|
|
265
|
-
}
|
|
266
|
-
__name(isHookExternal, "isHookExternal");
|
|
267
|
-
function checkDedupe(plugin, plugins) {
|
|
268
|
-
return plugin.dedupe === false || plugins.some((p) => p.dedupe !== false && (isFunction(p.dedupe) && p.dedupe(plugin) || p.name === plugin.name));
|
|
269
|
-
}
|
|
270
|
-
__name(checkDedupe, "checkDedupe");
|
|
271
|
-
function addPluginHook(context, plugin, pluginHook, hooksList) {
|
|
272
|
-
if (!checkDedupe(plugin, hooksList.map((hook) => hook.plugin))) {
|
|
273
|
-
hooksList.push(isFunction(pluginHook) ? {
|
|
274
|
-
plugin,
|
|
275
|
-
handler: getHookHandler(pluginHook).bind(context)
|
|
276
|
-
} : {
|
|
277
|
-
plugin,
|
|
278
|
-
...pluginHook,
|
|
279
|
-
handler: getHookHandler(pluginHook).bind(context)
|
|
280
|
-
});
|
|
218
|
+
BigInt("0xa56c61324b9d6e49");
|
|
219
|
+
var FileMetadata_KeyValuePair = class extends $.Struct {
|
|
220
|
+
static {
|
|
221
|
+
__name(this, "FileMetadata_KeyValuePair");
|
|
281
222
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
}
|
|
303
|
-
|
|
223
|
+
static _capnp = {
|
|
224
|
+
displayName: "KeyValuePair",
|
|
225
|
+
id: "eabb26cf58b2a14c",
|
|
226
|
+
size: new $.ObjectSize(0, 2)
|
|
227
|
+
};
|
|
228
|
+
get key() {
|
|
229
|
+
return $.utils.getText(0, this);
|
|
230
|
+
}
|
|
231
|
+
set key(value) {
|
|
232
|
+
$.utils.setText(0, value, this);
|
|
233
|
+
}
|
|
234
|
+
get value() {
|
|
235
|
+
return $.utils.getText(1, this);
|
|
236
|
+
}
|
|
237
|
+
set value(value) {
|
|
238
|
+
$.utils.setText(1, value, this);
|
|
239
|
+
}
|
|
240
|
+
toString() {
|
|
241
|
+
return "FileMetadata_KeyValuePair_" + super.toString();
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
var FileMetadata = class _FileMetadata extends $.Struct {
|
|
245
|
+
static {
|
|
246
|
+
__name(this, "FileMetadata");
|
|
247
|
+
}
|
|
248
|
+
static KeyValuePair = FileMetadata_KeyValuePair;
|
|
249
|
+
static _capnp = {
|
|
250
|
+
displayName: "FileMetadata",
|
|
251
|
+
id: "8e2cab5d7e28c7b3",
|
|
252
|
+
size: new $.ObjectSize(0, 4),
|
|
253
|
+
defaultVariant: "normal"
|
|
254
|
+
};
|
|
255
|
+
static _Properties;
|
|
256
|
+
/**
|
|
257
|
+
* The variant of the file.
|
|
258
|
+
*
|
|
259
|
+
*/
|
|
260
|
+
get id() {
|
|
261
|
+
return $.utils.getText(0, this);
|
|
262
|
+
}
|
|
263
|
+
set id(value) {
|
|
264
|
+
$.utils.setText(0, value, this);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* The output mode of the file.
|
|
268
|
+
*
|
|
269
|
+
*/
|
|
270
|
+
get variant() {
|
|
271
|
+
return $.utils.getText(1, this, _FileMetadata._capnp.defaultVariant);
|
|
272
|
+
}
|
|
273
|
+
set variant(value) {
|
|
274
|
+
$.utils.setText(1, value, this);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Additional metadata associated with the file.
|
|
278
|
+
*
|
|
279
|
+
*/
|
|
280
|
+
get mode() {
|
|
281
|
+
return $.utils.getText(2, this);
|
|
282
|
+
}
|
|
283
|
+
set mode(value) {
|
|
284
|
+
$.utils.setText(2, value, this);
|
|
285
|
+
}
|
|
286
|
+
_adoptProperties(value) {
|
|
287
|
+
$.utils.adopt(value, $.utils.getPointer(3, this));
|
|
288
|
+
}
|
|
289
|
+
_disownProperties() {
|
|
290
|
+
return $.utils.disown(this.properties);
|
|
291
|
+
}
|
|
292
|
+
get properties() {
|
|
293
|
+
return $.utils.getList(3, _FileMetadata._Properties, this);
|
|
294
|
+
}
|
|
295
|
+
_hasProperties() {
|
|
296
|
+
return !$.utils.isNull($.utils.getPointer(3, this));
|
|
297
|
+
}
|
|
298
|
+
_initProperties(length) {
|
|
299
|
+
return $.utils.initList(3, _FileMetadata._Properties, length, this);
|
|
300
|
+
}
|
|
301
|
+
set properties(value) {
|
|
302
|
+
$.utils.copyFrom(value, $.utils.getPointer(3, this));
|
|
303
|
+
}
|
|
304
|
+
toString() {
|
|
305
|
+
return "FileMetadata_" + super.toString();
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
var FileIdentifier = class extends $.Struct {
|
|
309
|
+
static {
|
|
310
|
+
__name(this, "FileIdentifier");
|
|
311
|
+
}
|
|
312
|
+
static _capnp = {
|
|
313
|
+
displayName: "FileIdentifier",
|
|
314
|
+
id: "e12b8732389d7406",
|
|
315
|
+
size: new $.ObjectSize(0, 2)
|
|
316
|
+
};
|
|
317
|
+
/**
|
|
318
|
+
* An additional identifier for the file.
|
|
319
|
+
*
|
|
320
|
+
*/
|
|
321
|
+
get path() {
|
|
322
|
+
return $.utils.getText(0, this);
|
|
323
|
+
}
|
|
324
|
+
set path(value) {
|
|
325
|
+
$.utils.setText(0, value, this);
|
|
326
|
+
}
|
|
327
|
+
get id() {
|
|
328
|
+
return $.utils.getText(1, this);
|
|
329
|
+
}
|
|
330
|
+
set id(value) {
|
|
331
|
+
$.utils.setText(1, value, this);
|
|
332
|
+
}
|
|
333
|
+
toString() {
|
|
334
|
+
return "FileIdentifier_" + super.toString();
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
var FileData = class extends $.Struct {
|
|
338
|
+
static {
|
|
339
|
+
__name(this, "FileData");
|
|
340
|
+
}
|
|
341
|
+
static _capnp = {
|
|
342
|
+
displayName: "FileData",
|
|
343
|
+
id: "fa6725c8a360f9a2",
|
|
344
|
+
size: new $.ObjectSize(0, 2)
|
|
345
|
+
};
|
|
346
|
+
/**
|
|
347
|
+
* The contents of the file.
|
|
348
|
+
*
|
|
349
|
+
*/
|
|
350
|
+
get path() {
|
|
351
|
+
return $.utils.getText(0, this);
|
|
352
|
+
}
|
|
353
|
+
set path(value) {
|
|
354
|
+
$.utils.setText(0, value, this);
|
|
355
|
+
}
|
|
356
|
+
get content() {
|
|
357
|
+
return $.utils.getText(1, this);
|
|
358
|
+
}
|
|
359
|
+
set content(value) {
|
|
360
|
+
$.utils.setText(1, value, this);
|
|
361
|
+
}
|
|
362
|
+
toString() {
|
|
363
|
+
return "FileData_" + super.toString();
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
var FileSystemData = class _FileSystemData extends $.Struct {
|
|
367
|
+
static {
|
|
368
|
+
__name(this, "FileSystemData");
|
|
369
|
+
}
|
|
370
|
+
static _capnp = {
|
|
371
|
+
displayName: "FileSystemData",
|
|
372
|
+
id: "aaa72a672ac0732f",
|
|
373
|
+
size: new $.ObjectSize(0, 3)
|
|
374
|
+
};
|
|
375
|
+
static _Ids;
|
|
376
|
+
static _Metadata;
|
|
377
|
+
static _Files;
|
|
378
|
+
_adoptIds(value) {
|
|
379
|
+
$.utils.adopt(value, $.utils.getPointer(0, this));
|
|
380
|
+
}
|
|
381
|
+
_disownIds() {
|
|
382
|
+
return $.utils.disown(this.ids);
|
|
383
|
+
}
|
|
384
|
+
get ids() {
|
|
385
|
+
return $.utils.getList(0, _FileSystemData._Ids, this);
|
|
386
|
+
}
|
|
387
|
+
_hasIds() {
|
|
388
|
+
return !$.utils.isNull($.utils.getPointer(0, this));
|
|
389
|
+
}
|
|
390
|
+
_initIds(length) {
|
|
391
|
+
return $.utils.initList(0, _FileSystemData._Ids, length, this);
|
|
392
|
+
}
|
|
393
|
+
set ids(value) {
|
|
394
|
+
$.utils.copyFrom(value, $.utils.getPointer(0, this));
|
|
395
|
+
}
|
|
396
|
+
_adoptMetadata(value) {
|
|
397
|
+
$.utils.adopt(value, $.utils.getPointer(1, this));
|
|
398
|
+
}
|
|
399
|
+
_disownMetadata() {
|
|
400
|
+
return $.utils.disown(this.metadata);
|
|
401
|
+
}
|
|
402
|
+
get metadata() {
|
|
403
|
+
return $.utils.getList(1, _FileSystemData._Metadata, this);
|
|
404
|
+
}
|
|
405
|
+
_hasMetadata() {
|
|
406
|
+
return !$.utils.isNull($.utils.getPointer(1, this));
|
|
407
|
+
}
|
|
408
|
+
_initMetadata(length) {
|
|
409
|
+
return $.utils.initList(1, _FileSystemData._Metadata, length, this);
|
|
410
|
+
}
|
|
411
|
+
set metadata(value) {
|
|
412
|
+
$.utils.copyFrom(value, $.utils.getPointer(1, this));
|
|
413
|
+
}
|
|
414
|
+
_adoptFiles(value) {
|
|
415
|
+
$.utils.adopt(value, $.utils.getPointer(2, this));
|
|
416
|
+
}
|
|
417
|
+
_disownFiles() {
|
|
418
|
+
return $.utils.disown(this.files);
|
|
419
|
+
}
|
|
420
|
+
get files() {
|
|
421
|
+
return $.utils.getList(2, _FileSystemData._Files, this);
|
|
422
|
+
}
|
|
423
|
+
_hasFiles() {
|
|
424
|
+
return !$.utils.isNull($.utils.getPointer(2, this));
|
|
425
|
+
}
|
|
426
|
+
_initFiles(length) {
|
|
427
|
+
return $.utils.initList(2, _FileSystemData._Files, length, this);
|
|
428
|
+
}
|
|
429
|
+
set files(value) {
|
|
430
|
+
$.utils.copyFrom(value, $.utils.getPointer(2, this));
|
|
431
|
+
}
|
|
432
|
+
toString() {
|
|
433
|
+
return "FileSystemData_" + super.toString();
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
FileMetadata._Properties = $.CompositeList(FileMetadata_KeyValuePair);
|
|
437
|
+
FileSystemData._Ids = $.CompositeList(FileIdentifier);
|
|
438
|
+
FileSystemData._Metadata = $.CompositeList(FileMetadata);
|
|
439
|
+
FileSystemData._Files = $.CompositeList(FileData);
|
|
440
|
+
|
|
441
|
+
// src/types/vfs.ts
|
|
442
|
+
var __VFS_PATCH__ = Symbol("__VFS_PATCH__");
|
|
443
|
+
var __VFS_REVERT__ = Symbol("__VFS_REVERT__");
|
|
304
444
|
function isBufferEncoding(options) {
|
|
305
445
|
return isSetString(options) || options === null;
|
|
306
446
|
}
|
|
@@ -449,46 +589,201 @@ function patchFS(originalFS, vfs) {
|
|
|
449
589
|
};
|
|
450
590
|
}
|
|
451
591
|
__name(patchFS, "patchFS");
|
|
452
|
-
var
|
|
592
|
+
var UnifiedFS = class _UnifiedFS extends Union {
|
|
453
593
|
static {
|
|
454
|
-
__name(this, "
|
|
594
|
+
__name(this, "UnifiedFS");
|
|
455
595
|
}
|
|
456
596
|
/**
|
|
457
597
|
* The internal map of virtual files.
|
|
458
598
|
*/
|
|
459
|
-
#
|
|
599
|
+
#virtualFS = new Volume();
|
|
460
600
|
/**
|
|
461
|
-
*
|
|
601
|
+
* The physical file system.
|
|
462
602
|
*/
|
|
463
|
-
#
|
|
603
|
+
#physicalFS = cloneFS(fs);
|
|
464
604
|
/**
|
|
465
|
-
*
|
|
605
|
+
* The context of the unified file system.
|
|
466
606
|
*/
|
|
467
|
-
#
|
|
607
|
+
#context;
|
|
608
|
+
static create(context, data) {
|
|
609
|
+
let result = new _UnifiedFS(context, data);
|
|
610
|
+
result = result.use(result.#physicalFS);
|
|
611
|
+
if (result.#context.config.output.mode !== "fs") {
|
|
612
|
+
result = result.use(result.#virtualFS);
|
|
613
|
+
}
|
|
614
|
+
return result;
|
|
615
|
+
}
|
|
468
616
|
/**
|
|
469
|
-
*
|
|
617
|
+
* Gets the virtual file system (VFS).
|
|
470
618
|
*/
|
|
471
|
-
|
|
619
|
+
get virtual() {
|
|
620
|
+
return this.#virtualFS;
|
|
621
|
+
}
|
|
472
622
|
/**
|
|
473
|
-
*
|
|
623
|
+
* Gets the physical file system (FS).
|
|
474
624
|
*/
|
|
475
|
-
|
|
625
|
+
get physical() {
|
|
626
|
+
return this.#physicalFS;
|
|
627
|
+
}
|
|
476
628
|
/**
|
|
477
|
-
*
|
|
629
|
+
* Creates a new instance of the VirtualFileSystem.
|
|
630
|
+
*
|
|
631
|
+
* @param context - The context of the virtual file system, typically containing options and logging functions.
|
|
632
|
+
* @param data - A buffer containing the serialized virtual file system data.
|
|
478
633
|
*/
|
|
479
|
-
|
|
634
|
+
constructor(context, data) {
|
|
635
|
+
super();
|
|
636
|
+
this.#context = context;
|
|
637
|
+
if (!this.#physicalFS.existsSync(this.#context.dataPath)) {
|
|
638
|
+
this.#physicalFS.mkdirSync(this.#context.dataPath, {
|
|
639
|
+
recursive: true
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
if (!this.#physicalFS.existsSync(this.#context.cachePath)) {
|
|
643
|
+
this.#physicalFS.mkdirSync(this.#context.cachePath, {
|
|
644
|
+
recursive: true
|
|
645
|
+
});
|
|
646
|
+
}
|
|
647
|
+
if (!this.#physicalFS.existsSync(joinPaths(this.#context.workspaceConfig.workspaceRoot, this.#context.config.output.outputPath))) {
|
|
648
|
+
this.#physicalFS.mkdirSync(joinPaths(this.#context.workspaceConfig.workspaceRoot, this.#context.config.output.outputPath), {
|
|
649
|
+
recursive: true
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
if (this.#context.config.output.mode !== "fs") {
|
|
653
|
+
this.#virtualFS = Volume.fromJSON(data._hasFiles() && data.files.length > 0 ? data.files.values().reduce((ret, file) => {
|
|
654
|
+
ret[file.path] = file.content;
|
|
655
|
+
return ret;
|
|
656
|
+
}, {}) : {});
|
|
657
|
+
if (!this.#virtualFS.existsSync(this.#context.artifactsPath)) {
|
|
658
|
+
this.#virtualFS.mkdirSync(this.#context.artifactsPath, {
|
|
659
|
+
recursive: true
|
|
660
|
+
});
|
|
661
|
+
}
|
|
662
|
+
if (!this.#virtualFS.existsSync(this.#context.builtinsPath)) {
|
|
663
|
+
this.#virtualFS.mkdirSync(this.#context.builtinsPath, {
|
|
664
|
+
recursive: true
|
|
665
|
+
});
|
|
666
|
+
}
|
|
667
|
+
if (!this.#virtualFS.existsSync(this.#context.entryPath)) {
|
|
668
|
+
this.#virtualFS.mkdirSync(this.#context.entryPath, {
|
|
669
|
+
recursive: true
|
|
670
|
+
});
|
|
671
|
+
}
|
|
672
|
+
if (!this.#virtualFS.existsSync(this.#context.dtsPath)) {
|
|
673
|
+
this.#virtualFS.mkdirSync(this.#context.dtsPath, {
|
|
674
|
+
recursive: true
|
|
675
|
+
});
|
|
676
|
+
}
|
|
677
|
+
} else if (this.#context.config.projectType === "application") {
|
|
678
|
+
if (!this.#physicalFS.existsSync(this.#context.artifactsPath)) {
|
|
679
|
+
this.#physicalFS.mkdirSync(this.#context.artifactsPath, {
|
|
680
|
+
recursive: true
|
|
681
|
+
});
|
|
682
|
+
}
|
|
683
|
+
if (!this.#physicalFS.existsSync(this.#context.builtinsPath)) {
|
|
684
|
+
this.#physicalFS.mkdirSync(this.#context.builtinsPath, {
|
|
685
|
+
recursive: true
|
|
686
|
+
});
|
|
687
|
+
}
|
|
688
|
+
if (!this.#physicalFS.existsSync(this.#context.entryPath)) {
|
|
689
|
+
this.#physicalFS.mkdirSync(this.#context.entryPath, {
|
|
690
|
+
recursive: true
|
|
691
|
+
});
|
|
692
|
+
}
|
|
693
|
+
if (!this.#physicalFS.existsSync(this.#context.dtsPath)) {
|
|
694
|
+
this.#physicalFS.mkdirSync(this.#context.dtsPath, {
|
|
695
|
+
recursive: true
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
/**
|
|
701
|
+
* Select the file system module to use for the operation based on the path or URL.
|
|
702
|
+
*
|
|
703
|
+
* @param pathOrUrl - The path to perform the file system operation on.
|
|
704
|
+
* @param options - Options for the operation, such as output mode.
|
|
705
|
+
* @returns The file system module used for the operation.
|
|
706
|
+
*/
|
|
707
|
+
resolveFS(pathOrUrl, options = {}) {
|
|
708
|
+
const mode = this.resolveMode(pathOrUrl, options);
|
|
709
|
+
if (mode === "virtual") {
|
|
710
|
+
return {
|
|
711
|
+
...this.#virtualFS,
|
|
712
|
+
mode: "virtual"
|
|
713
|
+
};
|
|
714
|
+
} else if (mode === "fs") {
|
|
715
|
+
return {
|
|
716
|
+
...this.#physicalFS,
|
|
717
|
+
mode: "fs"
|
|
718
|
+
};
|
|
719
|
+
}
|
|
720
|
+
return {
|
|
721
|
+
...this,
|
|
722
|
+
mode: this.#context.config.output.mode
|
|
723
|
+
};
|
|
724
|
+
}
|
|
725
|
+
/**
|
|
726
|
+
* Select the file system module to use for the operation based on the path or URL.
|
|
727
|
+
*
|
|
728
|
+
* @param pathOrUrl - The path to perform the file system operation on.
|
|
729
|
+
* @param options - Options for the operation, such as output mode.
|
|
730
|
+
* @returns The file system module used for the operation.
|
|
731
|
+
*/
|
|
732
|
+
resolveMode(pathOrUrl, options = {}) {
|
|
733
|
+
if (options.mode === "virtual" && this.#context.config.output.mode !== "fs" && isParentPath(toFilePath(pathOrUrl), this.#context.artifactsPath)) {
|
|
734
|
+
return "virtual";
|
|
735
|
+
} else if (options.mode === "fs" || this.#context.config.output.mode === "fs" || isParentPath(toFilePath(pathOrUrl), this.#context.dataPath) || isParentPath(toFilePath(pathOrUrl), this.#context.cachePath) || isParentPath(toFilePath(pathOrUrl), joinPaths(this.#context.workspaceConfig.workspaceRoot, this.#context.config.output.outputPath))) {
|
|
736
|
+
return "fs";
|
|
737
|
+
}
|
|
738
|
+
return void 0;
|
|
739
|
+
}
|
|
740
|
+
/**
|
|
741
|
+
* Serializes the virtual file system (VFS) to a JSON object.
|
|
742
|
+
*
|
|
743
|
+
* @returns A JSON representation of the virtual file system.
|
|
744
|
+
*/
|
|
745
|
+
toJSON() {
|
|
746
|
+
return this.#virtualFS.toJSON();
|
|
747
|
+
}
|
|
748
|
+
};
|
|
749
|
+
|
|
750
|
+
// src/lib/fs/vfs.ts
|
|
751
|
+
var VirtualFileSystem = class _VirtualFileSystem {
|
|
752
|
+
static {
|
|
753
|
+
__name(this, "VirtualFileSystem");
|
|
754
|
+
}
|
|
755
|
+
/**
|
|
756
|
+
* A map of virtual file IDs to their associated metadata.
|
|
757
|
+
*/
|
|
758
|
+
#metadata;
|
|
759
|
+
/**
|
|
760
|
+
* A map of virtual file IDs to their underlying file paths.
|
|
761
|
+
*/
|
|
762
|
+
#ids;
|
|
763
|
+
/**
|
|
764
|
+
* A map of underlying file paths to their virtual file IDs.
|
|
765
|
+
*/
|
|
766
|
+
#paths;
|
|
767
|
+
/**
|
|
768
|
+
* A map of virtual file paths to their underlying file content.
|
|
769
|
+
*/
|
|
770
|
+
#cachedResolver = /* @__PURE__ */ new Map();
|
|
480
771
|
/**
|
|
481
772
|
* The unified volume that combines the virtual file system with the real file system.
|
|
482
773
|
*
|
|
483
774
|
* @remarks
|
|
484
775
|
* This volume allows for seamless access to both virtual and real files.
|
|
485
776
|
*/
|
|
486
|
-
#unifiedFS
|
|
777
|
+
#unifiedFS;
|
|
487
778
|
/**
|
|
488
779
|
* Indicator specifying if the file system module is patched
|
|
489
780
|
*/
|
|
490
781
|
#isPatched = false;
|
|
491
782
|
/**
|
|
783
|
+
* Indicator specifying if the virtual file system (VFS) is disposed
|
|
784
|
+
*/
|
|
785
|
+
#isDisposed = false;
|
|
786
|
+
/**
|
|
492
787
|
* Function to revert require patch
|
|
493
788
|
*/
|
|
494
789
|
#revert;
|
|
@@ -508,160 +803,275 @@ var VirtualFileSystem = class {
|
|
|
508
803
|
*/
|
|
509
804
|
#existsSync(path) {
|
|
510
805
|
const formattedPath = this.formatPath(path);
|
|
511
|
-
return this.#
|
|
806
|
+
return this.#unifiedFS.virtual.existsSync(formattedPath) || this.#unifiedFS.physical.existsSync(formattedPath) || this.#unifiedFS.resolveFS(path).existsSync(formattedPath);
|
|
512
807
|
}
|
|
513
808
|
/**
|
|
514
|
-
*
|
|
809
|
+
* Builds a regular expression from a string pattern for path matching.
|
|
810
|
+
*
|
|
811
|
+
* @param strPattern - The string pattern to convert.
|
|
812
|
+
* @returns A regular expression for matching paths.
|
|
515
813
|
*/
|
|
516
|
-
|
|
517
|
-
|
|
814
|
+
#buildRegex(strPattern) {
|
|
815
|
+
const token = "::GLOBSTAR::";
|
|
816
|
+
return new RegExp(`^${this.formatPath(strPattern).replace(/\*\*/g, token).replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, "[^/]*").replace(/\?/g, "[^/]").replace(new RegExp(token, "g"), ".*")}$`);
|
|
518
817
|
}
|
|
519
818
|
/**
|
|
520
|
-
*
|
|
819
|
+
* Formats a file id by removing the file extension and prepending the runtime prefix.
|
|
820
|
+
*
|
|
821
|
+
* @param id - The file ID to format.
|
|
822
|
+
* @returns The formatted file ID.
|
|
521
823
|
*/
|
|
522
|
-
|
|
523
|
-
|
|
824
|
+
#formatId(id) {
|
|
825
|
+
const formattedId = toFilePath(id);
|
|
826
|
+
return `${this.#context.config.output.builtinPrefix}:${formattedId.replace(new RegExp(`^${this.#context.config.output.builtinPrefix}:`), "").replace(/^\\0/, "").replace(findFileDotExtensionSafe(formattedId), "")}`;
|
|
524
827
|
}
|
|
525
828
|
/**
|
|
526
|
-
*
|
|
829
|
+
* Resolves an id parameter to a corresponding virtual file path in the virtual file system (VFS).
|
|
830
|
+
*
|
|
831
|
+
* @param id - The id to resolve.
|
|
832
|
+
* @returns The resolved file id if it exists, otherwise undefined.
|
|
527
833
|
*/
|
|
528
|
-
|
|
529
|
-
|
|
834
|
+
#resolveId(id) {
|
|
835
|
+
if (this.#ids[this.#formatId(id)]) {
|
|
836
|
+
return this.#ids[this.#formatId(id)] || false;
|
|
837
|
+
}
|
|
838
|
+
return false;
|
|
530
839
|
}
|
|
531
840
|
/**
|
|
532
|
-
*
|
|
841
|
+
* Resolves a path parameter to a corresponding virtual file path in the virtual file system (VFS).
|
|
842
|
+
*
|
|
843
|
+
* @param path - The path to resolve.
|
|
844
|
+
* @param options - Optional parameters for resolving the path.
|
|
845
|
+
* @returns The resolved file path if it exists, otherwise undefined.
|
|
533
846
|
*/
|
|
534
|
-
|
|
535
|
-
|
|
847
|
+
#resolvePath(path, options = {}) {
|
|
848
|
+
if (isAbsolutePath(path)) {
|
|
849
|
+
if (this.#existsSync(path)) {
|
|
850
|
+
return path;
|
|
851
|
+
}
|
|
852
|
+
const result = this.#checkVariants(path);
|
|
853
|
+
if (result) {
|
|
854
|
+
return result;
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
for (const parentPath of this.#resolveParentPaths(path, options.paths)) {
|
|
858
|
+
const request = joinPaths$1(parentPath, path);
|
|
859
|
+
if (this.#existsSync(request)) {
|
|
860
|
+
return request;
|
|
861
|
+
}
|
|
862
|
+
const result = this.#checkVariants(request);
|
|
863
|
+
if (result) {
|
|
864
|
+
return result;
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
return false;
|
|
536
868
|
}
|
|
537
869
|
/**
|
|
538
|
-
*
|
|
870
|
+
* Resolves parent paths for a given request.
|
|
871
|
+
*
|
|
872
|
+
* @param request - The request path to resolve parent paths for.
|
|
873
|
+
* @param parents - An optional array of parent paths to consider.
|
|
874
|
+
* @returns An array of resolved parent paths.
|
|
539
875
|
*/
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
...target[prop]
|
|
550
|
-
};
|
|
876
|
+
#resolveParentPaths(request, parents = []) {
|
|
877
|
+
let paths = [
|
|
878
|
+
this.#context.workspaceConfig.workspaceRoot,
|
|
879
|
+
joinPaths$1(this.#context.workspaceConfig.workspaceRoot, this.#context.config.projectRoot)
|
|
880
|
+
];
|
|
881
|
+
if (this.#context.tsconfig.options.paths) {
|
|
882
|
+
paths = this.#context.tsconfig.options.paths ? Object.keys(this.#context.tsconfig.options.paths).filter((tsconfigPath) => request.startsWith(tsconfigPath.replaceAll("*", ""))).map((tsconfigPath) => this.#context.tsconfig.options.paths?.[tsconfigPath]).flat().reduce((ret, path) => {
|
|
883
|
+
if (path && !ret.includes(joinPaths$1(this.#context.workspaceConfig.workspaceRoot, path))) {
|
|
884
|
+
ret.push(joinPaths$1(this.#context.workspaceConfig.workspaceRoot, path));
|
|
551
885
|
}
|
|
552
|
-
return
|
|
553
|
-
},
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
delete target[prop];
|
|
562
|
-
return true;
|
|
563
|
-
}, "deleteProperty")
|
|
564
|
-
});
|
|
886
|
+
return ret;
|
|
887
|
+
}, paths) : paths;
|
|
888
|
+
}
|
|
889
|
+
return paths.reduce((ret, path) => {
|
|
890
|
+
if (!ret.includes(path)) {
|
|
891
|
+
ret.push(path);
|
|
892
|
+
}
|
|
893
|
+
return ret;
|
|
894
|
+
}, parents.filter(Boolean).map((p) => this.formatPath(p)));
|
|
565
895
|
}
|
|
566
896
|
/**
|
|
567
|
-
*
|
|
897
|
+
* Clears the resolver cache for a given path.
|
|
898
|
+
*
|
|
899
|
+
* @param path - The path to clear the resolver cache for.
|
|
568
900
|
*/
|
|
569
|
-
|
|
570
|
-
|
|
901
|
+
#clearResolverCache(path) {
|
|
902
|
+
this.#cachedResolver.keys().filter((key) => key.startsWith(toFilePath(path))).forEach((key) => this.#cachedResolver.delete(key));
|
|
571
903
|
}
|
|
572
904
|
/**
|
|
573
|
-
*
|
|
905
|
+
* Check if the file exists with different variants (index, extensions).
|
|
574
906
|
*
|
|
575
|
-
* @param
|
|
576
|
-
* @param
|
|
907
|
+
* @param request - The request path to check.
|
|
908
|
+
* @param parentPath - An optional parent path to prepend to the request.
|
|
909
|
+
* @returns The file path if it exists, otherwise false.
|
|
577
910
|
*/
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
data.id || path,
|
|
584
|
-
path
|
|
585
|
-
]));
|
|
586
|
-
if (!this.#fs.existsSync(this.#context.dataPath)) {
|
|
587
|
-
this.#fs.mkdirSync(this.#context.dataPath, {
|
|
588
|
-
recursive: true
|
|
589
|
-
});
|
|
911
|
+
#checkVariants(request, parentPath) {
|
|
912
|
+
const path = parentPath ? joinPaths$1(parentPath, request) : request;
|
|
913
|
+
let file = this.#checkExtensions(path);
|
|
914
|
+
if (file) {
|
|
915
|
+
return file;
|
|
590
916
|
}
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
});
|
|
917
|
+
file = this.#checkIndex(path);
|
|
918
|
+
if (file) {
|
|
919
|
+
return file;
|
|
595
920
|
}
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
921
|
+
return false;
|
|
922
|
+
}
|
|
923
|
+
/**
|
|
924
|
+
* Check if the index file exists in the given request path.
|
|
925
|
+
*
|
|
926
|
+
* @param request - The request path to check.
|
|
927
|
+
* @returns The index file path if it exists, otherwise false.
|
|
928
|
+
*/
|
|
929
|
+
#checkIndex(request) {
|
|
930
|
+
let file = joinPaths$1(request, "index");
|
|
931
|
+
if (this.#existsSync(file)) {
|
|
932
|
+
return file;
|
|
600
933
|
}
|
|
601
|
-
|
|
602
|
-
if (
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
}
|
|
638
|
-
if (!this.#fs.existsSync(this.#context.entryPath)) {
|
|
639
|
-
this.#fs.mkdirSync(this.#context.entryPath, {
|
|
640
|
-
recursive: true
|
|
641
|
-
});
|
|
642
|
-
}
|
|
643
|
-
if (!this.#fs.existsSync(this.#context.dtsPath)) {
|
|
644
|
-
this.#fs.mkdirSync(this.#context.dtsPath, {
|
|
645
|
-
recursive: true
|
|
646
|
-
});
|
|
647
|
-
}
|
|
934
|
+
file = this.#checkExtensions(file);
|
|
935
|
+
if (file) {
|
|
936
|
+
return file;
|
|
937
|
+
}
|
|
938
|
+
return false;
|
|
939
|
+
}
|
|
940
|
+
/**
|
|
941
|
+
* Check if the file exists with different extensions.
|
|
942
|
+
*
|
|
943
|
+
* @param request - The request path to check.
|
|
944
|
+
* @returns The file path if it exists with any of the checked extensions, otherwise false.
|
|
945
|
+
*/
|
|
946
|
+
#checkExtensions(request) {
|
|
947
|
+
let file = `${request}.ts`;
|
|
948
|
+
if (this.#existsSync(file)) {
|
|
949
|
+
return file;
|
|
950
|
+
}
|
|
951
|
+
file = `${request}.mts`;
|
|
952
|
+
if (this.#existsSync(file)) {
|
|
953
|
+
return file;
|
|
954
|
+
}
|
|
955
|
+
file = `${request}.cts`;
|
|
956
|
+
if (this.#existsSync(file)) {
|
|
957
|
+
return file;
|
|
958
|
+
}
|
|
959
|
+
file = `${request}.tsx`;
|
|
960
|
+
if (this.#existsSync(file)) {
|
|
961
|
+
return file;
|
|
962
|
+
}
|
|
963
|
+
file = `${request}.js`;
|
|
964
|
+
if (this.#existsSync(file)) {
|
|
965
|
+
return file;
|
|
966
|
+
}
|
|
967
|
+
file = `${request}.mjs`;
|
|
968
|
+
if (this.#existsSync(file)) {
|
|
969
|
+
return file;
|
|
648
970
|
}
|
|
649
|
-
|
|
971
|
+
file = `${request}.cjs`;
|
|
972
|
+
if (this.#existsSync(file)) {
|
|
973
|
+
return file;
|
|
974
|
+
}
|
|
975
|
+
file = `${request}.jsx`;
|
|
976
|
+
if (this.#existsSync(file)) {
|
|
977
|
+
return file;
|
|
978
|
+
}
|
|
979
|
+
file = `${request}.json`;
|
|
980
|
+
if (this.#existsSync(file)) {
|
|
981
|
+
return file;
|
|
982
|
+
}
|
|
983
|
+
file = `${request}.d.ts`;
|
|
984
|
+
if (this.#existsSync(file)) {
|
|
985
|
+
return file;
|
|
986
|
+
}
|
|
987
|
+
return false;
|
|
650
988
|
}
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
989
|
+
/**
|
|
990
|
+
* Creates a virtual file system (VFS) that is backed up to a Cap'n Proto message buffer.
|
|
991
|
+
*
|
|
992
|
+
* @param context - The context of the virtual file system, typically containing options and logging functions.
|
|
993
|
+
* @returns A promise that resolves to a new virtual file system instance.
|
|
994
|
+
*/
|
|
995
|
+
static async create(context) {
|
|
996
|
+
if (!context.config.skipCache && existsSync(joinPaths$1(context.cachePath, "fs.bin"))) {
|
|
997
|
+
const buffer = await readFileBuffer(joinPaths$1(context.cachePath, "fs.bin"));
|
|
998
|
+
const message2 = new $.Message(buffer, false);
|
|
999
|
+
return new _VirtualFileSystem(context, message2.getRoot(FileSystemData));
|
|
655
1000
|
}
|
|
1001
|
+
const message = new $.Message();
|
|
1002
|
+
return new _VirtualFileSystem(context, message.initRoot(FileSystemData));
|
|
656
1003
|
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
1004
|
+
/**
|
|
1005
|
+
* Synchronously creates a virtual file system (VFS) that is backed up to a Cap'n Proto message buffer.
|
|
1006
|
+
*
|
|
1007
|
+
* @param context - The context of the virtual file system, typically containing options and logging functions.
|
|
1008
|
+
* @returns A new virtual file system instance.
|
|
1009
|
+
*/
|
|
1010
|
+
static createSync(context) {
|
|
1011
|
+
if (!context.config.skipCache && existsSync(joinPaths$1(context.cachePath, "fs.bin"))) {
|
|
1012
|
+
const buffer = readFileBufferSync(joinPaths$1(context.cachePath, "fs.bin"));
|
|
1013
|
+
const message2 = new $.Message(buffer, false);
|
|
1014
|
+
return new _VirtualFileSystem(context, message2.getRoot(FileSystemData));
|
|
1015
|
+
}
|
|
1016
|
+
const message = new $.Message();
|
|
1017
|
+
return new _VirtualFileSystem(context, message.initRoot(FileSystemData));
|
|
1018
|
+
}
|
|
1019
|
+
/**
|
|
1020
|
+
* A map of file ids to their metadata.
|
|
1021
|
+
*/
|
|
1022
|
+
get metadata() {
|
|
1023
|
+
return this.#metadata;
|
|
1024
|
+
}
|
|
1025
|
+
/**
|
|
1026
|
+
* A map of module ids to their file paths.
|
|
1027
|
+
*/
|
|
1028
|
+
get ids() {
|
|
1029
|
+
return this.#ids;
|
|
1030
|
+
}
|
|
1031
|
+
/**
|
|
1032
|
+
* A map of virtual file paths to their IDs.
|
|
1033
|
+
*/
|
|
1034
|
+
get paths() {
|
|
1035
|
+
return this.#paths;
|
|
1036
|
+
}
|
|
1037
|
+
/**
|
|
1038
|
+
* Creates a new instance of the {@link VirtualFileSystem}.
|
|
1039
|
+
*
|
|
1040
|
+
* @param context - The context of the virtual file system, typically containing options and logging functions.
|
|
1041
|
+
* @param data - A buffer containing the serialized virtual file system data.
|
|
1042
|
+
*/
|
|
1043
|
+
constructor(context, data) {
|
|
1044
|
+
this.#context = context;
|
|
1045
|
+
this.#unifiedFS = UnifiedFS.create(context, data);
|
|
1046
|
+
this.#metadata = {};
|
|
1047
|
+
if (data._hasMetadata()) {
|
|
1048
|
+
this.#metadata = data.metadata.values().reduce((ret, data2) => {
|
|
1049
|
+
ret[data2.id] = {
|
|
1050
|
+
id: data2.id,
|
|
1051
|
+
variant: data2.variant,
|
|
1052
|
+
mode: data2.mode,
|
|
1053
|
+
properties: data2._hasProperties() ? data2.properties.values().reduce((ret2, item) => {
|
|
1054
|
+
ret2[item.key] = item.value;
|
|
1055
|
+
return ret2;
|
|
1056
|
+
}, {}) : {}
|
|
1057
|
+
};
|
|
1058
|
+
return ret;
|
|
1059
|
+
}, {});
|
|
1060
|
+
}
|
|
1061
|
+
this.#ids = {};
|
|
1062
|
+
this.#paths = {};
|
|
1063
|
+
if (data._hasIds()) {
|
|
1064
|
+
this.#ids = data.ids.values().reduce((ret, data2) => {
|
|
1065
|
+
ret[data2.id] ??= data2.path;
|
|
1066
|
+
ret[data2.path] ??= data2.path;
|
|
1067
|
+
return ret;
|
|
1068
|
+
}, {});
|
|
1069
|
+
this.#paths = data.ids.values().reduce((ret, data2) => {
|
|
1070
|
+
ret[data2.path] ??= data2.id;
|
|
1071
|
+
return ret;
|
|
1072
|
+
}, {});
|
|
664
1073
|
}
|
|
1074
|
+
this.#log = extendLog(this.#context.log, "file-system");
|
|
665
1075
|
}
|
|
666
1076
|
/**
|
|
667
1077
|
* Check if a path or id corresponds to a virtual file **(does not actually exists on disk)**.
|
|
@@ -681,7 +1091,7 @@ var VirtualFileSystem = class {
|
|
|
681
1091
|
if (!resolvedPath) {
|
|
682
1092
|
return false;
|
|
683
1093
|
}
|
|
684
|
-
return this.
|
|
1094
|
+
return this.metadata[resolvedPath]?.mode === "virtual";
|
|
685
1095
|
}
|
|
686
1096
|
/**
|
|
687
1097
|
* Check if a path or id corresponds to a file written to the file system **(actually exists on disk)**.
|
|
@@ -690,7 +1100,7 @@ var VirtualFileSystem = class {
|
|
|
690
1100
|
* @param options - Optional parameters for resolving the path.
|
|
691
1101
|
* @returns Whether the path or id corresponds to a file written to the file system **(actually exists on disk)**.
|
|
692
1102
|
*/
|
|
693
|
-
|
|
1103
|
+
isPhysical(pathOrId, options = {}) {
|
|
694
1104
|
if (!pathOrId) {
|
|
695
1105
|
return false;
|
|
696
1106
|
}
|
|
@@ -701,18 +1111,7 @@ var VirtualFileSystem = class {
|
|
|
701
1111
|
if (!resolvedPath) {
|
|
702
1112
|
return false;
|
|
703
1113
|
}
|
|
704
|
-
return this.
|
|
705
|
-
}
|
|
706
|
-
/**
|
|
707
|
-
* Check if a path exists within one of the directories specified in the tsconfig.json's `path` field.
|
|
708
|
-
*
|
|
709
|
-
* @see https://www.typescriptlang.org/tsconfig#paths
|
|
710
|
-
*
|
|
711
|
-
* @param pathOrId - The path or ID to check.
|
|
712
|
-
* @returns Whether the path or ID corresponds to a virtual file.
|
|
713
|
-
*/
|
|
714
|
-
isTsconfigPath(pathOrId) {
|
|
715
|
-
return !!this.#context.tsconfig.options.paths && Object.keys(this.#context.tsconfig.options.paths).some((path) => pathOrId.startsWith(path.replaceAll("*", "")));
|
|
1114
|
+
return this.metadata[resolvedPath]?.mode === "fs";
|
|
716
1115
|
}
|
|
717
1116
|
/**
|
|
718
1117
|
* Lists files in a given path.
|
|
@@ -722,7 +1121,7 @@ var VirtualFileSystem = class {
|
|
|
722
1121
|
* @returns An array of file names in the specified path.
|
|
723
1122
|
*/
|
|
724
1123
|
readdirSync(path, options = "utf8") {
|
|
725
|
-
return this.resolveFS(path).readdirSync(toFilePath(path), options);
|
|
1124
|
+
return this.#unifiedFS.resolveFS(path).readdirSync(toFilePath(path), options);
|
|
726
1125
|
}
|
|
727
1126
|
/**
|
|
728
1127
|
* Removes a file in the virtual file system (VFS).
|
|
@@ -735,9 +1134,11 @@ var VirtualFileSystem = class {
|
|
|
735
1134
|
return;
|
|
736
1135
|
}
|
|
737
1136
|
this.#log(LogLevelLabel.TRACE, `Synchronously removing file: ${formattedPath}`);
|
|
738
|
-
this.resolveFS(path, options).unlinkSync(formattedPath);
|
|
739
|
-
this
|
|
740
|
-
|
|
1137
|
+
this.#unifiedFS.resolveFS(path, options).unlinkSync(formattedPath);
|
|
1138
|
+
if (this.paths[formattedPath] && this.metadata[this.paths[formattedPath]]) {
|
|
1139
|
+
delete this.metadata[this.paths[formattedPath]];
|
|
1140
|
+
}
|
|
1141
|
+
this.#clearResolverCache(formattedPath);
|
|
741
1142
|
}
|
|
742
1143
|
/**
|
|
743
1144
|
* Removes a file in the virtual file system (VFS).
|
|
@@ -750,10 +1151,12 @@ var VirtualFileSystem = class {
|
|
|
750
1151
|
return;
|
|
751
1152
|
}
|
|
752
1153
|
this.#log(LogLevelLabel.TRACE, `Removing file: ${formattedPath}`);
|
|
753
|
-
if (isFunction(this.resolveFS(path, options).promises.unlink)) {
|
|
754
|
-
await this.resolveFS(path, options).promises.unlink(formattedPath);
|
|
755
|
-
this
|
|
756
|
-
|
|
1154
|
+
if (isFunction(this.#unifiedFS.resolveFS(path, options).promises.unlink)) {
|
|
1155
|
+
await this.#unifiedFS.resolveFS(path, options).promises.unlink(formattedPath);
|
|
1156
|
+
if (this.paths[formattedPath] && this.metadata[this.paths[formattedPath]]) {
|
|
1157
|
+
delete this.metadata[this.paths[formattedPath]];
|
|
1158
|
+
}
|
|
1159
|
+
this.#clearResolverCache(formattedPath);
|
|
757
1160
|
} else {
|
|
758
1161
|
this.unlinkSync(formattedPath, options);
|
|
759
1162
|
}
|
|
@@ -770,11 +1173,10 @@ var VirtualFileSystem = class {
|
|
|
770
1173
|
return;
|
|
771
1174
|
}
|
|
772
1175
|
this.#log(LogLevelLabel.TRACE, `Synchronously removing directory: ${formattedPath}`);
|
|
773
|
-
this.resolveFS(path, options).rmdirSync(formattedPath,
|
|
1176
|
+
this.#unifiedFS.resolveFS(path, options).rmdirSync(formattedPath, defu2(options, {
|
|
774
1177
|
recursive: true
|
|
775
1178
|
}));
|
|
776
|
-
this.#
|
|
777
|
-
this.clearResolverCache(formattedPath);
|
|
1179
|
+
this.#clearResolverCache(formattedPath);
|
|
778
1180
|
}
|
|
779
1181
|
/**
|
|
780
1182
|
* Removes a directory in the virtual file system (VFS).
|
|
@@ -789,15 +1191,14 @@ var VirtualFileSystem = class {
|
|
|
789
1191
|
return;
|
|
790
1192
|
}
|
|
791
1193
|
this.#log(LogLevelLabel.TRACE, `Removing directory: ${formattedPath}`);
|
|
792
|
-
if (isFunction(this.resolveFS(path, options).promises.rm)) {
|
|
793
|
-
await this.resolveFS(path, options).promises.rm(formattedPath,
|
|
1194
|
+
if (isFunction(this.#unifiedFS.resolveFS(path, options).promises.rm)) {
|
|
1195
|
+
await this.#unifiedFS.resolveFS(path, options).promises.rm(formattedPath, defu2(options, {
|
|
794
1196
|
force: true,
|
|
795
1197
|
recursive: true
|
|
796
1198
|
}));
|
|
797
|
-
this.#
|
|
798
|
-
this.clearResolverCache(formattedPath);
|
|
1199
|
+
this.#clearResolverCache(formattedPath);
|
|
799
1200
|
} else {
|
|
800
|
-
this.rmdirSync(formattedPath,
|
|
1201
|
+
this.rmdirSync(formattedPath, defu2(options ?? {}, {
|
|
801
1202
|
force: true,
|
|
802
1203
|
recursive: true
|
|
803
1204
|
}));
|
|
@@ -839,8 +1240,8 @@ var VirtualFileSystem = class {
|
|
|
839
1240
|
*/
|
|
840
1241
|
mkdirSync(path, options = {}) {
|
|
841
1242
|
const filePath = toFilePath(path);
|
|
842
|
-
this
|
|
843
|
-
return this.resolveFS(filePath, options).mkdirSync(filePath,
|
|
1243
|
+
this.#clearResolverCache(filePath);
|
|
1244
|
+
return this.#unifiedFS.resolveFS(filePath, options).mkdirSync(filePath, defu2(options ?? {}, {
|
|
844
1245
|
recursive: true
|
|
845
1246
|
}));
|
|
846
1247
|
}
|
|
@@ -854,16 +1255,16 @@ var VirtualFileSystem = class {
|
|
|
854
1255
|
async mkdir(path, options = {}) {
|
|
855
1256
|
let result;
|
|
856
1257
|
const filePath = toFilePath(path);
|
|
857
|
-
if (isFunction(this.resolveFS(filePath, options).promises.mkdir)) {
|
|
858
|
-
result = await this.resolveFS(filePath, options).promises.mkdir(filePath,
|
|
1258
|
+
if (isFunction(this.#unifiedFS.resolveFS(filePath, options).promises.mkdir)) {
|
|
1259
|
+
result = await this.#unifiedFS.resolveFS(filePath, options).promises.mkdir(filePath, defu2(options ?? {}, {
|
|
859
1260
|
recursive: true
|
|
860
1261
|
}));
|
|
861
1262
|
} else {
|
|
862
|
-
result = this.resolveFS(filePath, options).mkdirSync(filePath,
|
|
1263
|
+
result = this.#unifiedFS.resolveFS(filePath, options).mkdirSync(filePath, defu2(options ?? {}, {
|
|
863
1264
|
recursive: true
|
|
864
1265
|
}));
|
|
865
1266
|
}
|
|
866
|
-
this
|
|
1267
|
+
this.#clearResolverCache(filePath);
|
|
867
1268
|
return result;
|
|
868
1269
|
}
|
|
869
1270
|
/**
|
|
@@ -885,7 +1286,7 @@ var VirtualFileSystem = class {
|
|
|
885
1286
|
}
|
|
886
1287
|
continue;
|
|
887
1288
|
}
|
|
888
|
-
const absPattern = isAbsolutePath(normalized) ? normalized : this.formatPath(joinPaths(this.#context.workspaceConfig.workspaceRoot, normalized));
|
|
1289
|
+
const absPattern = isAbsolutePath(normalized) ? normalized : this.formatPath(joinPaths$1(this.#context.workspaceConfig.workspaceRoot, normalized));
|
|
889
1290
|
const firstGlobIdx = absPattern.search(/[*?[\]{}]/);
|
|
890
1291
|
const baseDir = firstGlobIdx === -1 ? findFilePath(absPattern) : absPattern.slice(0, Math.max(0, absPattern.lastIndexOf("/", firstGlobIdx)));
|
|
891
1292
|
const stack = [
|
|
@@ -900,7 +1301,7 @@ var VirtualFileSystem = class {
|
|
|
900
1301
|
continue;
|
|
901
1302
|
}
|
|
902
1303
|
for (const entry of entries) {
|
|
903
|
-
const full = this.formatPath(joinPaths(dir, entry));
|
|
1304
|
+
const full = this.formatPath(joinPaths$1(dir, entry));
|
|
904
1305
|
let stats;
|
|
905
1306
|
try {
|
|
906
1307
|
stats = this.#unifiedFS.lstatSync(full);
|
|
@@ -911,7 +1312,7 @@ var VirtualFileSystem = class {
|
|
|
911
1312
|
if (stats.isDirectory()) {
|
|
912
1313
|
stack.push(full);
|
|
913
1314
|
} else if (stats.isFile()) {
|
|
914
|
-
if (this
|
|
1315
|
+
if (this.#buildRegex(absPattern).test(full)) {
|
|
915
1316
|
const resolved = this.resolve(full, {
|
|
916
1317
|
type: "file"
|
|
917
1318
|
});
|
|
@@ -944,7 +1345,7 @@ var VirtualFileSystem = class {
|
|
|
944
1345
|
}
|
|
945
1346
|
continue;
|
|
946
1347
|
}
|
|
947
|
-
const absPattern = isAbsolutePath(normalized) ? normalized : this.formatPath(joinPaths(this.#context.workspaceConfig.workspaceRoot, normalized));
|
|
1348
|
+
const absPattern = isAbsolutePath(normalized) ? normalized : this.formatPath(joinPaths$1(this.#context.workspaceConfig.workspaceRoot, normalized));
|
|
948
1349
|
const firstGlobIdx = absPattern.search(/[*?[\]{}]/);
|
|
949
1350
|
const baseDir = firstGlobIdx === -1 ? findFilePath(absPattern) : absPattern.slice(0, Math.max(0, absPattern.lastIndexOf("/", firstGlobIdx)));
|
|
950
1351
|
const stack = [
|
|
@@ -959,7 +1360,7 @@ var VirtualFileSystem = class {
|
|
|
959
1360
|
continue;
|
|
960
1361
|
}
|
|
961
1362
|
for (const entry of entries) {
|
|
962
|
-
const full = this.formatPath(joinPaths(dir, entry));
|
|
1363
|
+
const full = this.formatPath(joinPaths$1(dir, entry));
|
|
963
1364
|
let stats;
|
|
964
1365
|
try {
|
|
965
1366
|
stats = this.#unifiedFS.lstatSync(full);
|
|
@@ -970,7 +1371,7 @@ var VirtualFileSystem = class {
|
|
|
970
1371
|
if (stats.isDirectory()) {
|
|
971
1372
|
stack.push(full);
|
|
972
1373
|
} else if (stats.isFile()) {
|
|
973
|
-
if (this
|
|
1374
|
+
if (this.#buildRegex(absPattern).test(full)) {
|
|
974
1375
|
const resolved = this.resolve(full, {
|
|
975
1376
|
type: "file"
|
|
976
1377
|
});
|
|
@@ -1034,7 +1435,7 @@ var VirtualFileSystem = class {
|
|
|
1034
1435
|
* @returns An array of file names in the specified path.
|
|
1035
1436
|
*/
|
|
1036
1437
|
async readdir(pathOrId, options = "utf8") {
|
|
1037
|
-
return this.resolveFS(pathOrId).promises.readdir(toFilePath(pathOrId), options);
|
|
1438
|
+
return this.#unifiedFS.resolveFS(pathOrId).promises.readdir(toFilePath(pathOrId), options);
|
|
1038
1439
|
}
|
|
1039
1440
|
/**
|
|
1040
1441
|
* Asynchronously reads a file from the virtual file system (VFS).
|
|
@@ -1050,17 +1451,13 @@ var VirtualFileSystem = class {
|
|
|
1050
1451
|
type: "file"
|
|
1051
1452
|
});
|
|
1052
1453
|
if (filePath) {
|
|
1053
|
-
if (this.#cachedFS.has(filePath)) {
|
|
1054
|
-
return this.#cachedFS.get(filePath);
|
|
1055
|
-
}
|
|
1056
1454
|
let result;
|
|
1057
|
-
if (isFunction(this.resolveFS(filePath).promises.readFile)) {
|
|
1058
|
-
result = (await this.resolveFS(filePath).promises.readFile(filePath, options))?.toString("utf8");
|
|
1455
|
+
if (isFunction(this.#unifiedFS.resolveFS(filePath).promises.readFile)) {
|
|
1456
|
+
result = (await this.#unifiedFS.resolveFS(filePath).promises.readFile(filePath, options))?.toString("utf8");
|
|
1059
1457
|
} else {
|
|
1060
|
-
result = this.resolveFS(filePath).readFileSync(filePath, options);
|
|
1458
|
+
result = this.#unifiedFS.resolveFS(filePath).readFileSync(filePath, options);
|
|
1061
1459
|
}
|
|
1062
1460
|
const content = isBuffer(result) ? bufferToString(result) : result;
|
|
1063
|
-
this.#cachedFS.set(filePath, content);
|
|
1064
1461
|
return content;
|
|
1065
1462
|
}
|
|
1066
1463
|
return void 0;
|
|
@@ -1079,12 +1476,8 @@ var VirtualFileSystem = class {
|
|
|
1079
1476
|
type: "file"
|
|
1080
1477
|
});
|
|
1081
1478
|
if (filePath) {
|
|
1082
|
-
|
|
1083
|
-
return this.#cachedFS.get(filePath);
|
|
1084
|
-
}
|
|
1085
|
-
const result = this.resolveFS(filePath).readFileSync(filePath, options);
|
|
1479
|
+
const result = this.#unifiedFS.resolveFS(filePath).readFileSync(filePath, options);
|
|
1086
1480
|
const content = isBuffer(result) ? bufferToString(result) : result;
|
|
1087
|
-
this.#cachedFS.set(filePath, content);
|
|
1088
1481
|
return content;
|
|
1089
1482
|
}
|
|
1090
1483
|
return void 0;
|
|
@@ -1112,17 +1505,15 @@ var VirtualFileSystem = class {
|
|
|
1112
1505
|
});
|
|
1113
1506
|
}
|
|
1114
1507
|
}
|
|
1115
|
-
const outputMode = this.
|
|
1508
|
+
const outputMode = this.#unifiedFS.resolveMode(formattedPath, isPowerlinesWriteFileOptions(options) ? options : void 0);
|
|
1116
1509
|
this.#log(LogLevelLabel.TRACE, `Writing ${formattedPath} file to the ${outputMode === "fs" ? "" : "virtual "}file system (size: ${prettyBytes(new Blob(toArray(code)).size)})`);
|
|
1117
|
-
this.
|
|
1118
|
-
path: formattedPath,
|
|
1119
|
-
code,
|
|
1510
|
+
this.metadata[formattedPath] = {
|
|
1120
1511
|
mode: outputMode,
|
|
1121
1512
|
variant: "normal",
|
|
1122
1513
|
...isPowerLinesWriteFileData(data) ? data : {}
|
|
1123
1514
|
};
|
|
1124
|
-
this
|
|
1125
|
-
const ifs = this.resolveFS(formattedPath, isPowerlinesWriteFileOptions(options) ? options : void 0);
|
|
1515
|
+
this.#clearResolverCache(formattedPath);
|
|
1516
|
+
const ifs = this.#unifiedFS.resolveFS(formattedPath, isPowerlinesWriteFileOptions(options) ? options : void 0);
|
|
1126
1517
|
if (isFunction(ifs.promises.writeFile)) {
|
|
1127
1518
|
return ifs.promises.writeFile(formattedPath, code, isNodeWriteFileOptions(options) ? options : "utf8");
|
|
1128
1519
|
}
|
|
@@ -1141,17 +1532,15 @@ var VirtualFileSystem = class {
|
|
|
1141
1532
|
this.mkdirSync(findFilePath(formattedPath), isPowerlinesWriteFileOptions(options) ? options : void 0);
|
|
1142
1533
|
}
|
|
1143
1534
|
const code = isPowerLinesWriteFileData(data) ? data.code : data;
|
|
1144
|
-
const outputMode = this.
|
|
1535
|
+
const outputMode = this.#unifiedFS.resolveMode(formattedPath, isPowerlinesWriteFileOptions(options) ? options : void 0);
|
|
1145
1536
|
this.#log(LogLevelLabel.TRACE, `Writing ${formattedPath} file to the ${outputMode === "fs" ? "" : "virtual "}file system (size: ${prettyBytes(new Blob(toArray(code)).size)})`);
|
|
1146
|
-
this.
|
|
1147
|
-
path: formattedPath,
|
|
1148
|
-
code,
|
|
1537
|
+
this.metadata[formattedPath] = {
|
|
1149
1538
|
mode: outputMode,
|
|
1150
1539
|
variant: "normal",
|
|
1151
1540
|
...isPowerLinesWriteFileData(data) ? data : {}
|
|
1152
1541
|
};
|
|
1153
|
-
this
|
|
1154
|
-
const writeStream = this.resolveFS(formattedPath, isPowerlinesWriteFileOptions(options) ? options : void 0).createWriteStream(formattedPath);
|
|
1542
|
+
this.#clearResolverCache(formattedPath);
|
|
1543
|
+
const writeStream = this.#unifiedFS.resolveFS(formattedPath, isPowerlinesWriteFileOptions(options) ? options : void 0).createWriteStream(formattedPath);
|
|
1155
1544
|
try {
|
|
1156
1545
|
writeStream.write(code);
|
|
1157
1546
|
} finally {
|
|
@@ -1175,8 +1564,8 @@ var VirtualFileSystem = class {
|
|
|
1175
1564
|
*/
|
|
1176
1565
|
getMetadata(pathOrId) {
|
|
1177
1566
|
const resolved = this.resolve(pathOrId);
|
|
1178
|
-
if (resolved && this.
|
|
1179
|
-
return this.
|
|
1567
|
+
if (resolved && this.metadata[resolved]) {
|
|
1568
|
+
return this.metadata[resolved];
|
|
1180
1569
|
}
|
|
1181
1570
|
return void 0;
|
|
1182
1571
|
}
|
|
@@ -1184,365 +1573,269 @@ var VirtualFileSystem = class {
|
|
|
1184
1573
|
* Checks if a file exists in the virtual file system (VFS).
|
|
1185
1574
|
*
|
|
1186
1575
|
* @remarks
|
|
1187
|
-
* 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.
|
|
1188
|
-
*
|
|
1189
|
-
* @param pathOrId - The path of the file to check.
|
|
1190
|
-
* @returns `true` if the file exists, otherwise `false`.
|
|
1191
|
-
*/
|
|
1192
|
-
isFile(pathOrId) {
|
|
1193
|
-
const resolved = this.resolve(pathOrId);
|
|
1194
|
-
return !!(resolved && (this.#
|
|
1195
|
-
}
|
|
1196
|
-
/**
|
|
1197
|
-
* Checks if a directory exists in the virtual file system (VFS).
|
|
1198
|
-
*
|
|
1199
|
-
* @param pathOrId - The path of the directory to check.
|
|
1200
|
-
* @returns `true` if the directory exists, otherwise `false`.
|
|
1201
|
-
*/
|
|
1202
|
-
isDirectory(pathOrId) {
|
|
1203
|
-
const resolved = this.resolve(pathOrId);
|
|
1204
|
-
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()));
|
|
1205
|
-
}
|
|
1206
|
-
/**
|
|
1207
|
-
* Retrieves the status of a file in the virtual file system (VFS).
|
|
1208
|
-
*
|
|
1209
|
-
* @param pathOrId - The path or ID of the file to retrieve status for.
|
|
1210
|
-
* @returns A promise that resolves to the file's status information, or false if the file does not exist.
|
|
1211
|
-
*/
|
|
1212
|
-
async stat(pathOrId, options) {
|
|
1213
|
-
return this.resolveFS(pathOrId).promises.stat(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
|
|
1214
|
-
}
|
|
1215
|
-
/**
|
|
1216
|
-
* Synchronously retrieves the status of a file in the virtual file system (VFS).
|
|
1217
|
-
*
|
|
1218
|
-
* @param pathOrId - The path or ID of the file to retrieve status for.
|
|
1219
|
-
* @returns The file's status information, or false if the file does not exist.
|
|
1220
|
-
*/
|
|
1221
|
-
statSync(pathOrId) {
|
|
1222
|
-
return this.resolveFS(pathOrId).statSync(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId));
|
|
1223
|
-
}
|
|
1224
|
-
/**
|
|
1225
|
-
* Retrieves the status of a symbolic link in the virtual file system (VFS).
|
|
1226
|
-
*
|
|
1227
|
-
* @param pathOrId - The path or ID of the symbolic link to retrieve status for.
|
|
1228
|
-
* @returns A promise that resolves to the symbolic link's status information, or false if the link does not exist.
|
|
1229
|
-
*/
|
|
1230
|
-
async lstat(pathOrId, options) {
|
|
1231
|
-
return this.resolveFS(pathOrId).promises.lstat(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
|
|
1232
|
-
}
|
|
1233
|
-
/**
|
|
1234
|
-
* Synchronously retrieves the status of a symbolic link in the virtual file system (VFS).
|
|
1235
|
-
*
|
|
1236
|
-
* @param pathOrId - The path or ID of the symbolic link to retrieve status for.
|
|
1237
|
-
* @returns The symbolic link's status information, or false if the link does not exist.
|
|
1238
|
-
*/
|
|
1239
|
-
lstatSync(pathOrId, options) {
|
|
1240
|
-
return this.resolveFS(pathOrId).lstatSync(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
|
|
1241
|
-
}
|
|
1242
|
-
/**
|
|
1243
|
-
* Resolves a path based on TypeScript's `tsconfig.json` paths.
|
|
1244
|
-
*
|
|
1245
|
-
* @see https://www.typescriptlang.org/tsconfig#paths
|
|
1246
|
-
*
|
|
1247
|
-
* @param path - The path to check.
|
|
1248
|
-
* @returns The resolved file path if it exists, otherwise undefined.
|
|
1249
|
-
*/
|
|
1250
|
-
resolveTsconfigPath(path) {
|
|
1251
|
-
if (this.#context.tsconfig.options.paths) {
|
|
1252
|
-
for (const tsconfigPathKey of Object.keys(this.#context.tsconfig.options.paths).filter((tsconfigPath) => path.startsWith(tsconfigPath.replaceAll("*", "")))) {
|
|
1253
|
-
const resolvedPath = this.#context.tsconfig.options.paths[tsconfigPathKey]?.find((tsconfigPath) => this.resolvePath(joinPaths(this.#context.workspaceConfig.workspaceRoot, tsconfigPath.replaceAll("*", ""), path.replace(tsconfigPathKey.replaceAll("*", ""), ""))) || this.formatPath(tsconfigPath) === this.formatPath(path));
|
|
1254
|
-
if (resolvedPath) {
|
|
1255
|
-
return this.formatPath(resolvedPath) === this.formatPath(path) ? this.formatPath(resolvedPath) : this.resolvePath(joinPaths(this.#context.workspaceConfig.workspaceRoot, resolvedPath.replaceAll("*", ""), path.replace(tsconfigPathKey.replaceAll("*", ""), "")));
|
|
1256
|
-
}
|
|
1257
|
-
}
|
|
1258
|
-
}
|
|
1259
|
-
return false;
|
|
1260
|
-
}
|
|
1261
|
-
/**
|
|
1262
|
-
* Resolves a path based on TypeScript's `tsconfig.json` paths.
|
|
1263
|
-
*
|
|
1264
|
-
* @see https://www.typescriptlang.org/tsconfig#paths
|
|
1265
|
-
*
|
|
1266
|
-
* @param path - The path to check.
|
|
1267
|
-
* @returns The resolved file path if it exists, otherwise undefined.
|
|
1268
|
-
*/
|
|
1269
|
-
resolveTsconfigPathPackage(path) {
|
|
1270
|
-
if (this.#context.tsconfig.options.paths) {
|
|
1271
|
-
const tsconfigPathKeys = Object.keys(this.#context.tsconfig.options.paths).filter((tsconfigPath) => path.startsWith(tsconfigPath.replaceAll("*", "")));
|
|
1272
|
-
if (tsconfigPathKeys.length > 0 && tsconfigPathKeys[0]) {
|
|
1273
|
-
return tsconfigPathKeys[0].replace(/\/\*$/, "");
|
|
1274
|
-
}
|
|
1275
|
-
}
|
|
1276
|
-
return false;
|
|
1277
|
-
}
|
|
1278
|
-
/**
|
|
1279
|
-
* Resolves a path or ID to its real path in the virtual file system (VFS).
|
|
1280
|
-
*
|
|
1281
|
-
* @param pathOrId - The path or ID to resolve.
|
|
1282
|
-
* @returns The resolved real path if it exists, otherwise undefined.
|
|
1283
|
-
*/
|
|
1284
|
-
realpathSync(pathOrId) {
|
|
1285
|
-
const filePath = this.resolve(toFilePath(pathOrId));
|
|
1286
|
-
if (!filePath) {
|
|
1287
|
-
throw new Error(`File not found: ${toFilePath(pathOrId)}`);
|
|
1288
|
-
}
|
|
1289
|
-
return filePath;
|
|
1290
|
-
}
|
|
1291
|
-
/**
|
|
1292
|
-
* Resolves a path or ID parameter to a corresponding virtual file path in the virtual file system (VFS).
|
|
1293
|
-
*
|
|
1294
|
-
* @param pathOrId - The path or ID to resolve.
|
|
1295
|
-
* @param options - Optional parameters for resolving the path, such as whether to include the file extension.
|
|
1296
|
-
* @returns The resolved file path if it exists, otherwise undefined.
|
|
1297
|
-
*/
|
|
1298
|
-
resolve(pathOrId, options = {}) {
|
|
1299
|
-
const formattedPathOrId = toFilePath(pathOrId);
|
|
1300
|
-
const resolverKey = `${formattedPathOrId}${options.withExtension ? "-ext" : ""}${options.paths ? `-${murmurhash(options.paths)}` : ""}${options.type ? `-${options.type}` : ""}`;
|
|
1301
|
-
if (this.#cachedResolver.has(resolverKey)) {
|
|
1302
|
-
return this.#cachedResolver.get(resolverKey);
|
|
1303
|
-
}
|
|
1304
|
-
let result = this.resolveId(formattedPathOrId);
|
|
1305
|
-
if (!result) {
|
|
1306
|
-
result = this.resolvePath(formattedPathOrId, options);
|
|
1307
|
-
}
|
|
1308
|
-
if (!result) {
|
|
1309
|
-
result = false;
|
|
1310
|
-
}
|
|
1311
|
-
if (result && options.withExtension === false) {
|
|
1312
|
-
return result.replace(/\.[m|c]?[t|j]sx?$/, "");
|
|
1313
|
-
}
|
|
1314
|
-
this.#cachedResolver.set(resolverKey, result);
|
|
1315
|
-
return result;
|
|
1316
|
-
}
|
|
1317
|
-
/**
|
|
1318
|
-
* Retrieves the partial metadata for all files in the virtual file system (VFS).
|
|
1319
|
-
*
|
|
1320
|
-
* @returns A record containing the partial metadata for all files.
|
|
1321
|
-
*/
|
|
1322
|
-
getPartialMeta() {
|
|
1323
|
-
return Object.fromEntries(Object.entries(this.#meta).filter(([_, data]) => isSetObject(data)));
|
|
1324
|
-
}
|
|
1325
|
-
buildRegex(strPattern) {
|
|
1326
|
-
const token = "::GLOBSTAR::";
|
|
1327
|
-
return new RegExp(`^${this.formatPath(strPattern).replace(/\*\*/g, token).replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, "[^/]*").replace(/\?/g, "[^/]").replace(new RegExp(token, "g"), ".*")}$`);
|
|
1328
|
-
}
|
|
1329
|
-
/**
|
|
1330
|
-
* Converts a relative path to an absolute path based on the workspace and project root.
|
|
1331
|
-
*
|
|
1332
|
-
* @param path - The relative path to convert.
|
|
1333
|
-
* @returns The absolute path.
|
|
1334
|
-
*/
|
|
1335
|
-
formatPath(path) {
|
|
1336
|
-
const formattedPath = toFilePath(path);
|
|
1337
|
-
if (isAbsolutePath(formattedPath) || formattedPath.startsWith(this.#context.workspaceConfig.workspaceRoot)) {
|
|
1338
|
-
return formattedPath;
|
|
1339
|
-
} else if (formattedPath.startsWith(this.#context.config.projectRoot)) {
|
|
1340
|
-
return joinPaths(this.#context.workspaceConfig.workspaceRoot, formattedPath);
|
|
1341
|
-
}
|
|
1342
|
-
return formattedPath;
|
|
1343
|
-
}
|
|
1344
|
-
/**
|
|
1345
|
-
* Formats a file id by removing the file extension and prepending the runtime prefix.
|
|
1346
|
-
*
|
|
1347
|
-
* @param id - The file ID to format.
|
|
1348
|
-
* @returns The formatted file ID.
|
|
1349
|
-
*/
|
|
1350
|
-
formatId(id) {
|
|
1351
|
-
const formattedId = toFilePath(id);
|
|
1352
|
-
return `${this.#context.config.output.builtinPrefix}:${formattedId.replace(new RegExp(`^${this.#context.config.output.builtinPrefix}:`), "").replace(/^\\0/, "").replace(findFileDotExtensionSafe(formattedId), "")}`;
|
|
1353
|
-
}
|
|
1354
|
-
/**
|
|
1355
|
-
* Resolves an id parameter to a corresponding virtual file path in the virtual file system (VFS).
|
|
1356
|
-
*
|
|
1357
|
-
* @param id - The id to resolve.
|
|
1358
|
-
* @returns The resolved file id if it exists, otherwise undefined.
|
|
1359
|
-
*/
|
|
1360
|
-
resolveId(id) {
|
|
1361
|
-
if (this.#ids[this.formatId(id)]) {
|
|
1362
|
-
return this.#ids[this.formatId(id)] || false;
|
|
1363
|
-
}
|
|
1364
|
-
return false;
|
|
1365
|
-
}
|
|
1366
|
-
/**
|
|
1367
|
-
* Resolves a path parameter to a corresponding virtual file path in the virtual file system (VFS).
|
|
1368
|
-
*
|
|
1369
|
-
* @param path - The path to resolve.
|
|
1370
|
-
* @param options - Optional parameters for resolving the path.
|
|
1371
|
-
* @returns The resolved file path if it exists, otherwise undefined.
|
|
1372
|
-
*/
|
|
1373
|
-
resolvePath(path, options = {}) {
|
|
1374
|
-
if (isAbsolutePath(path)) {
|
|
1375
|
-
if (this.#existsSync(path)) {
|
|
1376
|
-
return path;
|
|
1377
|
-
}
|
|
1378
|
-
const result = this.checkVariants(path);
|
|
1379
|
-
if (result) {
|
|
1380
|
-
return result;
|
|
1381
|
-
}
|
|
1382
|
-
}
|
|
1383
|
-
for (const parentPath of this.resolveParentPaths(path, options.paths)) {
|
|
1384
|
-
const request = joinPaths(parentPath, path);
|
|
1385
|
-
if (this.#existsSync(request)) {
|
|
1386
|
-
return request;
|
|
1387
|
-
}
|
|
1388
|
-
const result = this.checkVariants(request);
|
|
1389
|
-
if (result) {
|
|
1390
|
-
return result;
|
|
1391
|
-
}
|
|
1392
|
-
}
|
|
1393
|
-
return false;
|
|
1394
|
-
}
|
|
1395
|
-
resolveParentPaths(request, parents = []) {
|
|
1396
|
-
let paths = [
|
|
1397
|
-
this.#context.workspaceConfig.workspaceRoot,
|
|
1398
|
-
joinPaths(this.#context.workspaceConfig.workspaceRoot, this.#context.config.projectRoot)
|
|
1399
|
-
];
|
|
1400
|
-
if (this.#context.tsconfig.options.paths) {
|
|
1401
|
-
paths = this.#context.tsconfig.options.paths ? Object.keys(this.#context.tsconfig.options.paths).filter((tsconfigPath) => request.startsWith(tsconfigPath.replaceAll("*", ""))).map((tsconfigPath) => this.#context.tsconfig.options.paths?.[tsconfigPath]).flat().reduce((ret, path) => {
|
|
1402
|
-
if (path && !ret.includes(joinPaths(this.#context.workspaceConfig.workspaceRoot, path))) {
|
|
1403
|
-
ret.push(joinPaths(this.#context.workspaceConfig.workspaceRoot, path));
|
|
1404
|
-
}
|
|
1405
|
-
return ret;
|
|
1406
|
-
}, paths) : paths;
|
|
1407
|
-
}
|
|
1408
|
-
return paths.reduce((ret, path) => {
|
|
1409
|
-
if (!ret.includes(path)) {
|
|
1410
|
-
ret.push(path);
|
|
1411
|
-
}
|
|
1412
|
-
return ret;
|
|
1413
|
-
}, parents.filter(Boolean).map((p) => this.formatPath(p)));
|
|
1576
|
+
* 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.
|
|
1577
|
+
*
|
|
1578
|
+
* @param pathOrId - The path of the file to check.
|
|
1579
|
+
* @returns `true` if the file exists, otherwise `false`.
|
|
1580
|
+
*/
|
|
1581
|
+
isFile(pathOrId) {
|
|
1582
|
+
const resolved = this.resolve(pathOrId);
|
|
1583
|
+
return !!(resolved && (this.#unifiedFS.virtual.existsSync(resolved) && this.#unifiedFS.virtual.lstatSync(resolved).isFile() || this.#unifiedFS.physical.existsSync(resolved) && this.#unifiedFS.physical.lstatSync(resolved).isFile() || this.#unifiedFS.resolveFS(resolved).existsSync(resolved) && this.#unifiedFS.resolveFS(resolved).lstatSync(resolved).isFile()));
|
|
1414
1584
|
}
|
|
1415
1585
|
/**
|
|
1416
|
-
*
|
|
1586
|
+
* Checks if a directory exists in the virtual file system (VFS).
|
|
1417
1587
|
*
|
|
1418
|
-
* @param
|
|
1419
|
-
* @
|
|
1420
|
-
* @returns The file system module used for the operation.
|
|
1588
|
+
* @param pathOrId - The path of the directory to check.
|
|
1589
|
+
* @returns `true` if the directory exists, otherwise `false`.
|
|
1421
1590
|
*/
|
|
1422
|
-
|
|
1423
|
-
const
|
|
1424
|
-
|
|
1425
|
-
return this.#virtualFS;
|
|
1426
|
-
} else if (mode === "fs") {
|
|
1427
|
-
return this.#fs;
|
|
1428
|
-
}
|
|
1429
|
-
return this.#unifiedFS;
|
|
1591
|
+
isDirectory(pathOrId) {
|
|
1592
|
+
const resolved = this.resolve(pathOrId);
|
|
1593
|
+
return !!(resolved && (this.#unifiedFS.virtual.existsSync(resolved) && this.#unifiedFS.virtual.lstatSync(resolved).isDirectory() || this.#unifiedFS.physical.existsSync(resolved) && this.#unifiedFS.physical.lstatSync(resolved).isDirectory() || this.#unifiedFS.resolveFS(resolved).existsSync(resolved) && this.#unifiedFS.resolveFS(resolved).lstatSync(resolved).isDirectory()));
|
|
1430
1594
|
}
|
|
1431
1595
|
/**
|
|
1432
|
-
*
|
|
1596
|
+
* Retrieves the status of a file in the virtual file system (VFS).
|
|
1433
1597
|
*
|
|
1434
|
-
* @param
|
|
1435
|
-
* @
|
|
1436
|
-
* @returns The file system module used for the operation.
|
|
1598
|
+
* @param pathOrId - The path or ID of the file to retrieve status for.
|
|
1599
|
+
* @returns A promise that resolves to the file's status information, or false if the file does not exist.
|
|
1437
1600
|
*/
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
return "virtual";
|
|
1441
|
-
} else if (options.mode === "fs" || this.#context.config.output.mode === "fs" || isParentPath(toFilePath(pathOrUrl), this.#context.dataPath) || isParentPath(toFilePath(pathOrUrl), this.#context.cachePath) || isParentPath(toFilePath(pathOrUrl), joinPaths(this.#context.workspaceConfig.workspaceRoot, this.#context.config.output.outputPath))) {
|
|
1442
|
-
return "fs";
|
|
1443
|
-
}
|
|
1444
|
-
return void 0;
|
|
1601
|
+
async stat(pathOrId, options) {
|
|
1602
|
+
return this.#unifiedFS.resolveFS(pathOrId).promises.stat(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
|
|
1445
1603
|
}
|
|
1446
1604
|
/**
|
|
1447
|
-
*
|
|
1605
|
+
* Synchronously retrieves the status of a file in the virtual file system (VFS).
|
|
1448
1606
|
*
|
|
1449
|
-
* @param
|
|
1607
|
+
* @param pathOrId - The path or ID of the file to retrieve status for.
|
|
1608
|
+
* @returns The file's status information, or false if the file does not exist.
|
|
1450
1609
|
*/
|
|
1451
|
-
|
|
1452
|
-
this.#
|
|
1610
|
+
statSync(pathOrId) {
|
|
1611
|
+
return this.#unifiedFS.resolveFS(pathOrId).statSync(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId));
|
|
1453
1612
|
}
|
|
1454
1613
|
/**
|
|
1455
|
-
*
|
|
1614
|
+
* Retrieves the status of a symbolic link in the virtual file system (VFS).
|
|
1456
1615
|
*
|
|
1457
|
-
* @param
|
|
1458
|
-
* @
|
|
1459
|
-
* @returns The file path if it exists, otherwise false.
|
|
1616
|
+
* @param pathOrId - The path or ID of the symbolic link to retrieve status for.
|
|
1617
|
+
* @returns A promise that resolves to the symbolic link's status information, or false if the link does not exist.
|
|
1460
1618
|
*/
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
let file = this.checkExtensions(path);
|
|
1464
|
-
if (file) {
|
|
1465
|
-
return file;
|
|
1466
|
-
}
|
|
1467
|
-
file = this.checkIndex(path);
|
|
1468
|
-
if (file) {
|
|
1469
|
-
return file;
|
|
1470
|
-
}
|
|
1471
|
-
return false;
|
|
1619
|
+
async lstat(pathOrId, options) {
|
|
1620
|
+
return this.#unifiedFS.resolveFS(pathOrId).promises.lstat(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
|
|
1472
1621
|
}
|
|
1473
1622
|
/**
|
|
1474
|
-
*
|
|
1623
|
+
* Synchronously retrieves the status of a symbolic link in the virtual file system (VFS).
|
|
1475
1624
|
*
|
|
1476
|
-
* @param
|
|
1477
|
-
* @returns The
|
|
1625
|
+
* @param pathOrId - The path or ID of the symbolic link to retrieve status for.
|
|
1626
|
+
* @returns The symbolic link's status information, or false if the link does not exist.
|
|
1478
1627
|
*/
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
if (this.#existsSync(file)) {
|
|
1482
|
-
return file;
|
|
1483
|
-
}
|
|
1484
|
-
file = this.checkExtensions(file);
|
|
1485
|
-
if (file) {
|
|
1486
|
-
return file;
|
|
1487
|
-
}
|
|
1488
|
-
return false;
|
|
1628
|
+
lstatSync(pathOrId, options) {
|
|
1629
|
+
return this.#unifiedFS.resolveFS(pathOrId).lstatSync(this.resolve(toFilePath(pathOrId)) || toFilePath(pathOrId), options);
|
|
1489
1630
|
}
|
|
1490
1631
|
/**
|
|
1491
|
-
*
|
|
1632
|
+
* Resolves a path or ID to its real path in the virtual file system (VFS).
|
|
1492
1633
|
*
|
|
1493
|
-
* @param
|
|
1494
|
-
* @
|
|
1495
|
-
* @returns The file path if it exists with any of the checked extensions, otherwise false.
|
|
1634
|
+
* @param pathOrId - The path or ID to resolve.
|
|
1635
|
+
* @returns The resolved real path if it exists, otherwise undefined.
|
|
1496
1636
|
*/
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
if (
|
|
1500
|
-
|
|
1501
|
-
}
|
|
1502
|
-
file = `${request}.mts`;
|
|
1503
|
-
if (this.#existsSync(file)) {
|
|
1504
|
-
return file;
|
|
1637
|
+
realpathSync(pathOrId) {
|
|
1638
|
+
const filePath = this.resolve(toFilePath(pathOrId));
|
|
1639
|
+
if (!filePath) {
|
|
1640
|
+
throw new Error(`File not found: ${toFilePath(pathOrId)}`);
|
|
1505
1641
|
}
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1642
|
+
return filePath;
|
|
1643
|
+
}
|
|
1644
|
+
/**
|
|
1645
|
+
* Resolves a path or ID parameter to a corresponding virtual file path in the virtual file system (VFS).
|
|
1646
|
+
*
|
|
1647
|
+
* @param pathOrId - The path or ID to resolve.
|
|
1648
|
+
* @param options - Optional parameters for resolving the path, such as whether to include the file extension.
|
|
1649
|
+
* @returns The resolved file path if it exists, otherwise undefined.
|
|
1650
|
+
*/
|
|
1651
|
+
resolve(pathOrId, options = {}) {
|
|
1652
|
+
const formattedPathOrId = toFilePath(pathOrId);
|
|
1653
|
+
const resolverKey = `${formattedPathOrId}${options.withExtension ? "-ext" : ""}${options.paths ? `-${murmurhash(options.paths)}` : ""}${options.type ? `-${options.type}` : ""}`;
|
|
1654
|
+
if (this.#cachedResolver.has(resolverKey)) {
|
|
1655
|
+
return this.#cachedResolver.get(resolverKey);
|
|
1509
1656
|
}
|
|
1510
|
-
|
|
1511
|
-
if (
|
|
1512
|
-
|
|
1657
|
+
let result = this.#resolveId(formattedPathOrId);
|
|
1658
|
+
if (!result) {
|
|
1659
|
+
result = this.#resolvePath(formattedPathOrId, options);
|
|
1513
1660
|
}
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
return file;
|
|
1661
|
+
if (!result) {
|
|
1662
|
+
result = false;
|
|
1517
1663
|
}
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
return file;
|
|
1664
|
+
if (result && options.withExtension === false) {
|
|
1665
|
+
return result.replace(/\.[m|c]?[t|j]sx?$/, "");
|
|
1521
1666
|
}
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1667
|
+
this.#cachedResolver.set(resolverKey, result);
|
|
1668
|
+
return result;
|
|
1669
|
+
}
|
|
1670
|
+
/**
|
|
1671
|
+
* Converts a relative path to an absolute path based on the workspace and project root.
|
|
1672
|
+
*
|
|
1673
|
+
* @param path - The relative path to convert.
|
|
1674
|
+
* @returns The absolute path.
|
|
1675
|
+
*/
|
|
1676
|
+
formatPath(path) {
|
|
1677
|
+
const formattedPath = toFilePath(path);
|
|
1678
|
+
if (isAbsolutePath(formattedPath) || formattedPath.startsWith(this.#context.workspaceConfig.workspaceRoot)) {
|
|
1679
|
+
return formattedPath;
|
|
1680
|
+
} else if (formattedPath.startsWith(this.#context.config.projectRoot)) {
|
|
1681
|
+
return joinPaths$1(this.#context.workspaceConfig.workspaceRoot, formattedPath);
|
|
1525
1682
|
}
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1683
|
+
return formattedPath;
|
|
1684
|
+
}
|
|
1685
|
+
/**
|
|
1686
|
+
* Disposes of the virtual file system (VFS) by saving its state to disk.
|
|
1687
|
+
*/
|
|
1688
|
+
async dispose() {
|
|
1689
|
+
if (!this.#isDisposed) {
|
|
1690
|
+
this.#isDisposed = true;
|
|
1691
|
+
this.#log(LogLevelLabel.DEBUG, "Disposing virtual file system...");
|
|
1692
|
+
await this.unlink(joinPaths$1(this.#context.cachePath, "fs.bin"));
|
|
1693
|
+
const message = new $.Message();
|
|
1694
|
+
const data = message.initRoot(FileSystemData);
|
|
1695
|
+
const virtualFS = this.#unifiedFS.toJSON();
|
|
1696
|
+
const files = data._initFiles(Object.keys(virtualFS).length);
|
|
1697
|
+
Object.entries(virtualFS).filter(([_, content]) => content).forEach(([path, content], index) => {
|
|
1698
|
+
const fileData = files.get(index);
|
|
1699
|
+
fileData.path = path;
|
|
1700
|
+
fileData.content = content;
|
|
1701
|
+
});
|
|
1702
|
+
const ids = data._initIds(Object.keys(this.ids).length);
|
|
1703
|
+
Object.entries(this.ids).forEach(([id, path], index) => {
|
|
1704
|
+
const fileId = ids.get(index);
|
|
1705
|
+
fileId.id = id;
|
|
1706
|
+
fileId.path = path;
|
|
1707
|
+
});
|
|
1708
|
+
const metadata = data._initMetadata(Object.keys(this.metadata).length);
|
|
1709
|
+
Object.entries(this.metadata).forEach(([id, value], index) => {
|
|
1710
|
+
const fileMetadata = metadata.get(index);
|
|
1711
|
+
fileMetadata.id = id;
|
|
1712
|
+
fileMetadata.mode = value.mode;
|
|
1713
|
+
fileMetadata.variant = value.variant;
|
|
1714
|
+
if (value.properties) {
|
|
1715
|
+
const props = fileMetadata._initProperties(Object.keys(value.properties).length);
|
|
1716
|
+
Object.entries(value.properties).forEach(([key, val], propIndex) => {
|
|
1717
|
+
const propData = props.get(propIndex);
|
|
1718
|
+
propData.key = key;
|
|
1719
|
+
propData.value = val;
|
|
1720
|
+
});
|
|
1721
|
+
}
|
|
1722
|
+
});
|
|
1723
|
+
await writeFileBuffer(joinPaths$1(this.#context.cachePath, "fs.bin"), message.toArrayBuffer());
|
|
1529
1724
|
}
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1725
|
+
}
|
|
1726
|
+
/**
|
|
1727
|
+
* Initializes the virtual file system (VFS) by patching the file system module if necessary.
|
|
1728
|
+
*/
|
|
1729
|
+
[__VFS_PATCH__]() {
|
|
1730
|
+
if (!this.#isPatched && this.#context.config.output.mode !== "fs") {
|
|
1731
|
+
this.#revert = patchFS(fs, this);
|
|
1732
|
+
this.#isPatched = true;
|
|
1533
1733
|
}
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1734
|
+
}
|
|
1735
|
+
/**
|
|
1736
|
+
* Reverts the file system module to its original state if it was previously patched.
|
|
1737
|
+
*/
|
|
1738
|
+
[__VFS_REVERT__]() {
|
|
1739
|
+
if (this.#isPatched && this.#context.config.output.mode !== "fs") {
|
|
1740
|
+
if (!this.#revert) {
|
|
1741
|
+
throw new Error("Attempting to revert File System patch prior to calling `__init__` function");
|
|
1742
|
+
}
|
|
1743
|
+
this.#revert?.();
|
|
1744
|
+
this.#isPatched = false;
|
|
1537
1745
|
}
|
|
1538
|
-
|
|
1746
|
+
}
|
|
1747
|
+
async [Symbol.asyncDispose]() {
|
|
1748
|
+
return this.dispose();
|
|
1539
1749
|
}
|
|
1540
1750
|
};
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1751
|
+
|
|
1752
|
+
// src/types/commands.ts
|
|
1753
|
+
var SUPPORTED_COMMANDS = [
|
|
1754
|
+
"new",
|
|
1755
|
+
"clean",
|
|
1756
|
+
"prepare",
|
|
1757
|
+
"lint",
|
|
1758
|
+
"test",
|
|
1759
|
+
"build",
|
|
1760
|
+
"docs",
|
|
1761
|
+
"deploy",
|
|
1762
|
+
"finalize"
|
|
1763
|
+
];
|
|
1764
|
+
|
|
1765
|
+
// src/plugin-utils/helpers.ts
|
|
1766
|
+
function isPlugin(value) {
|
|
1767
|
+
return isSetObject(value) && "name" in value && isSetString(value.name) && (isUndefined(value.applyToEnvironment) || "applyToEnvironment" in value && isFunction(value.applyToEnvironment)) && (isUndefined(value.dedupe) || "dedupe" in value && isFunction(value.dedupe)) && (isUndefined(value.dependsOn) || "dependsOn" in value && Array.isArray(value.dependsOn) && value.dependsOn.every(isPluginConfig)) && SUPPORTED_COMMANDS.every((command) => isUndefined(value[command]) || command in value && (isFunction(value[command]) || isSetObject(value[command]) && "handler" in value[command] && isFunction(value[command].handler)));
|
|
1768
|
+
}
|
|
1769
|
+
__name(isPlugin, "isPlugin");
|
|
1770
|
+
function isPluginConfigObject(value) {
|
|
1771
|
+
return isSetObject(value) && "plugin" in value && ((isSetString(value.plugin) || isFunction(value.plugin)) && "options" in value && isSetObject(value.options) || isPlugin(value.plugin));
|
|
1772
|
+
}
|
|
1773
|
+
__name(isPluginConfigObject, "isPluginConfigObject");
|
|
1774
|
+
function isPluginConfigTuple(value) {
|
|
1775
|
+
return Array.isArray(value) && (value.length === 1 || value.length === 2) && ((isSetString(value[0]) || isFunction(value[0])) && value.length > 1 && isSetObject(value[1]) || isPlugin(value[0]));
|
|
1776
|
+
}
|
|
1777
|
+
__name(isPluginConfigTuple, "isPluginConfigTuple");
|
|
1778
|
+
function isPluginConfig(value) {
|
|
1779
|
+
return isSetString(value) || isFunction(value) || isPlugin(value) || isPluginConfigObject(value) || isPluginConfigTuple(value);
|
|
1780
|
+
}
|
|
1781
|
+
__name(isPluginConfig, "isPluginConfig");
|
|
1782
|
+
function isPluginHookFunction(value) {
|
|
1783
|
+
return isFunction(value) || isSetObject(value) && "handler" in value && isFunction(value.handler);
|
|
1784
|
+
}
|
|
1785
|
+
__name(isPluginHookFunction, "isPluginHookFunction");
|
|
1786
|
+
function isPluginHookObject(value) {
|
|
1787
|
+
return isSetObject(value) && "handler" in value && isFunction(value.handler);
|
|
1788
|
+
}
|
|
1789
|
+
__name(isPluginHookObject, "isPluginHookObject");
|
|
1790
|
+
function isPluginHook(value) {
|
|
1791
|
+
return isPluginHookFunction(value) || isPluginHookObject(value);
|
|
1792
|
+
}
|
|
1793
|
+
__name(isPluginHook, "isPluginHook");
|
|
1794
|
+
function getHookHandler(pluginHook) {
|
|
1795
|
+
return isFunction(pluginHook) ? pluginHook : pluginHook.handler;
|
|
1796
|
+
}
|
|
1797
|
+
__name(getHookHandler, "getHookHandler");
|
|
1798
|
+
function isHookExternal(hook) {
|
|
1799
|
+
return hook.startsWith("vite:") || hook.startsWith("esbuild:") || hook.startsWith("rolldown:") || hook.startsWith("rollup:") || hook.startsWith("webpack:") || hook.startsWith("rspack:") || hook.startsWith("farm:");
|
|
1800
|
+
}
|
|
1801
|
+
__name(isHookExternal, "isHookExternal");
|
|
1802
|
+
function checkDedupe(plugin, plugins) {
|
|
1803
|
+
return plugin.dedupe === false || plugins.some((p) => p.dedupe !== false && (isFunction(p.dedupe) && p.dedupe(plugin) || p.name === plugin.name));
|
|
1804
|
+
}
|
|
1805
|
+
__name(checkDedupe, "checkDedupe");
|
|
1806
|
+
function addPluginHook(context, plugin, pluginHook, hooksList) {
|
|
1807
|
+
if (!checkDedupe(plugin, hooksList.map((hook) => hook.plugin))) {
|
|
1808
|
+
hooksList.push(isFunction(pluginHook) ? {
|
|
1809
|
+
plugin,
|
|
1810
|
+
handler: getHookHandler(pluginHook).bind(context)
|
|
1811
|
+
} : {
|
|
1812
|
+
plugin,
|
|
1813
|
+
...pluginHook,
|
|
1814
|
+
handler: getHookHandler(pluginHook).bind(context)
|
|
1815
|
+
});
|
|
1816
|
+
}
|
|
1817
|
+
}
|
|
1818
|
+
__name(addPluginHook, "addPluginHook");
|
|
1819
|
+
function resolveOptions(options) {
|
|
1820
|
+
return defu2(options, {
|
|
1821
|
+
interopDefault: true,
|
|
1822
|
+
fsCache: options.mode !== "development" ? joinPaths$1(options.cacheDir, "jiti") : false,
|
|
1823
|
+
moduleCache: options.mode !== "development"
|
|
1824
|
+
});
|
|
1825
|
+
}
|
|
1826
|
+
__name(resolveOptions, "resolveOptions");
|
|
1827
|
+
function createPluginResolver(options) {
|
|
1828
|
+
return createJiti(joinPaths$1(options.workspaceRoot, options.projectRoot), resolveOptions({
|
|
1829
|
+
...options
|
|
1830
|
+
}));
|
|
1831
|
+
}
|
|
1832
|
+
__name(createPluginResolver, "createPluginResolver");
|
|
1833
|
+
function createResolver(options) {
|
|
1834
|
+
const baseResolver = createJiti(joinPaths$1(options.workspaceRoot, options.projectRoot), resolveOptions(options));
|
|
1835
|
+
baseResolver.plugin = createPluginResolver(options);
|
|
1836
|
+
return baseResolver;
|
|
1544
1837
|
}
|
|
1545
|
-
__name(
|
|
1838
|
+
__name(createResolver, "createResolver");
|
|
1546
1839
|
|
|
1547
1840
|
// src/internal/contexts/context.ts
|
|
1548
1841
|
var configCache = /* @__PURE__ */ new WeakMap();
|
|
@@ -1657,7 +1950,7 @@ var PowerlinesContext = class _PowerlinesContext {
|
|
|
1657
1950
|
*/
|
|
1658
1951
|
get fs() {
|
|
1659
1952
|
if (!this.#fs) {
|
|
1660
|
-
this.#fs =
|
|
1953
|
+
this.#fs = VirtualFileSystem.createSync(this);
|
|
1661
1954
|
}
|
|
1662
1955
|
return this.#fs;
|
|
1663
1956
|
}
|
|
@@ -1684,9 +1977,7 @@ var PowerlinesContext = class _PowerlinesContext {
|
|
|
1684
1977
|
}),
|
|
1685
1978
|
configHash: murmurhash(this.config, {
|
|
1686
1979
|
maxLength: CACHE_HASH_LENGTH
|
|
1687
|
-
})
|
|
1688
|
-
builtinIdMap: {},
|
|
1689
|
-
virtualFiles: {}
|
|
1980
|
+
})
|
|
1690
1981
|
};
|
|
1691
1982
|
}
|
|
1692
1983
|
/**
|
|
@@ -1727,31 +2018,31 @@ var PowerlinesContext = class _PowerlinesContext {
|
|
|
1727
2018
|
* Get the path to the artifacts directory for the project
|
|
1728
2019
|
*/
|
|
1729
2020
|
get artifactsPath() {
|
|
1730
|
-
return joinPaths
|
|
2021
|
+
return joinPaths(this.workspaceConfig.workspaceRoot, this.config.projectRoot, this.config.output.artifactsFolder);
|
|
1731
2022
|
}
|
|
1732
2023
|
/**
|
|
1733
2024
|
* Get the path to the builtin modules used by the project
|
|
1734
2025
|
*/
|
|
1735
2026
|
get builtinsPath() {
|
|
1736
|
-
return joinPaths
|
|
2027
|
+
return joinPaths(this.artifactsPath, "builtins");
|
|
1737
2028
|
}
|
|
1738
2029
|
/**
|
|
1739
2030
|
* Get the path to the entry directory for the project
|
|
1740
2031
|
*/
|
|
1741
2032
|
get entryPath() {
|
|
1742
|
-
return joinPaths
|
|
2033
|
+
return joinPaths(this.artifactsPath, "entry");
|
|
1743
2034
|
}
|
|
1744
2035
|
/**
|
|
1745
2036
|
* Get the path to the data directory for the project
|
|
1746
2037
|
*/
|
|
1747
2038
|
get dataPath() {
|
|
1748
|
-
return joinPaths
|
|
2039
|
+
return joinPaths(this.envPaths.data, "projects", getPrefixedProjectRootHash(this.config.name, this.meta.projectRootHash));
|
|
1749
2040
|
}
|
|
1750
2041
|
/**
|
|
1751
2042
|
* Get the path to the cache directory for the project
|
|
1752
2043
|
*/
|
|
1753
2044
|
get cachePath() {
|
|
1754
|
-
return joinPaths
|
|
2045
|
+
return joinPaths(this.envPaths.cache, "projects", murmurhash({
|
|
1755
2046
|
checksum: this.#checksum,
|
|
1756
2047
|
config: this.meta.configHash
|
|
1757
2048
|
}, {
|
|
@@ -1762,7 +2053,7 @@ var PowerlinesContext = class _PowerlinesContext {
|
|
|
1762
2053
|
* Get the path to the generated declaration file for the project
|
|
1763
2054
|
*/
|
|
1764
2055
|
get dtsPath() {
|
|
1765
|
-
return this.config.output.dts ? appendPath(this.config.output.dts, this.workspaceConfig.workspaceRoot) : joinPaths
|
|
2056
|
+
return this.config.output.dts ? appendPath(this.config.output.dts, this.workspaceConfig.workspaceRoot) : joinPaths(this.workspaceConfig.workspaceRoot, this.config.projectRoot, "storm.d.ts");
|
|
1766
2057
|
}
|
|
1767
2058
|
/**
|
|
1768
2059
|
* Get the project root relative to the workspace root
|
|
@@ -1774,13 +2065,13 @@ var PowerlinesContext = class _PowerlinesContext {
|
|
|
1774
2065
|
* The builtin module id that exist in the Powerlines virtual file system
|
|
1775
2066
|
*/
|
|
1776
2067
|
get builtins() {
|
|
1777
|
-
return Object.values(this.fs.
|
|
2068
|
+
return Object.values(this.fs.metadata).filter((meta) => meta && meta.variant === "builtin").map((meta) => meta?.id).filter(Boolean);
|
|
1778
2069
|
}
|
|
1779
2070
|
/**
|
|
1780
|
-
* Get the
|
|
2071
|
+
* Get the builtin virtual files that exist in the Powerlines virtual file system
|
|
1781
2072
|
*/
|
|
1782
2073
|
async getBuiltins() {
|
|
1783
|
-
return Promise.all(Object.entries(this.fs.
|
|
2074
|
+
return Promise.all(Object.entries(this.fs.metadata).filter(([, meta]) => meta && meta.variant === "builtin").map(async ([path, meta]) => {
|
|
1784
2075
|
const code = await this.fs.readFile(path);
|
|
1785
2076
|
return {
|
|
1786
2077
|
...meta,
|
|
@@ -1800,7 +2091,7 @@ var PowerlinesContext = class _PowerlinesContext {
|
|
|
1800
2091
|
return this.fs.writeFile(isAbsolute(path) ? path : appendPath(path, this.entryPath), {
|
|
1801
2092
|
code,
|
|
1802
2093
|
variant: "entry"
|
|
1803
|
-
},
|
|
2094
|
+
}, defu2(options, {
|
|
1804
2095
|
mode: this.config.output.mode
|
|
1805
2096
|
}));
|
|
1806
2097
|
}
|
|
@@ -1813,11 +2104,11 @@ var PowerlinesContext = class _PowerlinesContext {
|
|
|
1813
2104
|
* @param options - Optional write file options
|
|
1814
2105
|
*/
|
|
1815
2106
|
async writeBuiltin(code, id, path, options = {}) {
|
|
1816
|
-
return this.fs.writeFile(path ? isAbsolute(path) ? path : joinPaths
|
|
2107
|
+
return this.fs.writeFile(path ? isAbsolute(path) ? path : joinPaths(this.builtinsPath, path) : appendPath(id, this.builtinsPath), {
|
|
1817
2108
|
id,
|
|
1818
2109
|
code,
|
|
1819
2110
|
variant: "builtin"
|
|
1820
|
-
},
|
|
2111
|
+
}, defu2(options, {
|
|
1821
2112
|
mode: this.config.output.mode
|
|
1822
2113
|
}));
|
|
1823
2114
|
}
|
|
@@ -1839,7 +2130,7 @@ var PowerlinesContext = class _PowerlinesContext {
|
|
|
1839
2130
|
options
|
|
1840
2131
|
});
|
|
1841
2132
|
}
|
|
1842
|
-
const result = await parseAsync(id, code,
|
|
2133
|
+
const result = await parseAsync(id, code, defu2(options ?? {}, {
|
|
1843
2134
|
lang: hasFileExtension(id) ? void 0 : "ts",
|
|
1844
2135
|
astType: hasFileExtension(id) ? void 0 : "ts",
|
|
1845
2136
|
sourceType: "module",
|
|
@@ -1877,7 +2168,7 @@ ${result.errors.map((error) => ` [${error.severity}] ${error.message}${error.co
|
|
|
1877
2168
|
}) {
|
|
1878
2169
|
this.config.inlineConfig = inlineConfig;
|
|
1879
2170
|
if (inlineConfig.command === "new") {
|
|
1880
|
-
const workspacePackageJsonPath = joinPaths
|
|
2171
|
+
const workspacePackageJsonPath = joinPaths(this.workspaceConfig.workspaceRoot, "package.json");
|
|
1881
2172
|
if (!existsSync(workspacePackageJsonPath)) {
|
|
1882
2173
|
throw new Error(`The workspace package.json file could not be found at ${workspacePackageJsonPath}`);
|
|
1883
2174
|
}
|
|
@@ -2000,11 +2291,11 @@ ${result.errors.map((error) => ` [${error.severity}] ${error.message}${error.co
|
|
|
2000
2291
|
this.resolver = result.resolver;
|
|
2001
2292
|
this.mergeUserConfig(result.userConfig.config, this.config.userConfig);
|
|
2002
2293
|
} else {
|
|
2003
|
-
const projectJsonPath = joinPaths
|
|
2294
|
+
const projectJsonPath = joinPaths(cacheKey.projectRoot, "project.json");
|
|
2004
2295
|
if (existsSync(projectJsonPath)) {
|
|
2005
2296
|
this.projectJson = await readJsonFile(projectJsonPath);
|
|
2006
2297
|
}
|
|
2007
|
-
const packageJsonPath = joinPaths
|
|
2298
|
+
const packageJsonPath = joinPaths(cacheKey.projectRoot, "package.json");
|
|
2008
2299
|
if (existsSync(packageJsonPath)) {
|
|
2009
2300
|
this.packageJson = await readJsonFile(packageJsonPath);
|
|
2010
2301
|
}
|
|
@@ -2027,7 +2318,7 @@ ${result.errors.map((error) => ` [${error.severity}] ${error.message}${error.co
|
|
|
2027
2318
|
});
|
|
2028
2319
|
}
|
|
2029
2320
|
if (isSetObject(config)) {
|
|
2030
|
-
this.resolvedConfig =
|
|
2321
|
+
this.resolvedConfig = defu2({
|
|
2031
2322
|
inlineConfig: this.config.inlineConfig,
|
|
2032
2323
|
userConfig: this.config.userConfig
|
|
2033
2324
|
}, options.isHighPriority ? this.#getConfigProps(config) : {}, {
|
|
@@ -2044,11 +2335,11 @@ ${result.errors.map((error) => ` [${error.severity}] ${error.message}${error.co
|
|
|
2044
2335
|
tsconfig: appendPath("tsconfig.json", cacheKey.projectRoot),
|
|
2045
2336
|
sourceRoot: this.projectJson?.sourceRoot || appendPath("src", cacheKey.projectRoot),
|
|
2046
2337
|
output: {
|
|
2047
|
-
outputPath: joinPaths
|
|
2338
|
+
outputPath: joinPaths("dist", cacheKey.projectRoot),
|
|
2048
2339
|
mode: "virtual",
|
|
2049
|
-
dts: joinPaths
|
|
2340
|
+
dts: joinPaths(cacheKey.projectRoot, `${config.framework ?? "powerlines"}.d.ts`),
|
|
2050
2341
|
builtinPrefix: config.framework ?? "powerlines",
|
|
2051
|
-
artifactsFolder: joinPaths
|
|
2342
|
+
artifactsFolder: joinPaths(cacheKey.projectRoot, `.${config.framework ?? "powerlines"}`),
|
|
2052
2343
|
assets: [
|
|
2053
2344
|
{
|
|
2054
2345
|
glob: "LICENSE"
|
|
@@ -2105,12 +2396,12 @@ ${result.errors.map((error) => ` [${error.severity}] ${error.message}${error.co
|
|
|
2105
2396
|
] : [
|
|
2106
2397
|
"esm"
|
|
2107
2398
|
])));
|
|
2108
|
-
this.config.output.outputPath ??= joinPaths
|
|
2399
|
+
this.config.output.outputPath ??= joinPaths("dist", this.config.projectRoot || ".");
|
|
2109
2400
|
this.config.output.assets = getUnique(this.config.output.assets.map((asset) => {
|
|
2110
2401
|
return {
|
|
2111
2402
|
glob: isSetObject(asset) ? asset.glob : asset,
|
|
2112
2403
|
input: isString(asset) || !asset.input || asset.input === "." || asset.input === "/" || asset.input === "./" ? this.workspaceConfig.workspaceRoot : appendPath(asset.input, this.workspaceConfig.workspaceRoot),
|
|
2113
|
-
output: appendPath(isSetObject(asset) && asset.output ? joinPaths
|
|
2404
|
+
output: appendPath(isSetObject(asset) && asset.output ? joinPaths(this.config.output.outputPath, replacePath(asset.output, this.config.output.outputPath)) : this.config.output.outputPath, this.workspaceConfig.workspaceRoot),
|
|
2114
2405
|
ignore: isSetObject(asset) && asset.ignore ? toArray(asset.ignore) : void 0
|
|
2115
2406
|
};
|
|
2116
2407
|
}));
|
|
@@ -2121,9 +2412,10 @@ ${result.errors.map((error) => ` [${error.severity}] ${error.message}${error.co
|
|
|
2121
2412
|
ret.push(plugin);
|
|
2122
2413
|
return ret;
|
|
2123
2414
|
}, []);
|
|
2415
|
+
this.#fs ??= await VirtualFileSystem.create(this);
|
|
2124
2416
|
}
|
|
2125
2417
|
mergeUserConfig(from = {}, into = this.config.userConfig ?? {}) {
|
|
2126
|
-
this.config.userConfig =
|
|
2418
|
+
this.config.userConfig = defu2({
|
|
2127
2419
|
entry: Array.isArray(from.entry) && from.entry.length > 0 ? from.entry : Array.isArray(into?.entry) && into.entry.length > 0 ? into.entry : []
|
|
2128
2420
|
}, omit(from ?? {}, [
|
|
2129
2421
|
"entry"
|
|
@@ -2488,7 +2780,7 @@ async function emitTypes(context, tsconfig, files) {
|
|
|
2488
2780
|
const emitResult = program.emit(void 0, (fileName, text, _, __, sourceFiles, _data) => {
|
|
2489
2781
|
const sourceFile = sourceFiles?.[0];
|
|
2490
2782
|
if (sourceFile?.fileName && !fileName.endsWith(".map")) {
|
|
2491
|
-
if (context.builtins.some((file) => file === sourceFile.fileName || context.fs.
|
|
2783
|
+
if (context.builtins.some((file) => file === sourceFile.fileName || context.fs.metadata[file]?.id && context.fs.metadata[file]?.id === sourceFile.fileName)) {
|
|
2492
2784
|
builtinModules += `
|
|
2493
2785
|
declare module "${context.fs.resolve(sourceFile.fileName)}" {
|
|
2494
2786
|
${text.trim().replace(/^\s*export\s*declare\s*/gm, "export ").replace(/^\s*declare\s*/gm, "")}
|
|
@@ -2587,8 +2879,8 @@ async function resolveTsconfigChanges(context) {
|
|
|
2587
2879
|
tsconfigJson.compilerOptions.emitDecoratorMetadata = true;
|
|
2588
2880
|
}
|
|
2589
2881
|
if (context.config.output.dts) {
|
|
2590
|
-
const dtsFilePath = context.config.output.dts ? context.config.output.dts.startsWith(context.workspaceConfig.workspaceRoot) ? context.config.output.dts : joinPaths(context.workspaceConfig.workspaceRoot, context.config.output.dts) : joinPaths(context.workspaceConfig.workspaceRoot, context.config.projectRoot, "storm.d.ts");
|
|
2591
|
-
const dtsRelativePath = joinPaths(relativePath(joinPaths(context.workspaceConfig.workspaceRoot, context.config.projectRoot), findFilePath(dtsFilePath)), findFileName(dtsFilePath));
|
|
2882
|
+
const dtsFilePath = context.config.output.dts ? context.config.output.dts.startsWith(context.workspaceConfig.workspaceRoot) ? context.config.output.dts : joinPaths$1(context.workspaceConfig.workspaceRoot, context.config.output.dts) : joinPaths$1(context.workspaceConfig.workspaceRoot, context.config.projectRoot, "storm.d.ts");
|
|
2883
|
+
const dtsRelativePath = joinPaths$1(relativePath(joinPaths$1(context.workspaceConfig.workspaceRoot, context.config.projectRoot), findFilePath(dtsFilePath)), findFileName(dtsFilePath));
|
|
2592
2884
|
if (!tsconfigJson.include?.some((filePattern) => isIncludeMatchFound(filePattern, [
|
|
2593
2885
|
dtsFilePath,
|
|
2594
2886
|
dtsRelativePath,
|
|
@@ -2807,10 +3099,13 @@ ${context.entry.map((entry) => `- ${entry.input.file || entry.file}${entry.outpu
|
|
|
2807
3099
|
await resolveTsconfig(context);
|
|
2808
3100
|
await installDependencies(context);
|
|
2809
3101
|
await this.callPostHook(context, "configResolved");
|
|
3102
|
+
if (context.config.build.polyfill) {
|
|
3103
|
+
context.config.build.polyfill = context.config.build.polyfill.map((polyfill) => replacePathTokens(context, polyfill));
|
|
3104
|
+
}
|
|
2810
3105
|
context.log(LogLevelLabel.TRACE, `Powerlines configuration has been resolved:
|
|
2811
3106
|
|
|
2812
3107
|
${formatLogMessage(context.config)}`);
|
|
2813
|
-
context.fs[
|
|
3108
|
+
context.fs[__VFS_PATCH__]();
|
|
2814
3109
|
await writeMetaFile(context);
|
|
2815
3110
|
context.persistedMeta = context.meta;
|
|
2816
3111
|
if (!existsSync(context.cachePath)) {
|
|
@@ -2867,10 +3162,10 @@ ${formatLogMessage(context.config)}`);
|
|
|
2867
3162
|
}
|
|
2868
3163
|
return ret;
|
|
2869
3164
|
}, [
|
|
2870
|
-
joinPaths(typescriptPath, "lib", "lib.esnext.full.d.ts")
|
|
3165
|
+
joinPaths$1(typescriptPath, "lib", "lib.esnext.full.d.ts")
|
|
2871
3166
|
]);
|
|
2872
3167
|
context.log(LogLevelLabel.TRACE, "Parsing TypeScript configuration for the Powerlines project.");
|
|
2873
|
-
const resolvedTsconfig = getParsedTypeScriptConfig(context.workspaceConfig.workspaceRoot, context.config.projectRoot, context.tsconfig.tsconfigFilePath,
|
|
3168
|
+
const resolvedTsconfig = getParsedTypeScriptConfig(context.workspaceConfig.workspaceRoot, context.config.projectRoot, context.tsconfig.tsconfigFilePath, defu2({
|
|
2874
3169
|
compilerOptions: {
|
|
2875
3170
|
strict: false,
|
|
2876
3171
|
noEmit: false,
|
|
@@ -2885,7 +3180,7 @@ ${formatLogMessage(context.config)}`);
|
|
|
2885
3180
|
],
|
|
2886
3181
|
include: files
|
|
2887
3182
|
}, context.config.tsconfigRaw ?? {}));
|
|
2888
|
-
resolvedTsconfig.options.configFilePath = joinPaths(context.workspaceConfig.workspaceRoot, context.tsconfig.tsconfigFilePath);
|
|
3183
|
+
resolvedTsconfig.options.configFilePath = joinPaths$1(context.workspaceConfig.workspaceRoot, context.tsconfig.tsconfigFilePath);
|
|
2889
3184
|
resolvedTsconfig.options.pathsBasePath = context.workspaceConfig.workspaceRoot;
|
|
2890
3185
|
resolvedTsconfig.options.suppressOutputPathCheck = true;
|
|
2891
3186
|
let generatedTypes = await emitTypes(context, resolvedTsconfig, files);
|
|
@@ -2961,26 +3256,26 @@ ${formatTypes(generatedTypes)}
|
|
|
2961
3256
|
await this.#executeEnvironments(async (context) => {
|
|
2962
3257
|
context.log(LogLevelLabel.TRACE, `Initializing the processing options for the Powerlines project.`);
|
|
2963
3258
|
await this.callPreHook(context, "new");
|
|
2964
|
-
const files = await listFiles(joinPaths(context.powerlinesPath, "files/common/**/*.hbs"));
|
|
3259
|
+
const files = await listFiles(joinPaths$1(context.powerlinesPath, "files/common/**/*.hbs"));
|
|
2965
3260
|
for (const file of files) {
|
|
2966
3261
|
context.log(LogLevelLabel.TRACE, `Adding template file: ${file}`);
|
|
2967
3262
|
const template = Handlebars.compile(file);
|
|
2968
|
-
await writeFile(context.log, joinPaths(context.config.projectRoot, file.replace(".hbs", "")), template(context));
|
|
3263
|
+
await writeFile(context.log, joinPaths$1(context.config.projectRoot, file.replace(".hbs", "")), template(context));
|
|
2969
3264
|
}
|
|
2970
3265
|
await this.callNormalHook(context, "new");
|
|
2971
3266
|
if (context.config.projectType === "application") {
|
|
2972
|
-
const files2 = await listFiles(joinPaths(context.powerlinesPath, "files/application/**/*.hbs"));
|
|
3267
|
+
const files2 = await listFiles(joinPaths$1(context.powerlinesPath, "files/application/**/*.hbs"));
|
|
2973
3268
|
for (const file of files2) {
|
|
2974
3269
|
context.log(LogLevelLabel.TRACE, `Adding application template file: ${file}`);
|
|
2975
3270
|
const template = Handlebars.compile(file);
|
|
2976
|
-
await writeFile(context.log, joinPaths(context.config.projectRoot, file.replace(".hbs", "")), template(context));
|
|
3271
|
+
await writeFile(context.log, joinPaths$1(context.config.projectRoot, file.replace(".hbs", "")), template(context));
|
|
2977
3272
|
}
|
|
2978
3273
|
} else {
|
|
2979
|
-
const files2 = await listFiles(joinPaths(context.powerlinesPath, "files/library/**/*.hbs"));
|
|
3274
|
+
const files2 = await listFiles(joinPaths$1(context.powerlinesPath, "files/library/**/*.hbs"));
|
|
2980
3275
|
for (const file of files2) {
|
|
2981
3276
|
context.log(LogLevelLabel.TRACE, `Adding library template file: ${file}`);
|
|
2982
3277
|
const template = Handlebars.compile(file);
|
|
2983
|
-
await writeFile(context.log, joinPaths(context.config.projectRoot, file.replace(".hbs", "")), template(context));
|
|
3278
|
+
await writeFile(context.log, joinPaths$1(context.config.projectRoot, file.replace(".hbs", "")), template(context));
|
|
2984
3279
|
}
|
|
2985
3280
|
}
|
|
2986
3281
|
await this.callPostHook(context, "new");
|
|
@@ -3044,7 +3339,7 @@ ${formatTypes(generatedTypes)}
|
|
|
3044
3339
|
await this.callPreHook(context, "build");
|
|
3045
3340
|
await this.callNormalHook(context, "build");
|
|
3046
3341
|
await Promise.all(context.config.output.assets.map(async (asset) => {
|
|
3047
|
-
context.log(LogLevelLabel.DEBUG, `Copying asset(s): ${chalk4.redBright(context.workspaceConfig.workspaceRoot === asset.input ? asset.glob : joinPaths(replacePath(asset.input, context.workspaceConfig.workspaceRoot), asset.glob))} -> ${chalk4.greenBright(joinPaths(replacePath(asset.output, context.workspaceConfig.workspaceRoot), asset.glob))} ${Array.isArray(asset.ignore) && asset.ignore.length > 0 ? ` (ignoring: ${asset.ignore.map((i) => chalk4.yellowBright(i)).join(", ")})` : ""}`);
|
|
3342
|
+
context.log(LogLevelLabel.DEBUG, `Copying asset(s): ${chalk4.redBright(context.workspaceConfig.workspaceRoot === asset.input ? asset.glob : joinPaths$1(replacePath(asset.input, context.workspaceConfig.workspaceRoot), asset.glob))} -> ${chalk4.greenBright(joinPaths$1(replacePath(asset.output, context.workspaceConfig.workspaceRoot), asset.glob))} ${Array.isArray(asset.ignore) && asset.ignore.length > 0 ? ` (ignoring: ${asset.ignore.map((i) => chalk4.yellowBright(i)).join(", ")})` : ""}`);
|
|
3048
3343
|
await copyFiles(asset, asset.output);
|
|
3049
3344
|
}));
|
|
3050
3345
|
await this.callPostHook(context, "build");
|
|
@@ -3072,22 +3367,22 @@ ${formatTypes(generatedTypes)}
|
|
|
3072
3367
|
this.#context.log(LogLevelLabel.TRACE, "Powerlines documentation generation completed");
|
|
3073
3368
|
}
|
|
3074
3369
|
/**
|
|
3075
|
-
*
|
|
3370
|
+
* Deploy the project source code
|
|
3076
3371
|
*
|
|
3077
3372
|
* @remarks
|
|
3078
|
-
* This method will prepare and build the Powerlines project, generating the necessary artifacts for
|
|
3373
|
+
* This method will prepare and build the Powerlines project, generating the necessary artifacts for the deployment.
|
|
3079
3374
|
*
|
|
3080
|
-
* @param inlineConfig - The inline configuration for the
|
|
3375
|
+
* @param inlineConfig - The inline configuration for the deploy command
|
|
3081
3376
|
*/
|
|
3082
|
-
async
|
|
3083
|
-
command: "
|
|
3377
|
+
async deploy(inlineConfig = {
|
|
3378
|
+
command: "deploy"
|
|
3084
3379
|
}) {
|
|
3085
|
-
this.context.log(LogLevelLabel.INFO, "\u{1F4E6}
|
|
3380
|
+
this.context.log(LogLevelLabel.INFO, "\u{1F4E6} Deploying the Powerlines project");
|
|
3086
3381
|
await this.prepare(inlineConfig);
|
|
3087
3382
|
await this.#executeEnvironments(async (context) => {
|
|
3088
|
-
await this.callHook(context, "
|
|
3383
|
+
await this.callHook(context, "deploy");
|
|
3089
3384
|
});
|
|
3090
|
-
this.context.log(LogLevelLabel.TRACE, "Powerlines
|
|
3385
|
+
this.context.log(LogLevelLabel.TRACE, "Powerlines deploy completed");
|
|
3091
3386
|
}
|
|
3092
3387
|
/**
|
|
3093
3388
|
* Finalization process
|
|
@@ -3102,6 +3397,7 @@ ${formatTypes(generatedTypes)}
|
|
|
3102
3397
|
await this.#executeEnvironments(async (context) => {
|
|
3103
3398
|
await this.callHook(context, "finalize");
|
|
3104
3399
|
context.fs[__VFS_REVERT__]();
|
|
3400
|
+
await context.fs.dispose();
|
|
3105
3401
|
});
|
|
3106
3402
|
this.context.log(LogLevelLabel.TRACE, "Powerlines finalize execution completed");
|
|
3107
3403
|
}
|
|
@@ -3332,7 +3628,7 @@ ${formatTypes(generatedTypes)}
|
|
|
3332
3628
|
}
|
|
3333
3629
|
}
|
|
3334
3630
|
try {
|
|
3335
|
-
const module = await this.context.resolver.plugin.import(this.context.resolver.plugin.esmResolve(joinPaths(pluginPath, "plugin")));
|
|
3631
|
+
const module = await this.context.resolver.plugin.import(this.context.resolver.plugin.esmResolve(joinPaths$1(pluginPath, "plugin")));
|
|
3336
3632
|
const result = module.plugin ?? module.default;
|
|
3337
3633
|
if (!result) {
|
|
3338
3634
|
throw new Error(`The plugin package "${pluginPath}" does not export a valid module.`);
|
|
@@ -3480,4 +3776,4 @@ function createUnpluginFactory(variant, decorate) {
|
|
|
3480
3776
|
}
|
|
3481
3777
|
__name(createUnpluginFactory, "createUnpluginFactory");
|
|
3482
3778
|
|
|
3483
|
-
export { createUnpluginFactory };
|
|
3779
|
+
export { VirtualFileSystem, createUnpluginFactory };
|