@metadev/essential-core
Version:
Core SDK Metamodeling Framework. Essential
1 lines • 21.3 kB
Source Map (JSON)
{"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":"aAEO,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAKA,EAAAA,SAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAsBAC,EAAAA,SAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QAAAA,CAAAA,CAAAA,CAAAA,CAAAA,UAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,WAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,ECtBL,IAAMC,CAAN,CAAA,MAAMA,CAAAA,CACX,OAAOC,IAAKC,CAAAA,CAAAA,CAAkBC,CAAsB,CAAA,CAClDA,IACF,CACA,OAAOC,IAAAA,CAAKC,EAAcH,CAAkBC,CAAAA,CAAAA,CAA4B,CACtEA,CAAAA,GACF,CAKA,OAAOG,WAAYC,CAAAA,CAAAA,CAAuB,CACxC,GAAIA,CAAAA,EAAU,IACZ,CAAA,SAEF,IAAIC,CAAAA,CAAO,CACPC,CAAAA,CAAAA,CAAI,EACFC,CAAMH,CAAAA,CAAAA,CAAMI,MAClB,CAAA,KAAOF,EAAIC,CACTF,EAAAA,CAAAA,CAAAA,CAASA,CAAQ,EAAA,CAAA,EAAKA,EAAOD,CAAMK,CAAAA,UAAAA,CAAWH,CAAAA,EAAAA,CAAAA,EAAS,EAEzD,OAAOD,CACT,CAEA,OAAOK,eAAeC,CAAmC,CAAA,CAQvD,OAPI,CAACA,GAGC,OAAOA,CAAAA,EAAgB,QAIxBA,EAAAA,CAAAA,CAAkBH,QAAU,CACxB,CAAA,CAAA,CAAA,CAEFI,MAAOC,CAAAA,SAAAA,CAAUC,eAAeC,IAAKJ,CAAAA,CAAAA,CAAK,OAAA,CACnD,CACA,OAAOK,wBAAAA,CAAyBL,CAAqC,CAAA,CAInE,GAHI,CAACA,CAAAA,EAGC,OAAOA,CAAAA,EAAgB,SAC3B,OAAO,CAAA,CAAA,CAET,GAAIC,MAAAA,CAAOC,UAAUC,cAAeC,CAAAA,IAAAA,CAAKJ,CAAK,CAAA,QAAA,EAAW,CACvD,IAAMM,CAAMN,CAAAA,CAAAA,CACZ,GAAIM,CAAIT,CAAAA,MAAAA,CAAS,CAAKS,EAAAA,CAAAA,CAAI,CAAA,CAAI,CAAA,CAC5B,IAAMC,CAAAA,CAAQD,EAAI,CAAA,CAAA,CAClB,OAAOpB,CAAAA,CAAUa,eAAeQ,CAAAA,CAClC,CACA,OAAO,EACT,CACA,OAAO,CACT,CAAA,CACA,OAAOC,cAAeR,CAAAA,CAAAA,CAAmC,CACvD,OAAId,EAAUa,cAAeC,CAAAA,CAAAA,CACNA,CAAAA,CAAAA,CAEhB,IACT,CACA,OAAOS,wBAAyBT,CAAAA,CAAAA,CAAqC,CACnE,OAAId,CAAAA,CAAUmB,wBAAyBL,CAAAA,CAAAA,EACdA,CAElB,CAAA,IACT,CAEA,OAAOU,iBAAiBC,CAA6B,CAAA,CACnD,GAAI,CAACA,EACH,OAAO,MAAA,CAET,IAAMC,CAAAA,CAAMD,EAAIE,GAAKC,CAAAA,CAAAA,EACZA,CAAGC,CAAAA,MAAAA,EACZ,CACA,CAAA,OAAIH,CAAIf,CAAAA,MAAAA,GAAW,EACV,IAKF,CAAA,GAAA,CAHKe,CAAII,CAAAA,MAAAA,CAAO,CAACC,CAAIC,CAAAA,CAAAA,GACnBD,CAAK,CAAA,GAAA,CAAMC,CACpB,CACmB,CAAA,GACrB,CAEA,OAAOC,YAAYC,CAAyB,CAAA,CAC1C,IAAIC,CAAAA,CAAM,GACV,OAAKD,CAAAA,EAGLA,CAAEE,CAAAA,KAAAA,CAAMrC,EAAUsC,QAAWT,CAAAA,CAAAA,EAAAA,CAC3BO,CAAAA,EAAOP,EAAGK,WAAW,GACvB,CAAA,CAAA,CACOE,GALE,EAMX,CACA,OAAOG,cAAAA,CAAeC,EAA0B,CAC9C,OAAOA,CAAGC,CAAAA,KAAAA,EACZ,CACA,OAAOC,qBAAsBhB,CAAAA,CAAAA,CAA6B,CACxD,OAAI,CAACA,CAAOA,EAAAA,CAAAA,CAAId,SAAW,CAClB,CAAA,IAAA,CAQF,GANMc,CAAAA,CAAAA,CAAIE,IAAKC,CACb5B,EAAAA,CAAAA,CAAUsC,cAAeV,CAAAA,CAAAA,CAClC,CACiBE,CAAAA,MAAAA,CAAO,CAACC,CAAAA,CAAIC,IACpBD,CAAK,CAAA,IAAA,CAAOC,CACrB,CAAA,CACmB,GACrB,CACA,OAAOU,wBAAyBC,CAAAA,CAAAA,CAA+B,CAC7D,OAAKA,CAAAA,CAGDA,CAAU,GAAA,CAAA,CAAA,CACL,OAELA,CAAU,GAAA,CAAA,CAAA,CACL,OAEL,CAAA,OAAOA,GAAU,QACZA,CAAAA,CAAAA,CAAMC,QAAQ,EAAA,CAEhB,IAAMD,CAAMC,CAAAA,QAAAA,EAAa,CAAA,GAAA,CAXvB,IAYX,CACF,CAAA,CA3Ha5C,CAAAA,CAAAA,CAAAA,CAAAA,aAAAA,IAAAA,CAAAA,CAAN6C,ECFA,IAAMC,EAAN,MAAMA,CAAAA,CACXC,GAAAA,CAAc,EACdC,MAAiB,CAAA,EAAA,CAEjBC,WAAYD,CAAAA,CAAAA,CAAiB,IAAK,CAChC,IAAA,CAAKA,MAASA,CAAAA,EAChB,CACAE,gBAA2B,EAAA,CACzB,OAAO,IAAA,CAAKF,OAAS,IAAKD,CAAAA,GAAAA,EAC5B,CACAI,KAAAA,EAAQ,CACN,IAAKJ,CAAAA,GAAAA,CAAM,EACb,CACF,EAbaD,CAAAA,CAAAA,CAAAA,CAAAA,WAAN,CAAA,CAAA,IAAMA,EAANM,CAeMC,CAAAA,CAAAA,CAAN,MAAMA,CAAAA,CAIX,OAAOH,gBAAAA,CAAiBF,CAAiB,CAAA,GAAA,CAAa,CACpDK,OAAAA,CAAAA,CAAgBC,QAASN,CAAAA,CAAAA,EAClBK,CAAgBN,CAAAA,GAAAA,CAAKG,gBAAgB,EAC9C,CACA,OAAOC,KAAAA,CAAMH,CAAgB,CAAA,CAC3BK,EAAgBN,GAAMQ,CAAAA,KAAAA,CAAAA,CACtBF,CAAgBC,CAAAA,QAAAA,CAASN,CAAAA,EAC3B,CACA,OAAeM,QAAAA,CAASN,EAAgB,CACjCK,CAAAA,CAAgBN,GACnBM,GAAAA,CAAAA,CAAgBL,OAASA,CAAU,EAAA,GAAA,CACnCK,CAAgBN,CAAAA,GAAAA,CAAM,IAAID,CAAUO,CAAAA,CAAAA,CAAgBL,MAAM,CAAA,EAE9D,CACF,CAlBaK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,iBAAAA,CAAAA,CACXG,EADWH,CACJN,CAAAA,KAAAA,CAAAA,CACPS,CAFWH,CAAAA,CAAAA,CAEJL,SAAiB,GAFnB,CAAA,CAAA,IAAMK,CAANI,CAAAA,CAAAA,CCLA,IAAMC,CAAN,CAAA,MAAMA,CAAAA,CACXC,MAEAV,WAAYW,CAAAA,CAAAA,CAAmC,EAAC,CAAG,CACjDA,CAAUA,CAAAA,CAAAA,EAAW,EAAC,CACtB,KAAKD,KAAQ,CAAA,CACXE,EAAID,CAAAA,CAAAA,CAAQC,IAAMR,CAAgBH,CAAAA,gBAAAA,CAAiB,GAAA,CACrD,EACIU,CAAQE,CAAAA,QAAAA,GACV,IAAKH,CAAAA,KAAAA,CAAMG,SAAWF,CAAQE,CAAAA,QAAAA,EAElC,CACAtB,KAAAA,EAAgB,CACd,OAAO,IAAA,CAAKmB,KAAME,CAAAA,EACpB,CACAE,WAAsB,EAAA,CACpB,IAAMC,CAAAA,CAAO,KAAKf,WAAYL,CAAAA,QAAAA,EAAWqB,CAAAA,KAAAA,CAAM,MAAA,CAC/C,CAAA,OAAOD,CAAQA,EAAAA,CAAAA,CAAKrD,OAAS,CAAIqD,CAAAA,CAAAA,CAAK,CAAA,CAAA,CAAK,EAC7C,CACApB,QAAAA,EAAmB,CACjB,OAAO,KAAKmB,WAAW,EACzB,CAOAG,QAAAA,EAAoB,CAClB,OAAO,IAAA,CAAKH,WAAW,EAAA,CAAK,IAAM,IAAKvB,CAAAA,KAAAA,EACzC,CAIA2B,YAAYC,CAA6C,CAAA,CACvD,OAAKA,CAAAA,CAGE,KAAKF,QAAQ,EAAA,GAAOE,CAAEF,CAAAA,QAAAA,GAFpB,CAGX,CAAA,CAKAG,MAAOD,CAAAA,CAAAA,CAA0B,CAC/B,OAAKA,CAAAA,CAGE,IAAKE,CAAAA,QAAAA,KAAeF,CAAEE,CAAAA,QAAAA,EAFpB,CAAA,CAAA,CAGX,CAKAC,eAA0B,EAAA,CACxB,OAAOvE,CAAAA,CAAUM,YAAY,IAAKyD,CAAAA,WAAAA,EAAgB,CAAA,IAAA,CAAKvB,OAAK,CAC9D,CAIA8B,QAAAA,EAAmB,CACjB,IAAIE,CAAAA,CAAM,CACV,CAAA,OAAA,IAAA,CAAKpC,MAAMrC,CAAUsC,CAAAA,QAAAA,CAAWT,CAAAA,EAAAA,CAC9B4C,GAAO5C,CAAG2C,CAAAA,eAAAA,EACVC,CAAAA,CAAAA,CAAMA,GAAO,EACf,CAAA,CACOA,CAAAA,CACT,CAEApC,KAAMqC,CAAAA,CAAAA,CAAsBC,CAA0C,CAAA,CAChED,IAAc1E,CAAUsC,CAAAA,QAAAA,EAC1B,IAAKsC,CAAAA,SAAAA,CAAUD,CAAAA,CACf,CAAA,IAAA,CAAKE,aAAcH,CAAAA,CAAAA,CAAWC,CAAAA,CACrBD,EAAAA,CAAAA,GAAc1E,CAAU8E,CAAAA,SAAAA,GACjC,KAAKD,aAAcH,CAAAA,CAAAA,CAAWC,CAAAA,CAAAA,CAC9B,KAAKC,SAAUD,CAAAA,CAAAA,CAEnB,EAAA,CACA7C,QAAiB,CACf,IAAIM,CAAM,CAAA,GAAA,CACNa,EAAS,EACb,CAAA,IAAA,IAAW8B,CAAQ,IAAA,IAAA,CACjB,GACE/D,MAAOC,CAAAA,SAAAA,CAAUC,cAAeC,CAAAA,IAAAA,CAAK,KAAM4D,CAAAA,CAAAA,EAC3CA,CAAS,GAAA,OAAA,CACT,CACA,IAAMnC,CAAAA,CAAQ,IAAKmC,CAAAA,CAAAA,EACfC,CAAU,CAAA,EAAA,CACRC,CAAKhF,CAAAA,CAAAA,CAAUsB,eAAeqB,CAAAA,CAAAA,CAC9BsC,CAAQjF,CAAAA,CAAAA,CAAUuB,yBAAyBoB,CAAAA,CAAAA,CAC7CsC,CACFF,CAAAA,CAAAA,CAAU/E,EAAUwB,gBAAiByD,CAAAA,CAAAA,CAC5BD,CAAAA,CAAAA,CACTD,EAAUC,CAAGnD,CAAAA,MAAAA,EAEbkD,CAAAA,CAAAA,CAAUG,KAAKC,SAAUxC,CAAAA,CAAAA,CAE3BR,CAAAA,CAAAA,EAAOa,EAAS,GAAM8B,CAAAA,CAAAA,CAAO,IAAOC,CAAAA,CAAAA,CACpC/B,EAAS,IACX,CAEF,OAAOb,CAAAA,CAAM,GACf,CACAF,WAAAA,EAAsB,CACpB,IAAIE,EAAM,IAAK4B,CAAAA,WAAAA,GAAgB,GAAM,CAAA,IAAA,CAAKvB,OAAU,CAAA,CAAA;EACpD,IAAWsC,IAAAA,CAAAA,IAAQ,IACjB,CAAA,GACE/D,MAAOC,CAAAA,SAAAA,CAAUC,eAAeC,IAAK,CAAA,IAAA,CAAM4D,CAAAA,CAAAA,EAC3CA,CAAS,GAAA,OAAA,CACT,CACA,IAAMnC,CAAAA,CAAQ,IAAKmC,CAAAA,CAAAA,CACfC,CAAAA,CAAAA,CAAU,GACRC,CAAKhF,CAAAA,CAAAA,CAAUsB,cAAeqB,CAAAA,CAAAA,CAC9BsC,CAAAA,CAAAA,CAAQjF,EAAUuB,wBAAyBoB,CAAAA,CAAAA,CAC7CsC,CAAAA,CAAAA,CACFF,CAAU/E,CAAAA,CAAAA,CAAUyC,sBAAsBwC,CAAAA,CAAAA,CACjCD,CACTD,CAAAA,CAAAA,CAAU/E,CAAUsC,CAAAA,cAAAA,CAAe0C,CAAAA,CAEnCD,CAAAA,CAAAA,CAAU/E,CAAU0C,CAAAA,wBAAAA,CAAyBC,CAAAA,CAAAA,EAAU,GAEzDR,CAAO,EAAA,IAAA,CAAO2C,CAAO,CAAA,KAAA,CAAQC,CAAU,CAAA,CAAA;AACzC,EAAA,CAEF,OAAO5C,CAAM,CAAA,CAAA;CACf,CACQwC,SAAAA,CAAUD,CAAoC,CAAA,CACpDA,CAAO,CAAA,IAAI,EACb,CAEAE,aAAcH,CAAAA,CAAAA,CAAsBC,CAAoC,CAAA,EAIxEU,QAAAA,EAAwB,CACtB,OAAO,EACT,CACF,CAzIa1B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,kBAAAA,CAAAA,CAAAA,IAAAA,CAAAA,CAAN2B,ECHA,IAAMC,CAAN,CAAA,MAAMA,UAAkB5B,CAAAA,CAC7B6B,SACAC,CAAAA,OAAAA,CAAkB,GAElBvC,CAAAA,WAAAA,CAAYW,CAA4B,CAAA,EAAI,CAAA,CAC1C,KAAMA,CAAAA,CAAAA,CACFA,CAAAA,CAAAA,CAAQ2B,YACV,IAAKA,CAAAA,SAAAA,CAAY3B,CAAQ2B,CAAAA,SAAAA,CAAAA,CAEvB3B,CAAQ4B,CAAAA,OAAAA,GACV,IAAKA,CAAAA,OAAAA,CAAU5B,CAAQ4B,CAAAA,OAAAA,EAE3B,CACA5C,QAAAA,EAAmB,CACjB,OAAO,KAAKmB,WAAW,EAAA,CAAK,CAAI,CAAA,EAAA,IAAA,CAAKwB,SAAS,CAAA,IAAA,EAAO,IAAKC,CAAAA,OAAO,CACnE,CAAA,CACAJ,QAAqB,EAAA,CACnB,OAAO,EACT,CACF,CAAA,CAnB+B1B,CAAAA,CAAAA,CAAAA,CAAAA,WAAxB,CAAA,CAAA,IAAM4B,CAANG,CAAAA,ECLA,IAAMC,CAAAA,CAAN,MAAMA,CAAAA,CACXC,IAAAA,CACAC,QACAC,OACA/B,CAAAA,QAAAA,CAEAb,WACE0C,CAAAA,CAAAA,CAAkB7F,CAAUgG,CAAAA,KAAAA,CAC5BF,CACAC,CAAAA,CAAAA,CACA/B,CACA,CAAA,CACA,IAAK6B,CAAAA,IAAAA,CAAOA,CACZ,CAAA,IAAA,CAAKC,OAAUA,CAAAA,CAAAA,CACf,IAAKC,CAAAA,OAAAA,CAAUA,CACf,CAAA,IAAA,CAAK/B,QAAWA,CAAAA,EAClB,CACF,CAAA,CAjBa4B,CAAAA,CAAAA,CAAAA,CAAAA,WAAN,CAAA,CAAA,IAAMA,CAANK,CAAAA","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"]}