From 829ee45850186a05150760f9cd0b8c5561ab684c Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Fri, 12 Nov 2021 01:02:23 +0100 Subject: [PATCH] Use `esbuild` also for AMD variant --- build/utils.js | 2 +- monaco-css/scripts/build.js | 89 ++++++++++++++++--- monaco-css/scripts/bundle.js | 79 ---------------- .../src/fillers/monaco-editor-core-amd.ts | 6 +- monaco-css/src/monaco.contribution.ts | 9 +- 5 files changed, 85 insertions(+), 100 deletions(-) delete mode 100644 monaco-css/scripts/bundle.js diff --git a/build/utils.js b/build/utils.js index 2af1bbcf..266b5549 100644 --- a/build/utils.js +++ b/build/utils.js @@ -81,8 +81,8 @@ exports.removeDir = removeDir; */ function tsc(_projectPath) { const projectPath = path.join(REPO_ROOT, _projectPath); + console.log(`Launching compiler at ${_projectPath}...`); cp.spawnSync(process.execPath, [path.join(__dirname, '../node_modules/typescript/lib/tsc.js'), '-p', projectPath], { stdio: 'inherit', stderr: 'inherit' }); - console.log(`Compiled ${_projectPath}`); } exports.tsc = tsc; diff --git a/monaco-css/scripts/build.js b/monaco-css/scripts/build.js index 5bc119bf..29591dcd 100644 --- a/monaco-css/scripts/build.js +++ b/monaco-css/scripts/build.js @@ -14,27 +14,88 @@ removeDir(`monaco-css/out`); tsc(`monaco-css/src/tsconfig.json`); -dts(`monaco-css/out/amd/monaco.contribution.d.ts`, `monaco-css/monaco.d.ts`, 'monaco.languages.css'); +dts( + `monaco-css/out/amd/monaco.contribution.d.ts`, + `monaco-css/monaco.d.ts`, + 'monaco.languages.css' +); -esbuild.build({ - entryPoints: ['src/cssMode.ts', 'src/css.worker.ts', 'src/monaco.contribution.ts'], +/** + * @param {import('esbuild').BuildOptions} options + */ +function build(options) { + esbuild.build(options).then((result) => { + if (result.errors.length > 0) { + console.error(result.errors); + } + if (result.warnings.length > 0) { + console.error(result.warnings); + } + }); +} + +build({ + entryPoints: ['src/monaco.contribution.ts', 'src/cssMode.ts', 'src/css.worker.ts'], bundle: true, target: 'esnext', format: 'esm', + define: { + AMD: false + }, external: ['monaco-editor-core', '*/cssMode'], outdir: 'release/esm/', plugins: [ alias({ - 'vscode-nls': path.join(__dirname, '../src/fillers/vscode-nls.ts'), - }), - ], -}).then((result) => { - if (result.errors.length > 0) { - console.error(result.errors); - } - if (result.warnings.length > 0) { - console.error(result.warnings); - } + 'vscode-nls': path.join(__dirname, '../src/fillers/vscode-nls.ts') + }) + ] }); -cp.spawnSync(process.execPath, [path.join(__dirname, './bundle.js')], { stdio: 'inherit', stderr: 'inherit' }); +/** + * @param {'dev'|'min'} type + * @param {string} entryPoint + * @param {string} banner + */ +function buildOneAMD(type, entryPoint, banner) { + /** @type {import('esbuild').BuildOptions} */ + const options = { + entryPoints: [entryPoint], + bundle: true, + target: 'esnext', + format: 'iife', + define: { + AMD: true + }, + external: ['*/cssMode'], + globalName: 'moduleExports', + banner: { + js: banner + }, + footer: { + js: 'return moduleExports;\n});' + }, + outdir: `release/${type}/`, + plugins: [ + alias({ + 'monaco-editor-core': path.join(__dirname, '../src/fillers/monaco-editor-core-amd.ts') + }) + ] + }; + if (type === 'min') { + options.minify = true; + } + build(options); +} + +/** + * @param {string} entryPoint + * @param {string} banner + */ +function buildAMD(entryPoint, banner) { + buildOneAMD('dev', entryPoint, banner); + buildOneAMD('min', entryPoint, banner); +} + +buildAMD('src/monaco.contribution.ts', 'define("vs/language/css/monaco.contribution",["vs/editor/editor.api"],()=>{'); +buildAMD('src/cssMode.ts', 'define("vs/language/css/cssMode",["vs/editor/editor.api"],()=>{'); +buildAMD('src/cssWorker.ts', 'define("vs/language/css/cssWorker",[],()=>{'); diff --git a/monaco-css/scripts/bundle.js b/monaco-css/scripts/bundle.js deleted file mode 100644 index 71accd85..00000000 --- a/monaco-css/scripts/bundle.js +++ /dev/null @@ -1,79 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -const requirejs = require('requirejs'); -const path = require('path'); -const fs = require('fs'); -const terser = require('terser'); -const { getBundledFileHeader } = require('../../build/utils'); - -const REPO_ROOT = path.resolve(__dirname, '..', '..'); - -const BUNDLED_FILE_HEADER = getBundledFileHeader(); - -bundleOne('monaco.contribution'); -bundleOne('cssMode', ['vs/language/css/monaco.contribution']); -bundleOne('cssWorker'); - -function bundleOne(moduleId, exclude) { - requirejs.optimize( - { - baseUrl: 'out/amd/', - name: 'vs/language/css/' + moduleId, - out: 'release/dev/' + moduleId + '.js', - exclude: exclude, - paths: { - 'vs/language/css': REPO_ROOT + '/monaco-css/out/amd', - 'vs/language/css/fillers/monaco-editor-core': - REPO_ROOT + '/monaco-css/out/amd/fillers/monaco-editor-core-amd' - }, - optimize: 'none', - packages: [ - { - name: 'vscode-css-languageservice', - location: path.join(REPO_ROOT, 'node_modules/vscode-css-languageservice/lib/umd'), - main: 'cssLanguageService' - }, - { - name: 'vscode-languageserver-types', - location: path.join(REPO_ROOT, 'node_modules/vscode-languageserver-types/lib/umd'), - main: 'main' - }, - { - name: 'vscode-languageserver-textdocument', - location: path.join(REPO_ROOT, 'node_modules/vscode-languageserver-textdocument/lib/umd'), - main: 'main' - }, - { - name: 'vscode-uri', - location: path.join(REPO_ROOT, 'node_modules/vscode-uri/lib/umd'), - main: 'index' - }, - { - name: 'vscode-nls', - location: path.join(REPO_ROOT, 'monaco-css/out/amd/fillers'), - main: 'vscode-nls' - } - ] - }, - async function (buildResponse) { - const devFilePath = path.join(REPO_ROOT, 'monaco-css/release/dev/' + moduleId + '.js'); - const minFilePath = path.join(REPO_ROOT, 'monaco-css/release/min/' + moduleId + '.js'); - const fileContents = fs.readFileSync(devFilePath).toString(); - console.log(); - console.log(`Minifying ${devFilePath}...`); - const result = await terser.minify(fileContents, { - output: { - comments: 'some' - } - }); - console.log(`Done minifying ${devFilePath}.`); - try { - fs.mkdirSync(path.join(REPO_ROOT, 'monaco-css/release/min')); - } catch (err) {} - fs.writeFileSync(minFilePath, BUNDLED_FILE_HEADER + result.code); - } - ); -} diff --git a/monaco-css/src/fillers/monaco-editor-core-amd.ts b/monaco-css/src/fillers/monaco-editor-core-amd.ts index 59874efb..94c0b54e 100644 --- a/monaco-css/src/fillers/monaco-editor-core-amd.ts +++ b/monaco-css/src/fillers/monaco-editor-core-amd.ts @@ -5,8 +5,4 @@ // Resolves with the global monaco API -declare var define; - -define([], function () { - return (self).monaco; -}); +export = (self).monaco; diff --git a/monaco-css/src/monaco.contribution.ts b/monaco-css/src/monaco.contribution.ts index c857ae55..c7055c3c 100644 --- a/monaco-css/src/monaco.contribution.ts +++ b/monaco-css/src/monaco.contribution.ts @@ -218,8 +218,15 @@ export const lessDefaults: LanguageServiceDefaults = new LanguageServiceDefaults // --- Registration to monaco editor --- +declare var AMD: any; +declare var require: any; + function getMode(): Promise { - return import('./cssMode'); + if (AMD) { + return new Promise((resolve, reject) => { require(['vs/language/css/cssMode'], resolve, reject); }); + } else { + return import('./cssMode'); + } } languages.onLanguage('less', () => {