@dipscope/type-manager
Version:
Transform JSON strings or plain objects into JS class instances.
58 lines • 2.09 kB
JavaScript
export class TypeScope {
constructor() {
this.opened = false;
this.propertyOptionsArrayMap = new Map();
this.injectOptionsArrayMap = new Map();
return;
}
open() {
this.opened = true;
this.propertyOptionsArrayMap.clear();
this.injectOptionsArrayMap.clear();
return this;
}
addPropertyOptions(propertyName, propertyOptions) {
if (!this.opened) {
return this;
}
let propertyOptionsArray = this.propertyOptionsArrayMap.get(propertyName);
if (propertyOptionsArray === undefined) {
propertyOptionsArray = new Array();
this.propertyOptionsArrayMap.set(propertyName, propertyOptionsArray);
}
propertyOptionsArray.push(propertyOptions);
return this;
}
addInjectOptions(injectIndex, injectOptions) {
if (!this.opened) {
return this;
}
let injectOptionsArray = this.injectOptionsArrayMap.get(injectIndex);
if (injectOptionsArray === undefined) {
injectOptionsArray = new Array();
this.injectOptionsArrayMap.set(injectIndex, injectOptionsArray);
}
injectOptionsArray.push(injectOptions);
return this;
}
close(typeMetadata) {
if (!this.opened) {
return this;
}
for (const [propertyName, propertyOptionsArray] of this.propertyOptionsArrayMap) {
for (let i = 0; i < propertyOptionsArray.length; i++) {
typeMetadata.configurePropertyMetadata(propertyName, propertyOptionsArray[i]);
}
}
for (const [injectIndex, injectOptionsArray] of this.injectOptionsArrayMap) {
for (let i = 0; i < injectOptionsArray.length; i++) {
typeMetadata.configureInjectMetadata(injectIndex, injectOptionsArray[i]);
}
}
this.injectOptionsArrayMap.clear();
this.propertyOptionsArrayMap.clear();
this.opened = false;
return this;
}
}
//# sourceMappingURL=type-scope.js.map