@dooboostore/dom-render 1.0.108 → 1.0.110

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 (236) 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 +134 -62
  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 +24 -6
  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/appender/Appender.js +0 -3
  13. package/dist/cjs/components/appender/Appender.js.map +2 -2
  14. package/dist/cjs/components/checkbox/CheckBox.js.map +2 -2
  15. package/dist/cjs/components/choose/Choose.js +7 -1
  16. package/dist/cjs/components/choose/Choose.js.map +2 -2
  17. package/dist/cjs/components/details/Details.js +2 -2
  18. package/dist/cjs/components/details/Details.js.map +2 -2
  19. package/dist/cjs/components/forOf/ForOf.js.map +2 -2
  20. package/dist/cjs/components/if/If.js +2 -2
  21. package/dist/cjs/components/if/If.js.map +2 -2
  22. package/dist/cjs/components/input/Input.js +2 -2
  23. package/dist/cjs/components/input/Input.js.map +2 -2
  24. package/dist/cjs/components/promise/PromiseSwitch.js +6 -6
  25. package/dist/cjs/components/promise/PromiseSwitch.js.map +2 -2
  26. package/dist/cjs/components/radio/Radio.js.map +2 -2
  27. package/dist/cjs/components/router/Route.js +2 -2
  28. package/dist/cjs/components/router/Route.js.map +2 -2
  29. package/dist/cjs/components/router/RouterOutlet.js +17 -3
  30. package/dist/cjs/components/router/RouterOutlet.js.map +2 -2
  31. package/dist/cjs/components/select/Select.js +26 -12
  32. package/dist/cjs/components/select/Select.js.map +2 -2
  33. package/dist/cjs/components/this/This.js +2 -2
  34. package/dist/cjs/components/this/This.js.map +2 -2
  35. package/dist/cjs/components/timer/Timer.js +15 -13
  36. package/dist/cjs/components/timer/Timer.js.map +2 -2
  37. package/dist/cjs/decorators/DomRenderNoProxy.js +2 -1
  38. package/dist/cjs/decorators/DomRenderNoProxy.js.map +2 -2
  39. package/dist/cjs/events/EventManager.js +9 -2
  40. package/dist/cjs/events/EventManager.js.map +2 -2
  41. package/dist/cjs/lifecycle/OnInitRender.js.map +1 -1
  42. package/dist/cjs/lifecycle/OnRawSetRendered.js +26 -0
  43. package/dist/cjs/lifecycle/OnRawSetRendered.js.map +7 -0
  44. package/dist/cjs/lifecycle/index.js +1 -0
  45. package/dist/cjs/lifecycle/index.js.map +2 -2
  46. package/dist/cjs/operators/DrForOf.js +24 -11
  47. package/dist/cjs/operators/DrForOf.js.map +2 -2
  48. package/dist/cjs/operators/DrIf.js +1 -2
  49. package/dist/cjs/operators/DrIf.js.map +2 -2
  50. package/dist/cjs/operators/DrInnerText.js +2 -2
  51. package/dist/cjs/operators/DrInnerText.js.map +2 -2
  52. package/dist/cjs/operators/DrTargetElement.js +2 -0
  53. package/dist/cjs/operators/DrTargetElement.js.map +2 -2
  54. package/dist/cjs/operators/OperatorExecuter.js +1 -2
  55. package/dist/cjs/operators/OperatorExecuter.js.map +2 -2
  56. package/dist/cjs/package.json +5 -0
  57. package/dist/cjs/rawsets/RawSet.js +392 -115
  58. package/dist/cjs/rawsets/RawSet.js.map +3 -3
  59. package/dist/cjs/rawsets/Render.js.map +1 -1
  60. package/dist/cjs/routers/PathRouter.js +13 -7
  61. package/dist/cjs/routers/PathRouter.js.map +2 -2
  62. package/dist/cjs/routers/Router.js +76 -36
  63. package/dist/cjs/routers/Router.js.map +3 -3
  64. package/dist/esm/DomRender.js +41 -26
  65. package/dist/esm/DomRender.js.map +2 -2
  66. package/dist/esm/DomRenderProxy.js +134 -62
  67. package/dist/esm/DomRenderProxy.js.map +2 -2
  68. package/dist/esm/bundle-entry.js +22 -21
  69. package/dist/esm/bundle-entry.js.map +2 -2
  70. package/dist/esm/components/ComponentBase.js +24 -6
  71. package/dist/esm/components/ComponentBase.js.map +2 -2
  72. package/dist/esm/components/ComponentRouterBase.js +11 -1
  73. package/dist/esm/components/ComponentRouterBase.js.map +2 -2
  74. package/dist/esm/components/appender/Appender.js +0 -3
  75. package/dist/esm/components/appender/Appender.js.map +2 -2
  76. package/dist/esm/components/checkbox/CheckBox.js.map +2 -2
  77. package/dist/esm/components/choose/Choose.js +7 -1
  78. package/dist/esm/components/choose/Choose.js.map +2 -2
  79. package/dist/esm/components/details/Details.js +2 -2
  80. package/dist/esm/components/details/Details.js.map +2 -2
  81. package/dist/esm/components/forOf/ForOf.js.map +2 -2
  82. package/dist/esm/components/if/If.js +2 -2
  83. package/dist/esm/components/if/If.js.map +2 -2
  84. package/dist/esm/components/input/Input.js +2 -2
  85. package/dist/esm/components/input/Input.js.map +2 -2
  86. package/dist/esm/components/promise/PromiseSwitch.js +6 -6
  87. package/dist/esm/components/promise/PromiseSwitch.js.map +2 -2
  88. package/dist/esm/components/radio/Radio.js.map +2 -2
  89. package/dist/esm/components/router/Route.js +2 -2
  90. package/dist/esm/components/router/Route.js.map +2 -2
  91. package/dist/esm/components/router/RouterOutlet.js +18 -4
  92. package/dist/esm/components/router/RouterOutlet.js.map +2 -2
  93. package/dist/esm/components/select/Select.js +26 -12
  94. package/dist/esm/components/select/Select.js.map +2 -2
  95. package/dist/esm/components/this/This.js +2 -2
  96. package/dist/esm/components/this/This.js.map +2 -2
  97. package/dist/esm/components/timer/Timer.js +15 -13
  98. package/dist/esm/components/timer/Timer.js.map +2 -2
  99. package/dist/esm/decorators/DomRenderNoProxy.js +2 -1
  100. package/dist/esm/decorators/DomRenderNoProxy.js.map +2 -2
  101. package/dist/esm/events/EventManager.js +9 -2
  102. package/dist/esm/events/EventManager.js.map +2 -2
  103. package/dist/esm/lifecycle/OnInitRender.js.map +1 -1
  104. package/dist/esm/lifecycle/OnRawSetRendered.js +7 -0
  105. package/dist/esm/lifecycle/OnRawSetRendered.js.map +7 -0
  106. package/dist/esm/lifecycle/index.js +1 -0
  107. package/dist/esm/lifecycle/index.js.map +2 -2
  108. package/dist/esm/operators/DrForOf.js +24 -11
  109. package/dist/esm/operators/DrForOf.js.map +2 -2
  110. package/dist/esm/operators/DrIf.js +1 -2
  111. package/dist/esm/operators/DrIf.js.map +2 -2
  112. package/dist/esm/operators/DrInnerText.js +2 -2
  113. package/dist/esm/operators/DrInnerText.js.map +2 -2
  114. package/dist/esm/operators/DrTargetElement.js +2 -0
  115. package/dist/esm/operators/DrTargetElement.js.map +2 -2
  116. package/dist/esm/operators/OperatorExecuter.js +1 -2
  117. package/dist/esm/operators/OperatorExecuter.js.map +2 -2
  118. package/dist/esm/rawsets/RawSet.js +392 -115
  119. package/dist/esm/rawsets/RawSet.js.map +3 -3
  120. package/dist/esm/routers/PathRouter.js +13 -7
  121. package/dist/esm/routers/PathRouter.js.map +2 -2
  122. package/dist/esm/routers/Router.js +76 -36
  123. package/dist/esm/routers/Router.js.map +3 -3
  124. package/dist/esm-bundle/dooboostore-dom-render.esm.js +14023 -6402
  125. package/dist/esm-bundle/dooboostore-dom-render.esm.js.map +4 -4
  126. package/dist/types/DomRender.d.ts +11 -5
  127. package/dist/types/DomRender.d.ts.map +1 -1
  128. package/dist/types/DomRenderProxy.d.ts +2 -2
  129. package/dist/types/DomRenderProxy.d.ts.map +1 -1
  130. package/dist/types/bundle-entry.d.ts +5 -2
  131. package/dist/types/bundle-entry.d.ts.map +1 -1
  132. package/dist/types/components/ComponentBase.d.ts +8 -2
  133. package/dist/types/components/ComponentBase.d.ts.map +1 -1
  134. package/dist/types/components/ComponentRouterBase.d.ts +8 -0
  135. package/dist/types/components/ComponentRouterBase.d.ts.map +1 -1
  136. package/dist/types/components/appender/Appender.d.ts +0 -2
  137. package/dist/types/components/appender/Appender.d.ts.map +1 -1
  138. package/dist/types/components/checkbox/CheckBox.d.ts.map +1 -1
  139. package/dist/types/components/choose/Choose.d.ts.map +1 -1
  140. package/dist/types/components/details/Details.d.ts +1 -1
  141. package/dist/types/components/details/Details.d.ts.map +1 -1
  142. package/dist/types/components/forOf/ForOf.d.ts.map +1 -1
  143. package/dist/types/components/if/If.d.ts +1 -1
  144. package/dist/types/components/if/If.d.ts.map +1 -1
  145. package/dist/types/components/index.d.ts +2 -1
  146. package/dist/types/components/index.d.ts.map +1 -1
  147. package/dist/types/components/input/Input.d.ts +1 -1
  148. package/dist/types/components/input/Input.d.ts.map +1 -1
  149. package/dist/types/components/promise/PromiseSwitch.d.ts +1 -1
  150. package/dist/types/components/promise/PromiseSwitch.d.ts.map +1 -1
  151. package/dist/types/components/radio/Radio.d.ts.map +1 -1
  152. package/dist/types/components/router/Route.d.ts +1 -1
  153. package/dist/types/components/router/Route.d.ts.map +1 -1
  154. package/dist/types/components/router/RouterOutlet.d.ts +6 -2
  155. package/dist/types/components/router/RouterOutlet.d.ts.map +1 -1
  156. package/dist/types/components/select/Select.d.ts +5 -5
  157. package/dist/types/components/select/Select.d.ts.map +1 -1
  158. package/dist/types/components/this/This.d.ts +1 -1
  159. package/dist/types/components/this/This.d.ts.map +1 -1
  160. package/dist/types/components/timer/Timer.d.ts +6 -4
  161. package/dist/types/components/timer/Timer.d.ts.map +1 -1
  162. package/dist/types/decorators/DomRenderNoProxy.d.ts.map +1 -1
  163. package/dist/types/events/EventManager.d.ts +8 -0
  164. package/dist/types/events/EventManager.d.ts.map +1 -1
  165. package/dist/types/index.d.ts +0 -100
  166. package/dist/types/lifecycle/OnInitRender.d.ts +1 -1
  167. package/dist/types/lifecycle/OnInitRender.d.ts.map +1 -1
  168. package/dist/types/lifecycle/OnRawSetRendered.d.ts +10 -0
  169. package/dist/types/lifecycle/OnRawSetRendered.d.ts.map +1 -0
  170. package/dist/types/lifecycle/index.d.ts +1 -0
  171. package/dist/types/lifecycle/index.d.ts.map +1 -1
  172. package/dist/types/operators/DrForOf.d.ts.map +1 -1
  173. package/dist/types/operators/DrInnerText.d.ts.map +1 -1
  174. package/dist/types/operators/DrTargetElement.d.ts.map +1 -1
  175. package/dist/types/operators/OperatorExecuter.d.ts.map +1 -1
  176. package/dist/types/rawsets/RawSet.d.ts +17 -9
  177. package/dist/types/rawsets/RawSet.d.ts.map +1 -1
  178. package/dist/types/rawsets/Render.d.ts +1 -0
  179. package/dist/types/rawsets/Render.d.ts.map +1 -1
  180. package/dist/types/routers/PathRouter.d.ts.map +1 -1
  181. package/dist/types/routers/Router.d.ts +11 -14
  182. package/dist/types/routers/Router.d.ts.map +1 -1
  183. package/dist/umd-bundle/dooboostore-dom-render.umd.js +14104 -6502
  184. package/dist/umd-bundle/dooboostore-dom-render.umd.js.map +4 -4
  185. package/package.json +9 -8
  186. package/src/DomRender.ts +62 -34
  187. package/src/DomRenderProxy.ts +275 -142
  188. package/src/bundle-entry.ts +5 -3
  189. package/src/components/ComponentBase.ts +33 -11
  190. package/src/components/ComponentRouterBase.ts +17 -2
  191. package/src/components/appender/Appender.ts +0 -5
  192. package/src/components/checkbox/CheckBox.ts +22 -25
  193. package/src/components/choose/Choose.ts +19 -18
  194. package/src/components/details/Details.ts +40 -43
  195. package/src/components/forOf/ForOf.ts +6 -9
  196. package/src/components/if/If.ts +9 -11
  197. package/src/components/input/Input.ts +16 -22
  198. package/src/components/promise/PromiseSwitch.ts +67 -66
  199. package/src/components/radio/Radio.ts +23 -28
  200. package/src/components/router/Route.ts +10 -13
  201. package/src/components/router/RouterOutlet.ts +29 -8
  202. package/src/components/select/Select.ts +47 -33
  203. package/src/components/this/This.ts +13 -12
  204. package/src/components/timer/Timer.ts +29 -65
  205. package/src/decorators/DomRenderNoProxy.ts +3 -1
  206. package/src/events/EventManager.ts +15 -4
  207. package/src/lifecycle/OnInitRender.ts +1 -1
  208. package/src/lifecycle/OnRawSetRendered.ts +15 -0
  209. package/src/lifecycle/index.ts +1 -0
  210. package/src/node_modules/.bin/acorn +17 -0
  211. package/src/node_modules/.bin/browserslist +17 -0
  212. package/src/node_modules/.bin/eslint +17 -0
  213. package/src/node_modules/.bin/sbf +17 -0
  214. package/src/node_modules/.bin/ts-node +17 -0
  215. package/src/node_modules/.bin/ts-node-cwd +17 -0
  216. package/src/node_modules/.bin/ts-node-dev +17 -0
  217. package/src/node_modules/.bin/ts-node-esm +17 -0
  218. package/src/node_modules/.bin/ts-node-script +17 -0
  219. package/src/node_modules/.bin/ts-node-transpile-only +17 -0
  220. package/src/node_modules/.bin/ts-script +17 -0
  221. package/src/node_modules/.bin/tsc +17 -0
  222. package/src/node_modules/.bin/tsnd +17 -0
  223. package/src/node_modules/.bin/tsserver +17 -0
  224. package/src/node_modules/.bin/webpack +17 -0
  225. package/src/node_modules/.bin/webpack-cli +17 -0
  226. package/src/node_modules/.bin/webpack-dev-server +17 -0
  227. package/src/operators/DrForOf.ts +25 -10
  228. package/src/operators/DrIf.ts +1 -1
  229. package/src/operators/DrInnerText.ts +2 -1
  230. package/src/operators/DrTargetElement.ts +14 -0
  231. package/src/operators/OperatorExecuter.ts +1 -2
  232. package/src/rawsets/RawSet.ts +709 -295
  233. package/src/rawsets/Render.ts +1 -0
  234. package/src/routers/PathRouter.ts +14 -7
  235. package/src/routers/Router.ts +107 -61
  236. package/types.d.ts +0 -2825
