{"version":3,"file":"form-gen-core.mjs","sources":["../../../../projects/form-gen/core/src/lib/formula/impl/interpreter.ts","../../../../projects/form-gen/core/src/lib/formula/impl/utils.ts","../../../../projects/form-gen/core/src/lib/formula/impl/token.ts","../../../../projects/form-gen/core/src/lib/formula/impl/lexer.ts","../../../../projects/form-gen/core/src/lib/formula/impl/parser.ts","../../../../projects/form-gen/core/src/lib/formula/formula.service.ts","../../../../projects/form-gen/core/src/lib/element-registry.ts","../../../../projects/form-gen/core/src/lib/util/path.ts","../../../../projects/form-gen/core/src/lib/instance.service.ts","../../../../projects/form-gen/core/src/lib/id.service.ts","../../../../projects/form-gen/core/src/lib/variables.service.ts","../../../../projects/form-gen/core/src/lib/schema.service.ts","../../../../projects/form-gen/core/src/lib/value.service.ts","../../../../projects/form-gen/core/src/lib/state.service.ts","../../../../projects/form-gen/core/src/lib/meta.service.ts","../../../../projects/form-gen/core/src/lib/validators/validation.service.ts","../../../../projects/form-gen/core/src/lib/computation.service.ts","../../../../projects/form-gen/core/src/lib/control/archetype/archetype-registry.ts","../../../../projects/form-gen/core/src/lib/schema/schema-normalization.service.ts","../../../../projects/form-gen/core/src/lib/schema/schema-denormalization.service.ts","../../../../projects/form-gen/core/src/lib/schema/archetype-map.ts","../../../../projects/form-gen/core/src/lib/schema/instance-schema-creation.service.ts","../../../../projects/form-gen/core/src/lib/form-gen.service.ts","../../../../projects/form-gen/core/src/lib/injection-tokens.ts","../../../../projects/form-gen/core/src/lib/outlet.directive.ts","../../../../projects/form-gen/core/src/lib/control/archetype/input.archetype.ts","../../../../projects/form-gen/core/src/lib/control/archetype/plain.archetype.ts","../../../../projects/form-gen/core/src/lib/control/archetype/group.archetype.ts","../../../../projects/form-gen/core/src/lib/control/archetype/hidden.archetype.ts","../../../../projects/form-gen/core/src/lib/control/archetype/ordered-list.archetype.ts","../../../../projects/form-gen/core/src/lib/control/archetype/named-list.archetype.ts","../../../../projects/form-gen/core/src/lib/control/archetype/one-of.archetype.ts","../../../../projects/form-gen/core/src/lib/form-gen.module.ts","../../../../projects/form-gen/core/src/public-api.ts","../../../../projects/form-gen/core/src/form-gen-core.ts"],"sourcesContent":["import { ASTFunctionNode, ASTNode, ASTPathNode, ASTValueNode, ASTVariableNode } from './node';\n\n/* Base class Interpreter, this contains common methods for interpreters */\nabstract class InterpreterBase {\n\n  protected visitNode(node: ASTNode): string {\n    switch (node.type) {\n      case 'function':\n        return this.visitFunctionNode(node);\n      case 'variable':\n        return this.visitVariableNode(node);\n      case 'path':\n        return this.visitPathNode(node);\n      case 'value':\n        return this.visitValueNode(node);\n      default:\n        throw new Error(`Unrecognised AST node`);\n    }\n  }\n\n  protected visitValueNode(node: ASTValueNode): string {\n    if (Array.isArray(node.value)) {\n      return `[${node.value.map(item => this.visitValue(item)).join(', ')}]`;\n    }\n\n    return this.visitValue(node.value);\n  }\n\n  protected visitValue(item: string): string {\n\n    if (typeof item === 'string') {\n      return `'${String(item)}'`;\n    }\n\n    return item;\n  }\n\n  protected visitArrayNodes(array: ASTNode[]): string {\n    return array.map(arg => this.visitNode(arg)).join(', ');\n  }\n\n  protected abstract visitFunctionNode(node: ASTFunctionNode): string;\n  protected abstract visitVariableNode(node: ASTVariableNode): string;\n  protected abstract visitPathNode(node: ASTPathNode): string;\n}\n\n/*\n * InterpreterToFormula is responsible for build an Excel-like formula from AST\n */\nexport class InterpreterToFormula extends InterpreterBase {\n\n  protected visitFunctionNode(node: ASTFunctionNode): string {\n    return `${node.name}(${this.visitArrayNodes(node.args)})`;\n  }\n\n  protected visitVariableNode(node: ASTVariableNode): string {\n    return node.name;\n  }\n\n  protected visitPathNode(node: ASTPathNode): string {\n    return node.path;\n  }\n\n  interpret(tree: ASTNode): string {\n    return '=' + this.visitNode(tree);\n  }\n}\n\n/*\n * InterpreterToHtml is responsible for build an HTML Excel-like formula from AST\n */\nexport class InterpreterToHtml extends InterpreterBase {\n\n  maxParenDeep: number;\n  currentDeep: number;\n\n  constructor(maxParenDeep:number=3) {\n    super();\n    this.maxParenDeep = maxParenDeep;\n    this.currentDeep = 1;\n  }\n\n  protected visitFunctionNode(node: ASTFunctionNode): string {\n    var result: string = '';\n\n    const paren: string = `paren-deep-${this.currentDeep}`;\n    this.incrementParenDeep();\n\n    result += this.createHtmlSpan('function', node.name);\n    result += this.createHtmlSpan(paren, '(');\n    result += this.visitArrayNodes(node.args);\n    result += (node.closed) ? this.createHtmlSpan(paren, ')') : ``;\n\n    return result;\n  }\n\n  protected incrementParenDeep() : void {\n    if (this.currentDeep < this.maxParenDeep) {\n      this.currentDeep += 1;\n    } else {\n      this.currentDeep = 1;\n    }\n  }\n\n  protected visitVariableNode(node: ASTVariableNode): string {\n    return this.createHtmlSpan('variable', node.name);\n  }\n\n  protected visitPathNode(node: ASTPathNode): string {\n    return this.createHtmlSpan('path', node.path);\n  }\n\n  protected override visitValue(string: string): string {\n    return this.createHtmlSpan('value', super.visitValue(string));\n  }\n\n  private createHtmlSpan(class_attr: string, value: string): string {\n    return `<span class=\"${class_attr}\">${value}</span>`;\n  }\n\n  setMaxParenDeep(newMaxParenDeep: number) : void {\n    this.maxParenDeep = newMaxParenDeep;\n  }\n\n  interpret(tree: ASTNode): string {\n    this.currentDeep = 1;\n    return `<div>=${this.visitNode(tree)}</div>`;\n  }\n}\n","export function isNumber(str: string): boolean {\n  if (typeof str !== 'string') {\n    return false;\n  }\n\n  if (!str.trim()) {\n    return false;\n  }\n\n  return !Number.isNaN(Number(str));\n}\n","import { isNumber } from './utils';\n\nexport type TokenType =\n  'EQUAL' | 'LPAREN' | 'RPAREN' | 'COMMA' |  // Single-character\n  'FUNCVAR' | 'PATH' | 'VALUE' |  // Entities\n  'EOF';  // Misc\n\n\nexport class Token {\n  type: TokenType;\n  value: any;\n  column: number;\n  line: string;\n\n  constructor(type: TokenType, value: any = '', column: number = -1, line: string = '') {\n    this.type = type;\n    this.column = column;\n    this.line = line;\n\n    // Check if value is boolean\n    if (value.toLowerCase() === 'true') {\n      this.value = true;\n    } else if (value.toLowerCase() === 'false') {\n      this.value = false;\n    }\n\n    // Check if value is array\n    else if (value.startsWith('\\[')) {\n      this.value = JSON.parse(value.replace(/'/g, '\"'));\n    }\n\n    // Check if value is number\n    else if (isNumber(value)) {\n      this.value = Number(value);\n    }\n\n    // Otherwise save value without quotes\n    else {\n      this.value = value.replace(/((^'|'$)|(?:^\"|\"$))/g, '');\n    }\n  }\n}\n","import { Token } from './token';\n\n/*\n * Lexer is responsible for breaking a sentence apart into tokens\n */\nexport class Lexer {\n  text: string;\n  index: number;\n  flexible: boolean;\n\n  constructor() {\n    this.text = '';\n    this.index = 0;\n    this.flexible = false;\n  }\n\n  // Advance index n STEP\n  advance(step: number = 1): void {\n    this.index += step;\n  }\n\n  // Return current line from index\n  getCurrentLine(): string {\n    return (this.index < this.text.length) ? this.text.substring(this.index) : '';\n  }\n\n  getNextToken(): Token {\n    // For single-character token types we avoid using regex to get a better perfomance\n\n    // Tokenize EOF token type\n    if (this.getCurrentLine() === '') {\n      this.advance();\n      return new Token('EOF', 'EOF', this.index, this.text);\n    }\n\n    // Skip whitespaces\n    while (this.getCurrentLine().startsWith(' ')) {\n      this.advance();\n    }\n\n    // Tokenize EQUAL token type\n    if (this.getCurrentLine().startsWith('=')) {\n      this.advance();\n      return new Token('EQUAL', '=', this.index, this.text);\n    }\n\n    // Tokenize LPAREN token type\n    if (this.getCurrentLine().startsWith('(')) {\n      this.advance();\n      return new Token('LPAREN', '(', this.index, this.text);\n    }\n\n    // Tokenize RPAREN token type\n    if (this.getCurrentLine().startsWith(')')) {\n      this.advance();\n      return new Token('RPAREN', ')', this.index, this.text);\n    }\n\n    // Tokenize COMMA token type\n    if (this.getCurrentLine().startsWith(',')) {\n      this.advance();\n      return new Token('COMMA', ',', this.index, this.text);\n    }\n\n    // Tokenize PATH token type\n    // Regex used: https://regex101.com/r/wbhU62/1\n    const path = this.getCurrentLine().match(/^\\.?(?:\\.?\\/(?:[\\w\\.\\/](?!\\.\\.\\.+))*\\/*|(?=[\\,\\) ]))/);\n    if (path) {\n      this.advance(path[0].length);\n      return new Token('PATH', path[0], this.index, this.text);\n    }\n\n    // Tokenize bool as VALUE token types\n    const boolean = this.getCurrentLine().match(/^(true|TRUE|false|FALSE)(?=[^\\w])/);\n    if (boolean) {\n      this.advance(boolean[0].length);\n      return new Token('VALUE', boolean[0], this.index, this.text);\n    }\n\n    // Tokenize FUNCVAR token type\n    const funcVar = this.getCurrentLine().match(/^[a-zA-Z]\\w+/);\n    if (funcVar) {\n      this.advance(funcVar[0].length);\n      return new Token('FUNCVAR', funcVar[0], this.index, this.text);\n    }\n\n    // Tokenize VALUE token type\n    const pattern = (this.flexible) ? /^(\\'.+\\'?|\\\".+\\\"?|\\[.+\\]?|\\d+\\.?\\d*)/ : /^(\\'.+?\\'|\\\".+?\\\"|\\[.+?\\]|\\d+\\.?\\d*)/;\n    const value = this.getCurrentLine().match(pattern);\n    if (value) {\n      this.advance(value[0].length);\n      return new Token('VALUE', value[0], this.index, this.text);\n    }\n\n    throw new SyntaxError(\n      `invalid syntax\\n` +\n      `formula: ${this.text}\\n` +\n      `        ${' '.repeat(this.index)}^`\n    );\n  }\n\n  tokenize(text: string, flexible: boolean = false): Array<Token> {\n    this.text = text;\n    this.index = 0;\n    this.flexible = flexible;\n\n    const result: Array<Token> = [];\n    while (this.index < this.text.length + 1) {\n      result.push(this.getNextToken());\n    }\n\n    return result;\n  }\n}\n","/*\n * Parser is responsible for building an abstract syntax tree (AST)\n */\nimport { Token, TokenType } from './token';\nimport { ASTFunctionNode, ASTNode, ASTPathNode, ASTValueNode, ASTVariableNode } from './node';\n\nexport class Parser {\n  tokens: Token[];\n  index: number;\n  flexible: boolean;\n\n  constructor() {\n    this.tokens = [];\n    this.index = 0;\n    this.flexible = false;\n  }\n\n  getCurrentToken(): Token {\n    return this.tokens[this.index];\n  }\n\n  // Return next token\n  peekToken(): Token | undefined {\n    const advancedIndex: number = this.index + 1;\n    return (advancedIndex < this.tokens.length) ? this.tokens[advancedIndex] : undefined;\n  }\n\n  unexpectedTokenMessage(): string {\n    throw new SyntaxError((\n      `Unexpected \"${this.getCurrentToken().value}\"\\n` +\n      `formula ${this.getCurrentToken().line}\\n` +\n      `       ${' '.repeat(this.getCurrentToken().column)}^`\n    ));\n  }\n\n  // Compare current token type with a TYPE, if matchs, advance to next token, otherwise raise exception\n  eat(type: TokenType): void {\n    if (this.getCurrentToken().type === type) {\n      this.index += 1;\n    } else {\n      throw new SyntaxError(this.unexpectedTokenMessage());\n    }\n  }\n\n  // Same as eat() but optionally flexible with token TYPE\n  // also returns bool if current token was eated or not\n  flexibleEat(type: TokenType): boolean {\n    var wasEaten: boolean;\n\n    if (this.flexible) {\n      try {\n        this.eat(type);\n        wasEaten = true;\n      } catch {\n        wasEaten = false;\n      }\n    } else {\n      this.eat(type);\n      wasEaten = true;\n    }\n\n    return wasEaten;\n  }\n\n  // Build Formula AST node formula : EQUAL entity EOF\n  buildFormula(): ASTNode {\n    this.eat('EQUAL');\n    const entity = this.buildEntity();\n    this.eat('EOF');\n    return entity;\n  }\n\n  // Build ASTFunctionNode AST node function : FUNCTION LPAREN (entity COMMA?)+ RPAREN\n  buildFunction(): ASTFunctionNode {\n    const functionName: string = this.getCurrentToken().value;\n\n    this.eat('FUNCVAR');\n    this.eat('LPAREN');\n\n    const args: Array<ASTNode> = [];\n    do {\n      if (this.getCurrentToken().type === 'COMMA') {\n        this.eat('COMMA');\n      }\n      if (this.flexible && this.getCurrentToken().type === 'EOF') {\n        break;\n      }\n      args.push(this.buildEntity());\n    } while (this.getCurrentToken().type === 'COMMA');\n\n    var closed: boolean = this.flexibleEat('RPAREN');\n\n    return { type: 'function', name: functionName, args, closed };\n  }\n\n  // Build ASTFunctionNode AST node entity : (function|variable|path|value)\n  buildEntity(): ASTNode {\n    switch (this.getCurrentToken().type) {\n      case 'FUNCVAR':\n        return (this.peekToken()?.type == 'LPAREN') ? this.buildFunction() : this.buildVariable();\n      case 'PATH':\n        return this.buildPath();\n      case 'VALUE':\n        return this.buildValue();\n      default:\n        throw new SyntaxError(this.unexpectedTokenMessage());\n    }\n  }\n\n  buildVariable(): ASTVariableNode {\n    const variable = this.getCurrentToken().value;\n    this.eat('FUNCVAR');\n    return { type: 'variable', name: variable };\n  }\n\n  buildPath(): ASTPathNode {\n    const path = this.getCurrentToken().value;\n    this.eat('PATH');\n    return { type: 'path', path };\n  }\n\n  // Build Value AST node value : value\n  buildValue(): ASTValueNode {\n    const value = this.getCurrentToken().value;\n    this.eat('VALUE');\n    return { type: 'value', value };\n  }\n\n  /*\n   * Parse tokens into an AST\n   *\n   * formula : EQUAL entity EOF\n   * function : FUNCVAR LPAREN (entity COMMA?)+ RPAREN\n   * entity : (variable|path|value)\n   * variable : FUNCVAR\n   * path : PATH\n   * value : VALUE\n   */\n  parse(tokens: Token[], flexible: boolean = false): ASTNode {\n    /* Set global class states */\n    this.tokens = tokens;\n    this.index = 0;\n    this.flexible = flexible;\n\n    return this.buildFormula();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { InterpreterToFormula, InterpreterToHtml } from './impl/interpreter';\nimport { Lexer } from './impl/lexer';\nimport { ASTNode } from './impl/node';\nimport { Parser } from './impl/parser';\n\n@Injectable()\nexport class FormulaService {\n  lexer: Lexer;\n  parser: Parser;\n  interpreterToFormula: InterpreterToFormula;\n  interpreterToHtml: InterpreterToHtml;\n\n  constructor() {\n    this.lexer = new Lexer();\n    this.parser = new Parser();\n    this.interpreterToFormula = new InterpreterToFormula();\n    this.interpreterToHtml = new InterpreterToHtml();\n  }\n\n  parse(string: string): ASTNode {\n    const tokenized = this.lexer.tokenize(string);\n    return this.parser.parse(tokenized);\n  }\n\n  stringify(tree: ASTNode): string {\n    return this.interpreterToFormula.interpret(tree);\n  }\n\n  toHtml(string: string, flexible: boolean = false, maxParenDeep: number = 3): string {\n    const tokenized = this.lexer.tokenize(string);\n    const ASTNode = this.parser.parse(tokenized, flexible);\n    this.interpreterToHtml.setMaxParenDeep(maxParenDeep)\n    return this.interpreterToHtml.interpret(ASTNode);\n  }\n}\n","import { Injectable, Type } from '@angular/core';\nimport { ChildNodeDescription, ElementDescription, NodeDescription, TestCase } from './schema/types';\nimport { Validator } from './validators/validator';\nimport { Resolver } from './resolver/resolver';\nimport { Formula } from './formula/formula';\nimport { Command } from './command/command';\n\ntype Element = { name: string; description: ElementDescription; testCases: any[] } & (\n  { type: 'component'; element: Type<any> } |\n  { type: 'validator'; element: Validator } |\n  { type: 'resolver'; element: Resolver } |\n  { type: 'formula'; element: Formula } |\n  { type: 'command'; element: Command } |\n  { type: 'feature' }\n  );\n\nexport type ElementRegistryValue = Omit<Element, 'type'>;\n\n@Injectable()\nexport class ElementRegistry {\n  registry: Record<Element['type'], Record<string, Omit<Element, 'type' | 'name'>>> = {\n    feature: {},\n    component: {},\n    validator: {},\n    resolver: {},\n    formula: {},\n    command: {},\n  };\n\n  // set<T extends Element>(type: T['type'], name: string, element: T['element'], description: ElementDescription, testCases: TestCase[] = []): void {\n  //   this.registry[type as Element['type']][name] = { element, description, testCases };\n  // }\n\n  setAll(type: 'feature', map: Record<string, ElementDescription | [ElementDescription, TestCase[]]>): void;\n  setAll(type: 'validator', map: Record<string, [Validator, ElementDescription] | [Validator, ElementDescription, TestCase[]]>): void;\n  setAll(type: 'resolver', map: Record<string, Resolver | [Resolver, ElementDescription] | [Resolver, ElementDescription, TestCase[]]>): void;\n  setAll(type: 'formula', map: Record<string, Formula | [Formula, ElementDescription] | [Formula, ElementDescription, TestCase[]]>): void;\n  setAll(type: 'command', map: Record<string, Command | [Command, ElementDescription] | [Command, ElementDescription, TestCase[]]>): void;\n  setAll(type: 'component', map: Record<string, [Type<any>, ElementDescription] | [Type<any>, ElementDescription, TestCase[]]>): void;\n  setAll<T extends Element>(type: T['type'], map: Record<string, any>): void {\n    const registry = this.registry[type as T['type']] as any;\n    for (let [name, entry] of Object.entries(map)) {\n      if (type === 'feature') {\n        registry[name] = {\n          description: entry,\n          testCases: [],\n        };\n      } else {\n        if (Array.isArray(entry)) {\n          const [element, description, testCases = []] = entry;\n          registry[name] = {\n            element,\n            description: description || { structure: [] },\n            testCases,\n          };\n        } else {\n          registry[name] = {\n            element: entry as any,\n            description: { structure: [] },\n            testCases: [],\n          };\n        }\n      }\n    }\n  }\n\n  get(type: 'feature', name: string): { description: ElementDescription, testCases: TestCase[] };\n  get(type: 'validator', name: string): { element: Validator, description: ElementDescription, testCases: TestCase[] };\n  get(type: 'resolver', name: string): { element: Resolver, description: ElementDescription, testCases: TestCase[] };\n  get(type: 'formula', name: string): { element: Formula, description: ElementDescription, testCases: TestCase[] };\n  get(type: 'command', name: string): { element: Command, description: ElementDescription, testCases: TestCase[] };\n  get(type: 'component', name: string): { element: Type<any>, description: ElementDescription, testCases: TestCase[] };\n  get<T extends Element>(type: T['type'], name: string): Omit<T, 'type'> | undefined {\n    return this.registry[type][name] as Omit<T, 'type'>;\n  }\n\n  getAll(type: 'feature'): { name: string; description: ElementDescription; testCases: TestCase[] }[];\n  getAll(type: 'validator'): { name: string; element: Validator; description: ElementDescription; testCases: TestCase[] }[];\n  getAll(type: 'resolver'): { name: string; element: Resolver; description: ElementDescription; testCases: TestCase[] }[];\n  getAll(type: 'formula'): { name: string; element: Formula; description: ElementDescription; testCases: TestCase[] }[];\n  getAll(type: 'command'): { name: string; element: Command; description: ElementDescription; testCases: TestCase[] }[];\n  getAll(type: 'component'): { name: string; element: Type<any>; description: ElementDescription; testCases: TestCase[] }[];\n  getAll<T extends Element>(type: T['type']): Omit<T, 'type'>[] {\n    return Object.entries(this.registry[type])\n      .map(([name, entry]) => {\n        if (type === 'feature') {\n          const { description, testCases } = entry;\n          return ({ name, description, testCases });\n        } else {\n          const { element, description, testCases } = entry as any;\n          return ({ name, element, description, testCases });\n        }\n      }) as any;\n  }\n\n  // getElement(name: string): Type<any> | undefined {\n  //   return this.get(name)?.component;\n  // }\n  //\n  // getDescription(name: string): ElementDescription | undefined {\n  //   return this.get(name)?.description;\n  // }\n  //\n  // getTestCases(name: string): TestCase[] | undefined {\n  //   return this.get(name)?.testCases;\n  // }\n\n  has<T extends Element>(type: T['type'], name: string): boolean {\n    return name in this.registry[type];\n  }\n\n  getFeaturesNames(type: string, name: string): string[] {\n    const entry = this.get(type as any, name);\n\n    if (!entry) {\n      throw new Error(`Element with type \"${type}\" and name \"${name}\" is not registered.`);\n    }\n\n    const description = entry.description;\n    const featureNames = description.features ?? [];\n\n    const deps = featureNames.flatMap(name => {\n      const feature = this.get('feature', name);\n      if (!feature) {\n        throw new Error(`Feature with name \"${name}\" is not registered.`);\n      }\n\n      return this.getFeaturesNames('feature', name);\n    });\n\n    return [...featureNames, ...deps];\n  }\n\n  getStructure(type: string, name: string): ChildNodeDescription[] {\n    const entry = this.get(type as any, name);\n\n    if (!entry) {\n      throw new Error(`Element with type \"${type}\" and name \"${name}\" is not registered.`);\n    }\n\n    const description = entry.description;\n    const featureNames = this.getFeaturesNames(type, name);\n\n    const featuresStructure = featureNames.flatMap(name => {\n      const feature = this.get('feature', name);\n      if (!feature) {\n        throw new Error(`Feature with name \"${name}\" is not registered.`);\n      }\n\n      return feature.description.structure;\n    });\n\n    return [...featuresStructure, ...description.structure];\n  }\n}\n","import { ControlPath, EditorKey, PathSegment } from '../models';\n\nexport function samePathSegment(a: PathSegment, b: PathSegment): boolean {\n  return a.key === b.key && a.branch === b.branch;\n}\n\nexport function samePath(a: ControlPath, b: ControlPath): boolean {\n  return a.length === b.length && a.every((segmentA, index) => samePathSegment(segmentA, b[index]));\n}\n\nexport function stringifyPath(path: ControlPath): string {\n  return path.map(segment => stringifyPathSegment(segment)).join('/');\n}\n\nexport function parsePath(path: string): ControlPath {\n  return path.split('/').map(segment => parsePathSegment(segment));\n}\n\nexport function stringifyPathSegment(segment: PathSegment): string {\n  if (segment.branch) {\n    return '(' + segment.branch + ')' + segment.key;\n  } else {\n    return String(segment.key);\n  }\n}\n\nexport function parsePathSegment(segment: string): PathSegment {\n  const index = segment.indexOf(')');\n  if (index > -1) {\n    return {\n      key: segment.slice(index + 1),\n      branch: segment.slice(1, index),\n    };\n  } else {\n    return {\n      key: segment,\n      branch: undefined,\n    };\n  }\n}\n\nexport function withKey(path: ControlPath, key: EditorKey): ControlPath {\n  const parentPath = path.slice(0, -1);\n  const pathSegment = path[path.length - 1];\n  const newPathSegment: PathSegment = { ...pathSegment, key };\n  return [...parentPath, newPathSegment];\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Instance } from './models';\n\n@Injectable()\nexport class InstanceService {\n  snapshot$ = new BehaviorSubject<Record<string, Instance>>({});\n\n  constructor() { }\n\n  add(instance: Instance): void {\n    const snapshot = this.snapshot$.getValue();\n    snapshot[instance.name] = instance;\n\n    this.snapshot$.next(snapshot);\n  }\n\n  remove(name: string): void {\n    const snapshot = this.snapshot$.getValue();\n    delete snapshot[name];\n\n    this.snapshot$.next(snapshot);\n  }\n\n  get(instanceName: string): Instance {\n    const snapshot = this.snapshot$.getValue();\n    return snapshot[instanceName];\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ControlPath, EditorKey, PathSegment } from './models';\nimport { samePath, samePathSegment, stringifyPath } from './util/path';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport produce from 'immer';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { TreeNode, TreeNodeValue } from './util/tree-node';\n\nconst root: PathSegment = {\n  key: 'root',\n};\n\ninterface NodeMap {\n  [id: number]: TreeNode;\n}\n\ninterface Snapshot {\n  tree: TreeNode;\n  nodeMap: NodeMap;\n}\n\n@Injectable()\nexport class IdService {\n  static increment = 1;\n\n  snapshot$ = new BehaviorSubject<Snapshot>({\n    tree: { value: { pathSegment: root, id: -1, ref: '' }, children: [], parent: null },\n    nodeMap: {},\n  });\n\n  constructor() {}\n\n  add(path: ControlPath, ref: string): number {\n    if (path.length === 0) {\n      throw new Error('Path is empty');\n    }\n    if (!ref) {\n      throw new Error(`Ref cannot be ${JSON.stringify(ref)}`);\n    }\n\n    const id = IdService.increment++;\n    // console.log('add', id);\n\n    this.process((snapshot) => {\n      let parentNode: TreeNode;\n      if (path.length === 1) {\n        parentNode = snapshot.tree;\n      } else {\n        const parentPath = path.slice(0, -1);\n        parentNode = this.findChildNode(snapshot, snapshot.tree, parentPath)!;\n        if (!parentNode) {\n          throw new Error(`No node with path \"${stringifyPath(parentPath)}\" found. You cannot add a new element without a parent node.`);\n        }\n      }\n\n      const pathSegment = path[path.length - 1];\n      const exists = parentNode.children\n        .map(childId => snapshot.nodeMap[childId])\n        .some(childNode => samePathSegment(childNode.value.pathSegment, pathSegment));\n      if (exists) {\n        throw new Error(`A node with path \"${stringifyPath(path)}\" already exists`);\n      }\n\n      snapshot.nodeMap[id] = {\n        value: { pathSegment, id, ref },\n        children: [],\n        parent: parentNode.value.id,\n      };\n      parentNode.children.push(id);\n    });\n\n    return id;\n  }\n\n  setPathSegment(id: number, pathSegment: PathSegment) {\n    this.process(snapshot => {\n      snapshot.nodeMap[id].value.pathSegment = pathSegment;\n    });\n  }\n\n  getNodeByPath(path: ControlPath): TreeNode {\n    const snapshot = this.snapshot$.getValue();\n    const node = this.findChildNode(snapshot, snapshot.tree, path);\n    if (!node) {\n      throw new Error(`No node with path \"${stringifyPath(path)}\" found.`);\n    }\n\n    return node;\n  }\n\n  has(path: ControlPath): boolean {\n    const snapshot = this.snapshot$.getValue();\n    return !!this.findChildNode(snapshot, snapshot.tree, path);\n  }\n\n  getIdByPath(path: ControlPath): number {\n    return this.getNodeByPath(path).value.id;\n  }\n\n  remove(id: number, shiftKeys = false): void {\n    this.process(({ tree, nodeMap }) => {\n      const node = this.getNode(id);\n      const parent: TreeNode = nodeMap[node.parent!];\n      const pathSegment = node.value.pathSegment;\n\n      for (const descendantId of this.getDescendantsIds(id)) {\n        delete nodeMap[descendantId];\n      }\n      delete nodeMap[id];\n\n      const index = parent.children.findIndex(childId => childId === id);\n      if (index < 0) {\n        throw new Error(`A node with id \"${id}\" not found.`);\n      }\n      parent.children.splice(index, 1);\n\n      if (shiftKeys) {\n        parent.children\n          .map(childId => nodeMap[childId])\n          .filter(childNode => childNode.value.pathSegment.key > pathSegment.key)\n          .forEach(childNode => {\n            const newKey: EditorKey = Number(childNode.value.pathSegment.key) - 1;\n            childNode.value.pathSegment = { ...childNode.value.pathSegment, key: newKey };\n          });\n      }\n    });\n  }\n\n  // moveToBranch(id: number, branch: string): void {\n  //   this.process(({ nodeMap }) => {\n  //     const node = nodeMap[id];\n  //     const pathSegment = node.value.pathSegment;\n  //\n  //     pathSegment.branch = branch;\n  //   });\n  // }\n\n  getParentId(id: number): number | null {\n    return this.getNode(id).parent || null;\n  }\n\n  getParents(id: number): TreeNode[] {\n    const nodeMap = this.snapshot$.getValue().nodeMap;\n\n    const result: TreeNode[] = [];\n    let node = this.getNode(id);\n    while (node.parent && node.parent > 0) {\n      node = nodeMap[node.parent];\n      result.push(node);\n    }\n\n    return result.reverse();\n  }\n\n  getParentsIds(id: number): number[] {\n    return this.getParents(id).map(node => node.value.id);\n  }\n\n  getChildrenIds(id: number): number[] {\n    return this.getNode(id).children;\n  }\n\n  getChildrenNodes(id: number): TreeNode[] {\n    return this.getNode(id).children.map(childId => this.getNode(childId));\n  }\n\n  getChildrenPathSegments(id: number): PathSegment[] {\n    return this.getChildrenNodes(id).map(node => node.value.pathSegment);\n  }\n\n  getDescendantsIds(id: number): number[] {\n    const result: number[] = [];\n    const queue: number[] = [id];\n    while (queue.length) {\n      const descendantId: number = queue.shift()!;\n      const node = this.getNode(descendantId);\n      node.children.forEach(childId => queue.push(childId));\n      result.push(node.value.id);\n    }\n    result.shift();\n\n    return result;\n  }\n\n  getPathSegment(id: number): PathSegment {\n    return this.getNode(id).value.pathSegment;\n  }\n\n  getNode(id: number): TreeNode {\n    const node = this.snapshot$.getValue().nodeMap[id];\n    if (!node) {\n      throw new Error(`Control with id \"${id}\" not found.`);\n    }\n\n    return node;\n  }\n\n  getKey(id: number): EditorKey {\n    return this.getPathSegment(id).key;\n  }\n\n  getPath(id: number): ControlPath {\n    const nodeMap = this.snapshot$.getValue().nodeMap;\n    const parentsIds = this.getParentsIds(id);\n    return [...parentsIds, id].map(n => nodeMap[n].value.pathSegment);\n  }\n\n  selectPathSegment(id: number): Observable<PathSegment> {\n    return this.snapshot$.pipe(\n      map(snapshot => {\n        const node = snapshot.nodeMap[id];\n        if (!node) {\n          throw new Error(`Control with id \"${id}\" not found.`);\n        }\n        return node.value.pathSegment;\n      }),\n      distinctUntilChanged(),\n    );\n  }\n\n  selectPath(id: number): Observable<ControlPath> {\n    return this.snapshot$.pipe(\n      distinctUntilChanged(),\n      map((snapshot) => {\n        const nodeMap = snapshot.nodeMap;\n        const parentsIds = this.getParentsIds(id);\n\n        return [...parentsIds, id].map(n => nodeMap[n].value.pathSegment);\n      }),\n      distinctUntilChanged((previous, current) => samePath(previous, current)),\n    );\n  }\n\n  selectNode(id: number): Observable<TreeNode> {\n    return this.snapshot$.pipe(\n      distinctUntilChanged(),\n      map((snapshot) => {\n        const nodeMap = snapshot.nodeMap;\n        return nodeMap[id];\n      }),\n    );\n  }\n\n  selectNodeValue(id: number): Observable<TreeNodeValue> {\n    return this.selectNode(id).pipe(map(node => node.value));\n  }\n\n  private findChildNode(snapshot: Snapshot, node: TreeNode, path: ControlPath): TreeNode | null {\n    for (const pathElement of path) {\n      if (!(node.children && node.children.length)) {\n        return null;\n      }\n\n      const childId = node.children.find(id => samePathSegment(snapshot.nodeMap[id].value.pathSegment, pathElement));\n      if (!childId) {\n        return null;\n      }\n\n      node = snapshot.nodeMap[childId];\n    }\n\n    return node;\n  }\n\n  private process(func: (draft: Snapshot) => void): void {\n    const snapshot = produce<Snapshot>(this.snapshot$.getValue(), (draft) => func(draft));\n    // console.log('process', snapshot);\n    this.snapshot$.next(snapshot);\n  }\n\n  private getNodeFromSnapshot(snapshot: Snapshot, id: number): TreeNode {\n    const node = snapshot.nodeMap[id];\n    if (!node) {\n      throw new Error(`Control with id \"${id}\" not found.`);\n    }\n\n    return node;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { IdService } from './id.service';\nimport produce from 'immer';\n\ninterface VariablesSnapshot {\n  [controlId: number]: Record<string, any>;\n}\n\n@Injectable()\nexport class VariablesService {\n  snapshot$ = new BehaviorSubject<VariablesSnapshot>({\n    0: {}\n  });\n\n  constructor(\n    public idService: IdService,\n  ) { }\n\n  get(name: string): any;\n  get(controlId: number, name: string): any;\n  get(...args: any[]): any {\n    if (args.length === 1) {\n      return this.remove(0, args[0]);\n    }\n\n    const [controlId, name] = args;\n\n    const snapshot = this.snapshot$.getValue();\n    return this.find(snapshot, controlId, name);\n  }\n\n  set(name: string, value: any): void;\n  set(controlId: number, name: string, value: any): void;\n  set(...args: any[]): void {\n    if (args.length === 2) {\n      return this.set(0, args[0], args[1]);\n    }\n\n    const [controlId, name, value] = args;\n\n    this.process(snapshot => {\n      if (!snapshot[controlId]) {\n        snapshot[controlId] = {};\n      }\n      snapshot[controlId][name] = value;\n    });\n  }\n\n  remove(name: string): void;\n  remove(controlId: number, name: string): void;\n  remove(...args: any[]): void {\n    if (args.length === 1) {\n      return this.remove(0, args[0]);\n    }\n\n    const [controlId, name] = args;\n\n    this.process(snapshot => {\n      delete snapshot[controlId][name];\n    });\n  }\n\n  select(name: string): Observable<any>;\n  select(controlId: number, name: string): Observable<any>;\n  select(...args: any[]): Observable<any> {\n    if (args.length === 1) {\n      return this.select(0, args[0]);\n    }\n\n    const [controlId, name] = args;\n\n    return this.snapshot$.pipe(\n      map(snapshot => this.find(snapshot, controlId, name)),\n      distinctUntilChanged(),\n    );\n  }\n\n  selectAll(): Observable<any> {\n    return this.snapshot$.pipe(\n      distinctUntilChanged(),\n    );\n  }\n\n  private process(func: (snapshot: VariablesSnapshot) => void): void {\n    const snapshot = produce<VariablesSnapshot>(this.snapshot$.getValue(), (draft) => func(draft));\n    // console.log('process', snapshot);\n    this.snapshot$.next(snapshot);\n  }\n\n  private find(snapshot: VariablesSnapshot, controlId: number, name: string): any {\n    const parentsIds = this.idService.getParentsIds(controlId).reverse();\n\n    for (const id of [controlId, ...parentsIds, 0]) {\n      if (id in snapshot) {\n        const variables = snapshot[id] || {};\n        if (name in variables) {\n          return variables[name];\n        }\n      }\n    }\n\n    return undefined;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { BranchSchema, ControlSchema, GroupInputSchema, InstanceSchema, OneOfInputSchema, PathSegment } from './models';\nimport produce from 'immer';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\n@Injectable()\nexport class SchemaService {\n  snapshot$ = new BehaviorSubject<Record<string, InstanceSchema>>({});\n\n  constructor() { }\n\n  setInstance(schema: InstanceSchema): void {\n    this.process(snapshot => {\n      snapshot[schema.name] = schema;\n    });\n  }\n\n  getInstance(name: string): InstanceSchema {\n    const snapshot = this.snapshot$.getValue();\n    return snapshot[name];\n  }\n\n  getControl(instanceName: string, ref: string): ControlSchema {\n    return this.getControlFromSnapshot(instanceName, ref, this.snapshot$.getValue());\n  }\n\n  addControl(schemaName: string, control: ControlSchema): string {\n    const index = Object.keys(this.snapshot$.getValue()[schemaName].controls).length + 1;\n    const ref = 'w-' + index;\n\n    this.process(snapshot => {\n      const controls = snapshot[schemaName].controls;\n      controls[ref] = control;\n    });\n\n    return ref;\n  }\n\n  addChild(instanceName: string, parentRef: string, childPathSegment: PathSegment, childRef: string, index?: number): void {\n    this.process(snapshot => {\n      const parentControl = snapshot[instanceName].controls[parentRef];\n      let children: { key: string; ref: string }[];\n      if (parentControl.archetype === 'input:one-of') {\n        if (childPathSegment.branch) {\n          const branch = parentControl.branches.value.find(b => b.name.value === childPathSegment.branch)!;\n          children = branch.children.value;\n        } else {\n          children = parentControl.common.value;\n        }\n      } else if (parentControl.archetype === 'input:group') {\n        children = parentControl.children.value;\n      } else {\n        throw new Error(`Archetype \"${parentControl.archetype}\" cannot have children.`);\n      }\n\n      if (children.some(c => c.key === childPathSegment.key)) {\n        throw new Error(`Add failed. Child control with key \"${childPathSegment.key}\" already exists.`);\n      }\n      const child = { key: childPathSegment.key as string, ref: childRef };\n\n      if (typeof index === 'number') {\n        children.splice(index, 0, child);\n      } else {\n        children.push(child);\n      }\n    });\n  }\n\n  removeControl(schemaName: string, ref: string): void {\n    this.process(snapshot => {\n      // TODO: check usages\n      delete snapshot[schemaName].controls[ref];\n    });\n  }\n\n  removeChild(schemaName: string, parentRef: string, pathSegment: PathSegment): void {\n    this.process(snapshot => {\n      const parentControl = snapshot[schemaName].controls[parentRef];\n      let children: { key: string; ref: string }[];\n      if (parentControl.archetype === 'input:one-of') {\n        if (pathSegment.branch) {\n          const branch = parentControl.branches.value.find(b => b.name.value === pathSegment.branch)!;\n          children = branch.children.value;\n        } else {\n          children = parentControl.common.value;\n        }\n      } else if (parentControl.archetype === 'input:group') {\n        children = parentControl.children.value;\n      } else {\n        throw new Error(`Archetype \"${parentControl.archetype}\" cannot have children.`);\n      }\n\n      const index = children.findIndex(c => c.key === pathSegment.key);\n      children.splice(index, 1);\n    });\n  }\n\n  updateControl(instanceSchemaName: string, ref: string, controlSchema: ControlSchema): void {\n    this.process(snapshot => {\n      snapshot[instanceSchemaName].controls[ref] = controlSchema;\n    });\n  }\n\n  addBranch(schemaName: string, ref: string, branchName: string, index?: number): void {\n    this.process(snapshot => {\n      const control = this.getControlFromSnapshot(schemaName, ref, snapshot) as OneOfInputSchema;\n      const branch: BranchSchema = {\n        name: { kind: 'value', value: branchName },\n        children: { kind: 'value', value: [] },\n      };\n      if (typeof index === 'number') {\n        control.branches.value.splice(index, 0, branch);\n      } else {\n        control.branches.value.push(branch);\n      }\n    });\n  }\n\n  removeBranch(schemaName: string, ref: string, branchName: string): void {\n    this.process(snapshot => {\n      const control = this.getControlFromSnapshot(schemaName, ref, snapshot) as OneOfInputSchema;\n      const index = control.branches.value.findIndex(b => b.name.value === branchName);\n      control.branches.value.splice(index, 1);\n    });\n  }\n\n  updateBranch(schemaName: string, ref: string, branchName: string, value: { name: string }): void {\n    this.process(snapshot => {\n      const control = this.getControlFromSnapshot(schemaName, ref, snapshot) as OneOfInputSchema;\n      const index = control.branches.value.findIndex(b => b.name.value === branchName);\n      control.branches.value[index] = {\n        ...control.branches.value[index],\n        name: { kind: 'value', value: value.name },\n      };\n    });\n  }\n\n  setChildKey(schemaName: string, parentRef: string, oldKey: string, newKey: string): void {\n    this.process(snapshot => {\n      const control = this.getControlFromSnapshot(schemaName, parentRef, snapshot) as GroupInputSchema;\n      const child = control.children.value.find(c => c.key === oldKey);\n      if (!child) {\n        const keys = control.children.value.map(child => child.key);\n        throw new Error(`Cannot find a child control with key \"${oldKey}\".\\nExisting keys are ${JSON.stringify(keys)}`);\n      }\n      child.key = newKey;\n    });\n  }\n\n  setControlPosition(schemaName: string, parentRef: string, pathSegment: PathSegment, index: number): void {\n    this.process(snapshot => {\n      const parentControl = this.getControlFromSnapshot(schemaName, parentRef, snapshot);\n\n      let children: { key: string; ref: string }[] = [];\n      if (parentControl.archetype === 'input:group') {\n        children = parentControl.children.value;\n      } else if (parentControl.archetype === 'input:one-of') {\n        if (pathSegment.branch) {\n          children = parentControl.branches.value.find(b => b.name.value === pathSegment.branch)!.children.value;\n        } else {\n          children = parentControl.common.value || [];\n        }\n      }\n\n      if (!children?.length) {\n        throw new Error(`Parent element has no children`);\n      }\n\n      const oldIndex = children.findIndex(c => c.key === pathSegment.key);\n      const control = children[oldIndex];\n      const newIndex = index > oldIndex ? index - 1 : index;\n\n      children.splice(oldIndex, 1);\n      children.splice(newIndex, 0, control);\n    });\n  }\n\n  setBranchPosition(schemaName: string, ref: string, branchName: string, index: number): void {\n    this.process(snapshot => {\n      const control = this.getControlFromSnapshot(schemaName, ref, snapshot);\n\n      if (control.archetype !== 'input:one-of') {\n        throw new Error(`Control doesn't support branches.`);\n      }\n\n      const branches: BranchSchema[] = [];\n\n      const oldIndex = branches.findIndex(c => c.name.value === branchName);\n      const branch = branches[oldIndex];\n      const newIndex = index > oldIndex ? index - 1 : index;\n\n      branches.splice(oldIndex, 1);\n      branches.splice(newIndex, 0, branch);\n    });\n  }\n\n  selectInstance(name: string): Observable<InstanceSchema> {\n    return this.snapshot$.pipe(\n      map(snapshot => snapshot[name]),\n      distinctUntilChanged(),\n    );\n  }\n\n  selectControl(schemaName: string, ref: string): Observable<ControlSchema> {\n    return this.snapshot$.pipe(\n      map(snapshot => this.getControlFromSnapshot(schemaName, ref, snapshot) as ControlSchema),\n      distinctUntilChanged(),\n    );\n  }\n\n  private getControlFromSnapshot(schemaName: string, ref: string, snapshot: Record<string, InstanceSchema>): ControlSchema {\n    const instanceSchema = snapshot[schemaName];\n    if (!instanceSchema) {\n      throw new Error(`No registered schema with name \"${schemaName}\".`);\n    }\n\n    const control: ControlSchema = instanceSchema.controls[ref];\n    if (!control) {\n      throw new Error(`Schema \"${schemaName}\" has no control \"${ref}\".`);\n    }\n\n    return control;\n  }\n\n  private process(func: (snapshot: Record<string, InstanceSchema>) => void): void {\n    const snapshot = produce<Record<string, InstanceSchema>>(this.snapshot$.getValue(), (draft) => func(draft));\n    // console.log('process', snapshot);\n    // localStorage.setItem('general', JSON.stringify(snapshot.general));\n    this.snapshot$.next(snapshot);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ControlPath, EditorKey } from './models';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport produce from 'immer';\n\n@Injectable()\nexport class ValueService {\n  root$ = new BehaviorSubject<any>({});\n\n  constructor() { }\n\n  set(path: ControlPath, value: any) {\n    // console.log('set', stringifyPath(path), value);\n    this.process(path, (parent: any, key: EditorKey) => parent[key] = value);\n  }\n\n  get(path: ControlPath): any {\n    return this.findNodeByPath(this.root$.getValue(), path);\n  }\n\n  select(path: ControlPath): Observable<any> {\n    return this.root$.pipe(\n      map(root => this.findNodeByPath(root, path)),\n      distinctUntilChanged(),\n    );\n  }\n\n  // addItem(path: ControlPath, childKey: EditorKey): void {\n  //   this.process(path, (parent: any, key: EditorKey) => {\n  //     const node = parent[key];\n  //     if (Array.isArray(node)) {\n  //       node.push(null);\n  //     } else {\n  //       parent[key] = { ...node, [childKey]: null };\n  //     }\n  //   });\n  // }\n  //\n  // insertItem(): void {\n  //\n  // }\n\n  remove(path: ControlPath): void {\n    // console.log('remove', stringifyPath(path));\n    this.process(path, (parent: any, key: EditorKey) => {\n      if (Array.isArray(parent)) {\n        const index = key as number;\n        parent.splice(index, 1);\n      } else {\n        delete parent[key];\n      }\n    });\n  }\n\n  private findNodeByPath(root: any, path: ControlPath) {\n    let result = root;\n    for (const segment of path) {\n      if (!result) {\n        result = null;\n        break;\n      }\n      result = result[segment.key];\n    }\n\n    return result;\n  }\n\n  private process(path: ControlPath, func: (parent: any, key: EditorKey) => void): any {\n    const root = produce<any>(this.root$.getValue(), (draft) => {\n      const parentPath = path.slice(0, -1);\n      const last = path[path.length - 1];\n\n      let nearestParent = draft;\n      for (const segment of parentPath) {\n        nearestParent[segment.key] = nearestParent[segment.key] || {};\n        nearestParent = nearestParent[segment.key];\n      }\n\n      func(nearestParent, last.key);\n    });\n    // console.log('process', root.preview?.subscription?.numberOfShares, root.preview);\n    this.root$.next(root);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ControlState } from './models';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { IdService } from './id.service';\nimport produce from 'immer';\n\nconst defaultState = {\n  touched: false,\n  dirty: false,\n  valid: true,\n  errors: [],\n};\n\ninterface StateSnapshot {\n  [id: number]: ControlState;\n}\n\n@Injectable()\nexport class StateService {\n  snapshot$ = new BehaviorSubject<StateSnapshot>({});\n\n  constructor(\n    public idService: IdService,\n  ) { }\n\n  get(id: number): ControlState {\n    return this.snapshot$.getValue()[id];\n  }\n\n  set(id: number, state: ControlState): void {\n    // console.log('set', id, state);\n    this.process(snapshot => {\n      snapshot[id] = state;\n\n      const parents = this.idService.getParentsIds(id);\n      for (const parentId of parents) {\n        const parentControlState = snapshot[parentId];\n        if (state.touched) {\n          parentControlState.touched = true;\n        }\n        if (state.dirty) {\n          parentControlState.dirty = true;\n        }\n        if (!state.valid) {\n          parentControlState.valid = false;\n        }\n      }\n    });\n  }\n\n  patch(id: number, state: Partial<ControlState>): void {\n    // console.log('patch', id, state);\n    this.process(snapshot => {\n      const oldState = snapshot[id];\n      snapshot[id] = { ...oldState, ...state };\n\n      const parents = this.idService.getParentsIds(id);\n      for (const parentId of parents) {\n        const parentControlState = snapshot[parentId];\n        if ('touched' in state && state.touched) {\n          parentControlState.touched = true;\n        }\n        if ('dirty' in state && state.dirty) {\n          parentControlState.dirty = true;\n        }\n        if ('valid' in state && !state.valid) {\n          parentControlState.valid = false;\n        }\n      }\n    });\n  }\n\n  reset(id: number, state: Partial<ControlState> = {}): void {\n    // console.log('reset', id, state);\n    this.set(id, { ...defaultState, ...state });\n  }\n\n  remove(id: number): void {\n    this.process(snapshot => {\n      delete snapshot[id];\n    });\n  }\n\n  markAllAsTouched(id: number): void {\n    this.process(snapshot => {\n      const ids = [id, ...this.idService.getDescendantsIds(id)];\n      for (const id1 of ids) {\n        snapshot[id1] = { ...snapshot[id1], touched: true };\n      }\n    });\n  }\n\n  selectAll(): Observable<any> {\n    return this.snapshot$.pipe(\n      distinctUntilChanged(),\n    );\n  }\n\n  select(id: number): Observable<any> {\n    return this.snapshot$.pipe(\n      map(snapshot => snapshot[id]),\n      distinctUntilChanged(),\n    );\n  }\n\n  selectKey(id: number, key: keyof ControlState): Observable<any> {\n    return this.select(id).pipe(\n      map(state => state[key]),\n      distinctUntilChanged(),\n    );\n  }\n\n  private process(func: (snapshot: StateSnapshot) => void): void {\n    const snapshot = produce<StateSnapshot>(this.snapshot$.getValue(), (draft) => func(draft));\n    // console.log('process', snapshot);\n    this.snapshot$.next(snapshot);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ControlMeta } from './models';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport produce from 'immer';\n\ninterface MetaSnapshot {\n  [id: number]: ControlMeta;\n}\n\n@Injectable()\nexport class MetaService {\n  snapshot$ = new BehaviorSubject<MetaSnapshot>({});\n\n  constructor() { }\n\n  get(id: number): ControlMeta {\n    return this.snapshot$.getValue()[id];\n  }\n\n  set(id: number, meta: ControlMeta): void {\n    // console.log('set', id, meta);\n    this.process(snapshot => {\n      if (!snapshot[id]) {\n        snapshot[id] = meta;\n      } else {\n        for (const [key, value] of Object.entries(meta)) {\n          if (JSON.stringify(snapshot[id][key]) !== JSON.stringify(value)) {\n            snapshot[id][key] = value;\n          }\n        }\n      }\n    });\n  }\n\n  patch(id: number, meta: Partial<ControlMeta>): void {\n    // console.log('patch', id, meta);\n    this.process(snapshot => {\n      const oldMeta = snapshot[id];\n      snapshot[id] = { ...oldMeta, ...(meta as ControlMeta) };\n    });\n  }\n\n  remove(id: number): void {\n    // console.log('remove', id);\n    this.process(snapshot => {\n      delete snapshot[id];\n    });\n  }\n\n  selectAll(): Observable<any> {\n    return this.snapshot$.pipe(\n      distinctUntilChanged(),\n    );\n  }\n\n  select(id: number): Observable<any> {\n    return this.snapshot$.pipe(\n      map(snapshot => snapshot[id]),\n      distinctUntilChanged(),\n    );\n  }\n\n  // selectKey(id: number, key: keyof ControlMeta): Observable<any> {\n  //   return this.select(id).pipe(\n  //     map(meta => meta[key]),\n  //     distinctUntilChanged(),\n  //   );\n  // }\n\n  private process(func: (snapshot: MetaSnapshot) => void): void {\n    const snapshot = produce<MetaSnapshot>(this.snapshot$.getValue(), (draft) => func(draft));\n    // console.log('process', snapshot);\n    this.snapshot$.next(snapshot);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ValidationError, ValidationResult, ValidatorMeta } from './models';\nimport { ValidatorContext } from './validator';\nimport { forkJoin, isObservable, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ElementRegistry } from '../element-registry';\n\n@Injectable()\nexport class ValidationService {\n\n  constructor(\n    private elementRegistry: ElementRegistry,\n  ) { }\n\n  validate(value: any, validators: ValidatorMeta[], context: ValidatorContext): Observable<ValidationError[]> {\n    return this.runValidators(value, validators, context).pipe(\n      map(items => items\n        .filter(item => item.result !== null)\n        .map(({ name, result }) => ({ name, ...result }) as ValidationError),\n      ),\n    );\n  }\n\n  private runValidators(value: any, validators: ValidatorMeta[], context: ValidatorContext): Observable<{ name: string; result: ValidationResult }[]> {\n    if (!validators.length) {\n      return of([]);\n    }\n\n    const observables = validators\n      .filter(meta => !meta.disabled)\n      .map(meta => {\n        const entry = this.elementRegistry.get('validator', meta.name);\n\n        if (!entry) {\n          throw new Error(`Validator with name \"${meta.name}\" is not registered`);\n        }\n\n        const result = entry.element.validate(value, meta, context);\n        if (isObservable(result)) {\n          return result.pipe(\n            map(result => ({ name: meta.name, result })),\n          );\n        }\n\n        return of({ name: meta.name, result });\n      });\n\n    return forkJoin(observables);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { combineLatest, Observable, of, startWith, switchMap } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { CommandSchema, ControlMeta, ControlPath, ControlSchema, PropertySchema, ResolverSchema } from './models';\nimport { parsePath } from './util/path';\nimport { ASTNode } from './formula/impl/node';\nimport { IdService } from './id.service';\nimport { ValueService } from './value.service';\nimport { FormulaService } from './formula/formula.service';\nimport { VariablesService } from './variables.service';\nimport { ValidatorMeta, ValidatorSchema } from './validators/models';\nimport { ElementRegistry } from './element-registry';\nimport { ArrayPropertyDescription, ComponentDescription, NodeDescription, ObjectPropertyDescription } from './schema/types';\n\n@Injectable()\nexport class ComputationService {\n\n  constructor(\n    private idService: IdService,\n    private valueService: ValueService,\n    private elementRegistry: ElementRegistry,\n    private formulaService: FormulaService,\n    private variablesService: VariablesService,\n  ) { }\n\n  computeControlSchema(controlId: number, schema: ControlSchema): Observable<ControlMeta> {\n    let { archetype, name, defaultValue } = schema;\n\n    const nodes = this.elementRegistry.getStructure('component', schema.name)!;\n\n    const entries = nodes.map(prop => [prop.key, this.computeNode(controlId, prop, schema[prop.key])]);\n    const toCompute1: Record<string, Observable<any>> = Object.fromEntries(entries);\n\n    return combineLatest(toCompute1).pipe(\n      map((properties: Record<string, any>) => {\n        return {\n          archetype, name, defaultValue, ...properties,\n        } as any;\n      }),\n    );\n  }\n\n  computeValidator(controlId: number, schema: ValidatorSchema): Observable<ValidatorMeta> {\n    const { name, ...properties } = schema;\n\n    return this.computeObject(controlId, properties).pipe(\n      map(computedProperties => {\n        return {\n          name: name,\n          ...computedProperties,\n        };\n      }),\n    );\n  }\n\n  computeComponent(controlId: number, description: ({ key?: string } & ComponentDescription), schema: any): Observable<any> {\n    const { key, ...ref } = schema;\n\n    return of(schema);\n  }\n\n  computeObject(controlId: number, properties: Record<string, PropertySchema<any>>): Observable<Record<string, any>> {\n    let entries = Object.entries(properties);\n\n    if (!entries.length) {\n      return of({});\n    }\n\n    const observables: Record<string, Observable<any>> = {};\n    for (const [name, param] of entries) {\n      // if (Array.isArray(param)) {\n      //   observables[name] = this.computeArray(controlId, param);\n      // } else\n      if (param?.kind) {\n        observables[name] = this.compute(controlId, param).pipe(distinctUntilChanged());\n      } else if (typeof param === 'string') {\n        observables[name] = this.compute(controlId, { kind: 'value', value: param }).pipe(distinctUntilChanged());\n      } else {\n        observables[name] = of(param);\n      }\n    }\n\n    return combineLatest(observables);\n  }\n\n  createParams(controlId: number, params: Record<string, any> = {}): Observable<Record<string, any>> {\n    // console.log('createParams', controlId, params);\n    const entries = Object.entries(params);\n\n    if (!entries.length) {\n      return of({});\n    }\n\n    const observables: Record<string, Observable<any>> = {};\n    for (const [name, param] of entries) {\n      if (Array.isArray(param)) {\n        observables[name] = this.computeArray(controlId, param);\n      } else {\n        observables[name] = this.compute(controlId, param);\n      }\n    }\n    // console.log(observables);\n    return combineLatest(observables);\n  }\n\n  private computeArray(controlId: number, params: any[]): Observable<Record<string, any>> {\n    // console.log('computeArray', params);\n    if (params.length) {\n      if (params[0].name) {\n        const observables: Record<string, Observable<any>> = {};\n        for (const param of params) {\n          observables[param.name] = this.compute(controlId, param);\n        }\n        return combineLatest(observables);\n      } else {\n        const observables = params.map(param => this.compute(controlId, param));\n        return combineLatest(observables);\n      }\n    } else {\n      return of({});\n    }\n  }\n\n  private compute(controlId: number, param: PropertySchema<any>): Observable<any> {\n    return this.doCompute(controlId, param).pipe(\n      map(value => 'inverted' in param && param.inverted ? !value : value),\n    );\n  }\n\n  private doCompute(controlId: number, schema: PropertySchema<any>): Observable<any> {\n    // console.log('doCompute', schema);\n    if (!schema) {\n      throw new Error(`Param is not defined`);\n    }\n\n    if (schema.kind === 'resolver') {\n      return this.createResolver(controlId, schema.resolver);\n    } else if (schema.kind === 'command') {\n      return this.createCommand(controlId, schema.command);\n    } else if (schema.kind === 'formula') {\n      return this.createFormula(controlId, schema.formula);\n    } else if (schema.kind === 'form-value') {\n      if (!schema.path) {\n        return of(null);\n      }\n\n      let depPath: ControlPath;\n      depPath = this.resolveRelativePath(controlId, schema.path);\n\n      if (!this.idService.has(depPath)) {\n        // throw new Error(`No control with path \"${stringifyPath(depPath)}\" found`);\n        // console.warn(`No control with path \"${stringifyPath(depPath)}\" found`);\n      }\n\n      return this.valueService.select(depPath);\n    } else if (schema.kind === 'variable') {\n      return this.variablesService.select(controlId, schema.name);\n    } else if (schema.kind === 'value') {\n      return this.computeValue(controlId, schema);\n    }\n\n    throw new Error(`Parameter kind \"${schema.kind}\" is not recognised.`);\n  }\n\n  private computeValue(controlId: number, param: any): Observable<any> {\n    if (Array.isArray(param.value)) {\n      const observables = param.value.map((item: any) => this.computeObject(controlId, item));\n      return combineLatest(observables);\n    }\n    if (typeof param.value === 'string') {\n      const matches = [...param.value.matchAll(/{{[^{}]+}}/g)].map(match => match[0].slice(2, -2));\n      if (matches.length) {\n        const observables: Record<string, Observable<any>> = Object.fromEntries(matches\n          .map(match => {\n            let newParam: PropertySchema<any>;\n            if (match === '.' || match.startsWith('./') || match.startsWith('../')) {\n              newParam = { kind: 'form-value', path: match };\n            } else {\n              newParam = { kind: 'variable', name: match };\n            }\n\n            return [match, this.doCompute(controlId, newParam)];\n          }),\n        );\n\n        return combineLatest(observables).pipe(\n          map(matches => {\n            return param.value.replaceAll(/{{[^{}]+}}/g, (name: string) => {\n              const replacement = matches[name.slice(2, -2)];\n\n              if (replacement && typeof replacement === 'object') {\n                return JSON.stringify(replacement);\n              }\n\n              return replacement;\n            });\n          }),\n        );\n      }\n    }\n\n    return of(param.value);\n  }\n\n  createResolver(controlId: number, resolverSchema: ResolverSchema): Observable<any> {\n    // console.log('createResolver', controlId, resolverSchema);\n    if (!resolverSchema) {\n      return of(null);\n    }\n\n    let { name, ...params } = resolverSchema;\n    params = params || {};\n    for (const paramName of Object.keys(params)) {\n      if (paramName.startsWith('__')) {\n        delete params[paramName];\n      }\n    }\n\n    if (!name) {\n      return of(null);\n    }\n\n    const entry = this.elementRegistry.get('resolver', name);\n    if (!entry) {\n      throw new Error(`Resolver with name \"${name}\" is not registered`);\n    }\n\n    return this.createParams(controlId, params).pipe(\n      // tap(a => console.log(a)),\n      switchMap(resolverParams => entry.element.resolve(controlId, resolverParams).pipe(\n        startWith(null),\n      )),\n    );\n  }\n\n  private createCommand(controlId: number, commandSchema: CommandSchema): Observable<any> {\n    // console.log('createCommand', controlId, resolverSchema);\n    if (!commandSchema) {\n      return of(null);\n    }\n\n    let { name, ...params } = commandSchema;\n    params = params || {};\n    for (const paramName of Object.keys(params)) {\n      if (paramName.startsWith('__')) {\n        delete params[paramName];\n      }\n    }\n\n    const entry = this.elementRegistry.get('command', name);\n    if (!entry) {\n      throw new Error(`Command with name \"${name}\" is not registered`);\n    }\n\n    return of((componentParams: Record<string, any> = {}) => {\n      return this.computeObject(controlId, params).pipe(\n        switchMap(resolvedParams => entry.element.execute(controlId, resolvedParams, componentParams)),\n      );\n    });\n  }\n\n  private createFormula(controlId: number, formula: string): Observable<any> {\n    try {\n      const node = this.formulaService.parse(formula);\n      return this.createFormulaNode(controlId, node);\n    } catch (e: any) {\n      return of(null);\n    }\n  }\n\n  private createFormulaNode(controlId: number, node: ASTNode): Observable<any> {\n    if (node.type === 'function') {\n      const entry = this.elementRegistry.get('formula', node.name);\n      if (!entry) {\n        throw new Error(`Formula with name \"${node.name}\" is not registered`);\n      }\n\n      return this.createArgs(controlId, node.args).pipe(\n        // tap(a => console.log(a)),\n        switchMap(args => entry.element.execute(controlId, args)),\n      );\n    } else if (node.type === 'value') {\n      return of(node.value);\n    } else if (node.type === 'variable') {\n      if (node.name === 'this') {\n        const path = this.idService.getPath(controlId);\n        return this.valueService.select(path);\n      }\n\n      return this.variablesService.select(controlId, node.name);\n    } else if (node.type === 'path') {\n      if (!node.path.startsWith('.')) {\n        throw new Error(`Path \"${node.path}\" is incorrect.`);\n      }\n\n      const depPath: ControlPath = this.resolveRelativePath(controlId, node.path);\n      if (!this.idService.has(depPath)) {\n        // throw new Error(`No control with path \"${stringifyPath(depPath)}\" found`);\n        // console.warn(`No control with path \"${stringifyPath(depPath)}\" found`);\n      }\n\n      return this.valueService.select(depPath);\n    }\n\n    throw new Error(`Cannot create node. Node: ${JSON.stringify(node)}`);\n  }\n\n  private createArgs(controlId: number, args: ASTNode[]): Observable<any> {\n    // console.log('createArgs', args);\n    const observables = args.map(arg => this.createFormulaNode(controlId, arg));\n    // console.log(observables);\n    return combineLatest(observables);\n  }\n\n  private resolveRelativePath(controlId: number, depPath: string): ControlPath {\n    const path = this.idService.getPath(controlId);\n\n    if (depPath === '.') {\n      return path;\n    }\n\n    const relativePath = parsePath(depPath);\n    while (relativePath[0].key === '.') {\n      relativePath.shift();\n    }\n    while (relativePath[0].key === '..') {\n      relativePath.shift();\n      path.pop();\n    }\n    return [...path, ...relativePath];\n  }\n\n  private computeNode(controlId: number, description: ({ key?: string } & NodeDescription), propSchema: any): Observable<any> {\n    switch (description.type) {\n      case 'boolean':\n        return this.computeBooleanProperty(controlId, propSchema);\n      case 'text':\n        return this.computeTextProperty(controlId, propSchema);\n      case 'number':\n        return this.computeNumberProperty(controlId, propSchema);\n      case 'array':\n        return this.computeArrayNode(controlId, description, propSchema);\n      case 'object':\n        return this.computeObjectProperty(controlId, description, propSchema);\n      case 'command':\n        return this.createCommand(controlId, propSchema);\n      case 'validator':\n        return this.computeValidator(controlId, propSchema);\n      case 'component':\n        return this.computeComponent(controlId, description, propSchema);\n      default:\n        throw new Error(`Cannot compute property \"${JSON.stringify(propSchema)}\". Description: ${JSON.stringify(description)}`);\n    }\n  }\n\n  private computeBooleanProperty(controlId: number, propSchema: any): Observable<any> {\n    return this.doCompute(controlId, propSchema).pipe(\n      map(value => {\n        const inverted = 'inverted' in propSchema && propSchema.inverted;\n        return inverted ? !value : value;\n      }),\n    );\n  }\n\n  private computeTextProperty(controlId: number, propSchema: any): Observable<string> {\n    return this.doCompute(controlId, propSchema).pipe(\n      map(value => String(value)),\n    );\n  }\n\n  private computeNumberProperty(controlId: number, propSchema: any): Observable<number> {\n    return this.doCompute(controlId, propSchema).pipe(\n      map(value => Number(value)),\n    );\n  }\n\n  private computeArrayNode(controlId: number, description: ArrayPropertyDescription, arraySchema: any): Observable<any> {\n    if (Array.isArray(arraySchema) && description.item.type === 'component') {\n      return of(arraySchema);\n    }\n\n    if (arraySchema.kind === 'value') {\n      if (arraySchema.value.length) {\n        const observables = arraySchema.value.map((itemSchema: any) => this.computeNode(controlId, description.item, itemSchema));\n        return combineLatest(observables);\n      }\n\n      return of([]);\n    }\n\n    return this.doCompute(controlId, arraySchema);\n  }\n\n  private computeObjectProperty(controlId: number, description: ObjectPropertyDescription, objectSchema: Record<string, any>): Observable<any> {\n    if (description.children.length) {\n      const entries = description.children\n        .map((child: any) => [child.key, this.computeNode(controlId, child, objectSchema[child.key])]);\n      return combineLatest(Object.fromEntries(entries));\n    }\n\n    return of({});\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Archetype } from './archetype';\n\n@Injectable()\nexport class ArchetypeRegistry {\n  registry: Record<string, Archetype> = {};\n\n  constructor() { }\n\n  set(name: string, archetype: Archetype): void {\n    this.registry[name] = archetype;\n  }\n\n  setAll(map: Record<string, Archetype>): void {\n    for (const [name, archetype] of Object.entries(map)) {\n      this.registry[name] = archetype;\n    }\n  }\n\n  get(name: string): Archetype | undefined {\n    return this.registry[name];\n  }\n\n  has(name: string): boolean {\n    return !!this.get(name);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ElementRegistry } from '../element-registry';\nimport { ObjectPropertyDescription } from './types';\n\nconst language = localStorage.getItem('fg-language') || 'en';\n\n@Injectable()\nexport class SchemaNormalizationService {\n\n  constructor(\n    private elementRegistry: ElementRegistry,\n  ) { }\n\n  private normalizeNode(description: any, nodeSchema: any): any {\n    if (description.type === 'boolean') {\n      return this.normalizeBooleanPropValue(nodeSchema);\n    }\n\n    if (description.type === 'number') {\n      return this.normalizeNumberPropValue(nodeSchema);\n    }\n\n    if (description.type === 'text') {\n      return this.normalizeTextPropValue(nodeSchema);\n    }\n\n    if (description.type === 'array') {\n      return this.normalizeArrayPropValue(description, nodeSchema);\n    }\n\n    if (description.type === 'object') {\n      return this.normalizeObjectPropValue(description, nodeSchema);\n    }\n\n    if (description.type === 'command') {\n      return this.normalizeCommandSchema(nodeSchema);\n    }\n\n    if (description.type === 'validator') {\n      return this.normalizeValidatorSchema(nodeSchema);\n    }\n\n    if (description.type === 'component') {\n      return this.normalizeComponentSchema(nodeSchema);\n    }\n\n    throw new Error(`Description \"${JSON.stringify(description)}\" is not correct.`);\n  }\n\n  private normalizeBooleanPropValue(propValue: any): Object {\n    if (!propValue) {\n      return { kind: 'value', value: false, inverted: false };\n    }\n    if (typeof propValue === 'boolean') {\n      return { kind: 'value', value: propValue, inverted: false };\n    }\n    if (!propValue.kind) {\n      return { kind: 'value', value: false, inverted: false };\n    }\n\n    return propValue;\n  }\n\n  private normalizeNumberPropValue(propValue: any): Object {\n    if (!propValue) {\n      return { kind: 'value', value: 0 };\n    }\n    if (typeof propValue === 'number') {\n      return { kind: 'value', value: propValue };\n    }\n    if (!propValue.kind) {\n      return { kind: 'value', value: 0 };\n    }\n\n    return propValue;\n  }\n\n  private normalizeTextPropValue(propValue: any): Object {\n    if (!propValue) {\n      return { kind: 'value', value: '' };\n    }\n    if (typeof propValue === 'string') {\n      return { kind: 'value', value: propValue };\n    }\n    if (!propValue.kind) {\n      return { kind: 'value', value: '' };\n    }\n    if (propValue.kind === 'resolver') {\n      const resolverSchema = this.normalizeResolverSchema(propValue.resolver);\n      return { kind: 'resolver', resolver: resolverSchema };\n    }\n\n    return propValue;\n  }\n\n  private normalizeArrayPropValue(description: any, nodeSchema: any): any {\n    if (!nodeSchema) {\n      return { kind: 'value', value: [] };\n    }\n    if (Array.isArray(nodeSchema)) {\n      const value = nodeSchema.map((item: any) => this.normalizeNode(description.item, item));\n      return { kind: 'value', value };\n    }\n    if (typeof nodeSchema === 'object') {\n      if (nodeSchema.kind === 'value') {\n        const value: any = nodeSchema.value.map((item: any) => this.normalizeNode(description.item, item));\n        return { ...nodeSchema, value };\n      }\n      if (nodeSchema.kind === 'resolver') {\n        const resolverSchema = this.normalizeResolverSchema(nodeSchema.resolver);\n        return { kind: 'resolver', resolver: resolverSchema };\n      }\n      if (nodeSchema.kind) {\n        return nodeSchema;\n      }\n    }\n\n    throw new Error(`Cannot normalize array property\\n\"${JSON.stringify(nodeSchema, null, 2)}\".\\n\\nDescription:\\n\"${JSON.stringify(description, null, 2)}\".`);\n  }\n\n  private normalizeObjectPropValue(description: ObjectPropertyDescription, propValue: any): any {\n    const entries = description.children\n      .map((child: any) => [child.key, this.normalizeNode(child, propValue[child.key])]);\n    return Object.fromEntries(entries);\n  }\n\n  private normalizeCommandSchema(schema: any): any {\n    if (typeof schema === 'object' && schema.kind === 'command') {\n      schema = schema.command;\n    }\n\n    if (!schema || !schema.name) {\n      return null;\n    }\n\n    return this.normalizeElementSchema('command', schema);\n  }\n\n  normalizeComponentSchema(schema: any): any {\n    if (!schema) {\n      debugger;\n    }\n\n    if (schema.ref) {\n      return schema;\n    }\n\n    const normalized = this.normalizeElementSchema('component', schema);\n\n    if (schema.key) {\n      normalized.key = schema.key;\n    }\n    if (schema.defaultValue) {\n      normalized.defaultValue = schema.defaultValue;\n    }\n\n    return normalized;\n  }\n\n  private normalizeValidatorSchema(schema: any): any {\n    return this.normalizeElementSchema('validator', schema);\n  }\n\n  private normalizeResolverSchema(schema: any): any {\n    if (!schema || !schema.name) {\n      return null;\n    }\n\n    return this.normalizeElementSchema('resolver', schema);\n  }\n\n  normalizeElementSchema(type: string, schema: any): any {\n    const structure = this.elementRegistry.getStructure(type, schema.name);\n\n    const entries = structure.map(node => {\n      const nodeSchema = schema[node.key];\n      return [node.key, this.normalizeNode(node, nodeSchema)];\n    });\n\n    return { name: schema.name, ...Object.fromEntries(entries) };\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { InstanceSchema, RawControlSchema } from '../models';\nimport { ElementRegistry } from '../element-registry';\nimport { ArrayPropertyDescription, NodeDescription, ObjectPropertyDescription } from './types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SchemaDenormalizationService {\n\n  constructor(\n    private elementRegistry: ElementRegistry,\n  ) { }\n\n  toRawControlSchema(schema: InstanceSchema): RawControlSchema {\n    return { ...this.nestify(schema, null, schema.root.ref) };\n  }\n\n  nestify(instanceSchema: InstanceSchema, key: string | null, ref: string): RawControlSchema {\n    const element: any = { ...instanceSchema.controls[ref] };\n    delete element.archetype;\n\n    if (key) {\n      element.key = key;\n    }\n\n    const control = instanceSchema.controls[ref];\n    const entry = this.elementRegistry.get('component', control.name);\n    if (!entry) {\n      throw new Error(`Component with name \"${control.name}\" is not registered.`);\n    }\n\n    const props = this.denormalizeElementSchema('component', element.name, element);\n    for (const [name, prop] of Object.entries(props)) {\n      element[name] = prop;\n    }\n\n    if (element.children) {\n      element.children = element.children.map((child: any) => {\n        return this.nestify(instanceSchema, child.key, child.ref);\n      });\n    } else if (element.branches) {\n      element.branches = element.branches.map((branch: any) => {\n        branch.children = branch.children.map((child: any) => {\n          return this.nestify(instanceSchema, child.key, child.ref);\n        });\n        return branch;\n      });\n    } else if (element.item) {\n      element.item = this.nestify(instanceSchema, null, element.item.ref);\n    }\n    return element;\n  }\n\n  denormalizeElementSchema(type: string, name: string, schema: any): any {\n    const structure = this.elementRegistry.getStructure(type, name);\n    const entries = structure.map(node => {\n      const schemaNode = schema[node.key];\n      return [node.key, this.denormalizeNodeSchema(node, schemaNode)];\n    });\n\n    return Object.fromEntries(entries);\n  }\n\n  denormalizeNodeSchema(description: NodeDescription, schema: any): any {\n    switch (description.type) {\n      case 'boolean':\n        return this.denormalizeBooleanProperty(schema);\n      case 'number':\n        return this.denormalizeNumberProperty(schema);\n      case 'text':\n        return this.denormalizeTextProperty(schema);\n      case 'array':\n        return this.denormalizeArrayProperty(description, schema);\n      case 'object':\n        return this.denormalizeObjectProperty(description, schema);\n      case 'command':\n        return this.denormalizeCommand(schema);\n      case 'validator':\n        return this.denormalizeValidator(schema);\n      case 'component':\n        return this.denormalizeComponent(schema);\n      default:\n        throw new Error(`Property description \"${JSON.stringify(description)}\" is not recognised.`);\n    }\n  }\n\n  private denormalizeObjectProperty(description: ObjectPropertyDescription, propValue: any): { [p: string]: any } {\n    // propValue = propValue || {};\n    const entries = description.children\n      .map((child: any) => [child.key, this.denormalizeNodeSchema(child, propValue[child.key])]);\n    return Object.fromEntries(entries);\n  }\n\n  private denormalizeArrayProperty(description: ArrayPropertyDescription, propValue: any): Object {\n    if (!propValue) {\n      return [];\n    }\n    if (Array.isArray(propValue)) {\n      return propValue;\n    }\n    if (propValue.kind === 'value') {\n      return propValue.value.map((itemValue: any) => this.denormalizeNodeSchema(description.item, itemValue));\n    }\n\n    return propValue;\n  }\n\n  private denormalizeTextProperty(propValue: any): Object {\n    if (!propValue) {\n      return '';\n    }\n    if (typeof propValue === 'string') {\n      return propValue;\n    }\n    if (propValue.kind === 'value') {\n      return propValue.value;\n    }\n\n    return propValue;\n  }\n\n  private denormalizeNumberProperty(propValue: any): Object {\n    if (!propValue) {\n      return 0;\n    }\n    if (typeof propValue === 'number') {\n      return propValue;\n    }\n    if (propValue.kind === 'value') {\n      return propValue.value;\n    }\n\n    return propValue;\n  }\n\n  private denormalizeBooleanProperty(propValue: any): Object {\n    if (!propValue) {\n      return false;\n    }\n    if (typeof propValue === 'boolean') {\n      return propValue;\n    }\n    if (propValue.kind === 'value') {\n      return propValue.inverted ? !propValue.value : propValue.value;\n    }\n\n    return propValue;\n  }\n\n  private denormalizeCommand(node: any): Object {\n    const schema = node.command;\n    const nodes = this.elementRegistry.getStructure('command', schema.name);\n\n    const entries = nodes.map(prop => {\n      const nodeSchema = schema[prop.key];\n      return [prop.key, this.denormalizeNodeSchema(prop, nodeSchema)];\n    });\n\n    return { name: schema.name, ...Object.fromEntries(entries) };\n  }\n\n  private denormalizeValidator(schema: any): Object {\n    const nodes = this.elementRegistry.getStructure('validator', schema.name);\n\n    const entries = nodes.map(prop => {\n      const nodeSchema = schema[prop.key];\n      return [prop.key, this.denormalizeNodeSchema(prop, nodeSchema)];\n    });\n\n    return { name: schema.name, ...Object.fromEntries(entries) };\n  }\n\n  private denormalizeComponent(schema: any): Object {\n    const nodes = this.elementRegistry.getStructure('component', schema.name);\n\n    const entries = nodes.map(prop => {\n      const nodeSchema = schema[prop.key];\n      return [prop.key, this.denormalizeNodeSchema(prop, nodeSchema)];\n    });\n\n    return { name: schema.name, ...Object.fromEntries(entries) };\n  }\n}\n","export const archetypeMap: Record<string, string> = {\n  'vest:checkbox': 'input:generic',\n  'vest:yes-no': 'input:generic',\n  'vest:text-input': 'input:generic',\n  'vest:text-area': 'input:generic',\n  'vest:number-input': 'input:generic',\n  'vest:date-input': 'input:generic',\n  'vest:dropdown': 'input:generic',\n  'vest:multi-select': 'input:generic',\n  'vest:radio-group': 'input:generic',\n  'vest:file-upload': 'input:generic',\n\n  'vest:group': 'input:group',\n  'vest:one-of': 'input:one-of',\n  'vest:ordered-list': 'input:ordered-list',\n\n  'bc:wizard': 'input:group',\n  'bc:group': 'input:group',\n  'bc:panel': 'input:group',\n  'bc:ordered-list': 'input:ordered-list',\n  'bc:autocomplete': 'input:generic',\n  'bc:dropdown': 'input:generic',\n  'bc:multi-select': 'input:generic',\n  'bc:checkbox': 'input:generic',\n  'bc:text-input': 'input:generic',\n  'bc:text-area': 'input:generic',\n  'bc:number-input': 'input:generic',\n  'bc:date-input': 'input:generic',\n  'bc:place-input': 'input:generic',\n  'bc:radio-group': 'input:generic',\n  'bc:id-ocr-comparison': 'input:generic',\n  'bc:yes-no': 'input:generic',\n  'bc:file-upload': 'input:generic',\n  'bc:button-tags': 'input:generic',\n\n  'native:hidden': 'input:hidden',\n  'native:text-input': 'input:generic',\n  'native:number-input': 'input:generic',\n  'native:select': 'input:generic',\n  'native:multi-select': 'input:generic',\n\n  'native:group': 'input:group',\n  'native:ordered-list': 'input:ordered-list',\n  'native:named-list': 'input:named-list',\n  'native:one-of': 'input:one-of',\n\n  'native:control': 'input:one-of',\n  'native:key-input': 'input:generic',\n  'native:formula-input': 'input:generic',\n  'native:property': 'input:one-of',\n  'native:boolean-property': 'input:one-of',\n  'native:validators': 'input:one-of',\n  'native:element-schema-editor': 'input:group',\n};\n","import { Injectable } from '@angular/core';\nimport { ControlSchema, InstanceSchema, RawControlSchema } from '../models';\nimport { SchemaNormalizationService } from './schema-normalization.service';\nimport { archetypeMap } from './archetype-map';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class InstanceSchemaCreationService {\n\n  constructor(\n    private normalizer: SchemaNormalizationService,\n  ) { }\n\n  toInstanceSchema(name: string, schema: RawControlSchema): InstanceSchema {\n    const flattened = this.flattenSchema(name, schema);\n\n    const entries = Object.entries(flattened.controls).map(([ref, control]: [ref: string, control: any]) => {\n      return [ref, this.normalizeControlSchema(control)];\n    });\n    const controls = Object.fromEntries(entries);\n\n    return { ...flattened, controls };\n  }\n\n  private flattenSchema(name: string, schema: any): any {\n    const flatSchema = { name, root: schema, controls: {}, increment: 1 };\n    flatSchema.root = this.flattenNode(flatSchema, { ...schema });\n    return flatSchema;\n  }\n\n  private flattenNode(schema: any, controlNode: (RawControlSchema & { key?: string; ref?: string })): any {\n    if (typeof controlNode.ref === 'string') {\n      const { key, ref } = controlNode;\n      return this.flattenNodeWithRef({ key, ref });\n    }\n\n    const { definitions, ...rest } = controlNode;\n    const entries = Object.entries<RawControlSchema>(definitions || {});\n    for (const [ref, control] of entries) {\n      this.flattenNodeWithoutRef(schema, ref, { ...control });\n    }\n\n    const index = schema.increment++;\n    const ref = 'w-' + index;\n    return this.flattenNodeWithoutRef(schema, ref, rest);\n  }\n\n  private flattenNodeWithRef(controlNode: { key?: string; ref: string }): any {\n    const { key, ref } = controlNode;\n    if (key) {\n      return { key, ref };\n    } else {\n      return { ref };\n    }\n  }\n\n  private flattenNodeWithoutRef(schema: any, ref: string, controlNode: any): any {\n    if (controlNode.children) {\n      if (Array.isArray(controlNode.children)) {\n        controlNode.children = controlNode.children.map((child: any) => {\n          return this.flattenNode(schema, { ...child });\n        });\n      } else if (controlNode.children && controlNode.children.kind === 'value') {\n        controlNode.children.value = controlNode.children.value.map((child: any) => {\n          return this.flattenNode(schema, { ...child });\n        });\n      }\n    } else if (controlNode.branches) {\n      const common = controlNode.common || [];\n      controlNode.common = common.map((child: any) => this.flattenNode(schema, { ...child }));\n      controlNode.branches = controlNode.branches.map((branch: any) => {\n        branch.children = branch.children.map((child: any) => this.flattenNode(schema, { ...child }));\n        return branch;\n      });\n    } else if (controlNode.item) {\n      controlNode.item = this.flattenNode(schema, { ...controlNode.item });\n    }\n\n    const { key, ...control } = controlNode;\n\n    schema.controls[ref] = control;\n    if (key) {\n      return { key, ref };\n    } else {\n      return { ref };\n    }\n  }\n\n  normalizeControlSchema(schema: any): ControlSchema {\n    const archetype = archetypeMap[schema.name];\n    if (!archetype) {\n      throw new Error(`No archetype mapping for control name \"${schema.name}\".`);\n    }\n\n    const result: ControlSchema = {\n      // ...schema,\n      ...this.normalizer.normalizeComponentSchema(schema),\n      archetype,\n    };\n\n    // if (archetype === 'input:one-of') {\n    //   result.common = schema.common || [];\n    //   result.branches = schema.branches || [];\n    // }\n    // if (archetype === 'input:group') {\n    //   result.children = schema.children || [];\n    // }\n    // if (archetype === 'input:ordered-list' || archetype === 'input:named-list') {\n    //   if (!schema.item) {\n    //     throw new Error(`Invalid schema. Component \"${schema.name}\" requires property \"item\".\\nSchema:\\n${JSON.stringify(schema, null, 2)}`);\n    //   }\n    //   result.item = schema.item;\n    // }\n\n    return result;\n  }\n}\n","import { Injectable, Optional, SkipSelf } from '@angular/core';\nimport { ControlMeta, ControlPath, ControlSchema, ControlState, PathSegment, RawControlSchema } from './models';\nimport { first, Observable, Subject, switchMap } from 'rxjs';\nimport { ValidationService } from './validators/validation.service';\nimport { ValueService } from './value.service';\nimport { StateService } from './state.service';\nimport { MetaService } from './meta.service';\nimport { distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';\nimport { SchemaService } from './schema.service';\nimport { IdService } from './id.service';\nimport { parsePath, stringifyPath } from './util/path';\nimport { VariablesService } from './variables.service';\nimport { InstanceService } from './instance.service';\nimport { ComputationService } from './computation.service';\nimport { ArchetypeRegistry } from './control/archetype/archetype-registry';\nimport { Archetype } from './control/archetype/archetype';\nimport { ElementRegistry } from './element-registry';\nimport { SchemaNormalizationService } from './schema/schema-normalization.service';\nimport { SchemaDenormalizationService } from './schema/schema-denormalization.service';\nimport { InstanceSchemaCreationService } from './schema/instance-schema-creation.service';\n\n@Injectable()\nexport class FormGenService {\n  controlDestroy$ = new Subject<{ controlId: number }>();\n  controlPathChange$ = new Subject<{ controlId: number, path: ControlPath }>();\n  controlSchemaChange$ = new Subject<{ instanceSchemaName: string, ref: string, controlSchema: ControlSchema }>();\n  disconnect$ = new Subject<{ controlId: number }>();\n\n  constructor(\n    private instanceService: InstanceService,\n    private variablesService: VariablesService,\n    private idService: IdService,\n    public schemaService: SchemaService,\n    private valueService: ValueService,\n    private stateService: StateService,\n    private metaService: MetaService,\n    private validationService: ValidationService,\n    private computationService: ComputationService,\n    private archetypeRegistry: ArchetypeRegistry,\n    private elementRegistry: ElementRegistry,\n    private normalizer: SchemaNormalizationService,\n    private denormalizer: SchemaDenormalizationService,\n    private creator: InstanceSchemaCreationService,\n    @Optional() @SkipSelf() parent?: FormGenService,\n  ) {\n    if (parent) {\n      throw Error(`[FormGenService]: trying to create multiple instances, but this service should be a singleton.`);\n    }\n  }\n\n  registerSchema(name: string, schema: RawControlSchema): void {\n    if (this.schemaService.getInstance(name)) {\n      // throw new Error(`An instance with name \"${name}\" has been already registered.`);\n      return;\n    }\n\n    const normalized = this.creator.toInstanceSchema(name, schema);\n    this.schemaService.setInstance(normalized);\n  }\n\n  createInstance(name: string, schemaName: string): void {\n    this.instanceService.add({ name, schemaName });\n\n    const path: ControlPath = [{ key: name }];\n    const schema = this.schemaService.getInstance(schemaName);\n    this.createControl(schema.name, schema.root.ref, path);\n  }\n\n  removeInstance(name: string): void {\n    if (this.instanceService.get(name)) {\n      console.log(this.instanceService.get(name));\n      this.instanceService.remove(name);\n\n      const rootControlId = this.getControlIdByPath([{ key: name }]);\n      this.remove(rootControlId);\n    }\n  }\n\n  // create(instanceSchemaName: string, ref: string, path: ControlPath): void {\n  //   const controlId = this.idService.add(path, ref);\n  //   const schema = this.schemaService.getControl(instanceSchemaName, ref);\n  //   const unregister$ = this.controlDestroy$.pipe(filter(data => data.controlId === controlId));\n  //   this.computationService.computeControlSchema(controlId, schema)\n  //     .pipe(takeUntil(unregister$))\n  //     .subscribe(meta => {\n  //       console.log('create', ref, stringifyPath(path), schema, meta);\n  //       this.metaService.set(controlId, meta);\n  //       this.stateService.reset(controlId);\n  //\n  //       const connector = this.archetypeRegistry.get(meta.archetype);\n  //       if (!connector) {\n  //         throw new Error(`No connector for archetype ${meta.archetype} registered.`);\n  //       }\n  //\n  //       connector.onCreate(instanceSchemaName, controlId);\n  //\n  //       // const value = this.valueService.get(path);\n  //       // this.setValue(controlId, value);\n  //\n  //       this.stateService.reset(controlId);\n  //     });\n  // }\n\n  createControl(instanceSchemaName: string, ref: string, path: ControlPath): number {\n    const controlId = this.idService.add(path, ref);\n\n    const unregister$ = this.controlDestroy$.pipe(filter(data => data.controlId === controlId));\n\n    this.controlPathChange$\n      .pipe(\n        filter((e) => e.controlId === controlId),\n        switchMap(({ controlId, path }) => {\n          // console.log(controlId, stringifyPath(path));\n          return this.valueService.select(path).pipe(\n            map(value => ({ controlId, value, path })),\n          );\n        }),\n        takeUntil(unregister$),\n      )\n      .subscribe(({ controlId, value }) => {\n        this.updateValidity(controlId, value);\n      });\n\n    this.controlSchemaChange$\n      .pipe(\n        filter((e) => e.instanceSchemaName === instanceSchemaName && e.ref === ref),\n        switchMap(({ ref, controlSchema }) => {\n          return this.computationService.computeControlSchema(controlId, controlSchema).pipe(\n            map(meta => {\n              return { controlId, meta, path, ref, instanceSchemaName };\n            }),\n          );\n        }),\n        takeUntil(unregister$),\n      )\n      .subscribe(({ controlId, meta, path, ref, instanceSchemaName }) => {\n        const oldMeta = this.metaService.get(controlId);\n\n        this.metaService.set(controlId, meta);\n\n        const archetype = this.getArchetype(meta.archetype);\n        archetype.afterSchemaChange(instanceSchemaName, controlId, meta, oldMeta);\n      });\n\n    // console.log('createControl', controlId, schema);\n    const controlSchema = this.schemaService.getControl(instanceSchemaName, ref);\n    this.controlSchemaChange$.next({ instanceSchemaName, ref, controlSchema });\n\n    const destroy$ = this.controlDestroy$.pipe(filter(data => data.controlId === controlId));\n\n    this.idService.selectPath(controlId)\n      .pipe(takeUntil(destroy$))\n      .subscribe(path => this.controlPathChange$.next({ controlId, path }));\n\n    return controlId;\n  }\n\n  // connect(controlId: number, component: ControlAccessor<ControlMeta>): void {\n  connect(controlId: number, component: any): void {\n    const meta = this.getControlMeta(controlId);\n    const archetype = this.getArchetype(meta.archetype);\n    archetype.afterConnect(controlId, component);\n  }\n\n  disconnect(controlId: number): void {\n    // const meta = this.getControlMeta(controlId);\n    // const archetype = this.getArchetype(meta.archetype);\n    // archetype.afterDisconnect(controlId);\n\n    this.disconnect$.next({ controlId });\n  }\n\n  getState(controlId: number): ControlState;\n  getState(path: string): ControlState;\n  getState(idOrPath: number | string): ControlState {\n    const controlId = this._getControlId(idOrPath);\n    return this.stateService.get(controlId);\n  }\n\n  getMeta(id: number): ControlMeta {\n    return this.metaService.get(id);\n  }\n\n  selectValue(controlId: number): Observable<any>;\n  selectValue(path: string): Observable<any>;\n  selectValue(idOrPath: number | string): Observable<any> {\n    const path = parsePath(this._getControlPath(idOrPath));\n    return this.valueService.select(path);\n  }\n\n  selectState(controlId: number): Observable<ControlState>;\n  selectState(path: string): Observable<ControlState>;\n  selectState(idOrPath: number | string): Observable<ControlState> {\n    const controlId = this._getControlId(idOrPath);\n    return this.stateService.select(controlId);\n  }\n\n  selectAllStates(): Observable<any> {\n    return this.stateService.selectAll();\n  }\n\n  selectMeta(id: number): Observable<ControlMeta> {\n    return this.metaService.select(id);\n  }\n\n  // TODO: children array items should be reactive\n  selectChildren(id: number): Observable<{ id: number; pathSegment: PathSegment }[]> {\n    return this.idService.snapshot$.pipe(\n      takeUntil(this.controlDestroy$.pipe(filter(e => e.controlId === id))),\n      map(snapshot => {\n        const childrenIds = snapshot.nodeMap[id].children;\n        return childrenIds.map(childId => {\n          const node = snapshot.nodeMap[childId];\n          return {\n            id: childId,\n            pathSegment: node.value.pathSegment,\n          };\n        });\n      }),\n      distinctUntilChanged((a, b) => {\n        return a.length === b.length && a.every((item, index) => item.id === b[index].id);\n      }),\n    );\n  }\n\n  getChildren(id: number): { id: number; pathSegment: PathSegment }[] {\n    const snapshot = this.idService.snapshot$.getValue();\n    const childrenIds = snapshot.nodeMap[id].children;\n    return childrenIds.map(childId => {\n      const node = snapshot.nodeMap[childId];\n      return {\n        id: childId,\n        pathSegment: node.value.pathSegment,\n      };\n    });\n  }\n\n  selectAllMeta(): Observable<{ [id: number]: ControlMeta }> {\n    return this.metaService.selectAll();\n  }\n\n  selectAllVariables(): Observable<{ [id: number]: ControlMeta }> {\n    return this.variablesService.selectAll();\n  }\n\n  getControlPath(controlId: number): ControlPath {\n    return this.idService.getPath(controlId);\n  }\n\n  getControlParentId(controlId: number): number | null {\n    return this.idService.getParentId(controlId);\n  }\n\n  getValue(controlId: number): any;\n  getValue(path: string): any;\n  getValue(idOrPath: number | string): any {\n    if (!idOrPath) {\n      throw new Error(`Control id or path cannot be \"${idOrPath}\"`);\n    }\n\n    let path: ControlPath;\n    if (typeof idOrPath === 'number') {\n      path = this.getControlPath(idOrPath);\n    } else {\n      path = parsePath(idOrPath);\n    }\n\n    return this.valueService.get(path);\n  }\n\n  getControlIdByPath(path: ControlPath): number {\n    return this.idService.getIdByPath(path);\n  }\n\n  getControlSchema(schemaName: string, ref: string): ControlSchema {\n    return this.schemaService.getControl(schemaName, ref);\n  }\n\n  getControlSchemaById(controlId: number): ControlSchema {\n    const path = this.idService.getPath(controlId);\n    return this.getControlSchemaByPath(path);\n  }\n\n  getControlSchemaByPath(path: ControlPath): ControlSchema {\n    const schemaName = this.instancePathToSchemaPath(path)[0].key as string;\n    const ref = this.idService.getNodeByPath(path).value.ref;\n    return this.schemaService.getControl(schemaName, ref);\n  }\n\n  instancePathToSchemaPath(path: ControlPath): ControlPath {\n    const [head, ...tail] = path;\n    const instanceName = head.key as string;\n    const instance = this.instanceService.get(instanceName);\n\n    if (!instance) {\n      throw new Error(`Instance with name \"${instanceName}\" is not registered.`);\n    }\n\n    return [{ key: instance.schemaName }, ...tail];\n  }\n\n  getControlMeta(controlId: number): ControlMeta {\n    return this.metaService.get(controlId);\n  }\n\n  watchPath(controlId: number): Observable<ControlPath> {\n    return this.idService.selectPath(controlId)\n      .pipe(\n        takeUntil(this.controlDestroy$.pipe(filter(e => e.controlId === controlId))),\n      );\n  }\n\n  watchPathSegment(controlId: number): Observable<PathSegment> {\n    return this.idService.selectPathSegment(controlId)\n      .pipe(\n        takeUntil(this.controlDestroy$.pipe(filter(e => e.controlId === controlId))),\n      );\n  }\n\n  setValue(controlId: number, value: any): void;\n  setValue(path: string, value: any): void;\n  setValue(idOrPath: number | string, value: any): void {\n    const controlId = this._getControlId(idOrPath);\n    const meta = this.metaService.get(controlId);\n    const archetype = this.getArchetype(meta.archetype);\n    archetype.setValue(controlId, value);\n  }\n\n  patchState(id: number, state: Partial<ControlState>): void {\n    this.stateService.patch(id, state);\n  }\n\n  markAllAsTouched(path: ControlPath): void {\n    const id = this.idService.getIdByPath(path);\n    this.stateService.markAllAsTouched(id);\n  }\n\n  patchMeta(id: number, meta: Partial<ControlMeta>): void {\n    this.metaService.patch(id, meta);\n  }\n\n  remove(controlId: number): void {\n    const descendantsIds = this.idService.getDescendantsIds(controlId);\n\n    this.controlDestroy$.next({ controlId });\n    for (const id of descendantsIds) {\n      this.controlDestroy$.next({ controlId: id });\n    }\n\n    const path = this.idService.getPath(controlId);\n    this.valueService.remove(path);\n\n    const parentMeta = this.metaService.get(this.idService.getParentId(controlId)!);\n    this.idService.remove(controlId, parentMeta.type === 'array');\n\n    for (const id of descendantsIds) {\n      this.metaService.remove(id);\n      this.stateService.remove(id);\n    }\n    this.metaService.remove(controlId);\n    this.stateService.remove(controlId);\n  }\n\n  private updateValidity(controlId: number, value: any): void {\n    const meta = this.metaService.get(controlId);\n\n    const childrenValid = this.idService.getChildrenIds(controlId)\n      .filter(id => {\n        const childMeta = this.metaService.get(id);\n        if (!childMeta) {\n          return false;\n        }\n        return !childMeta.hidden && !childMeta.disabled;\n      })\n      .every(id => this.stateService.get(id).valid);\n\n    this.validationService.validate(value, meta.validators, { controlId, controlMeta: meta })\n      .pipe(first())\n      .subscribe(errors => this.stateService.patch(controlId, { valid: childrenValid && !errors.length, errors }));\n  }\n\n  setVariable(name: string, value: any): void;\n  setVariable(controlId: number, name: string, value: any): void;\n  setVariable(path: string, name: string, value: any): void;\n  setVariable(...args: any[]): void {\n    if (args.length === 2) {\n      const [name, value] = args;\n      return this.variablesService.set(name, value);\n    }\n\n    const [idOrPath, name, value] = args;\n    const controlId = this._getControlId(idOrPath);\n    this.variablesService.set(controlId, name, value);\n  }\n\n  private _getControlId(idOrPath: number | string): number {\n    if (!idOrPath) {\n      throw new Error(`Control id or path cannot be \"${idOrPath}\"`);\n    }\n\n    if (typeof idOrPath === 'number') {\n      return idOrPath;\n    } else {\n      return this.idService.getIdByPath(parsePath(idOrPath as string));\n    }\n  }\n\n  private _getControlPath(idOrPath: number | string): string {\n    if (!idOrPath) {\n      throw new Error(`Control id or path cannot be \"${idOrPath}\"`);\n    }\n\n    if (typeof idOrPath === 'number') {\n      const path = this.idService.getPath(idOrPath);\n      return stringifyPath(path);\n    }\n\n    return idOrPath;\n  }\n\n  getSchema(name: string): any {\n    return this.schemaService.getInstance(name);\n  }\n\n  getDenormalizedSchema(name: string): RawControlSchema {\n    const schema = this.schemaService.getInstance(name);\n    return this.denormalizer.toRawControlSchema(schema);\n  }\n\n  setChildKey(instanceSchemaName: string, parentRef: string, oldKey: string, newKey: string): void {\n    this.schemaService.setChildKey(instanceSchemaName, parentRef, oldKey, newKey);\n    const controlSchema: ControlSchema = this.schemaService.getControl(instanceSchemaName, parentRef);\n    this.controlSchemaChange$.next({ instanceSchemaName, ref: parentRef, controlSchema });\n  }\n\n  addChild(instanceSchemaName: string, parentRef: string, pathSegment: PathSegment, ref: string, index?: number): void {\n    this.schemaService.addChild(instanceSchemaName, parentRef, pathSegment, ref, index);\n    const controlSchema: ControlSchema = this.schemaService.getControl(instanceSchemaName, parentRef);\n    this.controlSchemaChange$.next({ instanceSchemaName, ref: parentRef, controlSchema });\n  }\n\n  removeChild(instanceSchemaName: string, parentRef: string, childPathSegment: PathSegment): void {\n    this.schemaService.removeChild(instanceSchemaName, parentRef, childPathSegment);\n    const controlSchema: ControlSchema = this.schemaService.getControl(instanceSchemaName, parentRef);\n    this.controlSchemaChange$.next({ instanceSchemaName, ref: parentRef, controlSchema });\n  }\n\n  addControl(schemaName: string, control: ControlSchema): string {\n    return this.schemaService.addControl(schemaName, control);\n  }\n\n  removeControl(schemaName: string, ref: string): void {\n    this.schemaService.removeControl(schemaName, ref);\n  }\n\n  updateControl(instanceSchemaName: string, ref: string, controlSchema: ControlSchema): void {\n    const oldControlSchema = this.schemaService.getControl(instanceSchemaName, ref);\n    const normalized = this.creator.normalizeControlSchema({ ...oldControlSchema, ...controlSchema });\n    this.schemaService.updateControl(instanceSchemaName, ref, normalized);\n    this.controlSchemaChange$.next({ instanceSchemaName, ref, controlSchema: normalized });\n  }\n\n  addBranch(instanceSchemaName: string, ref: string, branchName: string, index?: number): void {\n    this.schemaService.addBranch(instanceSchemaName, ref, branchName, index);\n    const controlSchema: ControlSchema = this.schemaService.getControl(instanceSchemaName, ref);\n    this.controlSchemaChange$.next({ instanceSchemaName, ref, controlSchema });\n  }\n\n  removeBranch(instanceSchemaName: string, ref: string, branchName: string): void {\n    this.schemaService.removeBranch(instanceSchemaName, ref, branchName);\n    const controlSchema: ControlSchema = this.schemaService.getControl(instanceSchemaName, ref);\n    this.controlSchemaChange$.next({ instanceSchemaName, ref, controlSchema });\n  }\n\n  updateBranch(instanceSchemaName: string, ref: string, branchName: string, value: { name: string }): void {\n    this.schemaService.updateBranch(instanceSchemaName, ref, branchName, value);\n    const controlSchema: ControlSchema = this.schemaService.getControl(instanceSchemaName, ref);\n    this.controlSchemaChange$.next({ instanceSchemaName, ref, controlSchema });\n  }\n\n  private getArchetype(archetype: string): Archetype {\n    const structure = this.archetypeRegistry.get(archetype);\n    if (!structure) {\n      throw new Error(`Archetype \"${archetype}\" is not recognised.`);\n    }\n\n    return structure;\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ControlAccessor } from './models';\n\nexport const CONTROL_ACCESSOR = new InjectionToken<ControlAccessor<any>>('Control Accessor');\n","import { ComponentRef, Directive, Inject, Input, OnDestroy, Optional, SkipSelf, ViewContainerRef } from '@angular/core';\nimport { FormGenService } from './form-gen.service';\nimport { ControlPath, EditorKey, PathSegment } from './models';\nimport { CONTROL_ACCESSOR } from './injection-tokens';\nimport { distinctUntilChanged, filter, pairwise, takeUntil } from 'rxjs/operators';\nimport { Observable, Subject } from 'rxjs';\nimport { ElementRegistry } from './element-registry';\nimport { OnChange } from 'on-property-change';\n\n@Directive({\n  selector: '[fgOutlet]',\n  exportAs: 'fgOutlet',\n})\nexport class OutletDirective implements OnDestroy {\n  @Input('fgOutlet') key!: EditorKey;\n\n  componentRef!: ComponentRef<any & {\n    valueItemAdd?: Observable<{ key: string }>,\n    valueItemRemove?: Observable<{ controlId: number }>\n    branchChange?: Observable<{ branch: string }>\n  }>;\n\n  path!: ControlPath;\n  controlId!: number;\n\n  destroy$ = new Subject<void>();\n\n  constructor(\n    private elementRegistry: ElementRegistry,\n    @SkipSelf() @Optional() @Inject(CONTROL_ACCESSOR) private parent: any,\n    private vcr: ViewContainerRef,\n    private service: FormGenService,\n  ) {}\n\n  @OnChange('key')\n  refresh(): void {\n    this.destroy$.next();\n    this.service.disconnect(this.controlId);\n\n    setTimeout(() => this.init());\n  }\n\n  private init(): void {\n    const path = this.computePath();\n\n    this.controlId = this.service.getControlIdByPath(path);\n\n    const unregister$ = this.service.controlDestroy$.pipe(filter(event => event.controlId === this.controlId));\n\n    this.render();\n\n    this.service.selectMeta(this.controlId)\n      .pipe(\n        distinctUntilChanged(),\n        pairwise(),\n        takeUntil(this.destroy$),\n        takeUntil(unregister$),\n      )\n      .subscribe(([oldMeta, newMeta]) => {\n        if (!this.componentRef || newMeta.hidden !== oldMeta.hidden || newMeta.name !== oldMeta.name) {\n          this.render();\n        }\n      });\n  }\n\n  private render(): void {\n    const meta = this.service.getControlMeta(this.controlId);\n\n    if (this.componentRef) {\n      this.service.disconnect(this.controlId);\n    }\n    this.vcr.clear();\n\n    if (!meta) {\n      console.warn(`No meta for control with id \"${this.controlId}\"`);\n      return;\n    }\n    if (meta.hidden) {\n      return;\n    }\n    if (meta.name === 'native:hidden') {\n      return;\n    }\n\n    const entry = this.elementRegistry.get('component', meta.name);\n    if (!entry) {\n      throw new Error(`No registered component with name \"${meta.name}\"`);\n    }\n\n    this.componentRef = this.vcr.createComponent(entry.element);\n\n    const instance = this.componentRef.instance;\n    instance.controlId = this.controlId;\n    instance.key = this.key;\n\n    this.service.connect(this.controlId, instance);\n  }\n\n  private computePath(): ControlPath {\n    if (this.parent) {\n      const parentPath = this.service.getControlPath(this.parent.controlId);\n      const pathSegment = this.computeRelativePathSegment();\n      return [...parentPath, pathSegment];\n    } else {\n      return [{ key: this.key }];\n    }\n  }\n\n  private computeRelativePathSegment(): PathSegment {\n    const parentValue = this.service.getValue(this.parent.controlId);\n    const parentMeta = this.service.getMeta(this.parent.controlId);\n    if (parentMeta.archetype === 'input:one-of') {\n      const parentMeta1 = parentMeta as any;\n      const branchKey = parentMeta1.branchKey;\n      if (this.key !== branchKey && !parentMeta1.common?.some((c: any) => c.key === this.key)) {\n        const branch: string = parentValue[branchKey];\n        return { key: this.key, branch };\n      }\n    }\n    return { key: this.key };\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.service.disconnect(this.controlId);\n  }\n}\n","import { ɵmarkDirty as markDirty } from '@angular/core';\nimport { Archetype } from './archetype';\nimport { FormGenService } from '../../form-gen.service';\nimport { first, merge, Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\nimport { ControlAccessor, ControlMeta } from '../../models';\nimport { StateService } from '../../state.service';\nimport { ValueService } from '../../value.service';\nimport { MetaService } from '../../meta.service';\nimport { IdService } from '../../id.service';\nimport { ValidationService } from '../../validators/validation.service';\n\nexport class InputArchetype implements Archetype {\n  protected disconnect$!: Observable<{ controlId: number }>;\n\n  constructor(\n    protected service: FormGenService,\n    protected valueService: ValueService,\n    protected stateService: StateService,\n    protected metaService: MetaService,\n    protected idService: IdService,\n    protected validationService: ValidationService,\n  ) {}\n\n  afterConnect(controlId: number, accessor: ControlAccessor): void {\n    this.disconnect$ = merge(this.service.disconnect$, this.service.controlDestroy$).pipe(filter(event => event.controlId === controlId));\n\n    // console.log(controlId, 'connect');\n    const state = this.service.getState(controlId);\n    const meta = this.service.getControlMeta(controlId);\n    const value = this.service.getValue(controlId);\n\n    accessor.meta = meta;\n    accessor.value = value;\n\n    for (const [propName, propValue] of Object.entries(state)) {\n      (accessor as any)[propName] = propValue;\n    }\n\n    this.service.selectMeta(controlId)\n      .pipe(\n        takeUntil(this.disconnect$),\n        distinctUntilChanged(),\n      )\n      .subscribe(meta => {\n        accessor.meta = meta;\n        markDirty(accessor);\n      });\n\n    this.service.selectState(controlId)\n      .pipe(\n        takeUntil(this.disconnect$),\n      )\n      .subscribe((state) => {\n        accessor.touched = state.touched;\n        accessor.dirty = state.dirty;\n        accessor.valid = state.valid;\n        accessor.errors = state.errors;\n        markDirty(accessor);\n      });\n\n    this.service.selectValue(controlId)\n      .pipe(\n        takeUntil(this.disconnect$),\n      )\n      .subscribe((value) => {\n        if (accessor) {\n          accessor.value = value;\n          markDirty(accessor);\n        }\n      });\n\n    accessor.valueChange\n      .pipe(takeUntil(this.disconnect$))\n      .subscribe((value: any) => this.service.setValue(controlId, value));\n\n    if (accessor.touch) {\n      accessor.touch\n        .pipe(takeUntil(this.disconnect$))\n        .subscribe(() => this.service.patchState(controlId, { touched: true }));\n    }\n  }\n\n  afterDisconnect(controlId: number): void {\n    // console.log(controlId, 'disconnect');\n  }\n\n  setValue(controlId: number, value: any): void {\n  }\n\n  afterSchemaChange(schemaName: string, controlId: number, meta: ControlMeta, oldMeta: ControlMeta): void {\n    this.stateService.reset(controlId);\n\n    const path = this.idService.getPath(controlId);\n    const value = this.valueService.get(path);\n    this.setValue(controlId, value);\n\n    this.stateService.reset(controlId);\n\n    this.validationService.validate(value, meta.validators, { controlId, controlMeta: meta })\n      .pipe(first())\n      .subscribe(errors => this.stateService.patch(controlId, { valid: !errors.length, errors }));\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { InputArchetype } from './input.archetype';\nimport { FormGenService } from '../../form-gen.service';\nimport { ValueService } from '../../value.service';\nimport { StateService } from '../../state.service';\nimport { MetaService } from '../../meta.service';\nimport { IdService } from '../../id.service';\nimport { ValidationService } from '../../validators/validation.service';\nimport { ControlMeta } from '../../models';\n\n@Injectable()\nexport class PlainArchetype extends InputArchetype {\n  constructor(\n    service: FormGenService,\n    valueService: ValueService,\n    stateService: StateService,\n    metaService: MetaService,\n    idService: IdService,\n    validationService: ValidationService,\n  ) {\n    super(service, valueService, stateService, metaService, idService, validationService);\n  }\n\n  override setValue(controlId: number, value: any) {\n    const path = this.idService.getPath(controlId);\n    const meta = this.metaService.get(controlId);\n    const oldValue = this.service.getValue(controlId);\n\n    if (value === undefined || value === null) {\n      if (meta.defaultValue !== undefined) {\n        value = meta.defaultValue;\n      } else {\n        value = null;\n      }\n    }\n\n    if (value === oldValue) {\n      return;\n    }\n\n    this.valueService.set(path, value);\n    this.stateService.patch(controlId, { touched: true, dirty: true });\n  }\n\n  override afterSchemaChange(schemaName: string, controlId: number, meta: ControlMeta, oldMeta: ControlMeta): void {\n    super.afterSchemaChange(schemaName, controlId, meta, oldMeta);\n    // if (meta.defaultValue !== undefined) {\n    //   this.setValue(controlId, meta.defaultValue);\n    // }\n\n    // this.metaService.select(controlId)\n    //   .pipe(\n    //     map(meta => meta.watchers),\n    //     distinctUntilChanged(),\n    //     filter(watchers => !!watchers),\n    //     takeUntil(disconnect$),\n    //   )\n    //   .subscribe((watchers: Watcher[]) => {\n    //     watchers.forEach(({ when, then }) => {\n    //       this.service.createWhen(controlId, when)\n    //         .pipe(\n    //           delay(0),\n    //           switchMap(() => {\n    //             const { name, ...params } = then;\n    //             return this.computationService.createParams(controlId, params);\n    //           }),\n    //           takeUntil(disconnect$),\n    //         )\n    //         .subscribe(params => this.service.performThen(controlId, then, params));\n    //     });\n    //   });\n  }\n\n  onUpdate(schemaName: string, controlId: number): void {\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGenService } from '../../form-gen.service';\nimport { ControlMeta, GroupInputMeta } from '../../models';\nimport { InputArchetype } from './input.archetype';\nimport { ValueService } from '../../value.service';\nimport { StateService } from '../../state.service';\nimport { MetaService } from '../../meta.service';\nimport { IdService } from '../../id.service';\nimport { samePathSegment } from '../../util/path';\nimport { ValidationService } from '../../validators/validation.service';\n\n@Injectable()\nexport class GroupArchetype extends InputArchetype {\n  emptyValue = {};\n\n  constructor(\n    service: FormGenService,\n    valueService: ValueService,\n    stateService: StateService,\n    metaService: MetaService,\n    idService: IdService,\n    validationService: ValidationService,\n  ) {\n    super(service, valueService, stateService, metaService, idService, validationService);\n  }\n\n  override afterSchemaChange(schemaName: string, controlId: number, meta: ControlMeta, oldMeta: ControlMeta): void {\n    super.afterSchemaChange(schemaName, controlId, meta, oldMeta);\n\n    // const meta = this.metaService.get(controlId) as GroupInputMeta;\n    // const path = this.idService.getPath(controlId);\n    //\n    // // const value = this.valueService.get(path);\n    // // if (!value) {\n    // const padValue = Object.fromEntries(meta.children.map(child => [child.key, null]));\n    // console.log(padValue);\n    // const defaultValue = { ...padValue, ...(meta.defaultValue || {}) };\n    // this.setValue(controlId, defaultValue);\n    // // } else {\n    // //   console.log(value);\n    // // }\n    //\n    // meta.children.forEach(child => {\n    //   const childPath = [...path, { key: child.key }];\n    //   this.service.create(schemaName, child.ref, childPath);\n    // });\n  }\n\n  onUpdate(schemaName: string, controlId: number): void {\n    // const meta = this.metaService.get(controlId) as GroupInputMeta;\n    // const path = this.idService.getPath(controlId);\n    //\n    // const newKeys = meta.children.map(child => child.key);\n    //\n    // const childrenToDelete = this.idService.getChildrenIds(controlId).filter(childId => {\n    //   const key = this.idService.getPathSegment(childId).key as string;\n    //   return newKeys.includes(key);\n    // });\n    // childrenToDelete.forEach(id => this.service.remove(id));\n    //\n    // const oldKeys = this.idService.getChildrenPathSegments(controlId).map(segment => segment.key);\n    // meta.children\n    //   .filter(child => !oldKeys.includes(child.key))\n    //   .forEach(child => {\n    //     const childPath = [...path, { key: child.key }];\n    //     this.service.create(schemaName, child.ref, childPath);\n    //   });\n  }\n\n  override setValue(controlId: number, value: Record<string, any>): void {\n    // console.log('setValue', controlId, value);\n    //\n    // if (!value || typeof value !== 'object') {\n    //   throw new Error(`Incorrect value format format for group: \"${JSON.stringify(value)}\"`);\n    // }\n    //\n    // const meta = this.metaService.get(controlId) as GroupInputMeta;\n    // const path = this.idService.getPath(controlId);\n    //\n    // const expectedKeys = meta.children.map(child => child.key);\n    // const actualKeys = Object.keys(value);\n    //\n    // const missingKeys = expectedKeys.filter(key => !actualKeys.includes(key));\n    // if (missingKeys.length) {\n    //   throw new Error(`Invalid value structure for control with path \"${stringifyPath(path)}\". Keys [${missingKeys.join(', ')}] are missing.`);\n    // }\n    //\n    // const redundantKeys = actualKeys.filter(key => !expectedKeys.includes(key));\n    // if (redundantKeys.length) {\n    //   throw new Error(`Invalid value structure for control with path \"${stringifyPath(path)}\". Keys [${redundantKeys.join(', ')}] are redundant.`);\n    // }\n    //\n    //\n    // this.valueService.set(path, value);\n    // this.stateService.patch(controlId, { touched: true, dirty: true });\n\n\n    const path = this.idService.getPath(controlId);\n    const meta = this.metaService.get(controlId) as GroupInputMeta;\n    const oldValue = this.service.getValue(controlId);\n\n    if (value === undefined || value === null) {\n      if (meta.defaultValue !== undefined) {\n        value = meta.defaultValue;\n      } else {\n        value = this.emptyValue;\n      }\n    }\n\n    const childrenIds = this.idService.getChildrenIds(controlId);\n    const children = meta.children.map(c => ({ pathSegment: { key: String(c.key) }, ref: c.ref }));\n\n    const idsToDelete: number[] = childrenIds.filter(id => {\n      const pathSegment = this.idService.getPathSegment(id);\n      return pathSegment.branch || !children.some(c => samePathSegment(c.pathSegment, pathSegment));\n    });\n    idsToDelete.forEach(id => this.service.remove(id));\n\n    this.valueService.set(path, value);\n\n    for (const child of children) {\n      const childPath = [...path, child.pathSegment];\n      if (!this.idService.has(childPath)) {\n        const schemaName = this.service.instancePathToSchemaPath(path)[0].key as string;\n        this.service.createControl(schemaName, child.ref, childPath);\n      } else {\n        const childId = this.idService.getIdByPath(childPath);\n        this.service.setValue(childId, value[child.pathSegment.key]);\n      }\n    }\n\n    if (value !== oldValue) {\n      this.stateService.patch(controlId, { touched: true, dirty: true });\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { InputArchetype } from './input.archetype';\nimport { FormGenService } from '../../form-gen.service';\nimport { ValueService } from '../../value.service';\nimport { StateService } from '../../state.service';\nimport { MetaService } from '../../meta.service';\nimport { IdService } from '../../id.service';\nimport { ValidationService } from '../../validators/validation.service';\nimport { ControlMeta } from '../../models';\n\n@Injectable()\nexport class HiddenArchetype extends InputArchetype {\n  constructor(\n    service: FormGenService,\n    valueService: ValueService,\n    stateService: StateService,\n    metaService: MetaService,\n    idService: IdService,\n    validationService: ValidationService,\n  ) {\n    super(service, valueService, stateService, metaService, idService, validationService);\n  }\n\n  override setValue(controlId: number, value: any) {\n    const path = this.idService.getPath(controlId);\n    const meta = this.metaService.get(controlId);\n    const oldValue = this.service.getValue(controlId);\n\n    if (value === undefined || value === null) {\n      if (meta.defaultValue !== undefined) {\n        value = meta.defaultValue;\n      } else {\n        value = null;\n      }\n    }\n\n    if (value === oldValue) {\n      return;\n    }\n\n    this.valueService.set(path, value);\n    this.stateService.patch(controlId, { touched: true, dirty: true });\n  }\n\n  override afterSchemaChange(schemaName:string, controlId: number, meta: ControlMeta, oldMeta: ControlMeta): void {\n    super.afterSchemaChange(schemaName, controlId, meta, oldMeta);\n    // if (meta.defaultValue !== undefined) {\n    //   this.setValue(controlId, meta.defaultValue);\n    // }\n  }\n}\n","import { Injectable, ɵmarkDirty as markDirty } from '@angular/core';\nimport { ControlMeta, EditorKey, OrderedListControlAccessor, OrderedListInputMeta, OrderedListInputSchema } from '../../models';\nimport { takeUntil } from 'rxjs/operators';\nimport { FormGenService } from '../../form-gen.service';\nimport { InputArchetype } from './input.archetype';\nimport { ValueService } from '../../value.service';\nimport { StateService } from '../../state.service';\nimport { MetaService } from '../../meta.service';\nimport { IdService } from '../../id.service';\nimport { samePathSegment } from '../../util/path';\nimport { ValidationService } from '../../validators/validation.service';\n\n@Injectable()\nexport class OrderedListArchetype extends InputArchetype {\n  constructor(\n    service: FormGenService,\n    valueService: ValueService,\n    stateService: StateService,\n    metaService: MetaService,\n    idService: IdService,\n    validationService: ValidationService,\n  ) {\n    super(service, valueService, stateService, metaService, idService, validationService);\n  }\n\n  override afterConnect(controlId: number, accessor: OrderedListControlAccessor<OrderedListInputMeta, any>): void {\n    super.afterConnect(controlId, accessor);\n\n    accessor.children = this.service.getChildren(controlId);\n\n    this.service.selectChildren(controlId)\n      .pipe(\n        takeUntil(this.disconnect$),\n      )\n      .subscribe((children) => {\n        if (accessor) {\n          accessor.children = children;\n          markDirty(accessor);\n        }\n      });\n\n    accessor.valueItemAdd\n      .pipe(takeUntil(this.disconnect$))\n      .subscribe(({ key }: any) => this.addListItem(controlId, key));\n\n    accessor.valueItemRemove\n      .pipe(takeUntil(this.disconnect$))\n      .subscribe(({ controlId }: any) => this.service.remove(controlId));\n  }\n\n  override setValue(controlId: number, value: any) {\n    // const path = this.idService.getPath(controlId);\n    // const meta = this.metaService.get(controlId) as OrderedListInputMeta;\n    //\n    // value = value || meta.defaultValue || [];\n    //\n    // const children = this.idService.getChildrenIds(controlId).map(id => {\n    //   const { pathSegment, ref } = this.idService.getNode(id).value;\n    //   return { id, pathSegment, ref };\n    // });\n    //\n    // if (children.length > value.length) {\n    //   const childrenToDelete = children.slice(value.length);\n    //   childrenToDelete.forEach(child => this.service.remove(child.id));\n    // } else if (children.length < value.length) {\n    //   for (let i = children.length; i < value.length; i++) {\n    //     this.addListItem(controlId, i);\n    //   }\n    // }\n    //\n    // this.valueService.set(path, value);\n    // this.stateService.patch(controlId, { touched: true, dirty: true });\n\n    const meta = this.metaService.get(controlId);\n    const oldValue = this.service.getValue(controlId);\n    const path = this.idService.getPath(controlId);\n    const schema = this.service.getControlSchemaByPath(path) as OrderedListInputSchema;\n    const childrenIds = this.idService.getChildrenIds(controlId);\n\n    if (value === undefined || value === null) {\n      if (meta.defaultValue !== undefined) {\n        value = meta.defaultValue;\n      } else {\n        value = [];\n      }\n    }\n\n    const children = Object.keys(value || []).map(key => ({ pathSegment: { key }, ref: schema.item.ref }));\n\n    const idsToDelete: number[] = childrenIds.filter(id => {\n      const pathSegment = this.idService.getPathSegment(id);\n      return pathSegment.branch || !children.some(c => samePathSegment(c.pathSegment, pathSegment));\n    });\n    idsToDelete.forEach(id => this.service.remove(id));\n\n    this.valueService.set(path, value);\n\n    for (const child of children) {\n      const childPath = [...path, child.pathSegment];\n      if (!this.idService.has(childPath)) {\n        const schemaName = this.service.instancePathToSchemaPath(path)[0].key as string;\n        this.service.createControl(schemaName, child.ref, childPath);\n      } else {\n        const childId = this.idService.getIdByPath(childPath);\n        this.service.setValue(childId, value[child.pathSegment.key]);\n      }\n    }\n\n    if (value !== oldValue) {\n      this.stateService.patch(controlId, { touched: true, dirty: true });\n    }\n  }\n\n  addListItem(controlId: number, childKey: EditorKey) {\n    const path = this.idService.getPath(controlId);\n    const schemaName = this.service.instancePathToSchemaPath(path)[0].key as string;\n    const schema = this.service.getControlSchemaById(controlId) as OrderedListInputSchema;\n\n    const childPath = [...path, { key: childKey }];\n    this.service.createControl(schemaName, schema.item.ref, childPath);\n  }\n}\n","import { Injectable, ɵmarkDirty as markDirty } from '@angular/core';\nimport { ControlMeta, NamedListControlAccessor, NamedListInputMeta, NamedListInputSchema, OrderedListInputSchema } from '../../models';\nimport { takeUntil } from 'rxjs/operators';\nimport { FormGenService } from '../../form-gen.service';\nimport { InputArchetype } from './input.archetype';\nimport { ValueService } from '../../value.service';\nimport { StateService } from '../../state.service';\nimport { MetaService } from '../../meta.service';\nimport { IdService } from '../../id.service';\nimport { samePathSegment } from '../../util/path';\nimport { ValidationService } from '../../validators/validation.service';\n\n@Injectable()\nexport class NamedListArchetype extends InputArchetype {\n  constructor(\n    service: FormGenService,\n    valueService: ValueService,\n    stateService: StateService,\n    metaService: MetaService,\n    idService: IdService,\n    validationService: ValidationService,\n  ) {\n    super(service, valueService, stateService, metaService, idService, validationService);\n  }\n\n  override afterConnect(controlId: number, accessor: NamedListControlAccessor<NamedListInputMeta, any>): void {\n    super.afterConnect(controlId, accessor);\n\n    accessor.children = this.service.getChildren(controlId);\n\n    this.service.selectChildren(controlId)\n      .pipe(\n        takeUntil(this.disconnect$),\n      )\n      .subscribe((children) => {\n        if (accessor) {\n          accessor.children = children;\n          markDirty(accessor);\n        }\n      });\n\n    accessor.valueItemAdd\n      .pipe(takeUntil(this.disconnect$))\n      .subscribe(({ key }: any) => this.addListItem(controlId, key));\n\n    accessor.valueItemRemove\n      .pipe(takeUntil(this.disconnect$))\n      .subscribe(({ controlId }: any) => this.service.remove(controlId));\n  }\n\n  override setValue(controlId: number, value: Record<string, any>) {\n    // const path = this.idService.getPath(controlId);\n    // const meta = this.metaService.get(controlId) as NamedListInputMeta;\n    //\n    // value = value || meta.defaultValue || {};\n    //\n    // const children = this.idService.getChildrenIds(controlId).map(id => {\n    //   const { pathSegment, ref } = this.idService.getNode(id).value;\n    //   return { id, pathSegment, ref };\n    // });\n    //\n    // const keys = Object.keys(value);\n    // const childrenToDelete = children.filter(child => !keys.includes(child.pathSegment.key as string));\n    // childrenToDelete.forEach(child => this.service.remove(child.id));\n    //\n    // const keysToPreserve = children.map(child => child.pathSegment.key as string).filter(key => keys.includes(key));\n    // const keysToAdd = keys.filter(key => !keysToPreserve.includes(key));\n    //\n    // for (const key of keysToAdd) {\n    //   this.addListItem(controlId, key);\n    // }\n    //\n    // this.valueService.set(path, value);\n    // this.stateService.patch(controlId, { touched: true, dirty: true });\n\n    const meta = this.metaService.get(controlId);\n    const oldValue = this.service.getValue(controlId);\n    const path = this.idService.getPath(controlId);\n    const schema = this.service.getControlSchemaByPath(path) as OrderedListInputSchema;\n    const childrenIds = this.idService.getChildrenIds(controlId);\n\n    if (value === undefined || value === null) {\n      if (meta.defaultValue !== undefined) {\n        value = meta.defaultValue;\n      } else {\n        value = {};\n      }\n    }\n\n    const children = Object.keys(value).map(key => ({ pathSegment: { key }, ref: schema.item.ref }));\n\n    const idsToDelete: number[] = childrenIds.filter(id => {\n      const pathSegment = this.idService.getPathSegment(id);\n      return pathSegment.branch || !children.some(c => samePathSegment(c.pathSegment, pathSegment));\n    });\n    idsToDelete.forEach(id => this.service.remove(id));\n\n    this.valueService.set(path, value);\n\n    for (const child of children) {\n      const childPath = [...path, child.pathSegment];\n      if (!this.idService.has(childPath)) {\n        const schemaName = this.service.instancePathToSchemaPath(path)[0].key as string;\n        this.service.createControl(schemaName, child.ref, childPath);\n      } else {\n        const childId = this.idService.getIdByPath(childPath);\n        this.service.setValue(childId, value[child.pathSegment.key]);\n      }\n    }\n\n    if (value !== oldValue) {\n      this.stateService.patch(controlId, { touched: true, dirty: true });\n    }\n  }\n\n  addListItem(controlId: number, childKey: string) {\n    const path = this.idService.getPath(controlId);\n    const schemaName = this.service.instancePathToSchemaPath(path)[0].key as string;\n    const schema = this.service.getControlSchemaById(controlId) as NamedListInputSchema;\n\n    const childPath = [...path, { key: childKey }];\n    this.service.createControl(schemaName, schema.item.ref, childPath);\n  }\n\n  override afterSchemaChange(schemaName: string, controlId: number, meta: ControlMeta, oldMeta: ControlMeta): void {\n    super.afterSchemaChange(schemaName, controlId, meta, oldMeta);\n    // if (meta.defaultValue) {\n    //   this.setValue(controlId, meta.defaultValue);\n    // }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGenService } from '../../form-gen.service';\nimport { ControlMeta, OneOfControlAccessor, OneOfInputMeta, OneOfInputSchema, PathSegment } from '../../models';\nimport { takeUntil } from 'rxjs/operators';\nimport { InputArchetype } from './input.archetype';\nimport { ValueService } from '../../value.service';\nimport { StateService } from '../../state.service';\nimport { MetaService } from '../../meta.service';\nimport { IdService } from '../../id.service';\nimport { samePathSegment, stringifyPath } from '../../util/path';\nimport { ValidationService } from '../../validators/validation.service';\n\n@Injectable()\nexport class OneOfArchetype extends InputArchetype {\n  constructor(\n    service: FormGenService,\n    valueService: ValueService,\n    stateService: StateService,\n    metaService: MetaService,\n    idService: IdService,\n    validationService: ValidationService,\n  ) {\n    super(service, valueService, stateService, metaService, idService, validationService);\n  }\n\n  override afterConnect(controlId: number, accessor: OneOfControlAccessor<OneOfInputMeta>): void {\n    super.afterConnect(controlId, accessor);\n\n    accessor.branchChange\n      .pipe(takeUntil(this.disconnect$))\n      .subscribe(({ branch }: any) => this.changeBranch(controlId, branch));\n  }\n\n  override afterSchemaChange(schemaName: string, controlId: number, meta: OneOfInputMeta, oldMeta: ControlMeta): void {\n    super.afterSchemaChange(schemaName, controlId, meta, oldMeta);\n    // const path = this.idService.getPath(controlId);\n    //\n    // meta.common.forEach(child => {\n    //   const childPath = [...path, { key: child.key }];\n    //   // this.service.create(schemaName, child.ref, childPath);\n    // });\n    //\n    // const value = this.valueService.get(path);\n    // if (!value) {\n    //   this.setValue(controlId, meta.defaultValue || { [meta.branchKey]: null });\n    // }\n  }\n\n  override setValue(controlId: number, value: any) {\n    // console.log('setValue', controlId, value);\n    // const meta = this.metaService.get(controlId) as OneOfInputMeta;\n    //\n    // if (!value || !(meta.branchKey in value)) {\n    //   throw new Error(`Incorrect value format format for one-of: \"${JSON.stringify(value)}\"`);\n    // }\n    //\n    // const path = this.idService.getPath(controlId);\n    // const oldValue = this.valueService.get(path);\n    //\n    // const branchName = value[meta.branchKey];\n    // const oldBranchName = oldValue && oldValue[meta.branchKey];\n    //\n    // if (branchName !== oldBranchName) {\n    //   this.valueService.set(path, value);\n    //   this.stateService.patch(controlId, { touched: true, dirty: true });\n    //   this.changeBranch(controlId, branchName);\n    // } else {\n    //   this.valueService.set(path, value);\n    //   this.stateService.patch(controlId, { touched: true, dirty: true });\n    // }\n\n    const meta = this.metaService.get(controlId) as OneOfInputMeta;\n    const oldValue = this.service.getValue(controlId);\n    const path = this.idService.getPath(controlId);\n    const childrenIds = this.idService.getChildrenIds(controlId);\n\n    if (value === undefined || value === null) {\n      if (meta.defaultValue !== undefined) {\n        value = meta.defaultValue;\n      } else {\n        value = { [meta.branchKey]: null };\n      }\n    }\n\n    let children: { pathSegment: PathSegment; ref: string }[] = [];\n    const branchName = value[meta.branchKey];\n    const common: { pathSegment: PathSegment; ref: string }[] = meta.common?.map(c => ({ pathSegment: { key: String(c.key) }, ref: c.ref })) || [];\n    if (branchName) {\n      const branch = meta.branches.find(b => b.name === branchName);\n      if (!branch) {\n        console.log(value);\n        const ref = this.idService.getNode(controlId).value.ref;\n        throw new Error(`Branch with name \"${branchName}\" not found in control with ref \"${ref}\".`);\n      }\n      const fromBranch: { pathSegment: PathSegment; ref: string }[] = branch.children.map(c => ({ pathSegment: { key: String(c.key), branch: branchName }, ref: c.ref }));\n      children = [...common, ...fromBranch];\n    } else {\n      children = common;\n    }\n\n    const idsToDelete: number[] = childrenIds.filter(id => {\n      const pathSegment = this.idService.getPathSegment(id);\n      return pathSegment.branch || !children.some(c => samePathSegment(c.pathSegment, pathSegment));\n    });\n    idsToDelete.forEach(id => this.service.remove(id));\n\n    this.valueService.set(path, value);\n\n    for (const child of children) {\n      const childPath = [...path, child.pathSegment];\n      if (!this.idService.has(childPath)) {\n        const schemaName = this.service.instancePathToSchemaPath(path)[0].key as string;\n        this.service.createControl(schemaName, child.ref, childPath);\n      } else {\n        const childId = this.idService.getIdByPath(childPath);\n        this.service.setValue(childId, value[child.pathSegment.key]);\n      }\n    }\n\n    if (value !== oldValue) {\n      this.stateService.patch(controlId, { touched: true, dirty: true });\n    }\n  }\n\n  changeBranch(controlId: number, branchName: string): void {\n    // const path = this.idService.getPath(controlId);\n    // const meta = this.metaService.get(controlId) as OneOfInputMeta;\n    //\n    // const value: any = { ...this.valueService.get(path) };\n    // const oldBranchName = value[meta.branchKey];\n    // const oldBranch: Branch = meta.branches.find(b => b.name === oldBranchName)!;\n    //\n    // let oldValue: any = {};\n    // let preservedBranchValue: any = {};\n    // let valueFromOldBranch: any = {};\n    // if (oldBranch) {\n    //   const oldBranchChildren: { key: string, ref: string }[] = oldBranch.children || [];\n    //   oldValue = Object.fromEntries(oldBranchChildren.map(c => [c.key, value[c.key]]));\n    //   preservedBranchValue = (value.__preserved || {})[branchName] || {};\n    //   const newBranch = meta.branches.find(b => b.name === branchName)!;\n    //   const keysPresentInBothBranches = newBranch.children.filter(c => oldBranchChildren.some(oc => oc.key === c.key));\n    //   valueFromOldBranch = Object.fromEntries(keysPresentInBothBranches.map(c => [c.key, oldValue[c.key]]));\n    // }\n    //\n    // const commonValue: any = Object.fromEntries((meta.common || []).map(c => [c.key, value[c.key]]));\n    //\n    // const newValue: any = {\n    //   [meta.branchKey]: branchName,\n    //   ...preservedBranchValue,\n    //   ...valueFromOldBranch,\n    //   ...commonValue,\n    // };\n    //\n    // if (oldBranch) {\n    //   newValue.__preserved = { ...(value.__preserved || {}), [oldBranchName]: oldValue };\n    // }\n    //\n    // // this.valueService.set(path, newValue);\n    // // this.stateService.patch(controlId, { touched: true, dirty: true });\n    //\n    // const children = this.idService.getChildrenIds(controlId);\n    // children\n    //   .filter(childId => this.idService.getPathSegment(childId).branch)\n    //   .forEach(childId => this.service.remove(childId));\n    //\n    // const newBranch = meta.branches.find(b => b.name === branchName);\n    // if (newBranch) {\n    //   const branchChildren = newBranch.children;\n    //   if (!branchChildren) {\n    //     throw new Error(`The \"one-of\" control with path \"${stringifyPath(path)}\" has no branch \"${branchName}\".`);\n    //   }\n    //\n    //   const schemaName = this.service.instancePathToSchemaPath(path)[0].key as string;\n    //   for (const { key, ref } of branchChildren) {\n    //     const childPathSegment = { key: key, branch: branchName };\n    //     const childPath = [...path, childPathSegment];\n    //     this.service.create(schemaName, ref, childPath);\n    //   }\n    // }\n\n    // this.valueService.set(path, newValue);\n    // this.stateService.patch(controlId, { touched: true, dirty: true });\n\n    const meta = this.metaService.get(controlId) as OneOfInputMeta;\n    const path = this.idService.getPath(controlId);\n\n    const value: any = { ...this.valueService.get(path) };\n    const oldBranchName = value[meta.branchKey];\n    const oldBranch = meta.branches.find(b => b.name === oldBranchName)!;\n    const newBranch = meta.branches.find(b => b.name === branchName);\n\n    let oldValue: any = {};\n    let preservedBranchValue: any = {};\n    let valueFromOldBranch: any = {};\n    if (oldBranch) {\n      const oldBranchChildren: { key: string, ref: string }[] = oldBranch.children || [];\n      oldValue = Object.fromEntries(oldBranchChildren.map(c => [c.key, value[c.key]]));\n      preservedBranchValue = (value.__preserved || {})[branchName] || {};\n      if (newBranch) {\n        const keysPresentInBothBranches = newBranch.children.filter(c => oldBranchChildren.some(oc => oc.key === c.key));\n        valueFromOldBranch = Object.fromEntries(keysPresentInBothBranches.map(c => [c.key, oldValue[c.key]]));\n      }\n    }\n\n    const commonValue: any = Object.fromEntries((meta.common || []).map(c => [c.key, value[c.key]]));\n\n    const newValue: any = {\n      [meta.branchKey]: branchName,\n      ...preservedBranchValue,\n      ...valueFromOldBranch,\n      ...commonValue,\n    };\n\n    if (oldBranch) {\n      newValue.__preserved = { ...(value.__preserved || {}), [oldBranchName]: oldValue };\n    }\n\n    const children = this.idService.getChildrenIds(controlId);\n    children\n      .filter(childId => this.idService.getPathSegment(childId).branch)\n      .forEach(childId => this.service.remove(childId));\n\n    if (newBranch) {\n      const branchChildren = newBranch.children;\n      if (!branchChildren) {\n        throw new Error(`The \"one-of\" control with path \"${stringifyPath(path)}\" has no branch \"${branchName}\".`);\n      }\n\n      this.valueService.set(path, newValue);\n\n      const schemaName = this.service.instancePathToSchemaPath(path)[0].key as string;\n      for (const { key, ref } of branchChildren) {\n        const childPathSegment = { key: key, branch: branchName };\n        const childPath = [...path, childPathSegment];\n        this.service.createControl(schemaName, ref, childPath);\n      }\n    } else {\n      this.valueService.set(path, newValue);\n    }\n  }\n}\n","import { Injector, ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OutletDirective } from './outlet.directive';\nimport { ValidationService } from './validators/validation.service';\nimport { FormGenService } from './form-gen.service';\nimport { ValueService } from './value.service';\nimport { MetaService } from './meta.service';\nimport { StateService } from './state.service';\nimport { SchemaService } from './schema.service';\nimport { IdService } from './id.service';\nimport { ElementRegistry } from './element-registry';\nimport { InstanceService } from './instance.service';\nimport { FormulaService } from './formula/formula.service';\nimport { VariablesService } from './variables.service';\nimport { ComputationService } from './computation.service';\nimport { PlainArchetype } from './control/archetype/plain.archetype';\nimport { ArchetypeRegistry } from './control/archetype/archetype-registry';\nimport { GroupArchetype } from './control/archetype/group.archetype';\nimport { HiddenArchetype } from './control/archetype/hidden.archetype';\nimport { OrderedListArchetype } from './control/archetype/ordered-list.archetype';\nimport { NamedListArchetype } from './control/archetype/named-list.archetype';\nimport { OneOfArchetype } from './control/archetype/one-of.archetype';\nimport { SchemaDenormalizationService } from './schema/schema-denormalization.service';\nimport { SchemaNormalizationService } from './schema/schema-normalization.service';\n\n@NgModule({\n  declarations: [\n    OutletDirective,\n  ],\n  exports: [\n    OutletDirective,\n  ],\n  imports: [\n    CommonModule,\n  ],\n  providers: [],\n})\nexport class FormGenModule {\n  public static forRoot(): ModuleWithProviders<FormGenModule> {\n    return {\n      ngModule: FormGenModule,\n      providers: [\n        VariablesService,\n        ComputationService,\n        ElementRegistry,\n        FormulaService,\n        ArchetypeRegistry,\n        InstanceService,\n        IdService,\n        SchemaService,\n        SchemaNormalizationService,\n        SchemaDenormalizationService,\n        ValueService,\n        StateService,\n        MetaService,\n        ValidationService,\n        FormGenService,\n\n        PlainArchetype,\n        HiddenArchetype,\n        GroupArchetype,\n        OneOfArchetype,\n        OrderedListArchetype,\n        NamedListArchetype,\n      ],\n    };\n  }\n\n  constructor(\n    archetypeRegistry: ArchetypeRegistry,\n    injector: Injector,\n  ) {\n    archetypeRegistry.setAll({\n      'input:generic': injector.get(PlainArchetype),\n      'input:hidden': injector.get(HiddenArchetype),\n      'input:group': injector.get(GroupArchetype),\n      'input:one-of': injector.get(OneOfArchetype),\n      'input:ordered-list': injector.get(OrderedListArchetype),\n      'input:named-list': injector.get(NamedListArchetype),\n    });\n  }\n}\n","/*\n * Public API Surface of form-gen\n */\n\nexport * from './lib/resolver/resolver';\nexport * from './lib/command/command';\nexport * from './lib/formula/formula';\nexport * from './lib/formula/formula.service';\nexport * from './lib/validators/models';\nexport * from './lib/validators/validator';\nexport * from './lib/element-registry';\nexport * from './lib/form-gen.service';\nexport * from './lib/outlet.directive';\nexport * from './lib/injection-tokens';\nexport * from './lib/models/index';\nexport * from './lib/form-gen.module';\nexport * from './lib/util/path';\nexport * from './lib/id.service';\nexport * from './lib/value.service';\nexport * from './lib/schema.service';\nexport * from './lib/schema/schema-normalization.service';\nexport * from './lib/schema/schema-denormalization.service';\nexport * from './lib/schema/instance-schema-creation.service';\nexport * from './lib/meta.service';\nexport * from './lib/computation.service';\n\nexport * from './lib/schema/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IdService","i1.ElementRegistry","i2.ValueService","i3.ElementRegistry","i4.FormulaService","i5.VariablesService","i1.SchemaNormalizationService","i2.FormGenService","markDirty","i1.FormGenService","i3.StateService","i4.MetaService","i5.IdService","i6.ValidationService","i1.ArchetypeRegistry"],"mappings":"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"}