Skip to content

Commit 1f3635a

Browse files
committed
resolve peer conflict
1 parent 78d9807 commit 1f3635a

5 files changed

Lines changed: 545 additions & 366 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import pkgJson from '../package.json' with { type: 'json' };
2+
3+
export const RewriteImportsPlugin = {
4+
name: 'externalize-vite-and-rolldown',
5+
resolveId(id: string) {
6+
if (id.startsWith('vite/')) {
7+
return { id: id.replace(/^vite\//, `${pkgJson.name}/`), external: true };
8+
}
9+
if (id === 'rolldown') {
10+
return { id: `${pkgJson.name}/rolldown`, external: true };
11+
}
12+
if (id.startsWith('rolldown/')) {
13+
return { id: id.replace(/^rolldown\//, `${pkgJson.name}/rolldown/`), external: true };
14+
}
15+
},
16+
};

packages/cli/build.ts

Lines changed: 68 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { chmod, copyFile, cp, mkdir, readFile, writeFile } from 'node:fs/promises';
1+
import { chmod, copyFile, cp, mkdir, readFile, stat, writeFile } from 'node:fs/promises';
22
import { join, parse, resolve } from 'node:path';
33
import { fileURLToPath } from 'node:url';
44

@@ -7,7 +7,7 @@ import { build, type BuildOptions } from 'rolldown';
77
import { dts } from 'rolldown-plugin-dts';
88
import { glob } from 'tinyglobby';
99

10-
import { CopyAddonPlugin } from './copy-addon-plugin';
10+
import { RewriteImportsPlugin } from './build-support/rewrite-imports';
1111
import pkgJson from './package.json' with { type: 'json' };
1212
import viteRolldownConfig from './vite-rolldown.config';
1313

@@ -32,12 +32,13 @@ await build({
3232
external: [/^node:/, 'vitest'],
3333
plugins: [
3434
{
35-
name: 'rewrite-vite-import-path',
35+
name: 'rewrite-import-path',
3636
transform(_, id, meta) {
3737
const moduleInfo = this.getModuleInfo(id);
3838
const { magicString } = meta;
3939
if (moduleInfo?.isEntry && magicString) {
4040
magicString.replaceAll(`'vite'`, `'${pkgJson.name}/vite'`);
41+
magicString.replaceAll(`resolve('tsdown/run')`, `resolve('${pkgJson.name}/tsdown/run')`);
4142
return {
4243
code: magicString,
4344
};
@@ -72,8 +73,8 @@ const newViteRolldownConfig = viteRolldownConfig.map((config) => {
7273
if (Array.isArray(config.external)) {
7374
config.external = config.external.filter((external) => {
7475
return !(typeof external === 'string' &&
75-
(external.includes('rolldown') || external === 'picomatch' || external === 'tinyglobby' ||
76-
external === 'fdir')) && !(external instanceof RegExp && external.test('rolldown/'));
76+
(external === 'picomatch' || external === 'tinyglobby' ||
77+
external === 'fdir'));
7778
});
7879
}
7980

@@ -108,7 +109,7 @@ const newViteRolldownConfig = viteRolldownConfig.map((config) => {
108109
fileURLToPath(import.meta.url),
109110
'../../..',
110111
)`,
111-
`export const VITE_PACKAGE_DIR: string = path.join(fileURLToPath(import.meta.url), '../../../../../../packages/cli')`,
112+
`export const VITE_PACKAGE_DIR: string = path.join(fileURLToPath(/** #__KEEP__ */import.meta.url), '..', '..', '..', '..', '..')`,
112113
);
113114
magicString.replace(
114115
`export const CLIENT_ENTRY: string = resolve(
@@ -124,6 +125,12 @@ const newViteRolldownConfig = viteRolldownConfig.map((config) => {
124125
)`,
125126
`export const ENV_ENTRY = path.join(VITE_PACKAGE_DIR, 'dist/vite/client/env.mjs')`,
126127
);
128+
magicString.replace(
129+
`const { version } = JSON.parse(
130+
readFileSync(new URL('../../package.json', import.meta.url)).toString(),
131+
)`,
132+
`import { version } from '../../package.json' with { type: 'json' }`,
133+
);
127134
return {
128135
code: magicString,
129136
};
@@ -136,26 +143,11 @@ const newViteRolldownConfig = viteRolldownConfig.map((config) => {
136143
plugin.name === 'rollup-plugin-license');
137144
}).map((plugin) => {
138145
if (typeof plugin === 'object' && plugin !== null && 'name' in plugin && plugin.name === 'externalize-vite') {
139-
return {
140-
name: 'externalize-vite',
141-
resolveId(id) {
142-
if (id.startsWith('vite/')) {
143-
return { id: id.replace(/^vite\//, `${pkgJson.name}/vite/`), external: true };
144-
}
145-
},
146-
};
146+
return RewriteImportsPlugin;
147147
}
148148
return plugin;
149149
}),
150150
];
151-
// cli config
152-
if (typeof config.input === 'object' && config.input['cli']) {
153-
config.plugins.push(CopyAddonPlugin({
154-
isCI: !!process.env.CI,
155-
isReleasingPkgInCI: !!process.env.RELEASING,
156-
desireWasmFiles: false,
157-
}));
158-
}
159151
}
160152

161153
if (config.experimental) {
@@ -171,9 +163,38 @@ const newViteRolldownConfig = viteRolldownConfig.map((config) => {
171163

172164
await build(newViteRolldownConfig as BuildOptions[]);
173165

174-
const rolldownViteSourceDir = resolve(projectDir, '..', '..', 'rolldown-vite', 'packages', 'vite');
166+
const rolldownPluginUtilsDir = resolve(projectDir, '..', '..', 'rolldown', 'packages', 'pluginutils');
167+
168+
await mkdir(join(projectDir, 'dist', 'pluginutils'), { recursive: true });
169+
170+
await cp(join(rolldownPluginUtilsDir, 'dist'), join(projectDir, 'dist', 'pluginutils'), {
171+
recursive: true,
172+
});
173+
174+
const rolldownSourceDir = resolve(projectDir, '..', '..', 'rolldown', 'packages', 'rolldown');
175+
176+
await mkdir(join(projectDir, 'dist/rolldown'), { recursive: true });
177+
178+
const rolldownFiles = new Set<string>();
179+
180+
await cp(join(rolldownSourceDir, 'dist'), join(projectDir, 'dist/rolldown'), {
181+
recursive: true,
182+
filter: async (from, to) => {
183+
if ((await stat(from)).isFile()) {
184+
rolldownFiles.add(to);
185+
}
186+
return true;
187+
},
188+
});
175189

176-
console.log(rolldownViteSourceDir);
190+
for (const file of rolldownFiles) {
191+
const source = await readFile(file, 'utf-8');
192+
if (source.includes('"@rolldown/pluginutils"')) {
193+
await writeFile(file, source.replaceAll('"@rolldown/pluginutils"', `"${pkgJson.name}/rolldown/pluginutils"`));
194+
}
195+
}
196+
197+
const rolldownViteSourceDir = resolve(projectDir, '..', '..', 'rolldown-vite', 'packages', 'vite');
177198

178199
await cp(join(rolldownViteSourceDir, 'misc'), join(projectDir, 'dist/vite/misc'), {
179200
recursive: true,
@@ -194,9 +215,12 @@ for (const dtsFile of dtsFiles) {
194215
);
195216
await writeFile(
196217
dstFilePath,
197-
file.replaceAll(`"rolldown-vite/`, `"${pkgJson.name}/vite/`).replaceAll(
218+
file.replaceAll(`"rolldown-vite/`, `"${pkgJson.name}/`).replaceAll(
198219
`"rolldown-vite"`,
199220
`"${pkgJson.name}/vite"`,
221+
).replaceAll(`"rolldown/`, `"${pkgJson.name}/rolldown/`).replaceAll(
222+
`"rolldown"`,
223+
`"${pkgJson.name}/rolldown"`,
200224
),
201225
);
202226
}
@@ -217,3 +241,22 @@ for (const srcDtsFile of srcTypeFiles) {
217241
await writeFile('./dist/vite/node/vite', `#!/usr/bin/env node\n\nimport './cli.js'\n`);
218242

219243
await chmod('./dist/vite/node/vite', 0o755);
244+
245+
await mkdir(join(projectDir, 'dist/tsdown/dist'), { recursive: true });
246+
247+
const tsdownExternal = Object.keys(pkgJson.peerDependencies);
248+
249+
// re-build tsdown cli
250+
await build({
251+
input: resolve(projectDir, 'node_modules/tsdown/dist/run.mjs'),
252+
output: {
253+
format: 'esm',
254+
cleanDir: true,
255+
dir: join(projectDir, 'dist/tsdown'),
256+
},
257+
platform: 'node',
258+
external: (id: string) => tsdownExternal.some((e) => id.startsWith(e)),
259+
plugins: [
260+
RewriteImportsPlugin,
261+
],
262+
});

packages/cli/package.json

Lines changed: 80 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,59 @@
1414
"./bin": {
1515
"import": "./dist/bin.js"
1616
},
17-
"./client": {
18-
"types": "./dist/client.d.ts"
19-
},
2017
"./test": {
2118
"import": "./dist/test.js",
2219
"types": "./dist/test.d.ts"
2320
},
24-
"./vite/module-runner": "./dist/vite/node/module-runner.js",
21+
"./client": {
22+
"types": "./dist/client.d.ts"
23+
},
24+
"./internal": {
25+
"import": "./dist/vite/node/internal.js",
26+
"types": "./dist/vite/node/internal.d.ts"
27+
},
28+
"./module-runner": {
29+
"import": "./dist/vite/node/module-runner.js",
30+
"types": "./dist/vite/node/module-runner.d.ts"
31+
},
32+
"./dist/client/*": "./dist/vite/client/*",
2533
"./vite": {
2634
"import": "./dist/vite/node/index.js",
2735
"types": "./dist/vite/node/index.d.ts"
36+
},
37+
"./rolldown": {
38+
"import": "./dist/rolldown/index.mjs",
39+
"types": "./dist/rolldown/index.d.mts"
40+
},
41+
"./rolldown/parseAst": {
42+
"import": "./dist/rolldown/parse-ast-index.mjs",
43+
"types": "./dist/rolldown/parse-ast-index.d.mts"
44+
},
45+
"./rolldown/experimental": {
46+
"import": "./dist/rolldown/experimental-index.mjs",
47+
"types": "./dist/rolldown/experimental-index.d.mts"
48+
},
49+
"./rolldown/config": {
50+
"import": "./dist/rolldown/config.mjs",
51+
"types": "./dist/rolldown/config.d.mts"
52+
},
53+
"./rolldown/experimental/runtime-types": {
54+
"types": "./dist/rolldown/experimental-runtime-types.d.ts"
55+
},
56+
"./rolldown/filter": {
57+
"import": "./dist/rolldown/filter-index.mjs",
58+
"types": "./dist/rolldown/filter-index.d.mts"
59+
},
60+
"./rolldown/parallelPlugin": {
61+
"import": "./dist/rolldown/parallel-plugin.mjs",
62+
"types": "./dist/rolldown/parallel-plugin.d.mts"
63+
},
64+
"./rolldown/pluginutils": {
65+
"import": "./dist/pluginutils/index.js",
66+
"types": "./dist/pluginutils/index.d.ts"
67+
},
68+
"./tsdown/run": {
69+
"default": "./dist/tsdown/run.js"
2870
}
2971
},
3072
"imports": {
@@ -47,14 +89,45 @@
4789
"dist"
4890
],
4991
"dependencies": {
92+
"@oxc-project/types": "catalog:",
93+
"debug": "catalog:",
5094
"oxfmt": "catalog:",
5195
"oxlint": "catalog:",
5296
"oxlint-tsgolint": "catalog:",
5397
"postcss": "^8.5.6",
54-
"tsdown": "catalog:",
98+
"semver": "catalog:",
99+
"tree-kill": "^1.2.2",
55100
"vitepress": "catalog:",
56101
"vitest": "catalog:"
57102
},
103+
"peerDependencies": {
104+
"@arethetypeswrong/core": "^0.18.1",
105+
"publint": "^0.3.0",
106+
"typescript": "^5.0.0",
107+
"unplugin-lightningcss": "^0.4.0",
108+
"unplugin-unused": "^0.5.0",
109+
"unrun": "^0.2.1"
110+
},
111+
"peerDependenciesMeta": {
112+
"@arethetypeswrong/core": {
113+
"optional": true
114+
},
115+
"publint": {
116+
"optional": true
117+
},
118+
"typescript": {
119+
"optional": true
120+
},
121+
"unplugin-lightningcss": {
122+
"optional": true
123+
},
124+
"unplugin-unused": {
125+
"optional": true
126+
},
127+
"unrun": {
128+
"optional": true
129+
}
130+
},
58131
"devDependencies": {
59132
"@babel/parser": "^7.28.4",
60133
"@napi-rs/cli": "catalog:",
@@ -73,7 +146,8 @@
73146
"rolldown": "workspace:*",
74147
"rolldown-plugin-dts": "catalog:",
75148
"rollup-plugin-license": "^3.6.0",
76-
"tinyglobby": "^0.2.15"
149+
"tinyglobby": "^0.2.15",
150+
"tsdown": "catalog:"
77151
},
78152
"napi": {
79153
"binaryName": "vite-plus",

0 commit comments

Comments
 (0)