- provide custom schema request service

- make sure that on-demand loading of schemas works as in VSCode
- bump version of plugin
This commit is contained in:
Igor Nesterenko 2018-07-28 23:15:58 +03:00
parent 0e6ea95f4f
commit 5e33eb349b
6 changed files with 22 additions and 7 deletions

View file

@ -1,6 +1,6 @@
{
"name": "monaco-json",
"version": "2.1.1",
"version": "2.1.2",
"description": "JSON plugin for the Monaco Editor",
"scripts": {
"compile": "mrmdir ./out && tsc -p ./src/tsconfig.json && tsc -p ./src/tsconfig.esm.json",

View file

@ -11,6 +11,11 @@ import IWorkerContext = monaco.worker.IWorkerContext;
import * as jsonService from 'vscode-json-languageservice';
import * as ls from 'vscode-languageserver-types';
let defaultSchemaRequestService;
if (typeof fetch !== 'undefined'){
defaultSchemaRequestService = function (url) { return fetch(url).then(response => response.text())};
}
class PromiseAdapter<T> implements jsonService.Thenable<T> {
private wrapped: monaco.Promise<T>;
@ -49,7 +54,10 @@ export class JSONWorker {
this._ctx = ctx;
this._languageSettings = createData.languageSettings;
this._languageId = createData.languageId;
this._languageService = jsonService.getLanguageService({ promiseConstructor: PromiseAdapter });
this._languageService = jsonService.getLanguageService({
schemaRequestService: createData.enableSchemaRequest && defaultSchemaRequestService,
promiseConstructor: PromiseAdapter
});
this._languageService.configure(this._languageSettings);
}
@ -114,6 +122,7 @@ export class JSONWorker {
export interface ICreateData {
languageId: string;
languageSettings: jsonService.LanguageSettings;
enableSchemaRequest: boolean;
}
export function create(ctx: IWorkerContext, createData: ICreateData): JSONWorker {

View file

@ -44,8 +44,9 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua
const diagnosticDefault: monaco.languages.json.DiagnosticsOptions = {
validate: true,
allowComments: true,
schemas: []
}
schemas: [],
enableSchemaRequest: false
};
const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault);

4
src/monaco.d.ts vendored
View file

@ -30,6 +30,10 @@ declare module monaco.languages.json {
*/
readonly schema?: any;
}[];
/**
* If set, the schema service would load schema content on-demand with 'fetch' if available, otherwise content would be taken from `schemas` property
*/
readonly enableSchemaRequest? : boolean
}
export interface LanguageServiceDefaults {

View file

@ -69,7 +69,8 @@ export class WorkerManager {
// passed in to the create() method
createData: {
languageSettings: this._defaults.diagnosticsOptions,
languageId: this._defaults.languageId
languageId: this._defaults.languageId,
enableSchemaRequest: this._defaults.diagnosticsOptions.enableSchemaRequest
}
});