@dooboostore/dom-render 1.0.108 → 1.0.109

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.MD +27 -1451
  2. package/dist/cjs/DomRender.js +41 -26
  3. package/dist/cjs/DomRender.js.map +2 -2
  4. package/dist/cjs/DomRenderProxy.js +12 -5
  5. package/dist/cjs/DomRenderProxy.js.map +2 -2
  6. package/dist/cjs/bundle-entry.js +32 -21
  7. package/dist/cjs/bundle-entry.js.map +2 -2
  8. package/dist/cjs/components/ComponentBase.js +20 -2
  9. package/dist/cjs/components/ComponentBase.js.map +2 -2
  10. package/dist/cjs/components/ComponentRouterBase.js +11 -1
  11. package/dist/cjs/components/ComponentRouterBase.js.map +2 -2
  12. package/dist/cjs/components/choose/Choose.js +4 -0
  13. package/dist/cjs/components/choose/Choose.js.map +2 -2
  14. package/dist/cjs/components/router/RouterOutlet.js +15 -1
  15. package/dist/cjs/components/router/RouterOutlet.js.map +2 -2
  16. package/dist/cjs/components/select/Select.js +20 -6
  17. package/dist/cjs/components/select/Select.js.map +2 -2
  18. package/dist/cjs/components/timer/Timer.js +14 -11
  19. package/dist/cjs/components/timer/Timer.js.map +2 -2
  20. package/dist/cjs/decorators/DomRenderNoProxy.js +2 -1
  21. package/dist/cjs/decorators/DomRenderNoProxy.js.map +2 -2
  22. package/dist/cjs/lifecycle/OnRawSetRendered.js +26 -0
  23. package/dist/cjs/lifecycle/OnRawSetRendered.js.map +7 -0
  24. package/dist/cjs/lifecycle/index.js +1 -0
  25. package/dist/cjs/lifecycle/index.js.map +2 -2
  26. package/dist/cjs/operators/DrTargetElement.js +2 -0
  27. package/dist/cjs/operators/DrTargetElement.js.map +2 -2
  28. package/dist/cjs/operators/OperatorExecuter.js +1 -2
  29. package/dist/cjs/operators/OperatorExecuter.js.map +2 -2
  30. package/dist/cjs/package.json +5 -0
  31. package/dist/cjs/rawsets/RawSet.js +154 -74
  32. package/dist/cjs/rawsets/RawSet.js.map +3 -3
  33. package/dist/cjs/rawsets/Render.js.map +1 -1
  34. package/dist/cjs/routers/Router.js +31 -15
  35. package/dist/cjs/routers/Router.js.map +3 -3
  36. package/dist/esm/DomRender.js +41 -26
  37. package/dist/esm/DomRender.js.map +2 -2
  38. package/dist/esm/DomRenderProxy.js +12 -5
  39. package/dist/esm/DomRenderProxy.js.map +2 -2
  40. package/dist/esm/bundle-entry.js +22 -21
  41. package/dist/esm/bundle-entry.js.map +2 -2
  42. package/dist/esm/components/ComponentBase.js +20 -2
  43. package/dist/esm/components/ComponentBase.js.map +2 -2
  44. package/dist/esm/components/ComponentRouterBase.js +11 -1
  45. package/dist/esm/components/ComponentRouterBase.js.map +2 -2
  46. package/dist/esm/components/choose/Choose.js +4 -0
  47. package/dist/esm/components/choose/Choose.js.map +2 -2
  48. package/dist/esm/components/router/RouterOutlet.js +16 -2
  49. package/dist/esm/components/router/RouterOutlet.js.map +2 -2
  50. package/dist/esm/components/select/Select.js +20 -6
  51. package/dist/esm/components/select/Select.js.map +2 -2
  52. package/dist/esm/components/timer/Timer.js +14 -11
  53. package/dist/esm/components/timer/Timer.js.map +2 -2
  54. package/dist/esm/decorators/DomRenderNoProxy.js +2 -1
  55. package/dist/esm/decorators/DomRenderNoProxy.js.map +2 -2
  56. package/dist/esm/lifecycle/OnRawSetRendered.js +7 -0
  57. package/dist/esm/lifecycle/OnRawSetRendered.js.map +7 -0
  58. package/dist/esm/lifecycle/index.js +1 -0
  59. package/dist/esm/lifecycle/index.js.map +2 -2
  60. package/dist/esm/operators/DrTargetElement.js +2 -0
  61. package/dist/esm/operators/DrTargetElement.js.map +2 -2
  62. package/dist/esm/operators/OperatorExecuter.js +1 -2
  63. package/dist/esm/operators/OperatorExecuter.js.map +2 -2
  64. package/dist/esm/rawsets/RawSet.js +154 -74
  65. package/dist/esm/rawsets/RawSet.js.map +3 -3
  66. package/dist/esm/routers/Router.js +31 -15
  67. package/dist/esm/routers/Router.js.map +3 -3
  68. package/dist/esm-bundle/dooboostore-dom-render.esm.js +12586 -6496
  69. package/dist/esm-bundle/dooboostore-dom-render.esm.js.map +4 -4
  70. package/dist/types/DomRender.d.ts +11 -5
  71. package/dist/types/DomRender.d.ts.map +1 -1
  72. package/dist/types/DomRenderProxy.d.ts.map +1 -1
  73. package/dist/types/bundle-entry.d.ts +5 -2
  74. package/dist/types/bundle-entry.d.ts.map +1 -1
  75. package/dist/types/components/ComponentBase.d.ts +7 -1
  76. package/dist/types/components/ComponentBase.d.ts.map +1 -1
  77. package/dist/types/components/ComponentRouterBase.d.ts +8 -0
  78. package/dist/types/components/ComponentRouterBase.d.ts.map +1 -1
  79. package/dist/types/components/choose/Choose.d.ts.map +1 -1
  80. package/dist/types/components/index.d.ts +2 -1
  81. package/dist/types/components/index.d.ts.map +1 -1
  82. package/dist/types/components/router/RouterOutlet.d.ts +5 -1
  83. package/dist/types/components/router/RouterOutlet.d.ts.map +1 -1
  84. package/dist/types/components/select/Select.d.ts +2 -2
  85. package/dist/types/components/select/Select.d.ts.map +1 -1
  86. package/dist/types/components/timer/Timer.d.ts +5 -3
  87. package/dist/types/components/timer/Timer.d.ts.map +1 -1
  88. package/dist/types/decorators/DomRenderNoProxy.d.ts.map +1 -1
  89. package/dist/types/index.d.ts +1 -0
  90. package/dist/types/lifecycle/OnRawSetRendered.d.ts +10 -0
  91. package/dist/types/lifecycle/OnRawSetRendered.d.ts.map +1 -0
  92. package/dist/types/lifecycle/index.d.ts +1 -0
  93. package/dist/types/lifecycle/index.d.ts.map +1 -1
  94. package/dist/types/operators/DrTargetElement.d.ts.map +1 -1
  95. package/dist/types/operators/OperatorExecuter.d.ts.map +1 -1
  96. package/dist/types/rawsets/RawSet.d.ts +11 -4
  97. package/dist/types/rawsets/RawSet.d.ts.map +1 -1
  98. package/dist/types/rawsets/Render.d.ts +1 -0
  99. package/dist/types/rawsets/Render.d.ts.map +1 -1
  100. package/dist/types/routers/Router.d.ts +2 -3
  101. package/dist/types/routers/Router.d.ts.map +1 -1
  102. package/dist/umd-bundle/dooboostore-dom-render.umd.js +12600 -6529
  103. package/dist/umd-bundle/dooboostore-dom-render.umd.js.map +4 -4
  104. package/package.json +6 -5
  105. package/src/DomRender.ts +62 -34
  106. package/src/DomRenderProxy.ts +20 -8
  107. package/src/bundle-entry.ts +5 -3
  108. package/src/components/ComponentBase.ts +29 -7
  109. package/src/components/ComponentRouterBase.ts +17 -2
  110. package/src/components/choose/Choose.ts +4 -0
  111. package/src/components/router/RouterOutlet.ts +25 -5
  112. package/src/components/select/Select.ts +40 -26
  113. package/src/components/timer/Timer.ts +19 -51
  114. package/src/decorators/DomRenderNoProxy.ts +3 -1
  115. package/src/lifecycle/OnRawSetRendered.ts +15 -0
  116. package/src/lifecycle/index.ts +1 -0
  117. package/src/operators/DrTargetElement.ts +14 -0
  118. package/src/operators/OperatorExecuter.ts +1 -2
  119. package/src/rawsets/RawSet.ts +572 -257
  120. package/src/rawsets/Render.ts +1 -0
  121. package/src/routers/Router.ts +40 -23
  122. package/types.d.ts +68 -20
@@ -1,6 +1,5 @@
1
1
  import { RandomUtils } from '@dooboostore/core/random/RandomUtils';
2
2
  import { StringUtils } from '@dooboostore/core/string/StringUtils';
