diff --git a/.eslintrc.yaml b/.eslintrc.yaml index 39c5cec..8393208 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -20,4 +20,5 @@ rules: node/no-extraneous-import: off node/no-unpublished-import: off + node/no-unsupported-features/es-syntax: off node/no-unsupported-features/node-builtins: off diff --git a/.gitignore b/.gitignore index a7b8b8d..8864477 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ dist/ node_modules/ -/out/ /lib/ *.log *.tgz diff --git a/build.js b/build.js new file mode 100755 index 0000000..14bd5d1 --- /dev/null +++ b/build.js @@ -0,0 +1,43 @@ +const { promises: fs } = require('fs'); +const { join } = require('path'); + +const { build } = require('esbuild'); + +const { dependencies, peerDependencies } = require('./package.json'); + +fs.rm(join(__dirname, 'lib'), { force: true, recursive: true }) + .then(() => + build({ + entryPoints: ['src/monaco.contribution.ts', 'src/yaml.worker.ts'], + bundle: true, + external: Object.keys({ ...dependencies, ...peerDependencies }), + logLevel: 'info', + outdir: 'lib/esm', + sourcemap: true, + format: 'esm', + target: ['es2019'], + plugins: [ + { + name: 'alias', + setup({ onResolve }) { + onResolve({ filter: /^prettier$/ }, () => ({ + path: 'prettier/standalone', + external: true, + })); + onResolve({ filter: /vscode-nls/ }, () => ({ + path: require.resolve('./src/fillers/vscode-nls.ts'), + })); + onResolve({ filter: /\/umd\// }, (args) => ({ + path: require.resolve(args.path.replace(/\/umd\//, '/esm/'), { + paths: [args.resolveDir], + }), + })); + }, + }, + ], + }), + ) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/package-lock.json b/package-lock.json index 2a65320..b0a6d5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,6 +6,7 @@ "dev": true, "packages": { "": { + "name": "monaco-yaml", "version": "3.0.1", "dev": true, "license": "MIT", @@ -15,19 +16,18 @@ "dependencies": { "@types/json-schema": "^7.0.9", "js-yaml": "^3.14.1", + "prettier": "2.0.5", "yaml-ast-parser-custom-tags": "^0.0.43" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^4.29.0", "@typescript-eslint/parser": "^4.29.0", + "esbuild": "^0.12.20", "eslint": "^7.32.0", "eslint-config-remcohaszing": "^3.5.0", "husky": "^7.0.1", "lint-staged": "^11.1.1", "monaco-editor": "^0.26.1", - "monaco-plugin-helpers": "^1.0.3", - "prettier": "2.0.5", - "rimraf": "^3.0.2", "typescript": "^4.3.5", "yaml-language-server": "^0.11.1" }, @@ -3484,6 +3484,16 @@ "es6-promise": "^4.0.3" } }, + "node_modules/esbuild": { + "version": "0.12.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.20.tgz", + "integrity": "sha512-u7+0qTo9Z64MD9PhooEngCmzyEYJ6ovFhPp8PLNh3UasR5Ihjv6HWVXqm8uHmasdQlpsAf0IsY4U0YVUfCpt4Q==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -6947,32 +6957,6 @@ "integrity": "sha512-mm45nUrBDk0DgZKgbD7+bhDOtcAFNGPJJRAdS6Su1kTGl6XEgC7U3xOmDUW/0RrLf+jlvCGaqLvD4p2VjwuwwQ==", "dev": true }, - "node_modules/monaco-plugin-helpers": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/monaco-plugin-helpers/-/monaco-plugin-helpers-1.0.3.tgz", - "integrity": "sha512-6AYI3ONAy8ki74qG2JqtFrLdiJHQlgeO5l4Rwr0OMyIpGXhc94y5rZuFxOtgGkxgSrZfHSwOt/MulUNZ/mOQOw==", - "dev": true, - "dependencies": { - "typescript": "^2.7.2" - }, - "bin": { - "mcopy": "bin/mcopy", - "mrmdir": "bin/mrmdir" - } - }, - "node_modules/monaco-plugin-helpers/node_modules/typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "node_modules/monaco-yaml": { "resolved": "", "link": true @@ -8468,7 +8452,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", - "dev": true, "bin": { "prettier": "bin-prettier.js" }, @@ -14403,6 +14386,12 @@ "es6-promise": "^4.0.3" } }, + "esbuild": { + "version": "0.12.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.20.tgz", + "integrity": "sha512-u7+0qTo9Z64MD9PhooEngCmzyEYJ6ovFhPp8PLNh3UasR5Ihjv6HWVXqm8uHmasdQlpsAf0IsY4U0YVUfCpt4Q==", + "dev": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -17038,38 +17027,20 @@ "integrity": "sha512-mm45nUrBDk0DgZKgbD7+bhDOtcAFNGPJJRAdS6Su1kTGl6XEgC7U3xOmDUW/0RrLf+jlvCGaqLvD4p2VjwuwwQ==", "dev": true }, - "monaco-plugin-helpers": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/monaco-plugin-helpers/-/monaco-plugin-helpers-1.0.3.tgz", - "integrity": "sha512-6AYI3ONAy8ki74qG2JqtFrLdiJHQlgeO5l4Rwr0OMyIpGXhc94y5rZuFxOtgGkxgSrZfHSwOt/MulUNZ/mOQOw==", - "dev": true, - "requires": { - "typescript": "^2.7.2" - }, - "dependencies": { - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true - } - } - }, "monaco-yaml": { "version": "file:", "requires": { "@types/json-schema": "^7.0.9", "@typescript-eslint/eslint-plugin": "^4.29.0", "@typescript-eslint/parser": "^4.29.0", + "esbuild": "^0.12.20", "eslint": "^7.32.0", "eslint-config-remcohaszing": "^3.5.0", "husky": "^7.0.1", "js-yaml": "^3.14.1", "lint-staged": "^11.1.1", "monaco-editor": "^0.26.1", - "monaco-plugin-helpers": "^1.0.3", "prettier": "2.0.5", - "rimraf": "^3.0.2", "typescript": "^4.3.5", "webpack-example": "file:examples/webpack", "yaml-ast-parser-custom-tags": "^0.0.43", @@ -19775,6 +19746,12 @@ "es6-promise": "^4.0.3" } }, + "esbuild": { + "version": "0.12.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.20.tgz", + "integrity": "sha512-u7+0qTo9Z64MD9PhooEngCmzyEYJ6ovFhPp8PLNh3UasR5Ihjv6HWVXqm8uHmasdQlpsAf0IsY4U0YVUfCpt4Q==", + "dev": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -22410,23 +22387,6 @@ "integrity": "sha512-mm45nUrBDk0DgZKgbD7+bhDOtcAFNGPJJRAdS6Su1kTGl6XEgC7U3xOmDUW/0RrLf+jlvCGaqLvD4p2VjwuwwQ==", "dev": true }, - "monaco-plugin-helpers": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/monaco-plugin-helpers/-/monaco-plugin-helpers-1.0.3.tgz", - "integrity": "sha512-6AYI3ONAy8ki74qG2JqtFrLdiJHQlgeO5l4Rwr0OMyIpGXhc94y5rZuFxOtgGkxgSrZfHSwOt/MulUNZ/mOQOw==", - "dev": true, - "requires": { - "typescript": "^2.7.2" - }, - "dependencies": { - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true - } - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -23519,8 +23479,7 @@ "prettier": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", - "dev": true + "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==" }, "prettier-linter-helpers": { "version": "1.0.0", @@ -25815,9 +25774,9 @@ "requires": { "@fortawesome/fontawesome-free": "^5.15.4", "css-loader": "^6.2.0", - "css-minimizer-webpack-plugin": "*", + "css-minimizer-webpack-plugin": "^3.0.2", "html-webpack-plugin": "^5.3.2", - "mini-css-extract-plugin": "*", + "mini-css-extract-plugin": "^2.2.0", "monaco-editor": "^0.26.1", "monaco-yaml": "file:../..", "webpack": "^5.48.0", @@ -27201,8 +27160,7 @@ "prettier": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", - "dev": true + "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==" }, "prettier-linter-helpers": { "version": "1.0.0", @@ -29497,9 +29455,9 @@ "requires": { "@fortawesome/fontawesome-free": "^5.15.4", "css-loader": "^6.2.0", - "css-minimizer-webpack-plugin": "*", + "css-minimizer-webpack-plugin": "^3.0.2", "html-webpack-plugin": "^5.3.2", - "mini-css-extract-plugin": "*", + "mini-css-extract-plugin": "^2.2.0", "monaco-editor": "^0.26.1", "monaco-yaml": "file:../..", "webpack": "^5.48.0", diff --git a/package.json b/package.json index da14128..20cd023 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,7 @@ "description": "YAML plugin for the Monaco Editor", "homepage": "https://monaco-yaml.js.org", "scripts": { - "watch": "tsc -p ./src --watch", - "compile": "rimraf ./out && tsc", - "bundle": "rimraf ./lib && node ./scripts/bundle-esm", - "prepack": "npm run compile && npm run bundle", + "prepack": "node build.js", "prepare": "husky install", "lint": "eslint . && prettier --check ." }, @@ -36,6 +33,7 @@ "dependencies": { "@types/json-schema": "^7.0.9", "js-yaml": "^3.14.1", + "prettier": "2.0.5", "yaml-ast-parser-custom-tags": "^0.0.43" }, "peerDependencies": { @@ -44,14 +42,12 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "^4.29.0", "@typescript-eslint/parser": "^4.29.0", + "esbuild": "^0.12.20", "eslint": "^7.32.0", "eslint-config-remcohaszing": "^3.5.0", "husky": "^7.0.1", "lint-staged": "^11.1.1", "monaco-editor": "^0.26.1", - "monaco-plugin-helpers": "^1.0.3", - "prettier": "2.0.5", - "rimraf": "^3.0.2", "typescript": "^4.3.5", "yaml-language-server": "^0.11.1" }, diff --git a/scripts/bundle-esm.js b/scripts/bundle-esm.js deleted file mode 100644 index 5e0540c..0000000 --- a/scripts/bundle-esm.js +++ /dev/null @@ -1,58 +0,0 @@ -const { join } = require('path'); - -const helpers = require('monaco-plugin-helpers'); - -const REPO_ROOT = join(__dirname, '../'); - -helpers.packageESM({ - repoRoot: REPO_ROOT, - esmSource: 'out/esm', - esmDestination: 'lib/esm', - entryPoints: ['monaco.contribution.js', 'yamlMode.js', 'yaml.worker.js'], - resolveAlias: { - 'vscode-nls': join(REPO_ROOT, 'out/esm/fillers/vscode-nls.js'), - 'vscode-json-languageservice/lib/umd/services/jsonValidation': join( - REPO_ROOT, - 'node_modules/vscode-json-languageservice/lib/esm/services/jsonValidation.js', - ), - 'vscode-json-languageservice': join( - REPO_ROOT, - 'node_modules/vscode-json-languageservice/lib/esm/jsonLanguageService.js', - ), - 'vscode-json-languageservice/lib/umd/services/jsonHover': join( - REPO_ROOT, - 'node_modules/vscode-json-languageservice/lib/esm/services/jsonHover.js', - ), - 'vscode-json-languageservice/lib/umd/services/jsonDocumentSymbols': join( - REPO_ROOT, - 'node_modules/vscode-json-languageservice/lib/esm/services/jsonDocumentSymbols.js', - ), - 'vscode-json-languageservice/lib/umd/services/jsonSchemaService': join( - REPO_ROOT, - 'node_modules/vscode-json-languageservice/lib/esm/services/jsonSchemaService.js', - ), - - 'vscode-json-languageservice/lib/umd/services/jsonCompletion': join( - REPO_ROOT, - 'node_modules/vscode-json-languageservice/lib/esm/services/jsonCompletion.js', - ), - 'vscode-json-languageservice/lib/umd/services/jsonDefinition': join( - REPO_ROOT, - 'node_modules/vscode-json-languageservice/lib/esm/services/jsonDefinition.js', - ), - 'yaml-language-server': join( - REPO_ROOT, - 'node_modules/yaml-language-server/lib/esm/languageservice/yamlLanguageService.js', - ), - prettier: join(REPO_ROOT, 'node_modules/prettier/standalone.js'), - 'prettier/parser-yaml': join(REPO_ROOT, 'node_modules/prettier/parser-yaml.js'), - }, - resolveSkip: ['monaco-editor', 'monaco-editor-core', 'js-yaml', 'yaml-ast-parser-custom-tags'], - destinationFolderSimplification: { - // eslint-disable-next-line camelcase - node_modules: '_deps', - 'jsonc-parser/lib/esm': 'jsonc-parser', - 'vscode-languageserver-types/lib/esm': 'vscode-languageserver-types', - 'vscode-uri/lib/esm': 'vscode-uri', - }, -}); diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index 9ca97fb..4f44610 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -10,7 +10,7 @@ import { Uri, } from 'monaco-editor/esm/vs/editor/editor.api'; import * as ls from 'vscode-languageserver-types'; -import { CustomFormatterOptions } from 'yaml-language-server'; +import { CustomFormatterOptions } from 'yaml-language-server/lib/esm/languageservice/yamlLanguageService'; import { LanguageServiceDefaultsImpl } from './monaco.contribution'; import { YAMLWorker } from './yamlWorker'; diff --git a/src/yamlWorker.ts b/src/yamlWorker.ts index f8b535a..ab732ae 100644 --- a/src/yamlWorker.ts +++ b/src/yamlWorker.ts @@ -1,6 +1,6 @@ import { worker } from 'monaco-editor/esm/vs/editor/editor.api'; import * as ls from 'vscode-languageserver-types'; -import * as yamlService from 'yaml-language-server'; +import * as yamlService from 'yaml-language-server/lib/esm/languageservice/yamlLanguageService'; let defaultSchemaRequestService: (url: string) => PromiseLike;