Merge branch 'main' into update-dependencies

This commit is contained in:
Remco Haszing 2021-11-10 21:40:56 +01:00
commit 5507d53dee
No known key found for this signature in database
GPG key ID: 40D9F5FE9155FD3C
7 changed files with 126 additions and 12742 deletions

View file

@ -42,16 +42,15 @@ jobs:
with: { node-version: 16 } with: { node-version: 16 }
- run: npm ci - run: npm ci
- run: npx tsc - run: npx tsc
# release:
release: # runs-on: ubuntu-latest
runs-on: ubuntu-latest # needs: [eslint, pack, prettier, tsc]
needs: [eslint, pack, prettier, tsc] # if: startsWith(github.ref, 'refs/tags/')
if: startsWith(github.ref, 'refs/tags/') # steps:
steps: # - uses: actions/checkout@v2
- uses: actions/checkout@v2 # - uses: actions/setup-node@v2
- uses: actions/setup-node@v2 # with: { node-version: 16 }
with: { node-version: 16 } # - run: npm ci
- run: npm ci # - run: npm publish
- run: npm publish # env:
env: # NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

1
.npmrc Normal file
View file

@ -0,0 +1 @@
lockfile-version = 3

View file

@ -85,7 +85,43 @@ editor.create(document.createElement('editor'), {
}); });
``` ```
Also make sure to register the web worker. Also make sure to register the web worker. When using Webpack 5, this looks like the code below.
Other bundlers may use a different syntax, but the idea is the same. Languages you dont used can be
omitted.
```js
window.MonacoEnvironment = {
getWorker(moduleId, label) {
switch (label) {
case 'editorWorkerService':
return new Worker(new URL('monaco-editor/esm/vs/editor/editor.worker', import.meta.url));
case 'css':
case 'less':
case 'scss':
return new Worker(new URL('monaco-editor/esm/vs/language/css/css.worker', import.meta.url));
case 'handlebars':
case 'html':
case 'razor':
return new Worker(
new URL('monaco-editor/esm/vs/language/html/html.worker', import.meta.url),
);
case 'json':
return new Worker(
new URL('monaco-editor/esm/vs/language/json/json.worker', import.meta.url),
);
case 'javascript':
case 'typescript':
return new Worker(
new URL('monaco-editor/esm/vs/language/typescript/ts.worker', import.meta.url),
);
case 'yaml':
return new Worker(new URL('monaco-yaml/lib/esm/yaml.worker', import.meta.url));
default:
throw new Error(`Unknown label ${label}`);
}
},
};
```
## Examples ## Examples
@ -96,6 +132,66 @@ A running example: ![demo-image](test-demo.png)
Some usage examples can be found in the Some usage examples can be found in the
[examples](https://github.com/remcohaszing/monaco-yaml/tree/main/examples) directory. [examples](https://github.com/remcohaszing/monaco-yaml/tree/main/examples) directory.
## FAQ
### Does this work with the Monaco UMD bundle?
No. Only ESM is supported.
### Does this work with Monaco Editor from a CDN?
No, because these use a UMD bundle, which isnt supported.
### Does this work with `@monaco-editor/loader` or `@monaco-editor/react`?
No. These packages pull in the Monaco UMD bundle from a CDN. Because UMD isnt supported, neither
are these packages.
### Is the web worker necessary?
Yes. The web worker provides the core functionality of `monaco-yaml`.
### Does it work without a bundler?
No. `monaco-yaml` uses dependencies from `node_modules`, so they can be deduped and your bundle size
is decreased. This comes at the cost of not being able to use it without a bundler.
### How do I integrate `monaco-yaml` with a framework? (Angular, React, Vue, etc.)
`monaco-yaml` only uses the Monaco Editor. Its not tied to a framework, all thats needed is a DOM
node to attach the Monaco Editor to. See the
[Monaco Editor examples](https://github.com/microsoft/monaco-editor/tree/main/monaco-editor-samples)
for examples on how to integrate Monaco Editor in your project, then configure `monaco-yaml` as
described above.
### Does `monaco-yaml` work with `create-react-app`?
Yes, but youll have to eject. See
[#92 (comment)](https://github.com/remcohaszing/monaco-yaml/issues/92#issuecomment-905836058) for
details.
### Why isnt `monaco-yaml` working? Official Monaco language extensions do work.
This is most likely due to the fact that `monaco-yaml` is using a different instance of the
`monaco-editor` package than you are. This is something youll want to avoid regardless of
`monaco-editor`, because it means your bundle is significantly larger than it needs to be. This is
likely caused by one of the following issues:
- A code splitting misconfiguration
To solve this, try inspecting your bundle using for example
[webpack-bundle-analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer). If
`monaco-editor` is in there twice, this is the issue. Its up to you to solve this, as its
project-specific.
- Youre using a package which imports `monaco-editor` for you, but its using a different version.
You can find out why the `monaco-editor` is installed using `npm ls monaco-editor` or
`yarn why monaco-editor`. It should exist only once, but its ok if its deduped.
You may be able to solve this by deleting your `node_modules` folder and `package-lock.json` or
`yarn.lock`, then running `npm install` or `yarn install` respectively.
## Contributing ## Contributing
Please see our [contributing guidelines](CONTRIBUTING.md) Please see our [contributing guidelines](CONTRIBUTING.md)

View file

@ -13,7 +13,7 @@
"css-minimizer-webpack-plugin": "^3.0.0", "css-minimizer-webpack-plugin": "^3.0.0",
"html-webpack-plugin": "^5.0.0", "html-webpack-plugin": "^5.0.0",
"mini-css-extract-plugin": "^2.0.0", "mini-css-extract-plugin": "^2.0.0",
"monaco-editor": "^0.29.0", "monaco-editor": "^0.30.0",
"monaco-yaml": "file:../..", "monaco-yaml": "file:../..",
"ts-loader": "^9.0.0", "ts-loader": "^9.0.0",
"typescript": "^4.0.0", "typescript": "^4.0.0",

12730
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{ {
"name": "monaco-yaml", "name": "monaco-yaml",
"version": "3.2.1", "version": "4.0.0-alpha.0",
"description": "YAML plugin for the Monaco Editor", "description": "YAML plugin for the Monaco Editor",
"homepage": "https://monaco-yaml.js.org", "homepage": "https://monaco-yaml.js.org",
"scripts": { "scripts": {
@ -47,7 +47,7 @@
"yaml": "^2.0.0-8" "yaml": "^2.0.0-8"
}, },
"peerDependencies": { "peerDependencies": {
"monaco-editor": ">=0.22" "monaco-editor": ">=0.30"
}, },
"devDependencies": { "devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.0.0", "@typescript-eslint/eslint-plugin": "^4.0.0",
@ -57,7 +57,7 @@
"eslint-config-remcohaszing": "^3.0.0", "eslint-config-remcohaszing": "^3.0.0",
"husky": "^7.0.0", "husky": "^7.0.0",
"lint-staged": "^11.0.0", "lint-staged": "^11.0.0",
"monaco-editor": "^0.29.0", "monaco-editor": "^0.30.0",
"type-fest": "^2.0.0", "type-fest": "^2.0.0",
"typescript": "^4.0.0", "typescript": "^4.0.0",
"yaml-language-server": "^1.0.0" "yaml-language-server": "^1.0.0"

View file

@ -63,13 +63,13 @@ export function createDiagnosticsAdapter(
const model = editor.getModel(resource); const model = editor.getModel(resource);
// Return value from getModel can be null if model not found // Return value from getModel can be null if model not found
// (e.g. if user navigates away from editor) // (e.g. if user navigates away from editor)
if (model && model.getModeId() === languageId) { if (model && model.getLanguageId() === languageId) {
editor.setModelMarkers(model, languageId, markers); editor.setModelMarkers(model, languageId, markers);
} }
}; };
const onModelAdd = (model: editor.IModel): void => { const onModelAdd = (model: editor.IModel): void => {
if (model.getModeId() !== languageId) { if (model.getLanguageId() !== languageId) {
return; return;
} }
@ -107,7 +107,7 @@ export function createDiagnosticsAdapter(
}); });
defaults.onDidChange(() => { defaults.onDidChange(() => {
for (const model of editor.getModels()) { for (const model of editor.getModels()) {
if (model.getModeId() === languageId) { if (model.getLanguageId() === languageId) {
onModelRemoved(model); onModelRemoved(model);
onModelAdd(model); onModelAdd(model);
} }