Avoid using `metadata.js` in `build.js`

hediet/typify-build
Alex Dima 3 years ago
parent f1be014b8f
commit 3a6cbe0787
No known key found for this signature in database
GPG Key ID: 39563C1504FDD0C9

@ -17,22 +17,22 @@ tsc(`src/tsconfig.json`);
dts(
`out/amd/language/css/monaco.contribution.d.ts`,
`out/release/language/css/monaco.d.ts`,
`out/release/css.d.ts`,
'monaco.languages.css'
);
dts(
`out/amd/language/html/monaco.contribution.d.ts`,
`out/release/language/html/monaco.d.ts`,
`out/release/html.d.ts`,
'monaco.languages.html'
);
dts(
`out/amd/language/json/monaco.contribution.d.ts`,
`out/release/language/json/monaco.d.ts`,
`out/release/json.d.ts`,
'monaco.languages.json'
);
dts(
`out/amd/language/typescript/monaco.contribution.d.ts`,
`out/release/language/typescript/monaco.d.ts`,
`out/release/typescript.d.ts`,
'monaco.languages.typescript'
);

@ -5,12 +5,6 @@
//@ts-check
/**
* @typedef { { src:string; built:string; releaseDev:string; releaseMin:string; } } ICorePaths
* @typedef { { dev:string; min:string; esm: string; } } IPluginPaths
* @typedef { { name:string; contrib:string; modulePrefix:string; rootPath:string; paths:IPluginPaths } } IPlugin
* @typedef { { METADATA: {CORE:{paths:ICorePaths}; PLUGINS:IPlugin[];} } } IMetadata
*/
/** @typedef {import('../build/utils').IFile} IFile */
const path = require('path');
@ -18,8 +12,6 @@ const fs = require('fs');
const { REPO_ROOT, readFiles, writeFiles } = require('../build/utils');
const { removeDir } = require('../build/fs');
const ts = require('typescript');
/**@type { IMetadata } */
const metadata = require('../metadata.js');
const { generateMetadata } = require('./releaseMetadata');
removeDir(`release`);
@ -85,24 +77,11 @@ function AMD_releaseOne(type) {
AMD_addPluginContribs(type, coreFiles);
writeFiles(coreFiles, `release/${type}`);
for (const plugin of metadata.METADATA.PLUGINS) {
AMD_releasePlugin(plugin, type, `release/${type}`);
}
}
/**
* Release a plugin to `dev` or `min`.
* @param {IPlugin} plugin
* @param {'dev'|'min'} type
* @param {string} destinationPath
*/
function AMD_releasePlugin(plugin, type, destinationPath) {
const pluginPath = path.join(plugin.rootPath, plugin.paths[type]); // dev or min
const contribPath =
path.join(pluginPath, plugin.contrib.substring(plugin.modulePrefix.length)) + '.js';
const files = readFiles(`${pluginPath}/**/*`, { base: pluginPath, ignore: [contribPath] });
writeFiles(files, path.join(destinationPath, plugin.modulePrefix));
const pluginFiles = readFiles(`out/release/${type}/**/*`, {
base: `out/release/${type}`,
ignore: ['**/monaco.contribution.js']
});
writeFiles(pluginFiles, `release/${type}`);
}
/**
@ -125,25 +104,21 @@ function AMD_addPluginContribs(type, files) {
// Rename the AMD module 'vs/editor/editor.main' to 'vs/editor/edcore.main'
contents = contents.replace(/"vs\/editor\/editor\.main\"/, '"vs/editor/edcore.main"');
/** @type {string[]} */
let extraContent = [];
/** @type {string[]} */
let allPluginsModuleIds = [];
metadata.METADATA.PLUGINS.forEach(function (plugin) {
allPluginsModuleIds.push(plugin.contrib);
const pluginPath = path.join(plugin.rootPath, plugin.paths[type]); // dev or min
const contribPath =
path.join(REPO_ROOT, pluginPath, plugin.contrib.substring(plugin.modulePrefix.length)) +
'.js';
let contribContents = fs.readFileSync(contribPath).toString();
const pluginFiles = readFiles(`out/release/${type}/**/monaco.contribution.js`, {
base: `out/release/${type}`
});
contribContents = contribContents.replace(
const extraContent = pluginFiles.map((file) => {
return file.contents
.toString()
.replace(
/define\((['"][a-z\/\-]+\/fillers\/monaco-editor-core['"]),\[\],/,
"define($1,['vs/editor/editor.api'],"
);
});
extraContent.push(contribContents);
const allPluginsModuleIds = pluginFiles.map((file) => {
return file.path.replace(/\.js$/, '');
});
extraContent.push(
@ -176,22 +151,16 @@ function ESM_release() {
ESM_addPluginContribs(coreFiles);
writeFiles(coreFiles, `release/esm`);
for (const plugin of metadata.METADATA.PLUGINS) {
ESM_releasePlugin(plugin, `release/esm`);
}
ESM_releasePlugins();
}
/**
* Release a plugin to `esm`.
* Adds a dependency to 'vs/editor/editor.api' in contrib files in order for `monaco` to be defined.
* Rewrites imports for 'monaco-editor-core/**'
* @param {IPlugin} plugin
* @param {string} destinationPath
*/
function ESM_releasePlugin(plugin, destinationPath) {
const pluginPath = path.join(plugin.rootPath, plugin.paths['esm']);
const files = readFiles(`${pluginPath}/**/*`, { base: pluginPath });
function ESM_releasePlugins() {
const files = readFiles(`out/release/esm/**/*`, { base: 'out/release/esm/' });
for (const file of files) {
if (!/(\.js$)|(\.ts$)/.test(file.path)) {
@ -217,10 +186,9 @@ function ESM_releasePlugin(plugin, destinationPath) {
importText = 'monaco-editor-core/esm/vs/editor/editor.api';
}
const myFileDestPath = path.join(plugin.modulePrefix, file.path);
const importFilePath = importText.substring('monaco-editor-core/esm/'.length);
let relativePath = path
.relative(path.dirname(myFileDestPath), importFilePath)
.relative(path.dirname(file.path), importFilePath)
.replace(/\\/g, '/');
if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
relativePath = './' + relativePath;
@ -238,9 +206,8 @@ function ESM_releasePlugin(plugin, destinationPath) {
continue;
}
const myFileDestPath = path.join(plugin.modulePrefix, file.path);
const apiFilePath = 'vs/editor/editor.api';
let relativePath = path.relative(path.dirname(myFileDestPath), apiFilePath).replace(/\\/g, '/');
let relativePath = path.relative(path.dirname(file.path), apiFilePath).replace(/\\/g, '/');
if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
relativePath = './' + relativePath;
}
@ -251,7 +218,7 @@ function ESM_releasePlugin(plugin, destinationPath) {
}
ESM_addImportSuffix(files);
writeFiles(files, path.join(destinationPath, plugin.modulePrefix));
writeFiles(files, `release/esm`);
}
/**
@ -299,20 +266,20 @@ function ESM_addPluginContribs(files) {
const mainFileDestPath = 'vs/editor/editor.main.js';
/** @type {string[]} */
let mainFileImports = [];
for (const plugin of metadata.METADATA.PLUGINS) {
const contribDestPath = plugin.contrib;
const mainFileImports = readFiles(`out/release/esm/**/monaco.contribution.js`, {
base: `out/release/esm`
}).map((file) => {
let relativePath = path
.relative(path.dirname(mainFileDestPath), contribDestPath)
.replace(/\\/g, '/');
.relative(path.dirname(mainFileDestPath), file.path)
.replace(/\\/g, '/')
.replace(/\.js$/, '');
if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
relativePath = './' + relativePath;
}
mainFileImports.push(relativePath);
}
return relativePath;
});
const mainFileContents =
mainFileImports.map((name) => `import '${name}';`).join('\n') +
@ -335,17 +302,10 @@ function releaseDTS() {
let contents = monacodts.contents.toString();
/** @type {string[]} */
const extraContent = [];
metadata.METADATA.PLUGINS.forEach(function (plugin) {
const dtsPath = path.join(plugin.rootPath, './monaco.d.ts');
try {
let plugindts = fs.readFileSync(dtsPath).toString();
plugindts = plugindts.replace(/\/\/\/ <reference.*\n/m, '');
extraContent.push(plugindts);
} catch (err) {
return;
}
const extraContent = readFiles('out/release/*.d.ts', {
base: 'out/release/'
}).map((file) => {
return file.contents.toString().replace(/\/\/\/ <reference.*\n/m, '');
});
contents =

@ -138,7 +138,7 @@ function buildESM(options) {
},
external: options.external,
outbase: `src/${options.base}`,
outdir: `out/release/${options.base}/esm/`,
outdir: `out/release/esm/vs/${options.base}/`,
plugins: [
alias({
'vscode-nls': path.join(__dirname, 'fillers/vscode-nls.ts')
@ -183,7 +183,7 @@ function buildOneAMD(type, options) {
js: 'return moduleExports;\n});'
},
outbase: `src/${options.base}`,
outdir: `out/release/${options.base}/${type}/`,
outdir: `out/release/${type}/vs/${options.base}/`,
plugins: [
alias({
'vscode-nls': path.join(__dirname, '../build/fillers/vscode-nls.ts'),

@ -15,65 +15,65 @@
name: 'monaco-typescript',
contrib: 'vs/language/typescript/monaco.contribution',
modulePrefix: 'vs/language/typescript',
rootPath: './out/release/language/typescript',
rootPath: './out/release',
paths: {
// use ./ to indicate it is relative to the `rootPath`
src: './../../../amd/language/typescript',
dev: './dev',
min: './min',
esm: './esm'
src: './../amd/language/typescript',
dev: './dev/vs/language/typescript',
min: './min/vs/language/typescript',
esm: './esm/vs/language/typescript'
}
},
{
name: 'monaco-css',
contrib: 'vs/language/css/monaco.contribution',
modulePrefix: 'vs/language/css',
rootPath: './out/release/language/css',
rootPath: './out/release',
paths: {
// use ./ to indicate it is relative to the `rootPath`
src: './../../../amd/language/css',
dev: './dev',
min: './min',
esm: './esm'
src: './../amd/language/css',
dev: './dev/vs/language/css',
min: './min/vs/language/css',
esm: './esm/vs/language/css'
}
},
{
name: 'monaco-json',
contrib: 'vs/language/json/monaco.contribution',
modulePrefix: 'vs/language/json',
rootPath: './out/release/language/json',
rootPath: './out/release',
paths: {
// use ./ to indicate it is relative to the `rootPath`
src: './../../../amd/language/json',
dev: './dev',
min: './min',
esm: './esm'
src: './../amd/language/json',
dev: './dev/vs/language/json',
min: './min/vs/language/json',
esm: './esm/vs/language/json'
}
},
{
name: 'monaco-html',
contrib: 'vs/language/html/monaco.contribution',
modulePrefix: 'vs/language/html',
rootPath: './out/release/language/html',
rootPath: './out/release',
paths: {
// use ./ to indicate it is relative to the `rootPath`
src: './../../../amd/language/html',
dev: './dev',
min: './min',
esm: './esm'
src: './../amd/language/html',
dev: './dev/vs/language/html',
min: './min/vs/language/html',
esm: './esm/vs/language/html'
}
},
{
name: 'monaco-languages',
contrib: 'vs/basic-languages/monaco.contribution',
modulePrefix: 'vs/basic-languages',
rootPath: './out/release/basic-languages',
rootPath: './out/release',
paths: {
// use ./ to indicate it is relative to the `rootPath`
src: './../../amd/basic-languages',
dev: './dev',
min: './min',
esm: './esm'
src: './../amd/basic-languages',
dev: './dev/vs/basic-languages',
min: './min/vs/basic-languages',
esm: './esm/vs/basic-languages'
}
}
]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save