UNPKG

mp-holistic

Version:

si prefigge l'umile compito di aiutare nella creazione di : - un server API REST mediante express - un semplice ORM per Postgres Questo tramite decoratori o classi particolari.

200 lines (184 loc) 7.23 kB
import { targetTerminale } from "./utility"; export interface IIntegraMeta { metaRif: IMeta } export interface IMeta { /** nome originale, non si dovrebbe mai configurare, fare con cura*/ nomeOriginale?: string; /** questo parametro è fondamentalmente configurabile, si consiglia pero di farlo concidere con quello del nome originale. da maneggiare con cura*/ nomeVariante?: string; } export interface ICompare { Compara(item1: IMeta, item2: IMeta): 0 | 1 | -1; } export class Meta implements IMeta, ICompare { nomeOriginale = ''; nomeVariante = ''; constructor(item: IMeta) { if (item.nomeVariante) this.nomeVariante = item.nomeVariante; else if (item.nomeOriginale) this.nomeVariante = item.nomeOriginale; if (item.nomeOriginale) this.nomeOriginale = item.nomeOriginale; } /* GetThis<T>() { return <T>(<any>this); } static GetThis<T>(item: Meta) { return <T>(<any>item); } */ /* GetThis?: (item: IMeta) => Meta; */ Compara(item: Meta): 0 | 1 | -1 { if (this.nomeOriginale != undefined && item.nomeOriginale != undefined) { if (this.nomeOriginale == item.nomeOriginale) return 0; else if (this.nomeOriginale > item.nomeOriginale) return 1; else if (this.nomeOriginale < item.nomeOriginale) return -1; } if (this.nomeVariante != undefined && item.nomeVariante != undefined) { if (this.nomeVariante == item.nomeVariante) return 0; else if (this.nomeVariante > item.nomeVariante) return 1; else if (this.nomeVariante < item.nomeVariante) return -1; } if (this.nomeOriginale != undefined && item.nomeVariante != undefined) { if (this.nomeOriginale == item.nomeVariante) return 0; else if (this.nomeOriginale > item.nomeVariante) return 1; else if (this.nomeOriginale < item.nomeVariante) return -1; } if (this.nomeVariante != undefined && item.nomeOriginale != undefined) { if (this.nomeVariante == item.nomeOriginale) return 0; else if (this.nomeVariante > item.nomeOriginale) return 1; else if (this.nomeVariante < item.nomeOriginale) return -1; } return 0; } /* Mergia?: (item: IMeta) => void; */ Mergia(item: Meta, funzioneMerge?: (item: Meta) => Meta) { if (funzioneMerge != undefined) { const tmp = funzioneMerge(item); this.nomeOriginale = tmp.nomeOriginale; this.nomeVariante = tmp.nomeVariante; } else { if (item.nomeOriginale != '' && item.nomeOriginale != undefined && (this.nomeOriginale == '' || this.nomeVariante == undefined) ) { this.nomeOriginale = item.nomeOriginale ?? this.nomeOriginale; } else if (this.nomeOriginale != '' && item.nomeOriginale != '' && this.nomeOriginale && item.nomeOriginale) { this.nomeOriginale = item.nomeOriginale; } if (item.nomeVariante != '' && item.nomeVariante != undefined && (this.nomeVariante == '' || this.nomeVariante == undefined) ) { this.nomeVariante = item.nomeVariante ?? this.nomeVariante; } else if (this.nomeVariante != '' && item.nomeVariante != '' && this.nomeVariante && item.nomeVariante) { this.nomeVariante = item.nomeVariante; } } } GetThis() { return this; } } export interface IsMerge { Mergia(item: ListaMeta): void } export class ListaMeta extends Array<Meta> implements IsMerge { constructor() { super(); } Mergia(item: ListaMeta) { for (let index = 0; index < item.length; index++) { const element = item[index]; const elementoCercato = this.Cerca(element); if (elementoCercato == undefined) { const tmp = element; this.push(tmp); } else { elementoCercato.Mergia(element); } } } CercaSeNoAggiungi(item: Meta) { let parametro = undefined; /* for (let index = 0; index < this.length && parametro == undefined; index++) { const element = this[index]; if (element.Compara(item) == 0) parametro = element; } if (parametro == undefined) { parametro = item; } */ parametro = item; const t = this.AggiungiElemento(parametro); return t; } Cerca(item: Meta): Meta | undefined { for (let index = 0; index < this.length; index++) { const element = this[index]; if (element.Compara(item) == 0) return element; } return undefined; } AggiungiElemento(item: Meta) { for (let index = 0; index < this.length; index++) { const element = this[index]; if (element.Compara(item) == 0) { element.Mergia(item); return element; } } this.push(item); return item; } } /* export function GetListaClasseMeta<T>(item?: number, ifEsiste?: () => T) { let tmp: T | undefined = undefined; if (item == undefined) { tmp = Reflect.getMetadata(nomeMetadataKeyTargetFor_Metadata, targetTerminale); if (tmp == undefined) { if (ifEsiste) tmp = ifEsiste(); } } else { tmp = Reflect.getMetadata(nomeMetadataKeyTargetFor_Express, targetTerminale); if (tmp == undefined) { if (ifEsiste) tmp = ifEsiste(); } } if (tmp == undefined) throw new Error('Boooo'); return tmp; } export function SalvaListaMetaClasse<T>(tmp: T, num?: number) { if (num == undefined) { Reflect.defineMetadata(nomeMetadataKeyTargetFor_Metadata, tmp, targetTerminale); } else { Reflect.defineMetadata(nomeMetadataKeyTargetFor_Express, tmp, targetTerminale); } } */ export function GetListaClasseMeta<T>(metaKey: metadataKey, ifNonEsiste?: () => T) { let tmp: T | undefined = undefined; tmp = Reflect.getMetadata(metaKey, targetTerminale); if (tmp == undefined) { if (ifNonEsiste) { tmp = ifNonEsiste(); } else { console.log('cc'); } } if (tmp == undefined) { throw new Error('Boooo'); } return <T>tmp; } export function SalvaListaMetaClasse(metaKey: metadataKey, item: ListaMeta) { Reflect.defineMetadata(metaKey, item, targetTerminale); /* if (item instanceof ListaMetadataClasse) { Reflect.defineMetadata(metaKey, item, targetTerminale); } else { Reflect.defineMetadata(metaKey, item, targetTerminale); } */ return undefined; } export type metadataKey = 'nomeMetadataKeyTargetFor_Metadata' | 'nomeMetadataKeyTargetFor_Express' | 'nomeMetadataKeyTargetFor_Postgres';