Przeglądaj źródła

Adopt new scripts in `monaco-json`

Alex Dima 3 lat temu
rodzic
commit
bc3274a7c8

+ 4 - 20
monaco-json/README.md

@@ -10,30 +10,14 @@ JSON language plugin for the Monaco Editor. It provides the following features w
 - Syntax highlighting
 - Color decorators for all properties matching a schema containing `format: "color-hex"'` (non-standard schema extension)
 
-Schemas can be provided by configuration. See [here](https://github.com/Microsoft/monaco-json/blob/master/monaco.d.ts)
+Schemas can be provided by configuration. See [`monaco.d.ts`](./monaco.d.ts)
 for the API that the JSON plugin offers to configure the JSON language support.
 
-Internally the JSON plugin uses the [vscode-json-languageservice](https://github.com/Microsoft/vscode-json-languageservice)
+Internally the JSON plugin uses the [`vscode-json-languageservice`](https://github.com/microsoft/vscode-json-languageservice)
 node module, providing the implementation of the features listed above. The same module is also used
-in [Visual Studio Code](https://github.com/Microsoft/vscode) to power the JSON editing experience.
-
-## Issues
-
-Please file issues concerning `monaco-json` in the [`monaco-editor` repository](https://github.com/Microsoft/monaco-editor/issues).
-
-## Installing
-
-This npm module is bundled and distributed in the [monaco-editor](https://www.npmjs.com/package/monaco-editor) npm module.
+in [Visual Studio Code](https://github.com/microsoft/vscode) to power the JSON editing experience.
 
 ## Development
 
-- `git clone https://github.com/Microsoft/monaco-json`
-- `npm install .`
-- compile with `npm run compile`
 - watch with `npm run watch`
-- `npm run prepublishOnly`
-- open `$/monaco-json/test/index.html` in your favorite browser.
-
-## License
-
-[MIT](https://github.com/Microsoft/monaco-json/blob/master/LICENSE.md)
+- compile with `npm run prepublishOnly`

+ 1 - 2
monaco-json/package.json

@@ -1,7 +1,6 @@
 {
 	"scripts": {
-		"compile": "../node_modules/.bin/mrmdir ./out && ../node_modules/.bin/tsc -p ./src/tsconfig.json && ../node_modules/.bin/tsc -p ./src/tsconfig.esm.json && node ./scripts/dts && ../node_modules/.bin/prettier --write ./monaco.d.ts",
 		"watch": "../node_modules/.bin/tsc -p ./src --watch",
-		"prepublishOnly": "../node_modules/.bin/mrmdir ./release && npm run compile && node ./scripts/release.js && node ./scripts/bundle && ../node_modules/.bin/mcopy ./out/esm/monaco.contribution.d.ts ./release/esm/monaco.contribution.d.ts && ../node_modules/.bin/mcopy ./out/esm/fillers/monaco-editor-core.d.ts ./release/esm/fillers/monaco-editor-core.d.ts"
+		"prepublishOnly": "node ./scripts/build"
 	}
 }

+ 43 - 0
monaco-json/scripts/build.js

@@ -0,0 +1,43 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+const esbuild = require('esbuild');
+const alias = require('esbuild-plugin-alias');
+const path = require('path');
+const cp = require('child_process');
+const { copyFile, removeDir, tsc, dts } = require('../../build/utils');
+
+removeDir(`monaco-json/release`);
+removeDir(`monaco-json/out`);
+
+tsc(`monaco-json/src/tsconfig.json`);
+
+dts(`monaco-json/out/amd/monaco.contribution.d.ts`, `monaco-json/monaco.d.ts`, 'monaco.languages.json');
+
+esbuild.build({
+	entryPoints: ['src/jsonMode.ts', 'src/json.worker.ts', 'src/monaco.contribution.ts'],
+	bundle: true,
+	target: 'esnext',
+	format: 'esm',
+	external: ['monaco-editor-core', '*/jsonMode'],
+	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);
+	}
+});
+
+copyFile('monaco-json/out/amd/monaco.contribution.d.ts', 'monaco-json/release/esm/monaco.contribution.d.ts');
+copyFile('monaco-json/out/amd/fillers/monaco-editor-core.d.ts', 'monaco-json/release/esm/fillers/monaco-editor-core.d.ts');
+
+cp.spawnSync(process.execPath, [path.join(__dirname, './bundle.js')], { stdio: 'inherit', stderr: 'inherit' });

+ 10 - 16
monaco-json/scripts/bundle.js

@@ -1,24 +1,17 @@
+/*---------------------------------------------------------------------------------------------
+ *  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 helpers = require('monaco-plugin-helpers');
+const terser = require('terser');
+const { getBundledFileHeader } = require('../../build/utils');
 
 const REPO_ROOT = path.resolve(__dirname, '..', '..');
 
-const sha1 = helpers.getGitVersion(REPO_ROOT);
-const semver = require('../../package.json').version;
-const headerVersion = semver + '(' + sha1 + ')';
-
-const BUNDLED_FILE_HEADER = [
-	'/*!-----------------------------------------------------------------------------',
-	' * Copyright (c) Microsoft Corporation. All rights reserved.',
-	' * monaco-json version: ' + headerVersion,
-	' * Released under the MIT license',
-	' * https://github.com/Microsoft/monaco-json/blob/master/LICENSE.md',
-	' *-----------------------------------------------------------------------------*/',
-	''
-].join('\n');
+const BUNDLED_FILE_HEADER = getBundledFileHeader();
 
 bundleOne('monaco.contribution');
 bundleOne('jsonMode', ['vs/language/json/monaco.contribution']);
@@ -74,8 +67,9 @@ function bundleOne(moduleId, exclude) {
 			const devFilePath = path.join(REPO_ROOT, 'monaco-json/release/dev/' + moduleId + '.js');
 			const minFilePath = path.join(REPO_ROOT, 'monaco-json/release/min/' + moduleId + '.js');
 			const fileContents = fs.readFileSync(devFilePath).toString();
+			console.log();
 			console.log(`Minifying ${devFilePath}...`);
-			const result = await Terser.minify(fileContents, {
+			const result = await terser.minify(fileContents, {
 				output: {
 					comments: 'some'
 				}

+ 0 - 41
monaco-json/scripts/dts.js

@@ -1,41 +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 path = require('path');
-const fs = require('fs');
-
-const REPO_ROOT = path.join(__dirname, '../');
-const SRC_PATH = path.join(REPO_ROOT, 'out/amd/monaco.contribution.d.ts');
-const DST_PATH = path.join(REPO_ROOT, 'monaco.d.ts');
-
-const lines = fs
-	.readFileSync(SRC_PATH)
-	.toString()
-	.split(/\r\n|\r|\n/);
-let result = [
-	`/*---------------------------------------------------------------------------------------------`,
-	` *  Copyright (c) Microsoft Corporation. All rights reserved.`,
-	` *  Licensed under the MIT License. See License.txt in the project root for license information.`,
-	` *--------------------------------------------------------------------------------------------*/`,
-	``,
-	`/// <reference path="../node_modules/monaco-editor-core/monaco.d.ts" />`,
-	``,
-	`declare namespace monaco.languages.json {`
-];
-for (let line of lines) {
-	if (/^import/.test(line)) {
-		continue;
-	}
-	line = line.replace(/    /g, '\t');
-	line = line.replace(/declare /g, '');
-	if (line.length > 0) {
-		line = `\t${line}`;
-		result.push(line);
-	}
-}
-result.push(`}`);
-result.push(``);
-
-fs.writeFileSync(DST_PATH, result.join('\n'));

+ 0 - 27
monaco-json/scripts/release.js

@@ -1,27 +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 path = require('path');
-const helpers = require('monaco-plugin-helpers');
-
-const REPO_ROOT = path.join(__dirname, '../../');
-
-helpers.packageESM({
-	repoRoot: REPO_ROOT,
-	esmSource: 'monaco-json/out/esm',
-	esmDestination: 'monaco-json/release/esm',
-	entryPoints: ['monaco.contribution.js', 'jsonMode.js', 'json.worker.js'],
-	resolveAlias: {
-		'vscode-nls': path.join(REPO_ROOT, 'monaco-json/out/esm/fillers/vscode-nls.js')
-	},
-	resolveSkip: ['monaco-editor-core'],
-	destinationFolderSimplification: {
-		node_modules: '_deps',
-		'jsonc-parser/lib/esm': 'jsonc-parser',
-		'vscode-languageserver-types/lib/esm': 'vscode-languageserver-types',
-		'vscode-uri/lib/esm': 'vscode-uri',
-		'vscode-json-languageservice/lib/esm': 'vscode-json-languageservice'
-	}
-});

+ 50 - 20
monaco-json/src/tokenization.ts

@@ -69,13 +69,13 @@ class ParentsStack {
 class JSONState implements languages.IState {
 	private _state: languages.IState;
 
-	public scanError: json.ScanError;
+	public scanError: ScanError;
 	public lastWasColon: boolean;
 	public parents: ParentsStack | null;
 
 	constructor(
 		state: languages.IState,
-		scanError: json.ScanError,
+		scanError: ScanError,
 		lastWasColon: boolean,
 		parents: ParentsStack | null
 	) {
@@ -112,6 +112,36 @@ class JSONState implements languages.IState {
 	}
 }
 
+const enum ScanError {
+	None = 0,
+	UnexpectedEndOfComment = 1,
+	UnexpectedEndOfString = 2,
+	UnexpectedEndOfNumber = 3,
+	InvalidUnicode = 4,
+	InvalidEscapeCharacter = 5,
+	InvalidCharacter = 6
+}
+
+const enum SyntaxKind {
+	OpenBraceToken = 1,
+	CloseBraceToken = 2,
+	OpenBracketToken = 3,
+	CloseBracketToken = 4,
+	CommaToken = 5,
+	ColonToken = 6,
+	NullKeyword = 7,
+	TrueKeyword = 8,
+	FalseKeyword = 9,
+	StringLiteral = 10,
+	NumericLiteral = 11,
+	LineCommentTrivia = 12,
+	BlockCommentTrivia = 13,
+	LineBreakTrivia = 14,
+	Trivia = 15,
+	Unknown = 16,
+	EOF = 17
+}
+
 function tokenize(
 	comments: boolean,
 	line: string,
@@ -124,11 +154,11 @@ function tokenize(
 	let adjustOffset = false;
 
 	switch (state.scanError) {
-		case json.ScanError.UnexpectedEndOfString:
+		case ScanError.UnexpectedEndOfString:
 			line = '"' + line;
 			numberOfInsertedCharacters = 1;
 			break;
-		case json.ScanError.UnexpectedEndOfComment:
+		case ScanError.UnexpectedEndOfComment:
 			line = '/*' + line;
 			numberOfInsertedCharacters = 2;
 			break;
@@ -147,8 +177,8 @@ function tokenize(
 		let offset = offsetDelta + scanner.getPosition();
 		let type = '';
 
-		const kind = scanner.scan();
-		if (kind === json.SyntaxKind.EOF) {
+		const kind = <SyntaxKind><any>scanner.scan();
+		if (kind === SyntaxKind.EOF) {
 			break;
 		}
 
@@ -168,50 +198,50 @@ function tokenize(
 
 		// brackets and type
 		switch (kind) {
-			case json.SyntaxKind.OpenBraceToken:
+			case SyntaxKind.OpenBraceToken:
 				parents = ParentsStack.push(parents, JSONParent.Object);
 				type = TOKEN_DELIM_OBJECT;
 				lastWasColon = false;
 				break;
-			case json.SyntaxKind.CloseBraceToken:
+			case SyntaxKind.CloseBraceToken:
 				parents = ParentsStack.pop(parents);
 				type = TOKEN_DELIM_OBJECT;
 				lastWasColon = false;
 				break;
-			case json.SyntaxKind.OpenBracketToken:
+			case SyntaxKind.OpenBracketToken:
 				parents = ParentsStack.push(parents, JSONParent.Array);
 				type = TOKEN_DELIM_ARRAY;
 				lastWasColon = false;
 				break;
-			case json.SyntaxKind.CloseBracketToken:
+			case SyntaxKind.CloseBracketToken:
 				parents = ParentsStack.pop(parents);
 				type = TOKEN_DELIM_ARRAY;
 				lastWasColon = false;
 				break;
-			case json.SyntaxKind.ColonToken:
+			case SyntaxKind.ColonToken:
 				type = TOKEN_DELIM_COLON;
 				lastWasColon = true;
 				break;
-			case json.SyntaxKind.CommaToken:
+			case SyntaxKind.CommaToken:
 				type = TOKEN_DELIM_COMMA;
 				lastWasColon = false;
 				break;
-			case json.SyntaxKind.TrueKeyword:
-			case json.SyntaxKind.FalseKeyword:
+			case SyntaxKind.TrueKeyword:
+			case SyntaxKind.FalseKeyword:
 				type = TOKEN_VALUE_BOOLEAN;
 				lastWasColon = false;
 				break;
-			case json.SyntaxKind.NullKeyword:
+			case SyntaxKind.NullKeyword:
 				type = TOKEN_VALUE_NULL;
 				lastWasColon = false;
 				break;
-			case json.SyntaxKind.StringLiteral:
+			case SyntaxKind.StringLiteral:
 				const currentParent = parents ? parents.type : JSONParent.Object;
 				const inArray = currentParent === JSONParent.Array;
 				type = lastWasColon || inArray ? TOKEN_VALUE_STRING : TOKEN_PROPERTY_NAME;
 				lastWasColon = false;
 				break;
-			case json.SyntaxKind.NumericLiteral:
+			case SyntaxKind.NumericLiteral:
 				type = TOKEN_VALUE_NUMBER;
 				lastWasColon = false;
 				break;
@@ -220,10 +250,10 @@ function tokenize(
 		// comments, iff enabled
 		if (comments) {
 			switch (kind) {
-				case json.SyntaxKind.LineCommentTrivia:
+				case SyntaxKind.LineCommentTrivia:
 					type = TOKEN_COMMENT_LINE;
 					break;
-				case json.SyntaxKind.BlockCommentTrivia:
+				case SyntaxKind.BlockCommentTrivia:
 					type = TOKEN_COMMENT_BLOCK;
 					break;
 			}
@@ -231,7 +261,7 @@ function tokenize(
 
 		ret.endState = new JSONState(
 			state.getStateData(),
-			scanner.getTokenError(),
+			<ScanError><any>scanner.getTokenError(),
 			lastWasColon,
 			parents
 		);

+ 0 - 10
monaco-json/src/tsconfig.esm.json

@@ -1,10 +0,0 @@
-{
-	"compilerOptions": {
-		"declaration": true,
-		"module": "esnext",
-		"moduleResolution": "node",
-		"outDir": "../out/esm",
-		"target": "es5",
-		"lib": ["dom", "es5", "es2015.collection", "es2015.promise", "es2015.iterable"]
-	}
-}