diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a5ff8df..1d30e33e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,6 +50,9 @@ jobs: - name: Package using webpack plugin run: npm run package-for-smoketest --prefix webpack-plugin + - name: Package using esbuild + run: npm run package-for-smoketest-esbuild + - name: Run smoke test run: npm run smoketest diff --git a/build/fs.ts b/build/fs.ts index a076fb76..1fc659a2 100644 --- a/build/fs.ts +++ b/build/fs.ts @@ -62,7 +62,7 @@ export function removeDir(_dirPath: string, keep?: (filename: string) => boolean for (const entry of entries) { const filePath = path.join(dirPath, entry); const relativeFilePath = path.join(relativeDirPath, entry); - if (keep(relativeFilePath)) { + if (keep!(relativeFilePath)) { keepsFiles = true; continue; } diff --git a/package.json b/package.json index 916c11c1..276f3d2d 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "scripts": { "build-website": "ts-node ./build/website && npm run typedoc", "import-typescript": "ts-node ./build/importTypescript", + "package-for-smoketest-esbuild": "ts-node ./test/smoke/package-esbuild", "playwright-install": "node ./node_modules/playwright/install.js", "playwright-install-deps": "playwright install-deps", "postinstall": "ts-node ./build/postinstall", diff --git a/test/smoke/esbuild/esbuild.html b/test/smoke/esbuild/esbuild.html new file mode 100644 index 00000000..912427e8 --- /dev/null +++ b/test/smoke/esbuild/esbuild.html @@ -0,0 +1,10 @@ + + +
+ + + + + + + diff --git a/test/smoke/esbuild/index.js b/test/smoke/esbuild/index.js new file mode 100644 index 00000000..c4f598a5 --- /dev/null +++ b/test/smoke/esbuild/index.js @@ -0,0 +1,21 @@ +import * as monaco from '../../../release/esm/vs/editor/editor.main.js'; + +self.MonacoEnvironment = { + getWorkerUrl: function (moduleId, label) { + if (label === 'json') { + return './out/vs/language/json/json.worker.js'; + } + if (label === 'css' || label === 'scss' || label === 'less') { + return './out/vs/language/css/css.worker.js'; + } + if (label === 'html' || label === 'handlebars' || label === 'razor') { + return './out/vs/language/html/html.worker.js'; + } + if (label === 'typescript' || label === 'javascript') { + return './out/vs/language/typescript/ts.worker.js'; + } + return './out/vs/editor/editor.worker.js'; + } +}; + +window.monacoAPI = monaco; diff --git a/test/smoke/package-esbuild.ts b/test/smoke/package-esbuild.ts new file mode 100644 index 00000000..504d73ea --- /dev/null +++ b/test/smoke/package-esbuild.ts @@ -0,0 +1,58 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as esbuild from 'esbuild'; +import * as path from 'path'; +import { removeDir } from '../../build/fs'; + +removeDir('test/smoke/esbuild/out', (entry) => /esbuild.html$/.test(entry)); + +const workerEntryPoints = [ + 'vs/language/json/json.worker.js', + 'vs/language/css/css.worker.js', + 'vs/language/html/html.worker.js', + 'vs/language/typescript/ts.worker.js', + 'vs/editor/editor.worker.js' +]; + +build({ + entryPoints: workerEntryPoints.map((entry) => path.join(__dirname, `../../release/esm/${entry}`)), + bundle: true, + format: 'iife', + logLevel: 'silent', + outbase: path.join(__dirname, '../../release/esm/'), + outdir: path.join(__dirname, 'esbuild/out') +}); + +build({ + entryPoints: [path.join(__dirname, 'esbuild/index.js')], + bundle: true, + format: 'iife', + logLevel: 'silent', + outdir: path.join(__dirname, 'esbuild/out'), + loader: { + '.ttf': 'file' + } +}); + +function build(opts: esbuild.BuildOptions) { + esbuild.build(opts).then((result) => { + const errors = result.errors; + const warnings = result.warnings.filter((w) => { + return ( + w.text !== + 'Top-level "this" will be replaced with undefined since this file is an ECMAScript module' + ); + }); + if (errors.length > 0) { + console.log(`errors:`); + console.error(errors); + } + if (warnings.length > 0) { + console.log(`warnings:`); + console.error(warnings); + } + }); +} diff --git a/test/smoke/runner.js b/test/smoke/runner.js index 958dd0e3..394e7887 100644 --- a/test/smoke/runner.js +++ b/test/smoke/runner.js @@ -38,7 +38,7 @@ async function runTests() { // uncomment to shortcircuit and run a specific combo // await runTest('webpack', 'chromium'); return; - for (const type of ['amd', 'webpack']) { + for (const type of ['amd', 'webpack', 'esbuild']) { await runTest(type, 'chromium'); await runTest(type, 'firefox'); // await runTest(type, 'webkit'); diff --git a/test/smoke/smoke.test.js b/test/smoke/smoke.test.js index e994849f..b29a2b87 100644 --- a/test/smoke/smoke.test.js +++ b/test/smoke/smoke.test.js @@ -16,7 +16,9 @@ const TESTS_TYPE = process.env.TESTS_TYPE || 'amd'; const URL = TESTS_TYPE === 'amd' ? `http://127.0.0.1:${PORT}/test/smoke/amd.html` - : `http://127.0.0.1:${PORT}/test/smoke/webpack/webpack.html`; + : TESTS_TYPE === 'webpack' + ? `http://127.0.0.1:${PORT}/test/smoke/webpack/webpack.html` + : `http://127.0.0.1:${PORT}/test/smoke/esbuild/esbuild.html`; suite(`Smoke Test '${TESTS_TYPE}' on '${browserType}'`, () => { /** @type {playwright.Browser} */