@dooboostore/dom-render
Version:
html view template engine
90 lines • 2.77 kB
JavaScript
export class Appender {
constructor(...defaultDatas) {
this.length = 0;
this.keyMap = new Map();
this.isAppender = true;
// console.log('defaultDatas', defaultDatas);
this.push(...defaultDatas);
// (this.childs as any).isAppender = true;
}
[Symbol.iterator]() {
const items = this.getAll();
let idx = 0;
return {
next(value) {
let r = { value: undefined, done: true };
if (items.length > idx) {
r = { value: items[idx], done: false };
}
idx++;
return r;
}
};
}
set(key, ...v) {
const o = this.keyMap.get(key);
// console.log('set!!', o);
if (o !== undefined) {
this[o] = v;
}
else {
this.keyMap.set(key, this.length);
// console.log('setPush', v)
this.push(...v);
}
}
delete(key) {
const o = this.keyMap.get(key);
if (o !== undefined) {
this[o] = [];
this.keyMap.delete(key);
// this.length--;
}
}
getAll() {
return this.getAlls().flat();
}
getAlls() {
const map = Array.from({ length: this.length }).filter((it, idx) => this[idx]).map((it, idx) => this[idx]);
return map;
}
push(...items) {
// console.log('----1>', items, items.length, this.length);
if (items && items.length > 0) {
items.index = this.length;
this[this.length++] = items;
// this[this.length] = [];
}
// console.log('----2>', items, items.length, this.length);
// console.log('---22->', this.length)
// const appender = this.childs[this.lastIndex];
// appender.values = items;
// this.childs.push(new Appender(appender.index + 1));
}
// delete(idx: number): void {
// // if (idx in this) {
// // console.log('---------dele',idx)
// // delete this[idx];
// // this.length = this.length - 1;
// // }
// this.length = this.length - 1;
// }
// 인덱스 접근을 위한 getter와 setter 추가
// get(index: number): T | undefined {
// return this.storage[index];
// }
//
// set(index: number, value: T): void {
// this.storage[index] = value;
// this.length = Math.max(this.length, index + 1);
// }
clear() {
// console.log('length', this.length);
for (let i = 0; i < this.length; i++) {
delete this[i];
}
this.keyMap.clear();
this.length = 0;
}
}
//# sourceMappingURL=Appender.js.map