mirror of
https://github.com/danbulant/monaco-yaml
synced 2026-07-06 03:20:43 +00:00
Merge branch 'main' into flatten-output-paths
This commit is contained in:
commit
ef35d1be2b
21 changed files with 120 additions and 58 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
```
|
```
|
||||||
|
|
|
||||||
22
build.js
22
build.js
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
2
examples/demo/src/types.d.ts
vendored
2
examples/demo/src/types.d.ts
vendored
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# Minimal Vite Example
|
|
||||||
|
|
||||||
This minimal example shows how `monaco-yaml` can be used with [Vite](https://vitejs.dev).
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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'), {
|
||||||
|
|
|
||||||
29
examples/vite-example/README.md
Normal file
29
examples/vite-example/README.md
Normal 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.
|
||||||
|
|
@ -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
8
index.d.ts
vendored
|
|
@ -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.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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';
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue