@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dooboostore/dom-render",
3
- "version": "1.0.108",
3
+ "version": "1.0.109",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -68,9 +68,9 @@
68
68
  },
69
69
  "peerDependencies": {
70
70
  "reflect-metadata": "^0.2.2",
71
- "@dooboostore/core-web": "1.0.6",
72
- "@dooboostore/core": "1.0.21",
73
- "@dooboostore/core-node": "1.0.7"
71
+ "@dooboostore/core": "1.0.22",
72
+ "@dooboostore/core-web": "1.0.7",
73
+ "@dooboostore/core-node": "1.0.8"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@babel/core": "^7.24.0",
@@ -98,13 +98,14 @@
98
98
  "clean": "rm -rf dist",
99
99
  "build:esm": "node build.mjs esm",
100
100
  "watch:esm": "pnpm run build:esm && node build.mjs esm --watch",
101
- "build:cjs": "node build.mjs cjs && cp package.cjs.json dist/cjs/package.json",
101
+ "build:cjs": "node build.mjs cjs",
102
102
  "watch:cjs": "pnpm run build:cjs && node build.mjs cjs --watch",
103
103
  "build": "pnpm run clean && node build.mjs all",
104
104
  "build:umd-bundle": "node build.mjs umd-bundle",
105
105
  "watch:umd-bundle": "pnpm run build:umd-bundle && node build.mjs umd-bundle --watch",
106
106
  "build:esm-bundle": "node build.mjs esm-bundle",
107
107
  "watch:esm-bundle": "pnpm run build:esm-bundle && node build.mjs esm-bundle --watch",
108
+ "watch": "node build.mjs all --watch",
108
109
  "publish:npm": "pnpm run build && cp package.json package.json.back && pnpm pack && TARBALL_NAME=$(ls dooboostore-dom-render-*.tgz | head -n 1) && tar -xzf \"$TARBALL_NAME\" -C . --strip-components=1 package/package.json && rm \"$TARBALL_NAME\" && (pnpm publish --no-git-checks || true) && cp package.json.back package.json && rm -rf package.json.back ",
109
110
  "ts:clean": "find . -name '*.js' -o -name '*.map' -o -name '*.d.ts' | xargs rm -f",
110
111
  "typecheck": "pnpm exec tsc --noEmit",
package/src/DomRender.ts CHANGED
@@ -11,24 +11,30 @@ import { drComponent } from './components';
11
11
  import { EventManager } from './events/EventManager';
12
12
  import { RandomUtils } from '@dooboostore/core/random/RandomUtils';
13
13
 
14
- export type DomRenderRunConfig<T = any> = Omit<DomRenderConfig<T>, 'router' | 'uuid' | 'eventManager' | 'messenger' | 'root' | 'rootElement'> & { routerType?: 'path' | 'hash' | ((obj: T, window: Window) => Router) | Router };
14
+ export type DomRenderRunConfig<T = any> = Omit<DomRenderConfig<T>, 'router' | 'uuid' | 'eventManager' | 'messenger' | 'root' | 'rootElement'> & { routerType?: 'path' | 'hash' | ((obj: T, targetConfig: DomRenderConfig) => Router) | Router };
15
15
  export type CreateComponentParam = { type: ConstructorType<any> | any, tagName?: string, noStrip?: boolean, template?: string, styles?: string[] | string };
16
16
  let eventManager: EventManager | null = null;
17
17
  export type DomRenderRunParameter<T extends object> = { rootObject: T | (() => T), target?: Element | null, config?: DomRenderRunConfig | DomRenderConfig };
18
18
 
19
+ export type ExecuteConfig = { firstUrl?: string };
20
+
19
21
  export class DomRender<T extends object = any> {
20
22
  private _config: DomRenderConfig;
21
23
  private _target: Element | null | undefined;
22
24
  private _rootObject: T;
25
+ private _router: Router;
26
+ private _eventManager: EventManager;
23
27
 
24
- constructor(parameter: DomRenderRunParameter<T>, executeConfig?: { autoGo?: string }) {
25
- const s = DomRender.runSet(parameter);
28
+ constructor(parameter: DomRenderRunParameter<T>, executeConfig?: ExecuteConfig) {
29
+ const s = DomRender.runSet(parameter,executeConfig);
26
30
  this._config = s.config;
27
31
  this._target = s.target;
28
32
  this._rootObject = s.rootObject;
29
- if (executeConfig && executeConfig?.autoGo) {
30
- this._config.router?.go(executeConfig.autoGo);
31
- }
33
+ this._router = s.config.router;
34
+ this._eventManager = s.config.eventManager;
35
+ // if (executeConfig && executeConfig?.autoGo) {
36
+ // this._config.router?.go(executeConfig.autoGo);
37
+ // }
32
38
  }
33
39
 
34
40
  public get rootObject(): T {
@@ -38,8 +44,14 @@ export class DomRender<T extends object = any> {
38
44
  public get config(): DomRenderConfig {
39
45
  return this._config;
40
46
  }
47
+ public get router(): Router {
48
+ return this._router;
49
+ }
41
50
 
42
- public get target(): Element | null |undefined {
51
+ public get eventManager(): EventManager {
52
+ return this._eventManager;
53
+ }
54
+ public get target(): Element | null | undefined {
43
55
  return this._target;
44
56
  }
45
57
 
@@ -47,7 +59,11 @@ export class DomRender<T extends object = any> {
47
59
  return DomRender.runSet(data).rootObject;
48
60
  }
49
61
 
50
- public static runSet<T extends object>({rootObject, target, config}: DomRenderRunParameter<T>): { rootObject: T, target?: Element | null, config: DomRenderConfig } {
62
+ public static runSet<T extends object>({
63
+ rootObject,
64
+ target,
65
+ config
66
+ }: DomRenderRunParameter<T>, executeConfig?: ExecuteConfig): { rootObject: T; target?: Element | null; config: DomRenderConfig } {
51
67
  // public static run<T extends object>({rootObject, target, config}: DomRenderRunParameter<T>): T {
52
68
  // console.log('runSet')
53
69
  rootObject = typeof rootObject === 'function' ? rootObject() : rootObject;
@@ -58,7 +74,7 @@ export class DomRender<T extends object = any> {
58
74
  }
59
75
  targetObject = rootObject;
60
76
  // return targetObject;
61
- return {rootObject: targetObject, target, config: (rootObject as any)._domRender_config};
77
+ return { rootObject: targetObject, target, config: (rootObject as any)._domRender_config };
62
78
  }
63
79
  const targetConfig = Object.assign({}, config) as DomRenderConfig;
64
80
  eventManager ??= new EventManager(targetConfig.window);
@@ -68,7 +84,6 @@ export class DomRender<T extends object = any> {
68
84
  targetConfig.proxyExcludeTyps = targetConfig.proxyExcludeTyps ?? [];
69
85
  targetConfig.targetElements ??= [];
70
86
 
71
-
72
87
  if (typeof Window !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === Window)) {
73
88
  targetConfig.proxyExcludeTyps.push(Window);
74
89
  }
@@ -87,12 +102,27 @@ export class DomRender<T extends object = any> {
87
102
  if (typeof ImageBitmap !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === ImageBitmap)) {
88
103
  targetConfig.proxyExcludeTyps.push(ImageBitmap);
89
104
  }
90
- if (typeof CanvasRenderingContext2D !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === CanvasRenderingContext2D)) {
105
+ if ( typeof CanvasRenderingContext2D !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === CanvasRenderingContext2D) ) {
91
106
  targetConfig.proxyExcludeTyps.push(CanvasRenderingContext2D);
92
107
  }
93
- if (typeof HTMLCanvasElement !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === HTMLCanvasElement)) {
94
- targetConfig.proxyExcludeTyps.push(HTMLCanvasElement);
108
+ if ( typeof CSSStyleDeclaration !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === CSSStyleDeclaration) ) {
109
+ targetConfig.proxyExcludeTyps.push(CSSStyleDeclaration);
95
110
  }
111
+ if ( typeof Date !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === Date) ) {
112
+ targetConfig.proxyExcludeTyps.push(Date);
113
+ }
114
+ if ( typeof MutationObserver !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === IntersectionObserver) ) {
115
+ targetConfig.proxyExcludeTyps.push(IntersectionObserver);
116
+ }
117
+ if ( typeof IntersectionObserver !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === IntersectionObserver) ) {
118
+ targetConfig.proxyExcludeTyps.push(IntersectionObserver);
119
+ }
120
+ if (typeof HTMLElement !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === HTMLElement)) {
121
+ targetConfig.proxyExcludeTyps.push(HTMLElement);
122
+ }
123
+ // if (typeof HTMLCanvasElement !== 'undefined' && !targetConfig.proxyExcludeTyps.some(it => it === HTMLCanvasElement)) {
124
+ // targetConfig.proxyExcludeTyps.push(HTMLCanvasElement);
125
+ // }
96
126
  if (!targetConfig.proxyExcludeTyps.some(it => it === RawSet)) {
97
127
  targetConfig.proxyExcludeTyps.push(RawSet);
98
128
  }
@@ -112,11 +142,11 @@ export class DomRender<T extends object = any> {
112
142
  if (!targetConfig.router) {
113
143
  let targetRouter: Router<any> | undefined;
114
144
  if ('routerType' in config && config?.routerType === 'hash') {
115
- targetRouter = new HashRouter({rootObject: targetObject, window: targetConfig.window});
145
+ targetRouter = new HashRouter({ rootObject: targetObject, window: targetConfig.window, firstUrl: executeConfig?.firstUrl });
116
146
  } else if ('routerType' in config && config?.routerType === 'path') {
117
- targetRouter = new PathRouter({rootObject: targetObject, window: targetConfig.window});
147
+ targetRouter = new PathRouter({ rootObject: targetObject, window: targetConfig.window, firstUrl: executeConfig?.firstUrl });
118
148
  } else if ('routerType' in config && typeof config?.routerType === 'function') {
119
- targetRouter = config.routerType(targetObject, targetConfig.window);
149
+ targetRouter = config.routerType(targetObject, targetConfig);
120
150
  } else if ('routerType' in config && typeof config?.routerType === 'object') {
121
151
  targetRouter = config.routerType;
122
152
  }
@@ -141,33 +171,31 @@ export class DomRender<T extends object = any> {
141
171
  // }
142
172
  // }
143
173
  domRender.run(targetObject);
144
- return {rootObject: targetObject, config: targetConfig, target};
174
+ return { rootObject: targetObject, config: targetConfig, target };
145
175
  // return targetObject;
146
176
  }
147
177
 
148
178
  public static createComponent(param: CreateComponentParam) {
149
179
  // console.log('===>', typeof param.type, param.type.name, param.type.constructor.name)
150
- const component = RawSet.createComponentTargetElement(
151
- {
152
- name: param.tagName ?? (typeof param.type === 'function' ? param.type.name : param.type.constructor.name),
153
- objFactory: (e, o, r2, counstructorParam) => {
154
- return typeof param.type === 'function' ? new param.type(...counstructorParam) : param.type;
155
- },
156
- noStrip: param.noStrip,
157
- template: param.template ?? '',
158
- styles: Array.isArray(param.styles) ? param.styles : (param.styles ? [param.styles] : undefined)
159
- }
160
- );
180
+ const component = RawSet.createComponentTargetElement({
181
+ name: param.tagName ?? (typeof param.type === 'function' ? param.type.name : param.type.constructor.name),
182
+ objFactory: (e, o, r2, counstructorParam) => {
183
+ return typeof param.type === 'function' ? new param.type(...counstructorParam) : param.type;
184
+ },
185
+ noStrip: param.noStrip,
186
+ template: param.template ?? '',
187
+ styles: Array.isArray(param.styles) ? param.styles : param.styles ? [param.styles] : undefined
188
+ });
161
189
  return component;
162
190
  }
163
191
 
164
192
  // ?? 언제 쓰는거지?? 훔..
165
- public static createAttribute(attrName: string, getThisObj: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => any, factory: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => DocumentFragment) {
166
- const targetAttribute = RawSet.createComponentTargetAttribute(
167
- attrName,
168
- getThisObj,
169
- factory
170
- );
193
+ public static createAttribute(
194
+ attrName: string,
195
+ getThisObj: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => any,
196
+ factory: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => DocumentFragment
197
+ ) {
198
+ const targetAttribute = RawSet.createComponentTargetAttribute(attrName, getThisObj, factory);
171
199
  return targetAttribute;
172
200
  }
173
201
  }
@@ -1,4 +1,4 @@
1
- import { RawSet } from './rawsets/RawSet';
1
+ import { RawSet, RenderResult } from './rawsets/RawSet';
2
2
  import { EventManager } from './events/EventManager';
3
3
  import { DomRenderConfig } from './configs/DomRenderConfig';
4
4
  import { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';
@@ -19,6 +19,7 @@ import { isOnChildRenderedByProperty } from './lifecycle/OnChildRenderedByProper
19
19
  import { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';
20
20
  import {ValidUtils} from '@dooboostore/core/valid/ValidUtils'
21
21
  import { isOnProxyDomRender } from './lifecycle/OnProxyDomRender';
22
+ import { isOnRawSetRendered } from './lifecycle/OnRawSetRendered';
22
23
 
23
24
  const excludeGetSetPropertys = ['onBeforeReturnGet', 'onBeforeReturnSet', '__domrender_components', '__render', '_DomRender_isFinal', '_domRender_ref', '_rawSets', '_domRender_proxy', '_targets', '_DomRender_origin', '_DomRender_ref', '_DomRender_proxy'];
24
25
  export const isWrapProxyDomRenderProxy = <T>(obj: T): boolean => {
@@ -75,7 +76,7 @@ export class DomRenderProxy<T extends object> implements ProxyHandler<T> {
75
76
  }
76
77
 
77
78
  public static isFinal<T = any>(obj: T) {
78
- return DomRenderFinalProxy.isFinal(obj);
79
+ return ValidUtils.isNull(obj) || DomRenderFinalProxy.isFinal(obj);
79
80
  }
80
81
 
81
82
  public run(objProxy: T) {
@@ -209,6 +210,8 @@ export class DomRenderProxy<T extends object> implements ProxyHandler<T> {
209
210
  // console.log('getUsingTriggerVariables->', path);
210
211
  this.addRawSet(path, it);
211
212
  });
213
+
214
+ let renderResult: RenderResult | undefined;
212
215
  if (it.isConnected) {
213
216
  // 중요 render될때 targetAttribute 체크 해야함.
214
217
  const targetAttrMap = (it.point.node as Element)?.getAttribute?.(EventManager.normalAttrMapAttrName);
@@ -238,14 +241,22 @@ export class DomRenderProxy<T extends object> implements ProxyHandler<T> {
238
241
  // ------------------->
239
242
  } else {
240
243
  const rawSets = await it.render(this._domRender_proxy, this._domRender_config);
244
+ renderResult = rawSets;
241
245
  // 그외 자식들 render
242
- if (rawSets && rawSets.length > 0) {
243
- await this.render(rawSets);
246
+ if (rawSets && rawSets.raws.length > 0) {
247
+ await this.render(rawSets.raws);
244
248
  }
245
249
  }
246
250
  } else {
247
251
  removeRawSets.push(it);
248
252
  }
253
+
254
+ const t = it.findNearThis(this._domRender_proxy)
255
+ // TODO: 호출된곳에서 또 변수를 수정하게되면 무한루프니깐 왠만하면 사용못하게 해야한다.
256
+ if(isOnRawSetRendered(t)){
257
+ await t.onRawSetRendered(it, {path: fullPathStr, renderResult});
258
+ }
259
+ // console.log('----', it);
249
260
  }
250
261
 
251
262
  if (removeRawSets.length > 0) {
@@ -316,7 +327,7 @@ export class DomRenderProxy<T extends object> implements ProxyHandler<T> {
316
327
  const firstTargetDictionary: RawSet[] = [];
317
328
  firstTargets?.forEach(it => {
318
329
  // console.log('----forEach---', it);
319
- const type = (it.point.start as Element).getAttribute?.('type');
330
+ const type = (it.point.start as Element)?.getAttribute?.('type');
320
331
  if (type === RawSetOperatorType.DR_THIS_PROPERTY) {
321
332
  firstTargetDictionary.push(it);
322
333
  }
@@ -397,6 +408,7 @@ export class DomRenderProxy<T extends object> implements ProxyHandler<T> {
397
408
 
398
409
  public set(target: T, p: string | symbol, value: any, receiver: T): boolean {
399
410
  // console.log('set------->', target, p, value, receiver, Date.now())
411
+ // console.log('set------->', p,value)
400
412
  // console.log('set------->', target, p, value, receiver, Date.now())
401
413
  // try {
402
414
  // const isNoProxy = Reflect.getMetadata(DomRenderNoProxyKey, target, p) || Reflect.getMetadata(DomRenderNoProxyKey, Object.getPrototypeOf(obj).constructor);
@@ -497,6 +509,8 @@ export class DomRenderProxy<T extends object> implements ProxyHandler<T> {
497
509
  }
498
510
  })
499
511
  })
512
+
513
+ // console.log('---end',receiver);
500
514
  if (('onBeforeReturnSet' in receiver) && typeof p === 'string' && !(this._domRender_config.proxyExcludeOnBeforeReturnSets ?? []).concat(excludeGetSetPropertys).includes(p)) {
501
515
  if(isOnBeforeReturnSet(receiver)){
502
516
  receiver.onBeforeReturnSet?.(p, value, fullPathInfo.map(it => it.map(it=>it.path).join()));
@@ -555,8 +569,6 @@ export class DomRenderProxy<T extends object> implements ProxyHandler<T> {
555
569
  }
556
570
 
557
571
  proxy(parentProxy: T, obj: T | any, p: string) {
558
-
559
-
560
572
  try {
561
573
  // const isNoProxy = Reflect.getMetadata(DomRenderNoProxyKey, obj, p) || Reflect.getMetadata(DomRenderNoProxyKey, Object.getPrototypeOf(obj).constructor);
562
574
  const isObject = typeof obj === 'object';
@@ -565,7 +577,7 @@ export class DomRenderProxy<T extends object> implements ProxyHandler<T> {
565
577
  const isFinal = isObject && DomRenderProxy.isFinal(obj);
566
578
  const isFrozen = Object.isFrozen(obj);
567
579
  const isShield = obj instanceof Shield;
568
- if (isNoProxy || isExclude || ValidUtils.isNullOrUndefined(obj) || !isObject || isFinal || isFrozen || isShield) {
580
+ if (obj === undefined || obj === null || isNoProxy || isExclude || ValidUtils.isNullOrUndefined(obj) || !isObject || isFinal || isFrozen || isShield) {
569
581
  return obj;
570
582
  }
571
583
  } catch (e) {
@@ -1,3 +1,6 @@
1
+ import 'reflect-metadata';
2
+ export * as Core from '@dooboostore/core/bundle-entry';
3
+ export * as CoreWeb from '@dooboostore/core-web/bundle-entry';
1
4
  // export { DomRender, type DomRenderRunConfig, type CreateComponentParam } from './DomRender';
2
5
  // export { DomRenderProxy, getDomRenderConfig, getDomRenderOriginObject, getDomRenderProxy, isWrapProxyDomRenderProxy } from './DomRenderProxy';
3
6
 
@@ -9,10 +12,9 @@ export * from './events';
9
12
  export * from './iterators';
10
13
  export * from './lifecycle';
11
14
  export * from './messenger';
12
- // export * from './operators';
13
- export { Appender as AppenderArray, Dr, DrAppender, DrFor, DrForOf, DrForm, DrIf, DrInnerHTML, DrInnerText, DrPre, DrRepeat, DrStripElement, DrTargetAttr, DrTargetElement, DrTargetElementIsElement, DrThis, DrThisProperty, OperatorExecuter, OperatorExecuterAttrRequire } from './operators';
15
+ export * from './operators';
14
16
  export * from './rawsets';
15
17
  export * from './routers';
16
18
  export * from './types';
17
19
  export * from './validators';
18
- export * from './components';
20
+ export { drComponent , If, This, Appender as AppenderComponent, PromiseSwitch, Choose, CheckBox, Radio, Select, Timer, Details, Input, Route, RouterOutlet, A } from './components';
@@ -16,6 +16,7 @@ import { DomRenderConfig } from '../configs/DomRenderConfig';
16
16
  import { Subject } from '@dooboostore/core/message/Subject';
17
17
  import { debounceTime } from '@dooboostore/core/message/operators/debounceTime';
18
18
  import type { Subscription } from '@dooboostore/core/message/Subscription';
19
+ import { OnRawSetRendered, OnRawSetRenderedOtherData } from "../lifecycle/OnRawSetRendered";
19
20
 
20
21
 
21
22
  export const ATTRIBUTE_METADATA_KEY = Symbol('attribute');
@@ -36,6 +37,7 @@ export interface QueryMetadata {
36
37
  convert?: (e: Element) => any;
37
38
  onDestroy?: (componentInstance: any, element: Element) => void;
38
39
  refreshTime?: number; // milliseconds
40
+ refreshRawSetRendered?: boolean;
39
41
  }
40
42
 
41
43
  export interface EventMetadata {
@@ -44,6 +46,7 @@ export interface EventMetadata {
44
46
  methodName: string | symbol;
45
47
  onDestroy?: (componentInstance: any, element: Element) => void;
46
48
  refreshTime?: number; // milliseconds
49
+ refreshRawSetRendered?: boolean;
47
50
  }
48
51
 
49
52
  export function attribute(nameOrOptions?: string | { name?: string, converter?: (value: any | string | null) => any }): (target: object, propertyKey: string | symbol, descriptor?: PropertyDescriptor) => void {
@@ -74,7 +77,7 @@ export function attribute(nameOrOptions?: string | { name?: string, converter?:
74
77
  };
75
78
  }
76
79
 
77
- export function query(selectorOrOptions: string | { selector: string, convert?: (e: Element) => any, onDestroy?: (componentInstance: any, element: Element) => void, refreshIntervalTime?: number }): (target: object, propertyKey: string | symbol, descriptor?: PropertyDescriptor) => void {
80
+ export function query(selectorOrOptions: string | { selector: string, convert?: (e: Element) => any, onDestroy?: (componentInstance: any, element: Element) => void, refreshIntervalTime?: number, refreshRawSetRendered?: boolean }): (target: object, propertyKey: string | symbol, descriptor?: PropertyDescriptor) => void {
78
81
  return (target: object, propertyKey: string | symbol, descriptor?: PropertyDescriptor) => {
79
82
  const queries = ReflectUtils.getMetadata<QueryMetadata[]>(QUERY_METADATA_KEY, target.constructor) || [];
80
83
 
@@ -82,7 +85,8 @@ export function query(selectorOrOptions: string | { selector: string, convert?:
82
85
  let convert: ((e: Element) => any) | undefined;
83
86
  let onDestroy: ((componentInstance: any, element: Element) => void) | undefined;
84
87
  let refreshTime: number | undefined;
85
-
88
+ let refreshRawSetRendered: boolean | undefined;
89
+
86
90
  if (typeof selectorOrOptions === 'string') {
87
91
  selector = selectorOrOptions;
88
92
  } else {
@@ -90,6 +94,7 @@ export function query(selectorOrOptions: string | { selector: string, convert?:
90
94
  convert = selectorOrOptions.convert;
91
95
  onDestroy = selectorOrOptions.onDestroy;
92
96
  refreshTime = selectorOrOptions.refreshIntervalTime;
97
+ refreshRawSetRendered = selectorOrOptions.refreshRawSetRendered;
93
98
  }
94
99
 
95
100
  const queryMetadata: QueryMetadata = {
@@ -98,7 +103,8 @@ export function query(selectorOrOptions: string | { selector: string, convert?:
98
103
  isMethod: !!descriptor,
99
104
  convert: convert,
100
105
  onDestroy: onDestroy,
101
- refreshTime: refreshTime
106
+ refreshTime: refreshTime,
107
+ refreshRawSetRendered
102
108
  };
103
109
 
104
110
  queries.push(queryMetadata);
@@ -106,7 +112,7 @@ export function query(selectorOrOptions: string | { selector: string, convert?:
106
112
  };
107
113
  }
108
114
 
109
- export function event(options: { query: string, name: string, onDestroy?: (componentInstance: any, element: Element) => void, refreshTime?: number }): MethodDecorator {
115
+ export function event(options: { query: string, name: string, onDestroy?: (componentInstance: any, element: Element) => void, refreshTime?: number, refreshRawSetRendered?: boolean }): MethodDecorator {
110
116
  return (target: object, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {
111
117
  const events = ReflectUtils.getMetadata<EventMetadata[]>(EVENT_METADATA_KEY, target.constructor) || [];
112
118
 
@@ -115,7 +121,8 @@ export function event(options: { query: string, name: string, onDestroy?: (compo
115
121
  eventName: options.name,
116
122
  methodName: propertyKey,
117
123
  onDestroy: options.onDestroy,
118
- refreshTime: options.refreshTime
124
+ refreshTime: options.refreshTime,
125
+ refreshRawSetRendered: options.refreshRawSetRendered
119
126
  };
120
127
 
121
128
  events.push(eventMetadata);
@@ -128,7 +135,7 @@ export type ComponentBaseConfig = { onlyParentType?: ConstructorType<any>[] | Co
128
135
 
129
136
  export type ChildrenSet = { instance: any, data: OnCreateRenderDataParams };
130
137
 
131
- export class ComponentBase<T = any, C extends ComponentBaseConfig = ComponentBaseConfig> implements OnChangeAttrRender, OnCreateRenderData, OnCreatedThisChild, OnDrThisBind, OnDrThisUnBind, OnInitRender, OnDestroyRender {
138
+ export class ComponentBase<T = any, C extends ComponentBaseConfig = ComponentBaseConfig> implements OnChangeAttrRender, OnCreateRenderData, OnCreatedThisChild, OnDrThisBind, OnDrThisUnBind, OnInitRender, OnDestroyRender, OnRawSetRendered {
132
139
  @DomRenderNoProxy
133
140
  private _rawSet?: RawSet;
134
141
  @DomRenderNoProxy
@@ -366,6 +373,21 @@ export class ComponentBase<T = any, C extends ComponentBaseConfig = ComponentBas
366
373
  this._refreshTimers.clear();
367
374
  }
368
375
 
376
+ async onRawSetRendered(rawSet: RawSet, otherData: OnRawSetRenderedOtherData): Promise<void> {
377
+ const queries = ReflectUtils.getMetadata<QueryMetadata[]>(QUERY_METADATA_KEY, this.constructor);
378
+ if (queries) {
379
+ queries.filter(it => it.refreshRawSetRendered).forEach(queryInfo => {
380
+ this._updateQueryBinding(queryInfo, rawSet, true);
381
+ });
382
+ }
383
+
384
+ const events = ReflectUtils.getMetadata<EventMetadata[]>(EVENT_METADATA_KEY, this.constructor);
385
+ if (events) {
386
+ events.filter(it => it.refreshRawSetRendered).forEach(eventInfo => {
387
+ this._updateEventBinding(eventInfo, rawSet, true);
388
+ });
389
+ }
390
+ }
369
391
  /**
370
392
  * Manually refresh all query and event decorators
371
393
  * Useful when DOM elements are dynamically added/removed and you want to update bindings
@@ -587,7 +609,7 @@ export class ComponentBase<T = any, C extends ComponentBaseConfig = ComponentBas
587
609
 
588
610
  // TODO: rawSet isConnected로 체크해서 들어가있는것만 처리되도록 또는 이미들어가있는것도 뺴야될것같은데.. 적용하긴했음..지켜봐야될듯.
589
611
  onCreatedThisChild(child: any, data: OnCreateRenderDataParams) {
590
- // console.log('------------------------',child, data, data.render?.rawSet?.isConnected)
612
+ // console.log('onCreatedThisChild------------------------',child, data, data.render?.rawSet?.isConnected)
591
613
  const n = [...this._children];
592
614
  n.push({instance:child, data});
593
615
  this._children = n.filter(it=>it.data.render?.rawSet?.isConnected)
@@ -1,8 +1,19 @@
1
1
  import { ChildrenSet, ComponentBase, ComponentBaseConfig } from './ComponentBase';
2
2
  import { ComponentSet } from './ComponentSet';
3
3
  import { isOnDrThisUnBind } from '../lifecycle/dr-this/OnDrThisUnBind';
4
+ import {RouterOutlet} from '../components/router/RouterOutlet';
4
5
 
6
+ export interface OnCreatedOutlet {
7
+ onCreatedOutlet(child: any): void;
8
+ }
9
+ export const isOnCreatedOutlet = (obj: any): obj is OnCreatedOutlet =>
10
+ typeof obj?.onCreatedOutlet === 'function';
5
11
 
12
+ export interface OnCreatedOutletDebounce {
13
+ onCreatedOutletDebounce(child: any): void;
14
+ }
15
+ export const isOnCreatedOutletDebounce = (obj: any): obj is OnCreatedOutletDebounce =>
16
+ typeof obj?.onCreatedOutletDebounce === 'function';
6
17
  export type ComponentRouterBaseConfig = ComponentBaseConfig & { sameRouteNoApply?: boolean };
7
18
 
8
19
  export abstract class ComponentRouterBase<T = any>
@@ -19,17 +30,21 @@ export abstract class ComponentRouterBase<T = any>
19
30
  // return this._child;
20
31
  // }
21
32
 
33
+
22
34
  setChild(child: ComponentSet) {
23
- // console.log('setChild!!', child, (this as any).name)
35
+ console.log('setChild!!', child, (this as any).name)
24
36
  if (child) {
25
37
  this.child = child;
26
38
  } else {
27
39
  this.child = undefined;
28
40
  }
41
+ const routerOutletChildren = this.getChildren(RouterOutlet.RouterOutlet);
42
+ routerOutletChildren.forEach(it => {
43
+ it.setValue(this.child)
44
+ })
29
45
  }
30
46
 
31
47
  onDrThisUnBind(): void {
32
- // console.log('--ComponentRouterBase--onDrThisUnBind-')
33
48
  super.onDrThisUnBind();
34
49
  if (this.child && isOnDrThisUnBind(this.child?.obj)) {
35
50
  this.child.obj.onDrThisUnBind();
@@ -58,7 +58,9 @@ export namespace Choose {
58
58
  child.data = this.getAttribute('data') as any;
59
59
  // when.hidden = true;
60
60
 
61
+ console.log('eeeeeee?', child, child.getAttribute('test'), this.getAttribute('data'));
61
62
  if (!this.choose && child instanceof When && child.getAttribute('test')?.(this.getAttribute('data'))) {
63
+ console.log('eeeeeee?2');
62
64
  // console.log('------------', child.attribute?.test?.(this.attribute?.data))
63
65
  this.choose = child;
64
66
  if (child.hidden) {
@@ -69,12 +71,14 @@ export namespace Choose {
69
71
  child.hidden = true;
70
72
  }
71
73
 
74
+ console.log('eeeeeee?3');
72
75
  if (!this.choose && child instanceof OtherWise) {
73
76
  this.choose = child;
74
77
  if (child.hidden) {
75
78
  child.hidden = false;
76
79
  }
77
80
  }
81
+ console.log('eeeeeee?34');
78
82
  }
79
83
  }
80
84
  }
@@ -1,11 +1,12 @@
1
- import { ComponentBase } from '../ComponentBase';
1
+ import { ChildrenSet, ComponentBase } from '../ComponentBase';
2
2
  import { DomRender, DomRenderRunConfig } from '../../DomRender';
3
3
  import { RawSet } from '../../rawsets/RawSet';
4
4
  import { OtherData } from '../../lifecycle/OnChangeAttrRender';
5
5
  import { OnInitRender } from '../../lifecycle/OnInitRender';
6
6
  import { ComponentSet } from '../../components/ComponentSet';
7
7
  import { OnDestroyRenderParams } from '../../lifecycle/OnDestroyRender';
8
- import { ComponentRouterBase } from '../../components/ComponentRouterBase';
8
+ import { ComponentRouterBase, isOnCreatedOutletDebounce } from '../../components/ComponentRouterBase';
9
+ import { OnCreateRenderDataParams } from 'src/lifecycle';
9
10
  export namespace RouterOutlet {
10
11
  export const selector = 'dr-router-outlet';
11
12
  export type Attribute = {
@@ -13,6 +14,7 @@ export namespace RouterOutlet {
13
14
  if: boolean | null;
14
15
  createArguments: any[];
15
16
  onCreated?: (value: any) => void;
17
+ onCreatedDebounce?: (value: any) => void;
16
18
  onDestroyRender?: () => void;
17
19
  };
18
20
 
@@ -23,13 +25,17 @@ export namespace RouterOutlet {
23
25
 
24
26
  setValue(value: ComponentSet) {
25
27
  this.value = value;
28
+ // console.log('sssssssssss');
26
29
  }
27
30
 
28
31
  onInitRender(param: any, rawSet: RawSet) {
29
32
  super.onInitRender(param, rawSet);
30
33
  const c = this.getParentThis();
31
- if (c instanceof ComponentRouterBase){
32
- this.value = c.child
34
+ const userValue = this.getAttribute('value');
35
+ if (userValue) {
36
+ this.value = userValue;
37
+ } else if (c instanceof ComponentRouterBase) {
38
+ this.value = c.child;
33
39
  }
34
40
  // console.log('------',c);
35
41
  }
@@ -51,6 +57,20 @@ export namespace RouterOutlet {
51
57
  }
52
58
  }
53
59
 
60
+ onCreatedThisChild(child:any, data:OnCreateRenderDataParams){
61
+ super.onCreatedThisChild(child, data);
62
+ // console.log('outlet--oncreatedThisChild',child);
63
+ }
64
+
65
+ onCreatedThisChildDebounce(childrenSet: ChildrenSet[]) {
66
+ super.onCreatedThisChildDebounce(childrenSet);
67
+ let parentThis = this.getParentThis();
68
+ // console.log('---', parentThis);
69
+ if (isOnCreatedOutletDebounce(parentThis)) {
70
+ parentThis.onCreatedOutletDebounce(this.value?.obj);
71
+ }
72
+ this.getAttribute('onCreatedDebounce')?.(this.value?.obj);
73
+ }
54
74
  created(component: any) {
55
75
  component ??= this.value?.obj;
56
76
  this.getAttribute('onCreated')?.(component);
@@ -60,7 +80,7 @@ export namespace RouterOutlet {
60
80
 
61
81
  export default {
62
82
  // TODO: 왜 이놈만 webpack에서 순환참조 에러나는지모르겠다.. 왜 이놈만.. 그래서 이렇게 하긴함.
63
- routerOutlet: (config?: DomRenderRunConfig, executer?: {run: (...data: any[])=>any}) => {
83
+ routerOutlet: (config?: DomRenderRunConfig, executer?: { run: (...data: any[]) => any }) => {
64
84
  return RawSet.createComponentTargetElement({
65
85
  name: RouterOutlet.selector,
66
86
  template: