@elle96/ng-json-schema-manager 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/fesm2022/elle96-ng-json-schema-manager.mjs +1679 -0
- package/fesm2022/elle96-ng-json-schema-manager.mjs.map +1 -0
- package/index.d.ts +204 -0
- package/package.json +28 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elle96-ng-json-schema-manager.mjs","sources":["../../../projects/ng-json-schema-form/src/lib/json-schema-form.service.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-resolver.service.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-validation.service.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-node.component.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-form.component.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-form.module.ts","../../../projects/ng-json-schema-form/src/elle96-ng-json-schema-manager.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n AbstractControl,\n FormArray,\n FormControl,\n FormGroup,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { JsonSchema } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class JsonSchemaFormService {\n buildControl(schema: JsonSchema, value?: unknown, required = false): AbstractControl {\n const effectiveSchema = this.applyCombinators(schema);\n const resolvedType = this.resolveType(effectiveSchema);\n\n if (resolvedType === 'object') {\n const group: Record<string, AbstractControl> = {};\n const properties = effectiveSchema.properties ?? {};\n const requiredFields = new Set(effectiveSchema.required ?? []);\n const valueObject = this.isRecord(value) ? value : {};\n\n for (const [key, propertySchema] of Object.entries(properties)) {\n const childValue = valueObject[key];\n group[key] = this.buildControl(propertySchema, childValue, requiredFields.has(key));\n }\n\n // Include dynamic keys from value (patternProperties/additionalProperties).\n for (const key of Object.keys(valueObject)) {\n if (group[key]) {\n continue;\n }\n const dynamicSchema = this.resolveDynamicSchema(effectiveSchema, key);\n group[key] = this.buildControl(dynamicSchema ?? {}, valueObject[key], false);\n }\n\n const control = new FormGroup(group, {\n validators: this.buildValidators(effectiveSchema, required),\n });\n if (effectiveSchema.readOnly) {\n control.disable({ emitEvent: false });\n }\n return control;\n }\n\n if (resolvedType === 'array') {\n const controls: AbstractControl[] = [];\n const initialItems = Array.isArray(value) ? value : [];\n const minItems = effectiveSchema.minItems ?? 0;\n const prefixItems = effectiveSchema.prefixItems ?? [];\n const tupleLength = Math.max(prefixItems.length, minItems, initialItems.length);\n\n for (let i = 0; i < tupleLength; i += 1) {\n const itemSchema = (prefixItems[i] ?? effectiveSchema.items) as JsonSchema | boolean | undefined;\n if (itemSchema === false) {\n continue;\n }\n const itemValue = initialItems[i];\n controls.push(this.buildControl((itemSchema as JsonSchema) ?? {}, itemValue, false));\n }\n\n const control = new FormArray(controls, {\n validators: this.buildValidators(effectiveSchema, required),\n });\n if (effectiveSchema.readOnly) {\n control.disable({ emitEvent: false });\n }\n return control;\n }\n\n const initialValue = this.resolveInitialValue(effectiveSchema, value);\n const control = new FormControl(initialValue, {\n validators: this.buildValidators(effectiveSchema, required, resolvedType),\n nonNullable: false,\n });\n\n if (effectiveSchema.readOnly || effectiveSchema.const !== undefined) {\n control.disable({ emitEvent: false });\n }\n\n return control;\n }\n\n resolveType(schema: JsonSchema): JsonSchema['type'] | 'enum' {\n if (schema.enum) {\n return 'enum';\n }\n\n if (schema.oneOf?.length) {\n return this.resolveType(schema.oneOf[0]);\n }\n if (schema.anyOf?.length) {\n return this.resolveType(schema.anyOf[0]);\n }\n if (schema.allOf?.length) {\n return this.resolveType(schema.allOf[0]);\n }\n\n if (schema.type) {\n if (Array.isArray(schema.type)) {\n const preferred = schema.type.find((item) => item !== 'null');\n return preferred ?? schema.type[0];\n }\n\n return schema.type;\n }\n\n if (schema.properties || schema.patternProperties || schema.additionalProperties) {\n return 'object';\n }\n\n if (schema.items || schema.prefixItems) {\n return 'array';\n }\n\n return 'string';\n }\n\n private applyCombinators(schema: JsonSchema): JsonSchema {\n let effective = schema;\n if (schema.allOf?.length) {\n effective = this.mergeSchemas([schema, ...schema.allOf]);\n }\n if (schema.oneOf?.length) {\n effective = schema.oneOf[0];\n }\n if (schema.anyOf?.length) {\n effective = schema.anyOf[0];\n }\n return effective;\n }\n\n resolveDynamicSchema(schema: JsonSchema, key: string): JsonSchema | undefined {\n const patternSchemas = schema.patternProperties ?? {};\n for (const [pattern, patternSchema] of Object.entries(patternSchemas)) {\n try {\n const regex = new RegExp(pattern);\n if (regex.test(key)) {\n return patternSchema;\n }\n } catch {\n // ignore invalid regex\n }\n }\n\n if (schema.additionalProperties === true || schema.additionalProperties === undefined) {\n return {};\n }\n\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n return schema.additionalProperties;\n }\n\n if (schema.unevaluatedProperties && typeof schema.unevaluatedProperties === 'object') {\n return schema.unevaluatedProperties;\n }\n if (schema.unevaluatedProperties === true) {\n return {};\n }\n\n return undefined;\n }\n\n private resolveInitialValue(schema: JsonSchema, value?: unknown): unknown {\n if (value !== undefined) {\n return value;\n }\n\n if (schema.const !== undefined) {\n return schema.const;\n }\n\n if (schema.default !== undefined) {\n return schema.default;\n }\n\n if (schema.enum && schema.enum.length > 0) {\n return schema.enum[0];\n }\n\n if (schema.type === 'boolean') {\n return false;\n }\n\n if (schema.type === 'array') {\n return [];\n }\n\n if (schema.type === 'object') {\n return {};\n }\n\n return null;\n }\n\n private buildValidators(\n schema: JsonSchema,\n required: boolean,\n resolvedType?: JsonSchema['type'] | 'enum'\n ): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n\n if (required) {\n validators.push(Validators.required);\n }\n\n if (schema.minLength !== undefined) {\n validators.push(Validators.minLength(schema.minLength));\n }\n\n if (schema.maxLength !== undefined) {\n validators.push(Validators.maxLength(schema.maxLength));\n }\n\n if (schema.minimum !== undefined) {\n validators.push(Validators.min(schema.minimum));\n }\n\n if (schema.maximum !== undefined) {\n validators.push(Validators.max(schema.maximum));\n }\n\n if (schema.exclusiveMinimum !== undefined) {\n validators.push((control) =>\n control.value === null || control.value === undefined || control.value === ''\n ? null\n : Number(control.value) > schema.exclusiveMinimum!\n ? null\n : { exclusiveMinimum: true }\n );\n }\n\n if (schema.exclusiveMaximum !== undefined) {\n validators.push((control) =>\n control.value === null || control.value === undefined || control.value === ''\n ? null\n : Number(control.value) < schema.exclusiveMaximum!\n ? null\n : { exclusiveMaximum: true }\n );\n }\n\n if (schema.multipleOf !== undefined) {\n validators.push((control) => {\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n const numericValue = Number(control.value);\n return numericValue % schema.multipleOf! === 0 ? null : { multipleOf: true };\n });\n }\n\n if (schema.pattern) {\n validators.push(Validators.pattern(schema.pattern));\n }\n\n if (schema.format === 'email') {\n validators.push(Validators.email);\n }\n\n if (schema.minItems !== undefined) {\n validators.push((control) =>\n Array.isArray(control.value) && control.value.length < schema.minItems!\n ? { minItems: true }\n : null\n );\n }\n\n if (schema.maxItems !== undefined) {\n validators.push((control) =>\n Array.isArray(control.value) && control.value.length > schema.maxItems!\n ? { maxItems: true }\n : null\n );\n }\n\n if (schema.uniqueItems) {\n validators.push((control) => {\n if (!Array.isArray(control.value)) {\n return null;\n }\n const unique = new Set(control.value.map((item) => JSON.stringify(item)));\n return unique.size === control.value.length ? null : { uniqueItems: true };\n });\n }\n\n if (schema.minProperties !== undefined) {\n validators.push((control) => {\n if (!control.value || typeof control.value !== 'object') {\n return null;\n }\n return Object.keys(control.value).length < schema.minProperties!\n ? { minProperties: true }\n : null;\n });\n }\n\n if (schema.maxProperties !== undefined) {\n validators.push((control) => {\n if (!control.value || typeof control.value !== 'object') {\n return null;\n }\n return Object.keys(control.value).length > schema.maxProperties!\n ? { maxProperties: true }\n : null;\n });\n }\n\n if (resolvedType === 'integer') {\n validators.push((control) => {\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n const numericValue = Number(control.value);\n return Number.isInteger(numericValue) ? null : { integer: true };\n });\n }\n\n return validators;\n }\n\n private isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n }\n\n private mergeSchemas(schemas: JsonSchema[]): JsonSchema {\n return schemas.reduce((acc, schema) => {\n const merged: JsonSchema = {\n ...acc,\n ...schema,\n properties: { ...(acc.properties ?? {}), ...(schema.properties ?? {}) },\n patternProperties: { ...(acc.patternProperties ?? {}), ...(schema.patternProperties ?? {}) },\n required: Array.from(new Set([...(acc.required ?? []), ...(schema.required ?? [])])),\n };\n return merged;\n }, {} as JsonSchema);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { JsonSchema } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class JsonSchemaResolverService {\n async resolve(schema: JsonSchema, baseUri?: string): Promise<JsonSchema> {\n const rootBase = baseUri ?? schema.$id ?? '';\n const localCache = new Map<string, JsonSchema>();\n const externalCache = new Map<string, JsonSchema>();\n return this.resolveRefs(schema, schema, rootBase, localCache, externalCache);\n }\n\n private async resolveRefs(\n current: JsonSchema,\n root: JsonSchema,\n baseUri: string,\n localCache: Map<string, JsonSchema>,\n externalCache: Map<string, JsonSchema>\n ): Promise<JsonSchema> {\n if (!current || typeof current !== 'object') {\n return current;\n }\n\n if (current.$ref) {\n const ref = current.$ref;\n if (ref.startsWith('#/')) {\n if (localCache.has(ref)) {\n return localCache.get(ref)!;\n }\n const resolved = this.resolvePointer(root, ref);\n if (resolved) {\n localCache.set(ref, resolved);\n return this.resolveRefs(resolved, root, baseUri, localCache, externalCache);\n }\n } else {\n const resolved = await this.resolveExternalRef(ref, baseUri, externalCache, localCache);\n if (resolved) {\n return resolved;\n }\n }\n }\n\n const next: JsonSchema = { ...current };\n\n if (next.properties) {\n const entries = await Promise.all(\n Object.entries(next.properties).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.properties = Object.fromEntries(entries);\n }\n\n if (next.patternProperties) {\n const entries = await Promise.all(\n Object.entries(next.patternProperties).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.patternProperties = Object.fromEntries(entries);\n }\n\n if (next.items && typeof next.items === 'object') {\n next.items = await this.resolveRefs(next.items as JsonSchema, root, baseUri, localCache, externalCache);\n }\n\n if (next.prefixItems) {\n next.prefixItems = await Promise.all(\n next.prefixItems.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.additionalProperties && typeof next.additionalProperties === 'object') {\n next.additionalProperties = await this.resolveRefs(\n next.additionalProperties,\n root,\n baseUri,\n localCache,\n externalCache\n );\n }\n\n if (next.additionalItems && typeof next.additionalItems === 'object') {\n next.additionalItems = await this.resolveRefs(\n next.additionalItems,\n root,\n baseUri,\n localCache,\n externalCache\n );\n }\n\n if (next.unevaluatedProperties && typeof next.unevaluatedProperties === 'object') {\n next.unevaluatedProperties = await this.resolveRefs(\n next.unevaluatedProperties,\n root,\n baseUri,\n localCache,\n externalCache\n );\n }\n\n if (next.unevaluatedItems && typeof next.unevaluatedItems === 'object') {\n next.unevaluatedItems = await this.resolveRefs(next.unevaluatedItems, root, baseUri, localCache, externalCache);\n }\n\n if (next.contains) {\n next.contains = await this.resolveRefs(next.contains, root, baseUri, localCache, externalCache);\n }\n\n if (next.oneOf) {\n next.oneOf = await Promise.all(\n next.oneOf.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.anyOf) {\n next.anyOf = await Promise.all(\n next.anyOf.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.allOf) {\n next.allOf = await Promise.all(\n next.allOf.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.not) {\n next.not = await this.resolveRefs(next.not, root, baseUri, localCache, externalCache);\n }\n\n if (next.if) {\n next.if = await this.resolveRefs(next.if, root, baseUri, localCache, externalCache);\n }\n\n if (next.then) {\n next.then = await this.resolveRefs(next.then, root, baseUri, localCache, externalCache);\n }\n\n if (next.else) {\n next.else = await this.resolveRefs(next.else, root, baseUri, localCache, externalCache);\n }\n\n if (next.dependencies) {\n const entries = await Promise.all(\n Object.entries(next.dependencies).map(async ([key, value]) => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return [key, await this.resolveRefs(value as JsonSchema, root, baseUri, localCache, externalCache)];\n }\n return [key, value];\n })\n );\n next.dependencies = Object.fromEntries(entries);\n }\n\n if (next.dependentSchemas) {\n const entries = await Promise.all(\n Object.entries(next.dependentSchemas).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.dependentSchemas = Object.fromEntries(entries);\n }\n\n if (next.$defs) {\n const entries = await Promise.all(\n Object.entries(next.$defs).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.$defs = Object.fromEntries(entries);\n }\n\n if (next.definitions) {\n const entries = await Promise.all(\n Object.entries(next.definitions).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.definitions = Object.fromEntries(entries);\n }\n\n return next;\n }\n\n private async resolveExternalRef(\n ref: string,\n baseUri: string,\n externalCache: Map<string, JsonSchema>,\n localCache: Map<string, JsonSchema>\n ): Promise<JsonSchema | null> {\n try {\n const url = new URL(ref, baseUri || window.location.href).toString();\n if (externalCache.has(url)) {\n return externalCache.get(url)!;\n }\n\n const { schema, fragment } = await this.fetchSchema(url);\n if (!schema) {\n return null;\n }\n\n const target = fragment ? this.resolvePointer(schema, fragment) : schema;\n if (!target) {\n return null;\n }\n\n const resolved = await this.resolveRefs(target, schema, schema.$id ?? url, localCache, externalCache);\n externalCache.set(url, resolved);\n return resolved;\n } catch {\n return null;\n }\n }\n\n private async fetchSchema(url: string): Promise<{ schema: JsonSchema | null; fragment: string | null }> {\n const [base, hash] = url.split('#');\n const fragment = hash ? `#/${hash.replace(/^\\//, '')}` : null;\n const response = await fetch(base, { headers: { Accept: 'application/json' } });\n if (!response.ok) {\n return { schema: null, fragment: null };\n }\n const schema = (await response.json()) as JsonSchema;\n return { schema, fragment };\n }\n\n private resolvePointer(root: JsonSchema, ref: string): JsonSchema | null {\n const pointer = ref.replace(/^#\\//, '');\n const parts = pointer.split('/').map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'));\n let current: any = root;\n for (const part of parts) {\n if (current && typeof current === 'object' && part in current) {\n current = current[part];\n } else {\n return null;\n }\n }\n return current as JsonSchema;\n }\n}\n","import { Injectable } from '@angular/core';\nimport Ajv, { ErrorObject } from 'ajv';\nimport Ajv2019 from 'ajv/dist/2019';\nimport Ajv2020 from 'ajv/dist/2020';\nimport addFormats from 'ajv-formats';\nimport AjvDraft04 from 'ajv-draft-04';\nimport { JsonSchema } from './types';\n\nexport type JsonSchemaDraft = 'draft4' | 'draft6' | 'draft7' | 'draft2019' | 'draft2020';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class JsonSchemaValidationService {\n private readonly ajvCache = new Map<JsonSchemaDraft, Ajv>();\n\n validate(schema: JsonSchema, value: unknown): ErrorObject[] {\n const draft = this.detectDraft(schema);\n const ajv = this.getAjv(draft);\n const validate = ajv.compile(schema as object);\n const valid = validate(value);\n if (valid) {\n return [];\n }\n return validate.errors ?? [];\n }\n\n detectDraft(schema: JsonSchema): JsonSchemaDraft {\n const schemaId = schema.$schema ?? '';\n if (schemaId.includes('draft-04')) {\n return 'draft4';\n }\n if (schemaId.includes('draft-06')) {\n return 'draft6';\n }\n if (schemaId.includes('draft-07')) {\n return 'draft7';\n }\n if (schemaId.includes('2019-09')) {\n return 'draft2019';\n }\n if (schemaId.includes('2020-12')) {\n return 'draft2020';\n }\n\n if (schema.$defs) {\n return 'draft2020';\n }\n if (schema.definitions) {\n return 'draft7';\n }\n\n return 'draft2020';\n }\n\n private getAjv(draft: JsonSchemaDraft): Ajv {\n if (this.ajvCache.has(draft)) {\n return this.ajvCache.get(draft)!;\n }\n\n let ajv: Ajv;\n switch (draft) {\n case 'draft4':\n ajv = new AjvDraft04({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n break;\n case 'draft2019':\n ajv = new Ajv2019({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n break;\n case 'draft6':\n case 'draft7':\n ajv = new Ajv({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n break;\n case 'draft2020':\n default:\n ajv = new Ajv2020({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n }\n\n addFormats(ajv);\n this.ajvCache.set(draft, ajv);\n return ajv;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormArray, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { JsonSchema, JsonSchemaType } from './types';\nimport { JsonSchemaFormService } from './json-schema-form.service';\nimport { JsonSchemaValidationService } from './json-schema-validation.service';\n\n@Component({\n selector: 'jsm-schema-node',\n standalone: true,\n imports: [CommonModule, FormsModule, ReactiveFormsModule],\n template: `\n <ng-container [ngSwitch]=\"nodeKind\">\n <div *ngSwitchCase=\"'oneOf'\" class=\"space-y-3\">\n <div class=\"flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-semibold text-slate-800\">{{ schema.title || label }}</div>\n <p *ngIf=\"schema.description\" class=\"text-xs text-slate-500\">{{ schema.description }}</p>\n </div>\n <span class=\"text-xs text-slate-400\">oneOf</span>\n </div>\n\n <select\n class=\"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-slate-900\"\n [(ngModel)]=\"selectedOneOf\"\n (ngModelChange)=\"onOneOfChange()\"\n >\n <option *ngFor=\"let option of schema.oneOf; let i = index\" [ngValue]=\"i\">\n {{ option.title || ('Option ' + (i + 1)) }}\n </option>\n </select>\n\n <jsm-schema-node\n *ngIf=\"activeVariant\"\n [schema]=\"activeVariant\"\n [control]=\"control\"\n [parent]=\"parent\"\n [controlKey]=\"controlKey\"\n [path]=\"path\"\n [errorsMap]=\"errorsMap\"\n [label]=\"label\"\n [required]=\"required\"\n (controlReplaced)=\"controlReplaced.emit($event)\"\n ></jsm-schema-node>\n </div>\n\n <div *ngSwitchCase=\"'anyOf'\" class=\"space-y-3\">\n <div class=\"flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-semibold text-slate-800\">{{ schema.title || label }}</div>\n <p *ngIf=\"schema.description\" class=\"text-xs text-slate-500\">{{ schema.description }}</p>\n </div>\n <span class=\"text-xs text-slate-400\">anyOf</span>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <label\n *ngFor=\"let option of schema.anyOf; let i = index\"\n class=\"inline-flex items-center gap-2 text-sm text-slate-700\"\n >\n <input\n type=\"checkbox\"\n class=\"h-4 w-4 rounded border-slate-300 text-slate-900\"\n [checked]=\"selectedAnyOf.has(i)\"\n (change)=\"toggleAnyOf(i)\"\n />\n {{ option.title || ('Option ' + (i + 1)) }}\n </label>\n </div>\n\n <jsm-schema-node\n *ngIf=\"activeVariant\"\n [schema]=\"activeVariant\"\n [control]=\"control\"\n [parent]=\"parent\"\n [controlKey]=\"controlKey\"\n [path]=\"path\"\n [errorsMap]=\"errorsMap\"\n [label]=\"label\"\n [required]=\"required\"\n (controlReplaced)=\"controlReplaced.emit($event)\"\n ></jsm-schema-node>\n </div>\n\n <div *ngSwitchCase=\"'allOf'\" class=\"space-y-4\">\n <div class=\"flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-semibold text-slate-800\">{{ schema.title || label }}</div>\n <p *ngIf=\"schema.description\" class=\"text-xs text-slate-500\">{{ schema.description }}</p>\n </div>\n <span class=\"text-xs text-slate-400\">allOf</span>\n </div>\n\n <div *ngFor=\"let subSchema of mergedAllOf; let i = index\" class=\"rounded-xl border border-slate-200 p-3\">\n <jsm-schema-node\n [schema]=\"subSchema\"\n [control]=\"control\"\n [parent]=\"parent\"\n [controlKey]=\"controlKey\"\n [path]=\"path\"\n [errorsMap]=\"errorsMap\"\n [label]=\"subSchema.title || ('Section ' + (i + 1))\"\n [required]=\"required\"\n (controlReplaced)=\"controlReplaced.emit($event)\"\n ></jsm-schema-node>\n </div>\n </div>\n\n <fieldset *ngSwitchCase=\"'object'\" class=\"group border border-slate-200 rounded-2xl p-4 bg-white/70 shadow-sm transition hover:-translate-y-0.5 hover:shadow-md\">\n <legend class=\"px-2 text-sm font-semibold text-slate-700\">{{ schema.title || label }}</legend>\n <p *ngIf=\"schema.description\" class=\"text-xs text-slate-500 mb-4\">{{ schema.description }}</p>\n <div *ngIf=\"metaBadges.length\" class=\"flex flex-wrap gap-2 mb-4\">\n <span\n *ngFor=\"let badge of metaBadges\"\n class=\"rounded-full bg-slate-100 px-2 py-0.5 text-[10px] font-semibold text-slate-600\"\n >\n {{ badge }}\n </span>\n </div>\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\" [formGroup]=\"controlAsGroup\">\n <ng-container *ngFor=\"let key of objectKeys\">\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-center justify-between\" *ngIf=\"isDynamicKey(key)\">\n <span class=\"text-xs font-semibold text-slate-500\">{{ key }}</span>\n <button\n type=\"button\"\n class=\"text-xs font-semibold text-rose-600 transition hover:text-rose-700\"\n (click)=\"removeDynamicKey(key)\"\n >\n Remove\n </button>\n </div>\n <jsm-schema-node\n [schema]=\"schemaForKey(key)\"\n [control]=\"childControl(key)\"\n [parent]=\"controlAsGroup\"\n [controlKey]=\"key\"\n [path]=\"pathForChild(key)\"\n [errorsMap]=\"errorsMap\"\n [label]=\"key\"\n [required]=\"isRequired(key)\"\n (controlReplaced)=\"controlReplaced.emit($event)\"\n ></jsm-schema-node>\n </div>\n </ng-container>\n </div>\n\n <div class=\"mt-4 space-y-2\" *ngIf=\"canAddProperty\">\n <div class=\"text-xs font-semibold text-slate-500\">Add property</div>\n <div class=\"flex flex-col md:flex-row gap-2\">\n <input\n class=\"flex-1 rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm shadow-sm transition focus:outline-none focus:ring-2 focus:ring-slate-900 hover:border-slate-400\"\n [(ngModel)]=\"newPropertyKey\"\n placeholder=\"propertyName\"\n />\n <button\n type=\"button\"\n class=\"px-3 py-2 rounded-lg text-sm font-medium bg-slate-900 text-white shadow-sm transition hover:-translate-y-0.5 hover:bg-slate-800 hover:shadow-md\"\n (click)=\"addDynamicProperty()\"\n >\n Add\n </button>\n </div>\n <div *ngIf=\"propertyError\" class=\"text-xs text-rose-600\">{{ propertyError }}</div>\n </div>\n\n <div *ngIf=\"errorsForPath.length\" class=\"mt-3 text-xs text-rose-600 space-y-1\">\n <div *ngFor=\"let error of errorsForPath\">{{ error }}</div>\n </div>\n </fieldset>\n\n <div *ngSwitchCase=\"'array'\" class=\"space-y-3\">\n <div class=\"flex items-center justify-between\">\n <div>\n <div class=\"text-sm font-semibold text-slate-700\">{{ schema.title || label }}</div>\n <p *ngIf=\"schema.description\" class=\"text-xs text-slate-500\">{{ schema.description }}</p>\n </div>\n <button\n type=\"button\"\n class=\"px-3 py-1.5 rounded-full text-sm font-medium bg-slate-900 text-white shadow-sm transition hover:-translate-y-0.5 hover:bg-slate-800 hover:shadow-md disabled:opacity-50 disabled:cursor-not-allowed\"\n (click)=\"addArrayItem()\"\n [disabled]=\"!canAddArrayItem\"\n >\n Add\n </button>\n </div>\n\n <div class=\"text-xs text-slate-500\" *ngIf=\"effectiveSchema.contains\">\n Must contain item(s) that match the contains schema.\n <span *ngIf=\"effectiveSchema.minContains\">Min: {{ effectiveSchema.minContains }}</span>\n <span *ngIf=\"effectiveSchema.maxContains\">Max: {{ effectiveSchema.maxContains }}</span>\n </div>\n\n <div *ngIf=\"metaBadges.length\" class=\"flex flex-wrap gap-2\">\n <span\n *ngFor=\"let badge of metaBadges\"\n class=\"rounded-full bg-slate-100 px-2 py-0.5 text-[10px] font-semibold text-slate-600\"\n >\n {{ badge }}\n </span>\n </div>\n\n <div class=\"space-y-3\" *ngIf=\"arrayControls.length > 0; else emptyArray\">\n <div\n *ngFor=\"let item of arrayControls; let i = index\"\n class=\"rounded-2xl border border-slate-200 p-3 bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-md\"\n >\n <div class=\"flex items-center justify-between mb-2\">\n <span class=\"text-xs font-semibold text-slate-500\">Item {{ i + 1 }}</span>\n <button\n type=\"button\"\n class=\"text-xs font-semibold text-rose-600 transition hover:text-rose-700\"\n (click)=\"removeArrayItem(i)\"\n >\n Remove\n </button>\n </div>\n <jsm-schema-node\n [schema]=\"schemaForIndex(i)\"\n [control]=\"item\"\n [parent]=\"controlAsArray\"\n [controlKey]=\"i\"\n [path]=\"pathForChild(i)\"\n [errorsMap]=\"errorsMap\"\n [label]=\"label + ' item'\"\n (controlReplaced)=\"controlReplaced.emit($event)\"\n ></jsm-schema-node>\n </div>\n </div>\n\n <ng-template #emptyArray>\n <div class=\"text-xs text-slate-400 italic\">No items yet.</div>\n </ng-template>\n\n <div *ngIf=\"errorsForPath.length\" class=\"text-xs text-rose-600 space-y-1\">\n <div *ngFor=\"let error of errorsForPath\">{{ error }}</div>\n </div>\n </div>\n\n <div *ngSwitchDefault class=\"space-y-2\">\n <ng-container *ngIf=\"inputKind !== 'checkbox'\">\n <label class=\"text-sm font-medium text-slate-700\">\n {{ schema.title || label }}\n <span *ngIf=\"required\" class=\"text-rose-500\">*</span>\n </label>\n <p *ngIf=\"schema.description\" class=\"text-xs text-slate-500\">{{ schema.description }}</p>\n </ng-container>\n\n <div *ngIf=\"metaBadges.length\" class=\"flex flex-wrap gap-2\">\n <span\n *ngFor=\"let badge of metaBadges\"\n class=\"rounded-full bg-slate-100 px-2 py-0.5 text-[10px] font-semibold text-slate-600\"\n >\n {{ badge }}\n </span>\n </div>\n\n <ng-container [ngSwitch]=\"inputKind\">\n <input\n *ngSwitchCase=\"'text'\"\n class=\"w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm shadow-sm transition focus:outline-none focus:ring-2 focus:ring-slate-900 hover:border-slate-400\"\n [attr.type]=\"inputType\"\n [attr.placeholder]=\"schema.title || label\"\n [formControl]=\"controlAsFormControl\"\n />\n\n <textarea\n *ngSwitchCase=\"'textarea'\"\n rows=\"4\"\n class=\"w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm shadow-sm transition focus:outline-none focus:ring-2 focus:ring-slate-900 hover:border-slate-400\"\n [attr.placeholder]=\"schema.title || label\"\n [formControl]=\"controlAsFormControl\"\n ></textarea>\n\n <select\n *ngSwitchCase=\"'select'\"\n class=\"w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm shadow-sm transition focus:outline-none focus:ring-2 focus:ring-slate-900 hover:border-slate-400\"\n [formControl]=\"controlAsFormControl\"\n >\n <option *ngFor=\"let option of effectiveSchema.enum\" [ngValue]=\"option\">{{ option }}</option>\n </select>\n\n <label *ngSwitchCase=\"'checkbox'\" class=\"inline-flex items-center gap-2 text-sm text-slate-700\">\n <input type=\"checkbox\" class=\"h-4 w-4 rounded border-slate-300 text-slate-900 transition\" [formControl]=\"controlAsFormControl\" />\n <span>\n {{ schema.title || label }}\n <span *ngIf=\"required\" class=\"text-rose-500\">*</span>\n </span>\n </label>\n </ng-container>\n\n <p *ngIf=\"inputKind === 'checkbox' && schema.description\" class=\"text-xs text-slate-500\">\n {{ schema.description }}\n </p>\n\n <div *ngIf=\"effectiveSchema.examples?.length\" class=\"text-xs text-slate-400\">\n Example: {{ effectiveSchema.examples?.[0] }}\n </div>\n\n <div *ngIf=\"effectiveSchema.contentMediaType\" class=\"text-xs text-slate-400\">\n Content type: {{ effectiveSchema.contentMediaType }}\n <span *ngIf=\"effectiveSchema.contentEncoding\">({{ effectiveSchema.contentEncoding }})</span>\n </div>\n\n <div *ngIf=\"errorsForPath.length\" class=\"text-xs text-rose-600 space-y-1\">\n <div *ngFor=\"let error of errorsForPath\">{{ error }}</div>\n </div>\n </div>\n </ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JsonSchemaNodeComponent implements OnInit {\n @Input({ required: true }) schema!: JsonSchema;\n @Input({ required: true }) control!: AbstractControl;\n @Input() label = '';\n @Input() required = false;\n @Input() path = '';\n @Input() errorsMap = new Map<string, string[]>();\n @Input() parent?: FormGroup | FormArray;\n @Input() controlKey?: string | number;\n\n @Output() controlReplaced = new EventEmitter<AbstractControl>();\n\n selectedOneOf = 0;\n selectedAnyOf = new Set<number>();\n newPropertyKey = '';\n propertyError = '';\n\n constructor(\n private readonly schemaService: JsonSchemaFormService,\n private readonly validation: JsonSchemaValidationService\n ) {}\n\n ngOnInit(): void {\n if (this.schema.anyOf?.length) {\n this.selectedAnyOf.add(0);\n }\n }\n\n get nodeKind(): 'oneOf' | 'anyOf' | 'allOf' | 'object' | 'array' | 'primitive' {\n if (this.schema.oneOf?.length) {\n return 'oneOf';\n }\n if (this.schema.anyOf?.length) {\n return 'anyOf';\n }\n if (this.schema.allOf?.length) {\n return 'allOf';\n }\n const resolved = this.resolvedType;\n if (resolved === 'object') {\n return 'object';\n }\n if (resolved === 'array') {\n return 'array';\n }\n return 'primitive';\n }\n\n get resolvedType(): JsonSchema['type'] | 'enum' {\n return this.schemaService.resolveType(this.effectiveSchema) ?? 'string';\n }\n\n get inputKind(): 'text' | 'textarea' | 'select' | 'checkbox' {\n if (this.effectiveSchema.enum) {\n return 'select';\n }\n\n if (this.resolvedType === 'boolean') {\n return 'checkbox';\n }\n\n if (this.effectiveSchema.format === 'textarea' || (this.effectiveSchema.maxLength ?? 0) > 200) {\n return 'textarea';\n }\n\n return 'text';\n }\n\n get inputType(): string {\n if (this.effectiveSchema.format === 'email') {\n return 'email';\n }\n if (this.effectiveSchema.format === 'date') {\n return 'date';\n }\n if (this.effectiveSchema.format === 'time') {\n return 'time';\n }\n if (this.effectiveSchema.format === 'date-time') {\n return 'datetime-local';\n }\n if (this.resolvedType === 'number' || this.resolvedType === 'integer') {\n return 'number';\n }\n if (this.effectiveSchema.format === 'password') {\n return 'password';\n }\n return 'text';\n }\n\n get controlAsGroup(): FormGroup {\n return this.control as FormGroup;\n }\n\n get controlAsFormControl(): FormControl {\n return this.control as FormControl;\n }\n\n get controlAsArray(): FormArray {\n return this.control as FormArray;\n }\n\n get arrayControls(): AbstractControl[] {\n return this.controlAsArray.controls;\n }\n\n get objectKeys(): string[] {\n return Object.keys(this.controlAsGroup.controls);\n }\n\n get canAddProperty(): boolean {\n return this.effectiveSchema.additionalProperties !== false || !!this.effectiveSchema.patternProperties;\n }\n\n get errorsForPath(): string[] {\n return this.errorsMap.get(this.path) ?? [];\n }\n\n get metaBadges(): string[] {\n const badges: string[] = [];\n if (this.effectiveSchema.deprecated) {\n badges.push('Deprecated');\n }\n if (this.effectiveSchema.readOnly) {\n badges.push('Read-only');\n }\n if (this.effectiveSchema.writeOnly) {\n badges.push('Write-only');\n }\n if (this.effectiveSchema.nullable) {\n badges.push('Nullable');\n }\n if (this.effectiveSchema.not) {\n badges.push('Not constraint');\n }\n return badges;\n }\n\n get activeVariant(): JsonSchema | null {\n if (this.schema.oneOf?.length) {\n return this.schema.oneOf[this.selectedOneOf] ?? null;\n }\n if (this.schema.anyOf?.length) {\n const selections = Array.from(this.selectedAnyOf).map((index) => this.schema.anyOf![index]);\n return selections.length ? this.mergeSchemas(selections) : this.schema.anyOf[0] ?? null;\n }\n if (this.schema.allOf?.length) {\n return this.mergeSchemas([this.schema, ...this.schema.allOf]);\n }\n return this.effectiveSchema;\n }\n\n get mergedAllOf(): JsonSchema[] {\n return this.schema.allOf?.length ? [this.schema, ...this.schema.allOf] : [this.schema];\n }\n\n isRequired(key: string): boolean {\n return this.effectiveSchema.required?.includes(key) ?? false;\n }\n\n schemaForKey(key: string): JsonSchema {\n return (\n this.effectiveSchema.properties?.[key] ??\n this.schemaService.resolveDynamicSchema(this.effectiveSchema, key) ??\n {}\n );\n }\n\n isDynamicKey(key: string): boolean {\n return !this.effectiveSchema.properties?.[key];\n }\n\n pathForChild(key: string | number): string {\n if (this.path === '') {\n return `/${key}`;\n }\n return `${this.path}/${key}`;\n }\n\n addDynamicProperty(): void {\n this.propertyError = '';\n const key = this.newPropertyKey.trim();\n if (!key) {\n this.propertyError = 'Property name is required.';\n return;\n }\n if (this.effectiveSchema.propertyNames) {\n const nameErrors = this.validation.validate(this.effectiveSchema.propertyNames, key);\n if (nameErrors.length) {\n this.propertyError = 'Property name does not match schema constraints.';\n return;\n }\n }\n if (this.controlAsGroup.contains(key)) {\n this.propertyError = 'Property already exists.';\n return;\n }\n const schemaForKey = this.schemaService.resolveDynamicSchema(this.effectiveSchema, key);\n if (!schemaForKey) {\n this.propertyError = 'This property is not allowed by the schema.';\n return;\n }\n const control = this.schemaService.buildControl(schemaForKey, undefined, false);\n this.controlAsGroup.addControl(key, control);\n this.newPropertyKey = '';\n }\n\n removeDynamicKey(key: string): void {\n this.controlAsGroup.removeControl(key);\n }\n\n schemaForIndex(index: number): JsonSchema {\n const prefixItems = this.effectiveSchema.prefixItems ?? [];\n if (prefixItems[index]) {\n return prefixItems[index];\n }\n if (this.effectiveSchema.items && this.effectiveSchema.items !== true) {\n return this.effectiveSchema.items as JsonSchema;\n }\n if (this.effectiveSchema.additionalItems && this.effectiveSchema.additionalItems !== true) {\n return this.effectiveSchema.additionalItems as JsonSchema;\n }\n if (this.effectiveSchema.unevaluatedItems && this.effectiveSchema.unevaluatedItems !== true) {\n return this.effectiveSchema.unevaluatedItems as JsonSchema;\n }\n return {};\n }\n\n get canAddArrayItem(): boolean {\n if (\n this.effectiveSchema.items === false ||\n this.effectiveSchema.additionalItems === false ||\n this.effectiveSchema.unevaluatedItems === false\n ) {\n return false;\n }\n return true;\n }\n\n addArrayItem(): void {\n if (!this.canAddArrayItem) {\n return;\n }\n const formArray = this.controlAsArray;\n const index = formArray.length;\n const schemaForItem = this.schemaForIndex(index);\n formArray.push(this.schemaService.buildControl(schemaForItem, undefined, false));\n formArray.markAsDirty();\n }\n\n removeArrayItem(index: number): void {\n const formArray = this.controlAsArray;\n formArray.removeAt(index);\n formArray.markAsDirty();\n }\n\n onOneOfChange(): void {\n if (!this.activeVariant) {\n return;\n }\n this.replaceControl(this.schemaService.buildControl(this.activeVariant, this.control.value, this.required));\n }\n\n toggleAnyOf(index: number): void {\n if (this.selectedAnyOf.has(index)) {\n this.selectedAnyOf.delete(index);\n } else {\n this.selectedAnyOf.add(index);\n }\n const variant = this.activeVariant;\n if (variant) {\n this.replaceControl(this.schemaService.buildControl(variant, this.control.value, this.required));\n }\n }\n\n private replaceControl(control: AbstractControl): void {\n if (this.parent) {\n if (this.parent instanceof FormGroup && typeof this.controlKey === 'string') {\n this.parent.setControl(this.controlKey, control);\n }\n if (this.parent instanceof FormArray && typeof this.controlKey === 'number') {\n this.parent.setControl(this.controlKey, control);\n }\n this.control = control;\n return;\n }\n\n this.control = control;\n this.controlReplaced.emit(control);\n }\n\n childControl(key: string): AbstractControl {\n return this.controlAsGroup.get(key) as AbstractControl;\n }\n\n get effectiveSchema(): JsonSchema {\n let schema = this.schema;\n\n if (schema.allOf?.length) {\n schema = this.mergeSchemas([schema, ...schema.allOf]);\n }\n\n schema = this.applyConditional(schema);\n schema = this.applyDependencies(schema);\n return schema;\n }\n\n private applyConditional(schema: JsonSchema): JsonSchema {\n if (!schema.if) {\n return schema;\n }\n\n const errors = this.validation.validate(schema.if, this.control.value);\n const branch = errors.length === 0 ? schema.then : schema.else;\n if (!branch) {\n return schema;\n }\n\n return this.mergeSchemas([schema, branch]);\n }\n\n private applyDependencies(schema: JsonSchema): JsonSchema {\n const value = this.control.value;\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return schema;\n }\n\n let merged = { ...schema } as JsonSchema;\n const valueKeys = Object.keys(value as Record<string, unknown>);\n\n if (schema.dependentRequired) {\n for (const key of valueKeys) {\n const required = schema.dependentRequired[key];\n if (required?.length) {\n merged = this.mergeSchemas([merged, { required }]);\n }\n }\n }\n\n if (schema.dependentSchemas) {\n for (const key of valueKeys) {\n const depSchema = schema.dependentSchemas[key];\n if (depSchema) {\n merged = this.mergeSchemas([merged, depSchema]);\n }\n }\n }\n\n if (schema.dependencies) {\n for (const key of valueKeys) {\n const dep = schema.dependencies[key];\n if (Array.isArray(dep)) {\n merged = this.mergeSchemas([merged, { required: dep }]);\n } else if (dep) {\n merged = this.mergeSchemas([merged, dep]);\n }\n }\n }\n\n return merged;\n }\n private mergeSchemas(schemas: JsonSchema[]): JsonSchema {\n return schemas.reduce((acc, schema) => {\n const merged: JsonSchema = {\n ...acc,\n ...schema,\n properties: { ...(acc.properties ?? {}), ...(schema.properties ?? {}) },\n patternProperties: { ...(acc.patternProperties ?? {}), ...(schema.patternProperties ?? {}) },\n required: Array.from(new Set([...(acc.required ?? []), ...(schema.required ?? [])])),\n };\n\n if (acc.type && schema.type) {\n const accTypes = Array.isArray(acc.type) ? acc.type : [acc.type];\n const schemaTypes = Array.isArray(schema.type) ? schema.type : [schema.type];\n merged.type = Array.from(new Set([...accTypes, ...schemaTypes])) as JsonSchemaType[];\n }\n\n return merged;\n }, {} as JsonSchema);\n }\n}\n\n\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { JsonSchemaFormService } from './json-schema-form.service';\nimport { JsonSchema } from './types';\nimport { JsonSchemaNodeComponent } from './json-schema-node.component';\nimport { JsonSchemaResolverService } from './json-schema-resolver.service';\nimport { JsonSchemaValidationService } from './json-schema-validation.service';\n\n@Component({\n selector: 'jsm-json-schema-form',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, JsonSchemaNodeComponent],\n template: `\n <form class=\"w-full max-w-4xl mx-auto p-4 md:p-6 space-y-6\">\n <div class=\"space-y-1\">\n <h2 class=\"text-xl font-semibold text-slate-900\">{{ resolvedSchema?.title || 'Generated Form' }}</h2>\n <p *ngIf=\"resolvedSchema?.description\" class=\"text-sm text-slate-500\">\n {{ resolvedSchema?.description }}\n </p>\n </div>\n\n <div *ngIf=\"loading\" class=\"text-sm text-slate-500\">Resolving schema...</div>\n\n <div *ngIf=\"form && resolvedSchema\" class=\"space-y-6\" [formGroup]=\"form\">\n <jsm-schema-node\n [schema]=\"resolvedSchema\"\n [control]=\"rootControl\"\n [path]=\"''\"\n [errorsMap]=\"errorsMap\"\n label=\"Root\"\n (controlReplaced)=\"onRootReplaced($event)\"\n ></jsm-schema-node>\n </div>\n </form>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JsonSchemaFormComponent implements OnChanges, OnDestroy {\n @Input({ required: true }) schema!: JsonSchema;\n @Input() value?: unknown;\n @Input() data?: unknown;\n\n @Output() formReady = new EventEmitter<FormGroup>();\n @Output() valueChange = new EventEmitter<unknown>();\n @Output() schemaReady = new EventEmitter<JsonSchema>();\n\n form!: FormGroup;\n rootControl!: AbstractControl;\n resolvedSchema?: JsonSchema;\n errorsMap = new Map<string, string[]>();\n loading = false;\n\n private valueSub?: Subscription;\n\n constructor(\n private readonly schemaService: JsonSchemaFormService,\n private readonly resolver: JsonSchemaResolverService,\n private readonly validation: JsonSchemaValidationService\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['schema'] || changes['value'] || changes['data']) {\n void this.buildForm();\n }\n }\n\n ngOnDestroy(): void {\n this.valueSub?.unsubscribe();\n }\n\n private async buildForm(): Promise<void> {\n this.valueSub?.unsubscribe();\n this.loading = true;\n this.resolvedSchema = await this.resolver.resolve(this.schema, this.schema?.$id);\n this.schemaReady.emit(this.resolvedSchema);\n const initialData = this.value !== undefined ? this.value : this.data;\n this.rootControl = this.schemaService.buildControl(this.resolvedSchema, initialData);\n this.form = this.rootControl instanceof FormGroup ? this.rootControl : new FormGroup({ value: this.rootControl });\n this.formReady.emit(this.form);\n this.loading = false;\n\n this.attachValueSub();\n }\n\n private updateErrors(): void {\n if (!this.resolvedSchema) {\n this.errorsMap = new Map();\n return;\n }\n\n const errors = this.validation.validate(this.resolvedSchema, this.rootControl.value);\n const map = new Map<string, string[]>();\n\n for (const error of errors) {\n const path = error.instancePath ?? '';\n const messages = map.get(path) ?? [];\n messages.push(error.message ?? error.keyword);\n map.set(path, messages);\n }\n\n this.errorsMap = map;\n }\n\n onRootReplaced(control: AbstractControl): void {\n this.rootControl = control;\n if (control instanceof FormGroup) {\n this.form = control;\n } else {\n if (!(this.form instanceof FormGroup) || !this.form.contains('value')) {\n this.form = new FormGroup({ value: control });\n } else {\n this.form.setControl('value', control);\n }\n }\n this.attachValueSub();\n }\n\n private attachValueSub(): void {\n this.valueSub?.unsubscribe();\n this.updateErrors();\n this.valueSub = this.form.valueChanges.subscribe(() => {\n this.updateErrors();\n this.valueChange.emit(this.rootControl.value);\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { JsonSchemaFormComponent } from './json-schema-form.component';\nimport { JsonSchemaNodeComponent } from './json-schema-node.component';\n\n@NgModule({\n imports: [JsonSchemaFormComponent, JsonSchemaNodeComponent],\n exports: [JsonSchemaFormComponent, JsonSchemaNodeComponent],\n})\nexport class JsonSchemaFormModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.JsonSchemaFormService","i2.JsonSchemaValidationService","i2.JsonSchemaResolverService","i3.JsonSchemaValidationService","i4","i5"],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { AbstractControl, FormGroup, FormArray, FormControl } from '@angular/forms';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { OnChanges, OnDestroy, EventEmitter, SimpleChanges, OnInit } from '@angular/core';
|
|
4
|
+
import { ErrorObject } from 'ajv';
|
|
5
|
+
|
|
6
|
+
type JsonSchemaType = 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'null';
|
|
7
|
+
type JsonSchemaPrimitive = string | number | boolean | null;
|
|
8
|
+
interface JsonSchemaBase {
|
|
9
|
+
$schema?: string;
|
|
10
|
+
$id?: string;
|
|
11
|
+
$ref?: string;
|
|
12
|
+
$anchor?: string;
|
|
13
|
+
$dynamicRef?: string;
|
|
14
|
+
$dynamicAnchor?: string;
|
|
15
|
+
$comment?: string;
|
|
16
|
+
title?: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
type?: JsonSchemaType | JsonSchemaType[];
|
|
19
|
+
enum?: JsonSchemaPrimitive[];
|
|
20
|
+
const?: JsonSchemaPrimitive;
|
|
21
|
+
default?: unknown;
|
|
22
|
+
examples?: unknown[];
|
|
23
|
+
format?: string;
|
|
24
|
+
readOnly?: boolean;
|
|
25
|
+
writeOnly?: boolean;
|
|
26
|
+
deprecated?: boolean;
|
|
27
|
+
nullable?: boolean;
|
|
28
|
+
contentMediaType?: string;
|
|
29
|
+
contentEncoding?: string;
|
|
30
|
+
minLength?: number;
|
|
31
|
+
maxLength?: number;
|
|
32
|
+
pattern?: string;
|
|
33
|
+
minimum?: number;
|
|
34
|
+
maximum?: number;
|
|
35
|
+
exclusiveMinimum?: number;
|
|
36
|
+
exclusiveMaximum?: number;
|
|
37
|
+
multipleOf?: number;
|
|
38
|
+
minItems?: number;
|
|
39
|
+
maxItems?: number;
|
|
40
|
+
uniqueItems?: boolean;
|
|
41
|
+
minContains?: number;
|
|
42
|
+
maxContains?: number;
|
|
43
|
+
required?: string[];
|
|
44
|
+
}
|
|
45
|
+
interface JsonSchemaObject {
|
|
46
|
+
properties?: Record<string, JsonSchema>;
|
|
47
|
+
patternProperties?: Record<string, JsonSchema>;
|
|
48
|
+
additionalProperties?: boolean | JsonSchema;
|
|
49
|
+
unevaluatedProperties?: boolean | JsonSchema;
|
|
50
|
+
propertyNames?: JsonSchema;
|
|
51
|
+
dependencies?: Record<string, string[] | JsonSchema>;
|
|
52
|
+
dependentRequired?: Record<string, string[]>;
|
|
53
|
+
dependentSchemas?: Record<string, JsonSchema>;
|
|
54
|
+
minProperties?: number;
|
|
55
|
+
maxProperties?: number;
|
|
56
|
+
}
|
|
57
|
+
interface JsonSchemaArray {
|
|
58
|
+
items?: JsonSchema | boolean;
|
|
59
|
+
prefixItems?: JsonSchema[];
|
|
60
|
+
additionalItems?: JsonSchema | boolean;
|
|
61
|
+
unevaluatedItems?: JsonSchema | boolean;
|
|
62
|
+
contains?: JsonSchema;
|
|
63
|
+
}
|
|
64
|
+
interface JsonSchemaCombinators extends JsonSchemaBase {
|
|
65
|
+
allOf?: JsonSchema[];
|
|
66
|
+
anyOf?: JsonSchema[];
|
|
67
|
+
oneOf?: JsonSchema[];
|
|
68
|
+
not?: JsonSchema;
|
|
69
|
+
if?: JsonSchema;
|
|
70
|
+
then?: JsonSchema;
|
|
71
|
+
else?: JsonSchema;
|
|
72
|
+
}
|
|
73
|
+
interface JsonSchema extends JsonSchemaBase, JsonSchemaObject, JsonSchemaArray, JsonSchemaCombinators {
|
|
74
|
+
$defs?: Record<string, JsonSchema>;
|
|
75
|
+
definitions?: Record<string, JsonSchema>;
|
|
76
|
+
}
|
|
77
|
+
interface SchemaFieldContext {
|
|
78
|
+
schema: JsonSchema;
|
|
79
|
+
path: string;
|
|
80
|
+
required: boolean;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
declare class JsonSchemaFormService {
|
|
84
|
+
buildControl(schema: JsonSchema, value?: unknown, required?: boolean): AbstractControl;
|
|
85
|
+
resolveType(schema: JsonSchema): JsonSchema['type'] | 'enum';
|
|
86
|
+
private applyCombinators;
|
|
87
|
+
resolveDynamicSchema(schema: JsonSchema, key: string): JsonSchema | undefined;
|
|
88
|
+
private resolveInitialValue;
|
|
89
|
+
private buildValidators;
|
|
90
|
+
private isRecord;
|
|
91
|
+
private mergeSchemas;
|
|
92
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<JsonSchemaFormService, never>;
|
|
93
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<JsonSchemaFormService>;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
declare class JsonSchemaResolverService {
|
|
97
|
+
resolve(schema: JsonSchema, baseUri?: string): Promise<JsonSchema>;
|
|
98
|
+
private resolveRefs;
|
|
99
|
+
private resolveExternalRef;
|
|
100
|
+
private fetchSchema;
|
|
101
|
+
private resolvePointer;
|
|
102
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<JsonSchemaResolverService, never>;
|
|
103
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<JsonSchemaResolverService>;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
type JsonSchemaDraft = 'draft4' | 'draft6' | 'draft7' | 'draft2019' | 'draft2020';
|
|
107
|
+
declare class JsonSchemaValidationService {
|
|
108
|
+
private readonly ajvCache;
|
|
109
|
+
validate(schema: JsonSchema, value: unknown): ErrorObject[];
|
|
110
|
+
detectDraft(schema: JsonSchema): JsonSchemaDraft;
|
|
111
|
+
private getAjv;
|
|
112
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<JsonSchemaValidationService, never>;
|
|
113
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<JsonSchemaValidationService>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
declare class JsonSchemaFormComponent implements OnChanges, OnDestroy {
|
|
117
|
+
private readonly schemaService;
|
|
118
|
+
private readonly resolver;
|
|
119
|
+
private readonly validation;
|
|
120
|
+
schema: JsonSchema;
|
|
121
|
+
value?: unknown;
|
|
122
|
+
data?: unknown;
|
|
123
|
+
formReady: EventEmitter<FormGroup<any>>;
|
|
124
|
+
valueChange: EventEmitter<unknown>;
|
|
125
|
+
schemaReady: EventEmitter<JsonSchema>;
|
|
126
|
+
form: FormGroup;
|
|
127
|
+
rootControl: AbstractControl;
|
|
128
|
+
resolvedSchema?: JsonSchema;
|
|
129
|
+
errorsMap: Map<string, string[]>;
|
|
130
|
+
loading: boolean;
|
|
131
|
+
private valueSub?;
|
|
132
|
+
constructor(schemaService: JsonSchemaFormService, resolver: JsonSchemaResolverService, validation: JsonSchemaValidationService);
|
|
133
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
134
|
+
ngOnDestroy(): void;
|
|
135
|
+
private buildForm;
|
|
136
|
+
private updateErrors;
|
|
137
|
+
onRootReplaced(control: AbstractControl): void;
|
|
138
|
+
private attachValueSub;
|
|
139
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<JsonSchemaFormComponent, never>;
|
|
140
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<JsonSchemaFormComponent, "jsm-json-schema-form", never, { "schema": { "alias": "schema"; "required": true; }; "value": { "alias": "value"; "required": false; }; "data": { "alias": "data"; "required": false; }; }, { "formReady": "formReady"; "valueChange": "valueChange"; "schemaReady": "schemaReady"; }, never, never, true, never>;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
declare class JsonSchemaNodeComponent implements OnInit {
|
|
144
|
+
private readonly schemaService;
|
|
145
|
+
private readonly validation;
|
|
146
|
+
schema: JsonSchema;
|
|
147
|
+
control: AbstractControl;
|
|
148
|
+
label: string;
|
|
149
|
+
required: boolean;
|
|
150
|
+
path: string;
|
|
151
|
+
errorsMap: Map<string, string[]>;
|
|
152
|
+
parent?: FormGroup | FormArray;
|
|
153
|
+
controlKey?: string | number;
|
|
154
|
+
controlReplaced: EventEmitter<AbstractControl<any, any, any>>;
|
|
155
|
+
selectedOneOf: number;
|
|
156
|
+
selectedAnyOf: Set<number>;
|
|
157
|
+
newPropertyKey: string;
|
|
158
|
+
propertyError: string;
|
|
159
|
+
constructor(schemaService: JsonSchemaFormService, validation: JsonSchemaValidationService);
|
|
160
|
+
ngOnInit(): void;
|
|
161
|
+
get nodeKind(): 'oneOf' | 'anyOf' | 'allOf' | 'object' | 'array' | 'primitive';
|
|
162
|
+
get resolvedType(): JsonSchema['type'] | 'enum';
|
|
163
|
+
get inputKind(): 'text' | 'textarea' | 'select' | 'checkbox';
|
|
164
|
+
get inputType(): string;
|
|
165
|
+
get controlAsGroup(): FormGroup;
|
|
166
|
+
get controlAsFormControl(): FormControl;
|
|
167
|
+
get controlAsArray(): FormArray;
|
|
168
|
+
get arrayControls(): AbstractControl[];
|
|
169
|
+
get objectKeys(): string[];
|
|
170
|
+
get canAddProperty(): boolean;
|
|
171
|
+
get errorsForPath(): string[];
|
|
172
|
+
get metaBadges(): string[];
|
|
173
|
+
get activeVariant(): JsonSchema | null;
|
|
174
|
+
get mergedAllOf(): JsonSchema[];
|
|
175
|
+
isRequired(key: string): boolean;
|
|
176
|
+
schemaForKey(key: string): JsonSchema;
|
|
177
|
+
isDynamicKey(key: string): boolean;
|
|
178
|
+
pathForChild(key: string | number): string;
|
|
179
|
+
addDynamicProperty(): void;
|
|
180
|
+
removeDynamicKey(key: string): void;
|
|
181
|
+
schemaForIndex(index: number): JsonSchema;
|
|
182
|
+
get canAddArrayItem(): boolean;
|
|
183
|
+
addArrayItem(): void;
|
|
184
|
+
removeArrayItem(index: number): void;
|
|
185
|
+
onOneOfChange(): void;
|
|
186
|
+
toggleAnyOf(index: number): void;
|
|
187
|
+
private replaceControl;
|
|
188
|
+
childControl(key: string): AbstractControl;
|
|
189
|
+
get effectiveSchema(): JsonSchema;
|
|
190
|
+
private applyConditional;
|
|
191
|
+
private applyDependencies;
|
|
192
|
+
private mergeSchemas;
|
|
193
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<JsonSchemaNodeComponent, never>;
|
|
194
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<JsonSchemaNodeComponent, "jsm-schema-node", never, { "schema": { "alias": "schema"; "required": true; }; "control": { "alias": "control"; "required": true; }; "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; }; "path": { "alias": "path"; "required": false; }; "errorsMap": { "alias": "errorsMap"; "required": false; }; "parent": { "alias": "parent"; "required": false; }; "controlKey": { "alias": "controlKey"; "required": false; }; }, { "controlReplaced": "controlReplaced"; }, never, never, true, never>;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
declare class JsonSchemaFormModule {
|
|
198
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<JsonSchemaFormModule, never>;
|
|
199
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<JsonSchemaFormModule, never, [typeof JsonSchemaFormComponent, typeof JsonSchemaNodeComponent], [typeof JsonSchemaFormComponent, typeof JsonSchemaNodeComponent]>;
|
|
200
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<JsonSchemaFormModule>;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export { JsonSchemaFormComponent, JsonSchemaFormModule, JsonSchemaFormService, JsonSchemaNodeComponent, JsonSchemaResolverService, JsonSchemaValidationService };
|
|
204
|
+
export type { JsonSchema, JsonSchemaArray, JsonSchemaBase, JsonSchemaCombinators, JsonSchemaDraft, JsonSchemaObject, JsonSchemaPrimitive, JsonSchemaType, SchemaFieldContext };
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@elle96/ng-json-schema-manager",
|
|
3
|
+
"version": "0.0.5",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^20.0.0",
|
|
6
|
+
"rxjs": "^7.8.0",
|
|
7
|
+
"@angular/core": "^20.0.0",
|
|
8
|
+
"@angular/forms": "^20.0.0"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"ajv": "^8.17.1",
|
|
12
|
+
"ajv-draft-04": "^1.0.0",
|
|
13
|
+
"tslib": "^2.6.2",
|
|
14
|
+
"ajv-formats": "^3.0.1"
|
|
15
|
+
},
|
|
16
|
+
"sideEffects": false,
|
|
17
|
+
"module": "fesm2022/elle96-ng-json-schema-manager.mjs",
|
|
18
|
+
"typings": "index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
"./package.json": {
|
|
21
|
+
"default": "./package.json"
|
|
22
|
+
},
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./index.d.ts",
|
|
25
|
+
"default": "./fesm2022/elle96-ng-json-schema-manager.mjs"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|