@metadev/essential-core
Version:
Core SDK Metamodeling Framework. Essential
1 lines • 19.9 kB
Source Map (JSON)
{"version":3,"sources":["../src/modelElement.ts","../src/essential.ts","../src/sequencer.ts","../src/modelElementBase.ts","../src/modelBase.ts"],"names":["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"],"mappings":"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","file":"modelBase.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"]}