UNPKG

emfular

Version:

Pure TS library with basic types and parser to move from XPath references to runtime models

1 lines 20.4 kB
{"version":3,"file":"emfular.mjs","sources":["../../../projects/emfular/src/lib/referencing/ref/ref-handler.ts","../../../projects/emfular/src/lib/utils/list-updater.ts","../../../projects/emfular/src/lib/referencing/referencable/referenceable.ts","../../../projects/emfular/src/lib/referencing/referencable/referencable-container.ts","../../../projects/emfular/src/lib/referencing/referencable/referencable-list-container.ts","../../../projects/emfular/src/lib/referencing/referencable/referencable-singleton-container.ts","../../../projects/emfular/src/lib/referencing/referencable/referencable-tree-list-container.ts","../../../projects/emfular/src/lib/referencing/referencable/referencable-tree-parent-container.ts","../../../projects/emfular/src/lib/deserialization/deserializer.ts","../../../projects/emfular/src/public-api.ts","../../../projects/emfular/src/emfular.ts"],"sourcesContent":["import {Ref} from \"./ref\";\n\nexport class RefHandler {\n\n static readonly pathDivider: string = '/@';\n\n static getIndexFromString(ref: string): number {\n let substrings = ref.split('.');\n return parseInt(substrings[substrings.length-1]);\n }\n\n static computePrefix(formerPrefix: string, ownHeader: string): string {\n return formerPrefix+RefHandler.pathDivider+ownHeader;\n }\n\n static getParentAddress(ref: string): string {\n let pos = ref.lastIndexOf(this.pathDivider)\n return ref.substring(0, pos)\n }\n\n static mixWithIndex(prefix: string, index: number): string {\n return prefix+'.'+index;\n }\n\n static createRef(ref: string, eClass: string): Ref {\n return {\n $ref: ref,\n eClass: eClass\n }\n }\n\n static createRefIfMissing(eClass: string, ref?: Ref) {\n return ref? ref: {$ref: '', eClass: eClass};\n }\n}\n","import {Referencable} from \"../referencing/referencable/referenceable\";\n\nexport class ListUpdater {\n\n // ************** Helper *********************\n public static removeFromList<T>(elem: T, list: T[]): boolean {\n if(!list) {\n return false;\n }\n const index = list.indexOf(elem)\n if(index > -1) {\n list.splice(index, 1);\n return true;\n }\n return false;\n }\n\n public static addToList<T>(elem: T, list: T[]) {\n if(!list) {\n return false;\n }\n const index = list.indexOf(elem);\n if(index > -1) {\n return false;\n } else {\n list.push(elem);\n return true;\n }\n }\n\n static destructAllFromChangingList<T extends Referencable>(list: T[]) {\n while(list?.length > 0){\n list[0].destruct()\n }\n }\n\n}\n","import {Ref} from \"../ref/ref\";\nimport { v4 as uuidv4 } from 'uuid';\nimport {ListUpdater} from \"../../utils/list-updater\";\nimport {ReferencableContainer} from \"./referencable-container\";\nimport {RefHandler} from \"../ref/ref-handler\";\n\n/** base class for CORE models.\n *\n */\nexport abstract class Referencable {\n\n protected ref: Ref;\n gId: string;\n\n /* todo two open points:\n 1) we could enforce eClass already here and use it instead if deferring that to the constructor,\n 2) we could allow the parent to set the refpath so that we coul avoid the parameter of prepare\n * */\n\n singleChildren: Map<string, Referencable> = new Map();\n listChildren: Map<string, Referencable[]> = new Map();\n\n public getTreeParent(): Referencable | undefined {\n return undefined;\n }\n\n protected constructor(ref: Ref) {\n this.ref = ref;\n this.gId = uuidv4();\n }\n\n public getRef(): Ref {\n return this.ref;\n }\n\n private setRef(ownPos: string) {\n this.ref.$ref = ownPos\n }\n\n prepare(ownPos: string) {\n this.setRef(ownPos)\n for (let single of this.singleChildren) {\n single[1].prepare(RefHandler.computePrefix(ownPos, single[0]));\n }\n for (let list of this.listChildren) {\n Referencable.prepareList(RefHandler.computePrefix(ownPos, list[0]) ,list[1])\n }\n }\n\n static prepareList<T extends Referencable>(prefix: string, list: T[]): void {\n if (list?.length > 0) {\n list.map((ref: Referencable, index) => {\n ref.prepare(RefHandler.mixWithIndex(prefix, index))\n })\n }\n }\n\n removeFromListChild<T extends Referencable>(elem: T, list: T[]): void {\n // todo should I use the index on list children rather than the explicit list?\n if (elem.getTreeParent() == undefined || elem.getTreeParent() != this) {\n ListUpdater.removeFromList(elem, list)\n } else {\n console.log(\"Cannot remove from list, since I am currently the tree parent\")\n }\n }\n\n static listToRefs<T extends Referencable>(list: T[]): Ref[] {\n if (list)\n return list.map(elem => elem.getRef())\n else\n return []\n }\n\n destruct() {\n this.singleChildren.forEach(child => {\n child.destruct()\n })\n this.listChildren.forEach(list => {\n ListUpdater.destructAllFromChangingList(list)\n })\n }\n\n private getAttr(name: string): ReferencableContainer<Referencable> {\n let refContainers = Object.entries(this)\n let refContainer = refContainers.find((v: [string, any]) => v[0] == '_'+name )\n if (refContainer) {\n return (refContainer[1] as ReferencableContainer<Referencable>)\n } else\n throw new Error(\"Attribute _\"+name + \" not found on \"+refContainers)\n }\n\n public addToReferencableContainer(name: string, item: Referencable): boolean {\n return this.getAttr(name).add(item)\n }\n\n public removeFromReferencableContainer(name: string, item: Referencable): boolean {\n return this.getAttr(name).remove(item)\n }\n}\n","import {Referencable} from \"./referenceable\";\n\nexport abstract class ReferencableContainer<T extends Referencable> {\n readonly _parent: Referencable;\n readonly referenceName: string;\n readonly inverseName?: string;\n\n\n protected constructor(parent: Referencable, referenceName: string, inverseName?: string) {\n this._parent = parent;\n this.referenceName = referenceName;\n this.inverseName = inverseName;\n }\n\n abstract get(): T[] | T | undefined;\n\n abstract add(item: T): boolean;\n\n abstract remove(item: T): boolean;\n}\n","import {Referencable} from \"./referenceable\";\nimport {ReferencableContainer} from \"./referencable-container\";\n\nexport class ReferencableListContainer<T extends Referencable> extends ReferencableContainer<T> {\n\n readonly _instance: T[] = [];\n\n constructor(parent: Referencable, name: string, inverse?: string) {\n super(parent, name, inverse);\n }\n\n add(item: T): boolean {\n const index = this._instance.indexOf(item);\n if(index > -1) {\n return false;\n } else {\n this._instance.push(item);\n if(this.inverseName !== undefined) {\n return item.addToReferencableContainer(this.inverseName, this._parent)\n }\n return true;\n }\n }\n\n get(): T[] {\n return this._instance;\n }\n\n remove(item: T): boolean {\n const index = this._instance.indexOf(item)\n if(index > -1) {\n this._instance.splice(index, 1);\n if(this.inverseName !== undefined) {\n return item.removeFromReferencableContainer(this.inverseName, this._parent)\n }\n return true;\n }\n return false;\n }\n\n}\n","import {Referencable} from \"./referenceable\";\nimport {ReferencableContainer} from \"./referencable-container\";\n\nexport class ReferencableSingletonContainer<T extends Referencable> extends ReferencableContainer<T> {\n\n _instance?: T\n\n constructor(parent: Referencable, referenceName: string, inverseName?: string ) {\n super(parent, referenceName, inverseName);\n }\n\n get(): T | undefined {\n return this._instance;\n }\n\n private set(instance: T): void {\n if(this.inverseName !== undefined) {\n this._instance?.removeFromReferencableContainer(this.inverseName, this._parent)\n instance.addToReferencableContainer(this.inverseName, this._parent)\n }\n this._instance = instance;\n }\n\n add(item: T): boolean {\n if (this._instance == item) {\n return false;\n } else {\n this.set(item);\n return true;\n }\n }\n\n remove(item: T): boolean {\n if(this._instance == item) {\n if (this.inverseName != undefined) {\n item.removeFromReferencableContainer(this.inverseName, this._parent)\n }\n this._instance = undefined;\n return true;\n } else {\n return false;\n }\n }\n\n}\n","import {Referencable} from \"./referenceable\";\nimport {ReferencableListContainer} from \"./referencable-list-container\";\n\nexport class ReferencableTreeListContainer<T extends Referencable> extends ReferencableListContainer<T> {\n\n}\n","import {Referencable} from \"./referenceable\";\nimport {ReferencableSingletonContainer} from \"./referencable-singleton-container\";\n\nexport class ReferencableTreeParentContainer<T extends Referencable> extends ReferencableSingletonContainer<T> {\n\n}\n","\n/*\nidea:\n 1) store any element with complete xPath, on lookup during construction you trigger the creation if the object does not exist yet\n 2) after returning from all triggered creations, finish your own job ;)\n */\nimport {Ref} from \"../referencing/ref/ref\";\nimport {Referencable} from \"../referencing/referencable/referenceable\";\nimport {ConstructorPointer, ConstructorPointers} from \"./constructor-pointers\";\nimport {RefHandler} from \"../referencing/ref/ref-handler\";\n\nexport class Deserializer {\n\n private readonly completeJSON: any;\n private readonly constructorPointers: Map<string, ConstructorPointer>;\n\n // all so far parsed objects\n private context: Map<string, any> = new Map<string, any>();\n\n constructor(json: any, constructorPointers: ConstructorPointers) {\n this.completeJSON = json;\n this.constructorPointers = constructorPointers\n }\n\n getJsonFromTree<T>($ref: string): T {\n //first replace index access (.) by normal $ref divider, since they are all finally [] accesses\n const accessPaths = $ref.replaceAll('.', RefHandler.pathDivider).split(RefHandler.pathDivider)\n let res = this.completeJSON;\n for (let i = 1; i<accessPaths.length; i++) {\n res = res[(accessPaths[i])]\n }\n return (res as T);\n }\n\n getOrCreate<T extends Referencable>(ref: Ref): T {\n //get constructor from ref.eClass\n let res = this.get<T>(ref.$ref)\n if (res)\n return res\n else {\n // construct via pointer....\n return this.create<T>(ref)\n }\n }\n\n private get<T extends Referencable>($ref: string): T {\n return (this.context.get($ref) as T);\n }\n\n private create<T extends Referencable>(ref: Ref): T {\n let constrPointer: ConstructorPointer | undefined\n = this.constructorPointers.get(ref.eClass)\n if (constrPointer) {\n let constr = constrPointer(ref.$ref)\n return (constr(this) as T);\n } else {\n throw(`Constructor pointer for ${ref} not set.`);\n }\n }\n\n put<T extends Referencable>(elem: T ) {\n this.context.set(elem.getRef().$ref, elem);\n }\n\n // for setting eClass assignment (i.e. on subtypes)\n static createRefList(formerPrefix: string, ownHeader: string, eClasses: string[] = []): Ref[] {\n const prefix = RefHandler.computePrefix(formerPrefix, ownHeader);\n let res = eClasses? eClasses : []\n return res.map((eClass, index) => RefHandler.createRef(RefHandler.mixWithIndex(prefix, index), eClass))\n }\n\n static createSingleRef(formerPrefix: string, ownHeader: string, eClass: string): Ref {\n const ref = RefHandler.computePrefix(formerPrefix, ownHeader)\n return RefHandler.createRef(ref, eClass)\n }\n\n}\n","/*\n * Public API Surface of emfular\n */\n\nexport * from './lib/referencing/ref/ref';\nexport * from './lib/referencing/ref/ref-handler';\nexport * from './lib/referencing/referencable/referenceable';\nexport * from './lib/referencing/referencable/referencable-container';\nexport * from './lib/referencing/referencable/referencable-list-container';\nexport * from './lib/referencing/referencable/referencable-singleton-container';\nexport * from './lib/referencing/referencable/referencable-tree-list-container';\nexport * from './lib/referencing/referencable/referencable-tree-parent-container';\n\nexport * from './lib/deserialization/constructor-pointers';\nexport * from './lib/deserialization/deserializer';\nexport * from './lib/utils/list-updater';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4"],"mappings":"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"}