Przeglądaj źródła

Add smoketest for esbuild packaging

Alex Dima 3 lat temu
rodzic
commit
208f9218f9

+ 3 - 0
.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
 

+ 1 - 1
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;
 			}

+ 1 - 0
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",

+ 10 - 0
test/smoke/esbuild/esbuild.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+	</head>
+	<body>
+		<div id="editor-container" style="position: absolute; width: 500px; height: 400px"></div>
+		<script type="text/javascript" src="out/index.js"></script>
+	</body>
+</html>

+ 21 - 0
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;

+ 58 - 0
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);
+		}
+	});
+}

+ 1 - 1
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');

+ 3 - 1
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} */