From 5e33eb349b019e16f75ef6b5aa43103f9e2db63d Mon Sep 17 00:00:00 2001 From: Igor Nesterenko Date: Sat, 28 Jul 2018 23:15:58 +0300 Subject: [PATCH] - provide custom schema request service - make sure that on-demand loading of schemas works as in VSCode - bump version of plugin --- package.json | 2 +- src/jsonWorker.ts | 11 ++++++++++- src/monaco.contribution.ts | 5 +++-- src/monaco.d.ts | 6 +++++- src/workerManager.ts | 3 ++- test/index.html | 2 +- 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 63d36813..bd584d46 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/jsonWorker.ts b/src/jsonWorker.ts index bbe0cf8e..a717e6e4 100644 --- a/src/jsonWorker.ts +++ b/src/jsonWorker.ts @@ -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 implements jsonService.Thenable { private wrapped: monaco.Promise; @@ -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 { diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index ba5e0edf..5bd0c267 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -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); diff --git a/src/monaco.d.ts b/src/monaco.d.ts index d79f3a35..1d44d13b 100644 --- a/src/monaco.d.ts +++ b/src/monaco.d.ts @@ -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 { @@ -39,4 +43,4 @@ declare module monaco.languages.json { } export var jsonDefaults: LanguageServiceDefaults; -} \ No newline at end of file +} diff --git a/src/workerManager.ts b/src/workerManager.ts index def95b76..ebd4fce0 100644 --- a/src/workerManager.ts +++ b/src/workerManager.ts @@ -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 } }); diff --git a/test/index.html b/test/index.html index a4e5d921..f6eba4c6 100644 --- a/test/index.html +++ b/test/index.html @@ -106,4 +106,4 @@ - \ No newline at end of file +