3
- import { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';
4
3
  import { EventManager } from '../events/EventManager';
5
4
  import type { DomRenderConfig } from '../configs/DomRenderConfig';
6
5
  import { Range } from '../iterators/Range';
@@ -9,7 +8,7 @@ import { ComponentSet } from '../components/ComponentSet';
9
8
  import { DrPre } from '../operators/DrPre';
10
9
  import { Dr } from '../operators/Dr';
11
10
  import { DrIf } from '../operators/DrIf';
12
- import { ExecuteState } from '../operators/OperatorExecuter';
11
+ import { ExecuteState, OperatorExecuter } from '../operators/OperatorExecuter';
13
12
  import { DrThis } from '../operators/DrThis';
14
13
  import { DrForm } from '../operators/DrForm';
15
14
  import { DrInnerText } from '../operators/DrInnerText';
@@ -40,8 +39,11 @@ import { isOnCreatedThisChild } from '../lifecycle/OnCreatedThisChild';
40
39
  import { isOnDestroyRender, OnDestroyRenderParams } from '../lifecycle/OnDestroyRender';
41
40
  import { DrTargetElementIsElement } from '../operators/DrTargetElementIsElement';
42
41
  import { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';
42
+ import { NodeUtils } from '@dooboostore/core-web/node/NodeUtils';
43
43
 
44
44
 
45
+ export type RenderResult = { raws: RawSet[]; executedOperators: OperatorExecuter[] };
46
+
45
47
  export class RawSet {
46
48
  public static readonly DR_NAME = 'dr';
47
49
  public static readonly DR_IF_NAME = 'dr-if';
@@ -64,7 +66,6 @@ export class RawSet {
64
66
  public static readonly DR_DETECT_FILTER_OPTIONNAME = 'dr-detect-option-filter';
65
67
  public static readonly DR_DETECT_ATTR_OPTIONNAME = 'dr-detect-option-attr';
66
68
 
67
-
68
69
  /**
69
70
  * @deprecated
70
71
  */
@@ -146,27 +147,28 @@ export class RawSet {
146
147
  RawSet.DR_INNERTEXT_NAME,
147
148
  RawSet.DR_REPEAT_NAME,
148
149
  RawSet.DR_DETECT_NAME,
149
- RawSet.DR_STRIP_NAME,
150
+ RawSet.DR_STRIP_NAME
150
151
  ] as const;
151
152
 
152
153
  constructor(
153
154
  public uuid: string,
154
155
  public type: RawSetType,
155
156
  public point: {
156
- start: (Comment | Text | HTMLMetaElement),
157
- node: Node,
158
- end: Comment | Text | HTMLMetaElement,
157
+ start: Comment | Text | HTMLMetaElement;
158
+ node: Node;
159
+ end: Comment | Text | HTMLMetaElement;
160
+ innerHTML?: string;
159
161
  // thisVariableName?: string | null,
160
- parent?: Node | null,
161
- parentRawSet?: RawSet,
162
- childrenRawSets?: RawSet[]
162
+ parent?: Node | null;
163
+ parentRawSet?: RawSet;
164
+ childrenRawSets?: RawSet[];
163
165
  },
164
166
  public dataSet: {
165
167
  config: DomRenderConfig;
166
- fragment: DocumentFragment,
168
+ fragment: DocumentFragment;
167
169
  render?: Render;
168
170
  },
169
- public detect?: { action: Function },
171
+ public detect?: { action: Function }
170
172
  ) {
171
173
  // point.start.rawSet = this;
172
174
  // console.log('rawset constructor->', (this.point.node as Element).getAttributeNames());
@@ -174,7 +176,7 @@ export class RawSet {
174
176
 
175
177
  get isConnected() {
176
178
  // console.log('isConnect???', this, this.point.start.isConnected, this.point.end.isConnected);
177
- return this.point.start.isConnected && this.point.end.isConnected;
179
+ return this.point && this.point.start && this.point.end && this.point.start.isConnected && this.point.end.isConnected;
178
180
  }
179
181
 
180
182
  // 중요
@@ -186,17 +188,24 @@ export class RawSet {
186
188
  let script = '';
187
189
  if (cNode.nodeType === Node.TEXT_NODE) {
188
190
  script = `\`${(cNode as Text).textContent ?? ''}\``;
189
- const expressionGroups = RawSet.expressionGroups(script)
191
+ const expressionGroups = RawSet.expressionGroups(script);
190
192
  // console.log('???????', script, expressionGroups)
191
- if (expressionGroups[0].length >1) {
193
+ if (expressionGroups[0].length > 1) {
192
194
  script = expressionGroups[0][1] as string;
193
195
  }
194
196
  // console.log('--', expressionGroups, script)
195
197
  } else if (cNode.nodeType === Node.ELEMENT_NODE) {
196
198
  const element = cNode as Element;
197
- const targetAttrNames = (config?.targetAttrs?.map(it => it.name) ?? [])
198
- .concat(RawSet.DR_ATTRIBUTES, RawSet.DR_DETECT_FILTER_OPTIONNAME, RawSet.DR_DETECT_IF_OPTIONNAME, RawSet.DR_DETECT_ATTR_OPTIONNAME); // .concat(EventManager.normalAttrMapAttrName);
199
- const targetScripts = targetAttrNames.map(it => element.getAttribute(it)).filter(it => it).map(it=>`(${it})`);
199
+ const targetAttrNames = (config?.targetAttrs?.map(it => it.name) ?? []).concat(
200
+ RawSet.DR_ATTRIBUTES,
201
+ RawSet.DR_DETECT_FILTER_OPTIONNAME,
202
+ RawSet.DR_DETECT_IF_OPTIONNAME,
203
+ RawSet.DR_DETECT_ATTR_OPTIONNAME
204
+ ); // .concat(EventManager.normalAttrMapAttrName);
205
+ const targetScripts = targetAttrNames
206
+ .map(it => element.getAttribute(it))
207
+ .filter(it => it)
208
+ .map(it => `(${it})`);
200
209
  const targetAttrMap = element.getAttribute(EventManager.normalAttrMapAttrName);
201
210
  // console.log('targetAttrMap-->', targetAttrMap)
202
211
  if (targetAttrMap) {
@@ -218,7 +227,6 @@ export class RawSet {
218
227
  // script += ';' + otherAttrs
219
228
  }
220
229
  if (script) {
221
-
222
230
  // console.log('------1-',script)
223
231
  script = script.replace(/#[^#]*#/g, '({})');
224
232
  // console.log('------2-',script)
@@ -237,7 +245,9 @@ export class RawSet {
237
245
  // script = script.replaceAll('#{','${').replaceAll('}#', '}')
238
246
  // console.log('--------2--', script);
239
247
  // TODO: 훔.. 꼭필요한가..? 트리거될때 스크립트변수 까지 감지해야될까?
240
- Array.from(ObjectUtils.Path.detectPathFromScript(script,{excludeThis: true})).filter(it => !it.startsWith(`___${EventManager.SCRIPTS_VARNAME}`)).forEach(it => usingTriggerVariables.add(it));
248
+ Array.from(ObjectUtils.Path.detectPathFromScript(script, { excludeThis: true }))
249
+ .filter(it => !it.startsWith(`___${EventManager.SCRIPTS_VARNAME}`))
250
+ .forEach(it => usingTriggerVariables.add(it));
241
251
  }
242
252
  });
243
253
  // console.log('usingTriggerVariable----------->', usingTriggerVariables)
@@ -245,7 +255,9 @@ export class RawSet {
245
255
  }
246
256
 
247
257
  // 중요 render 처리 부분
248
- public async render(obj: any, config: DomRenderConfig): Promise<RawSet[]> {
258
+ // public async render(obj: any, config: DomRenderConfig): Promise<RawSet[]> {
259
+ // }
260
+ public async render(obj: any, config: DomRenderConfig): Promise<RenderResult> {
249
261
  // console.log('render!!!!!!!!!!!!!!')
250
262
  const genNode = config.window.document.importNode(this.dataSet.fragment, true);
251
263
  const raws: RawSet[] = [];
@@ -254,6 +266,7 @@ export class RawSet {
254
266
  const onThisComponentSetCallBacks: ComponentSet[] = [];
255
267
  const drAttrs: Attrs[] = [];
256
268
  // console.log('rawSet render!!', obj, config, this, Array.from(genNode.childNodes.values()));
269
+ const executedOperators: OperatorExecuter[] = [];
257
270
  for (const cNode of Array.from(genNode.childNodes.values())) {
258
271
  // console.log('cNodecNodecNode', cNode);
259
272
  let attribute = {};
@@ -269,7 +282,7 @@ export class RawSet {
269
282
  element: cNode,
270
283
  attribute: attribute,
271
284
  rootObject: obj,
272
- scriptUtils: ScriptUtils,
285
+ scriptUtils: ObjectUtils.Script,
273
286
  nearThis: this.findNearThis(obj),
274
287
  parentThis: this.findParentThis(obj),
275
288
  bindScript: ` /** render **/
@@ -286,7 +299,6 @@ export class RawSet {
286
299
  `
287
300
  }) as unknown as Render;
288
301
 
289
-
290
302
  // const normalAttribute = attribute[EventManager.normalAttrMapAttrName];
291
303
  // if (normalAttribute) {
292
304
  // new Map<string, string>(JSON.parse(normalAttribute)).forEach((v, k) => {
@@ -296,7 +308,6 @@ export class RawSet {
296
308
  // });
297
309
  // }
298
310
 
299
-
300
311
  const fag = config.window.document.createDocumentFragment();
301
312
  if (cNode.nodeType === Node.TEXT_NODE && cNode.textContent) {
302
313
  // console.log('text-->', this, obj, config, cNode.textContent);
@@ -306,12 +317,12 @@ export class RawSet {
306
317
  // console.log('--->', RawSet.exporesionGrouops(textContent), textContent,runText, runText[0][1])
307
318
  let newNode: Node;
308
319
  if (textContent?.startsWith('#')) {
309
- const r = ScriptUtils.evaluate(`${__render.bindScript} return ${runText}`, Object.assign(obj, {__render}));
320
+ const r = ObjectUtils.Script.evaluate(`${__render.bindScript} return ${runText}`, Object.assign(obj, { __render }));
310
321
  const template = config.window.document.createElement('template') as HTMLTemplateElement;
311
322
  template.innerHTML = r;
312
323
  newNode = template.content;
313
324
  } else {
314
- const r = ScriptUtils.evaluate(`${__render.bindScript} return ${runText}`, Object.assign(obj, {__render}));
325
+ const r = ObjectUtils.Script.evaluate(`${__render.bindScript} return ${runText}`, Object.assign(obj, { __render }));
315
326
  newNode = config.window.document.createTextNode(r);
316
327
  }
317
328
  cNode.parentNode?.replaceChild(newNode, cNode);
@@ -323,7 +334,7 @@ export class RawSet {
323
334
  } else if (cNode.nodeType === Node.ELEMENT_NODE) {
324
335
  const element = cNode as Element;
325
336
  // console.log('target-->', element)
326
- const drAttr:Attrs = {
337
+ const drAttr: Attrs = {
327
338
  dr: this.getAttributeAndDelete(element, RawSet.DR_NAME),
328
339
  drIf: this.getAttributeAndDelete(element, RawSet.DR_IF_NAME),
329
340
  drFor: this.getAttributeAndDelete(element, RawSet.DR_FOR_NAME),
@@ -349,36 +360,37 @@ export class RawSet {
349
360
  drDestroyOption: this.getAttributeAndDelete(element, RawSet.DR_DESTROY_OPTIONNAME),
350
361
  drKeyOption: this.getAttributeAndDelete(element, RawSet.DR_KEY_OPTIONNAME),
351
362
  drDetectIfOption: this.getAttribute(element, RawSet.DR_DETECT_IF_OPTIONNAME),
352
- drHasKeysOption: this.getAttribute(element, RawSet.DR_HAS_KEYS_OPTIONNAME),
363
+ drHasKeysOption: this.getAttribute(element, RawSet.DR_HAS_KEYS_OPTIONNAME)
353
364
  };
354
365
  drAttrs.push(drAttr);
355
366
  // 아래 순서 중요
356
367
  const operators = [
357
- new DrPre(this, __render, {raws, fag}, {element, attrName: RawSet.DR_PRE_NAME, attr: drAttr.drPre, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drPre}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
358
- new Dr(this, __render, {raws, fag}, {element, attrName: RawSet.DR_NAME, attr: drAttr.dr, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.dr}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
368
+ new DrPre( this, __render, { raws, fag }, { element, attrName: RawSet.DR_PRE_NAME, attr: drAttr.drPre, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drPre }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
369
+ new Dr( this, __render, { raws, fag }, { element, attrName: RawSet.DR_NAME, attr: drAttr.dr, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.dr }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
359
370
  // new Dr(this, __render, {raws, fag}, {element, attrName: EventManager.onRenderedInitAttrName, attr: drAttr.dr, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.dr}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
360
- new DrIf(this, __render, {raws, fag}, {element, attrName: RawSet.DR_IF_NAME, attr: drAttr.drIf, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drIf}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
361
- new DrStripElement(this, __render, {raws, fag}, {element, attrName: RawSet.DR_STRIP_NAME, attr: drAttr.drStripElement, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drThis}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
362
- new DrThis(this, __render, {raws, fag}, {element, attrName: RawSet.DR_THIS_NAME, attr: drAttr.drThis, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drThis}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
363
- new DrForm(this, __render, {raws, fag}, {element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drForm, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drForm}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
364
- new DrInnerText(this, __render, {raws, fag}, {element, attrName: RawSet.DR_INNERTEXT_NAME, attr: drAttr.drInnerText, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drInnerText}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
365
- new DrInnerHTML(this, __render, {raws, fag}, {element, attrName: RawSet.DR_INNERHTML_NAME, attr: drAttr.drInnerHTML, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drInnerHTML}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
366
- new DrFor(this, __render, {raws, fag}, {element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drFor, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drFor}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
367
- new DrForOf(this, __render, {raws, fag}, {element, attrName: RawSet.DR_FOR_OF_NAME, attr: drAttr.drForOf, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drForOf}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
368
- new DrThisProperty(this, __render, {raws, fag}, {element, attrName: RawSet.DR_THIS_PROPERTY_NAME, attr: drAttr.drThisProperty, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drThisProperty}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
369
- new DrAppender(this, __render, {raws, fag}, {element, attrName: RawSet.DR_APPENDER_NAME, attr: drAttr.drAppender, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drAppender}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
370
- new DrRepeat(this, __render, {raws, fag}, {element, attrName: RawSet.DR_REPEAT_NAME, attr: drAttr.drRepeat, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.drRepeat}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
371
- new DrTargetElementIsElement(this, __render, {raws, fag}, {element, attrName: RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME, attr: drAttr.drReplaceTargetElementIs, attrs: drAttr}, {config, obj}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
372
- new DrTargetElement(this, __render, {raws, fag}, {element, attrs: drAttr}, {config, obj}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
373
- new DrTargetAttr(this, __render, {raws, fag}, {element, attrs: drAttr}, {config, obj}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
371
+ new DrIf( this, __render, { raws, fag }, { element, attrName: RawSet.DR_IF_NAME, attr: drAttr.drIf, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drIf }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
372
+ new DrStripElement( this, __render, { raws, fag }, { element, attrName: RawSet.DR_STRIP_NAME, attr: drAttr.drStripElement, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drThis }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
373
+ new DrThis( this, __render, { raws, fag }, { element, attrName: RawSet.DR_THIS_NAME, attr: drAttr.drThis, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drThis }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
374
+ new DrForm( this, __render, { raws, fag }, { element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drForm, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drForm }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
375
+ new DrInnerText( this, __render, { raws, fag }, { element, attrName: RawSet.DR_INNERTEXT_NAME, attr: drAttr.drInnerText, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drInnerText }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
376
+ new DrInnerHTML( this, __render, { raws, fag }, { element, attrName: RawSet.DR_INNERHTML_NAME, attr: drAttr.drInnerHTML, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drInnerHTML }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
377
+ new DrFor( this, __render, { raws, fag }, { element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drFor, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drFor }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
378
+ new DrForOf( this, __render, { raws, fag }, { element, attrName: RawSet.DR_FOR_OF_NAME, attr: drAttr.drForOf, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drForOf }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
379
+ new DrThisProperty( this, __render, { raws, fag }, { element, attrName: RawSet.DR_THIS_PROPERTY_NAME, attr: drAttr.drThisProperty, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drThisProperty }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
380
+ new DrAppender( this, __render, { raws, fag }, { element, attrName: RawSet.DR_APPENDER_NAME, attr: drAttr.drAppender, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drAppender }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
381
+ new DrRepeat( this, __render, { raws, fag }, { element, attrName: RawSet.DR_REPEAT_NAME, attr: drAttr.drRepeat, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drRepeat }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
382
+ new DrTargetElementIsElement( this, __render, { raws, fag }, { element, attrName: RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME, attr: drAttr.drReplaceTargetElementIs, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
383
+ new DrTargetElement( this, __render, { raws, fag }, { element, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
384
+ new DrTargetAttr( this, __render, { raws, fag }, { element, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } )
374
385
  ];
375
386
 
376
387
  for (const operator of operators) {
377
388
  const state = await operator.start();
378
389
  if (state === ExecuteState.EXECUTE) {
390
+ executedOperators.push(operator);
379
391
  break;
380
392
  } else if (state === ExecuteState.STOP) {
381
- return raws;
393
+ return { raws, executedOperators };
382
394
  }
383
395
  }
384
396
  }
@@ -391,12 +403,11 @@ export class RawSet {
391
403
 
392
404
  // console.log('pppppppppppppp', this);
393
405
 
394
-
395
406
  // replaceBody와 applyEvent 순서를 바꿨다 20250511
396
407
  const childrenNodes = Array.from(genNode.childNodes);
397
408
  this.applyEvent(obj, genNode, config);
398
409
  this.replaceBody(genNode); // 중요 여기서 마지막에 연션된 값을 그려준다.
399
- // console.log('rawSEt!!!!!!!', obj,childrenNodes,config)
410
+ // console.log('rawSEt!!!!!!!', obj, this.near)
400
411
  // console.log('rawSEt!!!!!!!', obj, this.findNearThis(obj),childrenNodes,config)
401
412
  // console.log('rawSEt!!!!!!!', obj, drAttrs)
402
413
  this.onRenderedEvent(obj, childrenNodes, config);
@@ -409,15 +420,17 @@ export class RawSet {
409
420
  fag: genNode,
410
421
  scripts: EventManager.setBindProperty(config?.scripts, obj)
411
422
  } as Render);
412
- ScriptUtils.evaluate(`
423
+ ObjectUtils.Script.evaluate(
424
+ `
413
425
  const ${EventManager.FAG_VARNAME} = this.__render.fag;
414
426
  const ${EventManager.SCRIPTS_VARNAME} = this.__render.scripts;
415
427
  const ${EventManager.RAWSET_VARNAME} = this.__render.rawSet;
416
- ${it.drCompleteOption}`, Object.assign(obj, {__render: render}));
428
+ ${it.drCompleteOption}`,
429
+ Object.assign(obj, { __render: render })
430
+ );
417
431
  }
418
432
  });
419
433
 
420
-
421
434
  // 중요 style isolation 나중에 :scope로 대체 가능할듯.
422
435
  // 2023.9.4일 없앰 style 처음들어올때 처리하는걸로 바꿈
423
436
  // RawSet.generateStyleSheetsLocal(config);
@@ -455,7 +468,6 @@ export class RawSet {
455
468
  this.dataSet.render.currentThis.onInitRender({}, this);
456
469
  }
457
470
 
458
-
459
471
  config?.onElementInit?.(it.name, obj, this, it.targetElement);
460
472
  }
461
473
 
@@ -471,16 +483,15 @@ export class RawSet {
471
483
  const drAttrs: Attrs | undefined = rawSet?.dataSet.render?.attribute;
472
484
  if (rawSet && !rawSet.isConnected) {
473
485
  const destroyOptions = drAttrs?.drDestroyOption?.split(',') ?? [];
474
- RawSet.destroy(obj.__domrender_components[key], {rawSet: rawSet}, config, destroyOptions);
486
+ RawSet.destroy(obj.__domrender_components[key], { rawSet: rawSet }, config, destroyOptions);
475
487
  delete obj.__domrender_components[key];
476
488
  }
477
489
  });
478
490
  }
479
491
  // console.log('-------raws',raws)
480
- return raws;
492
+ return { raws: raws, executedOperators: executedOperators };
481
493
  }
482
494
 
483
-
484
495
  // 중요 스타일 적용 부분
485
496
  private static generateRuleSelector(start: string, end: string, sit: string) {
486
497
  const selectorText = `:is(${start} ~ *:not(${start} ~ ${end} ~ *))`;
@@ -517,30 +528,26 @@ export class RawSet {
517
528
  // const before = styleBody;
518
529
  // console.log('before@@@@@@@@@@@', before)
519
530
  const cssParser = new CssParser(styleBody);
520
-
531
+
521
532
  const processRule = (rule: CssRule) => {
522
533
  if (isStyleRule(rule)) {
523
534
  const isRoot = rule.selector.includes(':root');
524
535
  if (!isRoot) {
525
536
  // Handle comma-separated selectors
526
537
  const selectors = rule.selector.split(',').map(s => s.trim());
527
- const transformedSelectors = selectors.map(selector =>
528
- this.generateRuleSelector(start, end, selector)
529
- );
538
+ const transformedSelectors = selectors.map(selector => this.generateRuleSelector(start, end, selector));
530
539
  rule.selector = transformedSelectors.join(', ');
531
540
  }
532
541
  } else if (isAtRule(rule)) {
533
542
  if (rule.name === 'media') {
534
- const hasRoot = rule.children.some(childRule =>
535
- isStyleRule(childRule) && childRule.selector.includes(':root')
543
+ const hasRoot = rule.children.some(
544
+ childRule => isStyleRule(childRule) && childRule.selector.includes(':root')
536
545
  );
537
546
  if (!hasRoot) {
538
547
  rule.children.forEach(childRule => {
539
548
  if (isStyleRule(childRule)) {
540
549
  const selectors = childRule.selector.split(',').map(s => s.trim());
541
- const transformedSelectors = selectors.map(selector =>
542
- this.generateRuleSelector(start, end, selector)
543
- );
550
+ const transformedSelectors = selectors.map(selector => this.generateRuleSelector(start, end, selector));
544
551
  childRule.selector = transformedSelectors.join(', ');
545
552
  }
546
553
  });
@@ -550,7 +557,7 @@ export class RawSet {
550
557
  };
551
558
 
552
559
  cssParser.rules.forEach(processRule);
553
-
560
+
554
561
  let after = cssParser.stringify();
555
562
  // let after = StringUtils.regexExecArrayReplace(stringify as string, /(var\(--domrender-(\$\{.*?\}\$)?\))/g, (data) => {
556
563
  // return data[2];
@@ -558,9 +565,8 @@ export class RawSet {
558
565
  // console.log('after@@@@@@@@@@@', after)
559
566
 
560
567
  // 여기서 선언 selector 자체에도 처리가능하도록 한다 20250518
561
- after = after.replaceAll('/*$', '${')
562
- after = after.replaceAll('$*/', '}$')
563
-
568
+ after = after.replaceAll('/*$', '${');
569
+ after = after.replaceAll('$*/', '}$');
564
570
 
565
571
  if (styleTagWrap) {
566
572
  styleBody = `<style id='${componentKey}-style' domstyle>${after}</style>`;
@@ -571,7 +577,11 @@ export class RawSet {
571
577
  }
572
578
 
573
579
  public applyEvent(obj: any, fragment = this.dataSet.fragment, config?: DomRenderConfig) {
574
- this.dataSet.config.eventManager.applyEvent(obj, this.dataSet.config.eventManager.findAttrElements(fragment, config), config);
580
+ this.dataSet.config.eventManager.applyEvent(
581
+ obj,
582
+ this.dataSet.config.eventManager.findAttrElements(fragment, config),
583
+ config
584
+ );
575
585
  }
576
586
 
577
587
  public onRenderedEvent(obj: any, nodes: Node[], config?: DomRenderConfig) {
@@ -596,7 +606,7 @@ export class RawSet {
596
606
  let data = element.getAttribute(RawSet.DR_APPENDER_NAME);
597
607
  // if (data && !/\[[0-9]+\]/g.test(data)) {
598
608
  if (data && !/\[.+\]/g.test(data)) {
599
- const currentIndex = ScriptUtils.evaluateReturn(`${ObjectUtils.Path.toOptionalChainPath(data)}?.length -1`, obj);
609
+ const currentIndex = ObjectUtils.Script.evaluateReturn(`${ObjectUtils.Path.toOptionalChainPath(data)}?.length -1`, obj);
600
610
  // console.log('------?', currentIndex)
601
611
  // if (currentIndex === undefined || isNaN(currentIndex)) {
602
612
  // return undefined;
@@ -628,57 +638,68 @@ export class RawSet {
628
638
  // console.log('!@@@@@@@@@@@@@@@@', obj);
629
639
  // const NodeFilter = (config.window as any).NodeFilter;
630
640
  // const thisVariableName = (element as any).__domrender_this_variable_name;
631
- // console.log('thisVariableName---', thisVariableName);
632
- const nodeIterator = config.window.document?.createNodeIterator(element, NodeFilter.SHOW_ALL, {
633
- acceptNode(node) {
634
- // console.log('nodeType', node.nodeType, (node as any).tagName, (node as any).data);
641
+ // let html = element instanceof DocumentFragment ? ElementUtils.toInnerHTML(element, {document: config.window.document}) : (element as HTMLElement).outerHTML;
642
+ // console.log('==============html-->', element, html);
643
+ const NodeFilter = (config.window as any).NodeFilter;
644
+ const Node = (config.window as any).Node;
645
+ const processedNodes = new Set<Node>();
646
+
647
+
648
+
649
+ const findNodes = NodeUtils.findNodes(element, (node) => {
650
+ // console.log('nodeType', node.nodeType, node, (node as any).tagName, (node as any).data);
651
+ // for (const processedNode of processedNodes) {
652
+ // console.log('pre check!!', Array.from(processedNodes),processedNode !== node , processedNode.contains(node));
653
+ // // if(processedNode.contains(node)){
654
+ // console.log('---prechecker--html', (processedNode as HTMLElement).outerHTML,'------', (node as HTMLElement).outerHTML);
655
+ // // }
656
+ // if (processedNode !== node && processedNode.contains(node)) {
657
+ // console.log('acceptNodeReturn contain', NodeFilter.FILTER_REJECT);
658
+ // return NodeFilter.FILTER_REJECT;
659
+ // }
660
+ // }
661
+
635
662
  if (node.nodeType === Node.TEXT_NODE) {
636
- // console.log('text--->', node.textContent)
663
+ // console.log('nodeText--->', node.textContent)
637
664
  // console.log('????????', node.parentElement, node.parentElement?.getAttribute('dr-pre'));
638
665
  // console.log('???????/',node.textContent, node.parentElement?.getAttribute('dr-pre'))
639
666
  // TODO: 나중에
640
667
  // const between = StringUtils.betweenRegexpStr('[$#]\\{', '\\}', StringUtils.deleteEnter((node as Text).data ?? ''))
641
668
  const between = RawSet.expressionGroups(StringUtils.deleteEnter((node as Text).data ?? ''));
642
669
  // console.log('bbbb', between)
643
- return between?.length > 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
670
+ const r = between?.length > 0 ? NodeUtils.FindNodesFilterResult.MATCH_AND_SKIP_CHILDREN : NodeUtils.FindNodesFilterResult.NO_MATCH_AND_SKIP_CHILDREN;
671
+ // console.log('acceptNodeReturn node', r);
672
+ return r;
644
673
  // return /\$\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
645
674
  // return /[$#]\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
646
675
  } else if (node.nodeType === Node.ELEMENT_NODE) {
647
676
  const element = node as Element;
677
+ // if (typeof Window === 'undefined' && element.getAttribute('ttt') === 'visual') {
678
+ // return NodeFilter.FILTER_REJECT;
679
+ // }
680
+ // console.log('nodeHTML-->', element.outerHTML);
648
681
  if (element.hasAttribute(RawSet.DR_PRE_NAME)) {
649
- return NodeFilter.FILTER_REJECT;
682
+ let r = NodeUtils.FindNodesFilterResult.NO_MATCH_AND_SKIP_CHILDREN;
683
+ // console.log('acceptNodeReturn', r);
684
+ return r;
650
685
  }
651
686
  if (element.hasAttribute(EventManager.attrAttrName)) {
652
687
  const script = element.getAttribute(EventManager.attrAttrName) ?? '';
653
688
  // console.log('scriptscriptscriptscriptscriptscript,', script)
654
- const keyValuePairs = Array.from(script.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({key: match[1], value: match[2]}));
689
+ const keyValuePairs = Array.from(script.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({
690
+ key: match[1],
691
+ value: match[2]
692
+ }));
655
693
  (keyValuePairs ?? []).forEach(it => {
656
- element.setAttribute(it.key, '${' + it.value + '}$')
657
- })
658
- // console.log('-------k', keyValuePairs)
659
-
660
- // const drAttr = ScriptUtils.evalReturn(script, obj)
661
- // Object.entries(drAttr).forEach(([key, value]) => {
662
- // const keyValuePairs = Array.from(a.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({ key: match[1], value: match[2] }));
663
- // console.log(keyValuePairs);
664
- // // 출력: [{ key: 'value', value: 'this.child.obj.name' }, { key: 'wow', value: 'this.ww' }, { key: 'zz', value: '22' }, { key: 'v', value: '"ee"' }]
665
- //
666
- // console.log('-----------------', key,value)
667
- // element.setAttribute(key, '${'+(value)+'}$');
668
- // })
669
- // EventManager.attrNames.filter(it => it in drAttr).forEach(it => {
670
- // if (drAttr[it] === null) {
671
- // element.removeAttribute(it);
672
- // } else {
673
- // element.setAttribute(it, drAttr[it]);
674
- // }
675
- // })
676
- // console.log('-------->', Array.from(element.attributes), element.getAttribute('dr-attr'), obj)
694
+ element.setAttribute(it.key, '${' + it.value + '}$');
695
+ });
677
696
  }
678
697
  // element.setAttribute('dr-event-click', 'console.log(11)');
679
698
  const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);
680
699
  const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];
681
- const isElement = targetElementNames.includes(element.tagName.toLowerCase()) || targetElementNames.includes(targetElementIs?.toLowerCase() as any);
700
+ const isElement =
701
+ targetElementNames.includes(element.tagName.toLowerCase()) ||
702
+ targetElementNames.includes(targetElementIs?.toLowerCase() as any);
682
703
  // if (isElement) {
683
704
  // (element as HTMLElement).style.display = 'none';
684
705
  // (element as HTMLElement).style.width = '100px';
@@ -691,39 +712,44 @@ export class RawSet {
691
712
  const normalAttrs = new Map<string, string>();
692
713
  const linkVariables = new Map<string, string>();
693
714
  const linkNames = EventManager.linkAttrs.map(it => it.name);
694
- const isAttr = element.getAttributeNames().filter(it => {
695
- const value = element.getAttribute(it);
696
-
697
- // link일때
698
- if (value && linkNames.includes(it)) {
699
- linkVariables.set(it, value);
700
- } else if (value && RawSet.isExpression(value)) { // 표현식있을떄
701
- let variablePath: string = RawSet.expressionGroups(value)[0][1];
702
- // console.log('0-----',variablePath, node);
703
- // normal Attribute 초반에 셋팅해주기.
704
- // TODO: 이거 하긴했는데 사이드 이팩트?
705
- const originVariable = variablePath
706
- variablePath = variablePath.replace(/#[^#]*#/g, '({})');
707
- // console.log('1-----',variablePath, node);
708
- const optionalChainPath = ObjectUtils.Path.toOptionalChainPath(variablePath);
709
- // console.log('2-----',optionalChainPath);
710
- const cval = ScriptUtils.evaluateReturn(optionalChainPath, Object.assign(obj));
711
- // const cval = ScriptUtils.evalReturn(variablePath, Object.assign(obj));
712
- if (cval === null) {
713
- element.removeAttribute(it);
714
- } else {
715
- element.setAttribute(it, cval);
715
+ const isAttr =
716
+ element.getAttributeNames().filter(it => {
717
+ const value = element.getAttribute(it);
718
+
719
+ // link일때
720
+ if (value && linkNames.includes(it)) {
721
+ linkVariables.set(it, value);
722
+ } else if (value && RawSet.isExpression(value)) {
723
+ // 표현식있을떄
724
+ let variablePath: string = RawSet.expressionGroups(value)[0][1];
725
+ // console.log('0-----',variablePath, node);
726
+ // normal Attribute 초반에 셋팅해주기.
727
+ // TODO: 이거 하긴했는데 사이드 이팩트?
728
+ const originVariable = variablePath;
729
+ variablePath = variablePath.replace(/#[^#]*#/g, '({})');
730
+ // console.log('1-----',variablePath, node);
731
+ const optionalChainPath = ObjectUtils.Path.toOptionalChainPath(variablePath);
732
+ // console.log('2-----',optionalChainPath);
733
+ const cval = ObjectUtils.Script.evaluateReturn(optionalChainPath, Object.assign(obj));
734
+ // const cval = ScriptUtils.evalReturn(variablePath, Object.assign(obj));
735
+ if (cval === null) {
736
+ element.removeAttribute(it);
737
+ } else {
738
+ element.setAttribute(it, cval);
739
+ }
740
+ normalAttrs.set(it, originVariable);
741
+ // console.log('normalAttribute', it, variablePath);
716
742
  }
717
- normalAttrs.set(it, originVariable);
718
- // console.log('normalAttribute', it, variablePath);
719
- }
720
- // console.log(element.getAttribute(it), attrExpresion);
721
- const isTargetAttr = targetAttrNames.includes(it.toLowerCase());
722
- return isTargetAttr;
723
- }).length > 0;
743
+ // console.log(element.getAttribute(it), attrExpresion);
744
+ const isTargetAttr = targetAttrNames.includes(it.toLowerCase());
745
+ return isTargetAttr;
746
+ }).length > 0;
724
747
 
725
748
  if (linkVariables.size) {
726
- element.setAttribute(EventManager.linkTargetMapAttrName, JSON.stringify(Array.from(linkVariables.entries())));
749
+ element.setAttribute(
750
+ EventManager.linkTargetMapAttrName,
751
+ JSON.stringify(Array.from(linkVariables.entries()))
752
+ );
727
753
  }
728
754
  // 기본 attribute를 처리하기위해
729
755
  if (normalAttrs.size) {
@@ -732,16 +758,172 @@ export class RawSet {
732
758
  // if (isElement) {
733
759
  // element.setAttribute('www', '@this@');
734
760
  // }
735
- const r = (isAttr || isElement) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
761
+ const r = isAttr || isElement ? NodeUtils.FindNodesFilterResult.MATCH_AND_SKIP_CHILDREN : NodeUtils.FindNodesFilterResult.NO_MATCH_AND_CONTINUE;
762
+ // console.log('acceptNodeReturn element', r);
736
763
  return r;
737
764
  }
738
- return NodeFilter.FILTER_REJECT;
765
+ const r = NodeUtils.FindNodesFilterResult.NO_MATCH_AND_CONTINUE;
766
+ // console.log('acceptNodeReturn nothing', r);
767
+ return r;
739
768
  }
740
- });
769
+ )
770
+
771
+
772
+ /**
773
+ nodeIterator.nextNode() 할때 그때 호출시점에 아래 로직에서 다음 노드를 찾는다.
774
+ 브라우저는 nodeIterator.nextNode() 해서 동기로 dom을 조작하거나 옮기면 다음 nextNode할때 그 옮겨진 대상은 제외된다
775
+ 하지만 jsdom은 그대로 남아있어 아주 예기치못한 사건이 발생된다 5시간은 삽질..했다.. 따라서 중복방지 처리하였다
776
+ */
777
+ // const nodeIterator = config.window.document?.createNodeIterator(element, NodeFilter.SHOW_ALL, {
778
+ // acceptNode(node) {
779
+ // console.log('nodeType', node.nodeType, node, (node as any).tagName, (node as any).data);
780
+ // for (const processedNode of processedNodes) {
781
+ // console.log('pre check!!', Array.from(processedNodes),processedNode !== node , processedNode.contains(node));
782
+ // // if(processedNode.contains(node)){
783
+ // console.log('---prechecker--html', (processedNode as HTMLElement).outerHTML,'------', (node as HTMLElement).outerHTML);
784
+ // // }
785
+ // if (processedNode !== node && processedNode.contains(node)) {
786
+ // console.log('acceptNodeReturn contain', NodeFilter.FILTER_REJECT);
787
+ // return NodeFilter.FILTER_REJECT;
788
+ // }
789
+ // }
790
+ //
791
+ // if (node.nodeType === Node.TEXT_NODE) {
792
+ // console.log('nodeText--->', node.textContent)
793
+ // // console.log('????????', node.parentElement, node.parentElement?.getAttribute('dr-pre'));
794
+ // // console.log('???????/',node.textContent, node.parentElement?.getAttribute('dr-pre'))
795
+ // // TODO: 나중에
796
+ // // const between = StringUtils.betweenRegexpStr('[$#]\\{', '\\}', StringUtils.deleteEnter((node as Text).data ?? ''))
797
+ // const between = RawSet.expressionGroups(StringUtils.deleteEnter((node as Text).data ?? ''));
798
+ // // console.log('bbbb', between)
799
+ // const r = between?.length > 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
800
+ // console.log('acceptNodeReturn node', r);
801
+ // return r;
802
+ // // return /\$\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
803
+ // // return /[$#]\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
804
+ // } else if (node.nodeType === Node.ELEMENT_NODE) {
805
+ // const element = node as Element;
806
+ // // if (typeof Window === 'undefined' && element.getAttribute('ttt') === 'visual') {
807
+ // // return NodeFilter.FILTER_REJECT;
808
+ // // }
809
+ // console.log('nodeHTML-->', element.outerHTML);
810
+ // if (element.hasAttribute(RawSet.DR_PRE_NAME)) {
811
+ // console.log('acceptNodeReturn', NodeFilter.FILTER_REJECT);
812
+ // return NodeFilter.FILTER_REJECT;
813
+ // }
814
+ // if (element.hasAttribute(EventManager.attrAttrName)) {
815
+ // const script = element.getAttribute(EventManager.attrAttrName) ?? '';
816
+ // // console.log('scriptscriptscriptscriptscriptscript,', script)
817
+ // const keyValuePairs = Array.from(script.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({
818
+ // key: match[1],
819
+ // value: match[2]
820
+ // }));
821
+ // (keyValuePairs ?? []).forEach(it => {
822
+ // element.setAttribute(it.key, '${' + it.value + '}$');
823
+ // });
824
+ // // console.log('-------k', keyValuePairs)
825
+ //
826
+ // // const drAttr = ScriptUtils.evalReturn(script, obj)
827
+ // // Object.entries(drAttr).forEach(([key, value]) => {
828
+ // // const keyValuePairs = Array.from(a.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({ key: match[1], value: match[2] }));
829
+ // // console.log(keyValuePairs);
830
+ // // // 출력: [{ key: 'value', value: 'this.child.obj.name' }, { key: 'wow', value: 'this.ww' }, { key: 'zz', value: '22' }, { key: 'v', value: '"ee"' }]
831
+ // //
832
+ // // console.log('-----------------', key,value)
833
+ // // element.setAttribute(key, '${'+(value)+'}$');
834
+ // // })
835
+ // // EventManager.attrNames.filter(it => it in drAttr).forEach(it => {
836
+ // // if (drAttr[it] === null) {
837
+ // // element.removeAttribute(it);
838
+ // // } else {
839
+ // // element.setAttribute(it, drAttr[it]);
840
+ // // }
841
+ // // })
842
+ // // console.log('-------->', Array.from(element.attributes), element.getAttribute('dr-attr'), obj)
843
+ // }
844
+ // // element.setAttribute('dr-event-click', 'console.log(11)');
845
+ // const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);
846
+ // const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];
847
+ // const isElement =
848
+ // targetElementNames.includes(element.tagName.toLowerCase()) ||
849
+ // targetElementNames.includes(targetElementIs?.toLowerCase() as any);
850
+ // // if (isElement) {
851
+ // // (element as HTMLElement).style.display = 'none';
852
+ // // (element as HTMLElement).style.width = '100px';
853
+ // // (element as HTMLElement).style.height = '100px';
854
+ // // console.log((element as HTMLElement).outerHTML)
855
+ // // }
856
+ // // console.log('------targetElementIstargetElementIs>', targetElementNames, '---', isElement, targetElementIs);
857
+ // // const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat([...RawSet.DR_ATTRIBUTES,...EventManager.RAWSET_CHECK_ATTRIBUTE]);
858
+ // const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat([...RawSet.DR_ATTRIBUTES]);
859
+ // const normalAttrs = new Map<string, string>();
860
+ // const linkVariables = new Map<string, string>();
861
+ // const linkNames = EventManager.linkAttrs.map(it => it.name);
862
+ // const isAttr =
863
+ // element.getAttributeNames().filter(it => {
864
+ // const value = element.getAttribute(it);
865
+ //
866
+ // // link일때
867
+ // if (value && linkNames.includes(it)) {
868
+ // linkVariables.set(it, value);
869
+ // } else if (value && RawSet.isExpression(value)) {
870
+ // // 표현식있을떄
871
+ // let variablePath: string = RawSet.expressionGroups(value)[0][1];
872
+ // // console.log('0-----',variablePath, node);
873
+ // // normal Attribute 초반에 셋팅해주기.
874
+ // // TODO: 이거 하긴했는데 사이드 이팩트?
875
+ // const originVariable = variablePath;
876
+ // variablePath = variablePath.replace(/#[^#]*#/g, '({})');
877
+ // // console.log('1-----',variablePath, node);
878
+ // const optionalChainPath = ObjectUtils.Path.toOptionalChainPath(variablePath);
879
+ // // console.log('2-----',optionalChainPath);
880
+ // const cval = ObjectUtils.Script.evaluateReturn(optionalChainPath, Object.assign(obj));
881
+ // // const cval = ScriptUtils.evalReturn(variablePath, Object.assign(obj));
882
+ // if (cval === null) {
883
+ // element.removeAttribute(it);
884
+ // } else {
885
+ // element.setAttribute(it, cval);
886
+ // }
887
+ // normalAttrs.set(it, originVariable);
888
+ // // console.log('normalAttribute', it, variablePath);
889
+ // }
890
+ // // console.log(element.getAttribute(it), attrExpresion);
891
+ // const isTargetAttr = targetAttrNames.includes(it.toLowerCase());
892
+ // return isTargetAttr;
893
+ // }).length > 0;
894
+ //
895
+ // if (linkVariables.size) {
896
+ // element.setAttribute(
897
+ // EventManager.linkTargetMapAttrName,
898
+ // JSON.stringify(Array.from(linkVariables.entries()))
899
+ // );
900
+ // }
901
+ // // 기본 attribute를 처리하기위해
902
+ // if (normalAttrs.size) {
903
+ // element.setAttribute(EventManager.normalAttrMapAttrName, JSON.stringify(Array.from(normalAttrs.entries())));
904
+ // }
905
+ // // if (isElement) {
906
+ // // element.setAttribute('www', '@this@');
907
+ // // }
908
+ // const r = isAttr || isElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
909
+ // console.log('acceptNodeReturn element', r);
910
+ // return r;
911
+ // }
912
+ // console.log('acceptNodeReturn nothing', NodeFilter.FILTER_REJECT);
913
+ // return NodeFilter.FILTER_REJECT;
914
+ // }
915
+ // });
741
916
  const pars: RawSet[] = [];
742
917
  let currentNode: Node | null;
918
+ const name = RandomUtils.uuid();
919
+ // console.log('name==', name);
743
920
  // eslint-disable-next-line no-cond-assign
744
- while (currentNode = nodeIterator?.nextNode()) {
921
+ // while ((currentNode = nodeIterator?.nextNode())) {
922
+ // console.log('findNodes~~', findNodes);
923
+ for (const currentNode of findNodes) {
924
+ // 여기에서 부모인거 인지시켜준다 위쪽 에서 다시찾을떄 걸러진다.. JSDOM ..이놈이 즉각적인 처리를 못해줘서 수동 검증 로직 넣었다.
925
+ processedNodes.add(currentNode);
926
+ // console.log('currentNode!!!!', currentNode);
745
927
  if (currentNode.nodeType === Node.TEXT_NODE) {
746
928
  const text = (currentNode as Text).textContent ?? '';
747
929
  const template = config.window.document?.createElement('template');
@@ -750,7 +932,12 @@ export class RawSet {
750
932
  // const a = StringUtils.regexExec(/[$#]\{.*?\}/g, text);
751
933
  // const a = StringUtils.betweenRegexpStr('[$#]\\{', '\\}', text); // <--TODO: 나중에..
752
934
  const groups = RawSet.expressionGroups(text);
753
- const map = groups.map(it => ({uuid: `${RandomUtils.alphabet(40)}_${obj?.constructor?.name}`, content: it[0], regexArr: it}));
935
+ const map = groups.map(it => ({
936
+ uuid: `${RandomUtils.alphabet(40)}_${obj?.constructor?.name}`,
937
+ content: it[0],
938
+ regexArr: it
939
+ }));
940
+ // console.log('create!!',map);
754
941
  let lasterIndex = 0;
755
942
  for (let i = 0; i < map.length; i++) {
756
943
  const it = map[i];
@@ -769,8 +956,8 @@ export class RawSet {
769
956
  } else {
770
957
  type = RawSetType.TEXT;
771
958
  }
772
- const node = document.createTextNode(preparedText);
773
- const startEndPoint = RawSet.createStartEndPoint({id: it.uuid, type}, config);
959
+ const node = config.window.document.createTextNode(preparedText);
960
+ const startEndPoint = RawSet.createStartEndPoint({ id: it.uuid, type }, config);
774
961
  // layout setting
775
962
  // console.log('createTextNode', node);
776
963
  template.content.append(node); // expression 앞 부분 넣어줘야 앞부분 일반 text 안짤린다.
@@ -781,13 +968,20 @@ export class RawSet {
781
968
  const fragment = config.window.document.createDocumentFragment();
782
969
  fragment.append(config.window.document.createTextNode(it.content));
783
970
  // (startEndPoint.start as any).khh = RandomUtils.decimal(0,10)
784
- pars.push(new RawSet(it.uuid, type, {
785
- start: startEndPoint.start,
786
- node: currentNode,
787
- end: startEndPoint.end,
788
- parent: currentNode.parentNode,
789
- // thisVariableName: thisVariableName
790
- }, {fragment: fragment, config: config}));
971
+ pars.push(
972
+ new RawSet(
973
+ it.uuid,
974
+ type,
975
+ {
976
+ start: startEndPoint.start,
977
+ node: currentNode,
978
+ end: startEndPoint.end,
979
+ parent: currentNode.parentNode
980
+ // thisVariableName: thisVariableName
981
+ },
982
+ { fragment: fragment, config: config }
983
+ )
984
+ );
791
985
  lasterIndex = regexArr.index + it.content.length;
792
986
  }
793
987
  template.content.append(config.window.document.createTextNode(text.substring(lasterIndex, text.length)));
@@ -796,13 +990,16 @@ export class RawSet {
796
990
  // const uuid = `${RandomUtils.alphabet(40)}___${obj?.constructor?.name}`;
797
991
  const uuid = `${RandomUtils.alphabet(40)}`;
798
992
  const element = currentNode as Element;
993
+ // console.log('create ElementTarget', uuid, element.outerHTML);
799
994
  const fragment = config.window.document.createDocumentFragment();
800
995
  const elementType: RawSetType = RawSetType.TARGET_ELEMENT;
801
- const startEndPoint = RawSet.createStartEndPoint({node: element, id: uuid, type: elementType}, config);
996
+ const startEndPoint = RawSet.createStartEndPoint({ node: element, id: uuid, type: elementType }, config);
802
997
  // 여기서 등록한 component 추가한다.
803
998
  const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);
804
999
  const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];
805
- const isElement = targetElementNames.includes(element.tagName.toLowerCase()) || targetElementNames.includes(targetElementIs?.toLowerCase() as any);
1000
+ const isElement =
1001
+ targetElementNames.includes(element.tagName.toLowerCase()) ||
1002
+ targetElementNames.includes(targetElementIs?.toLowerCase() as any);
806
1003
  // if (isElement) {
807
1004
  // (element as HTMLElement).style.display = 'none'
808
1005
  // }
@@ -816,21 +1013,49 @@ export class RawSet {
816
1013
  // tempDiv.appendChild(fragment.cloneNode(true)); // fragment 복사본 추가
817
1014
  // console.log('------',tempDiv.innerHTML);
818
1015
  // console.log();
819
- const rawSet = new RawSet(uuid, isElement ? elementType : (isAttr ? RawSetType.TARGET_ATTR : RawSetType.UNKOWN), {
820
- start: startEndPoint.start,
821
- node: currentNode,
822
- end: startEndPoint.end,
823
- parent: currentNode.parentNode,
824
- // thisVariableName: thisVariableName
825
- }, {config: config, fragment: fragment});
1016
+ const rawSet = new RawSet(
1017
+ uuid,
1018
+ isElement ? elementType : isAttr ? RawSetType.TARGET_ATTR : RawSetType.UNKOWN,
1019
+ {
1020
+ start: startEndPoint.start,
1021
+ node: currentNode,
1022
+ end: startEndPoint.end,
1023
+ parent: currentNode.parentNode
1024
+ // thisVariableName: thisVariableName
1025
+ },
1026
+ { config: config, fragment: fragment }
1027
+ );
826
1028
  pars.push(rawSet);
827
1029
  }
828
1030
  }
829
- // console.log('parsparsparsparsparsparsparsparsparspars', pars);
1031
+ // config
1032
+ const util = ElementUtils;
1033
+ // console.log('parsparsparsparsparsparsparsparsparspars', pars, name);
830
1034
  return pars;
1035
+ // const lastpars: RawSet[] = []
1036
+ //
1037
+ // pars.forEach(it => {
1038
+ // // it.uuid
1039
+ // const parents = pars.filter(it => it.dataSet.fragment.getElementById(it.uuid+'-start'))
1040
+ //
1041
+ // console.log('vvvvvvvvv', parents);
1042
+ // if (parents.length>0) {
1043
+ // parents.forEach(sit => {
1044
+ // sit.dataSet.fragment.getElementById(sit.uuid + '-start')?.replaceWith(it.dataSet.fragment);
1045
+ // it.dataSet.fragment.getElementById(sit.uuid + '-end').remove();
1046
+ // console.log('rrr');
1047
+ // // ElementUtils.toInnerHTML(it.dataSet.fragment, {document: config.window.document});
1048
+ // // ElementUtils.toInnerHTML(it.dataSet.fragment
1049
+ // });
1050
+ // } else {
1051
+ // lastpars.push(it)
1052
+ // }
1053
+ // })
1054
+ // console.log('zzzzzz', lastpars);
1055
+ // return lastpars;
831
1056
  }
832
1057
 
833
- public static createStartEndPoint(data: { node?: Node, id: string, type: RawSetType }, config: DomRenderConfig) {
1058
+ public static createStartEndPoint(data: { node?: Node; id: string; type: RawSetType }, config: DomRenderConfig) {
834
1059
  if (data.type === RawSetType.TARGET_ELEMENT && data.node) {
835
1060
  const element = data.node as Element;
836
1061
  const start: HTMLMetaElement = config.window.document.createElement('meta');
@@ -848,13 +1073,14 @@ export class RawSet {
848
1073
  }
849
1074
  end.setAttribute('id', `${data.id}-end`);
850
1075
  end.setAttribute('dr-end-point', '');
851
- return {start, end};
1076
+ return { start, end };
852
1077
  } else if (data.type === RawSetType.STYLE_TEXT) {
853
1078
  return {
854
1079
  start: config.window.document.createTextNode(`/*start text ${data.id}*/`),
855
1080
  end: config.window.document.createTextNode(`/*end text ${data.id}*/`)
856
1081
  };
857
- } else { // text
1082
+ } else {
1083
+ // text
858
1084
  return {
859
1085
  start: config.window.document.createComment(`start text ${data.id}`),
860
1086
  end: config.window.document.createComment(`end text ${data.id}`)
@@ -894,7 +1120,7 @@ export class RawSet {
894
1120
 
895
1121
  public getHasRawSet(key: string) {
896
1122
  let rawSet: RawSet | undefined;
897
- this.childs((node) => {
1123
+ this.childs(node => {
898
1124
  const drKey = (node as Element).getAttribute?.(RawSet.DR_KEY_OPTIONNAME);
899
1125
  if (drKey && drKey === key) {
900
1126
  rawSet = (node as any).rawSet as RawSet;
@@ -906,32 +1132,44 @@ export class RawSet {
906
1132
  }
907
1133
 
908
1134
  public static drItOtherEncoding(element: Element | DocumentFragment, postFix?: string) {
909
-
910
1135
  const random = RandomUtils.uuid() + postFix;
911
1136
  const regex = /#it#/g;
912
- element.querySelectorAll(`[${RawSet.DR_IT_OPTIONNAME}], [${RawSet.DR_FOR_OF_NAME}], [${RawSet.DR_REPEAT_NAME}], [${RawSet.DR_APPENDER_NAME}]`).forEach(it => {
913
- it.innerHTML = it.innerHTML.replace(regex, random);
914
- });
1137
+ element
1138
+ .querySelectorAll(
1139
+ `[${RawSet.DR_IT_OPTIONNAME}], [${RawSet.DR_FOR_OF_NAME}], [${RawSet.DR_REPEAT_NAME}], [${RawSet.DR_APPENDER_NAME}]`
1140
+ )
1141
+ .forEach(it => {
1142
+ it.innerHTML = it.innerHTML.replace(regex, random);
1143
+ });
915
1144
  return random;
916
1145
  }
917
1146
 
918
1147
  public static drItOtherDecoding(element: Element | DocumentFragment, random: string) {
919
- element.querySelectorAll(`[${RawSet.DR_IT_OPTIONNAME}], [${RawSet.DR_FOR_OF_NAME}], [${RawSet.DR_REPEAT_NAME}], [${RawSet.DR_APPENDER_NAME}]`).forEach(it => {
920
- it.innerHTML = it.innerHTML.replace(RegExp(random, 'g'), '#it#');
921
- });
1148
+ element
1149
+ .querySelectorAll(
1150
+ `[${RawSet.DR_IT_OPTIONNAME}], [${RawSet.DR_FOR_OF_NAME}], [${RawSet.DR_REPEAT_NAME}], [${RawSet.DR_APPENDER_NAME}]`
1151
+ )
1152
+ .forEach(it => {
1153
+ it.innerHTML = it.innerHTML.replace(RegExp(random, 'g'), '#it#');
1154
+ });
922
1155
  }
923
1156
 
924
- public static drVarDecoding(element: Element, vars: { name: string, value: string, regex: RegExp, random: string }[]) {
1157
+ public static drVarDecoding(
1158
+ element: Element,
1159
+ vars: { name: string; value: string; regex: RegExp; random: string }[]
1160
+ ) {
925
1161
  element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(it => {
926
- vars.filter(vit => vit.value && vit.name).forEach(vit => {
927
- it.innerHTML = it.innerHTML.replace(RegExp(vit.random, 'g'), vit.value);
928
- });
1162
+ vars
1163
+ .filter(vit => vit.value && vit.name)
1164
+ .forEach(vit => {
1165
+ it.innerHTML = it.innerHTML.replace(RegExp(vit.random, 'g'), vit.value);
1166
+ });
929
1167
  });
930
1168
  }
931
1169
 
932
- public static replaceInnerHTML(element: Element, config: { asIs: string | RegExp, toBe?: string }): string {
1170
+ public static replaceInnerHTML(element: Element, config: { asIs: string | RegExp; toBe?: string }): string {
933
1171
  const innerHTML = element.innerHTML;
934
- const tobe = config.toBe = config.toBe ?? RandomUtils.uuid();
1172
+ const tobe = (config.toBe = config.toBe ?? RandomUtils.uuid());
935
1173
  if (config.asIs instanceof RegExp) {
936
1174
  element.innerHTML = innerHTML.replace(config.asIs, config.toBe);
937
1175
  } else {
@@ -940,8 +1178,8 @@ export class RawSet {
940
1178
  return tobe;
941
1179
  }
942
1180
 
943
- public static drThisEncoding(element: Element, drThis: string, config: { asIs: RegExp, toBe?: string }): string {
944
- const thisRandom = config.toBe = config?.toBe ?? RandomUtils.uuid();
1181
+ public static drThisEncoding(element: Element, drThis: string, config: { asIs: RegExp; toBe?: string }): string {
1182
+ const thisRandom = (config.toBe = config?.toBe ?? RandomUtils.uuid());
945
1183
  // const thisRegex = /(?<!(dr-|\.))this(?=.?)/g;
946
1184
  // const thisRegex = /[^(dr\-)]this(?=.?)/g;
947
1185
  // const thisRegex = /[^(dr\-)]this\./g;
@@ -956,34 +1194,47 @@ export class RawSet {
956
1194
  // console.log('rrrrrrrrand?', drThis,config);
957
1195
  let message = it.innerHTML;
958
1196
  // StringUtils.regexExec(/([^(dr\-)])?this(?=.?)/g, message).reverse().forEach(it => {
959
- StringUtils.regexExec(config.asIs, message).reverse().forEach(it => {
960
- message = message.substr(0, it.index) + message.substr(it.index).replace(it[0], `${it[1] ?? ''}${drThis}`);
961
- });
1197
+ StringUtils.regexExec(config.asIs, message)
1198
+ .reverse()
1199
+ .forEach(it => {
1200
+ message = message.substr(0, it.index) + message.substr(it.index).replace(it[0], `${it[1] ?? ''}${drThis}`);
1201
+ });
962
1202
  it.innerHTML = message;
963
1203
  });
964
1204
 
965
1205
  // console.log('changggg', element.innerHTML);
966
1206
  let message = element.innerHTML;
967
- StringUtils.regexExec(config.asIs, message).reverse().forEach(it => {
968
- message = message.substr(0, it.index) + message.substr(it.index).replace(it[0], `${it[1] ?? ''}${drThis}`);
969
- });
1207
+ StringUtils.regexExec(config.asIs, message)
1208
+ .reverse()
1209
+ .forEach(it => {
1210
+ message = message.substr(0, it.index) + message.substr(it.index).replace(it[0], `${it[1] ?? ''}${drThis}`);
1211
+ });
970
1212
  element.innerHTML = message;
971
1213
  return thisRandom;
972
1214
  }
973
1215
 
974
- public static drThisBindEncoding(element: Element, variable: RegExp, config: { config: DomRenderConfig, otherReplaceVariablePath?: string }) {
1216
+ public static drThisBindEncoding(
1217
+ element: Element,
1218
+ variable: RegExp,
1219
+ config: { config: DomRenderConfig; otherReplaceVariablePath?: string }
1220
+ ) {
975
1221
  element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(eIt => {
976
1222
  let message = eIt.innerHTML;
977
1223
  // StringUtils.regexExec(/([^(dr\-)])?this(?=.?)/g, message).reverse().forEach(it => {
978
- StringUtils.regexExec(variable, message).reverse().forEach(it => {
979
- message = message.substr(0, it.index) + message.substr(it.index).replace(it[0], `${it[1] ?? ''}${eIt.getAttribute(RawSet.DR_THIS_NAME)}`);
980
- });
1224
+ StringUtils.regexExec(variable, message)
1225
+ .reverse()
1226
+ .forEach(it => {
1227
+ message =
1228
+ message.substr(0, it.index) +
1229
+ message.substr(it.index).replace(it[0], `${it[1] ?? ''}${eIt.getAttribute(RawSet.DR_THIS_NAME)}`);
1230
+ });
981
1231
  eIt.innerHTML = message;
982
1232
  });
983
1233
 
984
-
985
1234
  const targetElements = config.config.targetElements ?? [];
986
- const targetElementNames = targetElements.map(it => it.name.replaceAll('.', '\\.').replaceAll(':', '\\:')).join(',');
1235
+ const targetElementNames = targetElements
1236
+ .map(it => it.name.replaceAll('.', '\\.').replaceAll(':', '\\:'))
1237
+ .join(',');
987
1238
  const thisRandom = RandomUtils.uuid();
988
1239
  element.querySelectorAll(targetElementNames).forEach(it => {
989
1240
  it.innerHTML = it.innerHTML.replace(variable, thisRandom);
@@ -991,31 +1242,36 @@ export class RawSet {
991
1242
 
992
1243
  element.querySelectorAll(`[${RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME}]`).forEach(it => {
993
1244
  it.innerHTML = it.innerHTML.replace(variable, thisRandom);
994
- })
995
-
1245
+ });
996
1246
 
997
1247
  if (config.otherReplaceVariablePath) {
998
1248
  let message = element.innerHTML;
999
- StringUtils.regexExec(variable, message).reverse().forEach(it => {
1000
- message = message.substr(0, it.index) + message.substr(it.index).replace(it[0], `${it[1] ?? ''}${config.otherReplaceVariablePath}`);
1001
- });
1249
+ StringUtils.regexExec(variable, message)
1250
+ .reverse()
1251
+ .forEach(it => {
1252
+ message =
1253
+ message.substr(0, it.index) +
1254
+ message.substr(it.index).replace(it[0], `${it[1] ?? ''}${config.otherReplaceVariablePath}`);
1255
+ });
1002
1256
  element.innerHTML = message;
1003
1257
  }
1004
1258
  return thisRandom;
1005
1259
  }
1006
1260
 
1007
- public static drThisBindDecoding(element: Element, config: { asIs: string, toBe: string, config: DomRenderConfig }) {
1261
+ public static drThisBindDecoding(element: Element, config: { asIs: string; toBe: string; config: DomRenderConfig }) {
1008
1262
  const targetElements = config.config.targetElements ?? [];
1009
- const targetElementNames = targetElements.map(it => it.name.replaceAll('.', '\\.').replaceAll(':', '\\:')).join(',');
1263
+ const targetElementNames = targetElements
1264
+ .map(it => it.name.replaceAll('.', '\\.').replaceAll(':', '\\:'))
1265
+ .join(',');
1010
1266
  element.querySelectorAll(targetElementNames).forEach(it => {
1011
1267
  it.innerHTML = it.innerHTML.replace(RegExp(config.asIs, 'g'), config.toBe);
1012
1268
  });
1013
1269
  element.querySelectorAll(`[${RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME}]`).forEach(it => {
1014
1270
  it.innerHTML = it.innerHTML.replace(RegExp(config.asIs, 'g'), config.toBe);
1015
- })
1271
+ });
1016
1272
  }
1017
1273
 
1018
- public static drThisDecoding(element: Element, config: { asIs: string, toBe: string }) {
1274
+ public static drThisDecoding(element: Element, config: { asIs: string; toBe: string }) {
1019
1275
  element.querySelectorAll(`[${RawSet.DR_PRE_NAME}]`).forEach(it => {
1020
1276
  it.innerHTML = it.innerHTML.replace(RegExp(config.asIs, 'g'), config.toBe);
1021
1277
  });
@@ -1039,7 +1295,7 @@ export class RawSet {
1039
1295
 
1040
1296
  let node;
1041
1297
  // eslint-disable-next-line no-cond-assign
1042
- while (node = nodeIterator?.nextNode()) {
1298
+ while ((node = nodeIterator?.nextNode())) {
1043
1299
  const element = node as Element;
1044
1300
  element.setAttribute(to, element.getAttribute(as) ?? '');
1045
1301
  element.removeAttribute(as);
@@ -1063,21 +1319,34 @@ export class RawSet {
1063
1319
  // console.log('asd', element.innerHTML);
1064
1320
  // element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(it => {
1065
1321
  element.querySelectorAll(`[${RawSet.DR_VAR_OPTIONNAME}]`).forEach(it => {
1066
- vars.filter(vit => vit.value && vit.name).forEach(vit => {
1067
- it.innerHTML = it.innerHTML.replace(vit.regex, vit.random);
1068
- });
1069
- });
1070
- vars.filter(vit => vit.value && vit.name).forEach(vit => {
1071
- element.innerHTML = element.innerHTML.replace(vit.regex, vit.value);
1322
+ vars
1323
+ .filter(vit => vit.value && vit.name)
1324
+ .forEach(vit => {
1325
+ it.innerHTML = it.innerHTML.replace(vit.regex, vit.random);
1326
+ });
1072
1327
  });
1328
+ vars
1329
+ .filter(vit => vit.value && vit.name)
1330
+ .forEach(vit => {
1331
+ element.innerHTML = element.innerHTML.replace(vit.regex, vit.value);
1332
+ });
1073
1333
  return vars;
1074
1334
  }
1075
1335
 
1076
- public static async drThisCreate(rawSet: RawSet, element: Element, drThis: string, drVarOption: string, drStripOption: boolean | string | null, obj: any, config: DomRenderConfig, set?: ComponentSet): Promise<DocumentFragment|undefined> {
1336
+ public static async drThisCreate(
1337
+ rawSet: RawSet,
1338
+ element: Element,
1339
+ drThis: string,
1340
+ drVarOption: string,
1341
+ drStripOption: boolean | string | null,
1342
+ obj: any,
1343
+ config: DomRenderConfig,
1344
+ set?: ComponentSet
1345
+ ): Promise<DocumentFragment | undefined> {
1077
1346
  // console.log('ttttttttttttttttttttt',element.innerHTML, drThis, set, obj);
1078
1347
  const fag = config.window.document?.createDocumentFragment();
1079
- if(!fag) {
1080
- return ;
1348
+ if (!fag) {
1349
+ return;
1081
1350
  }
1082
1351
  const targetElement = element.cloneNode(true) as Element;
1083
1352
  let targetObj = obj;
@@ -1087,7 +1356,7 @@ export class RawSet {
1087
1356
  const style = RawSet.generateStyleTransform(set.styles ?? [], rawSet.uuid, true);
1088
1357
  targetElement.innerHTML = style + (set.template ?? '');
1089
1358
  } else {
1090
- targetObj = ScriptUtils.evaluateReturn(ObjectUtils.Path.toOptionalChainPath(drThis), obj);
1359
+ targetObj = ObjectUtils.Script.evaluateReturn(ObjectUtils.Path.toOptionalChainPath(drThis), obj);
1091
1360
  }
1092
1361
 
1093
1362
  const componentKey = rawSet.uuid;
@@ -1133,12 +1402,15 @@ export class RawSet {
1133
1402
  scripts: EventManager.setBindProperty(config.scripts ?? {}, obj)
1134
1403
  } as Render;
1135
1404
  // const attribute = DomUtils.getAttributeToObject(element);
1136
- render.attribute = RawSet.getAttributeObject(element, {script: renderScript, obj: obj, renderData: render})
1405
+ render.attribute = RawSet.getAttributeObject(element, { script: renderScript, obj: obj, renderData: render });
1137
1406
  render = Object.freeze(render);
1138
1407
 
1139
1408
  // dr-on-create data onCreateRender
1140
1409
  const onCreateDataScript = `return {rootParent: this, render: this.__render}`;
1141
- const onCreateDataParam = ScriptUtils.evaluate<OnCreateRenderDataParams>(onCreateDataScript, Object.assign(obj, {__render: render}));
1410
+ const onCreateDataParam = ObjectUtils.Script.evaluate<OnCreateRenderDataParams>(
1411
+ onCreateDataScript,
1412
+ Object.assign(obj, { __render: render })
1413
+ );
1142
1414
  if (isOnCreateRenderData(targetObj)) {
1143
1415
  targetObj?.onCreateRenderData(onCreateDataParam as OnCreateRenderDataParams);
1144
1416
  }
@@ -1147,12 +1419,14 @@ export class RawSet {
1147
1419
  onCreateDataParam.render.parentThis.onCreatedThisChild(targetObj, onCreateDataParam as OnCreateRenderDataParams);
1148
1420
  }
1149
1421
 
1150
-
1151
1422
  // dr-on-create onCreateRender
1152
1423
  const onCreate = element.getAttribute(RawSet.DR_ON_CREATE_ARGUMENTS_OPTIONNAME);
1153
1424
  let createParam: any[] = [];
1154
1425
  if (onCreate) {
1155
- createParam = ScriptUtils.evaluateReturn<any[]>({bodyScript:renderScript, returnScript:ObjectUtils.Path.toOptionalChainPath(onCreate)}, obj)
1426
+ createParam = ObjectUtils.Script.evaluateReturn<any[]>(
1427
+ { bodyScript: renderScript, returnScript: ObjectUtils.Path.toOptionalChainPath(onCreate) },
1428
+ obj
1429
+ );
1156
1430
  if (!Array.isArray(createParam)) {
1157
1431
  createParam = [createParam];
1158
1432
  }
@@ -1165,7 +1439,7 @@ export class RawSet {
1165
1439
  // console.log('매번타나?');
1166
1440
  // 중요 dr-normal-attr-map
1167
1441
  // const normalAttrMap = element.getAttribute(EventManager.normalAttrMapAttrName);
1168
- const targetAttrObject = RawSet.getAttributeObject(element, {script: renderScript, obj: obj, renderData: render});
1442
+ const targetAttrObject = RawSet.getAttributeObject(element, { script: renderScript, obj: obj, renderData: render });
1169
1443
  if (targetAttrObject) {
1170
1444
  rawSet.dataSet.render ??= {};
1171
1445
  rawSet.dataSet.render.attribute = targetAttrObject;
@@ -1175,19 +1449,18 @@ export class RawSet {
1175
1449
  // const cval = ScriptUtils.eval(script, Object.assign(obj, { __render: render }));
1176
1450
  // // element.setAttribute(key, cval);
1177
1451
  if (isOnChangeAttrRender(targetObj)) {
1178
- targetObj.onChangeAttrRender(key, cval, {rawSet: rawSet});
1452
+ targetObj.onChangeAttrRender(key, cval, { rawSet: rawSet });
1179
1453
  }
1180
1454
  });
1181
1455
  }
1182
1456
 
1183
-
1184
1457
  // dr-on-component-init
1185
1458
  // const oninit = element.getAttribute(`${EventManager.attrPrefix}on-component-init`); // dr-on-component-init
1186
1459
  const oninit = element.getAttribute(RawSet.DR_ON_CREATED_CALLBACK_OPTIONNAME); // dr-on-component-init
1187
1460
  // console.log('--------drThisCreate!!!', oninit)
1188
1461
  if (oninit) {
1189
1462
  const script = `${renderScript} ${oninit} `;
1190
- ScriptUtils.evaluate(script, Object.assign(obj, {__render: render}));
1463
+ ObjectUtils.Script.evaluate(script, Object.assign(obj, { __render: render }));
1191
1464
  }
1192
1465
 
1193
1466
  targetElement.querySelectorAll(EventManager.attrNames.map(it => `[${it}]`).join(',')).forEach(it => {
@@ -1206,17 +1479,22 @@ export class RawSet {
1206
1479
  // if (innerHTMLName) {
1207
1480
  // RawSet.replaceInnerHTML(element, {asIs: `#${innerHTMLName}#`, toBe: innerHTMLNameReplaceKey})
1208
1481
  // }
1482
+
1483
+ rawSet.point.innerHTML = element.innerHTML;
1209
1484
  // 이걸 왜 뺐었지... 다시넣었음 그런데 조금 로직이.. 검증이..
1210
1485
  const innerHTMLName = targetElement.getAttribute(RawSet.DR_COMPONENT_INNER_HTML_NAME_OPTIONNAME) ?? 'innerHTML';
1211
1486
  if (innerHTMLName) {
1212
- RawSet.replaceInnerHTML(targetElement, {asIs: `#${innerHTMLName}#`, toBe: element.innerHTML})
1487
+ // console.log('---------', element.innerHTML);
1488
+ RawSet.replaceInnerHTML(targetElement, { asIs: `#${innerHTMLName}#`, toBe: element.innerHTML });
1213
1489
  }
1214
1490
 
1215
1491
  // console.log('aa-asIs', targetElement.innerHTML);
1216
1492
  const optionThisName = targetElement.getAttribute(RawSet.DR_THIS_NAME_OPTIONNAME);
1217
1493
  // console.log('11111111111111', optionThisName)
1218
- targetElement.getAttributeNames().forEach(it => targetElement.setAttribute(it, targetElement.getAttribute(it)!.replace(/#this#/g, drThis)));
1219
- const thisRandom = this.drThisEncoding(targetElement, drThis, {asIs: /@this@/g});
1494
+ targetElement
1495
+ .getAttributeNames()
1496
+ .forEach(it => targetElement.setAttribute(it, targetElement.getAttribute(it)!.replace(/#this#/g, drThis)));
1497
+ const thisRandom = this.drThisEncoding(targetElement, drThis, { asIs: /@this@/g });
1220
1498
  // console.log('@@@@@@@@@@@@@0', targetElement.innerHTML);
1221
1499
  // let thisNameRandom: string | undefined = undefined;
1222
1500
  if (optionThisName) {
@@ -1225,8 +1503,14 @@ export class RawSet {
1225
1503
  // console.log('-----1', element.innerHTML, '\n', targetElement.innerHTML)
1226
1504
  // thisNameRandom = this.drThisBindEncoding(targetElement, new RegExp(`@${optionThisName}@`, 'g'), {config: config, otherReplaceVariablePath: drThis});
1227
1505
  }
1228
- const nearThisRandom = this.drThisBindEncoding(targetElement, /@nearThis@/g, {config: config, otherReplaceVariablePath: rawSet.findNearThisPath()});
1229
- const parentThisRandom = this.drThisBindEncoding(targetElement, /@parentThis@/g, {config: config, otherReplaceVariablePath: rawSet.findParentThisPath()});
1506
+ const nearThisRandom = this.drThisBindEncoding(targetElement, /@nearThis@/g, {
1507
+ config: config,
1508
+ otherReplaceVariablePath: rawSet.findNearThisPath()
1509
+ });
1510
+ const parentThisRandom = this.drThisBindEncoding(targetElement, /@parentThis@/g, {
1511
+ config: config,
1512
+ otherReplaceVariablePath: rawSet.findParentThisPath()
1513
+ });
1230
1514
  // console.log('@@@@@@@@@@@@@1', targetElement.innerHTML, rawSet.findParentThisPath());
1231
1515
  // console.log('@@@@@@@@@@@@@-----------', rawSet.point?.parentRawSet?.point?.start, rawSet.point?.parentRawSet?.point?.start instanceof HTMLMetaElement);
1232
1516
  // if (rawSet.point?.parentRawSet?.point?.start instanceof HTMLMetaElement) {
@@ -1240,11 +1524,11 @@ export class RawSet {
1240
1524
  // console.log('------', rawSet.findParentThisPath());
1241
1525
  const vars = this.drVarEncoding(targetElement, drVarOption);
1242
1526
  this.drVarDecoding(targetElement, vars);
1243
- this.drThisDecoding(targetElement, {asIs: thisRandom, toBe: '@this@'});
1527
+ this.drThisDecoding(targetElement, { asIs: thisRandom, toBe: '@this@' });
1244
1528
  // if (optionThisName && thisNameRandom)
1245
1529
  // this.drThisBindDecoding(targetElement, {config: config, asIs: thisNameRandom, toBe: `@${optionThisName}@`});
1246
- this.drThisBindDecoding(targetElement, {config: config, asIs: nearThisRandom, toBe: '@nearThis@'});
1247
- this.drThisBindDecoding(targetElement, {config: config, asIs: parentThisRandom, toBe: '@parentThis@'});
1530
+ this.drThisBindDecoding(targetElement, { config: config, asIs: nearThisRandom, toBe: '@nearThis@' });
1531
+ this.drThisBindDecoding(targetElement, { config: config, asIs: parentThisRandom, toBe: '@parentThis@' });
1248
1532
  // if (componentName) {
1249
1533
  // RawSet.replaceInnerHTML(element, {asIs: componentNameReplaceKey, toBe: `#${componentName}#`})
1250
1534
  // }
@@ -1256,7 +1540,7 @@ export class RawSet {
1256
1540
  // console.log('------childNodes', Array.from(n.childNodes))
1257
1541
  Array.from(targetElement.childNodes).forEach(it => fag.append(it));
1258
1542
  } else {
1259
- targetElement.classList.add(`${rawSet.uuid}`)
1543
+ targetElement.classList.add(`${rawSet.uuid}`);
1260
1544
  fag.append(targetElement);
1261
1545
  }
1262
1546
  // (fag as any).__domrender_this_variable_name = drThis;
@@ -1264,10 +1548,13 @@ export class RawSet {
1264
1548
  return fag;
1265
1549
  }
1266
1550
 
1267
- private static async fetchTemplateStyle(set: { template?: string, styles?: string | (string[]) }) {
1551
+ private static async fetchTemplateStyle(set: { template?: string; styles?: string | string[] }) {
1268
1552
  // const id = RandomUtils.getRandomString(20);
1269
1553
  const stylePromises: Promise<string>[] = [];
1270
- const templatePromise = (set.template && set.template.startsWith('lazy://') ? (await fetch(set.template.substring(6))).text() : Promise.resolve(set.template));
1554
+ const templatePromise =
1555
+ set.template && set.template.startsWith('lazy://')
1556
+ ? (await fetch(set.template.substring(6))).text()
1557
+ : Promise.resolve(set.template);
1271
1558
  if (Array.isArray(set.styles)) {
1272
1559
  for (let i = 0; set.styles && i < (set.styles.length ?? 0); i++) {
1273
1560
  const it = set.styles[i];
@@ -1285,7 +1572,11 @@ export class RawSet {
1285
1572
  };
1286
1573
  }
1287
1574
 
1288
- public static createComponentTargetAttribute(name: string, getThisObj: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => any, factory: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => DocumentFragment) {
1575
+ public static createComponentTargetAttribute(
1576
+ name: string,
1577
+ getThisObj: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => any,
1578
+ factory: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => DocumentFragment
1579
+ ) {
1289
1580
  const targetAttribute: TargetAttr = {
1290
1581
  name,
1291
1582
  callBack(element: Element, attrValue: string, obj: any, rawSet: RawSet): DocumentFragment {
@@ -1302,28 +1593,36 @@ export class RawSet {
1302
1593
  }
1303
1594
  return data;
1304
1595
  }
1305
-
1306
1596
  };
1307
1597
  return targetAttribute;
1308
1598
  }
1309
1599
 
1310
- public static createComponentTargetElement(
1311
- {name, objFactory, template = '', styles = [], noStrip}: {
1312
- name: string,
1313
- noStrip?: boolean;
1314
- objFactory: (element: Element, obj: any, rawSet: RawSet, counstructorParam: any[]) => any,
1315
- template?: string,
1316
- styles?: string | (string[])
1317
- }
1318
- ): TargetElement {
1319
-
1600
+ public static createComponentTargetElement({
1601
+ name,
1602
+ objFactory,
1603
+ template = '',
1604
+ styles = [],
1605
+ noStrip
1606
+ }: {
1607
+ name: string;
1608
+ noStrip?: boolean;
1609
+ objFactory: (element: Element, obj: any, rawSet: RawSet, counstructorParam: any[]) => any;
1610
+ template?: string;
1611
+ styles?: string | string[];
1612
+ }): TargetElement {
1320
1613
  const targetElement: TargetElement = {
1321
1614
  name,
1322
1615
  styles,
1323
1616
  template,
1324
1617
  noStrip,
1325
- async callBack(element: Element, obj: any, rawSet: RawSet, attrs: Attrs, config: DomRenderConfig): Promise<DocumentFragment | undefined> {
1326
- const templateStyle = await RawSet.fetchTemplateStyle({template: this.template, styles: this.styles});
1618
+ async callBack(
1619
+ element: Element,
1620
+ obj: any,
1621
+ rawSet: RawSet,
1622
+ attrs: Attrs,
1623
+ config: DomRenderConfig
1624
+ ): Promise<DocumentFragment | undefined> {
1625
+ const templateStyle = await RawSet.fetchTemplateStyle({ template: this.template, styles: this.styles });
1327
1626
  this.template = templateStyle.template;
1328
1627
  this.styles = templateStyle.styles;
1329
1628
  obj.__domrender_components ??= {};
@@ -1365,21 +1664,24 @@ export class RawSet {
1365
1664
  const constructor = element.getAttribute(RawSet.DR_ON_CONSTRUCTOR_ARGUMENTS_OPTIONNAME);
1366
1665
  let constructorParam = [];
1367
1666
  // script 부분은 처리되어 바인딩 시켜준다
1368
- render.attribute = RawSet.getAttributeObject(element, {script: renderScript, obj: obj, renderData: render})
1667
+ render.attribute = RawSet.getAttributeObject(element, { script: renderScript, obj: obj, renderData: render });
1369
1668
  render = Object.freeze(render);
1370
1669
  //
1371
1670
  // // dr-constructor
1372
1671
  if (constructor) {
1373
- let param = ScriptUtils.evaluateReturn({bodyScript: renderScript, returnScript: ObjectUtils.Path.toOptionalChainPath(constructor)}, Object.assign(obj, {__render: render})) ?? [];
1672
+ let param =
1673
+ ObjectUtils.Script.evaluateReturn(
1674
+ { bodyScript: renderScript, returnScript: ObjectUtils.Path.toOptionalChainPath(constructor) },
1675
+ Object.assign(obj, { __render: render })
1676
+ ) ?? [];
1374
1677
  if (!Array.isArray(param)) {
1375
1678
  param = [param];
1376
1679
  }
1377
1680
  constructorParam = param;
1378
1681
  }
1379
1682
 
1380
-
1381
1683
  // // console.log('------22', attrs);
1382
- const instance = domrenderComponents[rawSet.uuid] = objFactory(element, obj, rawSet, constructorParam);
1684
+ const instance = (domrenderComponents[rawSet.uuid] = objFactory(element, obj, rawSet, constructorParam));
1383
1685
  render = {
1384
1686
  currentThis: instance,
1385
1687
  // creatorMetaData: i,
@@ -1401,7 +1703,7 @@ export class RawSet {
1401
1703
  // i.drAttrs = attrs;
1402
1704
  // i.innerHTML = element.innerHTML;
1403
1705
  // i.rootCreator = new Proxy(obj, new DomRenderFinalProxy());
1404
- // i.creator = new Proxy(rawSet.point.thisVariableName ? ScriptUtils.evalReturn(rawSet.point.thisVariableName, obj) : obj, new DomRenderFinalProxy());
1706
+ // i.creator = new Proxy(rawSet.point.thisVariableName ? ObjectUtils.Script.evalReturn(rawSet.point.thisVariableName, obj) : obj, new DomRenderFinalProxy());
1405
1707
  // this.__creatorMetaData = i;
1406
1708
  // render = {
1407
1709
  // component: instance,
@@ -1414,7 +1716,7 @@ export class RawSet {
1414
1716
  // if (isOnChangeAttrRender(instance) && normalAttrMap) {
1415
1717
  // new Map<string, string>(JSON.parse(normalAttrMap)).forEach((value, key) => {
1416
1718
  // const script = `${renderScript} return ${value} `;
1417
- // const cval = ScriptUtils.eval(script, Object.assign(obj, { __render: render }));
1719
+ // const cval = ObjectUtils.Script.eval(script, Object.assign(obj, { __render: render }));
1418
1720
  // // element.setAttribute(key, cval);
1419
1721
  // instance.onChangeAttrRender(key, cval);
1420
1722
  // });
@@ -1422,7 +1724,7 @@ export class RawSet {
1422
1724
  //
1423
1725
  // // dr-on-create data
1424
1726
  // const onCreateDataScript = `return {rootParent: this, render: this.__render}`;
1425
- // const onCreateDataParam = ScriptUtils.eval(onCreateDataScript, Object.assign(obj, { __render: render }));
1727
+ // const onCreateDataParam = ObjectUtils.Script.eval(onCreateDataScript, Object.assign(obj, { __render: render }));
1426
1728
  // if (isOnCreateRenderData(instance)) {
1427
1729
  // instance?.onCreateRenderData(onCreateDataParam);
1428
1730
  // }
@@ -1433,7 +1735,7 @@ export class RawSet {
1433
1735
  // let createParam = [];
1434
1736
  // if (onCreate) {
1435
1737
  // const script = `${renderScript} return ${onCreate} `;
1436
- // createParam = ScriptUtils.eval(script, Object.assign(obj, { __render: render }));
1738
+ // createParam = ObjectUtils.Script.eval(script, Object.assign(obj, { __render: render }));
1437
1739
  // if (!Array.isArray(createParam)) {
1438
1740
  // createParam = [createParam];
1439
1741
  // }
@@ -1460,7 +1762,7 @@ export class RawSet {
1460
1762
  // const oninit = element.getAttribute(RawSet.DR_ON_CREATED_CALLBACK_OPTIONNAME); // dr-on-component-init
1461
1763
  // if (oninit) {
1462
1764
  // const script = `${renderScript} ${oninit} `;
1463
- // ScriptUtils.eval(script, Object.assign(obj, {
1765
+ // ObjectUtils.Script.eval(script, Object.assign(obj, {
1464
1766
  // __render: render
1465
1767
  // }));
1466
1768
  // }
@@ -1470,7 +1772,15 @@ export class RawSet {
1470
1772
 
1471
1773
  // 여기서 targetElement의 옷을 벗긴다.
1472
1774
  // console.log('---createComponentTargetElement', element);
1473
- let data = await RawSet.drThisCreate(rawSet, element, `this.__domrender_components.${rawSet.uuid}`, '', !noStrip, obj, config);
1775
+ let data = await RawSet.drThisCreate(
1776
+ rawSet,
1777
+ element,
1778
+ `this.__domrender_components.${rawSet.uuid}`,
1779
+ '',
1780
+ !noStrip,
1781
+ obj,
1782
+ config
1783
+ );
1474
1784
  // const tempDiv = document.createElement("div");
1475
1785
  // tempDiv.appendChild(data.cloneNode(true)); // 원본 보존
1476
1786
  // console.log('-------------ddddddddddddd', element.innerHTML, tempDiv.innerHTML);
@@ -1504,7 +1814,12 @@ export class RawSet {
1504
1814
  return StringUtils.regexExec(reg, data ?? '');
1505
1815
  }
1506
1816
 
1507
- public static destroy(obj: any | undefined, parameter: OnDestroyRenderParams, config: DomRenderConfig, destroyOptions: (DestroyOptionType | string)[] = []): void {
1817
+ public static destroy(
1818
+ obj: any | undefined,
1819
+ parameter: OnDestroyRenderParams,
1820
+ config: DomRenderConfig,
1821
+ destroyOptions: (DestroyOptionType | string)[] = []
1822
+ ): void {
1508
1823
  // console.log('destroy destroydestroydestroydestroy', obj, parameter, config, destroyOptions);
1509
1824
  if (!destroyOptions.some(it => it === DestroyOptionType.NO_DESTROY)) {
1510
1825
  if (!destroyOptions.some(it => it === DestroyOptionType.NO_MESSENGER_DESTROY)) {
@@ -1519,13 +1834,12 @@ export class RawSet {
1519
1834
  }
1520
1835
  }
1521
1836
 
1522
-
1523
1837
  public findNearThis = (obj: any, rawSet: RawSet = this) => {
1524
1838
  const path = this.findNearThisPath(rawSet);
1525
1839
  if (path) {
1526
1840
  const optionalPath = ObjectUtils.Path.toOptionalChainPath(path);
1527
1841
  // console.log('ppppp-', path, optionalPath)
1528
- return ScriptUtils.evaluateReturn(optionalPath, obj);
1842
+ return ObjectUtils.Script.evaluateReturn(optionalPath, obj);
1529
1843
  }
1530
1844
  };
1531
1845
 
@@ -1533,7 +1847,7 @@ export class RawSet {
1533
1847
  const path = this.findParentThisPath(rawSet);
1534
1848
  if (path) {
1535
1849
  const optionalPath = ObjectUtils.Path.toOptionalChainPath(path);
1536
- return ScriptUtils.evaluateReturn(optionalPath, obj);
1850
+ return ObjectUtils.Script.evaluateReturn(optionalPath, obj);
1537
1851
  }
1538
1852
  };
1539
1853
 
@@ -1552,11 +1866,10 @@ export class RawSet {
1552
1866
  const findPath = (rawSet: RawSet) => {
1553
1867
  if (rawSet && rawSet.point) {
1554
1868
  // jsDom에서 instranceof HTMLMetaElement가 안먹히는것같아? 간혈적으로?
1555
- if ('getAttribute' in rawSet.point.start && rawSet.point.start.getAttribute('this-path')) {
1869
+ if (rawSet.point?.start && ('getAttribute' in rawSet.point.start) && rawSet.point.start.getAttribute('this-path')) {
1556
1870
  paths.push(rawSet.point.start.getAttribute('this-path')!);
1557
1871
  }
1558
- if (rawSet.point.parentRawSet)
1559
- findPath(rawSet.point.parentRawSet);
1872
+ if (rawSet.point.parentRawSet) findPath(rawSet.point.parentRawSet);
1560
1873
  }
1561
1874
  };
1562
1875
  findPath(rawSet);
@@ -1564,7 +1877,7 @@ export class RawSet {
1564
1877
  return paths.reverse();
1565
1878
  };
1566
1879
 
1567
- public static getAttributeObject(element: Element, config: { script: string, obj: any, renderData?: any }) {
1880
+ public static getAttributeObject(element: Element, config: { script: string; obj: any; renderData?: any }) {
1568
1881
  if (!element) {
1569
1882
  return undefined;
1570
1883
  }
@@ -1572,11 +1885,13 @@ export class RawSet {
1572
1885
  const normalAttribute = attribute[EventManager.normalAttrMapAttrName];
1573
1886
  if (normalAttribute) {
1574
1887
  new Map<string, string>(JSON.parse(normalAttribute)).forEach((v, k) => {
1575
- const cval = ScriptUtils.evaluateReturn({bodyScript: config.script, returnScript: v}, Object.assign(config.obj, config.renderData ? {__render:config.renderData} : undefined));
1888
+ const cval = ObjectUtils.Script.evaluateReturn(
1889
+ { bodyScript: config.script, returnScript: v },
1890
+ Object.assign(config.obj, config.renderData ? { __render: config.renderData } : undefined)
1891
+ );
1576
1892
  attribute[k] = cval;
1577
1893
  });
1578
1894
  }
1579
1895
  return attribute;
1580
1896
  }
1581
-
1582
1897
  }