From de1c399d384822925ac788f7e63c4bb61d2db01d Mon Sep 17 00:00:00 2001 From: Matatjahu Date: Tue, 2 Nov 2021 12:03:31 +0100 Subject: [PATCH 1/2] fix: use reference to the json-schema draft-07 in monaco editor --- src/services/json-schema.draft-07.ts | 172 +++++++++++++++++++++++++++ src/services/monaco.service.ts | 9 +- 2 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 src/services/json-schema.draft-07.ts diff --git a/src/services/json-schema.draft-07.ts b/src/services/json-schema.draft-07.ts new file mode 100644 index 000000000..0afe74140 --- /dev/null +++ b/src/services/json-schema.draft-07.ts @@ -0,0 +1,172 @@ +export default { + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#" } + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "allOf": [ + { "$ref": "#/definitions/nonNegativeInteger" }, + { "default": 0 } + ] + }, + "simpleTypes": { + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "stringArray": { + "type": "array", + "items": { "type": "string" }, + "uniqueItems": true, + "default": [] + } + }, + "type": ["object", "boolean"], + "properties": { + "$id": { + "type": "string", + "format": "uri-reference" + }, + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "writeOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": { "$ref": "#/definitions/nonNegativeInteger" }, + "minLength": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { "$ref": "#" }, + "items": { + "anyOf": [ + { "$ref": "#" }, + { "$ref": "#/definitions/schemaArray" } + ], + "default": true + }, + "maxItems": { "$ref": "#/definitions/nonNegativeInteger" }, + "minItems": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": { "$ref": "#" }, + "maxProperties": { "$ref": "#/definitions/nonNegativeInteger" }, + "minProperties": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, + "required": { "$ref": "#/definitions/stringArray" }, + "additionalProperties": { "$ref": "#" }, + "definitions": { + "type": "object", + "additionalProperties": { "$ref": "#" }, + "default": {} + }, + "properties": { + "type": "object", + "additionalProperties": { "$ref": "#" }, + "default": {} + }, + "patternProperties": { + "type": "object", + "additionalProperties": { "$ref": "#" }, + "propertyNames": { "format": "regex" }, + "default": {} + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { "$ref": "#" }, + { "$ref": "#/definitions/stringArray" } + ] + } + }, + "propertyNames": { "$ref": "#" }, + "const": true, + "enum": { + "type": "array", + "items": true, + "minItems": 1, + "uniqueItems": true + }, + "type": { + "anyOf": [ + { "$ref": "#/definitions/simpleTypes" }, + { + "type": "array", + "items": { "$ref": "#/definitions/simpleTypes" }, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "format": { "type": "string" }, + "contentMediaType": { "type": "string" }, + "contentEncoding": { "type": "string" }, + "if": { "$ref": "#" }, + "then": { "$ref": "#" }, + "else": { "$ref": "#" }, + "allOf": { "$ref": "#/definitions/schemaArray" }, + "anyOf": { "$ref": "#/definitions/schemaArray" }, + "oneOf": { "$ref": "#/definitions/schemaArray" }, + "not": { "$ref": "#" } + }, + "default": true +} diff --git a/src/services/monaco.service.ts b/src/services/monaco.service.ts index 0df9d0171..a76d89ccd 100644 --- a/src/services/monaco.service.ts +++ b/src/services/monaco.service.ts @@ -7,6 +7,8 @@ import * as monacoAPI from 'monaco-editor/esm/vs/editor/editor.api'; import { SpecificationService } from './specification.service'; import state from '../state'; +import jsonSchemaDraft07 from "./json-schema.draft-07"; + export class MonacoService { private static actualVersion = 'X.X.X'; private static Monaco: any = null; @@ -45,10 +47,15 @@ export class MonacoService { completion: true, schemas: [ { - uri: 'https://www.asyncapi.com/', // id of the schema + uri: 'https://www.asyncapi.com/', // id of the AsyncAPI spec schema fileMatch: ['*'], // associate with all models schema: specs[String(asyncAPIVersion)], }, + { + uri: jsonSchemaDraft07.$id, // id of the draft-07 schema + fileMatch: ['*'], // associate with all models + schema: jsonSchemaDraft07, + } ], } as any; } From fdcd4d2ced89a14ee0fb96868159be48774a8fa5 Mon Sep 17 00:00:00 2001 From: Matatjahu Date: Tue, 2 Nov 2021 12:10:45 +0100 Subject: [PATCH 2/2] fix linter errors --- src/services/json-schema.draft-07.ts | 339 ++++++++++++++------------- src/services/monaco.service.ts | 2 +- 2 files changed, 171 insertions(+), 170 deletions(-) diff --git a/src/services/json-schema.draft-07.ts b/src/services/json-schema.draft-07.ts index 0afe74140..7280809f6 100644 --- a/src/services/json-schema.draft-07.ts +++ b/src/services/json-schema.draft-07.ts @@ -1,172 +1,173 @@ +/* eslint-disable sonarjs/no-duplicate-string */ export default { - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { "$ref": "#" } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "allOf": [ - { "$ref": "#/definitions/nonNegativeInteger" }, - { "default": 0 } - ] - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "items": { "type": "string" }, - "uniqueItems": true, - "default": [] - } + $schema: 'http://json-schema.org/draft-07/schema#', + $id: 'http://json-schema.org/draft-07/schema#', + title: 'Core schema meta-schema', + definitions: { + schemaArray: { + type: 'array', + minItems: 1, + items: { $ref: '#' } + }, + nonNegativeInteger: { + type: 'integer', + minimum: 0 + }, + nonNegativeIntegerDefault0: { + allOf: [ + { $ref: '#/definitions/nonNegativeInteger' }, + { default: 0 } + ] + }, + simpleTypes: { + enum: [ + 'array', + 'boolean', + 'integer', + 'null', + 'number', + 'object', + 'string' + ] + }, + stringArray: { + type: 'array', + items: { type: 'string' }, + uniqueItems: true, + default: [] + } }, - "type": ["object", "boolean"], - "properties": { - "$id": { - "type": "string", - "format": "uri-reference" - }, - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { "$ref": "#/definitions/nonNegativeInteger" }, - "minLength": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { "$ref": "#" }, - "items": { - "anyOf": [ - { "$ref": "#" }, - { "$ref": "#/definitions/schemaArray" } - ], - "default": true - }, - "maxItems": { "$ref": "#/definitions/nonNegativeInteger" }, - "minItems": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { "$ref": "#" }, - "maxProperties": { "$ref": "#/definitions/nonNegativeInteger" }, - "minProperties": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, - "required": { "$ref": "#/definitions/stringArray" }, - "additionalProperties": { "$ref": "#" }, - "definitions": { - "type": "object", - "additionalProperties": { "$ref": "#" }, - "default": {} - }, - "properties": { - "type": "object", - "additionalProperties": { "$ref": "#" }, - "default": {} - }, - "patternProperties": { - "type": "object", - "additionalProperties": { "$ref": "#" }, - "propertyNames": { "format": "regex" }, - "default": {} - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { "$ref": "#" }, - { "$ref": "#/definitions/stringArray" } - ] - } - }, - "propertyNames": { "$ref": "#" }, - "const": true, - "enum": { - "type": "array", - "items": true, - "minItems": 1, - "uniqueItems": true - }, - "type": { - "anyOf": [ - { "$ref": "#/definitions/simpleTypes" }, - { - "type": "array", - "items": { "$ref": "#/definitions/simpleTypes" }, - "minItems": 1, - "uniqueItems": true - } - ] - }, - "format": { "type": "string" }, - "contentMediaType": { "type": "string" }, - "contentEncoding": { "type": "string" }, - "if": { "$ref": "#" }, - "then": { "$ref": "#" }, - "else": { "$ref": "#" }, - "allOf": { "$ref": "#/definitions/schemaArray" }, - "anyOf": { "$ref": "#/definitions/schemaArray" }, - "oneOf": { "$ref": "#/definitions/schemaArray" }, - "not": { "$ref": "#" } + type: ['object', 'boolean'], + properties: { + $id: { + type: 'string', + format: 'uri-reference' + }, + $schema: { + type: 'string', + format: 'uri' + }, + $ref: { + type: 'string', + format: 'uri-reference' + }, + $comment: { + type: 'string' + }, + title: { + type: 'string' + }, + description: { + type: 'string' + }, + default: true, + readOnly: { + type: 'boolean', + default: false + }, + writeOnly: { + type: 'boolean', + default: false + }, + examples: { + type: 'array', + items: true + }, + multipleOf: { + type: 'number', + exclusiveMinimum: 0 + }, + maximum: { + type: 'number' + }, + exclusiveMaximum: { + type: 'number' + }, + minimum: { + type: 'number' + }, + exclusiveMinimum: { + type: 'number' + }, + maxLength: { $ref: '#/definitions/nonNegativeInteger' }, + minLength: { $ref: '#/definitions/nonNegativeIntegerDefault0' }, + pattern: { + type: 'string', + format: 'regex' + }, + additionalItems: { $ref: '#' }, + items: { + anyOf: [ + { $ref: '#' }, + { $ref: '#/definitions/schemaArray' } + ], + default: true + }, + maxItems: { $ref: '#/definitions/nonNegativeInteger' }, + minItems: { $ref: '#/definitions/nonNegativeIntegerDefault0' }, + uniqueItems: { + type: 'boolean', + default: false + }, + contains: { $ref: '#' }, + maxProperties: { $ref: '#/definitions/nonNegativeInteger' }, + minProperties: { $ref: '#/definitions/nonNegativeIntegerDefault0' }, + required: { $ref: '#/definitions/stringArray' }, + additionalProperties: { $ref: '#' }, + definitions: { + type: 'object', + additionalProperties: { $ref: '#' }, + default: {} + }, + properties: { + type: 'object', + additionalProperties: { $ref: '#' }, + default: {} + }, + patternProperties: { + type: 'object', + additionalProperties: { $ref: '#' }, + propertyNames: { format: 'regex' }, + default: {} + }, + dependencies: { + type: 'object', + additionalProperties: { + anyOf: [ + { $ref: '#' }, + { $ref: '#/definitions/stringArray' } + ] + } + }, + propertyNames: { $ref: '#' }, + const: true, + enum: { + type: 'array', + items: true, + minItems: 1, + uniqueItems: true + }, + type: { + anyOf: [ + { $ref: '#/definitions/simpleTypes' }, + { + type: 'array', + items: { $ref: '#/definitions/simpleTypes' }, + minItems: 1, + uniqueItems: true + } + ] + }, + format: { type: 'string' }, + contentMediaType: { type: 'string' }, + contentEncoding: { type: 'string' }, + if: { $ref: '#' }, + then: { $ref: '#' }, + else: { $ref: '#' }, + allOf: { $ref: '#/definitions/schemaArray' }, + anyOf: { $ref: '#/definitions/schemaArray' }, + oneOf: { $ref: '#/definitions/schemaArray' }, + not: { $ref: '#' } }, - "default": true -} + default: true +}; diff --git a/src/services/monaco.service.ts b/src/services/monaco.service.ts index a76d89ccd..f078444a2 100644 --- a/src/services/monaco.service.ts +++ b/src/services/monaco.service.ts @@ -7,7 +7,7 @@ import * as monacoAPI from 'monaco-editor/esm/vs/editor/editor.api'; import { SpecificationService } from './specification.service'; import state from '../state'; -import jsonSchemaDraft07 from "./json-schema.draft-07"; +import jsonSchemaDraft07 from './json-schema.draft-07'; export class MonacoService { private static actualVersion = 'X.X.X';