UNPKG

@dooboostore/dom-render

Version:
586 lines 31.7 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import 'reflect-metadata'; import { RawSet } from './rawsets/RawSet'; import { EventManager, eventManager } from './events/EventManager'; import { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils'; import { DomRenderFinalProxy, Shield } from './types/Types'; import { RawSetType } from './rawsets/RawSetType'; import { DrThisProperty } from './operators/DrThisProperty'; import { RawSetOperatorType } from './rawsets/RawSetOperatorType'; import { ComponentSet } from './components/ComponentSet'; import { DomRenderNoProxyKey } from './decorators/DomRenderNoProxy'; import { isOnCreateRender } from './lifecycle/OnCreateRender'; import { isOnInitRender } from './lifecycle/OnInitRender'; import { isOnCreateRenderData } from './lifecycle/OnCreateRenderData'; import { isOnChangeAttrRender } from './lifecycle/OnChangeAttrRender'; import { DocumentUtils } from '@dooboostore/core-web/document/DocumentUtils'; import { isDefined } from '@dooboostore/core/types'; import { isOnBeforeReturnSet } from './lifecycle/OnBeforeReturnSet'; import { isOnChildRenderedByProperty } from './lifecycle/OnChildRenderedByProperty'; const excludeGetSetPropertys = ['onBeforeReturnGet', 'onBeforeReturnSet', '__domrender_components', '__render', '_DomRender_isFinal', '_domRender_ref', '_rawSets', '_domRender_proxy', '_targets', '_DomRender_origin', '_DomRender_ref', '_DomRender_proxy']; export class DomRenderProxy { constructor(_domRender_origin, target, config) { this._domRender_origin = _domRender_origin; this.config = config; this._domRender_ref = new Map(); this._rawSets = new Map(); this._targets = new Set(); if (target) { this._targets.add(target); } } static unFinal(obj) { return DomRenderFinalProxy.unFinal(obj); } static final(obj) { return DomRenderFinalProxy.final(obj); } static isFinal(obj) { return DomRenderFinalProxy.isFinal(obj); } run(objProxy) { var _a; this._domRender_proxy = objProxy; (_a = objProxy === null || objProxy === void 0 ? void 0 : objProxy.onProxyDomRender) === null || _a === void 0 ? void 0 : _a.call(objProxy, this.config); const obj = objProxy._DomRender_origin; if (obj) { Object.keys(obj).forEach(it => { var _a, _b; // Reflect 메타데이터에서 domRender:NoProxy 여부 확인 try { const isNoProxy = Reflect.getMetadata(DomRenderNoProxyKey, obj, it) || Reflect.getMetadata(DomRenderNoProxyKey, Object.getPrototypeOf(obj).constructor); if (isNoProxy) { return obj; } } catch (e) { } const target = obj[it]; if (target !== undefined && target !== null && typeof target === 'object' && !DomRenderProxy.isFinal(target) && !Object.isFrozen(target) && !(obj instanceof Shield)) { const filter = (_b = (_a = this.config.proxyExcludeTyps) === null || _a === void 0 ? void 0 : _a.filter(it => target instanceof it)) !== null && _b !== void 0 ? _b : []; if (filter.length === 0) { const proxyAfter = this.proxy(objProxy, target, it); obj[it] = proxyAfter; } } }); } // console.log('target', this._targets); this._targets.forEach(target => { this.initRender(target); }); } initRender(target) { var _a, _b, _c; // if (target instanceof Element) { // target.setAttribute('dr-this', 'this'); // const rawSets = RawSet.checkPointCreates(target, this._domRender_proxy, this.config); // this.render(rawSets) // return; // } // if (target instanceof Element) { // 중요: 나를통해 이어진곳의 위치를 남겨야된다 안그러면 TargetElement는 알수 있는 방법이 없다. 여기서 흔적을 남겨줘야 한다. // const targetElementNames = (this.config.targetElements?.map(it => it.name.toLowerCase().replaceAll('.', '\\.')) ?? []).join(','); // Array.from(target.querySelectorAll(targetElementNames)).forEach(it => it.setAttribute(EventManager.parentVariablePathAttrName, '@this@')); target.innerHTML = target.innerHTML.replace(/@this@/g, 'this'); } // TODO: 한곳에서 처리 필요할듯.. 너무 산발적으로 있음. const onCreate = (_b = (_a = target).getAttribute) === null || _b === void 0 ? void 0 : _b.call(_a, RawSet.DR_ON_CREATE_ARGUMENTS_OPTIONNAME); let createParam = []; if (onCreate) { createParam = ScriptUtils.evalReturn(onCreate, this._domRender_proxy); if (!Array.isArray(createParam)) { createParam = [createParam]; } } if (isOnCreateRenderData(this._domRender_proxy)) { (_c = this._domRender_proxy) === null || _c === void 0 ? void 0 : _c.onCreateRenderData({ rootParent: this._domRender_proxy }); } if (isOnCreateRender(this._domRender_proxy)) { this._domRender_proxy.onCreateRender(...createParam); } // const innerHTML = (target as any).innerHTML ?? ''; this._targets.add(target); const rawSets = RawSet.checkPointCreates(target, this._domRender_proxy, this.config); // console.log('initRender -------rawSet', rawSets) // 중요 초기에 한번 튕겨줘야함. eventManager.applyEvent(this._domRender_proxy, eventManager.findAttrElements(target, this.config), this.config); rawSets.forEach(it => { const variables = it.getUsingTriggerVariables(this.config); if (variables.size <= 0) { this.addRawSet('', it); } else { variables.forEach(sit => { this.addRawSet(sit, it); }); } }); // console.log('1111111111111', this.getRawSets()); this.render(this.getRawSets()).then(it => { var _a, _b; // const render = {target} as Render; // const creatorMetaData = { // creator: this._domRender_proxy, // rootCreator: this._domRender_proxy, // innerHTML // } as CreatorMetaData; const onInit = (_b = (_a = target).getAttribute) === null || _b === void 0 ? void 0 : _b.call(_a, RawSet.DR_ON_INIT_ARGUMENTS_OPTIONNAME); let initParam; if (onCreate) { initParam = ScriptUtils.evalReturn(onCreate, this._domRender_proxy); // if (!Array.isArray(initParam)) { // initParam = [initParam]; // } } if (isOnInitRender(this._domRender_proxy)) { this._domRender_proxy.onInitRender(initParam, {}); } }); } getRawSets() { const set = new Set(); this._rawSets.forEach((v, k) => { v.forEach(it => set.add(it)); }); return Array.from(set); } // 중요 important render(raws, fullPathStr) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d, _e; if (typeof raws === 'string') { const iter = this._rawSets.get(raws); if (iter) { raws = Array.from(iter); } else { raws = undefined; } } const removeRawSets = []; const rawSets = raws !== null && raws !== void 0 ? raws : this.getRawSets(); // console.log('----', rawSets); for (const it of rawSets) { it.getUsingTriggerVariables(this.config).forEach(path => { // console.log('getUsingTriggerVariables->', path); this.addRawSet(path, it); }); if (it.isConnected) { // 중요 render될때 targetAttribute 체크 해야함. const targetAttrMap = (_b = (_a = it.point.node) === null || _a === void 0 ? void 0 : _a.getAttribute) === null || _b === void 0 ? void 0 : _b.call(_a, EventManager.normalAttrMapAttrName); // console.log('sssssssssSSS?',it, targetAttrMap) // console.log('----2', it, fullPathStr, targetAttrMap, (it.fragment as any).render, it.isConnected, this.getRawSets()); if ((_c = it.detect) === null || _c === void 0 ? void 0 : _c.action) { it.detect.action(); // } else if (it.type === RawSetType.TARGET_ELEMENT && it.data && fullPathStr && targetAttrMap && (it.fragment as any).render) { } else if (it.type === RawSetType.TARGET_ELEMENT && ((_e = (_d = it.dataSet) === null || _d === void 0 ? void 0 : _d.render) === null || _e === void 0 ? void 0 : _e.currentThis) && fullPathStr && targetAttrMap) { new Map(JSON.parse(targetAttrMap)).forEach((v, k) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; var _m; // it?.data.onChangeAttrRender(k, null, v); const isUsing = EventManager.isUsingThisVar(v, `this.${fullPathStr}`); if (isUsing) { const targetAttrObject = RawSet.getAttributeObject(it.point.node, { script: (_c = (_b = (_a = it.dataSet) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.renderScript) !== null && _c !== void 0 ? _c : '', obj: Object.assign(this._domRender_proxy, { __render: (_d = it.dataSet) === null || _d === void 0 ? void 0 : _d.render }) }); (_e = (_m = it.dataSet).render) !== null && _e !== void 0 ? _e : (_m.render = {}); it.dataSet.render.attribute = targetAttrObject; // const render = it.dataSet?.render; // console.log('render-->!!!!!', it.dataSet.render); // const script = `${render.renderScript} return ${v} `; // const cval = ScriptUtils.eval(script, Object.assign(this._domRender_proxy ?? {}, { __render: render })); if (isOnChangeAttrRender((_g = (_f = it.dataSet) === null || _f === void 0 ? void 0 : _f.render) === null || _g === void 0 ? void 0 : _g.currentThis)) { (_l = (_k = (_j = (_h = it.dataSet) === null || _h === void 0 ? void 0 : _h.render) === null || _j === void 0 ? void 0 : _j.currentThis) === null || _k === void 0 ? void 0 : _k.onChangeAttrRender) === null || _l === void 0 ? void 0 : _l.call(_k, k, targetAttrObject[k], { rawSet: it }); } } // console.log('---?', v, fullPathStr, isUsing); }); // -------------------> } else { const rawSets = yield it.render(this._domRender_proxy, this.config); // 그외 자식들 render if (rawSets && rawSets.length > 0) { yield this.render(rawSets); } } } else { removeRawSets.push(it); } } if (removeRawSets.length > 0) { this.removeRawSet(...removeRawSets); } return this.getRawSets(); }); } // domrender_ref로 찾는걸로 바꿈 // public findRootDomRenderProxy(): DomRenderProxy<any> { // let current:DomRenderProxy<any> = this; // while (current.parentProxy) { // current = current.parentProxy; // } // return current; // } root(pathInfos, value, lastDoneExecute = true) { // console.log('root--->', paths, value, this._domRender_ref, this._domRender_origin); const fullPaths = []; if (this._domRender_ref.size > 0) { this._domRender_ref.forEach((it, key) => { if ('_DomRender_isProxy' in key) { it.forEach(sit => { var _a; try { const concat = pathInfos.concat([[{ path: sit, obj: key }]]); const items = (_a = key._DomRender_proxy) === null || _a === void 0 ? void 0 : _a.root(concat, value, lastDoneExecute); fullPaths.push(items.flat()); // fullPaths.push({path: items.map(it=>it.path).join(','), obj: this._domRender_proxy}); // fullPaths.push({path: items.map(it=>it.path).join(','), obj: this._domRender_proxy}); } catch (e) { // 오브젝트들 없어졌을수도있다 Destroy시점에서 오류나는경우가 있다. 따라서 참조 하는부분 없어져야한다. // console.error(e) // it.delete(sit); } }); } }); } else { // const firstPathStr = paths.slice(1).reverse().join('.'); const strings = pathInfos.reverse().map(it => it.map(it => it.path).join(',')); // array같은경우도 키값으로 접근하기때문에 특정 인덱스를 찾아서 그부분만 바꿔줄수 있다. const fullPathStr = strings.map(it => isNaN(Number(it)) ? '.' + it : `[${it}]`).join('').slice(1); // console.log('-------fullPathStr', fullPathStr, lastDoneExecute); if (lastDoneExecute) { // const firstData = ScriptUtils.evalReturn('this.' + firstPathStr, this._domRender_proxy); // console.log('-------', firstPathStr, firstData); // if (firstData instanceof Dictionary) { // } const iterable = this._rawSets.get(fullPathStr); // array check const front = strings.slice(0, strings.length - 1).map(it => isNaN(Number(it)) ? '.' + it : `[${it}]`).join(''); const lastPropertyName = strings[strings.length - 1]; const path = 'this' + front; const data = ScriptUtils.evalReturn(path, this._domRender_proxy); // console.log('root-->', this._rawSets, path, data ); // console.log('--!!!!', fullPathStr, iterable, data, front, last); // 왜여기서 promise를 했을까를 생각해보면......훔.. 변수변경과 화면 뿌려주는걸 동기로하면 성능이 안나오고 비현실적이다. 그래서 promise new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { let rData = []; const firstPathStr = front.slice(1); // check dictionary // console.log('-promise-------', firstPathStr, this) const firstTargets = this._rawSets.get(firstPathStr); const firstTargetDictionary = []; firstTargets === null || firstTargets === void 0 ? void 0 : firstTargets.forEach(it => { var _a, _b; // console.log('----forEach---', it); const type = (_b = (_a = it.point.start).getAttribute) === null || _b === void 0 ? void 0 : _b.call(_a, 'type'); if (type === RawSetOperatorType.DR_THIS_PROPERTY) { firstTargetDictionary.push(it); } }); if (firstTargetDictionary.length > 0) { // console.log('ddddddddddd', firstTargetDictionary); const rawSets = []; let skip = false; firstTargetDictionary.forEach(it => { var _a, _b; const startElement = it.point.start; const keys = (_b = (_a = startElement.getAttribute(RawSet.DR_HAS_KEYS_OPTIONNAME)) === null || _a === void 0 ? void 0 : _a.split(',')) !== null && _b !== void 0 ? _b : []; if (value === undefined) { const rawSet = it.getHasRawSet(lastPropertyName); rawSet === null || rawSet === void 0 ? void 0 : rawSet.remove(); startElement.setAttribute(RawSet.DR_HAS_KEYS_OPTIONNAME, keys.filter(it => it !== lastPropertyName).join(',')); } if (!keys.includes(lastPropertyName)) { const raws = DrThisProperty.append(this._domRender_proxy, fullPathStr, lastPropertyName, it, this.config); if (raws) { rawSets.push(...raws); } } else { skip = true; } }); if (skip === false || rawSets.length > 0) { rData = yield this.render(rawSets); } } if (lastPropertyName === 'length' && Array.isArray(data)) { const aIterable = this._rawSets.get(firstPathStr); if (aIterable) { rData = yield this.render(Array.from(aIterable)); } } else if (iterable) { rData = yield this.render(Array.from(iterable), fullPathStr); } // console.log('-----------', this, lastPropertyName ); // this._targets.forEach(it => { // // return; // if (it.nodeType === Node.DOCUMENT_FRAGMENT_NODE || it.nodeType === Node.ELEMENT_NODE) { // const targets = eventManager.findAttrElements((it as DocumentFragment | Element), this.config); // eventManager.changeVar(this._domRender_proxy, targets, `this.${fullPathStr}`, this.config); // } // }); this._targets.forEach(it => { // return; if (it.nodeType === Node.DOCUMENT_FRAGMENT_NODE || it.nodeType === Node.ELEMENT_NODE) { const targets = eventManager.findAttrElements(it, this.config); eventManager.changeVar(this._domRender_proxy, targets, `this.${fullPathStr}`, this.config); } }); //랜더대상된게있으면 if ((rData === null || rData === void 0 ? void 0 : rData.length) > 0 && isOnChildRenderedByProperty(data)) { const propertyValue = ScriptUtils.evalReturn(`this.${lastPropertyName}`, data); data.onChildRenderedByProperty(lastPropertyName, propertyValue); // data } resolve(rData); })).then(it => { // console.log('DonrenderProxy root RenderDone') }); } fullPaths.push([{ path: fullPathStr, obj: this._domRender_proxy }]); } // console.log('dddddd', fullPaths.flatMap(it=>it).map(it=>it.path)) return fullPaths; } set(target, p, value, receiver) { // console.log('set------->', target, p, value, receiver, Date.now()) // console.log('set------->', target, p, value, receiver, Date.now()) // try { // const isNoProxy = Reflect.getMetadata(DomRenderNoProxyKey, target, p) || Reflect.getMetadata(DomRenderNoProxyKey, Object.getPrototypeOf(obj).constructor); // if (isNoProxy) { // return obj; // } // }catch (e) {} var _a, _b, _c, _d; // console.log('set-->', p, value, target, receiver, Reflect.getMetadata(DomRenderNoProxyKey, target, p) ); if ((typeof p === 'string' && p !== '__domrender_components' && excludeGetSetPropertys.includes(p)) || Reflect.getMetadata(DomRenderNoProxyKey, target, p)) { target[p] = value; return true; } // const old = (target as any)[p]; // console.log('set proxy-->', target, p, value, this._rawSets, this._domRender_ref); // if (typeof p === 'string' && '__render' === p) { // (target as any)[p] = value; // return true; // } // console.log('set--?', p, target, value); if (typeof p === 'string') { value = this.proxy(receiver, value, p); } // console.log('set typeChecked', (target as any)[p] instanceof ComponentSet, value instanceof ComponentSet); // if ((target as any)[p] instanceof ComponentSet) { // (target as any)[p]?.obj?.onDrThisUnBind?.(); // } // is ComponentSet if ((value instanceof ComponentSet) && (target[p] instanceof ComponentSet)) { value.config.beforeComponentSet = target[p]; } target[p] = value; let fullPathInfo = []; if (typeof p === 'string') { fullPathInfo = this.root([[{ path: p, obj: this._domRender_proxy }]], value); } // console.log('setRooot', fullPathInfo); //normal attribute 또한 링크랑 같은 증세라서 이렇게 해줘야한다!! // const rootDomRenderProxy = this.findRootDomRenderProxy(); // console.log('set!!!!!!!', fullPathInfo, rootDomRenderProxy) // console.log('--------rootDom',fullPathInfo, rootDomRenderProxy, rootDomRenderProxy._domRender_proxy) (_a = DocumentUtils.querySelectorAllByAttributeName(this.config.window.document, EventManager.normalAttrMapAttrName)) === null || _a === void 0 ? void 0 : _a.forEach(elementInfo => { const targets = new Map(ScriptUtils.evalReturn(elementInfo.value)); Array.from(targets.entries()).filter(([key, value]) => value.trim()).filter(isDefined).flatMap(([key, valueScript]) => { return fullPathInfo.flat().filter(it => valueScript.includes(`this.${it.path}`)).flatMap(it => ({ key, valueScript: valueScript, pathInfo: it })); }).forEach(it => { const value1 = ScriptUtils.evalReturn(it.valueScript, it.pathInfo.obj); // console.log('proxy set!Attribut======', it.key, value1) if (value1 === null) { elementInfo.element.removeAttribute(it.key); elementInfo.element[it.key] = null; } else { elementInfo.element.setAttribute(it.key, value1); elementInfo.element[it.key] = value1; } }); }); // 여기서 링크 같은거 해줘야함 (_b = DocumentUtils.querySelectorAllByAttributeName(this.config.window.document, EventManager.linkTargetMapAttrName)) === null || _b === void 0 ? void 0 : _b.forEach(elementInfo => { const targets = new Map(ScriptUtils.evalReturn(elementInfo.value)); Array.from(targets.entries()).filter(([key, value]) => value.trim()).filter(isDefined).flatMap(([key, valueScript]) => { return fullPathInfo.flat().filter(it => valueScript.includes(`this.${it.path}`)).flatMap(it => ({ key, valueScript: valueScript, pathInfo: it })); }).forEach(info => { const value1 = ScriptUtils.evalReturn(info.valueScript, info.pathInfo.obj); if (value1 === null) { elementInfo.element.removeAttribute(info.key); } else { elementInfo.element.setAttribute(info.key, value1); } }); Array.from(targets.entries()).filter(([key, value]) => value.trim()).filter(isDefined).flatMap(([key, valueScript]) => { return fullPathInfo.flat().filter(it => valueScript.includes(`this.${it.path}`)).flatMap(it => ({ key, valueScript: valueScript, pathInfo: it })); }).forEach(info => { const linkInfo = EventManager.linkAttrs.find(it => it.name === info.key); if (linkInfo) { elementInfo.element[linkInfo.property] = value; } }); }); if (('onBeforeReturnSet' in receiver) && typeof p === 'string' && !((_c = this.config.proxyExcludeOnBeforeReturnSets) !== null && _c !== void 0 ? _c : []).concat(excludeGetSetPropertys).includes(p)) { if (isOnBeforeReturnSet(receiver)) { (_d = receiver.onBeforeReturnSet) === null || _d === void 0 ? void 0 : _d.call(receiver, p, value, fullPathInfo.map(it => it.map(it => it.path).join())); } } return true; } get(target, p, receiver) { var _a, _b; // console.log('get-->', target, p, receiver); if (p === '_DomRender_origin') { return this._domRender_origin; } else if (p === '_DomRender_ref') { return this._domRender_ref; } else if (p === '_DomRender_proxy') { return this; } else { // Date라던지 이런놈들은-_-프록시가 이상하게 동작해서 // console.log('--->', p, target, target.bind, 'bind' in target) // if ((p in target) && ('bind' in target)) { // try{ // return (target as any)[p].bind(target); // }catch (e) { // console.error(e) // } // } else { // return (target as any)[p] // } // return (p in target) ? (target as any)[p].bind(target) : (target as any)[p] // console.log('-->', p, Object.prototype.toString.call((target as any)[p]), (target as any)[p]) // return (target as any)[p] let it = target[p]; if (it && typeof it === 'object' && ('_DomRender_isProxy' in it) && Object.prototype.toString.call(it._DomRender_origin) === '[object Date]') { it = it._DomRender_origin; } if (('onBeforeReturnGet' in receiver) && typeof p === 'string' && !((_a = this.config.proxyExcludeOnBeforeReturnGets) !== null && _a !== void 0 ? _a : []).concat(excludeGetSetPropertys).includes(p)) { (_b = receiver === null || receiver === void 0 ? void 0 : receiver.onBeforeReturnGet) === null || _b === void 0 ? void 0 : _b.call(receiver, p, it, this.root([[{ path: p, obj: this._domRender_proxy }]], it, false)); } return it; } } deleteProperty(target, p) { delete target[p]; if (typeof p === 'string') { this.root([[{ path: p, obj: this._domRender_proxy }]]); } return true; } has(target, p) { return p === '_DomRender_isProxy' || p in target; } proxy(parentProxy, obj, p) { var _a, _b; try { const isNoProxy = Reflect.getMetadata(DomRenderNoProxyKey, obj, p) || Reflect.getMetadata(DomRenderNoProxyKey, Object.getPrototypeOf(obj).constructor); if (isNoProxy) { return obj; } } catch (e) { } const proxyTarget = ((_b = (_a = this.config.proxyExcludeTyps) === null || _a === void 0 ? void 0 : _a.filter(it => obj instanceof it)) !== null && _b !== void 0 ? _b : []).length <= 0; if (proxyTarget && obj !== undefined && obj !== null && typeof obj === 'object' && !('_DomRender_isProxy' in obj) && !DomRenderProxy.isFinal(obj) && !Object.isFrozen(obj) && !(obj instanceof Shield)) { const domRender = new DomRenderProxy(obj, undefined, this.config); domRender.addRef(parentProxy, p); const proxy = new Proxy(obj, domRender); domRender.run(proxy); return proxy; } if (proxyTarget && obj !== undefined && obj !== null && typeof obj === 'object' && ('_DomRender_isProxy' in obj) && !DomRenderProxy.isFinal(obj) && !Object.isFrozen(obj) && !(obj instanceof Shield)) { const d = obj._DomRender_proxy; d.addRef(this._domRender_proxy, p); return obj; } else { return obj; } } addRef(parent, path) { var _a; if (!this._domRender_ref.get(parent)) { this._domRender_ref.set(parent, new Set()); } (_a = this._domRender_ref.get(parent)) === null || _a === void 0 ? void 0 : _a.add(path); } addRawSetAndRender(path, rawSet) { this.addRawSet(path, rawSet); this.render([rawSet]); } addRawSet(path, rawSet) { var _a; // console.log('addRawSet--> path:', path, 'rawSet:', rawSet) if (!this._rawSets.get(path)) { this._rawSets.set(path, new Set()); } (_a = this._rawSets.get(path)) === null || _a === void 0 ? void 0 : _a.add(rawSet); } // public removeRawSet(...raws: RawSet[]) { // this._rawSets.forEach(it => { // raws.forEach(sit => it.delete(sit)); // }) // this.garbageRawSet(); // } removeRawSet(...raws) { this._rawSets.forEach(it => { it.forEach(sit => { if (!sit.isConnected) { it.delete(sit); } else if (raws.includes(sit)) { it.delete(sit); } }); }); this.targetGarbageRawSet(); } targetGarbageRawSet() { this._targets.forEach(it => { if (!it.isConnected) { this._targets.delete(it); } }); } garbageRawSet() { this._targets.forEach(it => { if (!it.isConnected) { this._targets.delete(it); } }); this._rawSets.forEach(it => { it.forEach(sit => { if (!sit.isConnected) { it.delete(sit); } }); }); } } //# sourceMappingURL=DomRenderProxy.js.map