{"version":3,"sources":["../src/modelElement.ts","../src/essential.ts","../src/sequencer.ts","../src/modelElementBase.ts","../src/modelBase.ts","../src/errorBase.ts"],"names":["ErrorType","VisitMode","Essential","load","fileName","callback","save","model","getHashCode","input","hash","i","len","length","charCodeAt","isModelElement","obj","Object","prototype","hasOwnProperty","call","isModelElementCollection","arr","first","asModelElement","asModelElementCollection","collectionToJson","col","str","map","it","toJson","reduce","t1","t2","toEssential","m","res","visit","PreOrder","refToEssential","me","getId","collectionToEssential","primitiveTypeToEssential","value","toString","_Essential","Sequencer","seq","prefix","constructor","generateUniqueId","reset","_Sequencer","StaticSequencer","lazyInit","undefined","__publicField","_StaticSequencer","ModelElementBase","_meta","options","id","location","getTypeName","name","match","identity","sameConcept","b","equals","hashCode","hashCodeElement","acc","visitMode","action","visitNode","visitChildren","PostOrder","prop","payload","el","elCol","JSON","stringify","validate","_ModelElementBase","ModelBase","modelName","version","_ModelBase","ErrorBase","type","message","element","Error","_ErrorBase"],"mappings":"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","file":"index.cjs","sourcesContent":["// ModelElement, Error definitions\r\n\r\nexport enum ErrorType {\r\n  None = 0,\r\n  Info = 1,\r\n  Warning = 2,\r\n  Error = 3\r\n}\r\nexport interface Location {\r\n  filename: string;\r\n  start: Position;\r\n  end: Position;\r\n}\r\nexport interface Position {\r\n  line: number;\r\n  col: number;\r\n}\r\n\r\nexport interface IError {\r\n  message: string;\r\n  element?: ModelElement;\r\n  type: ErrorType;\r\n  location: Location;\r\n}\r\nexport enum VisitMode {\r\n  PreOrder = 0,\r\n  PostOrder = 1\r\n}\r\nexport interface MetaInfo {\r\n  id: string;\r\n  model?: Model;\r\n  parent?: ModelElement;\r\n  location?: Location;\r\n}\r\nexport interface ModelElement {\r\n  _meta: MetaInfo;\r\n\r\n  getId(): string;\r\n  getTypeName(): string;\r\n  toString(): string;\r\n  toJson(): string;\r\n  toEssential(): string;\r\n  validate(): IError[];\r\n  visit(visitMode: VisitMode, action: (el: ModelElement) => void): void;\r\n\r\n  // equality. to be overrided\r\n  identity(): unknown;\r\n  hashCodeElement(): number;\r\n\r\n  // equality. generic\r\n  hashCode(): number;\r\n  sameConcept(b: ModelElement | null | undefined): boolean;\r\n  equals(b: ModelElement): boolean;\r\n\r\n  // mergeWith(b: ModelElement): void;\r\n  // diffWith(b: ModelElement): Difference[];\r\n}\r\n\r\nexport interface Model extends ModelElement {\r\n  modelName: string;\r\n  version: string;\r\n}\r\n","import { ModelElement, Model, VisitMode } from './modelElement';\r\n\r\nexport class Essential {\r\n  static load(fileName: string, callback: () => void) {\r\n    callback();\r\n  }\r\n  static save(model: Model, fileName: string, callback: () => void): void {\r\n    callback();\r\n  }\r\n\r\n  /**\r\n   * Fast hashcode function for strings\r\n   */\r\n  static getHashCode(input: string): number {\r\n    if (input === null || input === undefined) {\r\n      return 0;\r\n    }\r\n    let hash = 0;\r\n    let i = 0;\r\n    const len = input.length;\r\n    while (i < len) {\r\n      hash = ((hash << 5) - hash + input.charCodeAt(i++)) << 0;\r\n    }\r\n    return hash;\r\n  }\r\n\r\n  static isModelElement(obj: unknown): obj is ModelElement {\r\n    if (!obj) {\r\n      return false;\r\n    }\r\n    if (!(typeof obj === <string>'object')) {\r\n      return false;\r\n    }\r\n    // todo (check ModelElement with duck typing)\r\n    if ((obj as unknown[]).length >= 0) {\r\n      return false;\r\n    } // collection\r\n    return Object.prototype.hasOwnProperty.call(obj, '_meta');\r\n  }\r\n  static isModelElementCollection(obj: unknown): obj is ModelElement[] {\r\n    if (!obj) {\r\n      return false;\r\n    }\r\n    if (!(typeof obj === <string>'object')) {\r\n      return false;\r\n    }\r\n    if (Object.prototype.hasOwnProperty.call(obj, 'length')) {\r\n      const arr = obj as unknown[];\r\n      if (arr.length > 0 && arr[0]) {\r\n        const first = arr[0];\r\n        return Essential.isModelElement(first);\r\n      }\r\n      return true; // Empty array []\r\n    }\r\n    return false; // Not an array\r\n  }\r\n  static asModelElement(obj: unknown): ModelElement | null {\r\n    if (Essential.isModelElement(obj)) {\r\n      return <ModelElement>obj;\r\n    }\r\n    return null;\r\n  }\r\n  static asModelElementCollection(obj: unknown): ModelElement[] | null {\r\n    if (Essential.isModelElementCollection(obj)) {\r\n      return <ModelElement[]>obj;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  static collectionToJson(col: ModelElement[]): string {\r\n    if (!col) {\r\n      return 'null';\r\n    }\r\n    const str = col.map((it: ModelElement) => {\r\n      return it.toJson();\r\n    });\r\n    if (str.length === 0) {\r\n      return '[]';\r\n    }\r\n    const res = str.reduce((t1, t2) => {\r\n      return t1 + ',' + t2;\r\n    });\r\n    return '[' + res + ']';\r\n  }\r\n\r\n  static toEssential(m: ModelElement): string {\r\n    let res = '';\r\n    if (!m) {\r\n      return '';\r\n    }\r\n    m.visit(VisitMode.PreOrder, (it) => {\r\n      res += it.toEssential();\r\n    });\r\n    return res;\r\n  }\r\n  static refToEssential(me: ModelElement): string {\r\n    return me.getId();\r\n  }\r\n  static collectionToEssential(col: ModelElement[]): string {\r\n    if (!col || col.length === 0) {\r\n      return '[]';\r\n    }\r\n    const strs = col.map((it) => {\r\n      return Essential.refToEssential(it);\r\n    });\r\n    const res = strs.reduce((t1, t2) => {\r\n      return t1 + ', ' + t2;\r\n    });\r\n    return '[' + res + ']';\r\n  }\r\n  static primitiveTypeToEssential(value: unknown): string | null {\r\n    if (!value) {\r\n      return null;\r\n    }\r\n    if (value === true) {\r\n      return 'true';\r\n    }\r\n    if (value === false) {\r\n      return 'false';\r\n    }\r\n    if (typeof value === 'number') {\r\n      return value.toString();\r\n    }\r\n    return '\"' + value.toString() + '\"';\r\n  }\r\n}\r\n","export class Sequencer {\r\n  seq: number = 0;\r\n  prefix: string = '';\r\n\r\n  constructor(prefix: string = 'e') {\r\n    this.prefix = prefix;\r\n  }\r\n  generateUniqueId(): string {\r\n    return this.prefix + this.seq++;\r\n  }\r\n  reset() {\r\n    this.seq = 0;\r\n  }\r\n}\r\n\r\nexport class StaticSequencer {\r\n  static seq?: Sequencer;\r\n  static prefix: string = 'e';\r\n\r\n  static generateUniqueId(prefix: string = 'e'): string {\r\n    StaticSequencer.lazyInit(prefix);\r\n    return StaticSequencer.seq!.generateUniqueId();\r\n  }\r\n  static reset(prefix: string) {\r\n    StaticSequencer.seq = undefined;\r\n    StaticSequencer.lazyInit(prefix);\r\n  }\r\n  private static lazyInit(prefix: string) {\r\n    if (!StaticSequencer.seq) {\r\n      StaticSequencer.prefix = prefix || 'e';\r\n      StaticSequencer.seq = new Sequencer(StaticSequencer.prefix);\r\n    }\r\n  }\r\n}\r\n","import { Essential } from './essential';\r\nimport { ModelElement, VisitMode, MetaInfo, Location } from './modelElement';\r\nimport { ErrorBase } from './errorBase';\r\nimport { StaticSequencer } from './sequencer';\r\n\r\nexport interface ModelElementBaseBuilder {\r\n  id?: string;\r\n  location?: Location;\r\n}\r\n\r\nexport class ModelElementBase implements ModelElement {\r\n  _meta: MetaInfo;\r\n\r\n  constructor(options: ModelElementBaseBuilder = {}) {\r\n    options = options || {};\r\n    this._meta = {\r\n      id: options.id || StaticSequencer.generateUniqueId('e')\r\n    };\r\n    if (options.location) {\r\n      this._meta.location = options.location;\r\n    }\r\n  }\r\n  getId(): string {\r\n    return this._meta.id;\r\n  }\r\n  getTypeName(): string {\r\n    const name = this.constructor.toString().match(/\\w+/g);\r\n    return name && name.length > 2 ? name[1] : '';\r\n  }\r\n  toString(): string {\r\n    return this.getTypeName();\r\n  }\r\n\r\n  // equality -----------\r\n  /**\r\n   * Identity definition.\r\n   * To be overrided in descendent classes\r\n   */\r\n  identity(): unknown {\r\n    return this.getTypeName() + '_' + this.getId(); // default implementation\r\n  }\r\n  /**\r\n   * sameConcept check. based on same identity\r\n   */\r\n  sameConcept(b: ModelElement | null | undefined): boolean {\r\n    if (!b) {\r\n      return false;\r\n    }\r\n    return this.identity() === b.identity();\r\n  }\r\n\r\n  /**\r\n   * equality based on property checking (deep check)\r\n   */\r\n  equals(b: ModelElement): boolean {\r\n    if (!b) {\r\n      return false;\r\n    }\r\n    return this.hashCode() === b.hashCode();\r\n  }\r\n  /**\r\n   * Hash code for all properties of the object + descendants\r\n   * To be overrided in descendent classes.\r\n   */\r\n  hashCodeElement(): number {\r\n    return Essential.getHashCode(this.getTypeName() + this.getId());\r\n  }\r\n  /**\r\n   * Hash code for all model tree (for dirty checking)\r\n   */\r\n  hashCode(): number {\r\n    let acc = 0;\r\n    this.visit(VisitMode.PreOrder, (it) => {\r\n      acc ^= it.hashCodeElement();\r\n      acc = acc << 3;\r\n    });\r\n    return acc;\r\n  }\r\n\r\n  visit(visitMode: VisitMode, action: (el: ModelElement) => void): void {\r\n    if (visitMode === VisitMode.PreOrder) {\r\n      this.visitNode(action);\r\n      this.visitChildren(visitMode, action);\r\n    } else if (visitMode === VisitMode.PostOrder) {\r\n      this.visitChildren(visitMode, action);\r\n      this.visitNode(action);\r\n    }\r\n  }\r\n  toJson(): string {\r\n    let res = '{';\r\n    let prefix = '';\r\n    for (const prop in this) {\r\n      if (\r\n        Object.prototype.hasOwnProperty.call(this, prop) &&\r\n        prop !== '_meta'\r\n      ) {\r\n        const value = this[prop];\r\n        let payload = '';\r\n        const el = Essential.asModelElement(value);\r\n        const elCol = Essential.asModelElementCollection(value);\r\n        if (elCol) {\r\n          payload = Essential.collectionToJson(elCol);\r\n        } else if (el) {\r\n          payload = el.toJson();\r\n        } else {\r\n          payload = JSON.stringify(value);\r\n        }\r\n        res += prefix + '\"' + prop + '\":' + payload;\r\n        prefix = ',';\r\n      }\r\n    }\r\n    return res + '}';\r\n  }\r\n  toEssential(): string {\r\n    let res = this.getTypeName() + ' ' + this.getId() + ' {\\n';\r\n    for (const prop in this) {\r\n      if (\r\n        Object.prototype.hasOwnProperty.call(this, prop) &&\r\n        prop !== '_meta'\r\n      ) {\r\n        const value = this[prop];\r\n        let payload = '';\r\n        const el = Essential.asModelElement(value);\r\n        const elCol = Essential.asModelElementCollection(value);\r\n        if (elCol) {\r\n          payload = Essential.collectionToEssential(elCol);\r\n        } else if (el) {\r\n          payload = Essential.refToEssential(el);\r\n        } else {\r\n          payload = Essential.primitiveTypeToEssential(value) || '';\r\n        }\r\n        res += '  ' + prop + ' = ' + payload + ';\\n';\r\n      }\r\n    }\r\n    return res + '}\\n';\r\n  }\r\n  private visitNode(action: (el: ModelElement) => void) {\r\n    action(this);\r\n  }\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  visitChildren(visitMode: VisitMode, action: (el: ModelElement) => void) {\r\n    // Overriden in descendent clases\r\n    //throw new Error('Unimplemented');\r\n  }\r\n  validate(): ErrorBase[] {\r\n    return [];\r\n  }\r\n}\r\n","import { IError, Model } from './modelElement';\r\nimport { ModelElementBase, ModelElementBaseBuilder } from './modelElementBase';\r\n\r\nexport interface ModelBaseBuilder\r\n  extends ModelElementBaseBuilder,\r\n    Partial<ModelBase> {}\r\n\r\nexport class ModelBase extends ModelElementBase implements Model {\r\n  modelName: string;\r\n  version: string = '0';\r\n\r\n  constructor(options: ModelBaseBuilder = {}) {\r\n    super(options);\r\n    if (options.modelName) {\r\n      this.modelName = options.modelName;\r\n    }\r\n    if (options.version) {\r\n      this.version = options.version;\r\n    }\r\n  }\r\n  toString(): string {\r\n    return this.getTypeName() + ` ${this.modelName} v. ${this.version}`;\r\n  }\r\n  validate(): IError[] {\r\n    return [];\r\n  }\r\n}\r\n","import { ModelElement, IError, ErrorType, Location } from \"./modelElement\";\r\n\r\nexport class ErrorBase implements IError {\r\n  type: ErrorType;\r\n  message: string;\r\n  element?: ModelElement;\r\n  location: Location;\r\n\r\n  constructor(\r\n    type: ErrorType = ErrorType.Error,\r\n    message: string,\r\n    element: ModelElement | undefined,\r\n    location: Location\r\n  ) {\r\n    this.type = type;\r\n    this.message = message;\r\n    this.element = element;\r\n    this.location = location;\r\n  }\r\n}\r\n"]}