瀏覽代碼

- provide custom schema request service
- make sure that on-demand loading of schemas works as in VSCode
- bump version of plugin

Igor Nesterenko 7 年之前
父節點
當前提交
5e33eb349b
共有 6 個文件被更改,包括 22 次插入7 次删除
  1. 1 1
      package.json
  2. 10 1
      src/jsonWorker.ts
  3. 3 2
      src/monaco.contribution.ts
  4. 5 1
      src/monaco.d.ts
  5. 2 1
      src/workerManager.ts
  6. 1 1
      test/index.html

+ 1 - 1
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",

+ 10 - 1
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<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 {

+ 3 - 2
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);
 

+ 5 - 1
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;
-}
+}

+ 2 - 1
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
 				}
 			});
 

+ 1 - 1
test/index.html

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