Cleans up build scripts (#5097)

* Cleans up build scripts

* Adds back removeDir
This commit is contained in:
Henning Dieterichs 2025-11-07 13:10:14 +01:00 committed by GitHub
parent abae948dc3
commit d84acb4d8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 199 additions and 171 deletions

View file

@ -9,45 +9,22 @@ import nodeResolve from '@rollup/plugin-node-resolve';
import { join } from 'path'; import { join } from 'path';
import { defineConfig } from 'rollup'; import { defineConfig } from 'rollup';
import { dts } from 'rollup-plugin-dts'; import { dts } from 'rollup-plugin-dts';
import { dtsDeprecationWarning, mapModuleId } from '../shared.mjs';
const root = join(import.meta.dirname, '../../');
const outDir = join(import.meta.dirname, './out');
/**
* @param {string} filePath
* @param {string} newExt
*/
function changeExt(filePath, newExt) {
const idx = filePath.lastIndexOf('.');
if (idx === -1) {
return filePath + newExt;
} else {
return filePath.substring(0, idx) + newExt;
}
}
const mappedPaths = {
[join(root, 'node_modules/monaco-editor-core/esm/')]: '.',
[join(root, 'node_modules/')]: 'external/',
[join(root, 'src/')]: 'vs/'
};
export default defineConfig({ export default defineConfig({
input: { input: {
types: join(import.meta.dirname, './src/types.ts') types: join(import.meta.dirname, './src/types.ts')
}, },
output: { output: {
dir: outDir, dir: join(import.meta.dirname, './out'),
format: 'es', format: 'es',
preserveModules: false, preserveModules: false,
entryFileNames: function (chunkInfo) { entryFileNames: function (chunkInfo) {
const moduleId = chunkInfo.facadeModuleId; const moduleId = chunkInfo.facadeModuleId;
if (moduleId) { if (moduleId) {
for (const [key, val] of Object.entries(mappedPaths)) { const m = mapModuleId(moduleId, '.d.ts');
if (moduleId.startsWith(key)) { if (m !== undefined) {
const relativePath = moduleId.substring(key.length); return m;
return changeExt(join(val, relativePath), '.d.ts');
}
} }
} }
return '[name].d.ts'; return '[name].d.ts';
@ -61,6 +38,7 @@ export default defineConfig({
stripInternal: true stripInternal: true
}, },
includeExternal: ['monaco-editor-core', '@vscode/monaco-lsp-client'] includeExternal: ['monaco-editor-core', '@vscode/monaco-lsp-client']
}) }),
dtsDeprecationWarning(),
] ]
}); });

View file

