- 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", "name": "monaco-json",
"version": "2.1.1", "version": "2.1.2",
"description": "JSON plugin for the Monaco Editor", "description": "JSON plugin for the Monaco Editor",
"scripts": { "scripts": {
"compile": "mrmdir ./out && tsc -p ./src/tsconfig.json && tsc -p ./src/tsconfig.esm.json", "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 jsonService from 'vscode-json-languageservice';
import * as ls from 'vscode-languageserver-types'; 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> { class PromiseAdapter<T> implements jsonService.Thenable<T> {
private wrapped: monaco.Promise<T>; private wrapped: monaco.Promise<T>;
@ -49,7 +54,10 @@ export class JSONWorker {
this._ctx = ctx; this._ctx = ctx;
this._languageSettings = createData.languageSettings; this._languageSettings = createData.languageSettings;
this._languageId = createData.languageId; 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); this._languageService.configure(this._languageSettings);
} }
@ -114,6 +122,7 @@ export class JSONWorker {
export interface ICreateData { export interface ICreateData {
languageId: string; languageId: string;
languageSettings: jsonService.LanguageSettings; languageSettings: jsonService.LanguageSettings;
enableSchemaRequest: boolean;
} }
export function create(ctx: IWorkerContext, createData: ICreateData): JSONWorker { 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 = { const diagnosticDefault: monaco.languages.json.DiagnosticsOptions = {
validate: true, validate: true,
allowComments: true, allowComments: true,
schemas: [] schemas: [],
} enableSchemaRequest: false
};
const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault); const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault);

6
src/monaco.d.ts vendored
View file

@ -30,6 +30,10 @@ declare module monaco.languages.json {
*/ */
readonly schema?: any; 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 { export interface LanguageServiceDefaults {
@ -39,4 +43,4 @@ declare module monaco.languages.json {
} }
export var jsonDefaults: LanguageServiceDefaults; export var jsonDefaults: LanguageServiceDefaults;
} }

View file

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

View file

@ -106,4 +106,4 @@
</script> </script>
</body> </body>
</html> </html>