diff --git a/packages/core/src/generators/Generate.ts b/packages/core/src/generators/Generate.ts index ad1b17354d..4a8d9adebe 100644 --- a/packages/core/src/generators/Generate.ts +++ b/packages/core/src/generators/Generate.ts @@ -28,9 +28,7 @@ import { generateJsonSchema } from './schema'; import { createControlElement, generateDefaultUISchema } from './uischema'; export const Generate: { - // TODO fix @typescript-eslint/ban-types - // eslint-disable-next-line @typescript-eslint/ban-types - jsonSchema(instance: Object, options?: any): JsonSchema; + jsonSchema(instance: unknown, options?: any): JsonSchema; uiSchema( jsonSchema: JsonSchema, layoutType?: string, diff --git a/packages/core/src/generators/schema.ts b/packages/core/src/generators/schema.ts index f3b1d2324b..623966e97f 100644 --- a/packages/core/src/generators/schema.ts +++ b/packages/core/src/generators/schema.ts @@ -52,9 +52,7 @@ class Gen { private findOption: (props: Properties) => (optionName: string) => any ) {} - // TODO fix @typescript-eslint/ban-types - // eslint-disable-next-line @typescript-eslint/ban-types - schemaObject = (data: Object): JsonSchema4 => { + schemaObject = (data: Record): JsonSchema4 => { const props: Properties = this.properties(data); const schema: JsonSchema4 = { type: 'object', @@ -140,14 +138,12 @@ class Gen { /** * Generate a JSON schema based on the given data and any additional options. - * @param {Object} instance the data to create a JSON schema for + * @param {unknown} instance the data to create a JSON schema for * @param {any} options any additional options that may alter the generated JSON schema * @returns {JsonSchema} the generated schema */ export const generateJsonSchema = ( - // TODO fix @typescript-eslint/ban-types - // eslint-disable-next-line @typescript-eslint/ban-types - instance: Object, + instance: unknown, options: any = {} ): JsonSchema4 => { const findOption = @@ -177,5 +173,5 @@ export const generateJsonSchema = ( const gen = new Gen(findOption); - return gen.schemaObject(instance); + return gen.property(instance); }; diff --git a/packages/core/test/generators/schema.test.ts b/packages/core/test/generators/schema.test.ts index 679defefa3..634375b929 100644 --- a/packages/core/test/generators/schema.test.ts +++ b/packages/core/test/generators/schema.test.ts @@ -26,6 +26,37 @@ import test from 'ava'; import { generateJsonSchema } from '../../src/generators/schema'; +test('default schema generation root primitive types', (t) => { + t.deepEqual(generateJsonSchema('hello'), { + type: 'string', + }); + t.deepEqual(generateJsonSchema(42), { + type: 'integer', + }); + t.deepEqual(generateJsonSchema(3.14), { + type: 'number', + }); + t.deepEqual(generateJsonSchema(true), { + type: 'boolean', + }); + t.deepEqual(generateJsonSchema(null), { + type: 'null', + }); +}); + +test('default schema generation root array types', (t) => { + t.deepEqual(generateJsonSchema([]), { + type: 'array', + items: {}, + }); + t.deepEqual(generateJsonSchema([1, 2]), { + type: 'array', + items: { + type: 'integer', + }, + }); +}); + test('default schema generation basic types', (t) => { const instance: any = { boolean: false, diff --git a/packages/vue-vuetify/dev/views/ExampleView.vue b/packages/vue-vuetify/dev/views/ExampleView.vue index 653993197b..0c6dba0793 100644 --- a/packages/vue-vuetify/dev/views/ExampleView.vue +++ b/packages/vue-vuetify/dev/views/ExampleView.vue @@ -94,7 +94,6 @@ const onChange = (event: JsonFormsChangeEvent): void => { monaco.Uri.parse(toDataUri(props.example.name)), event.data !== undefined ? JSON.stringify(event.data, null, 2) : '', ); - state.data = event.data; } errors.value = event.errors; }; diff --git a/packages/vue/src/components/JsonForms.vue b/packages/vue/src/components/JsonForms.vue index d21863e574..97b1071805 100644 --- a/packages/vue/src/components/JsonForms.vue +++ b/packages/vue/src/components/JsonForms.vue @@ -8,6 +8,7 @@