@ -1,23 +1,13 @@
import { readFileSync } from 'node:fs'; import { readFileSync } from 'node:fs';
import { glob } from 'node:fs/promises'; import { dirname, resolve } from 'node:path';
import { basename, dirname, join, resolve } from 'node:path';
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import { defineConfig } from 'vite'; import { defineConfig } from 'vite';
import { urlToEsmPlugin } from './plugin'; import { urlToEsmPlugin } from './plugin';
import { getNlsEntryPoints } from '../shared.mjs';
const __dirname = dirname(fileURLToPath(import.meta.url)); const __dirname = dirname(fileURLToPath(import.meta.url));
export default defineConfig(async (args) => { export default defineConfig(async (args) => {
const monacoEditorCoreDir = join(
dirname(require.resolve('monaco-editor-core/package.json')),
'esm'
);
const nlsEntries = {};
for await (const path of glob(`${monacoEditorCoreDir}/nls.messages.*.js`)) {
const entryName = basename(path).replace('.js', '');
nlsEntries[entryName] = path;
}
/** @type {import('vite').UserConfig} */ /** @type {import('vite').UserConfig} */
return { return {
base: './', base: './',
@ -28,7 +18,7 @@ export default defineConfig(async (args) => {
lib: { lib: {
cssFileName: 'editor/editor.main', cssFileName: 'editor/editor.main',
entry: { entry: {
...nlsEntries, ...getNlsEntryPoints(),
'nls.messages-loader': resolve(__dirname, 'src/nls.messages-loader.js'), 'nls.messages-loader': resolve(__dirname, 'src/nls.messages-loader.js'),
'editor/editor.main': resolve(__dirname, 'src/editor.main.ts'), 'editor/editor.main': resolve(__dirname, 'src/editor.main.ts'),
'basic-languages/monaco.contribution': resolve( 'basic-languages/monaco.contribution': resolve(

View file

@ -8,11 +8,11 @@ import fs = require('fs');
import { REPO_ROOT, readFiles, writeFiles } from '../build/utils'; import { REPO_ROOT, readFiles, writeFiles } from '../build/utils';
import { generateEsmMetadataJsAndDTs } from './releaseMetadata'; import { generateEsmMetadataJsAndDTs } from './releaseMetadata';
import { buildESM } from './esm/build.script'; import { buildESM } from './esm/build.script';
import { removeDir } from './fs';
import { buildAmdMinDev } from './amd/build.script'; import { buildAmdMinDev } from './amd/build.script';
import { rm } from 'fs/promises';
async function run() { async function run() {
removeDir(`out/monaco-editor`); await rm(path.join(REPO_ROOT, './out/monaco-editor'), { recursive: true, force: true });
await buildESM(); await buildESM();
await buildAmdMinDev(); await buildAmdMinDev();

View file

@ -9,46 +9,24 @@ import nodeResolve from '@rollup/plugin-node-resolve';
import { join } from 'path'; import { join } from 'path';
import { defineConfig } from 'rollup'; import { defineConfig } from 'rollup';
import { dts } from "rollup-plugin-dts"; import { dts } from "rollup-plugin-dts";
import { dtsDeprecationWarning, mapModuleId } from '../shared.mjs';
const root = join(import.meta.dirname, '../../'); const root = join(import.meta.dirname, '../../');
const outDir = join(root, './out/monaco-editor/esm');
/**
* @param {string} filePath
* @param {string} newExt
* @returns {string}
*/
function changeExt(filePath, newExt) {
const idx = filePath.lastIndexOf('.');
if (idx === -1) {
return filePath + newExt;
} else {
return filePath.substring(0, idx) + newExt;
}
}
const mappedPaths = {
[join(root, 'node_modules/monaco-editor-core/esm/')]: '.',
[join(root, 'node_modules/')]: 'external/',
[join(root, 'src/')]: 'vs/',
};
export default defineConfig({ export default defineConfig({
input: { input: {
entry: join(root, './src/editor/editor.main.ts'), entry: join(root, './src/editor/editor.main.ts'),
}, },
output: { output: {
dir: outDir, dir: join(root, './out/monaco-editor/esm'),
format: 'es', format: 'es',
preserveModules: false, preserveModules: false,
entryFileNames: function (chunkInfo) { entryFileNames: function (chunkInfo) {
const moduleId = chunkInfo.facadeModuleId; const moduleId = chunkInfo.facadeModuleId;
if (moduleId) { if (moduleId) {
for (const [key, val] of Object.entries(mappedPaths)) { const m = mapModuleId(moduleId, '.d.ts');
if (moduleId.startsWith(key)) { if (m !== undefined) {
const relativePath = moduleId.substring(key.length); return m;
return changeExt(join(val, relativePath), '.d.ts');
}
} }
} }
return '[name].d.ts'; return '[name].d.ts';
@ -63,5 +41,6 @@ export default defineConfig({
}, },
includeExternal: ['monaco-editor-core', '@vscode/monaco-lsp-client'] includeExternal: ['monaco-editor-core', '@vscode/monaco-lsp-client']
}), }),
dtsDeprecationWarning(),
], ],
}); });

View file

@ -13,48 +13,13 @@ import del from 'rollup-plugin-delete';
import keepCssImports from './rollup-plugin-keep-css-imports/dist/index.mjs'; import keepCssImports from './rollup-plugin-keep-css-imports/dist/index.mjs';
import nodeResolve from '@rollup/plugin-node-resolve'; import nodeResolve from '@rollup/plugin-node-resolve';
import { urlToEsmPlugin } from './rollup-url-to-module-plugin/index.mjs'; import { urlToEsmPlugin } from './rollup-url-to-module-plugin/index.mjs';
import { copyFileSync, mkdirSync } from 'fs'; import { getNlsEntryPoints, mapModuleId } from '../shared.mjs';
import { dirname } from 'path'; import { readFileSync } from 'fs';
import { fileURLToPath } from 'url';
import { readdirSync } from 'fs';
const root = join(import.meta.dirname, '../../'); const root = join(import.meta.dirname, '../../');
const outDir = join(root, './out/monaco-editor/esm'); const outDir = join(root, './out/monaco-editor/esm');
/**
* @param {string} filePath
* @param {string} newExt
* @returns {string}
*/
function changeExt(filePath, newExt) {
const idx = filePath.lastIndexOf('.');
if (idx === -1) {
return filePath + newExt;
} else {
return filePath.substring(0, idx) + newExt;
}
}
const mappedPaths = {
[join(root, 'node_modules/monaco-editor-core/esm/')]: '.',
[join(root, 'node_modules/')]: 'external/',
[join(root, 'monaco-lsp-client/')]: 'external/monaco-lsp-client/',
[join(root, 'src/')]: 'vs/',
};
function getNlsEntryPoints() {
// Scan for nls.messages.*.js files dynamically
const nlsDir = dirname(fileURLToPath(import.meta.resolve('monaco-editor-core/esm/nls.messages.en.js')));
const nlsFiles = readdirSync(nlsDir)
.filter(file => file.startsWith('nls.messages.') && file.endsWith('.js'))
.reduce((acc, file) => {
// @ts-ignore
acc[file] = join(nlsDir, file);
return acc;
}, {});
return nlsFiles;
}
export default defineConfig({ export default defineConfig({
input: { input: {
entry: join(root, './src/editor/editor.main.ts'), entry: join(root, './src/editor/editor.main.ts'),
@ -72,11 +37,9 @@ export default defineConfig({
entryFileNames: function (chunkInfo) { entryFileNames: function (chunkInfo) {
const moduleId = chunkInfo.facadeModuleId; const moduleId = chunkInfo.facadeModuleId;
if (moduleId) { if (moduleId) {
for (const [key, val] of Object.entries(mappedPaths)) { const r = mapModuleId(moduleId, '.js');
if (moduleId.startsWith(key)) { if (r !== undefined) {
const relativePath = moduleId.substring(key.length); return r;
return changeExt(join(val, relativePath), '.js');
}
} }
} }
return '[name].js'; return '[name].js';
@ -90,11 +53,12 @@ export default defineConfig({
{ {
name: 'copy-codicon-font', name: 'copy-codicon-font',
buildEnd() { generateBundle() {
const codiconSource = join(root, 'node_modules/monaco-editor-core/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf'); this.emitFile({
const codiconDest = join(outDir, 'vs/base/browser/ui/codicons/codicon/codicon.ttf'); type: 'asset',
mkdirSync(dirname(codiconDest), { recursive: true }); fileName: 'vs/base/browser/ui/codicons/codicon/codicon.ttf',
copyFileSync(codiconSource, codiconDest); source: readFileSync(join(root, 'node_modules/monaco-editor-core/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf'))
});
} }
}, },
@ -106,13 +70,10 @@ export default defineConfig({
* @param {string} assetId * @param {string} assetId
*/ */
outputPath: (assetId) => { outputPath: (assetId) => {
for (const [key, val] of Object.entries(mappedPaths)) { const r = mapModuleId(assetId, '.css');
if (assetId.startsWith(key)) { if (r !== undefined) {
const relativePath = assetId.substring(key.length); return join(outDir, r);
return changeExt(join(outDir, val, relativePath), '.css');
} }
}
const relativePath = join(outDir, relative(root, assetId)); const relativePath = join(outDir, relative(root, assetId));
return relativePath.replace(/(\.s[ca]ss)$/, ".min$1") return relativePath.replace(/(\.s[ca]ss)$/, ".min$1")
}, },

View file

@ -23,25 +23,12 @@ export function ensureDir(dirname: string) {
if (!existingDirCache.has(dir)) { if (!existingDirCache.has(dir)) {
try { try {
fs.mkdirSync(dir); fs.mkdirSync(dir);
} catch (err) {} } catch (err) { }
existingDirCache.add(dir); existingDirCache.add(dir);
} }
}); });
} }
/**
* Copy a file.
*/
export function copyFile(_source: string, _destination: string) {
const source = path.join(REPO_ROOT, _source);
const destination = path.join(REPO_ROOT, _destination);
ensureDir(path.dirname(destination));
fs.writeFileSync(destination, fs.readFileSync(source));
console.log(`Copied ${_source} to ${_destination}`);
}
/** /**
* Remove a directory and all its contents. * Remove a directory and all its contents.
*/ */

90
build/shared.mjs Normal file
View file

@ -0,0 +1,90 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
// @ts-check
import { dirname, join } from 'path';
import { fileURLToPath } from 'url';
import { readdirSync } from 'fs';
/**
* @param {string} filePath
* @param {string} newExt
*/
export function changeExt(filePath, newExt) {
const idx = filePath.lastIndexOf('.');
if (idx === -1) {
return filePath + newExt;
} else {
return filePath.substring(0, idx) + newExt;
}
}
export function getNlsEntryPoints() {
const nlsDir = dirname(fileURLToPath(import.meta.resolve('monaco-editor-core/esm/nls.messages.en.js')));
const nlsFiles = readdirSync(nlsDir)
.filter(file => file.startsWith('nls.messages.') && file.endsWith('.js'))
.reduce((acc, file) => {
// @ts-ignore
acc[file] = join(nlsDir, file);
return acc;
}, {});
return nlsFiles;
}
const root = join(import.meta.dirname, '../');
const mappedPaths = {
[join(root, 'node_modules/monaco-editor-core/esm/')]: '.',
[join(root, 'node_modules/')]: 'external/',
[join(root, 'monaco-lsp-client/')]: 'external/monaco-lsp-client/',
[join(root, 'src/')]: 'vs/',
};
/**
* @param {string} moduleId
* @param {string} newExt (with leading .)
* @returns {string | undefined}
*/
export function mapModuleId(moduleId, newExt) {
for (const [key, val] of Object.entries(mappedPaths)) {
if (moduleId.startsWith(key)) {
const relativePath = moduleId.substring(key.length);
return changeExt(join(val, relativePath), newExt);
}
}
return undefined;
}
/** @return {import('rollup').Plugin} */
export function dtsDeprecationWarning() {
return {
name: 'add-dts-deprecation-warning',
generateBundle(options, bundle) {
for (const fileName in bundle) {
const file = bundle[fileName];
if (file.type === 'chunk' && fileName.endsWith('.d.ts')) {
let content = file.code.toString();
content = content + `
declare namespace languages {
/** @deprecated Use the new top level "css" namespace instead. */
export const css: { deprecated: true };
/** @deprecated Use the new top level "html" namespace instead. */
export const html: { deprecated: true };
/** @deprecated Use the new top level "json" namespace instead. */
export const json: { deprecated: true };
/** @deprecated Use the new top level "typescript" namespace instead. */
export const typescript: { deprecated: true };
}
`;
file.code = content;
}
}
}
};
}

View file

@ -21,22 +21,6 @@
"monaco-editor-core": "^0.54.0-dev-20250929" "monaco-editor-core": "^0.54.0-dev-20250929"
} }
}, },
"../../../hediet/typed-json-rpc/json-rpc": {
"name": "@hediet/json-rpc",
"version": "0.5.0",
"license": "MIT",
"devDependencies": {
"typescript": "^5.8.3"
}
},
"../../../hediet/typed-json-rpc/json-rpc-browser": {
"name": "@hediet/json-rpc-browser",
"version": "0.5.1",
"license": "MIT",
"dependencies": {
"@hediet/json-rpc": "^0.5.0"
}
},
"../../../hediet/typed-json-rpc/json-rpc-node": { "../../../hediet/typed-json-rpc/json-rpc-node": {
"name": "@hediet/json-rpc-node", "name": "@hediet/json-rpc-node",
"version": "0.5.0", "version": "0.5.0",
@ -55,16 +39,6 @@
"source-map-support": "^0.5.12" "source-map-support": "^0.5.12"
} }
}, },
"../../../hediet/typed-json-rpc/json-rpc-websocket": {
"name": "@hediet/json-rpc-websocket",
"version": "0.5.1",
"license": "MIT",
"dependencies": {
"@hediet/json-rpc": "^0.5.0",
"@types/ws": "^6.0.4",
"isomorphic-ws": "^5.0.0"
}
},
"../../hediet/typed-json-rpc/json-rpc-browser": { "../../hediet/typed-json-rpc/json-rpc-browser": {
"extraneous": true "extraneous": true
}, },
@ -170,16 +144,30 @@
} }
}, },
"node_modules/@hediet/json-rpc": { "node_modules/@hediet/json-rpc": {
"resolved": "../../../hediet/typed-json-rpc/json-rpc", "version": "0.5.0",
"link": true "resolved": "https://registry.npmjs.org/@hediet/json-rpc/-/json-rpc-0.5.0.tgz",
"integrity": "sha512-SApO7NbKJztClcznEqg46ZGQzO2v3Q3gVIuRVC9QE/m75J/5AipJdclxEXgT++7j4x4LI2JjEpf2xhi67Ngu9A==",
"license": "MIT"
}, },
"node_modules/@hediet/json-rpc-browser": { "node_modules/@hediet/json-rpc-browser": {
"resolved": "../../../hediet/typed-json-rpc/json-rpc-browser", "version": "0.5.1",
"link": true "resolved": "https://registry.npmjs.org/@hediet/json-rpc-browser/-/json-rpc-browser-0.5.1.tgz",
"integrity": "sha512-iR+WrTdM7WozRJ/MElfeT8CmH2f911Y8P6xfcj5RCfywp7kjnnqKPUV/VnNnzToxRZUO8WAfJtLvmhDBsSjMtA==",
"license": "MIT",
"dependencies": {
"@hediet/json-rpc": "^0.5.0"
}
}, },
"node_modules/@hediet/json-rpc-websocket": { "node_modules/@hediet/json-rpc-websocket": {
"resolved": "../../../hediet/typed-json-rpc/json-rpc-websocket", "version": "0.5.1",
"link": true "resolved": "https://registry.npmjs.org/@hediet/json-rpc-websocket/-/json-rpc-websocket-0.5.1.tgz",
"integrity": "sha512-1H9UjKyR00ZjwcReQdzTxyEoZKaEubeOvxBVrwHGo4n9HeQt6SvQgtef+1AJ9MT7/sV2Qfe0VWarYivx6BWgIA==",
"license": "MIT",
"dependencies": {
"@hediet/json-rpc": "^0.5.0",
"@types/ws": "^6.0.4",
"isomorphic-ws": "^5.0.0"
}
}, },
"node_modules/@jridgewell/gen-mapping": { "node_modules/@jridgewell/gen-mapping": {
"version": "0.3.13", "version": "0.3.13",
@ -888,6 +876,24 @@
"license": "MIT", "license": "MIT",
"peer": true "peer": true
}, },
"node_modules/@types/node": {
"version": "24.10.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.0.tgz",
"integrity": "sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==",
"license": "MIT",
"dependencies": {
"undici-types": "~7.16.0"
}
},
"node_modules/@types/ws": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz",
"integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/ansis": { "node_modules/ansis": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz",
@ -1176,6 +1182,15 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/isomorphic-ws": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz",
"integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==",
"license": "MIT",
"peerDependencies": {
"ws": "*"
}
},
"node_modules/jsesc": { "node_modules/jsesc": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
@ -1547,6 +1562,12 @@
"license": "0BSD", "license": "0BSD",
"optional": true "optional": true
}, },
"node_modules/undici-types": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
"license": "MIT"
},
"node_modules/unicorn-magic": { "node_modules/unicorn-magic": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
@ -1559,6 +1580,28 @@
"funding": { "funding": {
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
},
"node_modules/ws": {
"version": "8.18.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
} }
} }
} }