vxrn 0.1.84 → 0.1.85
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/LICENSE +22 -0
- package/dist/cjs/exports/build.js +4 -3
- package/dist/cjs/exports/build.js.map +1 -1
- package/dist/cjs/exports/build.native.js +6 -3
- package/dist/cjs/exports/build.native.js.map +1 -1
- package/dist/cjs/utils/findDepsToOptimize.js +167 -0
- package/dist/cjs/utils/findDepsToOptimize.js.map +6 -0
- package/dist/cjs/utils/findDepsToOptimize.native.js +564 -0
- package/dist/cjs/utils/findDepsToOptimize.native.js.map +6 -0
- package/dist/cjs/utils/getBaseViteConfig.js +2 -0
- package/dist/cjs/utils/getBaseViteConfig.js.map +1 -1
- package/dist/cjs/utils/getBaseViteConfig.native.js +2 -0
- package/dist/cjs/utils/getBaseViteConfig.native.js.map +1 -1
- package/dist/esm/exports/build.js +4 -3
- package/dist/esm/exports/build.js.map +1 -1
- package/dist/esm/exports/build.mjs +4 -3
- package/dist/esm/exports/build.native.js +6 -3
- package/dist/esm/exports/build.native.js.map +1 -1
- package/dist/esm/utils/findDepsToOptimize.js +145 -0
- package/dist/esm/utils/findDepsToOptimize.js.map +6 -0
- package/dist/esm/utils/findDepsToOptimize.mjs +130 -0
- package/dist/esm/utils/findDepsToOptimize.native.js +530 -0
- package/dist/esm/utils/findDepsToOptimize.native.js.map +6 -0
- package/dist/esm/utils/getBaseViteConfig.js +2 -0
- package/dist/esm/utils/getBaseViteConfig.js.map +1 -1
- package/dist/esm/utils/getBaseViteConfig.mjs +1 -1
- package/dist/esm/utils/getBaseViteConfig.native.js +2 -0
- package/dist/esm/utils/getBaseViteConfig.native.js.map +1 -1
- package/package.json +5 -5
- package/src/exports/build.ts +3 -2
- package/src/types.ts +2 -3
- package/src/utils/findDepsToOptimize.ts +293 -0
- package/src/utils/getBaseViteConfig.ts +2 -0
- package/types/types.d.ts +2 -3
- package/types/utils/findDepsToOptimize.d.ts +19 -0
- package/types/utils/getOptionsFilled.d.ts +1 -0
|
@@ -71,7 +71,7 @@ const disableOptimizationConfig = {
|
|
|
71
71
|
outDir: "dist/client",
|
|
72
72
|
manifest: !0,
|
|
73
73
|
rollupOptions: {
|
|
74
|
-
input: ["
|
|
74
|
+
input: ["virtual:vxs-entry"]
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
});
|
|
@@ -99,10 +99,11 @@ const disableOptimizationConfig = {
|
|
|
99
99
|
build: {
|
|
100
100
|
// we want one big file of css
|
|
101
101
|
cssCodeSplit: !1,
|
|
102
|
-
ssr:
|
|
102
|
+
ssr: !0,
|
|
103
103
|
outDir: "dist/server",
|
|
104
104
|
rollupOptions: {
|
|
105
|
-
external: []
|
|
105
|
+
external: [],
|
|
106
|
+
input: ["virtual:vxs-entry"]
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
109
|
});
|
|
@@ -252,7 +252,7 @@ var disableOptimizationConfig = {
|
|
|
252
252
|
manifest: !0,
|
|
253
253
|
rollupOptions: {
|
|
254
254
|
input: [
|
|
255
|
-
"
|
|
255
|
+
"virtual:vxs-entry"
|
|
256
256
|
]
|
|
257
257
|
}
|
|
258
258
|
}
|
|
@@ -281,10 +281,13 @@ var disableOptimizationConfig = {
|
|
|
281
281
|
build: {
|
|
282
282
|
// we want one big file of css
|
|
283
283
|
cssCodeSplit: !1,
|
|
284
|
-
ssr:
|
|
284
|
+
ssr: !0,
|
|
285
285
|
outDir: "dist/server",
|
|
286
286
|
rollupOptions: {
|
|
287
|
-
external: []
|
|
287
|
+
external: [],
|
|
288
|
+
input: [
|
|
289
|
+
"virtual:vxs-entry"
|
|
290
|
+
]
|
|
288
291
|
}
|
|
289
292
|
}
|
|
290
293
|
}), [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/exports/Users/n8/vxrn/packages/vxrn/src/exports/build.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAOA,aAAa;AACpB,SAASC,UAAU;AAEnB,SAASC,aAAaC,SAASC,iBAA+C;AAC9E,SAASC,gBAAgB;AAEzB,SAASC,yBAAyB;AAClC,SAASC,uBAAuB;AAChC,SAASC,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjC,IAAQC,aAAeT,QAAfS;AAERC,MAAMC,kBAAkBC,OAAOC;AAE/B,IAAMC,4BAA4B;EAChCC,cAAc;IACZC,gBAAgB;MACdC,QAAQ;IACV;EACF;EAEAd,OAAO;IACLc,QAAQ;IACRC,eAAe;MACbC,WAAW;MACXC,QAAQ;QACNC,uBAAuB;MACzB;IACF;EACF;AACF,GAEalB,QAAAA,WAAAA;aAAQ,oBAAA,SAAOmB,WAAAA;QAAuBC,WAC3CC,SAqBET,cAEJU,gBAWEC,wBAcFC,cAGEC,mBA6BIR,QAMNS,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["FSExtra", "rm", "mergeConfig", "build", "viteBuild", "analyzer", "getBaseViteConfig", "getOptimizeDeps", "getOptionsFilled", "existsSync", "Error", "stackTraceLimit", "Number", "POSITIVE_INFINITY", "disableOptimizationConfig", "optimizeDeps", "esbuildOptions", "minify", "rollupOptions", "treeshake", "output", "minifyInternalExports", "optionsIn", "buildArgs", "options", "webBuildConfig", "excludeAPIRoutesPlugin", "clientOutput", "clientBuildConfig", "serverBuildConfig", "_ref", "serverOutput", "clientManifest", "Promise", "all", "recursive", "force", "_state", "process", "env", "NODE_ENV", "mode", "root", "clearScreen", "enforce", "name", "transform", "code", "id", "test", "webConfig", "step", "plugins", "analyze", "analyzerMode", "fileName", "ssrManifest", "outDir", "manifest", "input", "VXRN_DISABLE_PROD_OPTIMIZATION", "console", "info", "define", "ssr", "noExternal", "include", "cssCodeSplit", "external", "afterBuild", "readJSON"]
|
|
6
6
|
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import fsSync from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
async function crawlFrameworkPkgs(options) {
|
|
5
|
+
const pkgJsonPath = await findClosestPkgJsonPath(options.root);
|
|
6
|
+
if (!pkgJsonPath) {
|
|
7
|
+
if (typeof Deno < "u")
|
|
8
|
+
return {
|
|
9
|
+
optimizeDeps: { include: [], exclude: [] },
|
|
10
|
+
ssr: { noExternal: [], external: [] }
|
|
11
|
+
};
|
|
12
|
+
throw new Error(`Cannot find package.json from ${options.root}`);
|
|
13
|
+
}
|
|
14
|
+
const pkgJson = await readJson(pkgJsonPath).catch((e) => {
|
|
15
|
+
throw new Error(`Unable to read ${pkgJsonPath}`, { cause: e });
|
|
16
|
+
});
|
|
17
|
+
let optimizeDepsInclude = [], optimizeDepsExclude = [], ssrNoExternal = [], ssrExternal = [];
|
|
18
|
+
if (await crawl(pkgJsonPath, pkgJson), options.viteUserConfig) {
|
|
19
|
+
const _optimizeDepsExclude = options.viteUserConfig?.optimizeDeps?.exclude;
|
|
20
|
+
_optimizeDepsExclude && (optimizeDepsInclude = optimizeDepsInclude.filter(
|
|
21
|
+
(dep) => !isDepExcluded(dep, _optimizeDepsExclude)
|
|
22
|
+
));
|
|
23
|
+
const _optimizeDepsInclude = options.viteUserConfig?.optimizeDeps?.include;
|
|
24
|
+
_optimizeDepsInclude && (optimizeDepsExclude = optimizeDepsExclude.filter(
|
|
25
|
+
(dep) => !isDepIncluded(dep, _optimizeDepsInclude)
|
|
26
|
+
));
|
|
27
|
+
const _ssrExternal = options.viteUserConfig?.ssr?.external;
|
|
28
|
+
_ssrExternal && (ssrNoExternal = ssrNoExternal.filter((dep) => !isDepExternaled(dep, _ssrExternal)));
|
|
29
|
+
const _ssrNoExternal = options.viteUserConfig?.ssr?.noExternal;
|
|
30
|
+
_ssrNoExternal && (ssrExternal = ssrExternal.filter((dep) => !isDepNoExternaled(dep, _ssrNoExternal)));
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
optimizeDeps: {
|
|
34
|
+
include: optimizeDepsInclude,
|
|
35
|
+
exclude: optimizeDepsExclude
|
|
36
|
+
},
|
|
37
|
+
ssr: {
|
|
38
|
+
noExternal: ssrNoExternal,
|
|
39
|
+
external: ssrExternal
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
async function crawl(pkgJsonPath2, pkgJson2, parentDepNames = []) {
|
|
43
|
+
const isRoot = parentDepNames.length === 0;
|
|
44
|
+
let deps = [
|
|
45
|
+
...Object.keys(pkgJson2.dependencies || {}),
|
|
46
|
+
...isRoot ? Object.keys(pkgJson2.devDependencies || {}) : []
|
|
47
|
+
];
|
|
48
|
+
deps = deps.filter((dep) => {
|
|
49
|
+
if (parentDepNames.includes(dep))
|
|
50
|
+
return !1;
|
|
51
|
+
const isFrameworkPkg = options.isFrameworkPkgByName?.(dep), isSemiFrameworkPkg = options.isSemiFrameworkPkgByName?.(dep);
|
|
52
|
+
return isFrameworkPkg ? (optimizeDepsExclude.push(dep), ssrNoExternal.push(dep)) : isSemiFrameworkPkg && ssrNoExternal.push(dep), !(isFrameworkPkg === !1 || isSemiFrameworkPkg === !1);
|
|
53
|
+
});
|
|
54
|
+
const promises = deps.map(async (dep) => {
|
|
55
|
+
const depPkgJsonPath = await findDepPkgJsonPath(dep, pkgJsonPath2);
|
|
56
|
+
if (!depPkgJsonPath) return;
|
|
57
|
+
const depPkgJson = await readJson(depPkgJsonPath).catch(() => {
|
|
58
|
+
});
|
|
59
|
+
if (!depPkgJson) return;
|
|
60
|
+
if (ssrNoExternal.includes(dep))
|
|
61
|
+
return crawl(depPkgJsonPath, depPkgJson, parentDepNames.concat(dep));
|
|
62
|
+
const isFrameworkPkg = options.isFrameworkPkgByJson?.(depPkgJson), isSemiFrameworkPkg = options.isSemiFrameworkPkgByJson?.(depPkgJson);
|
|
63
|
+
if (isFrameworkPkg || isSemiFrameworkPkg)
|
|
64
|
+
return isFrameworkPkg ? (optimizeDepsExclude.push(dep), ssrNoExternal.push(dep)) : isSemiFrameworkPkg && ssrNoExternal.push(dep), crawl(depPkgJsonPath, depPkgJson, parentDepNames.concat(dep));
|
|
65
|
+
isRoot || (await pkgNeedsOptimization(depPkgJson, depPkgJsonPath) && optimizeDepsInclude.push(parentDepNames.concat(dep).join(" > ")), !options.isBuild && !ssrExternal.includes(dep) && ssrExternal.push(dep));
|
|
66
|
+
});
|
|
67
|
+
await Promise.all(promises);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function findDepPkgJsonPath(dep, parent) {
|
|
71
|
+
let root = parent;
|
|
72
|
+
for (; root; ) {
|
|
73
|
+
const pkg = path.join(root, "node_modules", dep, "package.json");
|
|
74
|
+
try {
|
|
75
|
+
return await fs.access(pkg), fsSync.realpathSync(pkg);
|
|
76
|
+
} catch {
|
|
77
|
+
}
|
|
78
|
+
const nextRoot = path.dirname(root);
|
|
79
|
+
if (nextRoot === root) break;
|
|
80
|
+
root = nextRoot;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function findClosestPkgJsonPath(dir, predicate) {
|
|
84
|
+
for (dir.endsWith("package.json") && (dir = path.dirname(dir)); dir; ) {
|
|
85
|
+
const pkg = path.join(dir, "package.json");
|
|
86
|
+
try {
|
|
87
|
+
if ((await fs.stat(pkg)).isFile() && (!predicate || await predicate(pkg)))
|
|
88
|
+
return pkg;
|
|
89
|
+
} catch {
|
|
90
|
+
}
|
|
91
|
+
const nextDir = path.dirname(dir);
|
|
92
|
+
if (nextDir === dir) break;
|
|
93
|
+
dir = nextDir;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function pkgNeedsOptimization(pkgJson, pkgJsonPath) {
|
|
97
|
+
if (pkgJson.module || pkgJson.exports) return !1;
|
|
98
|
+
if (pkgJson.main) {
|
|
99
|
+
const entryExt = path.extname(pkgJson.main);
|
|
100
|
+
return !entryExt || entryExt === ".js" || entryExt === ".cjs";
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
return await fs.access(path.join(path.dirname(pkgJsonPath), "index.js")), !0;
|
|
104
|
+
} catch {
|
|
105
|
+
return !1;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async function readJson(findDepPkgJsonPath2) {
|
|
109
|
+
return JSON.parse(await fs.readFile(findDepPkgJsonPath2, "utf8"));
|
|
110
|
+
}
|
|
111
|
+
function isDepIncluded(dep, optimizeDepsInclude) {
|
|
112
|
+
return optimizeDepsInclude.some((id) => parseIncludeStr(id) === dep);
|
|
113
|
+
}
|
|
114
|
+
function isDepExcluded(dep, optimizeDepsExclude) {
|
|
115
|
+
return dep = parseIncludeStr(dep), optimizeDepsExclude.some((id) => id === dep || dep.startsWith(`${id}/`));
|
|
116
|
+
}
|
|
117
|
+
function isDepNoExternaled(dep, ssrNoExternal) {
|
|
118
|
+
return ssrNoExternal === !0 ? !0 : isMatch(dep, ssrNoExternal);
|
|
119
|
+
}
|
|
120
|
+
function isDepExternaled(dep, ssrExternal) {
|
|
121
|
+
return ssrExternal.includes(dep);
|
|
122
|
+
}
|
|
123
|
+
function parseIncludeStr(raw) {
|
|
124
|
+
const lastArrow = raw.lastIndexOf(">");
|
|
125
|
+
return lastArrow === -1 ? raw : raw.slice(lastArrow + 1).trim();
|
|
126
|
+
}
|
|
127
|
+
function isMatch(target, pattern) {
|
|
128
|
+
if (Array.isArray(pattern))
|
|
129
|
+
return pattern.some((p) => isMatch(target, p));
|
|
130
|
+
if (typeof pattern == "string")
|
|
131
|
+
return target === pattern;
|
|
132
|
+
if (pattern instanceof RegExp)
|
|
133
|
+
return pattern.test(target);
|
|
134
|
+
}
|
|
135
|
+
export {
|
|
136
|
+
crawlFrameworkPkgs,
|
|
137
|
+
findClosestPkgJsonPath,
|
|
138
|
+
findDepPkgJsonPath,
|
|
139
|
+
isDepExcluded,
|
|
140
|
+
isDepExternaled,
|
|
141
|
+
isDepIncluded,
|
|
142
|
+
isDepNoExternaled,
|
|
143
|
+
pkgNeedsOptimization
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=findDepsToOptimize.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/utils/findDepsToOptimize.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["pkgJsonPath", "pkgJson", "findDepPkgJsonPath"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import fsSync from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
async function crawlFrameworkPkgs(options) {
|
|
5
|
+
const pkgJsonPath = await findClosestPkgJsonPath(options.root);
|
|
6
|
+
if (!pkgJsonPath) {
|
|
7
|
+
if (typeof Deno < "u") return {
|
|
8
|
+
optimizeDeps: {
|
|
9
|
+
include: [],
|
|
10
|
+
exclude: []
|
|
11
|
+
},
|
|
12
|
+
ssr: {
|
|
13
|
+
noExternal: [],
|
|
14
|
+
external: []
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
throw new Error(`Cannot find package.json from ${options.root}`);
|
|
18
|
+
}
|
|
19
|
+
const pkgJson = await readJson(pkgJsonPath).catch(e => {
|
|
20
|
+
throw new Error(`Unable to read ${pkgJsonPath}`, {
|
|
21
|
+
cause: e
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
let optimizeDepsInclude = [],
|
|
25
|
+
optimizeDepsExclude = [],
|
|
26
|
+
ssrNoExternal = [],
|
|
27
|
+
ssrExternal = [];
|
|
28
|
+
if (await crawl(pkgJsonPath, pkgJson), options.viteUserConfig) {
|
|
29
|
+
const _optimizeDepsExclude = options.viteUserConfig?.optimizeDeps?.exclude;
|
|
30
|
+
_optimizeDepsExclude && (optimizeDepsInclude = optimizeDepsInclude.filter(dep => !isDepExcluded(dep, _optimizeDepsExclude)));
|
|
31
|
+
const _optimizeDepsInclude = options.viteUserConfig?.optimizeDeps?.include;
|
|
32
|
+
_optimizeDepsInclude && (optimizeDepsExclude = optimizeDepsExclude.filter(dep => !isDepIncluded(dep, _optimizeDepsInclude)));
|
|
33
|
+
const _ssrExternal = options.viteUserConfig?.ssr?.external;
|
|
34
|
+
_ssrExternal && (ssrNoExternal = ssrNoExternal.filter(dep => !isDepExternaled(dep, _ssrExternal)));
|
|
35
|
+
const _ssrNoExternal = options.viteUserConfig?.ssr?.noExternal;
|
|
36
|
+
_ssrNoExternal && (ssrExternal = ssrExternal.filter(dep => !isDepNoExternaled(dep, _ssrNoExternal)));
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
optimizeDeps: {
|
|
40
|
+
include: optimizeDepsInclude,
|
|
41
|
+
exclude: optimizeDepsExclude
|
|
42
|
+
},
|
|
43
|
+
ssr: {
|
|
44
|
+
noExternal: ssrNoExternal,
|
|
45
|
+
external: ssrExternal
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
async function crawl(pkgJsonPath2, pkgJson2, parentDepNames = []) {
|
|
49
|
+
const isRoot = parentDepNames.length === 0;
|
|
50
|
+
let deps = [...Object.keys(pkgJson2.dependencies || {}), ...(isRoot ? Object.keys(pkgJson2.devDependencies || {}) : [])];
|
|
51
|
+
deps = deps.filter(dep => {
|
|
52
|
+
if (parentDepNames.includes(dep)) return !1;
|
|
53
|
+
const isFrameworkPkg = options.isFrameworkPkgByName?.(dep),
|
|
54
|
+
isSemiFrameworkPkg = options.isSemiFrameworkPkgByName?.(dep);
|
|
55
|
+
return isFrameworkPkg ? (optimizeDepsExclude.push(dep), ssrNoExternal.push(dep)) : isSemiFrameworkPkg && ssrNoExternal.push(dep), !(isFrameworkPkg === !1 || isSemiFrameworkPkg === !1);
|
|
56
|
+
});
|
|
57
|
+
const promises = deps.map(async dep => {
|
|
58
|
+
const depPkgJsonPath = await findDepPkgJsonPath(dep, pkgJsonPath2);
|
|
59
|
+
if (!depPkgJsonPath) return;
|
|
60
|
+
const depPkgJson = await readJson(depPkgJsonPath).catch(() => {});
|
|
61
|
+
if (!depPkgJson) return;
|
|
62
|
+
if (ssrNoExternal.includes(dep)) return crawl(depPkgJsonPath, depPkgJson, parentDepNames.concat(dep));
|
|
63
|
+
const isFrameworkPkg = options.isFrameworkPkgByJson?.(depPkgJson),
|
|
64
|
+
isSemiFrameworkPkg = options.isSemiFrameworkPkgByJson?.(depPkgJson);
|
|
65
|
+
if (isFrameworkPkg || isSemiFrameworkPkg) return isFrameworkPkg ? (optimizeDepsExclude.push(dep), ssrNoExternal.push(dep)) : isSemiFrameworkPkg && ssrNoExternal.push(dep), crawl(depPkgJsonPath, depPkgJson, parentDepNames.concat(dep));
|
|
66
|
+
isRoot || ((await pkgNeedsOptimization(depPkgJson, depPkgJsonPath)) && optimizeDepsInclude.push(parentDepNames.concat(dep).join(" > ")), !options.isBuild && !ssrExternal.includes(dep) && ssrExternal.push(dep));
|
|
67
|
+
});
|
|
68
|
+
await Promise.all(promises);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function findDepPkgJsonPath(dep, parent) {
|
|
72
|
+
let root = parent;
|
|
73
|
+
for (; root;) {
|
|
74
|
+
const pkg = path.join(root, "node_modules", dep, "package.json");
|
|
75
|
+
try {
|
|
76
|
+
return await fs.access(pkg), fsSync.realpathSync(pkg);
|
|
77
|
+
} catch {}
|
|
78
|
+
const nextRoot = path.dirname(root);
|
|
79
|
+
if (nextRoot === root) break;
|
|
80
|
+
root = nextRoot;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function findClosestPkgJsonPath(dir, predicate) {
|
|
84
|
+
for (dir.endsWith("package.json") && (dir = path.dirname(dir)); dir;) {
|
|
85
|
+
const pkg = path.join(dir, "package.json");
|
|
86
|
+
try {
|
|
87
|
+
if ((await fs.stat(pkg)).isFile() && (!predicate || (await predicate(pkg)))) return pkg;
|
|
88
|
+
} catch {}
|
|
89
|
+
const nextDir = path.dirname(dir);
|
|
90
|
+
if (nextDir === dir) break;
|
|
91
|
+
dir = nextDir;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async function pkgNeedsOptimization(pkgJson, pkgJsonPath) {
|
|
95
|
+
if (pkgJson.module || pkgJson.exports) return !1;
|
|
96
|
+
if (pkgJson.main) {
|
|
97
|
+
const entryExt = path.extname(pkgJson.main);
|
|
98
|
+
return !entryExt || entryExt === ".js" || entryExt === ".cjs";
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
return await fs.access(path.join(path.dirname(pkgJsonPath), "index.js")), !0;
|
|
102
|
+
} catch {
|
|
103
|
+
return !1;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async function readJson(findDepPkgJsonPath2) {
|
|
107
|
+
return JSON.parse(await fs.readFile(findDepPkgJsonPath2, "utf8"));
|
|
108
|
+
}
|
|
109
|
+
function isDepIncluded(dep, optimizeDepsInclude) {
|
|
110
|
+
return optimizeDepsInclude.some(id => parseIncludeStr(id) === dep);
|
|
111
|
+
}
|
|
112
|
+
function isDepExcluded(dep, optimizeDepsExclude) {
|
|
113
|
+
return dep = parseIncludeStr(dep), optimizeDepsExclude.some(id => id === dep || dep.startsWith(`${id}/`));
|
|
114
|
+
}
|
|
115
|
+
function isDepNoExternaled(dep, ssrNoExternal) {
|
|
116
|
+
return ssrNoExternal === !0 ? !0 : isMatch(dep, ssrNoExternal);
|
|
117
|
+
}
|
|
118
|
+
function isDepExternaled(dep, ssrExternal) {
|
|
119
|
+
return ssrExternal.includes(dep);
|
|
120
|
+
}
|
|
121
|
+
function parseIncludeStr(raw) {
|
|
122
|
+
const lastArrow = raw.lastIndexOf(">");
|
|
123
|
+
return lastArrow === -1 ? raw : raw.slice(lastArrow + 1).trim();
|
|
124
|
+
}
|
|
125
|
+
function isMatch(target, pattern) {
|
|
126
|
+
if (Array.isArray(pattern)) return pattern.some(p => isMatch(target, p));
|
|
127
|
+
if (typeof pattern == "string") return target === pattern;
|
|
128
|
+
if (pattern instanceof RegExp) return pattern.test(target);
|
|
129
|
+
}
|
|
130
|
+
export { crawlFrameworkPkgs, findClosestPkgJsonPath, findDepPkgJsonPath, isDepExcluded, isDepExternaled, isDepIncluded, isDepNoExternaled, pkgNeedsOptimization };
|