Merge branch 'main' into flatten-output-paths

This commit is contained in:
Remco Haszing 2021-11-23 15:09:11 +01:00
commit ef35d1be2b
No known key found for this signature in database
GPG key ID: 40D9F5FE9155FD3C
21 changed files with 120 additions and 58 deletions

View file

@ -8,6 +8,7 @@ rules:
'@typescript-eslint/no-shadow': off '@typescript-eslint/no-shadow': off
'@typescript-eslint/no-unnecessary-condition': off '@typescript-eslint/no-unnecessary-condition': off
import/extensions: off
import/no-extraneous-dependencies: off import/no-extraneous-dependencies: off
import/no-unresolved: off import/no-unresolved: off

View file

@ -1,5 +1,15 @@
# Contributing # Contributing
## Prerequisites
The following are required to start working on this project:
- [Git](https://git-scm.com)
- [NodeJS](https://nodejs.org) 16 or higher
- [npm](https://github.com/npm/cli) 8.1.2 or higher
## Getting started
To get started with contributing, clone the repository and install its dependencies. To get started with contributing, clone the repository and install its dependencies.
```sh ```sh
@ -8,16 +18,19 @@ cd monaco-yaml
npm ci npm ci
``` ```
## Building
To build the repository, run: To build the repository, run:
```sh ```sh
npm prepack npm run prepack
``` ```
## Running
To test it, run one of the To test it, run one of the
[examples](https://github.com/remcohaszing/monaco-yaml/tree/main/examples). [examples](https://github.com/remcohaszing/monaco-yaml/tree/main/examples).
```sh ```sh
cd examples/webpack-worker-loader npm --workspace demo start
npm start
``` ```

View file

@ -3,7 +3,7 @@ const { build } = require('esbuild');
const { dependencies, peerDependencies } = require('./package.json'); const { dependencies, peerDependencies } = require('./package.json');
build({ build({
entryPoints: ['src/index.ts', 'src/yaml.worker.ts'], entryPoints: ['src/monaco.contribution.ts', 'src/yaml.worker.ts'],
bundle: true, bundle: true,
external: Object.keys({ ...dependencies, ...peerDependencies }), external: Object.keys({ ...dependencies, ...peerDependencies }),
logLevel: 'info', logLevel: 'info',
@ -17,20 +17,8 @@ build({
setup({ onResolve }) { setup({ onResolve }) {
// The yaml language service only imports re-exports of vscode-languageserver-types from // The yaml language service only imports re-exports of vscode-languageserver-types from
// vscode-languageserver. // vscode-languageserver.
onResolve({ filter: /^vscode-languageserver-textdocument$/ }, () => ({ onResolve({ filter: /^vscode-languageserver(\/node|-protocol)?$/ }, () => ({
path: 'vscode-languageserver-textdocument/lib/esm/main.js', path: 'vscode-languageserver-types',
external: true,
}));
// The yaml language service only imports re-exports of vscode-languageserver-types from
// vscode-languageserver.
onResolve({ filter: /^vscode-languageserver(\/node)?$/ }, () => ({
path: 'vscode-languageserver-types/lib/esm/main.js',
external: true,
}));
// The yaml language service only imports re-exports of vscode-languageserver-types from
// vscode-languageserver.
onResolve({ filter: /^vscode-languageserver-(protocol|types)$/ }, () => ({
path: 'vscode-languageserver-types/lib/esm/main.js',
external: true, external: true,
})); }));
// The yaml language service uses path. We can stub it using path-browserify. // The yaml language service uses path. We can stub it using path-browserify.
@ -40,8 +28,8 @@ build({
})); }));
// The main prettier entry point contains all of Prettier. // The main prettier entry point contains all of Prettier.
// The standalone bundle is smaller and works fine for us. // The standalone bundle is smaller and works fine for us.
onResolve({ filter: /^prettier$/ }, () => ({ onResolve({ filter: /^prettier/ }, ({ path }) => ({
path: 'prettier/standalone', path: path === 'prettier' ? 'prettier/standalone.js' : `${path}.js`,
external: true, external: true,
})); }));
// This tiny filler implementation serves all our needs. // This tiny filler implementation serves all our needs.

View file

@ -2,10 +2,30 @@
This demo is deployed to [monaco-yaml.js.org](https://monaco-yaml.js.org). It shows how This demo is deployed to [monaco-yaml.js.org](https://monaco-yaml.js.org). It shows how
`monaco-editor` and `monaco-yaml` can be used with `monaco-editor` and `monaco-yaml` can be used with
[Webpack 5](https://webpack.js.org/concepts/entry-points). To start it, simply run: [Webpack 5](https://webpack.js.org/concepts/entry-points).
## Prerequisites
- [NodeJS](https://nodejs.org) 16 or higher
- [npm](https://github.com/npm/cli) 8.1.2 or higher
## Setup
To run the project locally, clone the repository and set it up:
```sh ```sh
npm start git clone https://github.com/remcohaszing/monaco-yaml
cd monaco-yaml
npm ci
npm run prepack
```
## Running
To start it, simply run:
```sh
npm --workspace demo start
``` ```
The demo will open in your browser. The demo will open in your browser.

View file

@ -184,6 +184,7 @@ ed.onDidChangeCursorPosition(async (event) => {
breadcrumb.setAttribute('role', 'button'); breadcrumb.setAttribute('role', 'button');
breadcrumb.classList.add('breadcrumb'); breadcrumb.classList.add('breadcrumb');
breadcrumb.textContent = symbol.name; breadcrumb.textContent = symbol.name;
breadcrumb.title = symbol.detail;
if (symbol.kind === languages.SymbolKind.Array) { if (symbol.kind === languages.SymbolKind.Array) {
breadcrumb.classList.add('array'); breadcrumb.classList.add('array');
} else if (symbol.kind === languages.SymbolKind.Module) { } else if (symbol.kind === languages.SymbolKind.Module) {

View file

@ -15,7 +15,7 @@ declare module 'monaco-editor/esm/vs/editor/contrib/documentSymbols/documentSymb
): Promise<languages.DocumentSymbol[]>; ): Promise<languages.DocumentSymbol[]>;
} }
declare module 'monaco-editor/esm/vs/editor/editor.worker' { declare module 'monaco-editor/esm/vs/editor/editor.worker.js' {
import { worker } from 'monaco-editor/esm/vs/editor/editor.api'; import { worker } from 'monaco-editor/esm/vs/editor/editor.api';
export function initialize( export function initialize(

View file

@ -1,3 +0,0 @@
# Minimal Vite Example
This minimal example shows how `monaco-yaml` can be used with [Vite](https://vitejs.dev).

View file

@ -7,8 +7,28 @@ Example is based on
[link](https://github.com/microsoft/monaco-editor-samples/tree/main/browser-esm-webpack-monaco-plugin). [link](https://github.com/microsoft/monaco-editor-samples/tree/main/browser-esm-webpack-monaco-plugin).
To start it, simply run: To start it, simply run:
## Prerequisites
- [NodeJS](https://nodejs.org) 16 or higher
- [npm](https://github.com/npm/cli) 8.1.2 or higher
## Setup
To run the project locally, clone the repository and set it up:
```sh ```sh
npm start git clone https://github.com/remcohaszing/monaco-yaml
cd monaco-yaml
npm ci
npm run prepack
```
## Running
To start it, simply run:
```sh
npm --workspace monaco-editor-webpack-plugin-example start
``` ```
The demo will open in your browser. The demo will open in your browser.

View file

@ -1,7 +1,5 @@
// eslint-disable-next-line import/extensions
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js'; import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
// eslint-disable-next-line import/extensions
export { editor } from 'monaco-editor/esm/vs/editor/editor.api.js'; export { editor } from 'monaco-editor/esm/vs/editor/editor.api.js';
export { setDiagnosticsOptions } from 'monaco-yaml'; export { setDiagnosticsOptions } from 'monaco-yaml';
export default monaco; export default monaco;

View file

@ -4,7 +4,6 @@ boolean: true
`; `;
async function create() { async function create() {
// eslint-disable-next-line import/extensions
const monaco = await import('./main.js'); const monaco = await import('./main.js');
monaco.editor.create(document.querySelector('.editor'), { monaco.editor.create(document.querySelector('.editor'), {

View file

@ -0,0 +1,29 @@
# Vite Example
This minimal example shows how `monaco-yaml` can be used with [Vite](https://vitejs.dev).
## Prerequisites
- [NodeJS](https://nodejs.org) 16 or higher
- [npm](https://github.com/npm/cli) 8.1.2 or higher
## Setup
To run the project locally, clone the repository and set it up:
```sh
git clone https://github.com/remcohaszing/monaco-yaml
cd monaco-yaml
npm ci
npm run prepack
```
## Running
To start it, simply run:
```sh
npm --workspace vite-example start
```
The demo will be available on http://localhost:3000.

View file

@ -1,5 +1,5 @@
{ {
"name": "minimal-vite", "name": "vite-example",
"version": "1.0.0", "version": "1.0.0",
"private": true, "private": true,
"scripts": { "scripts": {

8
index.d.ts vendored
View file

@ -70,14 +70,6 @@ declare module 'monaco-editor/esm/vs/editor/editor.api' {
*/ */
readonly isKubernetes?: boolean; readonly isKubernetes?: boolean;
/**
* If specified, this prefix will be added to all on demand schema requests
*
* @default undefined
* @deprecated
*/
readonly prefix?: string;
/** /**
* A list of known schemas and/or associations of schemas to file names. * A list of known schemas and/or associations of schemas to file names.
* *

View file

@ -1,4 +1,4 @@
import { Emitter, languages } from 'monaco-editor/esm/vs/editor/editor.api'; import { Emitter, languages } from 'monaco-editor/esm/vs/editor/editor.api.js';
import { languageId } from './constants'; import { languageId } from './constants';
import { setupMode } from './yamlMode'; import { setupMode } from './yamlMode';

View file

@ -6,9 +6,9 @@ import {
Position, Position,
Range, Range,
Uri, Uri,
} from 'monaco-editor/esm/vs/editor/editor.api'; } from 'monaco-editor/esm/vs/editor/editor.api.js';
import * as ls from 'vscode-languageserver-types'; import * as ls from 'vscode-languageserver-types';
import { CustomFormatterOptions } from 'yaml-language-server/lib/esm/languageservice/yamlLanguageService'; import { CustomFormatterOptions } from 'yaml-language-server/lib/esm/languageservice/yamlLanguageService.js';
import { languageId } from './constants'; import { languageId } from './constants';
import { YAMLWorker } from './yamlWorker'; import { YAMLWorker } from './yamlWorker';
@ -140,7 +140,7 @@ function toRange(range: ls.Range): Range {
); );
} }
function toCompletionItemKind(kind: languages.CompletionItemKind): languages.CompletionItemKind { function toCompletionItemKind(kind: ls.CompletionItemKind): languages.CompletionItemKind {
const mItemKind = languages.CompletionItemKind; const mItemKind = languages.CompletionItemKind;
switch (kind) { switch (kind) {
@ -341,7 +341,7 @@ function toSymbolKind(kind: ls.SymbolKind): languages.SymbolKind {
function toDocumentSymbol(item: ls.DocumentSymbol): languages.DocumentSymbol { function toDocumentSymbol(item: ls.DocumentSymbol): languages.DocumentSymbol {
return { return {
detail: '', detail: item.detail || '',
range: toRange(item.range), range: toRange(item.range),
name: item.name, name: item.name,
kind: toSymbolKind(item.kind), kind: toSymbolKind(item.kind),

View file

@ -1,4 +1,4 @@
import { editor, languages } from 'monaco-editor/esm/vs/editor/editor.api'; import { editor, languages } from 'monaco-editor/esm/vs/editor/editor.api.js';
import { WorkerAccessor } from './languageFeatures'; import { WorkerAccessor } from './languageFeatures';
import { YAMLWorker } from './yamlWorker'; import { YAMLWorker } from './yamlWorker';
@ -48,7 +48,6 @@ export function createWorkerManager(
createData: { createData: {
languageSettings: defaults.diagnosticsOptions, languageSettings: defaults.diagnosticsOptions,
enableSchemaRequest: defaults.diagnosticsOptions.enableSchemaRequest, enableSchemaRequest: defaults.diagnosticsOptions.enableSchemaRequest,
prefix: defaults.diagnosticsOptions.prefix,
isKubernetes: defaults.diagnosticsOptions.isKubernetes, isKubernetes: defaults.diagnosticsOptions.isKubernetes,
customTags: defaults.diagnosticsOptions.customTags, customTags: defaults.diagnosticsOptions.customTags,
}, },

View file

@ -1,4 +1,4 @@
import { initialize } from 'monaco-editor/esm/vs/editor/editor.worker'; import { initialize } from 'monaco-editor/esm/vs/editor/editor.worker.js';
import { createYAMLWorker, ICreateData } from './yamlWorker'; import { createYAMLWorker, ICreateData } from './yamlWorker';

View file

@ -1,4 +1,4 @@
import { languages } from 'monaco-editor/esm/vs/editor/editor.api'; import { languages } from 'monaco-editor/esm/vs/editor/editor.api.js';
import { languageId } from './constants'; import { languageId } from './constants';
import { import {

View file

@ -1,4 +1,4 @@
import { worker } from 'monaco-editor/esm/vs/editor/editor.api'; import { worker } from 'monaco-editor/esm/vs/editor/editor.api.js';
import { Promisable } from 'type-fest'; import { Promisable } from 'type-fest';
import { TextDocument } from 'vscode-languageserver-textdocument'; import { TextDocument } from 'vscode-languageserver-textdocument';
import * as ls from 'vscode-languageserver-types'; import * as ls from 'vscode-languageserver-types';
@ -6,14 +6,16 @@ import {
CustomFormatterOptions, CustomFormatterOptions,
getLanguageService, getLanguageService,
LanguageSettings, LanguageSettings,
} from 'yaml-language-server/lib/esm/languageservice/yamlLanguageService'; } from 'yaml-language-server/lib/esm/languageservice/yamlLanguageService.js';
import { languageId } from './constants'; import { languageId } from './constants';
let defaultSchemaRequestService: (url: string) => Promise<string>; async function schemaRequestService(uri: string): Promise<string> {
const response = await fetch(uri);
if (typeof fetch !== 'undefined') { if (response.ok) {
defaultSchemaRequestService = (url) => fetch(url).then((response) => response.text()); return response.text();
}
throw new Error(`Schema request failed for ${uri}`);
} }
export interface YAMLWorker { export interface YAMLWorker {
@ -36,10 +38,14 @@ export interface YAMLWorker {
export function createYAMLWorker( export function createYAMLWorker(
ctx: worker.IWorkerContext, ctx: worker.IWorkerContext,
{ enableSchemaRequest, languageSettings, prefix = '' }: ICreateData, { enableSchemaRequest, languageSettings }: ICreateData,
): YAMLWorker { ): YAMLWorker {
const service = (url: string): Promise<string> => defaultSchemaRequestService(`${prefix}${url}`); const languageService = getLanguageService(
const languageService = getLanguageService(enableSchemaRequest && service, null, null, null); enableSchemaRequest ? schemaRequestService : null,
null,
null,
null,
);
languageService.configure(languageSettings); languageService.configure(languageSettings);
const getTextDocument = (uri: string): TextDocument => { const getTextDocument = (uri: string): TextDocument => {
@ -100,6 +106,5 @@ export function createYAMLWorker(
export interface ICreateData { export interface ICreateData {
languageSettings: LanguageSettings; languageSettings: LanguageSettings;
enableSchemaRequest: boolean; enableSchemaRequest: boolean;
prefix?: string;
isKubernetes?: boolean; isKubernetes?: boolean;
} }