@@ -14,6 +14,7 @@ export type Render = {
14
14
  router?: Router;
15
15
  range?: any;
16
16
  value?: any;
17
+ innerHTML?: string;
17
18
  currentThis?: any;
18
19
  currentThisPath?: any;
19
20
  nearThisPath?: string,
@@ -6,7 +6,11 @@ export class PathRouter extends Router {
6
6
  }
7
7
 
8
8
  getSearchParams(data?:{delete?:string[], append?:[[string, string]]}): URLSearchParams {
9
- const searchParams = (new URL(this.config.window.document.location.href)).searchParams;
9
+ if (!this.config.window.document?.location?.href) {
10
+ return new URLSearchParams();
11
+ }
12
+
13
+ const searchParams = (new URL(this.config.window.document.location?.href)).searchParams;
10
14
  data?.delete?.forEach(it => {
11
15
  searchParams.delete(it);
12
16
  })
@@ -34,7 +38,7 @@ export class PathRouter extends Router {
34
38
  pushDeleteHashSearchParam(name: string, data?: any, title?: string) {
35
39
  const s = this.getHashSearchParams({delete: [name]});
36
40
  const size = Array.from(s.entries()).length;
37
- const href = `${this.config.window.location.pathname}${this.config.window.location.search}${size > 0 ? '#' + s.toString() : ''}`;
41
+ const href = `${this.config.window.location?.pathname??'/'}${this.config.window.location?.search}${size > 0 ? '#' + s.toString() : ''}`;
38
42
  super.pushState(data, title, href);
39
43
  }
40
44
 
@@ -50,7 +54,7 @@ export class PathRouter extends Router {
50
54
  replaceDeleteHashSearchParam(name: string | string[], data?: any, title?: string) {
51
55
  const s = this.getHashSearchParams({delete: Array.isArray(name) ? name : [name]});
52
56
  const size = Array.from(s.entries()).length;
53
- const href = `${this.config.window.location.pathname}${this.config.window.location.search}${size > 0 ? '#' + s.toString() : ''}`;
57
+ const href = `${this.config.window.location?.pathname??'/'}${this.config.window.location?.search}${size > 0 ? '#' + s.toString() : ''}`;
54
58
  super.replaceState(data, title, href);
55
59
  }
56
60
 
@@ -61,21 +65,24 @@ export class PathRouter extends Router {
61
65
 
62
66
 
63
67
  getUrl(): string {
64
- const url = new URL(this.config.window.document.location.href);
68
+ if (!this.config.window.document?.location?.href) {
69
+ return '/';
70
+ }
71
+ const url = new URL(this.config.window.document.location?.href);
65
72
  return url.pathname + url.search;
66
73
  }
67
74
 
68
75
  getHref(): string {
69
- return this.config.window.location.href;
76
+ return this.config.window.location?.href??'/';
70
77
  }
71
78
 
72
79
  getPathName(): string {
73
- return this.config.window.location.pathname;
80
+ return this.config.window.location?.pathname??'/';
74
81
  }
75
82
 
76
83
  getHashSearchParams(data?:{delete?:string[], append?:[[string, string]]}): URLSearchParams {
77
84
  // http://local.com/#wow=222&wow=bb&z=2
78
- const searchParams = new URLSearchParams(this.config.window.location.hash.slice(1));
85
+ const searchParams = new URLSearchParams(this.config.window.location?.hash.slice(1)??'');
79
86
 
80
87
  data?.delete?.forEach(it => {
81
88
  searchParams.delete(it);
@@ -11,29 +11,49 @@ export type RouteData = {
11
11
  searchParams: URLSearchParams;
12
12
  pathData?: any;
13
13
  router: Router;
14
- currentTarget?:PopCurrentState;
15
14
  }
16
- export type PopStateCurrentTargetDomrenderRouter = { currentTargetName: 'domRenderRouter' };
17
- export type PopCurrentState = PopStateCurrentTargetDomrenderRouter;
18
- export const isPopStateCurrentTargetDomrenderRouter = (obj: any): obj is PopStateCurrentTargetDomrenderRouter =>
19
- obj?.currentTargetName === 'domRenderRouter';
20
-
21
- export type RouterConfig<T = any> = { rootObject?: T, window: Window, disableAttach?: boolean,
22
- // changeStateConvertDate?:(data: any)=>any
23
- };
15
+
16
+ export type RouterConfig<T = any> = { rootObject?: T, window: Window, firstUrl?: string};
24
17
  export type ChangeStateResult = {data?: any}
25
18
  export type RouteAction = string | { path?: string, searchParams?: ToURLSearchParamsParams };
26
19
 
27
- /*
28
- this.option.window.addEventListener('popstate', (event) => { // history.back, forward에만 popstate 발생되고 값이 도출된다
29
- console.log('popstate-------!!', event.state, this.domRenderConfig.window.history.state)
30
- })
31
- */
20
+ type RouterEventType = RouteData & { triggerPoint: 'start' | 'end' };
21
+
32
22
  export abstract class Router<T = any> {
33
- private behaviorSubject: BehaviorSubject<RouteData>;
23
+ private behaviorSubject: BehaviorSubject<RouterEventType>;
34
24
  private _config: RouterConfig<T>;
35
25
 
36
- get observable(): Observable<RouteData> {
26
+ constructor(config: RouterConfig<any>) {
27
+ this._config = config;
28
+
29
+ let routeData: RouterEventType;
30
+ if (config?.firstUrl) {
31
+ const path = config.firstUrl.split('?');
32
+ routeData = {
33
+ url: config.firstUrl,
34
+ path: path[0],
35
+ searchParams: new URLSearchParams(path[1]??''),
36
+ router: this,
37
+ triggerPoint: 'end'
38
+ }
39
+ this.behaviorSubject = new BehaviorSubject<RouterEventType>(routeData);
40
+ this.go(config.firstUrl);
41
+ } else {
42
+ routeData = {...this.getRouteData(), triggerPoint: 'end'};
43
+ this.behaviorSubject = new BehaviorSubject<RouterEventType>(routeData);
44
+ }
45
+ this.config.window.addEventListener('popstate', (event: PopStateEvent) => {
46
+ // domrender에서 발생하지 않은 즉 back, previous 일떄에도 이벤트가도록 처리
47
+ // if(!isPopStateCurrentTargetDomrenderRouter(event.state)) {
48
+ // console.log('-------');
49
+ const routeData: RouterEventType = {...this.getRouteData(), triggerPoint: 'end'};
50
+ this.behaviorSubject.next(routeData);
51
+ // }
52
+ })
53
+ }
54
+
55
+
56
+ get observable(): Observable<RouterEventType> {
37
57
  return this.behaviorSubject.asObservable();
38
58
  }
39
59
 
@@ -45,18 +65,6 @@ export abstract class Router<T = any> {
45
65
  return this._config;
46
66
  }
47
67
 
48
- constructor(config: RouterConfig<any>) {
49
- this._config = config;
50
- this.behaviorSubject = new BehaviorSubject<RouteData>(this.getRouteData());
51
- this.config.window.addEventListener('popstate', (event: PopStateEvent) => {
52
- if(!isPopStateCurrentTargetDomrenderRouter(event.state)) {
53
- // console.log('-------');
54
- const routeData = this.getRouteData();
55
- this.behaviorSubject.next(routeData);
56
- }
57
- })
58
- }
59
-
60
68
  public getSearchFirstParamsObject<T = any>(defaultValue?: T) {
61
69
  const a = ConvertUtils.toObject<T>(this.getSearchParams(), {firstValue: true});
62
70
  return Object.assign({}, defaultValue, a);
@@ -66,13 +74,13 @@ export abstract class Router<T = any> {
66
74
  return ConvertUtils.toObject<T>(this.getHashSearchParams(), {firstValue: true});
67
75
  }
68
76
 
69
- async attach(): Promise<void> {
70
- // const proxy = getDomRenderProxy(this.config.rootObject)
71
- // if (proxy) {
72
- // const key = `___${EventManager.ROUTER_VARNAME}`;
73
- // await proxy.render(key);
74
- // }
75
- }
77
+ // async attach(): Promise<void> {
78
+ // // const proxy = getDomRenderProxy(this.config.rootObject)
79
+ // // if (proxy) {
80
+ // // const key = `___${EventManager.ROUTER_VARNAME}`;
81
+ // // await proxy.render(key);
82
+ // // }
83
+ // }
76
84
 
77
85
  testRegexp(regexp?: string): boolean {
78
86
  if (regexp) {
@@ -91,10 +99,32 @@ export abstract class Router<T = any> {
91
99
  }
92
100
  }
93
101
 
94
- getRouteData(config?: {urlExpression?: string, currentTarget?: PopCurrentState}): RouteData {
102
+ getRouteData(config?: {pathOrUrl?: string, urlExpression?: string}): RouteData {
103
+
104
+ let path = '';
105
+ let url ='';
106
+ if (config?.pathOrUrl) {
107
+ let isUrl = false;
108
+ try {
109
+ new URL(config.pathOrUrl);
110
+ isUrl = true;
111
+ } catch {
112
+ isUrl = false;
113
+ }
114
+ if(isUrl){
115
+ const u = new URL(config.pathOrUrl);
116
+ path = u.pathname;
117
+ url = u.pathname + u.search;
118
+ } else {
119
+ path = config.pathOrUrl.split('?')[0];
120
+ }
121
+ } else {
122
+ path = this.getPathName();
123
+ url = this.getUrl();
124
+ }
95
125
  const newVar = {
96
- path: this.getPathName(),
97
- url: this.getUrl(),
126
+ path: path,
127
+ url: url,
98
128
  searchParams: this.getSearchParams()
99
129
  } as RouteData;
100
130
 
@@ -109,43 +139,58 @@ export abstract class Router<T = any> {
109
139
  }
110
140
  }
111
141
  newVar.router = this;
112
- newVar.currentTarget = config?.currentTarget;
142
+ // newVar.currentTarget = config?.currentTarget;
113
143
  return Object.freeze(newVar);
114
144
  }
115
145
 
116
146
  pushState(data: any, title: string | undefined, path: string):ChangeStateResult {
117
147
  // data = this.config.changeStateConvertDate?this.config.changeStateConvertDate(data): data;
118
148
  // console.log('--->pushState', data);
119
- this.config.window.history.pushState(data, title??'', path);
120
- this.behaviorSubject.next(this.getRouteData({currentTarget: {currentTargetName: 'domRenderRouter'}}));
149
+ this.behaviorSubject.next({ ...this.getRouteData({pathOrUrl:path}), triggerPoint: 'start' });
150
+ this.config.window.history?.pushState(data, title ?? '', path);
151
+ this.behaviorSubject.next({ ...this.getRouteData({pathOrUrl:path}), triggerPoint: 'end' });
121
152
  return {data};
122
153
  }
123
154
 
124
155
  replaceState(data: any, title: string | undefined, path: string):ChangeStateResult {
125
156
  // data = this.config.changeStateConvertDate?this.config.changeStateConvertDate(data): data;
126
157
  // console.log('--->replaceState', data);
127
- this.config.window.history.replaceState(data, title??'', path);
128
- this.behaviorSubject.next(this.getRouteData({currentTarget: {currentTargetName: 'domRenderRouter'}}));
158
+ this.behaviorSubject.next({ ...this.getRouteData({pathOrUrl:path}), triggerPoint: 'start' });
159
+ this.config.window.history?.replaceState(data, title ?? '', path);
160
+ this.behaviorSubject.next({ ...this.getRouteData({pathOrUrl:path}), triggerPoint: 'end' });
129
161
  return {data};
130
162
  }
131
163
 
132
- private dispatchPopStateEvent(data?: any) {
133
- this.config.window.dispatchEvent(new PopStateEvent('popstate', {state: {...data, currentTargetName: 'domRenderRouter'}}));
164
+ getData(): any {
165
+ return this.config.window.history?.state;
134
166
  }
135
167
 
136
- reload(data?: any) {
137
- this.config.window.dispatchEvent(new PopStateEvent('popstate', {state: data}));
168
+ getPathData(urlExpression: string, currentUrl = this.getPathName()): any {
169
+ return Expression.Path.pathNameData(currentUrl, urlExpression);
138
170
  }
139
171
 
140
- getData(): any {
141
- return this.config.window.history.state;
172
+ back(): void {
173
+ this.behaviorSubject.next({...this.getRouteData(),triggerPoint:'start'});
174
+ this.config.window.history.back();
175
+ //en부분은 constructo의 this.config.window.addEventListener('popstate' 에서 받아서 처리된다 호출된다.
142
176
  }
143
177
 
144
- getPathData(urlExpression: string, currentUrl = this.getPathName()): any {
145
- return Expression.Path.pathNameData(currentUrl, urlExpression);
178
+ forward(): void {
179
+ this.behaviorSubject.next({...this.getRouteData(),triggerPoint:'start'});
180
+ this.config.window.history?.forward();
181
+ //end부분은 constructor의 this.config.window.addEventListener('popstate' 에서 받아서 처리된다 호출된다.
146
182
  }
147
183
 
148
- async go(config: string | { path: RouteAction, data?: any, replace?: boolean, title?: string, disabledPopEvent?: boolean, scrollToTop?: boolean } | string): Promise<void> {
184
+ go(i: number): void;
185
+ async go(config: string | { path: RouteAction, data?: any, replace?: boolean, title?: string, scrollToTop?: boolean } | string): Promise<void> ;
186
+ go(config: number | string | { path: RouteAction, data?: any, replace?: boolean, title?: string, scrollToTop?: boolean } | string): Promise<void> | void {
187
+ if (typeof config === 'number') {
188
+ this.behaviorSubject.next({...this.getRouteData(),triggerPoint:'start'});
189
+ this.config.window.history?.go(config);
190
+ //end부분은 constructor의 this.config.window.addEventListener('popstate' 에서 받아서 처리된다 호출된다.
191
+ return;
192
+ }
193
+
149
194
  if (typeof config === 'string') {
150
195
  config = { path: config };
151
196
  }
@@ -156,24 +201,25 @@ export abstract class Router<T = any> {
156
201
  } else {
157
202
  this.push(config.path, config.data, config.title);
158
203
  }
159
- if (!this.config.disableAttach) {
160
- await this.attach();
161
- }
162
-
204
+ // if (!this.config.disableAttach) {
205
+ // await this.attach();
206
+ // }
207
+
163
208
  // 스크롤 제어 (기본값: true - 맨 위로 스크롤)
164
209
  if (config.scrollToTop !== false) {
165
210
  try {
166
- this._config.window?.scrollTo?.(0, 0);
211
+ this._config.window?.scrollTo?.(0, 0);
167
212
  }catch (e){}
168
213
  }
169
-
214
+
170
215
  // console.log('----------', data, config)
171
- if (!config.disabledPopEvent) {
172
- this.dispatchPopStateEvent(config?.data);
173
- }
216
+ // if (!config.disabledPopEvent) {
217
+ // this.dispatchPopStateEvent(config?.data);
218
+ // }
174
219
  }
175
220
 
176
221
  toUrl(data: RouteAction) {
222
+ console.log('toUrl', data);
177
223
  let targetPath: string;
178
224
  if (typeof data === 'string') {
179
225
  targetPath = data;