{"version":3,"sources":["src/utils.ts","src/viewModel/Observable.ts","src/viewModel/ViewModelList.ts","src/viewModel/ViewModel.ts","src/vdom/DataPath.ts","src/vdom/vdomUtils.ts","src/vdom/dataPoint/DataExpression.ts","src/vdom/dataPoint/DataPointExtension.ts","src/vdom/dataPoint/I18nExtension.ts","src/vdom/dataPoint/PipelineExtension.ts","src/vdom/dataPoint/DataPoint.ts","src/vdom/vdomErrors.ts","src/vdom/logicalNode/lnAttribute/IfCond.ts","src/vdom/Renderable.ts","src/vdom/logicalNode/LogicalNode.ts","src/vdom/logicalNode/LNElif.ts","src/vdom/logicalNode/LNElse.ts","src/vdom/logicalNode/LNFor.ts","src/vdom/logicalNode/LNIf.ts","src/vdom/logicalNode/LNSlot.ts","src/vdom/logicalNode/LNSlotPlugin.ts","src/vdom/logicalNode/LNSubview.ts","src/vdom/vAttribute/VAttribute.ts","src/vdom/vAttribute/AtAttr.ts","src/vdom/vAttribute/AtRef.ts","src/vdom/vAttribute/AtValue.ts","src/vdom/vAttribute/NormalDomAttr.ts","src/vdom/vAttribute/DataAttr.ts","src/vdom/vAttribute/OnEventAttr.ts","src/vdom/VElement.ts","src/vdom/VText.ts","src/vdom/vdom.ts","node_modules/process/browser.js","node_modules/reflect-metadata/Reflect.js","src/View.ts","src/index.ts","tests/viewTest.ts"],"names":["process","module","exports","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","Error","defaultClearTimeout","setTimeout","e","clearTimeout","runTimeout","fun","call","runClearTimeout","marker","queue","draining","currentQueue","queueIndex","cleanUpNextTick","length","concat","drainQueue","timeout","len","run","nextTick","args","Array","arguments","i","push","Item","array","prototype","apply","title","browser","env","argv","version","versions","noop","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","name","binding","cwd","chdir","dir","umask","Reflect","factory","root","global","self","Function","exporter","makeExporter","target","previous","key","value","Object","defineProperty","configurable","writable","hasOwn","hasOwnProperty","supportsSymbol","Symbol","toPrimitiveSymbol","toPrimitive","iteratorSymbol","iterator","supportsCreate","create","supportsProto","__proto__","downLevel","HashMap","MakeDictionary","has","map","get","undefined","functionPrototype","getPrototypeOf","usePolyfill","_Map","Map","entries","CreateMapPolyfill","_Set","Set","CreateSetPolyfill","_WeakMap","WeakMap","CreateWeakMapPolyfill","Metadata","decorate","decorators","propertyKey","attributes","IsUndefined","IsArray","TypeError","IsObject","IsNull","ToPropertyKey","DecorateProperty","IsConstructor","DecorateConstructor","metadata","metadataKey","metadataValue","decorator","IsPropertyKey","OrdinaryDefineOwnMetadata","defineMetadata","hasMetadata","OrdinaryHasMetadata","hasOwnMetadata","OrdinaryHasOwnMetadata","getMetadata","OrdinaryGetMetadata","getOwnMetadata","OrdinaryGetOwnMetadata","getMetadataKeys","OrdinaryMetadataKeys","getOwnMetadataKeys","OrdinaryOwnMetadataKeys","deleteMetadata","metadataMap","GetOrCreateMetadataMap","delete","size","targetMetadata","decorated","descriptor","O","P","Create","set","MetadataKey","parent","OrdinaryGetPrototypeOf","ToBoolean","MetadataValue","ownKeys","parentKeys","keys","_i","ownKeys_1","hasKey","add","_a","parentKeys_1","keysObj","GetIterator","k","next","IteratorStep","nextValue","IteratorValue","IteratorClose","Type","x","IsSymbol","ToPrimitive","input","PreferredType","hint","exoticToPrim","GetMethod","result","OrdinaryToPrimitive","toString_1","toString","IsCallable","valueOf","toString_2","argument","ToString","isArray","V","func","obj","method","iterResult","done","f","proto","prototypeProto","constructor","cacheSentinel","arraySentinel","MapIterator","values","selector","_index","_keys","_values","_selector","index","throw","error","return","_cacheKey","_cacheIndex","enumerable","_find","clear","getKey","getValue","getEntry","insert","indexOf","_","_map","UUID_SIZE","rootKey","CreateUniqueKey","_key","table","GetOrCreateWeakMapTable","CreateUUID","FillRandomBytes","buffer","Math","random","GenRandomBytes","Uint8Array","crypto","getRandomValues","msCrypto","data","offset","byte","toLowerCase","__"],"mappings":"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","file":"viewTest.809328ae.map","sourceRoot":"..","sourcesContent":["export namespace utils {\n  export function listContains<T>(list: T[], item: T): boolean {\n    return list.indexOf(item) !== -1\n  }\n\n  export function upperCamelToLowerCamel(str: string) {\n    return str[0].toUpperCase() + str.slice(1)\n  }\n\n  /**\n   * clone object\n   * @param source source object\n   * @param deepClone true for deep clone, false for 1 level clone\n   */\n  export function clone<T>(source: T, deepClone = false): T {\n    if (source instanceof Array) {\n      const res = []\n      for (const item of source) {\n        if (deepClone) {\n          res.push(utils.clone(item), deepClone)\n        } else {\n          res.push(item)\n        }\n      }\n      return res as any\n    } else if (typeof source === 'object') {\n      const res = {} as any\n      for (const key in source) {\n        if (deepClone) {\n          res[key] = utils.clone(source[key], deepClone)\n        } else {\n          res[key] = source[key]\n        }\n      }\n      return res\n    } else {\n      return source\n    }\n  }\n\n  /**\n   * convert a string into camelcase\n   * any charactor followed a separator will be convert to uppercased letter,\n   * otherwise convert to lowercased letter\n   * @param key string to convert\n   * @param separators list of separator, defauls to \"-\"/\"_\"\n   */\n  export function camelizeKey(key: string, separators: string[] = ['-', '_']): string {\n    const out: any = []\n    let i: number = 0\n    while (i < key.length) {\n      if (separators.indexOf(key[i]) > -1) {\n        out.push(key[i + 1].toUpperCase())\n        i++\n      } else {\n        out.push(key[i])\n      }\n      i++\n    }\n    return out.join('')\n  }\n\n  /**\n   * convert all keys in an object recursivly using utils.camelizeKey\n   * @param obj\n   */\n  export function camelize(obj: object): { [key: string]: any } {\n    if (obj === null || obj === undefined) {\n      return obj\n    } else if (obj instanceof Array) {\n      return obj.map((item) => {\n        return utils.camelize(item)\n      })\n    } else if (typeof obj === 'object') {\n      const out: any = {}\n      for (const key in (obj as any)) {\n        const v = (obj as any)[key]\n        out[utils.camelizeKey(key)] = utils.camelize(v)\n      }\n      return out\n    } else {\n      return obj\n    }\n  }\n\n  export function generateId() {\n    // TODO: consider conflicts\n    return Date.now().toString(36) + parseInt(Math.random() * 1000000 + '').toString(36)\n  }\n\n  export function isEmptyObject(object: any): boolean {\n    for (const _ in object) {\n      return false\n    }\n    return true\n  }\n\n  export function listToMap<T>(list: T[], hashKey?: keyof T) {\n    const map: { [key: string]: true } = {}\n    if (hashKey) {\n      for (const item of list) {\n        map[item[hashKey].toString()] = true\n      }\n    } else {\n      for (const item of list) {\n        map[item.toString()] = true\n      }\n    }\n    return map\n  }\n}\n","import { ModificationTree } from '../types'\n\ntype WatcherCallback = (modificationTree: ModificationTree) => void\n\nexport abstract class Observable {\n  private static idCounter = 0\n  public readonly _observableId = ++Observable.idCounter\n\n  protected _watchedTargets: {\n    [id: string]: { target: Observable, watcherCount: number }\n  } = {}\n  protected _watchers: Array<{\n    context: any;\n    callback: WatcherCallback;\n  }> = []\n\n  public _watchBy(context: any, callback: WatcherCallback) {\n    this._watchers.push({ context, callback } as any)\n  }\n\n  public _stopWatchBy(context: any) {\n    this._watchers = this._watchers.filter((w) => w.context !== context)\n  }\n\n  protected _emitValueChange(modificationTree: ModificationTree) {\n    for (const { callback } of this._watchers) {\n      callback(modificationTree)\n    }\n  }\n\n  protected _registerChild(field: () => string | string, child: Observable) {\n    const id = child._observableId\n    if (!child._watchedTargets[id]) {\n      child._watchedTargets[id] = {\n        target: child,\n        watcherCount: 0\n      }\n    }\n    child._watchedTargets[id].watcherCount++\n    child._watchBy(this, (modificationTree) => {\n      let s: string\n      if (typeof field === 'function') {\n        s = field()\n      } else {\n        s = field\n      }\n      this._emitValueChange({ [s]: modificationTree })\n    })\n  }\n\n  protected _unregisterChild(childOrChildId: Observable | string) {\n    let id: string\n    if (childOrChildId instanceof Observable) {\n      id = childOrChildId._observableId + ''\n    } else {\n      id = childOrChildId\n    }\n    const watchInfo = this._watchedTargets[id]\n    if (watchInfo.watcherCount > 1) {\n      watchInfo.watcherCount--\n    } else {\n      this._watchedTargets[id].target._stopWatchBy(this)\n      delete this._watchedTargets[id]\n    }\n  }\n}\n","import { BasicType } from '../index'\nimport { ModificationTree, RSDList, RSDObject } from '../types'\nimport { Observable } from './Observable'\nimport { ViewModel } from './ViewModel'\n\ntype InputItem = BasicType | object | any[]\ntype Item = Observable | BasicType\n\n/** ViewModelList is only for internal use of the framework */\nexport class ViewModelList extends Observable {\n  [index: number]: Item;\n  private _itemStateDescriber?: RSDList\n\n  private get lastIndex() {\n    return this.length - 1\n  }\n\n  get length() {\n    return this.items.length\n  }\n  private items: Item[] = []\n\n  constructor(items: Item[], stateDescriber?: RSDList) {\n    super()\n    this._itemStateDescriber = stateDescriber\n    items = this._transformItems(items)\n    this.items = items\n    this._handleChange()\n  }\n\n  public push(item: InputItem): number {\n    const _item = this._transformItems([item])[0]\n    this.items.push(_item)\n    this._handleChange()\n    this._emitValueChange(this._createModificationTree(this.items.length - 1))\n    return this.items.length\n  }\n\n  public pop(): Item | undefined {\n    const m = this.items.pop()\n    this._handleChange()\n    this._emitValueChange(this._createModificationTree(this.lastIndex + 1))\n    return m\n  }\n\n  public unshift(item: InputItem): number {\n    const _item = this._transformItems([item])[0]\n    this.items.unshift(_item)\n    this._handleChange()\n    this._emitValueChange(this._createModificationTree(0, this.lastIndex))\n    return this.items.length\n  }\n\n  public shift(): Item | undefined {\n    const v = this.items.shift()\n    this._handleChange()\n    this._emitValueChange(this._createModificationTree(0, this.lastIndex + 1))\n    return v\n  }\n\n  public splice(index: number, length: number = 0, ...newItems: InputItem[]): Item[] {\n    const _newItems = this._transformItems(newItems)\n    if (index < 0) {\n      index = 0\n    }\n    if (index > this.lastIndex) {\n      index = this.lastIndex\n    }\n    if (length < 0) {\n      index = index + length\n      length = Math.abs(length)\n    }\n    if (index + length > this.lastIndex) {\n      length = this.lastIndex - index\n    }\n    const oldLen = this.length\n    const removed = this.items.splice(index, length, ..._newItems)\n    this._handleChange()\n    this._emitValueChange(this._createModificationTree(index, Math.max(this.lastIndex, oldLen)))\n    return removed\n  }\n\n  public slice(start?: number, end?: number) {\n    return this.items.slice(start, end)\n  }\n\n  public forEach(fn: (item: Item, index: number) => false | void) {\n    for (let i = 0; i < this.items.length; i++) {\n      if (fn(this.items[i], i) === false) {\n        break\n      }\n    }\n  }\n\n  public map<T>(fn: (item: Item, index: number) => T): T[] {\n    const res: T[] = []\n    for (let i = 0; i < this.items.length; i++) {\n      res.push(fn(this.items[i], i))\n    }\n    return res\n  }\n\n  public filter(fn: (item: Item) => boolean) {\n    return this.items.filter(fn)\n  }\n\n  public some(fn: (item: Item) => boolean) {\n    return this.items.some(fn)\n  }\n\n  public every(fn: (item: Item) => boolean) {\n    return this.items.every(fn)\n  }\n\n  public sort(fn: (a: Item, b: Item) => number) {\n    this.items = this.items.sort(fn)\n    this._handleChange()\n    this._emitValueChange(this._createModificationTree(0, this.lastIndex))\n    return this\n  }\n\n  public reverse() {\n    return this.items.reverse()\n  }\n\n  public join(separator?: string) {\n    return this.items.map((item) => item.toString()).join(separator)\n  }\n\n  public concat(...newLists: Item[][]) {\n    return this.items.concat(...newLists)\n  }\n\n  public reduce<U>(\n    callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U\n  ): U {\n    return this.items.reduce<U>(callbackfn, initialValue) as U\n  }\n\n  public reduceRight<U>(\n    callbackfn: (previousValue: U, currentValue: Item, currentIndex: number, array: Item[]) => U, initialValue: U\n  ): U {\n    return this.items.reduceRight<U>(callbackfn, initialValue) as U\n  }\n\n  public indexOf(item: InputItem): number {\n    if (typeof item === 'object' && !(item instanceof Observable)) {\n      throw new Error(\n        'Passing raw object into viewModelList.indexOf() is not supported' +\n        'because raw object may be transformed into ViewModel transparently,' +\n        'please use value check instead of reference check.'\n      )\n    }\n    for (let i = 0; i < this.items.length; i++) {\n      if (this.items[i] === item) {\n        return i\n      }\n    }\n    return -1\n  }\n\n  private _createModificationTree(startIndex: number, endIndex?: number) {\n    if (endIndex === undefined) {\n      endIndex = startIndex\n    }\n    const tree: ModificationTree = {}\n    for (let i = startIndex; i <= endIndex; i++) {\n      tree[i] = {}\n    }\n    return tree\n  }\n\n  private _transformItems(items: InputItem[]): Item[] {\n    const describer = this._itemStateDescriber\n    return items.map<Item>((item) => {\n      if (!item) {\n        console.error(items)\n        throw new TypeError('TypeErraor: view state list can\\'t have empty member')\n      }\n      if (!describer) {\n        // basictype\n        // NOTE:\n        // item can be raw object or raw list,\n        // but if there's no describer specified, we can just their types\n        // if (item instanceof Array) {\n        //   return new ViewModelList(item, {});\n        // }\n        // if (typeof item === 'object') {\n        //   return new ViewModel(item, {});\n        // }\n        return item as BasicType\n      } else if (describer instanceof Array) {\n        // array\n        if (item instanceof Array) {\n          item = new ViewModelList(item, describer[0] as RSDList)\n        }\n        if (!(item instanceof ViewModelList)) {\n          console.error(item)\n          throw new TypeError(`Can't set list member ${item}: Expecting an array`)\n        }\n        return item\n      } else {\n        // object\n        if (typeof item === 'object') {\n          item = new ViewModel(item, describer as RSDObject)\n        }\n        if (!(item instanceof ViewModel)) {\n          console.error(item)\n          throw new TypeError(`Can't set list member ${item}: Expecting an object`)\n        }\n        return item\n      }\n    })\n  }\n\n  private _handleChange() {\n    const aliveTargetIdMap: { [id: string]: true } = {}\n    this.items.forEach((item, i) => {\n      this.defineIndexProperty(i)\n      if (item instanceof Observable) {\n        const id = item._observableId\n        aliveTargetIdMap[id] = true\n        if (!this._watchedTargets[id]) {\n          this._registerChild(() => {\n            return this.indexOf(item) + ''\n          }, item)\n        }\n      }\n    })\n    for (const id in this._watchedTargets) {\n      if (!aliveTargetIdMap[id]) {\n        this._unregisterChild(id)\n      }\n    }\n  }\n\n  private defineIndexProperty(i: number) {\n    if (Object.getOwnPropertyDescriptor(this, i)) {\n      return\n    }\n    Object.defineProperty(this, '' + i, {\n      enumerable: true,\n      set: (model: Item) => {\n        this._setItemByIndex(model, i)\n      },\n      get: () => {\n        return this._getItemByIndex(i)\n      }\n    })\n  }\n\n  private _setItemByIndex(model: Item, i: number) {\n    if (i < 0 || i >= this.items.length) {\n      console.error('Invalid index:', i, 'for modelList', this)\n      throw new Error(\n        'Setting a model to ModelList[index] works only for model replacement.' +\n        'you must specify an index that reference a exisiting model'\n      )\n    }\n    this.items[i] = this._transformItems([model])[0]\n    this._handleChange()\n    this._emitValueChange(this._createModificationTree(i))\n  }\n\n  private _getItemByIndex(i: number) {\n    if (i < 0 || i >= this.items.length) {\n      return null\n    }\n    return this.items[i]\n  }\n}\n","import { BasicType, NonFuncPropNames, NonFuncProps, RSDList, RSDObject } from '../types'\nimport { Observable } from './Observable'\nimport { ViewModelList } from './ViewModelList'\n\ninterface IViewModel {\n  [key: string]: any\n}\n\n/** ViewModel is only for internal use of the framework */\nexport class ViewModel extends Observable {\n  private static bultinPropDict: { [key: string]: boolean } = {\n    _stateStore: true,\n    _stateDescriber: true\n  }\n  // [key: string]: any;\n  private _stateStore: { [key: string]: BasicType | ViewModel | ViewModelList | null } = {}\n  private _stateDescriber: RSDObject\n\n  constructor(data: object, stateDescriber: RSDObject) {\n    super()\n    this._stateDescriber = stateDescriber\n    for (const field in this._stateDescriber) {\n      // for (const key in data) {\n      //   this[key as keyof this] = data[key as keyof typeof data];\n      // }\n      Object.defineProperty(this, field, {\n        get() {\n          return (this as ViewModel)._getRenderableState(field)\n        },\n        set(value) {\n          (this as ViewModel)._setRenderableState(field, value)\n        }\n      })\n    }\n    // if a field is described in describer, it will be set via this.setValue\n    // otherwise, it will be set directly on context like plain objects\n    for (const field in data) {\n      this[field as keyof this] = data[field as keyof typeof data]\n    }\n  }\n\n  public _destory() {\n    for (const id in this._watchedTargets) {\n      this._watchedTargets[id].target._stopWatchBy(this)\n    }\n    delete this._watchedTargets\n  }\n\n  public _get(field: string) {\n    if (this._stateDescriber[field]) {\n      return this._getRenderableState(field)\n    } else {\n      return (this as IViewModel)[field]\n    }\n  }\n\n  public _getFields(): string[] {\n    const fields: string[] = []\n    for (const field in this) {\n      if (Object.hasOwnProperty(field) && !ViewModel.bultinPropDict[field]) {\n        fields.push(field)\n      }\n    }\n    return fields.concat(Object.keys(this._stateStore))\n  }\n\n  public _set(field: string, value: any) {\n    if (this._stateDescriber[field]) {\n      this._setRenderableState(field, value)\n    } else {\n      (this as IViewModel)[field] = value\n    }\n  }\n\n  private _getRenderableState(field: string) {\n    return this._stateStore[field]\n  }\n\n  private _setRenderableState(field: string, value: BasicType | ViewModel | ViewModelList) {\n    const describer = this._stateDescriber[field]\n    const oldValue = this._stateStore[field]\n    if (value === oldValue) {\n      return\n    }\n    if (oldValue && oldValue instanceof Observable) {\n      this._unregisterChild(oldValue)\n    }\n    if (value === null || value === undefined) {\n      // TODO: is setting _state[stateName] to 'null' or 'undefined' to be ok?\n      this._stateStore[field] = value\n    } else if (describer === true) {\n      // basicType state\n      this._stateStore[field] = value as BasicType\n    } else if (describer instanceof Array) {\n      // ViewModelList\n      if (value instanceof Array) {\n        // replace this with monky-patched array\n        // to watch every change of the list\n        value = new ViewModelList(value, describer[0] as RSDList)\n      }\n      if (!(value instanceof ViewModelList)) {\n        console.error(value)\n        throw new TypeError(`Can't set state ${field}: Expecting an array`)\n      }\n      const watchInfo = this._watchedTargets[value._observableId]\n      if (watchInfo) {\n        watchInfo.watcherCount++\n      } else {\n        this._watchedTargets[value._observableId] = {\n          target: value,\n          watcherCount: 1\n        }\n        value._watchBy(this, (modificationTree) => {\n          this._emitValueChange({ [field]: modificationTree })\n        })\n      }\n      this._stateStore[field] = value\n    } else {\n      // ViewModel\n      if (typeof value === 'object') {\n        value = new ViewModel(value, describer as RSDObject)\n      }\n      if (!(value instanceof ViewModel)) {\n        console.error(value)\n        throw new TypeError(`Can't set state ${field}: Expecting an object`)\n      }\n      const watchInfo = this._watchedTargets[value._observableId]\n      if (watchInfo) {\n        watchInfo.watcherCount++\n      } else {\n        this._watchedTargets[value._observableId] = {\n          target: value,\n          watcherCount: 1\n        }\n        value._watchBy(this, (modificationTree) => {\n          this._emitValueChange({ [field]: modificationTree })\n        })\n      }\n      this._stateStore[field] = value\n    }\n    // console.log(`setting ${field} value of ${this.getModelId()} to ${value}`);\n    this._emitValueChange({ [field]: {} })\n  }\n}\n\nexport namespace Model {\n  export type MField<M> = NonFuncPropNames<M>\n  export type MData<M> = NonFuncProps<M>\n}\n","import { BasicType, StateDependencies, ViewState } from '../types'\nimport { ViewModelList } from '../viewModel/ViewModelList'\n\n/** 数据取值路径，如['user','name'] 对应 user.name */\nexport class DataPath {\n  public pathArr: string[]\n  constructor(dataPathArr: string[]) {\n    this.pathArr = dataPathArr\n  }\n  public getDataFromState(state: ViewState): BasicType | ViewState | ViewModelList | ViewState[] | null {\n    let s: any = state\n    for (let i = 0; i < this.pathArr.length; i++) {\n      const name = this.pathArr[i]\n      if (s[name]) {\n        if (i === this.pathArr.length - 1) {\n          return s[name]\n        } else {\n          s = s[name]\n          continue\n        }\n      } else {\n        return null\n      }\n    }\n    return null\n  }\n  public toString() {\n    return this.pathArr.join('.')\n  }\n  public toStateDependencies() {\n    const depsTree: StateDependencies = {}\n    let node: StateDependencies | null = null\n    for (const name of this.pathArr) {\n      if (node) {\n        node[name] = {}\n        node = node[name]\n      } else {\n        depsTree[name] = {}\n        node = depsTree[name]\n      }\n    }\n    return depsTree\n  }\n}\n","import { BasicType } from '../index'\nimport { ModificationTree, RenderableStateDescriber, RSDList, RSDObject, StateDependencies, ViewState } from '../types'\nimport { utils } from '../utils'\nimport { Observable } from '../viewModel/Observable'\nimport { ViewModel } from '../viewModel/ViewModel'\nimport { DataPath } from './DataPath'\nimport { Renderable } from './Renderable'\n\nconst DATA_NAME_REG = /^[a-z][a-zA-Z0-9]*$/\n\nexport const vdomUtils = {\n\n  parseDataPath(dataName: string): DataPath | null {\n    const dataPath = dataName.split('.')\n    if (dataPath.length === 0) {\n      return null\n    }\n    for (const name of dataPath) {\n      if (!name.match(DATA_NAME_REG)) {\n        return null\n      }\n    }\n    return new DataPath(dataPath)\n  },\n\n  /** N for \"New\", means merge into new object */\n  mergeStateDependenciesN(deps: StateDependencies, newDeps: StateDependencies): StateDependencies {\n    for (const key in newDeps) {\n      if (!deps[key]) {\n        deps[key] = newDeps[key]\n      } else {\n        this.mergeStateDependenciesN(deps[key], newDeps[key])\n      }\n    }\n    return deps\n  },\n\n  /** N for \"New\", means merge into new object */\n  mergeModificationTreeN(tree: ModificationTree, newTree: ModificationTree): ModificationTree {\n    for (const key in newTree) {\n      if (!tree[key]) {\n        tree[key] = newTree[key]\n      } else {\n        this.mergeModificationTreeN(tree[key], newTree[key])\n      }\n    }\n    return tree\n  },\n\n  /** N for \"New\", means merge into new object */\n  mergeStateN(state: ViewState, newState: ViewState): ViewState {\n    const outputState: ViewState = {}\n    if (state instanceof ViewModel) {\n      for (const field of state._getFields()) {\n        outputState[field] = state[field]\n      }\n    } else {\n      for (const key in state) {\n        outputState[key] = state[key]\n      }\n    }\n    for (const key in newState) {\n      outputState[key] = newState[key]\n    }\n    return outputState\n  },\n\n  mergeStateDependenciesWithChildren(deps: StateDependencies, children: Renderable[]) {\n    for (const child of children) {\n      if (child.stateDependencies) {\n        this.mergeStateDependenciesN(deps, child.stateDependencies)\n      }\n    }\n  },\n\n  /** return true if needs update */\n  checkStateDependencies(modifiedState: ViewState, stateDependencies: StateDependencies): boolean {\n    const deepCompareStates: ViewState = {}\n    // shallow compare\n    for (const key in modifiedState) {\n      if (!stateDependencies[key]) {\n        if (stateDependencies['...']) {\n          return true\n        }\n        continue\n      }\n      if (utils.isEmptyObject(stateDependencies[key])) {\n        return true\n      }\n      deepCompareStates[key] = modifiedState[key]\n    }\n    // deep compare\n    for (const key in deepCompareStates) {\n      const s = modifiedState[key]\n      if (s instanceof ViewModel || typeof s === 'object') {\n        const diff = this.checkStateDependencies(s as ViewState, stateDependencies[key])\n        if (diff === true) {\n          return true\n        }\n      }\n    }\n    return false\n  },\n\n  mergeStateDescribers(describer: RenderableStateDescriber, newDescriber: RenderableStateDescriber | true) {\n    if (newDescriber === true) {\n      return\n    }\n    const dIsArray = describer instanceof Array\n    const ndIsArray = newDescriber instanceof Array\n    if (dIsArray !== ndIsArray) {\n      throw new TypeError('Unable to merge state describer of type list and object')\n    }\n    if (dIsArray) {\n      const d = describer as RSDList\n      const nd = newDescriber as RSDList\n      if (d[0] === true) {\n        d[0] = nd[0] || true\n      } else {\n        this.mergeStateDescribers(d[0] as RenderableStateDescriber, nd[0])\n      }\n    } else {\n      const d = describer as RSDObject\n      const nd = newDescriber as RSDObject\n      for (const field in nd) {\n        if (d[field] === true || d[field] === undefined) {\n          d[field] = nd[field]\n        } else {\n          this.mergeStateDescribers(\n            d[field] as RenderableStateDescriber,\n            nd[field]\n          )\n        }\n      }\n    }\n  },\n\n  /**\n   * NOTE: only for typing purpose, not actionaly needed.\n   * ViewModel and ViewModelList can be correctly handled as ViewState\n   */\n  observableToViewState(target: Observable | BasicType): ViewState {\n    return target as any\n  }\n}\n","import { StateDependencies, ViewState } from '../../types'\nimport { utils } from '../../utils'\nimport { vdomUtils } from '../vdomUtils'\n\nexport class ExpressionCompileError extends Error {\n  public readonly expression: string\n  public readonly index: number\n  constructor(expression: string, index: number, message: string) {\n    super(message)\n    this.expression = expression\n    this.index = index\n  }\n}\n\nconst Regs = {\n  validNameStarterChar: /[a-zA-Z_]/,\n  validNameChar: /[a-zA-Z0-9_]/,\n  nameMatcher: /([a-zA-Z_]\\w*)/g,\n  stringMatcher: /([\"'])((?:[^\\1\\\\]|\\\\.)*?)\\1/g\n}\n\ntype DataSet = ViewState\n\nconst enum LexType {\n  String, Name, Operator\n}\ninterface LexicialPart {\n  type: LexType\n  /** exists when type is string | name */\n  value?: string\n  /** exists when type is operator */\n  operator?: '==' | '!=' | '||' | '.' | ':' | '?' | '!'\n}\n\nabstract class GrammarNode {\n  public abstract getValue(dataSet: DataSet): any\n}\n\nclass NameNode extends GrammarNode {\n  public dataName: string\n  // TODO: rewrite to use DataPath object instead of child tree\n  public child?: NameNode\n  public getValue(dataSet: DataSet): any {\n    const v = dataSet[this.dataName]\n    if (v === null || v === undefined) {\n      return null\n    }\n    if (this.child) {\n      if ((v as any)[this.child.dataName]) {\n        return this.child.getValue(v as ViewState)\n      } else {\n        return null\n      }\n    } else {\n      if (utils.listContains(['string', 'number', 'boolean'], typeof v)) {\n        return v\n      } else {\n        return true\n      }\n    }\n  }\n  public toStateDependencies() {\n    const depsTree: StateDependencies = { [this.dataName]: {} }\n    let node: NameNode = this\n    let pathNode = depsTree[this.dataName]\n    while (node.child) {\n      node = node.child\n      pathNode[node.dataName] = {}\n      pathNode = pathNode[node.dataName]\n    }\n    return depsTree\n  }\n}\n\nclass ValueNode extends GrammarNode {\n  public type: 'string' | 'name' // no number and bool\n  public nameNode?: NameNode\n  public stringValue?: string\n  public getValue(dataSet: DataSet): any {\n    if (this.type === 'string') {\n      return this.stringValue\n    } else {\n      return (this.nameNode as NameNode).getValue(dataSet)\n    }\n  }\n}\n\nclass ConditionNode extends GrammarNode {\n  public cond: CalculationNode\n  public trueValue: ValueNode\n  public falseValue?: ValueNode\n  public getValue(dataSet: DataSet): any {\n    if (this.cond.getValue(dataSet)) {\n      return this.trueValue.getValue(dataSet)\n    } else {\n      if (this.falseValue) {\n        return this.falseValue.getValue(dataSet)\n      } else {\n        return null\n      }\n    }\n  }\n}\n\nexport class CalculationNode extends GrammarNode {\n  public operation?: '==' | '!=' | '!' | '||'\n  public leftHand: ValueNode\n  public rightHand?: ValueNode // exists when operation not null\n  public getValue(dataSet: DataSet): boolean {\n    if (!this.operation) {\n      return this.leftHand.getValue(dataSet)\n    }\n    if (this.operation === '||') {\n      const leftValue = this.leftHand.getValue(dataSet)\n      if (leftValue !== null && leftValue !== undefined) {\n        return leftValue\n      } else {\n        return (this.rightHand as ValueNode).getValue(dataSet)\n      }\n    }\n    if (this.operation === '!=') {\n      if (this.leftHand.getValue(dataSet) !== (this.rightHand as ValueNode).getValue(dataSet)) {\n        return true\n      } else {\n        return false\n      }\n    }\n    if (this.operation === '==') {\n      if (this.leftHand.getValue(dataSet) === (this.rightHand as ValueNode).getValue(dataSet)) {\n        return true\n      } else {\n        return false\n      }\n    }\n    if (this.operation === '!') {\n      return !(this.leftHand.getValue(dataSet))\n    }\n    return false\n  }\n}\n\nexport class DataExpression {\n  protected get fullExpression() { return `{{${this.expression}}}` }\n  // ** 数据依赖 */\n  public stateDependencies: StateDependencies = {}\n  /** 求值表达式, 如 `a?1:2` */\n  protected expression: string\n  /** 求值表达式, 包括包裹符, 如 \"{{a?1:2}}\" */\n  protected lexicialParts: LexicialPart[] = []\n  protected rootGrammarNode: ValueNode | CalculationNode | ConditionNode\n  constructor(expression: string) {\n    this.expression = expression\n    this.compile()\n  }\n  public evaluate(dataSet: DataSet): string {\n    return this.rootGrammarNode.getValue(dataSet)\n  }\n  public getExpression() {\n    return this.expression\n  }\n  public reCompile(expression: string) {\n    this.expression = expression\n    this.lexicialParts = []\n    delete this.rootGrammarNode\n    this.compile()\n  }\n  /**\n   * 在调用每个 getNode 方法时，传入的 index 是下一个需要取用的 lexicialPart 的下标\n   * 每个 getNode 方法都会返回一个 [LexicialNode, offset] 结果数组\n   * 其中的 offset 代表此方法最后取用的 lexicialPart 的下标，需要由调用方手动处理向后偏移（通常 +1 即可）\n   */\n  protected getRootNode(): DataExpression['rootGrammarNode'] | null {\n    let rootNode: GrammarNode\n    let offset: number\n    // {{Value}}\n    [rootNode, offset] = this.getValueNode(0)\n    if (rootNode && offset === this.lexicialParts.length - 1) {\n      return rootNode as ValueNode\n    }\n    // {{Calc}}\n    [rootNode, offset] = this.getCalculationNode(0)\n    if (rootNode && offset === this.lexicialParts.length - 1) {\n      return rootNode as CalculationNode\n    }\n    // {{Cond}}\n    [rootNode, offset] = this.getConditionNode(0)\n    if (rootNode && offset === this.lexicialParts.length - 1) {\n      return rootNode as ConditionNode\n    }\n    return null\n  }\n  protected getConditionNode(index: number): [ConditionNode, number] {\n    // Calc?Value:Value\n    // Calc?Value\n    const rootNode = new ConditionNode()\n    let offset: number\n    [rootNode.cond, offset] = this.getCalculationNode(index)\n    if (!rootNode.cond) {\n      return [null, null] as any\n    }\n    index = offset + 1\n    if (this.getLexicialPart(index).operator !== '?') {\n      return [null, null] as any\n    }\n    index += 1;\n    [rootNode.trueValue, offset] = this.getValueNode(index)\n    if (!rootNode.trueValue) {\n      throw new ExpressionCompileError(\n        this.expression, index,\n        `Invalid condition expression in data point ${this.fullExpression}, expected a value or name after \"?\"`\n      )\n    }\n    index = offset + 1\n    if (this.getLexicialPart(index).operator !== ':') {\n      return [rootNode, index - 1]\n    }\n    index += 1;\n    [rootNode.falseValue, offset] = this.getValueNode(index)\n    if (!rootNode.falseValue) {\n      throw new ExpressionCompileError(\n        this.expression, index,\n        `Invalid condition expression in data point ${this.fullExpression}, expected a value or name after \":\"`\n      )\n    }\n    return [rootNode, offset]\n  }\n  protected getCalculationNode(index: number): [CalculationNode, number] {\n    // Value==Value\n    // Value!=Value\n    // Value||Value\n    // !Value\n    // Value\n    const rootNode = new CalculationNode()\n    let offset: number\n    if (this.getLexicialPart(index).operator === '!') {\n      // !Value\n      index += 1;\n      [rootNode.leftHand, offset] = this.getValueNode(index)\n      if (!rootNode.leftHand) {\n        throw new ExpressionCompileError(\n          this.expression, index,\n          `Invalid calculation expression in data point ${this.fullExpression}, expected a value or name after \"!\"`\n        )\n      }\n      rootNode.operation = '!'\n      return [rootNode, offset]\n    } else {\n      // Value\n      [rootNode.leftHand, offset] = this.getValueNode(index)\n      if (!rootNode.leftHand) {\n        return [null, null] as any\n      }\n      // Value==Value or Value||Value or Value!=Value\n      index = offset + 1\n      const operator = this.getLexicialPart(index).operator\n      if (operator !== '==' && operator !== '||' && operator !== '!=') {\n        return [rootNode, index - 1]\n      } else {\n        rootNode.operation = operator\n      }\n      index += 1;\n      [rootNode.rightHand, offset] = this.getValueNode(index)\n      if (!rootNode.rightHand) {\n        throw new ExpressionCompileError(\n          this.expression, index,\n          `Invalid calculation expression in data point ${this.fullExpression}, expected a value or name after \"==\"`\n        )\n      }\n      return [rootNode, offset]\n    }\n  }\n  protected getValueNode(index: number): [ValueNode, number] {\n    const rootNode = new ValueNode()\n    if (this.getLexicialPart(index).type === LexType.String) {\n      rootNode.type = 'string'\n      rootNode.stringValue = this.getLexicialPart(index).value\n      return [rootNode, index]\n    }\n    let offset: number\n    [rootNode.nameNode, offset] = this.getNameNode(index)\n    vdomUtils.mergeStateDependenciesN(this.stateDependencies, rootNode.nameNode.toStateDependencies())\n    if (rootNode.nameNode) {\n      rootNode.type = 'name'\n      return [rootNode, offset]\n    }\n    return [null, null] as any\n  }\n  protected getNameNode(index: number): [NameNode, number] {\n    const rootNode = new NameNode()\n    let offset: number\n    const part = this.getLexicialPart(index)\n    if (part.type !== LexType.Name) {\n      return [null, null] as any\n    }\n    rootNode.dataName = part.value as string\n    index += 1\n    if (this.getLexicialPart(index).operator !== '.') {\n      return [rootNode, index - 1]\n    }\n    index += 1;\n    [rootNode.child, offset] = this.getNameNode(index)\n    if (!rootNode.child) {\n      throw new ExpressionCompileError(\n        this.expression, index,\n        `Invalid data getter in data point ${this.fullExpression}, expected a name after \".\"`\n      )\n    }\n    return [rootNode, offset]\n  }\n  private compile() {\n    // lexicial analysis\n    let state: ('name' | 'string' | 'none') = 'none'\n    let stringQuote: '\"' | '\\'' | null = null\n    let nameBuffer: string[] = []\n    for (let arr = this.expression, i = 0; i < arr.length; i++) {\n      const c = arr[i]\n      if (state === 'name') {\n        if (!Regs.validNameChar.test(c)) {\n          state = 'none'\n          const name = nameBuffer.join('')\n          this.checkName(name, i - 1)\n          this.lexicialParts.push({ type: LexType.Name, value: name })\n          // roll back 1 turn to check this char\n          i -= 1\n        } else {\n          nameBuffer.push(c)\n        }\n      } else if (state === 'string') {\n        if (c === stringQuote) {\n          state = 'none'\n          stringQuote = null\n          this.lexicialParts.push({ type: LexType.String, value: nameBuffer.join('') })\n        } else {\n          nameBuffer.push(c)\n        }\n      } else { // null\n        if (c === '\"' || c === '\\'') {\n          // handle string starter\n          state = 'string'\n          stringQuote = c\n          nameBuffer = []\n        } else if (c === '=' || c === '|') {\n          // handle operator \"==\" and \"||\"\n          if (arr[i + 1] === c) {\n            if (c === '=') {\n              this.lexicialParts.push({ type: LexType.Operator, operator: '==' })\n            } else {\n              this.lexicialParts.push({ type: LexType.Operator, operator: '||' })\n            }\n          } else {\n            throw new ExpressionCompileError(\n              this.expression, i,\n              `Invalid char \"${c}\", do you mean \"${c}${c}\"?`\n            )\n          }\n          // step over next '=' or '|'\n          i += 1\n        } else if (c === '!') {\n          if (arr[i + 1] === '=') {\n            this.lexicialParts.push({ type: LexType.Operator, operator: '!=' })\n            // step over next '='\n            i += 1\n          } else {\n            this.lexicialParts.push({ type: LexType.Operator, operator: '!' })\n          }\n        } else if (c === ' ') {\n          // skip space\n          continue\n        } else if (c === '.' || c === '?' || c === ':') {\n          // handle other operators\n          this.lexicialParts.push({ type: LexType.Operator, operator: c })\n        } else if (Regs.validNameStarterChar.test(c)) {\n          // handle name starter\n          state = 'name'\n          nameBuffer = [c]\n        } else {\n          // handle standalone digital\n          if (c.match('[0-9]')) {\n            throw new ExpressionCompileError(\n              this.expression, i,\n              `Invalid char \"${c}\" in ${this.fullExpression}, the use of number value was not permitted.`\n            )\n          } else if (c === '>') {\n            throw new ExpressionCompileError(\n              this.expression, i,\n              `Invalid char \"${c}\" in ${this.fullExpression},` +\n              'If you wan\\'t to use ViewPoint/ViewListPoint, make sure it\\'s placed on the right place;'\n            )\n          } else {\n            throw new ExpressionCompileError(\n              this.expression, i,\n              `Invalid char \"${c}\" in ${this.fullExpression}`\n            )\n          }\n        }\n      }\n    }\n    if (state === 'name') {\n      const name = nameBuffer.join('')\n      this.checkName(name, 0)\n      this.lexicialParts.push({ type: LexType.Name, value: name })\n    }\n    // grammar analysis\n    const rootNode = this.getRootNode()\n    if (!rootNode) {\n      throw new ExpressionCompileError(\n        this.expression, 0,\n        `Can't parse data expression \"${this.fullExpression}\"`\n      )\n    }\n    this.rootGrammarNode = rootNode\n  }\n  private checkName(name: string, index: number): void {\n    if (name === 'true' || name === 'false') {\n      throw new ExpressionCompileError(\n        this.expression, index,\n        `Invalid name ${name}. in ${this.fullExpression}.` +\n        ' If you want to use conditional render, use grammar like {{flag?\\'res\\'}} or {{!flag?\\'res\\'}} instead'\n      )\n    }\n  }\n  private getLexicialPart(index: number): LexicialPart {\n    if (!this.lexicialParts[index]) {\n      return { type: null } as any\n    }\n    return this.lexicialParts[index]\n  }\n}\n","import { DataPoint } from './DataPoint'\n\nexport abstract class DataPointExtension {\n\n  protected requireUpdate: DataPoint['requireUpdate']\n  constructor(dataPoint: DataPoint) {\n    this.requireUpdate = dataPoint.requireUpdate\n  }\n  public abstract init(expression: string): string\n  public onValueChange(value: string): string { return value } public onDestroy() {\n    // do nothing\n  }\n}\n","import { utils } from '../../utils'\nimport { DataPointExtension } from './DataPointExtension'\n\n/**\n * format :\n * {{\"@some.key.name:[default text]\"}}\n */\nexport class I18nExtension extends DataPointExtension {\n\n  public static setMessages(messages: { [key: string]: string }) {\n    this.i18nMessages = messages\n    for (const id in this.translatableInstances) {\n      this.translatableInstances[id].requireUpdate()\n    }\n  }\n\n  public static getMessage(key: string) {\n    return this.i18nMessages[key]\n  }\n\n  public static registerInstance(instance: I18nExtension) {\n    const id = utils.generateId()\n    this.translatableInstances[id] = instance\n    return id\n  }\n\n  public static unregisterInstance(id: string) {\n    delete this.translatableInstances[id]\n  }\n  private static translatableInstances: { [id: string]: I18nExtension } = {}\n  private static i18nMessages: { [key: string]: string } = {}\n  private static valueMatcher = /^@([\\w.]+)(?::(.+))?$/\n  private static messageTester = /@[\\w.]+(?::.+)?/\n\n  private hasI18nMsg: boolean\n  private id: string\n\n  public init(expression: string): string {\n    if (I18nExtension.messageTester.test(expression)) {\n      this.hasI18nMsg = true\n      this.id = I18nExtension.registerInstance(this)\n    }\n    return expression\n  }\n\n  public onValueChange(value: string): string {\n    if (this.hasI18nMsg && value[0] === '@') {\n      const match = value.match(I18nExtension.valueMatcher)\n      if (!match) {\n        return value\n      } else {\n        const [key, defaultMsg] = match\n        if (I18nExtension.i18nMessages[key]) {\n          return I18nExtension.i18nMessages[key]\n        } else if (defaultMsg) {\n          console.warn(`[i18n] Can't find message for key:\"${key}\" using default value`)\n          return defaultMsg\n        } else {\n          console.error(\n            `[i18n] Can't find message for key:\"${key}\" and no default value provided, please set a default value`\n          )\n          return ''\n        }\n      }\n    }\n    return value\n  }\n\n  public onDestroy() {\n    I18nExtension.unregisterInstance(this.id)\n  }\n}\n","import { DataPointExtension } from './DataPointExtension'\n\nexport class PipelineExtension extends DataPointExtension {\n  public static registerHelper(helperName: string, helper: (previousValue: string) => string) {\n    // TODO:\n  }\n  public init(expression: string): string {\n    // TODO:\n    return expression\n  }\n}\n","import { StateDependencies, ViewState } from '../../types'\nimport { vdomUtils } from '../vdomUtils'\nimport { DataExpression } from './DataExpression'\nimport { DataPointExtension } from './DataPointExtension'\nimport { I18nExtension } from './I18nExtension'\nimport { PipelineExtension } from './PipelineExtension'\n\nexport class DataPoint {\n  public static extensionClasses = [I18nExtension, PipelineExtension]\n  public extensions: DataPointExtension[] = []\n  public expressionNode: DataExpression\n  public stateDependencies: StateDependencies\n  public onRequireUpdate: () => void // TODO: handle onRequireUpdate from parent\n  private value: string\n  private stringValue: string\n\n  constructor(expression: string) {\n    for (const Ext of DataPoint.extensionClasses) {\n      const ext = new Ext(this)\n      this.extensions.push(ext)\n      expression = ext.init(expression)\n    }\n    this.expressionNode = new DataExpression(expression)\n    this.stateDependencies = this.expressionNode.stateDependencies\n  }\n\n  public getStringValue(state: ViewState, modifiedState: ViewState): string {\n    this.getValue(state, modifiedState)\n    return this.stringValue\n  }\n\n  public getValue(state: ViewState, modifiedState: ViewState): any {\n    if (this.value === undefined || vdomUtils.checkStateDependencies(modifiedState, this.stateDependencies)) {\n      this.value = this.expressionNode.evaluate(state)\n      for (const ext of this.extensions) {\n        this.value = ext.onValueChange(this.value)\n      }\n      this.updateStringValue()\n    }\n    return this.value\n  }\n\n  public requireUpdate() {\n    // for extension use\n    this.onRequireUpdate()\n  }\n\n  public destory() {\n    for (const ext of this.extensions) {\n      ext.onDestroy()\n    }\n  }\n\n  private updateStringValue() {\n    if (typeof this.value === 'string') {\n      this.stringValue = this.value\n    } else if (typeof this.value === 'boolean') {\n      this.stringValue = this.value + ''\n    } else if (typeof this.value === 'number') {\n      this.stringValue = this.value + ''\n    } else if (this.value === null || this.value === undefined) {\n      this.stringValue = ''\n    } else {\n      this.stringValue = this.value + ''\n    }\n  }\n}\n","import { vDomFactory } from './vdom'\n\nenum VDomErrorType {\n  VEntityVerifyError,\n  VAttrVerifyError,\n}\n\nabstract class VDomVerifyError extends Error {\n  public static readonly errorType: VDomErrorType\n  public static checkInstance(err: any): err is VDomVerifyError {\n    return err.errorType === this.errorType\n  }\n\n  public abstract readonly errorType: VDomErrorType\n  public readonly entityId: number\n  constructor(message: string) {\n    super(message)\n    this.entityId = vDomFactory.getIdCounters().entityId\n  }\n}\n\nexport class VEntityVerifyError extends VDomVerifyError {\n  public static readonly errorType = VDomErrorType.VEntityVerifyError\n  public readonly errorType = VEntityVerifyError.errorType\n}\n\nexport class VAttrVerifyError extends VDomVerifyError {\n  public static readonly errorType = VDomErrorType.VAttrVerifyError\n  public readonly errorType = VAttrVerifyError.errorType\n  public readonly attrName: string\n  constructor(attrName: string, message: string) {\n    super(message)\n    this.attrName = attrName\n  }\n}\n","import { StateDependencies, ViewState } from '../../../types'\nimport { CalculationNode, DataExpression } from '../../dataPoint/DataExpression'\nimport { VAttrVerifyError } from '../../vdomErrors'\nimport { vdomUtils } from '../../vdomUtils'\n\nexport class IfCond {\n  public expressionNode: ConditionExpression\n  public stateDependencies: StateDependencies\n  private result: boolean\n  constructor(expression: string, attrName: string) {\n    const expressionNode = new ConditionExpression(expression)\n    if (!expressionNode) {\n      throw new VAttrVerifyError(\n        attrName,\n        `Can't parse condition expression \"${expression}\", expecting a calculation expression`\n      )\n    }\n    this.expressionNode = expressionNode\n    this.stateDependencies = this.expressionNode.stateDependencies\n  }\n  public evaluate(state: ViewState, modifiedState: ViewState): boolean {\n    console.log('checking', this.expressionNode.getExpression())\n    if (this.result === undefined || vdomUtils.checkStateDependencies(modifiedState, this.stateDependencies)) {\n      console.log('re calculate', this.expressionNode.evaluate(state))\n      this.result = this.expressionNode.evaluate(state) ? true : false\n    }\n    return this.result\n  }\n  public destory() {\n    // do nothing\n  }\n}\n\nclass ConditionExpression extends DataExpression {\n  protected get fullExpression() { return `{{${this.expression}}}` }\n  public evaluate(dataSet: ViewState): string {\n    return this.rootGrammarNode.getValue(dataSet)\n  }\n  protected getRootNode(): CalculationNode | null {\n    // {{Calc}}\n    const [rootNode, offset] = this.getCalculationNode(0)\n    if (rootNode && offset === this.lexicialParts.length - 1) {\n      return rootNode as CalculationNode\n    }\n    return null\n  }\n}\n","import { StateDependencies, ViewState } from '../types'\nimport { PrevSibling } from './vdom'\n\nexport namespace Renderable {\n  export type ChildrenIter = (child: Renderable) => true | void\n  export type IterAction = 'skipRender' | 'rebuildStateDeps' | 'checkStructChange' | 'destroyDomEl'\n}\n\nexport abstract class Renderable {\n  private static idCounter = 0\n  public stateDependencies: StateDependencies | null = null\n  public id = ++Renderable.idCounter\n  private stateDependenciesDirty: boolean = false\n\n  public abstract render(\n    state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling\n  ): void\n\n  /** skip render this Renderable and it's children, but performs prevSibling.node passing */\n  public skipRender(prevSibling: PrevSibling) {\n    this.forEachChildren((child) => {\n      child.skipRender(prevSibling)\n    }, 'skipRender')\n  }\n\n  public destroy() {\n    this.stateDependencies = null\n    // NOTE: need iter through child & call destroy() ?\n  }\n\n  public rebuildStateDependencies() {\n    // if a parent is not dirty, it's children won't be dirty\n    if (!this.stateDependenciesDirty) {\n      return\n    }\n    this.forEachChildren((child) => {\n      child.rebuildStateDependencies()\n    }, 'rebuildStateDeps')\n    this.stateDependencies = this.initStateDependencies()\n    this.stateDependenciesDirty = false\n  }\n\n  /** subclass implement */\n  public destroyDomElement() {\n    this.forEachChildren((child) => {\n      child.destroyDomElement()\n    }, 'destroyDomEl')\n    // do nothing\n  }\n\n  public checkStructChange(): boolean {\n    let changed = false\n    if (this.stateDependencies === null) {\n      changed = true\n    }\n    this.forEachChildren((child) => {\n      if (child.checkStructChange() === true) {\n        changed = true\n      }\n    }, 'checkStructChange')\n    if (changed) {\n      this.stateDependenciesDirty = true\n      return true\n    }\n    return false\n  }\n\n  /** excute fn in every child, aborted if last call returns true */\n  public abstract forEachChildren(fn: Renderable.ChildrenIter, action: Renderable.IterAction): void\n\n  protected markStructChange() {\n    this.stateDependencies = null\n  }\n\n  protected abstract initStateDependencies(): StateDependencies\n}\n","import { StateDependencies, ViewState } from '../../types'\nimport { utils } from '../../utils'\nimport { Renderable } from '../Renderable'\nimport { AttrDict, ContentStructList, PrevSibling, vDomFactory } from '../vdom'\nimport { vdomUtils } from '../vdomUtils'\n\nexport abstract class LogicalNode extends Renderable {\n  get availAttrKeys() {\n    return (this.constructor as any).availAttrKeys as Array<string | RegExp>\n  }\n  protected static readonly availAttrKeys: Array<string | RegExp>\n  protected readonly abstract isSingle: boolean\n  public get nodeName() { return this.constructor.name }\n\n  public render(state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling) {\n    if (!this.stateDependencies) {\n      console.error(this)\n      throw new Error(`Can't render LogicalNode ${this.nodeName}: stateDependencies is null`)\n    }\n    if (utils.isEmptyObject(modifiedState) || this.checkStateDependencies(modifiedState)) {\n      this.doRender(state, modifiedState, container, prevSibling)\n    } else {\n      this.skipRender(prevSibling)\n    }\n  }\n\n  protected checkStateDependencies(modifiedState: ViewState): boolean {\n    return vdomUtils.checkStateDependencies(modifiedState, this.stateDependencies!)\n  }\n\n  protected initLogicalNode(attrDict: AttrDict, children: ContentStructList) {\n    this.constructPreCheck(attrDict, children)\n  }\n\n  protected constructPreCheck(attrDict: AttrDict, children: ContentStructList) {\n    for (const key in attrDict) {\n      if (typeof attrDict[key] !== 'string') {\n        throw new Error(`Unable to create ${this.nodeName} node: attribute ${key} must be string`)\n      }\n      let keyValid = false\n      for (const allowedKey of this.availAttrKeys) {\n        if (allowedKey instanceof RegExp) {\n          if (key.match(allowedKey)) {\n            keyValid = true\n            break\n          }\n        } else {\n          if (key === allowedKey) {\n            keyValid = true\n            break\n          }\n        }\n      }\n      if (!keyValid) {\n        throw new Error(`Unable to create ${this.nodeName} node: invalid attribute ${key}`)\n      }\n    }\n    if (this.isSingle && children.length > 0) {\n      throw new Error(`Unable to create ${this.nodeName} node; a single node can't have children`)\n    }\n  }\n\n  protected throwRequireAttrError(attrName: string) {\n    throw new Error(`Unable to create ${this.nodeName} node; require key \"${attrName}\"`)\n  }\n\n  protected abstract initStateDependencies(): StateDependencies\n  protected abstract doRender(\n    state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling\n  ): void\n\n  protected init() {\n    // when verifyMode is on, there's no need for rendering\n    // so stateDependencies will be unnecessary\n    if (vDomFactory.verifyMode) {\n      return\n    }\n    this.stateDependencies = this.initStateDependencies()\n  }\n}\n","import { AttrDict, ContentStructList } from '../vdom'\nimport { IfCond } from './lnAttribute/IfCond'\nimport { LogicalNode } from './LogicalNode'\n\nexport class LNElif extends LogicalNode {\n  public static availAttrKeys = ['cond', 'not']\n  public condEvaluator: IfCond\n  public isReversed: boolean\n  protected isSingle = true\n\n  constructor(attrDict: AttrDict, children: ContentStructList) {\n    super()\n    this.initLogicalNode(attrDict, children)\n    if (attrDict.cond) {\n      this.condEvaluator = new IfCond(attrDict.cond as string, 'cond')\n      this.isReversed = false\n    }\n    if (attrDict.not) {\n      this.condEvaluator = new IfCond(attrDict.not as string, 'not')\n      this.isReversed = true\n    }\n    this.init()\n  }\n\n  public forEachChildren() {\n    // do nothing\n  }\n\n  /** this won't be called */\n  public doRender() {\n    return true\n  }\n\n  public destroy() {\n    this.condEvaluator.destory()\n    super.destroy()\n  }\n\n  protected initStateDependencies() {\n    return this.condEvaluator.stateDependencies\n  }\n}\n","import { AttrDict, ContentStructList } from '../vdom'\nimport { LogicalNode } from './LogicalNode'\n\nexport class LNElse extends LogicalNode {\n  public static availAttrKeys: Array<string | RegExp> = []\n  protected isSingle = true\n\n  constructor(attrDict: AttrDict, children: ContentStructList) {\n    super()\n    this.initLogicalNode(attrDict, children)\n    this.init()\n  }\n\n  public forEachChildren() {\n    // do nothing\n  }\n\n  /** this won't be called */\n  public doRender() { return true }\n\n  protected initStateDependencies() {\n    return {}\n  }\n}\n","import { StateDependencies, ViewState } from '../../types'\nimport { utils } from '../../utils'\nimport { ViewModelList } from '../../viewModel/ViewModelList'\nimport { DataPath } from '../DataPath'\nimport { Renderable } from '../Renderable'\nimport { AttrDict, ContentStructList, PrevSibling, vDomFactory, VDomStruct, VNodeRegister } from '../vdom'\nimport { vdomUtils } from '../vdomUtils'\nimport { LogicalNode } from './LogicalNode'\n\nexport class LNFor extends LogicalNode {\n  public static availAttrKeys = ['list', 'item', 'index', 'key']\n  public listDataPath: DataPath\n  public itemName: string\n  public indexName?: string\n  public keyField?: string\n  public childrenStruct: Array<string | VDomStruct> = []\n  public vItems: VListItem[] = []\n  protected isSingle = false\n  private register: VNodeRegister\n\n  constructor(attrDict: AttrDict, children: ContentStructList, register: VNodeRegister) {\n    super()\n    this.register = register\n    this.initLogicalNode(attrDict, children)\n    this.listDataPath = vdomUtils.parseDataPath(attrDict.list as string) as DataPath\n    this.itemName = attrDict.item as string\n    this.indexName = attrDict.index as string || undefined\n    this.keyField = attrDict.key as string || undefined\n    if (!this.listDataPath) {\n      this.throwRequireAttrError('list')\n    }\n    for (const struct of children as Array<string | VDomStruct>) {\n      // const child = vDomFactory.createVChildren(struct, \"common\", register);\n      // this.children.push(child);\n      this.childrenStruct.push(struct)\n    }\n    this.init()\n    if (vDomFactory.verifyMode) {\n      // TODO: verify children struct\n    }\n  }\n\n  public doRender(\n    state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling\n  ): boolean {\n    // console.warn('rendering LNFor', { state, modifiedState });\n    const listData = this.listDataPath.getDataFromState(state) as ViewModelList\n    const modifiedListData = this.listDataPath.getDataFromState(modifiedState) as ViewModelList || {}\n    if (!listData) {\n      return false\n    }\n    if (!(listData instanceof ViewModelList)) {\n      throw new Error(\n        `invalid listData '${this.listDataPath.toString()}' in state: expected ModelList, but found: ${listData}`\n      )\n    }\n    // const wholeListChanged = utils.isEmptyObject(modifiedListData);\n    let i = 0\n    let structChanged = false\n    while (i < listData.length) {\n      const item = listData[i]\n      // if (!wholeListChanged && !modifiedListData[i] && this.vItems[i]) {\n      //   this.vItems[i].skipRender(prevSibling);\n      //   i++;\n      //   continue;\n      // }\n      const liState = vdomUtils.mergeStateN(\n        state,\n        { [this.itemName]: vdomUtils.observableToViewState(item) }\n      )\n      let modifiedLiState: ViewState\n      if (!this.vItems[i]) {\n        this.vItems[i] = vDomFactory.createVListItem(this.childrenStruct, this.register, this.indexName)\n        structChanged = true\n        modifiedLiState = {}\n      } else {\n        if (modifiedListData[i]) {\n          modifiedLiState = vdomUtils.mergeStateN(\n            modifiedState,\n            { [this.itemName]: vdomUtils.observableToViewState(modifiedListData[i]) }\n          )\n        } else {\n          modifiedLiState = modifiedState\n        }\n      }\n      if (this.indexName) {\n        liState[this.indexName] = i\n      }\n      this.vItems[i].render(liState, modifiedLiState, container, prevSibling)\n      i++\n    }\n    /** NOTE:\n     * VListItem won't be removed once it's created for performance\n     * only it's content dom will be destroied\n     * if memory becomes an issue, unused ones may be removed periodically\n     */\n    // mark the rest of vItems to be unsed\n    for (; i < this.vItems.length; i++) {\n      this.vItems[i].markUnused()\n    }\n    if (structChanged) {\n      // console.warn('mark struct change', this);\n      this.markStructChange()\n    }\n    return true\n  }\n\n  public forEachChildren(fn: Renderable.ChildrenIter, action: Renderable.IterAction) {\n    const skipUnused = (action === 'checkStructChange' || action === 'rebuildStateDeps') ? false : true\n    for (const vItem of this.vItems) {\n      if (!vItem.beingUsed && skipUnused) {\n        break\n      }\n      if (fn(vItem) === true) {\n        return\n      }\n    }\n  }\n\n  public destroy() {\n    for (const vItem of this.vItems) {\n      vItem.destroy()\n    }\n    delete this.listDataPath\n    delete this.vItems\n    delete this.register\n    super.destroy()\n  }\n\n  protected initStateDependencies() {\n    // console.log('reinit deps for lnfor node', this.id);\n    const deps: StateDependencies = this.listDataPath.toStateDependencies()\n    let n = deps\n    let firstKey = Object.keys(n)[0]\n    while (firstKey) {\n      n = n[firstKey]\n      firstKey = Object.keys(n)[0]\n    }\n    for (let i = 0; i < this.vItems.length; i++) {\n      const vItem = this.vItems[i]\n      if (!vItem.beingUsed) {\n        break\n      }\n      const childDeps = vItem.stateDependencies ? vdomUtils.mergeStateDependenciesN({}, vItem.stateDependencies) : {}\n      // itemName and itemIndex should not be in state dependencies\n      // because it's not an independent state in parent view\n      if (this.itemName && childDeps[this.itemName]) {\n        n[i] = childDeps[this.itemName]\n        delete childDeps[this.itemName]\n      }\n      if (this.indexName) {\n        delete childDeps[this.indexName]\n      }\n      vdomUtils.mergeStateDependenciesN(deps, childDeps)\n    }\n    if (!utils.isEmptyObject(n)) {\n      n['...'] = {}\n    }\n    console.log(this.id, JSON.stringify(deps))\n    return deps\n  }\n}\n\nexport class VListItem extends Renderable {\n  get beingUsed() { return this._isUsing }\n  private children: Renderable[] = []\n  private _isUsing = true\n  private indexKeyName?: string\n\n  constructor(childrenStruct: Array<string | VDomStruct>, register: VNodeRegister, indexKeyName?: string) {\n    super()\n    for (const struct of childrenStruct) {\n      this.children.push(vDomFactory.createVChildren(struct, 'common', register))\n    }\n    this.indexKeyName = indexKeyName\n    this.stateDependencies = this.initStateDependencies()\n  }\n\n  public markUnused() {\n    // NOTE:\n    // If re-create dom element becomes an performance bottle-neck,\n    // we can lazily destroy the dom by only excise them from document\n    if (!this._isUsing) {\n      return\n    }\n    this._isUsing = false\n    for (const child of this.children) {\n      child.destroyDomElement()\n    }\n  }\n\n  public forEachChildren(fn: Renderable.ChildrenIter): true | void {\n    for (const child of this.children) {\n      if (fn(child) === true) {\n        return true\n      }\n    }\n  }\n\n  public destroy() {\n    for (const child of this.children) {\n      child.destroy()\n    }\n    delete this.children\n    super.destroy()\n  }\n\n  public render(state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling) {\n    if (!this.stateDependencies) {\n      console.error(this)\n      throw new Error('Can\\'t render VListItem: stateDependencies is null')\n    }\n    this._isUsing = true\n    if (utils.isEmptyObject(modifiedState) || vdomUtils.checkStateDependencies(modifiedState, this.stateDependencies)) {\n      this.doRender(state, modifiedState, container, prevSibling)\n    } else {\n      this.skipRender(prevSibling)\n    }\n  }\n\n  public doRender(state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling) {\n    console.log('li render for \\n', modifiedState, '\\n', this.stateDependencies, '\\n', { state })\n    for (const child of this.children) {\n      child.render(state, modifiedState, container, prevSibling)\n    }\n  }\n\n  protected initStateDependencies(): StateDependencies {\n    const deps: StateDependencies = {}\n    vdomUtils.mergeStateDependenciesWithChildren(deps, this.children)\n    if (this.indexKeyName) {\n      delete deps[this.indexKeyName]\n    }\n    console.log(this)\n    console.log('li deps', JSON.stringify(deps))\n    return deps\n  }\n}\n","import { StateDependencies, ViewState } from '../../types'\nimport { Renderable } from '../Renderable'\nimport { AttrDict, ContentStructList, PrevSibling, vDomFactory, VDomStruct, VNodeRegister } from '../vdom'\nimport { vdomUtils } from '../vdomUtils'\nimport { IfCond } from './lnAttribute/IfCond'\nimport { LNElif } from './LNElif'\nimport { LNElse } from './LNElse'\nimport { LogicalNode } from './LogicalNode'\n\ntype BranchChildrenStruct = Array<string | VDomStruct>\n\ninterface ConditionBranch {\n  childrenStruct: BranchChildrenStruct\n  condition?: IfCond\n  isReversed?: boolean\n  children?: Renderable[]\n}\n\nexport class LNIf extends LogicalNode {\n  public static availAttrKeys = ['cond', 'not']\n  protected isSingle = false\n  private condExpressionStateDependencies: StateDependencies\n  private fulfilledBranch: ConditionBranch\n  private branches: ConditionBranch[] = []\n  private register: VNodeRegister\n\n  constructor(attrDict: AttrDict, children: ContentStructList, register: VNodeRegister) {\n    super()\n    this.register = register\n    this.initLogicalNode(attrDict, children)\n    if (attrDict.cond) {\n      this.branches.push({\n        condition: new IfCond(attrDict.cond as string, 'cond'),\n        isReversed: false,\n        childrenStruct: [],\n      })\n    }\n    if (attrDict.not) {\n      this.branches.push({\n        condition: new IfCond(attrDict.not as string, 'not'),\n        isReversed: true,\n        childrenStruct: [],\n      })\n    }\n    this.createBranch(children as BranchChildrenStruct, register)\n    this.init()\n    if (vDomFactory.verifyMode) {\n      // TODO: verify children struct\n    }\n  }\n\n  public rebuildStateDependencies() {\n    if (this.fulfilledBranch && this.fulfilledBranch.children) {\n      for (const child of this.fulfilledBranch.children) {\n        child.rebuildStateDependencies()\n      }\n    }\n    this.stateDependencies = this.initStateDependencies()\n  }\n\n  public doRender(\n    state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling\n  ): boolean {\n    let fulfilledBranch: ConditionBranch | null = null\n    for (const branch of this.branches) {\n      let fulfilled = true\n      if (branch.condition) {\n        fulfilled = branch.condition.evaluate(state, modifiedState)\n      }\n      if (branch.isReversed) {\n        fulfilled = !fulfilled\n      }\n      if (fulfilled) {\n        fulfilledBranch = branch\n        this.renderBranch(fulfilledBranch, state, modifiedState, container, prevSibling)\n        break\n      }\n    }\n    if (this.fulfilledBranch !== fulfilledBranch) {\n      // if fullfiledBranch changed, state deps needs to be update\n      // clear stateDependencies to mark struct change\n      this.markStructChange()\n      if (this.fulfilledBranch) {\n        // console.log(\"do destroy\", this.fulfilledBranch)\n        this.destroyBranchChildren(this.fulfilledBranch)\n      }\n    }\n    if (fulfilledBranch) {\n      this.fulfilledBranch = fulfilledBranch\n      return true\n    }\n    return false\n  }\n\n  public destroy() {\n    for (const branch of this.branches) {\n      if (branch.condition) {\n        branch.condition.destory()\n      }\n      delete branch.childrenStruct\n      this.destroyBranchChildren(branch)\n    }\n    delete this.branches\n    delete this.register\n    super.destroy()\n  }\n\n  public forEachChildren(fn: Renderable.ChildrenIter) {\n    for (const branch of this.branches) {\n      if (branch.children) {\n        for (const child of branch.children) {\n          if (fn(child) === true) {\n            return\n          }\n        }\n      }\n    }\n  }\n\n  protected initStateDependencies() {\n    if (!this.condExpressionStateDependencies) {\n      this.condExpressionStateDependencies = {}\n      for (const cond of this.branches) {\n        if (cond.condition) {\n          vdomUtils.mergeStateDependenciesN(\n            this.condExpressionStateDependencies,\n            cond.condition.stateDependencies\n          )\n        }\n      }\n    }\n    const deps: StateDependencies = {}\n    vdomUtils.mergeStateDependenciesN(deps, this.condExpressionStateDependencies)\n    if (this.fulfilledBranch && this.fulfilledBranch.children) {\n      vdomUtils.mergeStateDependenciesWithChildren(deps, this.fulfilledBranch.children)\n    }\n    return deps\n  }\n\n  private renderBranch(\n    branch: ConditionBranch, state: ViewState, modifiedState: ViewState,\n    container: HTMLElement, prevSibling: PrevSibling\n  ) {\n    if (!branch.children) {\n      // console.log(\"create branch children for\", branch)\n      this.createBranchChildren(branch)\n      this.markStructChange()\n      modifiedState = {}\n    }\n    console.log('render branch', branch.children, state, modifiedState)\n    for (const child of branch.children!) {\n      child.render(state, modifiedState, container, prevSibling)\n    }\n  }\n\n  private createBranch(children: BranchChildrenStruct, register: VNodeRegister) {\n    let currentConditionNode = this.branches[0]\n    let elseNodeFound = false\n    for (const struct of children as Array<string | VDomStruct>) {\n      if (typeof struct !== 'string' && struct[0] === 'L' && (struct[1] === 'Elif' || struct[1] === 'Else')) {\n        const child = vDomFactory.createVChildren(struct, 'If', register)\n        if (child instanceof LNElse) {\n          if (elseNodeFound) {\n            throw new Error('Unable to create LNIf node: multiple else node fund')\n          }\n          currentConditionNode = {\n            childrenStruct: [],\n          }\n          elseNodeFound = true\n          this.branches.push(currentConditionNode)\n          continue\n        }\n        if (child instanceof LNElif) {\n          if (elseNodeFound) {\n            throw new Error('Unable to create LNIf node: elif can\\'t appear after else node')\n          }\n          currentConditionNode = {\n            condition: child.condEvaluator,\n            isReversed: child.isReversed,\n            childrenStruct: [],\n          }\n          this.branches.push(currentConditionNode)\n          continue\n        }\n      }\n      currentConditionNode.childrenStruct.push(struct)\n    }\n  }\n\n  private createBranchChildren(branch: ConditionBranch) {\n    branch.children = []\n    for (const struct of branch.childrenStruct) {\n      const child = vDomFactory.createVChildren(struct, 'If', this.register)\n      branch.children.push(child)\n    }\n  }\n\n  private destroyBranchChildren(branch: ConditionBranch) {\n    if (!branch.children) {\n      return\n    }\n    console.log('destry branch children for', branch)\n    // destroy out-dated conditional children\n    for (const child of branch.children) {\n      child.destroy()\n    }\n    branch.children = undefined\n  }\n}\n","import { ViewState } from '../../types'\nimport { AttrDict, ContentStructList, PrevSibling, VNodeRegister } from '../vdom'\nimport { LNSlotPlugin } from './LNSlotPlugin'\nimport { LogicalNode } from './LogicalNode'\n\nexport class LNSlot extends LogicalNode {\n  public static availAttrKeys = ['name']\n  public slotName: string\n  protected isSingle = true\n  private slotPlugin: LNSlotPlugin\n\n  constructor(attrDict: AttrDict, children: ContentStructList, register: VNodeRegister) {\n    super()\n    this.initLogicalNode(attrDict, children)\n    this.slotName = attrDict.name as string\n    register.registerSlotNode(this)\n    this.init()\n  }\n\n  public registerSlotPlugin(slotPlugin: LNSlotPlugin) {\n    this.slotPlugin = slotPlugin\n  }\n\n  public doRender(\n    state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling\n  ): boolean {\n    if (this.slotPlugin) {\n      this.slotPlugin.renderBySlot(container, prevSibling)\n    }\n    return true\n  }\n\n  public forEachChildren() {\n    // do nothing\n  }\n\n  protected initStateDependencies() {\n    // A Slot doesn't have dependencies, only SlotPlugin does.\n    return {}\n  }\n}\n","import { StateDependencies, ViewState } from '../../types'\nimport { Renderable } from '../Renderable'\nimport { AttrDict, ContentStructList, PrevSibling, vDomFactory, VDomStruct, VNodeRegister } from '../vdom'\nimport { vdomUtils } from '../vdomUtils'\nimport { LogicalNode } from './LogicalNode'\n\nexport class LNSlotPlugin extends LogicalNode {\n  public static availAttrKeys = ['slot']\n  public slotName: string\n  public children: Renderable[] = []\n  public renderState: {\n    state: ViewState;\n    modifiedState: ViewState;\n  }\n  protected isSingle = false\n  private renderCache?: {\n    container: HTMLElement;\n    prevSiblingNode?: Node;\n  }\n\n  constructor(attrDict: AttrDict, children: ContentStructList, register: VNodeRegister) {\n    super()\n    this.initLogicalNode(attrDict, children)\n    this.slotName = attrDict.slot as string\n    for (const struct of children as Array<string | VDomStruct>) {\n      const child = vDomFactory.createVChildren(struct, 'Plugin', register)\n      this.children.push(child)\n    }\n    this.init()\n  }\n\n  /** slotPlugin won't render by default, it will only be render by it's slot */\n  public doRender(state: ViewState, modifiedState: ViewState): boolean {\n    this.renderState = { state, modifiedState }\n    if (this.renderCache) {\n      console.log('render plugin by subview', this.renderState.state, this.renderState.modifiedState)\n      const { container, prevSiblingNode } = this.renderCache\n      const prevSibling: PrevSibling = {\n        node: prevSiblingNode\n      }\n      for (const child of this.children) {\n        child.render(this.renderState.state, this.renderState.modifiedState, container, prevSibling)\n      }\n    }\n    return false\n  }\n\n  public renderBySlot(container: HTMLElement, prevSibling: PrevSibling) {\n    console.log('render plugin by slot', this.renderState.state, this.renderState.modifiedState)\n    for (const child of this.children) {\n      child.render(this.renderState.state, this.renderState.modifiedState, container, prevSibling)\n    }\n    this.renderCache = { container, prevSiblingNode: prevSibling.node }\n    return true\n  }\n\n  public forEachChildren(fn: Renderable.ChildrenIter): void {\n    for (const child of this.children) {\n      if (fn(child) === true) {\n        return\n      }\n    }\n  }\n\n  public destroyDomElement() {\n    delete this.renderCache\n  }\n\n  public destroy() {\n    delete this.renderCache\n    for (const child of this.children) {\n      child.destroy()\n    }\n    delete this.children\n    super.destroy()\n  }\n\n  protected initStateDependencies() {\n    const deps: StateDependencies = {}\n    vdomUtils.mergeStateDependenciesWithChildren(deps, this.children)\n    return deps\n  }\n}\n","import { Constructor, IView, StateDependencies, ViewState } from '../../types'\nimport { DataPath } from '../DataPath'\nimport { Renderable } from '../Renderable'\nimport { AttrDict, ContentStructList, PrevSibling, vDomFactory, VDomStruct, VNodeRegister } from '../vdom'\nimport { vdomUtils } from '../vdomUtils'\nimport { LNSlotPlugin } from './LNSlotPlugin'\nimport { LogicalNode } from './LogicalNode'\n\ninterface IViewReflection extends IView {\n  setPropsFromParent(props: any): void\n  setSlotPluginsFromParent(slotPlugins: { [slotName: string]: LNSlotPlugin }): void\n  destroy(): void\n}\n\nexport class LNSubview extends LogicalNode {\n  public static availAttrKeys = ['class', 'props', /^:[a-z][a-zA-Z0-9]*$/]\n  public viewClassPath: string\n  public outputEventNames: { [eventName: string]: string; } = {}\n  public outputEventHandlers: { [eventName: string]: (...args: any[]) => void; } = {}\n  public subviewName: string\n  public slotPlugins: { [slotName: string]: LNSlotPlugin; } = {}\n  protected isSingle = false\n  private viewClass: Constructor<IView>\n  private view: IView\n  private propsStateDependencies: StateDependencies\n  private propsGetter: () => any\n\n  constructor(attrDict: AttrDict, children: ContentStructList, register: VNodeRegister) {\n    super()\n    this.initLogicalNode(attrDict, children)\n    if (!attrDict.class) {\n      this.throwRequireAttrError('class')\n    }\n    this.viewClassPath = attrDict.class as string\n    this.subviewName = '' + this.viewClassPath.split('/').pop()\n    const { propsGetter, stateDependencies } = register.registerSubviewNode(this)\n    this.propsGetter = propsGetter\n    this.propsStateDependencies = {}\n    for (const d of stateDependencies) {\n      vdomUtils.mergeStateDependenciesN(this.propsStateDependencies, new DataPath(d.split('.')).toStateDependencies())\n    }\n    for (const attrName in attrDict) {\n      if (attrName[0] !== ':' || attrName === 'props') {\n        continue\n      }\n      const eventName = attrName.slice(1)\n      this.outputEventNames[eventName] = attrDict[attrName] as string\n    }\n    for (const struct of children as Array<string | VDomStruct>) {\n      const node = vDomFactory.createVChildren(struct, 'View', register) as LNSlotPlugin\n      if (this.slotPlugins[node.slotName]) {\n        throw new Error(`Duplicated slot plugin for slotName '${node.slotName}'`)\n      }\n      this.slotPlugins[node.slotName] = node\n    }\n    this.init()\n  }\n\n  public setViewClass(viewClass: LNSubview['viewClass']) {\n    this.viewClass = viewClass\n  }\n\n  public forEachChildren(fn: Renderable.ChildrenIter) {\n    for (const slotName in this.slotPlugins) {\n      if (fn(this.slotPlugins[slotName]) === true) {\n        return\n      }\n    }\n  }\n\n  public doRender(\n    state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling\n  ): boolean {\n    if (!this.view) {\n      this.view = new this.viewClass(this.getProps(state));\n      (this.view as IViewReflection).setSlotPluginsFromParent(this.slotPlugins)\n      if (prevSibling.node) {\n        this.view.insertAfter(prevSibling.node)\n      } else {\n        this.view.appendTo(container)\n      }\n    }\n    (this.view as IViewReflection).setPropsFromParent(this.getProps(state))\n    for (const slotName in this.slotPlugins) {\n      this.slotPlugins[slotName].doRender(state, modifiedState)\n    }\n    return true\n  }\n\n  public destroy() {\n    for (const slotName in this.slotPlugins) {\n      this.slotPlugins[slotName].destroy()\n      delete this.slotPlugins[slotName]\n    }\n    delete this.slotPlugins\n    delete this.outputEventNames\n    delete this.outputEventHandlers\n    delete this.viewClass\n    delete this.propsGetter\n    if (this.view) {\n      (this.view as IViewReflection).destroy()\n      delete this.view\n    }\n    super.destroy()\n  }\n\n  protected initStateDependencies() {\n    const deps: StateDependencies = {}\n    vdomUtils.mergeStateDependenciesN(deps, this.propsStateDependencies)\n    for (const slotName in this.slotPlugins) {\n      const slotPlugin = this.slotPlugins[slotName]\n      if (slotPlugin.stateDependencies) {\n        vdomUtils.mergeStateDependenciesN(deps, slotPlugin.stateDependencies)\n      }\n    }\n    return deps\n  }\n\n  private getProps(state: ViewState): {} {\n    try {\n      return this.propsGetter.call(state)\n    } catch (error) {\n      console.warn(error)\n      return {}\n    }\n  }\n}\n","import { StateDependencies, ViewState } from '../../types'\nimport { VNodeRegister } from '../vdom'\nimport { VAttrVerifyError } from '../vdomErrors'\nimport { VElement } from '../VElement'\n\nexport type IAttrValue = string | Array<string | ['D', string]>\n\nexport abstract class VAttribute {\n  public static matcher: string | RegExp = '*'\n  public static allowNonStringValue = false\n  public stateDependencies: StateDependencies\n  public created: boolean\n\n  constructor(attrName: string, attrValue: IAttrValue, vElement: VElement, register: VNodeRegister) {\n    const allowNonStringValue: boolean = (this.constructor as any).allowNonStringValue\n    if (typeof attrValue !== 'string' && !allowNonStringValue) {\n      throw new VAttrVerifyError(\n        attrName,\n        `Invalid value for ${attrName} in ${register.viewClassName}: must be a string`\n      )\n    }\n    this.created = this.init(attrName, attrValue, vElement, register)\n    if (this.created) {\n      this.stateDependencies = this.createStateDependencies()\n    }\n  }\n\n  public destroy() {\n    this.onDestroy()\n  }\n\n  public abstract init(attrName: string, attrValue: IAttrValue, vElement: VElement, register: VNodeRegister): boolean\n  public abstract createStateDependencies(): StateDependencies\n  public onElementCreate(element: HTMLElement): void {\n    // subclass implement\n  }\n  public onElementDestroy(element: HTMLElement): void {\n    // subclass implement\n  }\n  public onRender(state: ViewState, modifiedState: ViewState): void {\n    // subclass implement\n  }\n  public onDestroy(): void {\n    // subclass implement\n  }\n}\n","import { ViewState } from '../../types'\nimport { DataPath } from '../DataPath'\nimport { VNodeRegister } from '../vdom'\nimport { vdomUtils } from '../vdomUtils'\nimport { VElement } from '../VElement'\nimport { VAttribute } from './VAttribute'\n\nexport class AtAttr extends VAttribute {\n  public static matcher = /^@attr:([a-z]+)$/\n  private attrName: string\n  private dataPath: DataPath\n  private vElement: VElement\n\n  public init(attrName: string, attrValue: string, vElement: VElement, register: VNodeRegister) {\n    this.attrName = attrName.match(AtAttr.matcher)![1]\n    this.vElement = vElement\n    this.dataPath = new DataPath(attrValue.split('.'))\n    return true\n  }\n\n  public onRender(state: ViewState, modifiedState: ViewState) {\n    if (vdomUtils.checkStateDependencies(modifiedState, this.dataPath.toStateDependencies())) {\n      if (this.dataPath.getDataFromState(state)) {\n        this.vElement.element!.setAttribute(this.attrName, '')\n      } else {\n        this.vElement.element!.removeAttribute(this.attrName)\n      }\n    }\n  }\n\n  public createStateDependencies() {\n    return this.dataPath.toStateDependencies()\n  }\n\n  public onDestroy() {\n    delete this.vElement\n  }\n}\n","import { VNodeRegister } from '../vdom'\nimport { VElement } from '../VElement'\nimport { VAttribute } from './VAttribute'\n\n/** Es6 Proxy api, dosen't matter if used in unsupported browser */\ndeclare class Proxy<T> {\n  constructor(\n    target: T, handler: { get: (obj: T, prop: string) => any, set: (obj: T, prop: string, value: any) => any }\n  );\n}\n\nexport class AtRef extends VAttribute {\n  public static matcher = '@ref'\n  private refName: string\n  private viewClassName: string\n  private view: { refs: { [refName: string]: HTMLElement } }\n  public init(attrName: string, attrValue: string, vElement: VElement, register: VNodeRegister): boolean {\n    this.refName = attrValue\n    this.viewClassName = register.viewClassName\n    this.view = register.view as any\n    return true\n  }\n  public onElementCreate(element: HTMLElement) {\n    this.view.refs[this.refName] = this.createElementRef(this.refName, element, this.viewClassName)\n  }\n\n  public onElementDestroy(element: HTMLElement) {\n    delete this.view.refs[this.refName]\n  }\n\n  public createStateDependencies() {\n    return {}\n  }\n\n  private createElementRef<T extends HTMLElement>(refName: string, element: T, viewClassName: string): T {\n    if (Proxy) {\n      // Show warning about the abuse of orignal to developer\n      return new Proxy(element, {\n        get: (obj, prop) => {\n          if (prop === 'addEventListener') {\n            console.warn(\n              `[Wille] Calling \"${prop}\" from ref ${refName} of ${viewClassName} is NOT recommanded,` +\n              'Please use event binder instead'\n            )\n          }\n          const p = (obj as any)[prop]\n          if (typeof p === 'function') {\n            return p.bind(obj)\n          } else {\n            return p\n          }\n        },\n        set: (obj, prop, value) => {\n          if (prop.indexOf('on') === 0) {\n            console.warn(\n              `[Wille] Setting \"${prop}\" from ref ${refName} of ${viewClassName} is NOT recommanded, ` +\n              'Please use event binder instead'\n            )\n          }\n          (obj as any)[prop] = value\n          return true\n        }\n      }) as T\n    } else {\n      return element\n    }\n  }\n}\n","import { VNodeRegister } from '../vdom'\nimport { VElement } from '../VElement'\nimport { VAttribute } from './VAttribute'\n\nconst enum ElementType {\n  Input, Select\n}\n\nexport class AtValue extends VAttribute {\n  public static matcher = '@value'\n  public stateName: string\n  public type: ElementType\n  /** use any to prevent import circle */\n  public view: any\n  public init(attrName: string, attrValue: string, vElement: VElement, register: VNodeRegister) {\n    if (attrValue.indexOf('.') !== -1) {\n      throw new Error(\n        `Invalid stateName '${attrValue}' for @value in ${register.viewClassName}: must be a first level state`\n      )\n    }\n    this.stateName = attrValue\n    this.view = register.view\n    if (vElement.tagName === 'input') {\n      this.type = ElementType.Input\n      return true\n    }\n    if (vElement.tagName === 'select') {\n      this.type = ElementType.Select\n      return true\n    }\n    return false\n  }\n  public onElementCreate(element: HTMLElement) {\n    console.log('on element create')\n    if (this.type === ElementType.Input) {\n      element.addEventListener('input', () => {\n        console.log('trigger bind value', this.stateName, this.view)\n        this.view[this.stateName] = (element as HTMLInputElement).value\n      })\n    }\n    if (this.type === ElementType.Select) {\n      element.addEventListener('change', () => {\n        const e = element as HTMLSelectElement\n        this.view[this.stateName] = e.options[e.selectedIndex].value\n      })\n    }\n  }\n  public createStateDependencies() {\n    return { [this.stateName]: {} }\n  }\n  public onDestroy() {\n    this.view = null\n  }\n}\n","import { StateDependencies, ViewState } from '../../types'\nimport { DataPoint } from '../dataPoint/DataPoint'\nimport { VNodeRegister } from '../vdom'\nimport { vdomUtils } from '../vdomUtils'\nimport { VElement } from '../VElement'\nimport { IAttrValue, VAttribute } from './VAttribute'\n\nenum ValueType {\n  Data, String\n}\n\nexport class NormalDomAttr extends VAttribute {\n  public static matcher = /.*/\n  public static allowNonStringValue = true\n  public valueType: ValueType\n  public attrName: string\n  public stringValue?: string\n  public dataValue?: Array<string | DataPoint>\n  private lastValue?: string\n  private element?: HTMLElement\n\n  public init(attrName: string, attrValue: IAttrValue, vElement: VElement, register: VNodeRegister): boolean {\n    if (attrName[0] === '@') {\n      return false\n    }\n    this.attrName = attrName\n    if (typeof attrValue === 'string') {\n      this.valueType = ValueType.String\n      this.stringValue = attrValue\n    } else {\n      this.valueType = ValueType.Data\n      this.dataValue = []\n      for (const part of attrValue) {\n        if (typeof part === 'string') {\n          this.dataValue.push(part)\n        } else {\n          this.dataValue.push(this.createDataPoint(part, attrName, register.viewClassName))\n        }\n      }\n    }\n    return true\n  }\n\n  public createStateDependencies() {\n    if (this.valueType === ValueType.Data) {\n      const deps: StateDependencies = {}\n      for (const part of (this.dataValue as Array<string | DataPoint>)) {\n        if (part instanceof DataPoint) {\n          vdomUtils.mergeStateDependenciesN(deps, part.stateDependencies)\n        }\n      }\n      return deps\n    } else {\n      return {}\n    }\n  }\n\n  public onElementCreate(element: HTMLElement) {\n    this.element = element\n  }\n\n  public onElementDestroy() {\n    this.element = undefined\n  }\n\n  public onRender(state: ViewState, modifiedState: ViewState) {\n    let value: string | null = null\n    if (this.valueType === ValueType.String) {\n      value = this.stringValue as string\n    } else {\n      if (\n        !this.element!.hasAttribute(this.attrName) ||\n        vdomUtils.checkStateDependencies(modifiedState, this.stateDependencies)\n      ) {\n        const parts: string[] = []\n        for (const part of (this.dataValue as Array<string | DataPoint>)) {\n          if (typeof part === 'string') {\n            parts.push(part)\n          } else {\n            parts.push(part.getStringValue(state, modifiedState))\n          }\n        }\n        value = parts.join('')\n      }\n    }\n    if (value !== null && value !== this.lastValue) {\n      this.element!.setAttribute(this.attrName, value)\n      this.lastValue = value\n    }\n  }\n\n  public onDestroy() {\n    delete this.element\n    delete this.dataValue\n  }\n\n  private createDataPoint(struct: ['D', string], attrName: string, viewClassName: string) {\n    const [type, expression] = struct\n    if (type !== 'D') {\n      throw new Error(\n        `Unable to create DataPoint for '${attrName}' in ${viewClassName} from struct: Invalid type ${type}`\n      )\n    }\n    return new DataPoint(expression)\n  }\n}\n\nexport namespace NormalDomAttr {\n  export const AttrValueType = ValueType\n}\n","import { ViewState } from '../../types'\nimport { utils } from '../../utils'\nimport { DataPoint } from '../dataPoint/DataPoint'\nimport { VNodeRegister } from '../vdom'\nimport { VElement } from '../VElement'\nimport { NormalDomAttr } from './NormalDomAttr'\nimport { IAttrValue } from './VAttribute'\n\nexport class DataAttr extends NormalDomAttr {\n  public static matcher = /^data-([a-zA-Z-]+)$/\n  public static allowNonStringValue = true\n  private static upperCaseMatcher = /[A-Z]/\n  public dataName: string\n  public value: any\n\n  public init(attrName: string, attrValue: IAttrValue, vElement: VElement, register: VNodeRegister): boolean {\n    if (DataAttr.upperCaseMatcher.test(attrName)) {\n      throw new Error(\n        `Unable to create vAttribute \"${attrName}\" in ${register.viewClassName}: ` +\n        'Upper cased letter in data name is forbidden'\n      )\n    }\n    super.init(attrName, attrValue, vElement, register)\n    this.dataName = utils.camelizeKey((attrName.match(DataAttr.matcher) as RegExpMatchArray)[1])\n    if (this.dataValue) {\n      if (this.dataValue.length > 1 || typeof this.dataValue[0] === 'string') {\n        console.error(this.dataValue)\n        throw new Error(\n          `Unable to create vAttribute \"${attrName}\" with value:in ${register.viewClassName}: ` +\n          'it\\'s value must be a string OR a DataPoint, not a mixture of both'\n        )\n      }\n    }\n    return true\n  }\n\n  public onRender(state: ViewState, modifiedState: ViewState) {\n    if (this.dataValue) {\n      this.value = (this.dataValue[0] as DataPoint).getValue(state, modifiedState)\n    } else {\n      this.value = this.stringValue\n    }\n  }\n}\n","import { VNodeRegister } from '../vdom'\nimport { VElement } from '../VElement'\nimport { DataAttr } from './DataAttr'\nimport { VAttribute } from './VAttribute'\n\nexport class OnEventAttr extends VAttribute {\n  public static matcher = /^on([a-z]+)$/\n  private eventName: string\n  private handlerName: string\n  private handler: EventListener\n  private originalHandler: (event: Event, dataset: any) => any\n  private dataAttrs: DataAttr[]\n  private element?: HTMLElement\n\n  public init(attrName: string, attrValue: string, vElement: VElement, register: VNodeRegister) {\n    this.eventName = attrName.match(OnEventAttr.matcher)![1]\n    this.handlerName = attrValue\n    const fn = register.view[this.handlerName as keyof VNodeRegister['view']] as EventListener\n    if (typeof fn !== 'function') {\n      throw new Error(\n        `Invalid handler '${this.handlerName}' for event '${this.eventName}' ` +\n        `in ${register.viewClassName}: there's no such function in view implementation`\n      )\n    }\n    this.originalHandler = fn.bind(register.view)\n    this.handler = this.handleDomEvent.bind(this)\n    this.dataAttrs = []\n    const vAttrs = vElement.vAttributes\n    for (const _attrName in vAttrs) {\n      const va = vAttrs[_attrName]\n      if (va instanceof DataAttr) {\n        this.dataAttrs.push(va)\n      }\n    }\n    return true\n  }\n\n  public onElementCreate(element: HTMLElement) {\n    this.element = element\n    this.element.addEventListener(this.eventName, this.handler)\n  }\n\n  public onElementDestroy() {\n    if (this.element) {\n      this.element.removeEventListener(this.eventName, this.handler)\n      this.element = undefined\n    }\n  }\n\n  public onDestroy() {\n    this.onElementDestroy()\n    delete this.dataAttrs\n    delete this.originalHandler\n  }\n\n  public handleDomEvent(evt: Event) {\n    const dataset: { [key: string]: any } = {}\n    for (const { dataName, value } of this.dataAttrs) {\n      dataset[dataName] = value\n    }\n    this.originalHandler(evt, dataset)\n  }\n\n  public createStateDependencies() {\n    return {}\n  }\n}\n","import { StateDependencies, ViewState } from '../types'\nimport { utils } from '../utils'\nimport { Renderable } from './Renderable'\nimport { AtAttr } from './vAttribute/AtAttr'\nimport { AtRef } from './vAttribute/AtRef'\nimport { AtValue } from './vAttribute/AtValue'\nimport { DataAttr } from './vAttribute/DataAttr'\nimport { NormalDomAttr } from './vAttribute/NormalDomAttr'\nimport { OnEventAttr } from './vAttribute/OnEventAttr'\nimport { VAttribute } from './vAttribute/VAttribute'\nimport { AttrDict, ContentStructList, PrevSibling, vDomFactory, VDomStruct, VNodeRegister } from './vdom'\nimport { VAttrVerifyError } from './vdomErrors'\nimport { vdomUtils } from './vdomUtils'\n\nexport class VElement extends Renderable {\n  public static vAttributeClasses = [\n    AtAttr, AtRef, AtValue,\n    DataAttr, OnEventAttr,\n    NormalDomAttr\n  ]\n  public tagName: string\n  public element?: HTMLElement\n  public vAttributes: { [key: string]: VAttribute } = {}\n  private children: Renderable[] = []\n  constructor(tagName: string, attrDict: AttrDict, children: ContentStructList, register: VNodeRegister) {\n    super()\n    this.tagName = tagName\n    const copiedAttrDict = utils.clone(attrDict, false)\n    for (const VAttrClass of VElement.vAttributeClasses) {\n      for (const attrName in copiedAttrDict) {\n        const attr = copiedAttrDict[attrName]\n        let vAttr: VAttribute | undefined\n        if (typeof VAttrClass.matcher === 'string' && VAttrClass.matcher === attrName) {\n          vAttr = new VAttrClass(attrName, attr, this, register)\n        } else if (VAttrClass.matcher instanceof RegExp && VAttrClass.matcher.test(attrName)) {\n          vAttr = new VAttrClass(attrName, attr, this, register)\n        }\n        if (vAttr) {\n          if (vAttr.created) {\n            this.vAttributes[attrName] = vAttr\n            delete copiedAttrDict[attrName]\n          } else {\n            vAttr.destroy()\n          }\n        }\n      }\n    }\n    // handling unresolved attrs\n    for (const attrName in copiedAttrDict) {\n      throw new VAttrVerifyError(\n        attrName,\n        `Unsupported vAttribute: '${attrName}' in VElement '${tagName}' of ${register.viewClassName}, please check!`\n      )\n    }\n    for (const struct of children as Array<string | VDomStruct>) {\n      this.children.push(vDomFactory.createVChildren(struct, 'common', register))\n    }\n    this.stateDependencies = this.initStateDependencies()\n  }\n\n  public destroyDomElement() {\n    super.destroyDomElement()\n    if (!this.element) {\n      return\n    }\n    for (const key in this.vAttributes) {\n      this.vAttributes[key].onElementDestroy(this.element)\n    }\n    if (this.element.parentElement) {\n      this.element.parentElement.removeChild(this.element)\n    }\n    this.element = undefined\n  }\n\n  public render(state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling) {\n    if (!this.stateDependencies) {\n      console.error(this)\n      throw new Error('Can\\'t render VElement: stateDependencies is null')\n    }\n    // console.log(\"do render\");\n    if (!this.element) {\n      this.createDomElement(container, prevSibling)\n      this.doRender(state, modifiedState, prevSibling)\n    } else {\n      if (vdomUtils.checkStateDependencies(modifiedState, this.stateDependencies)) {\n        this.doRender(state, modifiedState, prevSibling)\n      }\n    }\n    // if (prevSibling.node === this.element) {\n    //   prevSibling.node = this.element.nextSibling;\n    // }\n    prevSibling.node = this.element\n  }\n\n  public skipRender(prevSibling: PrevSibling) {\n    if (!this.element) {\n      return\n    }\n    super.skipRender(prevSibling)\n    prevSibling.node = this.element\n  }\n\n  public destroy() {\n    this.destroyDomElement()\n    for (const key in this.vAttributes) {\n      this.vAttributes[key].destroy()\n    }\n    for (const child of this.children) {\n      child.destroy()\n    }\n    delete this.vAttributes\n    delete this.children\n    super.destroy()\n  }\n\n  public forEachChildren(fn: Renderable.ChildrenIter) {\n    for (const child of this.children) {\n      if (fn(child) === true) {\n        return\n      }\n    }\n  }\n\n  protected initStateDependencies() {\n    const deps: StateDependencies = {}\n    for (const key in this.vAttributes) {\n      const vAttr = this.vAttributes[key]\n      vdomUtils.mergeStateDependenciesN(deps, vAttr.stateDependencies)\n    }\n    vdomUtils.mergeStateDependenciesWithChildren(deps, this.children)\n    return deps\n  }\n\n  private createDomElement(container: HTMLElement, prevSibling: PrevSibling) {\n    this.element = document.createElement(this.tagName)\n    if (prevSibling.node) {\n      container.insertBefore(this.element, prevSibling.node.nextSibling)\n    } else {\n      container.insertBefore(this.element, container.firstChild)\n    }\n    for (const key in this.vAttributes) {\n      this.vAttributes[key].onElementCreate(this.element)\n    }\n  }\n\n  private doRender(state: ViewState, modifiedState: ViewState, prevSibling: PrevSibling) {\n    for (const key in this.vAttributes) {\n      this.vAttributes[key].onRender(state, modifiedState)\n    }\n    prevSibling.node = undefined\n    for (const child of this.children) {\n      child.render(state, modifiedState, this.element!, prevSibling)\n    }\n  }\n}\n","import { StateDependencies, ViewState } from '../types'\nimport { DataPoint } from './dataPoint/DataPoint'\nimport { Renderable } from './Renderable'\nimport { PrevSibling } from './vdom'\nimport { vdomUtils } from './vdomUtils'\n\nexport enum VTextType { text, data }\n\nexport class VText extends Renderable {\n  public type: VTextType\n  public dataPoint?: DataPoint\n  public content?: string\n  public textNode?: Text\n  public stateDependencies: StateDependencies\n  private lastValue?: string\n  constructor(content: string | DataPoint) {\n    super()\n    if (typeof content === 'string') {\n      this.type = VTextType.text\n      this.content = content\n    } else {\n      this.type = VTextType.data\n      this.dataPoint = content\n    }\n    this.stateDependencies = this.initStateDependencies()\n  }\n\n  public render(state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling) {\n    if (!this.textNode) {\n      this.createDomNode(state, modifiedState, container, prevSibling)\n    } else {\n      if (this.type === VTextType.data) {\n        if (vdomUtils.checkStateDependencies(modifiedState, this.stateDependencies)) {\n          const value = (this.dataPoint as DataPoint).getStringValue(state, modifiedState)\n          if (value !== this.lastValue) {\n            this.textNode.nodeValue = value\n            this.lastValue = value\n          }\n        }\n      }\n    }\n    prevSibling.node = this.textNode\n  }\n\n  public skipRender(prevSibling: PrevSibling) {\n    if (!this.textNode) {\n      return\n    }\n    super.skipRender(prevSibling)\n    prevSibling.node = this.textNode\n  }\n\n  public destroyDomElement() {\n    if (!this.textNode) {\n      return\n    }\n    if (this.textNode.parentElement) {\n      this.textNode.parentElement.removeChild(this.textNode)\n    }\n    this.textNode = undefined\n  }\n\n  public destroy() {\n    if (this.dataPoint) {\n      this.dataPoint.destory()\n      delete this.dataPoint\n    }\n    if (this.textNode && this.textNode.parentElement) {\n      this.textNode.parentElement.removeChild(this.textNode)\n    }\n    delete this.textNode\n    delete this.content\n    super.destroy()\n  }\n\n  public forEachChildren(fn: Renderable.ChildrenIter) {\n    // do nothing\n  }\n\n  protected initStateDependencies(): StateDependencies {\n    if (this.type === VTextType.text) {\n      return {}\n    } else {\n      return (this.dataPoint as DataPoint).stateDependencies\n    }\n  }\n\n  private createDomNode(state: ViewState, modifiedState: ViewState, container: HTMLElement, prevSibling: PrevSibling) {\n    const value = this.type === VTextType.text ?\n      this.content as string : (this.dataPoint as DataPoint).getStringValue(state, modifiedState)\n    this.textNode = document.createTextNode(value)\n    if (prevSibling.node) {\n      container.insertBefore(this.textNode, prevSibling.node.nextSibling)\n    } else {\n      container.insertBefore(this.textNode, container.firstChild)\n    }\n  }\n}\n","import { ModificationTree, ViewState } from '../types'\nimport { utils } from '../utils'\nimport { ViewModel } from '../viewModel/ViewModel'\nimport { DataPoint } from './dataPoint/DataPoint'\nimport { LNElif } from './logicalNode/LNElif'\nimport { LNElse } from './logicalNode/LNElse'\nimport { LNFor, VListItem } from './logicalNode/LNFor'\nimport { LNIf } from './logicalNode/LNIf'\nimport { LNSlot } from './logicalNode/LNSlot'\nimport { LNSlotPlugin } from './logicalNode/LNSlotPlugin'\nimport { LNSubview } from './logicalNode/LNSubview'\nimport { LogicalNode } from './logicalNode/LogicalNode'\nimport { VEntityVerifyError } from './vdomErrors'\nimport { vdomUtils } from './vdomUtils'\nimport { VElement } from './VElement'\nimport { VText } from './VText'\n\nexport interface PrevSibling {\n  node?: Node\n}\n\nexport class VDomRoot {\n  public domCreated = false\n  public container: HTMLElement\n  private rootElement: VElement\n  /** dirty means this will be render in next animation frame */\n  private dirty = false\n  private renderCache?: {\n    state: ViewState;\n    entryStatesMap: { [key: string]: true };\n    modificationTree: ModificationTree;\n  }\n\n  constructor(rootElement: VElement) {\n    this.rootElement = rootElement\n  }\n\n  public initialRender(vm: ViewModel, container: HTMLElement, prevSibling: PrevSibling) {\n    this.rootElement.render(vdomUtils.observableToViewState(vm), {}, container, prevSibling)\n    this.checkRebuildStateDependencies()\n    if (!this.container) {\n      this.container = container\n      this.domCreated = true\n    }\n  }\n\n  public update(vm: ViewModel, modificationTree: ModificationTree) {\n    if (!this.renderCache) {\n      this.renderCache = {\n        state: vdomUtils.observableToViewState(vm),\n        modificationTree,\n        entryStatesMap: {}\n      }\n    } else {\n      vdomUtils.mergeModificationTreeN(this.renderCache.modificationTree, modificationTree)\n    }\n    if (!this.dirty) {\n      this.dirty = true\n      requestAnimationFrame(() => {\n        this.renderUpdate()\n      })\n    }\n  }\n\n  public renderUpdate() {\n    /** NOTE:\n     * merge entryState into modificationTree\n     * use modificationTree to generate modificationState\n     * for example:\n     * - modificationTree: {pet:{name:{}, age:{}}}\n     * - entryState: [pet, address]\n     * merged to:\n     * - {pet:{name:{}, age:{}}, address:{}}\n     * generate to modificationState:\n     * - {pet:{name:'doge', age:10}, address:'some address'}\n     */\n    if (!this.renderCache || !this.dirty) {\n      return\n    }\n    const { state, modificationTree } = this.renderCache\n    const entryStates = Object.keys(this.renderCache.entryStatesMap)\n    let modifiedState: ViewState\n    if (modificationTree) {\n      // merge entryStates into exisitng modificationTree\n      for (const stateName of entryStates) {\n        if (modificationTree[stateName]) {\n          continue\n        }\n        modificationTree[stateName] = {}\n      }\n      // console.log(state, modificationTree);\n      modifiedState = this.computeModifiedState(state, modificationTree)\n      // console.log(modifiedState);\n    } else {\n      modifiedState = {}\n      for (const stateName of entryStates) {\n        modifiedState[stateName] = state[stateName]\n      }\n    }\n    console.warn('render:', { state, modifiedState, modificationTree })\n    // console.warn('do render');\n    this.rootElement.render(state, modifiedState, this.container, { node: undefined })\n    // console.warn('do check rebuild');\n    this.checkRebuildStateDependencies()\n    // console.warn('check complete');\n    this.renderCache = undefined\n    this.dirty = false\n  }\n\n  public destroy() {\n    this.rootElement.destroy()\n  }\n\n  private computeModifiedState(state: ViewState, modificationTree: ModificationTree): ViewState {\n    if (utils.isEmptyObject(modificationTree)) {\n      return state\n    }\n    const modifiedState: ViewState = {}\n    for (const key in modificationTree) {\n      if (utils.isEmptyObject(modificationTree[key])) {\n        modifiedState[key] = state[key]\n      } else {\n        modifiedState[key] = this.computeModifiedState(state[key] as ViewState, modificationTree[key])\n      }\n    }\n    return modifiedState\n  }\n\n  private checkRebuildStateDependencies() {\n    if (this.rootElement.checkStructChange()) {\n      // rebuild state dependencies when struct change\n      this.rootElement.rebuildStateDependencies()\n    }\n  }\n}\n\ninterface BaseView {\n  _propsType: {}\n}\n\nexport type VDomStruct =\n  [NodeType, string] |\n  [NodeType, string, AttrDict] |\n  [NodeType, string, NodeContent] |\n  [NodeType, string, AttrDict, NodeContent]\n\ntype NodeType = 'E' | 'D' | 'L'\n\ntype NodeContent = string | ContentStructList\ntype NonTagNodeContent = string | Array<string | ['D', string]>\n\nexport interface AttrDict {\n  [attr: string]: NonTagNodeContent\n}\n\nexport interface ContentStructList {\n  [index: number]: string | VDomStruct\n  length: number\n}\n\n// tag(t): 'tagName', {data}, [child]\n// dataPoint operators = \"., ?, &&, ||, 前置!, 后置!, () > < >= <= == | 管道参数传递\"\n// for list operators = \"[]\"\n\nexport class VNodeRegister {\n  public view: BaseView\n  public viewClassName: string\n  /** this api is provided by View */\n  public registerSubviewNode: (node: LNSubview) => { propsGetter: () => any, stateDependencies: string[] }\n  /** this api is provided by View */\n  public registerSlotNode: (node: LNSlot) => void\n  constructor(view: BaseView) {\n    this.view = view\n    this.viewClassName = `[${this.view.constructor.name}]`\n  }\n  public destory() {\n    delete this.view\n    delete this.registerSlotNode\n    delete this.registerSubviewNode\n  }\n}\n\ntype LogicalNodeParentType = 'common' | 'If' | 'View' | 'Plugin'\n\nclass VDomFactory {\n  /**\n   * NOTE: verifyMode controls whether renderables are constructed under verifyMode\n   * this will be true when doing v.ts file generating or html grammar check.\n   * when verifyMode is on,\n   * all vdom entity will try to create the whole set of their children struct for verify purpose\n   * this will only effect LNFor and LNIf node for now\n   */\n  public verifyMode = false\n  /**\n   * NOTE: idCounters controls entityId\n   * only used for verifyMode\n   * when parsing vdom struct,\n   * we will will give all vdom entity an unique id,\n   * to help referring them to the same entity that parsed from html file\n   * so their line & colum number can be shown when there's an verify eror\n   */\n  private idCounters: {\n    entityId: number;\n  } = { entityId: 0 }\n\n  private SUPPORTED_LOGICAL_TAGS = ['If', 'For', 'Slot', 'View', 'Else', 'Elif', 'Plugin']\n  private VALID_LOGICAL_CHILDREN_TAGS = {\n    common: ['If', 'For', 'Slot', 'View'],\n    If: ['If', 'For', 'Slot', 'View', 'Else', 'Elif'],\n    View: ['Plugin'],\n    Plugin: ['If', 'For', 'View']\n  }\n\n  public getIdCounters() {\n    const { entityId } = this.idCounters\n    return { entityId }\n  }\n\n  public createVDomRoot(struct: VDomStruct, register: VNodeRegister): VDomRoot {\n    // console.log(struct)\n    this.idCounters = {\n      entityId: 0,\n    }\n    const type = struct[0]\n    if (type !== 'E') {\n      this.idCounters.entityId++ // make elementId refers to correct element\n      throw new VEntityVerifyError('root node must be a tag node')\n    }\n    return new VDomRoot(vDomFactory.createVElement(struct, register))\n  }\n\n  public createVChildren(struct: string | VDomStruct, parentType: LogicalNodeParentType, register: VNodeRegister) {\n    if (parentType === 'View' && (typeof struct === 'string' || struct[0] !== 'L')) {\n      this.idCounters.entityId++\n      throw new VEntityVerifyError(`Invalid NodeType ${struct[0]}, only SlotPlugin can appear inside a View Node`)\n    }\n    if (typeof struct === 'string') {\n      this.idCounters.entityId++\n      return new VText(struct)\n    } else {\n      switch (struct[0]) {\n        case 'D':\n          this.idCounters.entityId++\n          return new VText(new DataPoint(struct[1]))\n        case 'E':\n          return vDomFactory.createVElement(struct, register)\n        case 'L':\n          return vDomFactory.createLogicalNode(struct, parentType, register)\n      }\n      throw new VEntityVerifyError(`Invalid NodeType ${struct[0]}`)\n    }\n  }\n\n  public createVListItem(childrenStruct: Array<string | VDomStruct>, register: VNodeRegister, indexKeyName?: string) {\n    this.idCounters.entityId++\n    return new VListItem(childrenStruct, register, indexKeyName)\n  }\n\n  public createVElement(struct: VDomStruct, register: VNodeRegister): VElement {\n    this.idCounters.entityId++\n    const { tagName, attrDict, children } = vDomFactory.normalizeStruct(struct)\n    return new VElement(tagName, attrDict, children, register)\n  }\n\n  private createLogicalNode(\n    struct: VDomStruct, parentType: LogicalNodeParentType, register: VNodeRegister\n  ): LogicalNode {\n    this.idCounters.entityId++\n    const validTags = this.VALID_LOGICAL_CHILDREN_TAGS[parentType]\n    const { tagName, attrDict, children } = vDomFactory.normalizeStruct(struct)\n    if (tagName === 'For' && utils.listContains(validTags, tagName)) {\n      return new LNFor(attrDict, children, register)\n    }\n    if (tagName === 'If' && utils.listContains(validTags, tagName)) {\n      return new LNIf(attrDict, children, register)\n    }\n    if (tagName === 'Else' && utils.listContains(validTags, tagName)) {\n      return new LNElse(attrDict, children)\n    }\n    if (tagName === 'Elif' && utils.listContains(validTags, tagName)) {\n      return new LNElif(attrDict, children)\n    }\n    if (tagName === 'View' && utils.listContains(validTags, tagName)) {\n      return new LNSubview(attrDict, children, register)\n    }\n    if (tagName === 'Slot' && utils.listContains(validTags, tagName)) {\n      return new LNSlot(attrDict, children, register)\n    }\n    if (tagName === 'Plugin' && utils.listContains(validTags, tagName)) {\n      return new LNSlotPlugin(attrDict, children, register)\n    }\n    if (utils.listContains(this.SUPPORTED_LOGICAL_TAGS, tagName)) {\n      throw new VEntityVerifyError(\n        `Unable to create LogicalNode: <${tagName}> can't be created as direct child of an Element`\n      )\n    } else {\n      throw new VEntityVerifyError(\n        `Unable to create LogicalNode: unknow tag name: ${tagName}`\n      )\n    }\n  }\n\n  private normalizeStruct(struct: VDomStruct): {\n    tagName: string,\n    attrDict: AttrDict,\n    children: ContentStructList\n  } {\n    const tagName = struct[1]\n    let attrDict: AttrDict = {}\n    let children: ContentStructList = []\n    if (struct.length === 4) {\n      attrDict = struct[2]\n      children = struct[3]\n    } else if (struct.length === 3) {\n      if (typeof struct[2] === 'string') {\n        children = [struct[2]] as ContentStructList\n      } else if (struct[2] instanceof Array) {\n        children = struct[2] as ContentStructList\n      } else {\n        attrDict = struct[2] as AttrDict\n      }\n    }\n    return { tagName, attrDict, children }\n  }\n}\n\nexport const vDomFactory = new VDomFactory()\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! *****************************************************************************\r\nCopyright (C) Microsoft. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\nvar Reflect;\r\n(function (Reflect) {\r\n    // Metadata Proposal\r\n    // https://rbuckton.github.io/reflect-metadata/\r\n    (function (factory) {\r\n        var root = typeof global === \"object\" ? global :\r\n            typeof self === \"object\" ? self :\r\n                typeof this === \"object\" ? this :\r\n                    Function(\"return this;\")();\r\n        var exporter = makeExporter(Reflect);\r\n        if (typeof root.Reflect === \"undefined\") {\r\n            root.Reflect = Reflect;\r\n        }\r\n        else {\r\n            exporter = makeExporter(root.Reflect, exporter);\r\n        }\r\n        factory(exporter);\r\n        function makeExporter(target, previous) {\r\n            return function (key, value) {\r\n                if (typeof target[key] !== \"function\") {\r\n                    Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\r\n                }\r\n                if (previous)\r\n                    previous(key, value);\r\n            };\r\n        }\r\n    })(function (exporter) {\r\n        var hasOwn = Object.prototype.hasOwnProperty;\r\n        // feature test for Symbol support\r\n        var supportsSymbol = typeof Symbol === \"function\";\r\n        var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\r\n        var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\r\n        var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\r\n        var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\r\n        var downLevel = !supportsCreate && !supportsProto;\r\n        var HashMap = {\r\n            // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\r\n            create: supportsCreate\r\n                ? function () { return MakeDictionary(Object.create(null)); }\r\n                : supportsProto\r\n                    ? function () { return MakeDictionary({ __proto__: null }); }\r\n                    : function () { return MakeDictionary({}); },\r\n            has: downLevel\r\n                ? function (map, key) { return hasOwn.call(map, key); }\r\n                : function (map, key) { return key in map; },\r\n            get: downLevel\r\n                ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\r\n                : function (map, key) { return map[key]; },\r\n        };\r\n        // Load global or shim versions of Map, Set, and WeakMap\r\n        var functionPrototype = Object.getPrototypeOf(Function);\r\n        var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\r\n        var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\r\n        var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\r\n        var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\r\n        // [[Metadata]] internal slot\r\n        // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\r\n        var Metadata = new _WeakMap();\r\n        /**\r\n         * Applies a set of decorators to a property of a target object.\r\n         * @param decorators An array of decorators.\r\n         * @param target The target object.\r\n         * @param propertyKey (Optional) The property key to decorate.\r\n         * @param attributes (Optional) The property descriptor for the target key.\r\n         * @remarks Decorators are applied in reverse order.\r\n         * @example\r\n         *\r\n         *     class Example {\r\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\r\n         *         // static staticProperty;\r\n         *         // property;\r\n         *\r\n         *         constructor(p) { }\r\n         *         static staticMethod(p) { }\r\n         *         method(p) { }\r\n         *     }\r\n         *\r\n         *     // constructor\r\n         *     Example = Reflect.decorate(decoratorsArray, Example);\r\n         *\r\n         *     // property (on constructor)\r\n         *     Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\r\n         *\r\n         *     // property (on prototype)\r\n         *     Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\r\n         *\r\n         *     // method (on constructor)\r\n         *     Object.defineProperty(Example, \"staticMethod\",\r\n         *         Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\r\n         *             Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\r\n         *\r\n         *     // method (on prototype)\r\n         *     Object.defineProperty(Example.prototype, \"method\",\r\n         *         Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\r\n         *             Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\r\n         *\r\n         */\r\n        function decorate(decorators, target, propertyKey, attributes) {\r\n            if (!IsUndefined(propertyKey)) {\r\n                if (!IsArray(decorators))\r\n                    throw new TypeError();\r\n                if (!IsObject(target))\r\n                    throw new TypeError();\r\n                if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\r\n                    throw new TypeError();\r\n                if (IsNull(attributes))\r\n                    attributes = undefined;\r\n                propertyKey = ToPropertyKey(propertyKey);\r\n                return DecorateProperty(decorators, target, propertyKey, attributes);\r\n            }\r\n            else {\r\n                if (!IsArray(decorators))\r\n                    throw new TypeError();\r\n                if (!IsConstructor(target))\r\n                    throw new TypeError();\r\n                return DecorateConstructor(decorators, target);\r\n            }\r\n        }\r\n        exporter(\"decorate\", decorate);\r\n        // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\r\n        // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\r\n        /**\r\n         * A default metadata decorator factory that can be used on a class, class member, or parameter.\r\n         * @param metadataKey The key for the metadata entry.\r\n         * @param metadataValue The value for the metadata entry.\r\n         * @returns A decorator function.\r\n         * @remarks\r\n         * If `metadataKey` is already defined for the target and target key, the\r\n         * metadataValue for that key will be overwritten.\r\n         * @example\r\n         *\r\n         *     // constructor\r\n         *     @Reflect.metadata(key, value)\r\n         *     class Example {\r\n         *     }\r\n         *\r\n         *     // property (on constructor, TypeScript only)\r\n         *     class Example {\r\n         *         @Reflect.metadata(key, value)\r\n         *         static staticProperty;\r\n         *     }\r\n         *\r\n         *     // property (on prototype, TypeScript only)\r\n         *     class Example {\r\n         *         @Reflect.metadata(key, value)\r\n         *         property;\r\n         *     }\r\n         *\r\n         *     // method (on constructor)\r\n         *     class Example {\r\n         *         @Reflect.metadata(key, value)\r\n         *         static staticMethod() { }\r\n         *     }\r\n         *\r\n         *     // method (on prototype)\r\n         *     class Example {\r\n         *         @Reflect.metadata(key, value)\r\n         *         method() { }\r\n         *     }\r\n         *\r\n         */\r\n        function metadata(metadataKey, metadataValue) {\r\n            function decorator(target, propertyKey) {\r\n                if (!IsObject(target))\r\n                    throw new TypeError();\r\n                if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\r\n                    throw new TypeError();\r\n                OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\r\n            }\r\n            return decorator;\r\n        }\r\n        exporter(\"metadata\", metadata);\r\n        /**\r\n         * Define a unique metadata entry on the target.\r\n         * @param metadataKey A key used to store and retrieve metadata.\r\n         * @param metadataValue A value that contains attached metadata.\r\n         * @param target The target object on which to define metadata.\r\n         * @param propertyKey (Optional) The property key for the target.\r\n         * @example\r\n         *\r\n         *     class Example {\r\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\r\n         *         // static staticProperty;\r\n         *         // property;\r\n         *\r\n         *         constructor(p) { }\r\n         *         static staticMethod(p) { }\r\n         *         method(p) { }\r\n         *     }\r\n         *\r\n         *     // constructor\r\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example);\r\n         *\r\n         *     // property (on constructor)\r\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\r\n         *\r\n         *     // property (on prototype)\r\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\r\n         *\r\n         *     // method (on constructor)\r\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\r\n         *\r\n         *     // method (on prototype)\r\n         *     Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\r\n         *\r\n         *     // decorator factory as metadata-producing annotation.\r\n         *     function MyAnnotation(options): Decorator {\r\n         *         return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\r\n         *     }\r\n         *\r\n         */\r\n        function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\r\n            if (!IsObject(target))\r\n                throw new TypeError();\r\n            if (!IsUndefined(propertyKey))\r\n                propertyKey = ToPropertyKey(propertyKey);\r\n            return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\r\n        }\r\n        exporter(\"defineMetadata\", defineMetadata);\r\n        /**\r\n         * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\r\n         * @param metadataKey A key used to store and retrieve metadata.\r\n         * @param target The target object on which the metadata is defined.\r\n         * @param propertyKey (Optional) The property key for the target.\r\n         * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\r\n         * @example\r\n         *\r\n         *     class Example {\r\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\r\n         *         // static staticProperty;\r\n         *         // property;\r\n         *\r\n         *         constructor(p) { }\r\n         *         static staticMethod(p) { }\r\n         *         method(p) { }\r\n         *     }\r\n         *\r\n         *     // constructor\r\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example);\r\n         *\r\n         *     // property (on constructor)\r\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n         *\r\n         *     // property (on prototype)\r\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n         *\r\n         *     // method (on constructor)\r\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n         *\r\n         *     // method (on prototype)\r\n         *     result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n         *\r\n         */\r\n        function hasMetadata(metadataKey, target, propertyKey) {\r\n            if (!IsObject(target))\r\n                throw new TypeError();\r\n            if (!IsUndefined(propertyKey))\r\n                propertyKey = ToPropertyKey(propertyKey);\r\n            return OrdinaryHasMetadata(metadataKey, target, propertyKey);\r\n        }\r\n        exporter(\"hasMetadata\", hasMetadata);\r\n        /**\r\n         * Gets a value indicating whether the target object has the provided metadata key defined.\r\n         * @param metadataKey A key used to store and retrieve metadata.\r\n         * @param target The target object on which the metadata is defined.\r\n         * @param propertyKey (Optional) The property key for the target.\r\n         * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\r\n         * @example\r\n         *\r\n         *     class Example {\r\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\r\n         *         // static staticProperty;\r\n         *         // property;\r\n         *\r\n         *         constructor(p) { }\r\n         *         static staticMethod(p) { }\r\n         *         method(p) { }\r\n         *     }\r\n         *\r\n         *     // constructor\r\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\r\n         *\r\n         *     // property (on constructor)\r\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n         *\r\n         *     // property (on prototype)\r\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n         *\r\n         *     // method (on constructor)\r\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n         *\r\n         *     // method (on prototype)\r\n         *     result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n         *\r\n         */\r\n        function hasOwnMetadata(metadataKey, target, propertyKey) {\r\n            if (!IsObject(target))\r\n                throw new TypeError();\r\n            if (!IsUndefined(propertyKey))\r\n                propertyKey = ToPropertyKey(propertyKey);\r\n            return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\r\n        }\r\n        exporter(\"hasOwnMetadata\", hasOwnMetadata);\r\n        /**\r\n         * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\r\n         * @param metadataKey A key used to store and retrieve metadata.\r\n         * @param target The target object on which the metadata is defined.\r\n         * @param propertyKey (Optional) The property key for the target.\r\n         * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\r\n         * @example\r\n         *\r\n         *     class Example {\r\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\r\n         *         // static staticProperty;\r\n         *         // property;\r\n         *\r\n         *         constructor(p) { }\r\n         *         static staticMethod(p) { }\r\n         *         method(p) { }\r\n         *     }\r\n         *\r\n         *     // constructor\r\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example);\r\n         *\r\n         *     // property (on constructor)\r\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n         *\r\n         *     // property (on prototype)\r\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n         *\r\n         *     // method (on constructor)\r\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n         *\r\n         *     // method (on prototype)\r\n         *     result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n         *\r\n         */\r\n        function getMetadata(metadataKey, target, propertyKey) {\r\n            if (!IsObject(target))\r\n                throw new TypeError();\r\n            if (!IsUndefined(propertyKey))\r\n                propertyKey = ToPropertyKey(propertyKey);\r\n            return OrdinaryGetMetadata(metadataKey, target, propertyKey);\r\n        }\r\n        exporter(\"getMetadata\", getMetadata);\r\n        /**\r\n         * Gets the metadata value for the provided metadata key on the target object.\r\n         * @param metadataKey A key used to store and retrieve metadata.\r\n         * @param target The target object on which the metadata is defined.\r\n         * @param propertyKey (Optional) The property key for the target.\r\n         * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\r\n         * @example\r\n         *\r\n         *     class Example {\r\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\r\n         *         // static staticProperty;\r\n         *         // property;\r\n         *\r\n         *         constructor(p) { }\r\n         *         static staticMethod(p) { }\r\n         *         method(p) { }\r\n         *     }\r\n         *\r\n         *     // constructor\r\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\r\n         *\r\n         *     // property (on constructor)\r\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n         *\r\n         *     // property (on prototype)\r\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n         *\r\n         *     // method (on constructor)\r\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n         *\r\n         *     // method (on prototype)\r\n         *     result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n         *\r\n         */\r\n        function getOwnMetadata(metadataKey, target, propertyKey) {\r\n            if (!IsObject(target))\r\n                throw new TypeError();\r\n            if (!IsUndefined(propertyKey))\r\n                propertyKey = ToPropertyKey(propertyKey);\r\n            return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\r\n        }\r\n        exporter(\"getOwnMetadata\", getOwnMetadata);\r\n        /**\r\n         * Gets the metadata keys defined on the target object or its prototype chain.\r\n         * @param target The target object on which the metadata is defined.\r\n         * @param propertyKey (Optional) The property key for the target.\r\n         * @returns An array of unique metadata keys.\r\n         * @example\r\n         *\r\n         *     class Example {\r\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\r\n         *         // static staticProperty;\r\n         *         // property;\r\n         *\r\n         *         constructor(p) { }\r\n         *         static staticMethod(p) { }\r\n         *         method(p) { }\r\n         *     }\r\n         *\r\n         *     // constructor\r\n         *     result = Reflect.getMetadataKeys(Example);\r\n         *\r\n         *     // property (on constructor)\r\n         *     result = Reflect.getMetadataKeys(Example, \"staticProperty\");\r\n         *\r\n         *     // property (on prototype)\r\n         *     result = Reflect.getMetadataKeys(Example.prototype, \"property\");\r\n         *\r\n         *     // method (on constructor)\r\n         *     result = Reflect.getMetadataKeys(Example, \"staticMethod\");\r\n         *\r\n         *     // method (on prototype)\r\n         *     result = Reflect.getMetadataKeys(Example.prototype, \"method\");\r\n         *\r\n         */\r\n        function getMetadataKeys(target, propertyKey) {\r\n            if (!IsObject(target))\r\n                throw new TypeError();\r\n            if (!IsUndefined(propertyKey))\r\n                propertyKey = ToPropertyKey(propertyKey);\r\n            return OrdinaryMetadataKeys(target, propertyKey);\r\n        }\r\n        exporter(\"getMetadataKeys\", getMetadataKeys);\r\n        /**\r\n         * Gets the unique metadata keys defined on the target object.\r\n         * @param target The target object on which the metadata is defined.\r\n         * @param propertyKey (Optional) The property key for the target.\r\n         * @returns An array of unique metadata keys.\r\n         * @example\r\n         *\r\n         *     class Example {\r\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\r\n         *         // static staticProperty;\r\n         *         // property;\r\n         *\r\n         *         constructor(p) { }\r\n         *         static staticMethod(p) { }\r\n         *         method(p) { }\r\n         *     }\r\n         *\r\n         *     // constructor\r\n         *     result = Reflect.getOwnMetadataKeys(Example);\r\n         *\r\n         *     // property (on constructor)\r\n         *     result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\r\n         *\r\n         *     // property (on prototype)\r\n         *     result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\r\n         *\r\n         *     // method (on constructor)\r\n         *     result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\r\n         *\r\n         *     // method (on prototype)\r\n         *     result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\r\n         *\r\n         */\r\n        function getOwnMetadataKeys(target, propertyKey) {\r\n            if (!IsObject(target))\r\n                throw new TypeError();\r\n            if (!IsUndefined(propertyKey))\r\n                propertyKey = ToPropertyKey(propertyKey);\r\n            return OrdinaryOwnMetadataKeys(target, propertyKey);\r\n        }\r\n        exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\r\n        /**\r\n         * Deletes the metadata entry from the target object with the provided key.\r\n         * @param metadataKey A key used to store and retrieve metadata.\r\n         * @param target The target object on which the metadata is defined.\r\n         * @param propertyKey (Optional) The property key for the target.\r\n         * @returns `true` if the metadata entry was found and deleted; otherwise, false.\r\n         * @example\r\n         *\r\n         *     class Example {\r\n         *         // property declarations are not part of ES6, though they are valid in TypeScript:\r\n         *         // static staticProperty;\r\n         *         // property;\r\n         *\r\n         *         constructor(p) { }\r\n         *         static staticMethod(p) { }\r\n         *         method(p) { }\r\n         *     }\r\n         *\r\n         *     // constructor\r\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example);\r\n         *\r\n         *     // property (on constructor)\r\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\r\n         *\r\n         *     // property (on prototype)\r\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\r\n         *\r\n         *     // method (on constructor)\r\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\r\n         *\r\n         *     // method (on prototype)\r\n         *     result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\r\n         *\r\n         */\r\n        function deleteMetadata(metadataKey, target, propertyKey) {\r\n            if (!IsObject(target))\r\n                throw new TypeError();\r\n            if (!IsUndefined(propertyKey))\r\n                propertyKey = ToPropertyKey(propertyKey);\r\n            var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\r\n            if (IsUndefined(metadataMap))\r\n                return false;\r\n            if (!metadataMap.delete(metadataKey))\r\n                return false;\r\n            if (metadataMap.size > 0)\r\n                return true;\r\n            var targetMetadata = Metadata.get(target);\r\n            targetMetadata.delete(propertyKey);\r\n            if (targetMetadata.size > 0)\r\n                return true;\r\n            Metadata.delete(target);\r\n            return true;\r\n        }\r\n        exporter(\"deleteMetadata\", deleteMetadata);\r\n        function DecorateConstructor(decorators, target) {\r\n            for (var i = decorators.length - 1; i >= 0; --i) {\r\n                var decorator = decorators[i];\r\n                var decorated = decorator(target);\r\n                if (!IsUndefined(decorated) && !IsNull(decorated)) {\r\n                    if (!IsConstructor(decorated))\r\n                        throw new TypeError();\r\n                    target = decorated;\r\n                }\r\n            }\r\n            return target;\r\n        }\r\n        function DecorateProperty(decorators, target, propertyKey, descriptor) {\r\n            for (var i = decorators.length - 1; i >= 0; --i) {\r\n                var decorator = decorators[i];\r\n                var decorated = decorator(target, propertyKey, descriptor);\r\n                if (!IsUndefined(decorated) && !IsNull(decorated)) {\r\n                    if (!IsObject(decorated))\r\n                        throw new TypeError();\r\n                    descriptor = decorated;\r\n                }\r\n            }\r\n            return descriptor;\r\n        }\r\n        function GetOrCreateMetadataMap(O, P, Create) {\r\n            var targetMetadata = Metadata.get(O);\r\n            if (IsUndefined(targetMetadata)) {\r\n                if (!Create)\r\n                    return undefined;\r\n                targetMetadata = new _Map();\r\n                Metadata.set(O, targetMetadata);\r\n            }\r\n            var metadataMap = targetMetadata.get(P);\r\n            if (IsUndefined(metadataMap)) {\r\n                if (!Create)\r\n                    return undefined;\r\n                metadataMap = new _Map();\r\n                targetMetadata.set(P, metadataMap);\r\n            }\r\n            return metadataMap;\r\n        }\r\n        // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\r\n        // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\r\n        function OrdinaryHasMetadata(MetadataKey, O, P) {\r\n            var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\r\n            if (hasOwn)\r\n                return true;\r\n            var parent = OrdinaryGetPrototypeOf(O);\r\n            if (!IsNull(parent))\r\n                return OrdinaryHasMetadata(MetadataKey, parent, P);\r\n            return false;\r\n        }\r\n        // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\r\n        // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\r\n        function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\r\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\r\n            if (IsUndefined(metadataMap))\r\n                return false;\r\n            return ToBoolean(metadataMap.has(MetadataKey));\r\n        }\r\n        // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\r\n        // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\r\n        function OrdinaryGetMetadata(MetadataKey, O, P) {\r\n            var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\r\n            if (hasOwn)\r\n                return OrdinaryGetOwnMetadata(MetadataKey, O, P);\r\n            var parent = OrdinaryGetPrototypeOf(O);\r\n            if (!IsNull(parent))\r\n                return OrdinaryGetMetadata(MetadataKey, parent, P);\r\n            return undefined;\r\n        }\r\n        // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\r\n        // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\r\n        function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\r\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\r\n            if (IsUndefined(metadataMap))\r\n                return undefined;\r\n            return metadataMap.get(MetadataKey);\r\n        }\r\n        // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\r\n        // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\r\n        function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\r\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\r\n            metadataMap.set(MetadataKey, MetadataValue);\r\n        }\r\n        // 3.1.6.1 OrdinaryMetadataKeys(O, P)\r\n        // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\r\n        function OrdinaryMetadataKeys(O, P) {\r\n            var ownKeys = OrdinaryOwnMetadataKeys(O, P);\r\n            var parent = OrdinaryGetPrototypeOf(O);\r\n            if (parent === null)\r\n                return ownKeys;\r\n            var parentKeys = OrdinaryMetadataKeys(parent, P);\r\n            if (parentKeys.length <= 0)\r\n                return ownKeys;\r\n            if (ownKeys.length <= 0)\r\n                return parentKeys;\r\n            var set = new _Set();\r\n            var keys = [];\r\n            for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\r\n                var key = ownKeys_1[_i];\r\n                var hasKey = set.has(key);\r\n                if (!hasKey) {\r\n                    set.add(key);\r\n                    keys.push(key);\r\n                }\r\n            }\r\n            for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\r\n                var key = parentKeys_1[_a];\r\n                var hasKey = set.has(key);\r\n                if (!hasKey) {\r\n                    set.add(key);\r\n                    keys.push(key);\r\n                }\r\n            }\r\n            return keys;\r\n        }\r\n        // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\r\n        // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\r\n        function OrdinaryOwnMetadataKeys(O, P) {\r\n            var keys = [];\r\n            var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\r\n            if (IsUndefined(metadataMap))\r\n                return keys;\r\n            var keysObj = metadataMap.keys();\r\n            var iterator = GetIterator(keysObj);\r\n            var k = 0;\r\n            while (true) {\r\n                var next = IteratorStep(iterator);\r\n                if (!next) {\r\n                    keys.length = k;\r\n                    return keys;\r\n                }\r\n                var nextValue = IteratorValue(next);\r\n                try {\r\n                    keys[k] = nextValue;\r\n                }\r\n                catch (e) {\r\n                    try {\r\n                        IteratorClose(iterator);\r\n                    }\r\n                    finally {\r\n                        throw e;\r\n                    }\r\n                }\r\n                k++;\r\n            }\r\n        }\r\n        // 6 ECMAScript Data Typ0es and Values\r\n        // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\r\n        function Type(x) {\r\n            if (x === null)\r\n                return 1 /* Null */;\r\n            switch (typeof x) {\r\n                case \"undefined\": return 0 /* Undefined */;\r\n                case \"boolean\": return 2 /* Boolean */;\r\n                case \"string\": return 3 /* String */;\r\n                case \"symbol\": return 4 /* Symbol */;\r\n                case \"number\": return 5 /* Number */;\r\n                case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\r\n                default: return 6 /* Object */;\r\n            }\r\n        }\r\n        // 6.1.1 The Undefined Type\r\n        // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\r\n        function IsUndefined(x) {\r\n            return x === undefined;\r\n        }\r\n        // 6.1.2 The Null Type\r\n        // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\r\n        function IsNull(x) {\r\n            return x === null;\r\n        }\r\n        // 6.1.5 The Symbol Type\r\n        // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\r\n        function IsSymbol(x) {\r\n            return typeof x === \"symbol\";\r\n        }\r\n        // 6.1.7 The Object Type\r\n        // https://tc39.github.io/ecma262/#sec-object-type\r\n        function IsObject(x) {\r\n            return typeof x === \"object\" ? x !== null : typeof x === \"function\";\r\n        }\r\n        // 7.1 Type Conversion\r\n        // https://tc39.github.io/ecma262/#sec-type-conversion\r\n        // 7.1.1 ToPrimitive(input [, PreferredType])\r\n        // https://tc39.github.io/ecma262/#sec-toprimitive\r\n        function ToPrimitive(input, PreferredType) {\r\n            switch (Type(input)) {\r\n                case 0 /* Undefined */: return input;\r\n                case 1 /* Null */: return input;\r\n                case 2 /* Boolean */: return input;\r\n                case 3 /* String */: return input;\r\n                case 4 /* Symbol */: return input;\r\n                case 5 /* Number */: return input;\r\n            }\r\n            var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\r\n            var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\r\n            if (exoticToPrim !== undefined) {\r\n                var result = exoticToPrim.call(input, hint);\r\n                if (IsObject(result))\r\n                    throw new TypeError();\r\n                return result;\r\n            }\r\n            return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\r\n        }\r\n        // 7.1.1.1 OrdinaryToPrimitive(O, hint)\r\n        // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\r\n        function OrdinaryToPrimitive(O, hint) {\r\n            if (hint === \"string\") {\r\n                var toString_1 = O.toString;\r\n                if (IsCallable(toString_1)) {\r\n                    var result = toString_1.call(O);\r\n                    if (!IsObject(result))\r\n                        return result;\r\n                }\r\n                var valueOf = O.valueOf;\r\n                if (IsCallable(valueOf)) {\r\n                    var result = valueOf.call(O);\r\n                    if (!IsObject(result))\r\n                        return result;\r\n                }\r\n            }\r\n            else {\r\n                var valueOf = O.valueOf;\r\n                if (IsCallable(valueOf)) {\r\n                    var result = valueOf.call(O);\r\n                    if (!IsObject(result))\r\n                        return result;\r\n                }\r\n                var toString_2 = O.toString;\r\n                if (IsCallable(toString_2)) {\r\n                    var result = toString_2.call(O);\r\n                    if (!IsObject(result))\r\n                        return result;\r\n                }\r\n            }\r\n            throw new TypeError();\r\n        }\r\n        // 7.1.2 ToBoolean(argument)\r\n        // https://tc39.github.io/ecma262/2016/#sec-toboolean\r\n        function ToBoolean(argument) {\r\n            return !!argument;\r\n        }\r\n        // 7.1.12 ToString(argument)\r\n        // https://tc39.github.io/ecma262/#sec-tostring\r\n        function ToString(argument) {\r\n            return \"\" + argument;\r\n        }\r\n        // 7.1.14 ToPropertyKey(argument)\r\n        // https://tc39.github.io/ecma262/#sec-topropertykey\r\n        function ToPropertyKey(argument) {\r\n            var key = ToPrimitive(argument, 3 /* String */);\r\n            if (IsSymbol(key))\r\n                return key;\r\n            return ToString(key);\r\n        }\r\n        // 7.2 Testing and Comparison Operations\r\n        // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\r\n        // 7.2.2 IsArray(argument)\r\n        // https://tc39.github.io/ecma262/#sec-isarray\r\n        function IsArray(argument) {\r\n            return Array.isArray\r\n                ? Array.isArray(argument)\r\n                : argument instanceof Object\r\n                    ? argument instanceof Array\r\n                    : Object.prototype.toString.call(argument) === \"[object Array]\";\r\n        }\r\n        // 7.2.3 IsCallable(argument)\r\n        // https://tc39.github.io/ecma262/#sec-iscallable\r\n        function IsCallable(argument) {\r\n            // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\r\n            return typeof argument === \"function\";\r\n        }\r\n        // 7.2.4 IsConstructor(argument)\r\n        // https://tc39.github.io/ecma262/#sec-isconstructor\r\n        function IsConstructor(argument) {\r\n            // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\r\n            return typeof argument === \"function\";\r\n        }\r\n        // 7.2.7 IsPropertyKey(argument)\r\n        // https://tc39.github.io/ecma262/#sec-ispropertykey\r\n        function IsPropertyKey(argument) {\r\n            switch (Type(argument)) {\r\n                case 3 /* String */: return true;\r\n                case 4 /* Symbol */: return true;\r\n                default: return false;\r\n            }\r\n        }\r\n        // 7.3 Operations on Objects\r\n        // https://tc39.github.io/ecma262/#sec-operations-on-objects\r\n        // 7.3.9 GetMethod(V, P)\r\n        // https://tc39.github.io/ecma262/#sec-getmethod\r\n        function GetMethod(V, P) {\r\n            var func = V[P];\r\n            if (func === undefined || func === null)\r\n                return undefined;\r\n            if (!IsCallable(func))\r\n                throw new TypeError();\r\n            return func;\r\n        }\r\n        // 7.4 Operations on Iterator Objects\r\n        // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\r\n        function GetIterator(obj) {\r\n            var method = GetMethod(obj, iteratorSymbol);\r\n            if (!IsCallable(method))\r\n                throw new TypeError(); // from Call\r\n            var iterator = method.call(obj);\r\n            if (!IsObject(iterator))\r\n                throw new TypeError();\r\n            return iterator;\r\n        }\r\n        // 7.4.4 IteratorValue(iterResult)\r\n        // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\r\n        function IteratorValue(iterResult) {\r\n            return iterResult.value;\r\n        }\r\n        // 7.4.5 IteratorStep(iterator)\r\n        // https://tc39.github.io/ecma262/#sec-iteratorstep\r\n        function IteratorStep(iterator) {\r\n            var result = iterator.next();\r\n            return result.done ? false : result;\r\n        }\r\n        // 7.4.6 IteratorClose(iterator, completion)\r\n        // https://tc39.github.io/ecma262/#sec-iteratorclose\r\n        function IteratorClose(iterator) {\r\n            var f = iterator[\"return\"];\r\n            if (f)\r\n                f.call(iterator);\r\n        }\r\n        // 9.1 Ordinary Object Internal Methods and Internal Slots\r\n        // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\r\n        // 9.1.1.1 OrdinaryGetPrototypeOf(O)\r\n        // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\r\n        function OrdinaryGetPrototypeOf(O) {\r\n            var proto = Object.getPrototypeOf(O);\r\n            if (typeof O !== \"function\" || O === functionPrototype)\r\n                return proto;\r\n            // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\r\n            // Try to determine the superclass constructor. Compatible implementations\r\n            // must either set __proto__ on a subclass constructor to the superclass constructor,\r\n            // or ensure each class has a valid `constructor` property on its prototype that\r\n            // points back to the constructor.\r\n            // If this is not the same as Function.[[Prototype]], then this is definately inherited.\r\n            // This is the case when in ES6 or when using __proto__ in a compatible browser.\r\n            if (proto !== functionPrototype)\r\n                return proto;\r\n            // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\r\n            var prototype = O.prototype;\r\n            var prototypeProto = prototype && Object.getPrototypeOf(prototype);\r\n            if (prototypeProto == null || prototypeProto === Object.prototype)\r\n                return proto;\r\n            // If the constructor was not a function, then we cannot determine the heritage.\r\n            var constructor = prototypeProto.constructor;\r\n            if (typeof constructor !== \"function\")\r\n                return proto;\r\n            // If we have some kind of self-reference, then we cannot determine the heritage.\r\n            if (constructor === O)\r\n                return proto;\r\n            // we have a pretty good guess at the heritage.\r\n            return constructor;\r\n        }\r\n        // naive Map shim\r\n        function CreateMapPolyfill() {\r\n            var cacheSentinel = {};\r\n            var arraySentinel = [];\r\n            var MapIterator = (function () {\r\n                function MapIterator(keys, values, selector) {\r\n                    this._index = 0;\r\n                    this._keys = keys;\r\n                    this._values = values;\r\n                    this._selector = selector;\r\n                }\r\n                MapIterator.prototype[\"@@iterator\"] = function () { return this; };\r\n                MapIterator.prototype[iteratorSymbol] = function () { return this; };\r\n                MapIterator.prototype.next = function () {\r\n                    var index = this._index;\r\n                    if (index >= 0 && index < this._keys.length) {\r\n                        var result = this._selector(this._keys[index], this._values[index]);\r\n                        if (index + 1 >= this._keys.length) {\r\n                            this._index = -1;\r\n                            this._keys = arraySentinel;\r\n                            this._values = arraySentinel;\r\n                        }\r\n                        else {\r\n                            this._index++;\r\n                        }\r\n                        return { value: result, done: false };\r\n                    }\r\n                    return { value: undefined, done: true };\r\n                };\r\n                MapIterator.prototype.throw = function (error) {\r\n                    if (this._index >= 0) {\r\n                        this._index = -1;\r\n                        this._keys = arraySentinel;\r\n                        this._values = arraySentinel;\r\n                    }\r\n                    throw error;\r\n                };\r\n                MapIterator.prototype.return = function (value) {\r\n                    if (this._index >= 0) {\r\n                        this._index = -1;\r\n                        this._keys = arraySentinel;\r\n                        this._values = arraySentinel;\r\n                    }\r\n                    return { value: value, done: true };\r\n                };\r\n                return MapIterator;\r\n            }());\r\n            return (function () {\r\n                function Map() {\r\n                    this._keys = [];\r\n                    this._values = [];\r\n                    this._cacheKey = cacheSentinel;\r\n                    this._cacheIndex = -2;\r\n                }\r\n                Object.defineProperty(Map.prototype, \"size\", {\r\n                    get: function () { return this._keys.length; },\r\n                    enumerable: true,\r\n                    configurable: true\r\n                });\r\n                Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\r\n                Map.prototype.get = function (key) {\r\n                    var index = this._find(key, /*insert*/ false);\r\n                    return index >= 0 ? this._values[index] : undefined;\r\n                };\r\n                Map.prototype.set = function (key, value) {\r\n                    var index = this._find(key, /*insert*/ true);\r\n                    this._values[index] = value;\r\n                    return this;\r\n                };\r\n                Map.prototype.delete = function (key) {\r\n                    var index = this._find(key, /*insert*/ false);\r\n                    if (index >= 0) {\r\n                        var size = this._keys.length;\r\n                        for (var i = index + 1; i < size; i++) {\r\n                            this._keys[i - 1] = this._keys[i];\r\n                            this._values[i - 1] = this._values[i];\r\n                        }\r\n                        this._keys.length--;\r\n                        this._values.length--;\r\n                        if (key === this._cacheKey) {\r\n                            this._cacheKey = cacheSentinel;\r\n                            this._cacheIndex = -2;\r\n                        }\r\n                        return true;\r\n                    }\r\n                    return false;\r\n                };\r\n                Map.prototype.clear = function () {\r\n                    this._keys.length = 0;\r\n                    this._values.length = 0;\r\n                    this._cacheKey = cacheSentinel;\r\n                    this._cacheIndex = -2;\r\n                };\r\n                Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\r\n                Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\r\n                Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\r\n                Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\r\n                Map.prototype[iteratorSymbol] = function () { return this.entries(); };\r\n                Map.prototype._find = function (key, insert) {\r\n                    if (this._cacheKey !== key) {\r\n                        this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\r\n                    }\r\n                    if (this._cacheIndex < 0 && insert) {\r\n                        this._cacheIndex = this._keys.length;\r\n                        this._keys.push(key);\r\n                        this._values.push(undefined);\r\n                    }\r\n                    return this._cacheIndex;\r\n                };\r\n                return Map;\r\n            }());\r\n            function getKey(key, _) {\r\n                return key;\r\n            }\r\n            function getValue(_, value) {\r\n                return value;\r\n            }\r\n            function getEntry(key, value) {\r\n                return [key, value];\r\n            }\r\n        }\r\n        // naive Set shim\r\n        function CreateSetPolyfill() {\r\n            return (function () {\r\n                function Set() {\r\n                    this._map = new _Map();\r\n                }\r\n                Object.defineProperty(Set.prototype, \"size\", {\r\n                    get: function () { return this._map.size; },\r\n                    enumerable: true,\r\n                    configurable: true\r\n                });\r\n                Set.prototype.has = function (value) { return this._map.has(value); };\r\n                Set.prototype.add = function (value) { return this._map.set(value, value), this; };\r\n                Set.prototype.delete = function (value) { return this._map.delete(value); };\r\n                Set.prototype.clear = function () { this._map.clear(); };\r\n                Set.prototype.keys = function () { return this._map.keys(); };\r\n                Set.prototype.values = function () { return this._map.values(); };\r\n                Set.prototype.entries = function () { return this._map.entries(); };\r\n                Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\r\n                Set.prototype[iteratorSymbol] = function () { return this.keys(); };\r\n                return Set;\r\n            }());\r\n        }\r\n        // naive WeakMap shim\r\n        function CreateWeakMapPolyfill() {\r\n            var UUID_SIZE = 16;\r\n            var keys = HashMap.create();\r\n            var rootKey = CreateUniqueKey();\r\n            return (function () {\r\n                function WeakMap() {\r\n                    this._key = CreateUniqueKey();\r\n                }\r\n                WeakMap.prototype.has = function (target) {\r\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ false);\r\n                    return table !== undefined ? HashMap.has(table, this._key) : false;\r\n                };\r\n                WeakMap.prototype.get = function (target) {\r\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ false);\r\n                    return table !== undefined ? HashMap.get(table, this._key) : undefined;\r\n                };\r\n                WeakMap.prototype.set = function (target, value) {\r\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ true);\r\n                    table[this._key] = value;\r\n                    return this;\r\n                };\r\n                WeakMap.prototype.delete = function (target) {\r\n                    var table = GetOrCreateWeakMapTable(target, /*create*/ false);\r\n                    return table !== undefined ? delete table[this._key] : false;\r\n                };\r\n                WeakMap.prototype.clear = function () {\r\n                    // NOTE: not a real clear, just makes the previous data unreachable\r\n                    this._key = CreateUniqueKey();\r\n                };\r\n                return WeakMap;\r\n            }());\r\n            function CreateUniqueKey() {\r\n                var key;\r\n                do\r\n                    key = \"@@WeakMap@@\" + CreateUUID();\r\n                while (HashMap.has(keys, key));\r\n                keys[key] = true;\r\n                return key;\r\n            }\r\n            function GetOrCreateWeakMapTable(target, create) {\r\n                if (!hasOwn.call(target, rootKey)) {\r\n                    if (!create)\r\n                        return undefined;\r\n                    Object.defineProperty(target, rootKey, { value: HashMap.create() });\r\n                }\r\n                return target[rootKey];\r\n            }\r\n            function FillRandomBytes(buffer, size) {\r\n                for (var i = 0; i < size; ++i)\r\n                    buffer[i] = Math.random() * 0xff | 0;\r\n                return buffer;\r\n            }\r\n            function GenRandomBytes(size) {\r\n                if (typeof Uint8Array === \"function\") {\r\n                    if (typeof crypto !== \"undefined\")\r\n                        return crypto.getRandomValues(new Uint8Array(size));\r\n                    if (typeof msCrypto !== \"undefined\")\r\n                        return msCrypto.getRandomValues(new Uint8Array(size));\r\n                    return FillRandomBytes(new Uint8Array(size), size);\r\n                }\r\n                return FillRandomBytes(new Array(size), size);\r\n            }\r\n            function CreateUUID() {\r\n                var data = GenRandomBytes(UUID_SIZE);\r\n                // mark as random - RFC 4122 § 4.4\r\n                data[6] = data[6] & 0x4f | 0x40;\r\n                data[8] = data[8] & 0xbf | 0x80;\r\n                var result = \"\";\r\n                for (var offset = 0; offset < UUID_SIZE; ++offset) {\r\n                    var byte = data[offset];\r\n                    if (offset === 4 || offset === 6 || offset === 8)\r\n                        result += \"-\";\r\n                    if (byte < 16)\r\n                        result += \"0\";\r\n                    result += byte.toString(16).toLowerCase();\r\n                }\r\n                return result;\r\n            }\r\n        }\r\n        // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\r\n        function MakeDictionary(obj) {\r\n            obj.__ = undefined;\r\n            delete obj.__;\r\n            return obj;\r\n        }\r\n    });\r\n})(Reflect || (Reflect = {}));\r\n//# sourceMappingURL=Reflect.js.map","import 'reflect-metadata'\nimport { Constructor, ModificationTree, NonFuncPropNames, Optional, RSDObject } from './types'\nimport { RenderableStateDescriber } from './types'\nimport { utils } from './utils'\nimport { LNSlot } from './vdom/logicalNode/LNSlot'\nimport { LNSlotPlugin } from './vdom/logicalNode/LNSlotPlugin'\nimport { LNSubview } from './vdom/logicalNode/LNSubview'\nimport { PrevSibling, vDomFactory, VDomRoot, VDomStruct, VNodeRegister } from './vdom/vdom'\nimport { vdomUtils } from './vdom/vdomUtils'\nimport { ViewModel } from './viewModel/ViewModel'\n\ntype StateNames<V> = Exclude<NonFuncPropNames<V>, 'refs' | '_propsType' | '_events' | '_contents' | '_subviewMap'>\ntype States<V> = Pick<V, StateNames<V>>\n\nexport type VEventData<\n  V extends View<any>,\n  N extends keyof V['_subviewMap'],\n  E extends keyof EV,\n  EV = InstanceType<V['_subviewMap'][N]>['_events'],\n  F = EV[E]>\n  = F extends (data: infer A) => void ? A : void\n\nexport type VSubviewType<V extends View<any>, P> = Constructor<V & { _propsType: P }>\n\nconst M_SUBVIEW_PROPS = Symbol('custom:SubviewProps')\nconst M_STATES = Symbol('custom:ViewStates')\n\ninterface ViewStateMeta {\n  className: string\n  describerMerged: boolean\n  renderableStateDescriber: RSDObject\n  computedStates: {\n    [stateName: string]: {\n      getter: () => any;\n      firstLevelDependencies: { [field: string]: true };\n    }\n  }\n  stateWatchers: Array<{\n    callback: () => any;\n    firstLevelDependencies: { [field: string]: true };\n  }>\n}\n\ninterface ViewClassReflection {\n  defineState: (metadata: ViewStateMeta, stateName: string, describer?: RenderableStateDescriber) => void\n  defineSubviewProps: (metadata: ViewStateMeta, stateName: string, describer?: RenderableStateDescriber) => void\n  defineComputedState: (metadata: ViewStateMeta, getter: () => any, stateName: string, dependencies: string[]) => void\n  defineStateWatcher: (metadata: ViewStateMeta, callback: () => any, dependencies: string[]) => void\n  getMetadata(instance: BaseView): ViewStateMeta\n}\n\ntype BaseView = View<any>\n\ninterface SubviewPropsInfo {\n  [name: string]: { dependencies: string[], getter: () => any }\n}\n\nexport function vSubviewMap(...subviewPropDescribers: RenderableStateDescriber[]) {\n  return (view: BaseView, _: string) => {\n    const describers: RenderableStateDescriber = {}\n    for (const d of subviewPropDescribers) {\n      vdomUtils.mergeStateDescribers(describers, d)\n    }\n    Reflect.defineMetadata(M_SUBVIEW_PROPS, describers, view)\n  }\n}\n\nexport function vState(describer?: RenderableStateDescriber) {\n  return (view: BaseView, stateName: string) => {\n    const ViewReflect: ViewClassReflection = View as any\n    const metadata = ViewReflect.getMetadata(view)\n    ViewReflect.defineState(metadata, stateName, describer)\n  }\n}\n\nexport function vComputed<V extends BaseView>(...dependencies: Array<StateNames<V>>) {\n  return <T>(view: BaseView, stateName: string, descriptor: TypedPropertyDescriptor<T>) => {\n    const ViewReflect: ViewClassReflection = View as any\n    const metadata = ViewReflect.getMetadata(view)\n    if (!descriptor || !descriptor.get) {\n      throw new Error(\n        `Invalid computedState '${stateName}' in ${metadata.className}: Must be defined as a getter`\n      )\n    }\n    if (descriptor.set) {\n      throw new Error(\n        `Invalid computedState '${stateName}' in ${metadata.className}: Can't have a setter`\n      )\n    }\n    ViewReflect.defineComputedState(metadata, descriptor.get, stateName, dependencies as string[])\n  }\n}\n\nexport function vWatch<V extends BaseView>(...dependencies: Array<StateNames<V>>) {\n  return <T>(view: BaseView, key: string, descriptor: TypedPropertyDescriptor<T>) => {\n    const ViewReflect: ViewClassReflection = View as any\n    const metadata = ViewReflect.getMetadata(view)\n    const callback = (view as any)[key]\n    if (typeof callback !== 'function') {\n      throw new Error(' Decorator vWatch must be used on a method member')\n    }\n    ViewReflect.defineStateWatcher(metadata, callback, dependencies as string[])\n  }\n}\n\nexport abstract class View<V extends View<any>> {\n  private get _viewClassName() { return `[${this.constructor.name}]` }\n  public static readonly propsDescriber: RenderableStateDescriber = {}\n  private static getMetadata(instance: BaseView): ViewStateMeta {\n    let metadata: ViewStateMeta = Reflect.getMetadata(M_STATES, instance)\n    if (!metadata) {\n      metadata = {\n        describerMerged: false,\n        renderableStateDescriber: {},\n        computedStates: {},\n        stateWatchers: [],\n        className: instance._viewClassName\n      }\n      Reflect.defineMetadata(M_STATES, metadata, instance)\n    }\n    return metadata\n  }\n\n  private static defineState(metadata: ViewStateMeta, stateName: string, describer?: RenderableStateDescriber) {\n    const { renderableStateDescriber } = metadata\n    if (renderableStateDescriber[stateName]) {\n      return\n    }\n    renderableStateDescriber[stateName] = describer || true\n  }\n\n  private static defineComputedState(\n    metadata: ViewStateMeta, definedGetter: () => any, stateName: string, dependencies: string[]\n  ) {\n    if (metadata.computedStates[stateName]) {\n      return\n    }\n    const firstLevelDependencies = utils.listToMap(dependencies)\n    // check loop structure\n    for (const field in metadata.computedStates) {\n      const info = metadata.computedStates[field]\n      if (\n        info.firstLevelDependencies[stateName] &&\n        firstLevelDependencies[field]\n      ) {\n        throw new Error(\n          `ComputedState \"${field}\" and \"${stateName}\" has bidirectional dependencies`\n        )\n      }\n    }\n    metadata.computedStates[stateName] = {\n      getter: definedGetter, firstLevelDependencies\n    }\n  }\n\n  private static defineStateWatcher(metadata: ViewStateMeta, callback: () => any, dependencies: string[]) {\n    metadata.stateWatchers.push({\n      callback, firstLevelDependencies: utils.listToMap(dependencies)\n    })\n  }\n\n  // ============\n  // core part\n  // ============\n  public abstract _propsType: {}\n  public abstract readonly _events: { [k: string]: (data?: any) => void }\n  public abstract readonly _subviewMap: { [k: string]: Constructor<View<any>> }\n  protected abstract readonly _contents: VDomStruct\n  protected readonly refs: { [ref: string]: HTMLElement }\n  private _metadata: ViewStateMeta = View.getMetadata(this)\n  private _vNodeRegister: VNodeRegister\n  private _vRoot?: VDomRoot\n  private _viewModel: ViewModel\n  private _subviewPropsInfo: SubviewPropsInfo\n  private _initialProps: this['_propsType']\n  private _slotPlugins: { [slotName: string]: LNSlotPlugin }\n  private _insertTarget?: {\n    container: HTMLElement,\n    prevSiblingNode?: Node\n  }\n\n  constructor(props?: V['_propsType']) {\n    this._initialProps = props || {}\n    const stateMeta = View.getMetadata(this)\n    if (!stateMeta.describerMerged) {\n      this.mergeStateMetaDescribers(stateMeta)\n    }\n    this._viewModel = new ViewModel({}, stateMeta.renderableStateDescriber)\n    this._viewModel._watchBy(this, (modificationTree) => {\n      this.update(modificationTree)\n    })\n    this.initView()\n  }\n\n  // ============\n  // logical part\n  // ============\n  public appendTo(container: HTMLElement) {\n    if (this._insertTarget || this._vRoot && this._vRoot.domCreated) {\n      throw new Error(`Can't call .appendTo() of ${this._viewClassName} because it's already rendered`)\n    }\n    if (this._vRoot) {\n      this.initialRender(container, { node: undefined })\n      this.onMount(this._initialProps)\n      delete this._initialProps\n    } else {\n      this._insertTarget = { container }\n    }\n  }\n\n  public insertAfter(prevSiblingNode: Node) {\n    if (this._insertTarget || this._vRoot && this._vRoot.domCreated) {\n      throw new Error(`Can't call .insertAfter() of ${this._viewClassName} because it's already rendered`)\n    }\n    if (this._vRoot) {\n      this.initialRender(prevSiblingNode.parentElement!, { node: prevSiblingNode })\n      this.onMount(this._initialProps)\n      delete this._initialProps\n    } else {\n      this._insertTarget = { container: prevSiblingNode.parentElement!, prevSiblingNode }\n    }\n  }\n\n  /** nothing but a shorthand, do the exact same thing as direct assignment */\n  // tslint:disable-next-line:no-empty\n  public setState(state: Optional<States<V>>) { }\n\n  // life cycle methods\n  // tslint:disable-next-line:no-empty\n  protected onMount(props: this['_propsType']) { }\n\n  // tslint:disable-next-line:no-empty\n  protected onPropsChange(props: this['_propsType']) { }\n\n  // tslint:disable-next-line:no-empty\n  protected onBeforeDestroy() { }\n\n  /**  abstract v.ts view class will generate and implement this */\n  protected getPropsDescriber(): RenderableStateDescriber | null {\n    return null\n  }\n\n  protected abstract _linkSubviewProps(): SubviewPropsInfo\n\n  private mergeStateMetaDescribers(stateMeta: ViewStateMeta) {\n    const subviewPropsMeta = Reflect.getMetadata(M_SUBVIEW_PROPS, this)\n    vdomUtils.mergeStateDescribers(stateMeta.renderableStateDescriber, subviewPropsMeta)\n    for (const stateName in stateMeta.computedStates) {\n      for (const name in stateMeta.computedStates[stateName].firstLevelDependencies) {\n        if (!stateMeta.renderableStateDescriber[name]) {\n          stateMeta.renderableStateDescriber[name] = true\n        }\n      }\n    }\n    for (const stateName in stateMeta.stateWatchers) {\n      for (const name in stateMeta.stateWatchers[stateName].firstLevelDependencies) {\n        if (!stateMeta.renderableStateDescriber[name]) {\n          stateMeta.renderableStateDescriber[name] = true\n        }\n      }\n    }\n    stateMeta.describerMerged = true\n    Reflect.defineMetadata(M_STATES, stateMeta, this)\n  }\n\n  private initView() {\n    this.defineProperties()\n    this._subviewPropsInfo = this._linkSubviewProps()\n    // wait for impl class constructor to initialize property\n    setTimeout(() => {\n      this.createVRoot()\n    }, 0)\n    // NOTE: suppressing unused private method exception;\n    // tslint:disable-next-line:no-unused-expression\n    View.defineState\n    // tslint:disable-next-line:no-unused-expression\n    View.defineComputedState\n    // tslint:disable-next-line:no-unused-expression\n    View.defineStateWatcher\n    // tslint:disable-next-line:no-unused-expression\n    this.setPropsFromParent\n    // tslint:disable-next-line:no-unused-expression\n    this.setSlotPluginsFromParent\n    // tslint:disable-next-line:no-unused-expression\n    this.destroy\n  }\n\n  private destroy() {\n    this.onBeforeDestroy()\n    if (this._viewModel) {\n      this._viewModel._destory()\n      delete this._viewModel\n    }\n    if (this._vRoot) {\n      this._vRoot.destroy()\n    }\n    this._vNodeRegister.destory()\n    delete this._vRoot\n    delete this._vNodeRegister\n    delete this._metadata\n  }\n\n  private createVRoot() {\n    // parse vdom expressions\n    const register = new VNodeRegister(this)\n    register.registerSubviewNode = this.registerSubviewNode.bind(this)\n    register.registerSlotNode = this.registerSlotNode.bind(this)\n    this._vNodeRegister = register\n    this._vRoot = vDomFactory.createVDomRoot(this._contents, register)\n    if (this._insertTarget) {\n      const { container, prevSiblingNode } = this._insertTarget\n      delete this._insertTarget\n      if (prevSiblingNode) {\n        this.insertAfter(prevSiblingNode)\n      } else {\n        this.appendTo(container)\n      }\n    }\n  }\n\n  private defineProperties() {\n    const { renderableStateDescriber, computedStates } = this._metadata\n    console.log('METADATA', this._metadata)\n    // define states\n    // define computed states\n    for (const field in computedStates) {\n      Object.defineProperty(this, field, {\n        get: () => this._viewModel._get(field),\n        set: () => { throw new Error(`Computed State '${field}' of ${this._viewClassName} is not writable`) },\n        configurable: false\n      })\n    }\n    for (const field in renderableStateDescriber) {\n      if (computedStates[field]) {\n        continue\n      }\n      Object.defineProperty(this, field, {\n        get() {\n          return (this as V)._viewModel._get(field)\n        },\n        set(value) {\n          (this as V)._viewModel._set(field, value)\n        }\n      })\n    }\n    // define propsType\n    Object.defineProperty(this, '_propsType', {\n      get: () => { throw new Error('View.propsType is only for typing purpose, can\\'t be get as a property') },\n      set: () => { throw new Error('View.propsType is only for typing purpose, can\\'t be set as a property') }\n    })\n  }\n\n  private setPropsFromParent(props: this['_propsType']) {\n    if (!this._vRoot) {\n      this._initialProps = props\n    } else {\n      this.onPropsChange(props)\n    }\n  }\n\n  private setSlotPluginsFromParent(slotPlugins: { [slotName: string]: LNSlotPlugin }) {\n    this._slotPlugins = slotPlugins\n  }\n\n  // ============\n  // render part\n  // ============\n  private registerSubviewNode(node: LNSubview): { propsGetter: () => any, stateDependencies: string[] } {\n    if (!this._subviewPropsInfo[node.subviewName]) {\n      console.error(this._subviewPropsInfo)\n      throw new Error(`Can't find subview props info for ${node.subviewName} in ${this._viewClassName}`)\n    }\n    node.setViewClass(this._subviewMap[node.viewClassPath])\n    for (const eventName in node.outputEventNames) {\n      const handlerName = node.outputEventNames[eventName]\n      const handler = this[handlerName as keyof this]\n      if (typeof handler !== 'function') {\n        throw new Error(`invalid subview event handler. handlerName:${handlerName}`)\n      }\n      node.outputEventHandlers[eventName] = handler\n    }\n    const { dependencies, getter } = this._subviewPropsInfo[node.subviewName]\n    return { propsGetter: getter, stateDependencies: dependencies }\n  }\n\n  private registerSlotNode(node: LNSlot) {\n    node.registerSlotPlugin(this._slotPlugins[node.slotName])\n  }\n\n  private initialRender(container: HTMLElement, prevSibling: PrevSibling) {\n    // initial evaluation of computed states\n    (this._vRoot as VDomRoot).initialRender(this._viewModel, container, prevSibling)\n  }\n\n  private update(modificationTree: ModificationTree) {\n    const { computedStates, stateWatchers } = View.getMetadata(this)\n    if (this._vRoot) {\n      console.log('UPDATE', modificationTree)\n      this._vRoot.update(this._viewModel, modificationTree)\n    }\n    // TODO: need to consider dead loops:\n    // - like bidirectional computed state dependencies\n    // - computedState \"b\" depends on \"a\", and a watcher change \"a\" on the change of \"b\"\n    for (const entryField in modificationTree) {\n      // update computed states\n      for (const computedStateName in computedStates) {\n        const { firstLevelDependencies, getter } = computedStates[computedStateName]\n        if (firstLevelDependencies[entryField]) {\n          let res: any = null\n          try {\n            res = getter.call(this)\n          } catch (error) {\n            console.warn(`Unable to calculate computedState '${computedStateName}' of ${this._viewClassName}:`)\n            console.warn(error)\n          }\n          if (res !== this._viewModel._get(computedStateName)) {\n            console.log('recalculate computed state', computedStateName, JSON.stringify(res))\n            this._viewModel._set(computedStateName, res)\n          }\n        }\n      }\n      // update watchers\n      for (const watcherInfo of stateWatchers) {\n        if (watcherInfo.firstLevelDependencies[entryField]) {\n          watcherInfo.callback()\n        }\n      }\n    }\n  }\n}\n","export { VDomStruct } from './vdom/vdom'\nexport { vComputed, View, vState, vSubviewMap, VEventData, VSubviewType } from './View'\nimport { I18nExtension } from './vdom/dataPoint/I18nExtension'\nimport { PipelineExtension } from './vdom/dataPoint/PipelineExtension'\n\n// handle exported interfaces\nimport * as th from './types'\nexport type VConstructor<T> = th.Constructor<T>\nexport type BasicType = th.BasicType\n\nexport const BultinViewExt = {\n  Pipeline: PipelineExtension,\n  I18n: I18nExtension\n}\n","import { vComputed, VDomStruct, View, vState } from '../src/index'\n\nclass PersonView extends View<PersonView> {\n  @vState() public name: string\n  @vState({ name: {} }) public pet: { name?: string }\n  @vState() public loaded: boolean = false\n\n  @vComputed<PersonView>('name') get dspName() {\n    return this.name.toUpperCase()\n  }\n\n  public _propsType: { name: string; }\n  public _events: {}\n  public _subviewMap = {}\n  protected _contents: VDomStruct = ['E', 'section', { id: 'main-wrap' }, [['D', 'dspName'], ['D', 'dog.name']]]\n\n  public onMount(props: this['_propsType']) {\n    this.setState({ dspName: '' })\n    this.name = props.name\n    this.loaded = true\n    setTimeout(() => {\n      this.pet = { name: 'doggy' }\n    }, 1000)\n  }\n  protected _linkSubviewProps() {\n    return {}\n  }\n}\n\nconsole.log(new PersonView())\n"]}