From e441fd4498ac8379f6a5c6b8b740940d9a884ccc Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Thu, 11 Nov 2021 22:13:12 +0100 Subject: [PATCH] Improve `monaco-css` scripts --- build/utils.js | 62 ++++++++++++++++++++++++++++++++++++ monaco-css/README.md | 20 ++---------- monaco-css/scripts/build.js | 6 ++-- monaco-css/scripts/bundle.js | 9 ++++-- monaco-css/scripts/dts.js | 41 ------------------------ monaco-css/test/index.html | 13 ++++---- 6 files changed, 81 insertions(+), 70 deletions(-) delete mode 100644 monaco-css/scripts/dts.js diff --git a/build/utils.js b/build/utils.js index e8c8c4a9..fe9278b3 100644 --- a/build/utils.js +++ b/build/utils.js @@ -5,10 +5,13 @@ const fs = require('fs'); const path = require('path'); +const cp = require('child_process'); const REPO_ROOT = path.join(__dirname, '..'); /** + * Copy a file. + * * @param {string} _source * @param {string} _destination */ @@ -41,6 +44,8 @@ function copyFile(_source, _destination) { exports.copyFile = copyFile; /** + * Remove a directory and all its contents. + * * @param {string} _dirPath */ function removeDir(_dirPath) { @@ -68,3 +73,60 @@ function removeDir(_dirPath) { } } exports.removeDir = removeDir; + +/** + * Launch the typescript compiler synchronously over a project. + * + * @param {string} projectPath + */ +function tsc(_projectPath) { + const projectPath = path.join(REPO_ROOT, _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; + +/** + * Transform an external .d.ts file to an internal .d.ts file + * + * @param {string} _source + * @param {string} _destination + * @param {string} namespace + */ +function dts(_source, _destination, namespace) { + const source = path.join(REPO_ROOT, _source); + const destination = path.join(REPO_ROOT, _destination); + + const lines = fs + .readFileSync(source) + .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.`, + ` *--------------------------------------------------------------------------------------------*/`, + ``, + `/// `, + ``, + `declare namespace ${namespace} {` + ]; + 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(destination, result.join('\n')); +} +exports.dts = dts; diff --git a/monaco-css/README.md b/monaco-css/README.md index 6b4e68bc..2e079fe3 100644 --- a/monaco-css/README.md +++ b/monaco-css/README.md @@ -9,29 +9,15 @@ CSS language plugin for the Monaco Editor. It provides the following features wh - Document Symbols - Color Decorators -Linting an be configured through the API. See [here](https://github.com/Microsoft/monaco-css/blob/master/src/monaco.d.ts) for the API that the +Linting an be configured through the API. See [`monaco.d.ts`](./monaco.d.ts) for the API that the CSS plugin offers to configure the CSS/LESS/SCSS language support. -Internally the CSS plugin uses the [vscode-css-languageservice](https://github.com/Microsoft/vscode-css-languageservice) +Internally the CSS plugin uses the [`vscode-css-languageservice`](https://github.com/microsoft/vscode-css-languageservice) node module, providing the implementation of the functionally listed above. The same module is also used -in [Visual Studio Code](https://github.com/Microsoft/vscode) to power the CSS, LESS and SCSS editing experience. - -## Issues - -Please file issues concering `monaco-css` 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 CSS, LESS and SCSS editing experience. ## Development -- `npm install .` -- compile with `npm run compile` - watch with `npm run watch` - `npm run prepublishOnly` - open `$/monaco-css/test/index.html` in your favorite browser. - -## License - -[MIT](https://github.com/Microsoft/monaco-css/blob/master/LICENSE.md) diff --git a/monaco-css/scripts/build.js b/monaco-css/scripts/build.js index 0b77b2c7..35b41695 100644 --- a/monaco-css/scripts/build.js +++ b/monaco-css/scripts/build.js @@ -7,14 +7,14 @@ const esbuild = require('esbuild'); const alias = require('esbuild-plugin-alias'); const path = require('path'); const cp = require('child_process'); -const { copyFile, removeDir } = require('../../build/utils'); +const { copyFile, removeDir, tsc, dts } = require('../../build/utils'); removeDir(`monaco-css/release`); removeDir(`monaco-css/out`); -cp.spawnSync(process.execPath, [path.join(__dirname, '../../node_modules/typescript/lib/tsc.js'), '-p', path.join(__dirname, '../src/tsconfig.json')], { stdio: 'inherit', stderr: 'inherit' }); +tsc(`monaco-css/src/tsconfig.json`); -cp.spawnSync(process.execPath, [path.join(__dirname, './dts.js')], { stdio: 'inherit', stderr: 'inherit' }); +dts(`monaco-css/out/amd/monaco.contribution.d.ts`, `monaco-css/monaco.d.ts`, 'monaco.languages.css'); cp.spawnSync(process.execPath, [path.join(__dirname, '../../node_modules/prettier/bin-prettier.js'), '--write', path.join(__dirname, '../monaco.d.ts')], { stdio: 'inherit', stderr: 'inherit' }); diff --git a/monaco-css/scripts/bundle.js b/monaco-css/scripts/bundle.js index 49709bc5..a37d11f0 100644 --- a/monaco-css/scripts/bundle.js +++ b/monaco-css/scripts/bundle.js @@ -1,3 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * 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'); @@ -13,9 +18,9 @@ const headerVersion = semver + '(' + sha1 + ')'; const BUNDLED_FILE_HEADER = [ '/*!-----------------------------------------------------------------------------', ' * Copyright (c) Microsoft Corporation. All rights reserved.', - ' * monaco-css version: ' + headerVersion, + ' * Version: ' + headerVersion, ' * Released under the MIT license', - ' * https://github.com/Microsoft/monaco-css/blob/master/LICENSE.md', + ' * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt', ' *-----------------------------------------------------------------------------*/', '' ].join('\n'); diff --git a/monaco-css/scripts/dts.js b/monaco-css/scripts/dts.js deleted file mode 100644 index bb585c76..00000000 --- a/monaco-css/scripts/dts.js +++ /dev/null @@ -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.`, - ` *--------------------------------------------------------------------------------------------*/`, - ``, - `/// `, - ``, - `declare namespace monaco.languages.css {` -]; -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')); diff --git a/monaco-css/test/index.html b/monaco-css/test/index.html index d858437b..8d345999 100644 --- a/monaco-css/test/index.html +++ b/monaco-css/test/index.html @@ -1,12 +1,11 @@ - @@ -16,9 +15,9 @@ - - - + + +