@dooboostore/simple-boot-http-server-ssr 1.0.9 → 1.0.11

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 (197) hide show
  1. package/LICENSE.md +7 -0
  2. package/dist/cjs/SimpleBootHttpSSRFactory.d.ts.map +1 -0
  3. package/dist/cjs/SimpleBootHttpSSRFactory.js +33 -0
  4. package/dist/cjs/SimpleBootHttpSSRFactory.js.map +7 -0
  5. package/{SimpleBootHttpSSRServer.d.ts → dist/cjs/SimpleBootHttpSSRServer.d.ts} +2 -2
  6. package/dist/cjs/SimpleBootHttpSSRServer.d.ts.map +1 -0
  7. package/dist/cjs/SimpleBootHttpSSRServer.js +41 -0
  8. package/dist/cjs/SimpleBootHttpSSRServer.js.map +7 -0
  9. package/dist/cjs/codes/HttpHeaders.d.ts.map +1 -0
  10. package/dist/cjs/codes/HttpHeaders.js +41 -0
  11. package/dist/cjs/codes/HttpHeaders.js.map +7 -0
  12. package/dist/cjs/codes/Mimes.d.ts.map +1 -0
  13. package/dist/cjs/codes/Mimes.js +33 -0
  14. package/dist/cjs/codes/Mimes.js.map +7 -0
  15. package/dist/cjs/codes/index.d.ts +3 -0
  16. package/dist/cjs/codes/index.d.ts.map +1 -0
  17. package/dist/cjs/codes/index.js +24 -0
  18. package/dist/cjs/codes/index.js.map +7 -0
  19. package/dist/cjs/decorators/LoadAroundBefore.d.ts.map +1 -0
  20. package/dist/cjs/decorators/LoadAroundBefore.js +54 -0
  21. package/dist/cjs/decorators/LoadAroundBefore.js.map +7 -0
  22. package/dist/cjs/decorators/SaveAroundAfter.d.ts.map +1 -0
  23. package/dist/cjs/decorators/SaveAroundAfter.js +53 -0
  24. package/dist/cjs/decorators/SaveAroundAfter.js.map +7 -0
  25. package/dist/cjs/decorators/index.d.ts +3 -0
  26. package/dist/cjs/decorators/index.d.ts.map +1 -0
  27. package/dist/cjs/decorators/index.js +24 -0
  28. package/dist/cjs/decorators/index.js.map +7 -0
  29. package/dist/cjs/filters/IntentSchemeFilter.d.ts.map +1 -0
  30. package/dist/cjs/filters/IntentSchemeFilter.js +92 -0
  31. package/dist/cjs/filters/IntentSchemeFilter.js.map +7 -0
  32. package/{filters → dist/cjs/filters}/SSRFilter.d.ts +5 -0
  33. package/dist/cjs/filters/SSRFilter.d.ts.map +1 -0
  34. package/dist/cjs/filters/SSRFilter.js +204 -0
  35. package/dist/cjs/filters/SSRFilter.js.map +7 -0
  36. package/dist/cjs/filters/SSRWorker.d.ts.map +1 -0
  37. package/dist/cjs/filters/SSRWorker.js +85 -0
  38. package/dist/cjs/filters/SSRWorker.js.map +7 -0
  39. package/dist/cjs/filters/index.d.ts +4 -0
  40. package/dist/cjs/filters/index.d.ts.map +1 -0
  41. package/dist/cjs/filters/index.js +26 -0
  42. package/dist/cjs/filters/index.js.map +7 -0
  43. package/dist/cjs/index.d.ts +3 -0
  44. package/dist/cjs/index.d.ts.map +1 -0
  45. package/dist/cjs/index.js +24 -0
  46. package/dist/cjs/index.js.map +7 -0
  47. package/dist/cjs/initializers/JsdomInitializer.d.ts.map +1 -0
  48. package/dist/cjs/initializers/JsdomInitializer.js +82 -0
  49. package/dist/cjs/initializers/JsdomInitializer.js.map +7 -0
  50. package/dist/cjs/initializers/index.d.ts +2 -0
  51. package/dist/cjs/initializers/index.d.ts.map +1 -0
  52. package/dist/cjs/initializers/index.js +22 -0
  53. package/dist/cjs/initializers/index.js.map +7 -0
  54. package/dist/cjs/option/HttpSSRServerOption.d.ts.map +1 -0
  55. package/dist/cjs/option/HttpSSRServerOption.js +30 -0
  56. package/dist/cjs/option/HttpSSRServerOption.js.map +7 -0
  57. package/dist/cjs/option/index.d.ts +2 -0
  58. package/dist/cjs/option/index.d.ts.map +1 -0
  59. package/dist/cjs/option/index.js +22 -0
  60. package/dist/cjs/option/index.js.map +7 -0
  61. package/dist/cjs/package.json +3 -0
  62. package/dist/cjs/proxy/IntentSchemeFrontProxy.d.ts.map +1 -0
  63. package/dist/cjs/proxy/IntentSchemeFrontProxy.js +87 -0
  64. package/dist/cjs/proxy/IntentSchemeFrontProxy.js.map +7 -0
  65. package/dist/cjs/proxy/IntentSchemeServerProxy.d.ts.map +1 -0
  66. package/dist/cjs/proxy/IntentSchemeServerProxy.js +67 -0
  67. package/dist/cjs/proxy/IntentSchemeServerProxy.js.map +7 -0
  68. package/{proxy → dist/cjs/proxy}/SymbolIntentApiServiceProxy.d.ts +1 -0
  69. package/dist/cjs/proxy/SymbolIntentApiServiceProxy.d.ts.map +1 -0
  70. package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js +111 -0
  71. package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js.map +7 -0
  72. package/dist/cjs/proxy/SymbolIntentApiServiceProxyBase.d.ts +13 -0
  73. package/dist/cjs/proxy/SymbolIntentApiServiceProxyBase.d.ts.map +1 -0
  74. package/dist/cjs/proxy/SymbolIntentApiServiceProxyBase.js +110 -0
  75. package/dist/cjs/proxy/SymbolIntentApiServiceProxyBase.js.map +7 -0
  76. package/dist/cjs/proxy/index.d.ts +5 -0
  77. package/dist/cjs/proxy/index.d.ts.map +1 -0
  78. package/dist/cjs/proxy/index.js +28 -0
  79. package/dist/cjs/proxy/index.js.map +7 -0
  80. package/dist/esm/SimpleBootHttpSSRFactory.d.ts +8 -0
  81. package/dist/esm/SimpleBootHttpSSRFactory.d.ts.map +1 -0
  82. package/dist/esm/SimpleBootHttpSSRFactory.js +10 -0
  83. package/dist/esm/SimpleBootHttpSSRFactory.js.map +7 -0
  84. package/dist/esm/SimpleBootHttpSSRServer.d.ts +9 -0
  85. package/dist/esm/SimpleBootHttpSSRServer.d.ts.map +1 -0
  86. package/dist/esm/SimpleBootHttpSSRServer.js +18 -0
  87. package/dist/esm/SimpleBootHttpSSRServer.js.map +7 -0
  88. package/dist/esm/codes/HttpHeaders.d.ts +45 -0
  89. package/dist/esm/codes/HttpHeaders.d.ts.map +1 -0
  90. package/dist/esm/codes/HttpHeaders.js +17 -0
  91. package/dist/esm/codes/HttpHeaders.js.map +7 -0
  92. package/dist/esm/codes/Mimes.d.ts +31 -0
  93. package/dist/esm/codes/Mimes.d.ts.map +1 -0
  94. package/dist/esm/codes/Mimes.js +10 -0
  95. package/dist/esm/codes/Mimes.js.map +7 -0
  96. package/dist/esm/codes/index.d.ts +3 -0
  97. package/dist/esm/codes/index.d.ts.map +1 -0
  98. package/dist/esm/codes/index.js +3 -0
  99. package/dist/esm/codes/index.js.map +7 -0
  100. package/dist/esm/decorators/LoadAroundBefore.d.ts +2 -0
  101. package/dist/esm/decorators/LoadAroundBefore.d.ts.map +1 -0
  102. package/dist/esm/decorators/LoadAroundBefore.js +31 -0
  103. package/dist/esm/decorators/LoadAroundBefore.js.map +7 -0
  104. package/dist/esm/decorators/SaveAroundAfter.d.ts +3 -0
  105. package/dist/esm/decorators/SaveAroundAfter.d.ts.map +1 -0
  106. package/dist/esm/decorators/SaveAroundAfter.js +29 -0
  107. package/dist/esm/decorators/SaveAroundAfter.js.map +7 -0
  108. package/dist/esm/decorators/index.d.ts +3 -0
  109. package/dist/esm/decorators/index.d.ts.map +1 -0
  110. package/dist/esm/decorators/index.js +3 -0
  111. package/dist/esm/decorators/index.js.map +7 -0
  112. package/dist/esm/filters/IntentSchemeFilter.d.ts +20 -0
  113. package/dist/esm/filters/IntentSchemeFilter.d.ts.map +1 -0
  114. package/dist/esm/filters/IntentSchemeFilter.js +69 -0
  115. package/dist/esm/filters/IntentSchemeFilter.js.map +7 -0
  116. package/dist/esm/filters/SSRFilter.d.ts +59 -0
  117. package/dist/esm/filters/SSRFilter.d.ts.map +1 -0
  118. package/dist/esm/filters/SSRFilter.js +181 -0
  119. package/dist/esm/filters/SSRFilter.js.map +7 -0
  120. package/dist/esm/filters/SSRWorker.d.ts +16 -0
  121. package/dist/esm/filters/SSRWorker.d.ts.map +1 -0
  122. package/dist/esm/filters/SSRWorker.js +62 -0
  123. package/dist/esm/filters/SSRWorker.js.map +7 -0
  124. package/dist/esm/filters/index.d.ts +4 -0
  125. package/dist/esm/filters/index.d.ts.map +1 -0
  126. package/dist/esm/filters/index.js +4 -0
  127. package/dist/esm/filters/index.js.map +7 -0
  128. package/dist/esm/index.d.ts +3 -0
  129. package/dist/esm/index.d.ts.map +1 -0
  130. package/dist/esm/index.js +5 -0
  131. package/dist/esm/index.js.map +7 -0
  132. package/dist/esm/initializers/JsdomInitializer.d.ts +11 -0
  133. package/dist/esm/initializers/JsdomInitializer.d.ts.map +1 -0
  134. package/dist/esm/initializers/JsdomInitializer.js +49 -0
  135. package/dist/esm/initializers/JsdomInitializer.js.map +7 -0
  136. package/dist/esm/initializers/index.d.ts +2 -0
  137. package/dist/esm/initializers/index.d.ts.map +1 -0
  138. package/dist/esm/initializers/index.js +2 -0
  139. package/dist/esm/initializers/index.js.map +7 -0
  140. package/dist/esm/option/HttpSSRServerOption.d.ts +4 -0
  141. package/dist/esm/option/HttpSSRServerOption.d.ts.map +1 -0
  142. package/dist/esm/option/HttpSSRServerOption.js +7 -0
  143. package/dist/esm/option/HttpSSRServerOption.js.map +7 -0
  144. package/dist/esm/option/index.d.ts +2 -0
  145. package/dist/esm/option/index.d.ts.map +1 -0
  146. package/dist/esm/option/index.js +2 -0
  147. package/dist/esm/option/index.js.map +7 -0
  148. package/dist/esm/proxy/IntentSchemeFrontProxy.d.ts +4 -0
  149. package/dist/esm/proxy/IntentSchemeFrontProxy.d.ts.map +1 -0
  150. package/dist/esm/proxy/IntentSchemeFrontProxy.js +64 -0
  151. package/dist/esm/proxy/IntentSchemeFrontProxy.js.map +7 -0
  152. package/dist/esm/proxy/IntentSchemeServerProxy.d.ts +4 -0
  153. package/dist/esm/proxy/IntentSchemeServerProxy.d.ts.map +1 -0
  154. package/dist/esm/proxy/IntentSchemeServerProxy.js +44 -0
  155. package/dist/esm/proxy/IntentSchemeServerProxy.js.map +7 -0
  156. package/dist/esm/proxy/SymbolIntentApiServiceProxy.d.ts +16 -0
  157. package/dist/esm/proxy/SymbolIntentApiServiceProxy.d.ts.map +1 -0
  158. package/dist/esm/proxy/SymbolIntentApiServiceProxy.js +88 -0
  159. package/dist/esm/proxy/SymbolIntentApiServiceProxy.js.map +7 -0
  160. package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.d.ts +13 -0
  161. package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.d.ts.map +1 -0
  162. package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.js +87 -0
  163. package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.js.map +7 -0
  164. package/dist/esm/proxy/index.d.ts +5 -0
  165. package/dist/esm/proxy/index.d.ts.map +1 -0
  166. package/dist/esm/proxy/index.js +5 -0
  167. package/dist/esm/proxy/index.js.map +7 -0
  168. package/dist/esm-bundle/dooboostore-simple-boot-http-server-ssr.esm.js +6 -0
  169. package/dist/esm-bundle/dooboostore-simple-boot-http-server-ssr.esm.js.map +7 -0
  170. package/dist/umd-bundle/dooboostore-simple-boot-http-server-ssr.umd.js +28 -0
  171. package/dist/umd-bundle/dooboostore-simple-boot-http-server-ssr.umd.js.map +7 -0
  172. package/package.json +60 -45
  173. package/SimpleBootHttpSSRFactory.js +0 -10
  174. package/SimpleBootHttpSSRServer.js +0 -12
  175. package/codes/HttpHeaders.js +0 -10
  176. package/codes/Mimes.js +0 -3
  177. package/decorators/LoadAroundBefore.js +0 -31
  178. package/decorators/SaveAroundAfter.js +0 -26
  179. package/filters/IntentSchemeFilter.js +0 -72
  180. package/filters/SSRFilter.js +0 -232
  181. package/filters/SSRWorker.js +0 -72
  182. package/initializers/JsdomInitializer.js +0 -63
  183. package/option/HttpSSRServerOption.js +0 -4
  184. package/proxy/IntentSchemeFrontProxy.js +0 -68
  185. package/proxy/IntentSchemeServerProxy.js +0 -39
  186. package/proxy/SymbolIntentApiServiceProxy.js +0 -67
  187. /package/{SimpleBootHttpSSRFactory.d.ts → dist/cjs/SimpleBootHttpSSRFactory.d.ts} +0 -0
  188. /package/{codes → dist/cjs/codes}/HttpHeaders.d.ts +0 -0
  189. /package/{codes → dist/cjs/codes}/Mimes.d.ts +0 -0
  190. /package/{decorators → dist/cjs/decorators}/LoadAroundBefore.d.ts +0 -0
  191. /package/{decorators → dist/cjs/decorators}/SaveAroundAfter.d.ts +0 -0
  192. /package/{filters → dist/cjs/filters}/IntentSchemeFilter.d.ts +0 -0
  193. /package/{filters → dist/cjs/filters}/SSRWorker.d.ts +0 -0
  194. /package/{initializers → dist/cjs/initializers}/JsdomInitializer.d.ts +0 -0
  195. /package/{option → dist/cjs/option}/HttpSSRServerOption.d.ts +0 -0
  196. /package/{proxy → dist/cjs/proxy}/IntentSchemeFrontProxy.d.ts +0 -0
  197. /package/{proxy → dist/cjs/proxy}/IntentSchemeServerProxy.d.ts +0 -0
@@ -0,0 +1,181 @@
1
+ import { HttpHeaders } from "@dooboostore/simple-boot-http-server/codes/HttpHeaders";
2
+ import { JsdomInitializer } from "../initializers/JsdomInitializer.js";
3
+ import { Mimes } from "@dooboostore/simple-boot-http-server/codes/Mimes";
4
+ import { HttpStatus } from "@dooboostore/simple-boot-http-server/codes/HttpStatus";
5
+ import { AsyncBlockingQueue } from "@dooboostore/core/queues/AsyncBlockingQueue";
6
+ import { RandomUtils } from "@dooboostore/core/random/RandomUtils";
7
+ import { NotFoundError } from "@dooboostore/simple-boot-http-server/errors/NotFoundError";
8
+ import { DomRenderProxy } from "@dooboostore/dom-render/DomRenderProxy";
9
+ import { filter } from "@dooboostore/core/message/operators/filter";
10
+ import { first } from "@dooboostore/core/message/operators/first";
11
+ import { firstValueFrom } from "@dooboostore/core/message/internal/firstValueFrom";
12
+ class SSRFilter {
13
+ constructor(config, otherInstanceSim) {
14
+ this.config = config;
15
+ this.otherInstanceSim = otherInstanceSim;
16
+ config.frontDistIndexFileName = config.frontDistIndexFileName || "index.html";
17
+ this.indexHTML = JsdomInitializer.loadFile(this.config.frontDistPath, config.frontDistIndexFileName);
18
+ }
19
+ simpleBootFrontPool = [];
20
+ simpleBootFrontQueue = new AsyncBlockingQueue();
21
+ indexHTML;
22
+ welcomUrl = "http://localhost";
23
+ poolGeneration = 0;
24
+ intervalId;
25
+ async onInit(app) {
26
+ for (let i = 0; i < this.config.poolOption.min; i++) {
27
+ await this.pushQueue();
28
+ }
29
+ if (this.config.poolOption.clearIntervalTime && this.config.poolOption.clearIntervalTime > 0) {
30
+ this.intervalId = setInterval(() => {
31
+ this.poolGeneration++;
32
+ }, this.config.poolOption.clearIntervalTime);
33
+ }
34
+ }
35
+ async onDestroy() {
36
+ if (this.intervalId) {
37
+ clearInterval(this.intervalId);
38
+ }
39
+ this.simpleBootFrontPool.forEach((front) => {
40
+ front.jsdom?.window.close();
41
+ });
42
+ this.simpleBootFrontPool = [];
43
+ }
44
+ // workerTs(workerOptions: WorkerOptions) {
45
+ // workerOptions.eval = true;
46
+ // if (!workerOptions.workerData) {
47
+ // workerOptions.workerData = {};
48
+ // }
49
+ // workerOptions.workerData.__filename = '/Users/hyunhakim/source/visualkhh/pet-space/libs/simple-boot-http-ssr/dist/filters/SSRCreatorWorker.js';
50
+ // return new Worker(` const wk = require('worker_threads'); require('ts-node').register(); let file = wk.workerData.__filename; require(file); `, workerOptions,);
51
+ // }
52
+ async makeJsdom() {
53
+ const jsdom = await new JsdomInitializer(
54
+ this.config.frontDistPath,
55
+ this.config.frontDistIndexFileName || "index.html",
56
+ { url: this.welcomUrl }
57
+ ).run();
58
+ return jsdom;
59
+ }
60
+ async makeFront(jsdom) {
61
+ const name = RandomUtils.uuid();
62
+ const window = jsdom.window;
63
+ window.ssrUse = false;
64
+ const option = this.config.factorySimFrontOption(DomRenderProxy.final(window));
65
+ const simpleBootFront = await this.config.factory.create(option, this.config.using, this.config.domExcludes);
66
+ simpleBootFront.run(this.otherInstanceSim);
67
+ simpleBootFront.jsdom = jsdom;
68
+ simpleBootFront.generation = this.poolGeneration;
69
+ return simpleBootFront;
70
+ }
71
+ enqueueFrontApp(simpleBootFront) {
72
+ this.simpleBootFrontPool.push(simpleBootFront);
73
+ this.simpleBootFrontQueue.enqueue(simpleBootFront);
74
+ }
75
+ // async pushQueue(destorFront?: SimpleBootFront) {
76
+ // if (destorFront) {
77
+ // this.simpleBootFrontPool.delete(destorFront.option.name!);
78
+ // }
79
+ async pushQueue() {
80
+ if (this.simpleBootFrontPool.length < this.config.poolOption.max) {
81
+ this.enqueueFrontApp(await this.makeFront(await this.makeJsdom()));
82
+ }
83
+ }
84
+ async proceedBefore({ rr, app }) {
85
+ if (this.config.ssrExcludeFilter?.(rr)) {
86
+ return false;
87
+ }
88
+ if (rr.reqHasAcceptHeader(Mimes.TextHtml) || rr.reqHasAcceptHeader(Mimes.All)) {
89
+ if (this.simpleBootFrontQueue.isEmpty()) {
90
+ await this.pushQueue();
91
+ }
92
+ const simpleBootFront = await this.simpleBootFrontQueue.dequeue();
93
+ try {
94
+ simpleBootFront.option.window.ssrUse = true;
95
+ delete simpleBootFront.option.window.server_side_data;
96
+ const url = rr.reqUrlObj({ host: "localhost" });
97
+ if (this.config.simpleBootFront?.notFoundError) {
98
+ const intent = await simpleBootFront.getIntent(url.pathname);
99
+ if (intent.module === void 0 && !intent.getRouterPathData(rr.reqUrlPathName)) {
100
+ throw new NotFoundError({ message: `Not Found: ${rr.reqUrlPathName}` });
101
+ }
102
+ }
103
+ const targetUrl = url.toString();
104
+ await simpleBootFront.goRouting(targetUrl);
105
+ await new Promise((r) => setTimeout(r, 0));
106
+ const data = await firstValueFrom(
107
+ // @ts-ignore
108
+ simpleBootFront.routingSubjectObservable.pipe(
109
+ // @ts-ignore
110
+ filter(
111
+ (it) => it.state === "end" && typeof it.routerModule.intent.uri === "string" && targetUrl.endsWith(it.routerModule.intent.uri)
112
+ ),
113
+ // delay(1000),
114
+ first()
115
+ )
116
+ );
117
+ const html = this.makeHTML(simpleBootFront);
118
+ await this.writeOkHtmlAndEnd({ rr }, html);
119
+ } finally {
120
+ simpleBootFront.option.window.ssrUse = false;
121
+ delete simpleBootFront.option.window.server_side_data;
122
+ if (simpleBootFront.generation < this.poolGeneration) {
123
+ const jsdom = simpleBootFront.jsdom;
124
+ jsdom?.window.close();
125
+ const index = this.simpleBootFrontPool.indexOf(simpleBootFront);
126
+ if (index > -1) {
127
+ this.simpleBootFrontPool.splice(index, 1);
128
+ }
129
+ this.pushQueue();
130
+ } else {
131
+ this.simpleBootFrontQueue.enqueue(simpleBootFront);
132
+ }
133
+ }
134
+ return false;
135
+ } else {
136
+ return true;
137
+ }
138
+ }
139
+ // const e = Expression.Path.pathNameData(rr.reqUrlPathName, intent.getRouterPath())
140
+ // console.log('------intent', rr.reqUrl, rr.reqUrlPathName, intent.module, intent.getRouterPath(), e)
141
+ // simpleBootFront.option.window.document.documentElemenh
142
+ // "dr-"로 시작하는 모든 attribute를 가진 element에서 해당 attribute를 제거
143
+ makeHTML(simpleBootFront) {
144
+ simpleBootFront.option.window.document.querySelectorAll("*").forEach((el) => {
145
+ Array.from(el.attributes).forEach((attr) => {
146
+ if (/^dr-/.test(attr.name) || /^domstyle/.test(attr.name) || /this-path/.test(attr.name)) {
147
+ el.removeAttribute(attr.name);
148
+ }
149
+ });
150
+ });
151
+ let html = simpleBootFront.option.window.document.documentElement.outerHTML;
152
+ html = "<!DOCTYPE html>" + html;
153
+ html = html.replace(/\$\{[\s\S]*?\}\$/g, "");
154
+ const serverSideData = simpleBootFront.option.window.server_side_data;
155
+ if (serverSideData) {
156
+ const data = Object.entries(serverSideData).map(([k, v]) => {
157
+ if (typeof v === "string") {
158
+ return `window.server_side_data.${k} = ${v}`;
159
+ } else {
160
+ return `window.server_side_data.${k} = ${JSON.stringify(v)}`;
161
+ }
162
+ }).join(";");
163
+ if (data) {
164
+ html = html.replace("</head>", `<script> window.server_side_data={}; ${data}; </script></head>`);
165
+ }
166
+ }
167
+ return html;
168
+ }
169
+ async writeOkHtmlAndEnd({ rr, status = HttpStatus.Ok }, html) {
170
+ rr.resStatusCode(status);
171
+ rr.resSetHeader(HttpHeaders.ContentType, Mimes.TextHtml);
172
+ await rr.resEnd(html);
173
+ }
174
+ async proceedAfter({ rr, app }) {
175
+ return true;
176
+ }
177
+ }
178
+ export {
179
+ SSRFilter
180
+ };
181
+ //# sourceMappingURL=SSRFilter.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/filters/SSRFilter.ts"],
4
+ "sourcesContent": ["import { RequestResponse } from '@dooboostore/simple-boot-http-server/models/RequestResponse';\nimport { HttpHeaders } from '@dooboostore/simple-boot-http-server/codes/HttpHeaders';\nimport { SimpleBootHttpSSRFactory } from '../SimpleBootHttpSSRFactory';\nimport { ConstructorType } from '@dooboostore/core/types';\nimport { JsdomInitializer } from '../initializers/JsdomInitializer';\nimport { Filter } from '@dooboostore/simple-boot-http-server/filters/Filter';\nimport { Mimes } from '@dooboostore/simple-boot-http-server/codes/Mimes';\nimport { HttpStatus } from '@dooboostore/simple-boot-http-server/codes/HttpStatus';\nimport { SimpleBootHttpServer } from '@dooboostore/simple-boot-http-server/SimpleBootHttpServer';\nimport { SimFrontOption } from '@dooboostore/simple-boot-front/option/SimFrontOption';\nimport { SimpleBootFront } from '@dooboostore/simple-boot-front/SimpleBootFront';\nimport { AsyncBlockingQueue } from '@dooboostore/core/queues/AsyncBlockingQueue';\nimport { RandomUtils } from '@dooboostore/core/random/RandomUtils';\nimport * as JSDOM from 'jsdom';\nimport { NotFoundError } from '@dooboostore/simple-boot-http-server/errors/NotFoundError';\nimport { DomRenderProxy } from '@dooboostore/dom-render/DomRenderProxy';\nimport { filter } from '@dooboostore/core/message/operators/filter';\nimport { first } from '@dooboostore/core/message/operators/first';\nimport { firstValueFrom } from '@dooboostore/core/message/internal/firstValueFrom';\n\nexport type FactoryAndParams = {\n frontDistPath: string;\n frontDistIndexFileName?: string;\n factorySimFrontOption: (window: any) => SimFrontOption;\n factory: SimpleBootHttpSSRFactory;\n poolOption: {\n max: number;\n min: number;\n clearIntervalTime?: number;\n };\n using: ConstructorType<any>[];\n domExcludes?: ConstructorType<any>[];\n ssrExcludeFilter?: (rr: RequestResponse) => boolean;\n simpleBootFront?: {\n notFoundError?: boolean;\n };\n};\n\nexport class SSRFilter implements Filter {\n private simpleBootFrontPool: SimpleBootFront[] = [];\n private simpleBootFrontQueue = new AsyncBlockingQueue<SimpleBootFront>();\n private indexHTML: string;\n private welcomUrl = 'http://localhost';\n private poolGeneration = 0;\n private intervalId?: NodeJS.Timeout;\n\n constructor(\n public config: FactoryAndParams,\n public otherInstanceSim?: Map<ConstructorType<any>, any>\n ) {\n config.frontDistIndexFileName = config.frontDistIndexFileName || 'index.html';\n this.indexHTML = JsdomInitializer.loadFile(this.config.frontDistPath, config.frontDistIndexFileName);\n }\n\n async onInit(app: SimpleBootHttpServer) {\n for (let i = 0; i < this.config.poolOption.min; i++) {\n await this.pushQueue();\n }\n\n if (this.config.poolOption.clearIntervalTime && this.config.poolOption.clearIntervalTime > 0) {\n this.intervalId = setInterval(() => {\n this.poolGeneration++;\n }, this.config.poolOption.clearIntervalTime);\n }\n // console.log('SimpleBootHttpSSRFactory init success ', + this.simpleBootFrontPool.length)\n }\n\n async onDestroy() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n }\n // this.simpleBootFrontQueue.clear();\n this.simpleBootFrontPool.forEach(front => {\n (front as any).jsdom?.window.close();\n });\n this.simpleBootFrontPool = [];\n }\n\n // workerTs(workerOptions: WorkerOptions) {\n // workerOptions.eval = true;\n // if (!workerOptions.workerData) {\n // workerOptions.workerData = {};\n // }\n // workerOptions.workerData.__filename = '/Users/hyunhakim/source/visualkhh/pet-space/libs/simple-boot-http-ssr/dist/filters/SSRCreatorWorker.js';\n // return new Worker(` const wk = require('worker_threads'); require('ts-node').register(); let file = wk.workerData.__filename; require(file); `, workerOptions,);\n // }\n\n async makeJsdom() {\n const jsdom = await new JsdomInitializer(\n this.config.frontDistPath,\n this.config.frontDistIndexFileName || 'index.html',\n { url: this.welcomUrl }\n ).run();\n return jsdom;\n }\n\n async makeFront(jsdom: JSDOM.JSDOM) {\n const name = RandomUtils.uuid();\n // const jsdom = await this.makeJsdom();\n const window = jsdom.window as unknown as Window & typeof globalThis;\n (window as any).ssrUse = false;\n const option = this.config.factorySimFrontOption(DomRenderProxy.final(window));\n const simpleBootFront = await this.config.factory.create(option, this.config.using, this.config.domExcludes);\n simpleBootFront.run(this.otherInstanceSim);\n (simpleBootFront as any).jsdom = jsdom;\n (simpleBootFront as any).generation = this.poolGeneration;\n return simpleBootFront;\n }\n\n enqueueFrontApp(simpleBootFront: SimpleBootFront) {\n // this.simpleBootFrontPool.set(simpleBootFront.option.name!, simpleBootFront);\n this.simpleBootFrontPool.push(simpleBootFront);\n this.simpleBootFrontQueue.enqueue(simpleBootFront);\n }\n\n // async pushQueue(destorFront?: SimpleBootFront) {\n // if (destorFront) {\n // this.simpleBootFrontPool.delete(destorFront.option.name!);\n // }\n async pushQueue() {\n if (this.simpleBootFrontPool.length < this.config.poolOption.max) {\n this.enqueueFrontApp(await this.makeFront(await this.makeJsdom()));\n }\n }\n\n async proceedBefore({ rr, app }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map<string, any> }) {\n if (this.config.ssrExcludeFilter?.(rr)) {\n return false;\n }\n if (rr.reqHasAcceptHeader(Mimes.TextHtml) || rr.reqHasAcceptHeader(Mimes.All)) {\n if (this.simpleBootFrontQueue.isEmpty()) {\n await this.pushQueue();\n }\n const simpleBootFront = await this.simpleBootFrontQueue.dequeue();\n try {\n // console.log('SSRFilter before-->' , simpleBootFront.option.name, 'poolLength:',this.simpleBootFrontPool.size);\n (simpleBootFront.option.window as any).ssrUse = true;\n delete (simpleBootFront.option.window as any).server_side_data;\n\n const url = rr.reqUrlObj({ host: 'localhost' });\n if (this.config.simpleBootFront?.notFoundError) {\n // intent router check first\n const intent = await simpleBootFront.getIntent(url.pathname);\n // route\uB97C \uBABB\uCC3E\uC740\uC0C1\uD0DC\uC5D0\uC11C router path\uAE4C\uC9C0 \uC548\uB9DE\uC73C\uBA74 404 \uCC98\uB9AC\uD55C\uB2E4. route\uB791 router\uB791 \uB2E4\uB974\uB2C8\uAE50 \uD5DB\uAC08\uB9AC\uC9C0\uB9D0\uB3C4\uB85D\n if (intent.module === undefined && !intent.getRouterPathData(rr.reqUrlPathName)) {\n throw new NotFoundError({ message: `Not Found: ${rr.reqUrlPathName}` });\n }\n }\n\n // runRouting!!\n const targetUrl = url.toString();\n // console.log('rrrrr');\n // simpleBootFront.routingSubjectObservable.subscribe(it => {\n // if (it.state === 'end' && it.routerModule.intent.uri === targetUrl) {\n // console.log('vvvvvvvvvvvv', it.state, it.routerModule.intent.uri);\n // }\n // });\n await simpleBootFront.goRouting(targetUrl);\n await new Promise(r => setTimeout(r, 0)); // <--\uC911\uC694: \uC774\uAC70 \uB123\uC5B4\uC57C\uC9C0 \uB450\uBC88\uBD88\uB7EC\uC9C0\uB294\uAC8C \uC5C6\uC5B4\uC9C0\uB294\uB4EF? \uBB50\uC9C0 event loop \uBCC0\uACBD\uB41C\uAC74\uAC00?\n // TODO: \uC635\uC158\uC73C\uB85C \uC774\uAC70 \uD0A4\uACE0 \uB044\uACE0\uD560\uC218\uC788\uAC8C \uD574\uC57C\uB420\uAE4C..?\n // simpleBootFront.routingSubjectObservable.pipe(\n // filter((it) =>\n // it.state === 'end' &&\n // typeof it.routerModule.intent.uri === 'string' &&\n // targetUrl.endsWith(it.routerModule.intent.uri)\n // ),\n // // delay(1000),\n // first()\n // );\n const data = await firstValueFrom(\n // @ts-ignore\n simpleBootFront.routingSubjectObservable.pipe(\n // @ts-ignore\n filter(\n (it: any) =>\n it.state === 'end' &&\n typeof it.routerModule.intent.uri === 'string' &&\n targetUrl.endsWith(it.routerModule.intent.uri)\n ),\n // delay(1000),\n first()\n )\n );\n // console.log('rrrrrssss');\n // console.log('rrrrrssss122');\n const html = this.makeHTML(simpleBootFront);\n await this.writeOkHtmlAndEnd({ rr }, html);\n } finally {\n (simpleBootFront.option.window as any).ssrUse = false;\n delete (simpleBootFront.option.window as any).server_side_data;\n // console.log('--------->', simpleBootFront.option.window)\n // simpleBootFront.ninitWriteRootRouter();\n // ((simpleBootFront as any).jsdom as JSDOM.JSDOM)?.reconfigure({url: '/' });\n // simpleBootFront.option.window.location.href = 'about:blank';\n // console.log('ddddddddd', (simpleBootFront as any).generation, this.poolGeneration)\n if ((simpleBootFront as any).generation < this.poolGeneration) {\n // Stale instance, destroy it\n const jsdom = (simpleBootFront as any).jsdom as JSDOM.JSDOM | undefined;\n jsdom?.window.close();\n const index = this.simpleBootFrontPool.indexOf(simpleBootFront);\n if (index > -1) {\n this.simpleBootFrontPool.splice(index, 1);\n }\n // Create a new one to maintain pool size\n this.pushQueue();\n } else {\n // Current instance, return to queue\n this.simpleBootFrontQueue.enqueue(simpleBootFront);\n }\n // simpleBootFront.option.window.document.body.innerHTML = this.rootJSDOM.window.document.body.innerHTML;\n // simpleBootFront.writeRootRouter()\n // await simpleBootFront.goRouting('/');\n\n // ((simpleBootFront as any).jsdom as JSDOM.JSDOM)?.reconfigure({url: this.welcomUrl });\n\n // simpleBootFront.option.window.location.href = this.welcomUrl;\n // simpleBootFront.option.window.document.documentElement.outerHTML = this.indexHTML;\n // this.simpleBootFrontQueue.enqueue(simpleBootFront);\n // await new Promise((re, r) => setTimeout(() => re(true), 10000));\n // new Promise((re, r) => setTimeout(() => re(true), 10000)).then(it => {\n // console.log('ddddddddddd')\n // });\n // this.simpleBootFrontPool.delete(simpleBootFront.option.name!);\n // if (isMainThread) { // \uBA54\uC778 \uC2A4\uB808\uB4DC\n // console.log('file-->', __filename)\n // const worker = new Worker(__filename);\n // worker.on('message', (value: any) => {\n // console.log('\uC6CC\uCEE4\uB85C\uBD80\uD130', value)\n // })\n // worker.on('exit', (value: any) => { // parentPort.close()\uAC00 \uC77C\uC5B4\uB098\uBA74 \uC774\uBCA4\uD2B8 \uBC1C\uC0DD\n // console.log('\uC6CC\uCEE4 \uB05D~');\n // })\n // worker.postMessage('ping'); // \uC6CC\uCEE4\uC2A4\uB808\uB4DC\uC5D0\uAC8C \uBA54\uC138\uC9C0\uB97C \uBCF4\uB0B8\uB2E4.\n // } else { // \uC6CC\uCEE4\uC2A4\uB808\uB4DC\n // parentPort.on('message', (value: any) => {\n // console.log(\"\uBD80\uBAA8\uB85C\uBD80\uD130\", value);\n // parentPort.postMessage('pong');\n // parentPort.close(); // \uC6CC\uCEE4\uC2A4\uB808\uB4DC \uC885\uB8CC\uB77C\uACE0 \uBA54\uC778\uC2A4\uB808\uB4DC\uC5D0 \uC54C\uB824\uC918\uC57C exit\uC774\uBCA4\uD2B8 \uBC1C\uC0DD\n // })\n // }\n\n //worker thrad\n // const workerPath = path.join(__dirname, 'SSRWorker.js');\n // const worker = new Worker(workerPath);\n // worker.once('message', (value: any) => {\n // console.log('\uC6CC\uCEE4\uB85C\uBD80\uD130', value)\n // });\n // const receiveWorker = new Worker('/Users/hyunhakim/source/visualkhh/pet-space/libs/simple-boot-http-ssr/dist/filters/SSRCreatorWorker.js');\n // receiveWorker.on('message', (msg: JSDOM.JSDOM)=>{\n // console.log('\uC6CC\uCEE4\uB85C\uBD80\uD130', msg, msg.window.document.body.innerHTML)\n // console.log('a message is sent! : ', msg)\n //\n // });\n //\n // receiveWorker.on('error', err=>{\n // console.error(err);\n // })\n //\n // receiveWorker.on('exit', ()=>console.log('exited!'));\n // receiveWorker.postMessage(\n // {\n // frontDistPath: this.factory.frontDistPath,\n // frontDistIndexFileName: this.factory.frontDistIndexFileName,\n // }\n // );\n\n // const myWorkers = this.workerTs({});\n // myWorkers.postMessage(this);\n // myWorkers.on('message', (value: SimpleBootFront) => {\n // this.pushQueue(value);\n // })\n // this\n // this.pushQueue(simpleBootFront).then(it => {\n // console.log('deee')\n // });\n // console.log('-1->', simpleBootFront.option.window.location.href);\n // simpleBootFront.option.window.location.href = this.welcomUrl;\n // simpleBootFront.option.window.location.reload();\n // console.log('-2->', simpleBootFront.option.window.location.href);\n // simpleBootFront.option.window.location.reload();\n // console.log('-3->', simpleBootFront.option.window.location.href);\n // this.simpleBootFrontQueue.enqueue(simpleBootFront);\n // await this.makeJsdom();\n // simpleBootFront.option.window.location.href = this.welcomUrl;\n }\n // console.log('----doen')\n return false;\n } else {\n // console.log('----doen2')\n return true;\n }\n }\n\n // const e = Expression.Path.pathNameData(rr.reqUrlPathName, intent.getRouterPath())\n // console.log('------intent', rr.reqUrl, rr.reqUrlPathName, intent.module, intent.getRouterPath(), e)\n // simpleBootFront.option.window.document.documentElemenh\n // \"dr-\"\uB85C \uC2DC\uC791\uD558\uB294 \uBAA8\uB4E0 attribute\uB97C \uAC00\uC9C4 element\uC5D0\uC11C \uD574\uB2F9 attribute\uB97C \uC81C\uAC70\n\n makeHTML(simpleBootFront: SimpleBootFront) {\n (simpleBootFront.option.window as any).document.querySelectorAll('*').forEach((el:HTMLElement )=> {\n Array.from(el.attributes).forEach(attr => {\n if (/^dr-/.test(attr.name) || /^domstyle/.test(attr.name) || /this-path/.test(attr.name)) {\n el.removeAttribute(attr.name);\n }\n });\n });\n let html = simpleBootFront.option.window.document.documentElement.outerHTML;\n html = '<!DOCTYPE html>' + html;\n html = html.replace(/\\$\\{[\\s\\S]*?\\}\\$/g, '');\n const serverSideData = (simpleBootFront.option.window as any).server_side_data;\n if (serverSideData) {\n const data = Object.entries(serverSideData)\n .map(([k, v]) => {\n if (typeof v === 'string') {\n return `window.server_side_data.${k} = ${v}`;\n } else {\n return `window.server_side_data.${k} = ${JSON.stringify(v)}`;\n }\n })\n .join(';');\n if (data) {\n html = html.replace('</head>', `<script> window.server_side_data={}; ${data}; </script></head>`);\n }\n }\n return html;\n }\n async writeOkHtmlAndEnd({ rr, status = HttpStatus.Ok }: { rr: RequestResponse; status?: HttpStatus }, html: string) {\n // rr.res.writeHead(status, {[HttpHeaders.ContentType]: Mimes.TextHtml});\n rr.resStatusCode(status);\n rr.resSetHeader(HttpHeaders.ContentType, Mimes.TextHtml);\n await rr.resEnd(html);\n }\n\n async proceedAfter({ rr, app }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map<string, any> }) {\n // console.log('done--------', sw)\n return true;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,16 @@
1
+ import { ConstructorType } from '@dooboostore/core/types';
2
+ import { FactoryAndParams } from './SSRFilter';
3
+ import JSDOM from 'jsdom';
4
+ import { SimpleBootFront } from '@dooboostore/simple-boot-front/SimpleBootFront';
5
+ export declare class SSRWorker {
6
+ factory: FactoryAndParams;
7
+ otherInstanceSim?: Map<ConstructorType<any>, any>;
8
+ welcomUrl: string;
9
+ private simpleBootFront?;
10
+ constructor(factory: FactoryAndParams, otherInstanceSim?: Map<ConstructorType<any>, any>);
11
+ run(): Promise<void>;
12
+ makeJsdom(): Promise<JSDOM.JSDOM>;
13
+ makeFront(jsdom?: JSDOM.JSDOM): Promise<SimpleBootFront>;
14
+ getHtml(url: string): Promise<string>;
15
+ }
16
+ //# sourceMappingURL=SSRWorker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SSRWorker.d.ts","sourceRoot":"","sources":["../../../src/filters/SSRWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAC,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,eAAe,EAAC,MAAM,gDAAgD,CAAC;AAE/E,qBAAa,SAAS;IAIC,OAAO,EAAE,gBAAgB;IAAS,gBAAgB,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAH/F,SAAS,SAAqB;IACrC,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAEvB,OAAO,EAAE,gBAAgB,EAAS,gBAAgB,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAIhG,GAAG;IAIH,SAAS;IAKT,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK;IAiB7B,OAAO,CAAC,GAAG,EAAE,MAAM;CAkC5B"}
@@ -0,0 +1,62 @@
1
+ import { JsdomInitializer } from "../initializers/JsdomInitializer.js";
2
+ import { RandomUtils } from "@dooboostore/core/random/RandomUtils";
3
+ class SSRWorker {
4
+ constructor(factory, otherInstanceSim) {
5
+ this.factory = factory;
6
+ this.otherInstanceSim = otherInstanceSim;
7
+ }
8
+ welcomUrl = "http://localhost";
9
+ simpleBootFront;
10
+ async run() {
11
+ this.simpleBootFront = await this.makeFront();
12
+ }
13
+ async makeJsdom() {
14
+ const jsdom = await new JsdomInitializer(this.factory.frontDistPath, this.factory.frontDistIndexFileName || "index.html", { url: this.welcomUrl }).run();
15
+ return jsdom;
16
+ }
17
+ async makeFront(jsdom) {
18
+ if (!jsdom) {
19
+ jsdom = await this.makeJsdom();
20
+ }
21
+ const name = RandomUtils.uuid();
22
+ const window = jsdom.window;
23
+ window.ssrUse = false;
24
+ const option = this.factory.factorySimFrontOption(window);
25
+ const simpleBootFront = await this.factory.factory.create(option, this.factory.using, this.factory.domExcludes);
26
+ simpleBootFront.run(this.otherInstanceSim);
27
+ simpleBootFront.jsdom = jsdom;
28
+ return simpleBootFront;
29
+ }
30
+ async getHtml(url) {
31
+ if (this.simpleBootFront && this.simpleBootFront.option.window.ssrUse) {
32
+ } else if (this.simpleBootFront) {
33
+ this.simpleBootFront.option.window.ssrUse = true;
34
+ delete this.simpleBootFront.option.window.server_side_data;
35
+ await this.simpleBootFront.goRouting(url);
36
+ let html = this.simpleBootFront.option.window.document.documentElement.outerHTML;
37
+ const serverSideData = this.simpleBootFront.option.window.server_side_data;
38
+ if (serverSideData) {
39
+ const data = Object.entries(serverSideData).map(([k, v]) => {
40
+ if (typeof v === "string") {
41
+ return `window.server_side_data.${k} = ${v}`;
42
+ } else {
43
+ return `window.server_side_data.${k} = ${JSON.stringify(v)}`;
44
+ }
45
+ }).join(";");
46
+ if (data) {
47
+ html = html.replace("</head>", `<script> window.server_side_data={}; ${data}; </script></head>`);
48
+ }
49
+ }
50
+ this.makeFront().then((it) => {
51
+ this.simpleBootFront = it;
52
+ });
53
+ return html;
54
+ }
55
+ {
56
+ }
57
+ }
58
+ }
59
+ export {
60
+ SSRWorker
61
+ };
62
+ //# sourceMappingURL=SSRWorker.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/filters/SSRWorker.ts"],
4
+ "sourcesContent": ["import { ConstructorType } from '@dooboostore/core/types';\nimport {FactoryAndParams} from './SSRFilter';\nimport {JsdomInitializer} from '../initializers/JsdomInitializer';\nimport JSDOM from 'jsdom';\nimport {RandomUtils} from '@dooboostore/core/random/RandomUtils';\nimport {SimpleBootFront} from '@dooboostore/simple-boot-front/SimpleBootFront';\n\nexport class SSRWorker {\n public welcomUrl = 'http://localhost'\n private simpleBootFront?: SimpleBootFront;\n\n constructor(public factory: FactoryAndParams, public otherInstanceSim?: Map<ConstructorType<any>, any>) {\n\n }\n\n async run() {\n this.simpleBootFront = await this.makeFront();\n }\n\n async makeJsdom() {\n const jsdom = await new JsdomInitializer(this.factory.frontDistPath, this.factory.frontDistIndexFileName || 'index.html', {url: this.welcomUrl}).run();\n return jsdom;\n }\n\n async makeFront(jsdom?: JSDOM.JSDOM) {\n if (!jsdom) {\n jsdom = await this.makeJsdom();\n }\n const name = RandomUtils.uuid();\n // const jsdom = await this.makeJsdom();\n const window = jsdom.window as unknown as Window & typeof globalThis;\n (window as any).ssrUse = false;\n const option = this.factory.factorySimFrontOption(window);\n // option.name = name;\n const simpleBootFront = await this.factory.factory.create(option, this.factory.using, this.factory.domExcludes);\n simpleBootFront.run(this.otherInstanceSim);\n (simpleBootFront as any).jsdom = jsdom;\n return simpleBootFront;\n }\n\n\n async getHtml(url: string) {\n if (this.simpleBootFront && (this.simpleBootFront.option.window as any).ssrUse) {\n\n } else if (this.simpleBootFront) {\n (this.simpleBootFront.option.window as any).ssrUse = true;\n delete (this.simpleBootFront.option.window as any).server_side_data;\n\n // run\n await this.simpleBootFront.goRouting(url);\n let html = this.simpleBootFront.option.window.document.documentElement.outerHTML;\n\n const serverSideData = (this.simpleBootFront.option.window as any).server_side_data;\n if (serverSideData) {\n const data = Object.entries(serverSideData).map(([k, v]) => {\n if (typeof v === 'string') {\n return `window.server_side_data.${k} = ${v}`;\n } else {\n return `window.server_side_data.${k} = ${JSON.stringify(v)}`;\n }\n }).join(';');\n if (data) {\n html = html.replace('</head>', `<script> window.server_side_data={}; ${data}; </script></head>`);\n }\n }\n\n this.makeFront().then(it => {\n this.simpleBootFront = it;\n });\n return html;\n } {\n\n }\n\n }\n}"],
5
+ "mappings": "AAEA,SAAQ,wBAAuB;AAE/B,SAAQ,mBAAkB;AAGnB,MAAM,UAAU;AAAA,EAInB,YAAmB,SAAkC,kBAAmD;AAArF;AAAkC;AAAA,EAErD;AAAA,EALO,YAAY;AAAA,EACX;AAAA,EAMR,MAAM,MAAM;AACR,SAAK,kBAAkB,MAAM,KAAK,UAAU;AAAA,EAChD;AAAA,EAEA,MAAM,YAAY;AACd,UAAM,QAAQ,MAAM,IAAI,iBAAiB,KAAK,QAAQ,eAAe,KAAK,QAAQ,0BAA0B,cAAc,EAAC,KAAK,KAAK,UAAS,CAAC,EAAE,IAAI;AACrJ,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,UAAU,OAAqB;AACjC,QAAI,CAAC,OAAO;AACR,cAAQ,MAAM,KAAK,UAAU;AAAA,IACjC;AACA,UAAM,OAAO,YAAY,KAAK;AAE9B,UAAM,SAAS,MAAM;AACrB,IAAC,OAAe,SAAS;AACzB,UAAM,SAAS,KAAK,QAAQ,sBAAsB,MAAM;AAExD,UAAM,kBAAkB,MAAM,KAAK,QAAQ,QAAQ,OAAO,QAAQ,KAAK,QAAQ,OAAO,KAAK,QAAQ,WAAW;AAC9G,oBAAgB,IAAI,KAAK,gBAAgB;AACzC,IAAC,gBAAwB,QAAQ;AACjC,WAAO;AAAA,EACX;AAAA,EAGA,MAAM,QAAQ,KAAa;AACvB,QAAI,KAAK,mBAAoB,KAAK,gBAAgB,OAAO,OAAe,QAAQ;AAAA,IAEhF,WAAW,KAAK,iBAAiB;AAC7B,MAAC,KAAK,gBAAgB,OAAO,OAAe,SAAS;AACrD,aAAQ,KAAK,gBAAgB,OAAO,OAAe;AAGnD,YAAM,KAAK,gBAAgB,UAAU,GAAG;AACxC,UAAI,OAAO,KAAK,gBAAgB,OAAO,OAAO,SAAS,gBAAgB;AAEvE,YAAM,iBAAkB,KAAK,gBAAgB,OAAO,OAAe;AACnE,UAAI,gBAAgB;AAChB,cAAM,OAAO,OAAO,QAAQ,cAAc,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AACxD,cAAI,OAAO,MAAM,UAAU;AACvB,mBAAO,2BAA2B,CAAC,MAAM,CAAC;AAAA,UAC9C,OAAO;AACH,mBAAO,2BAA2B,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,UAC9D;AAAA,QACJ,CAAC,EAAE,KAAK,GAAG;AACX,YAAI,MAAM;AACN,iBAAO,KAAK,QAAQ,WAAW,wCAAwC,IAAI,oBAAoB;AAAA,QACnG;AAAA,MACJ;AAEA,WAAK,UAAU,EAAE,KAAK,QAAM;AACxB,aAAK,kBAAkB;AAAA,MAC3B,CAAC;AACD,aAAO;AAAA,IACX;AAAE;AAAA,IAEF;AAAA,EAEJ;AACJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,4 @@
1
+ export * from './IntentSchemeFilter';
2
+ export * from './SSRFilter';
3
+ export * from './SSRWorker';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/filters/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./IntentSchemeFilter.js";
2
+ export * from "./SSRFilter.js";
3
+ export * from "./SSRWorker.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/filters/index.ts"],
4
+ "sourcesContent": ["export * from './IntentSchemeFilter';\nexport * from './SSRFilter';\nexport * from './SSRWorker';"],
5
+ "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,3 @@
1
+ declare const _default: {};
2
+ export default _default;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAQA,wBAEC"}
@@ -0,0 +1,5 @@
1
+ var src_default = {};
2
+ export {
3
+ src_default as default
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "sourcesContent": ["// export * from './SimpleBootHttpSSRFactory';\n// export * from './SimpleBootHttpSSRServer';\n// export * from './codes';\n// export * from './decorators';\n// export * from './filters';\n// export * from './initializers';\n// export * from './option';\n// export * from './proxy';\nexport default {\n\n}"],
5
+ "mappings": "AAQA,IAAO,cAAQ,CAEf;",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ import * as JSDOM from 'jsdom';
2
+ import { ReconfigureSettings } from 'jsdom';
3
+ export declare class JsdomInitializer {
4
+ private frontDistPath;
5
+ private frontDistIndexFileName;
6
+ private reconfigureSettings?;
7
+ constructor(frontDistPath: string, frontDistIndexFileName: string, reconfigureSettings?: ReconfigureSettings);
8
+ static loadFile(distPath: string, filePath: string): string;
9
+ run(): Promise<JSDOM.JSDOM>;
10
+ }
11
+ //# sourceMappingURL=JsdomInitializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsdomInitializer.d.ts","sourceRoot":"","sources":["../../../src/initializers/JsdomInitializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAI5C,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,mBAAmB,CAAC;gBAFpB,aAAa,EAAE,MAAM,EACrB,sBAAsB,EAAE,MAAM,EAC9B,mBAAmB,CAAC,EAAE,mBAAmB;WAGrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI5D,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;CAiElC"}
@@ -0,0 +1,49 @@
1
+ import * as JSDOM from "jsdom";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ class JsdomInitializer {
5
+ constructor(frontDistPath, frontDistIndexFileName, reconfigureSettings) {
6
+ this.frontDistPath = frontDistPath;
7
+ this.frontDistIndexFileName = frontDistIndexFileName;
8
+ this.reconfigureSettings = reconfigureSettings;
9
+ }
10
+ static loadFile(distPath, filePath) {
11
+ return fs.readFileSync(path.join(distPath, filePath), "utf8");
12
+ }
13
+ async run() {
14
+ const pathStr = path.join(this.frontDistPath, this.frontDistIndexFileName);
15
+ const jsdom = await JSDOM.JSDOM.fromFile(pathStr, {});
16
+ if (this.reconfigureSettings) {
17
+ jsdom.reconfigure(this.reconfigureSettings);
18
+ }
19
+ global.document = jsdom.window.document;
20
+ global.window = jsdom.window;
21
+ global.window.requestAnimationFrame = () => {
22
+ };
23
+ global.window.scrollTo = () => {
24
+ };
25
+ global.history = jsdom.window.history;
26
+ global.Event = jsdom.window.Event;
27
+ global.PopStateEvent = jsdom.window.Event;
28
+ global.IntersectionObserver = jsdom.window.IntersectionObserver;
29
+ global.NodeFilter = jsdom.window.NodeFilter;
30
+ global.Node = jsdom.window.Node;
31
+ global.HTMLElement = jsdom.window.HTMLElement;
32
+ global.HTMLMetaElement = jsdom.window.HTMLMetaElement;
33
+ global.Element = jsdom.window.Element;
34
+ global.HTMLCanvasElement = jsdom.window.HTMLCanvasElement;
35
+ global.HTMLCanvasElement.prototype.getContext = () => {
36
+ return null;
37
+ };
38
+ global.CanvasRenderingContext2D = jsdom.window.CanvasRenderingContext2D;
39
+ global.CanvasPattern = jsdom.window.CanvasPattern;
40
+ global.CanvasGradient = jsdom.window.CanvasGradient;
41
+ global.Path2D = jsdom.window.Path2D;
42
+ global.ImageData = jsdom.window.ImageData;
43
+ return jsdom;
44
+ }
45
+ }
46
+ export {
47
+ JsdomInitializer
48
+ };
49
+ //# sourceMappingURL=JsdomInitializer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/initializers/JsdomInitializer.ts"],
4
+ "sourcesContent": ["import * as JSDOM from 'jsdom';\nimport { ReconfigureSettings } from 'jsdom';\nimport fs from 'fs';\nimport path from 'path';\n\nexport class JsdomInitializer {\n constructor(\n private frontDistPath: string,\n private frontDistIndexFileName: string,\n private reconfigureSettings?: ReconfigureSettings\n ) {}\n\n public static loadFile(distPath: string, filePath: string): string {\n return fs.readFileSync(path.join(distPath, filePath), 'utf8');\n }\n\n async run(): Promise<JSDOM.JSDOM> {\n // const indexHTML = fs.readFileSync(path.join(this.frontDistPath, 'index.html'), 'utf8');\n // const indexHTML = JsdomInitializer.loadFile(this.frontDistPath, this.frontDistIndexFileName);\n const pathStr = path.join(this.frontDistPath, this.frontDistIndexFileName);\n\n const jsdom = await JSDOM.JSDOM.fromFile(pathStr, {});\n if (this.reconfigureSettings) {\n jsdom.reconfigure(this.reconfigureSettings);\n }\n // devDependencies\n // \"@types/jsdom\": \"^21.1.2\",\n // \"canvas\": \"^3.1.0\",\n // global setting\n // @ts-ignore\n global.document = jsdom.window.document;\n // @ts-ignore\n global.window = jsdom.window as unknown as Window & typeof globalThis;\n // @ts-ignore\n global.window.requestAnimationFrame = () => {};\n global.window.scrollTo = () => {};\n // const originalPushState = global.window.history.pushState;\n // global.window.history.pushState = (data: any,title: any,path: string) => {\n // console.log('----iida',path)\n // path.replace()\n //\n // let s = `${UrlUtils.origin(global.window.location.href)}${path?`${path}`:''}`;\n // console.log('----da',s)\n // originalPushState.apply(global.window.history, [data, title, s]);\n // }\n // const originalReplaceState = global.window.history.replaceState;\n // global.window.history.replaceState = (data: any,title: any,path: string) => {\n // let s = `${UrlUtils.origin(global.window.location.href)}${path?`${path}`:''}`;\n // originalReplaceState.apply(global.window.history, [data, title, s]);\n // }\n // const dummyResponse = {ok: false, json: () => Promise.resolve({})}; // as Response;\n // global.fetch = (...data: any): Promise<any> => {\n // console.log('dummy fetch')\n // return Promise.resolve(dummyResponse)\n // };\n // @ts-ignore\n global.history = jsdom.window.history;\n global.Event = jsdom.window.Event;\n // @ts-ignore\n global.PopStateEvent = jsdom.window.Event;\n global.IntersectionObserver = jsdom.window.IntersectionObserver;\n // @ts-ignore\n // global.Error = ErrorBase;\n // @ts-ignore\n // global.navigator = jsdom.window.navigator;\n global.NodeFilter = jsdom.window.NodeFilter;\n global.Node = jsdom.window.Node;\n global.HTMLElement = jsdom.window.HTMLElement;\n global.HTMLMetaElement = jsdom.window.HTMLMetaElement;\n global.Element = jsdom.window.Element;\n global.HTMLCanvasElement = jsdom.window.HTMLCanvasElement;\n global.HTMLCanvasElement.prototype.getContext = () => {\n return null;\n };\n global.CanvasRenderingContext2D = jsdom.window.CanvasRenderingContext2D;\n global.CanvasPattern = jsdom.window.CanvasPattern;\n global.CanvasGradient = jsdom.window.CanvasGradient;\n global.Path2D = jsdom.window.Path2D;\n global.ImageData = jsdom.window.ImageData;\n return jsdom;\n }\n}\n//\n// export default new JsdomInitializer();\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;AAEvB,OAAO,QAAQ;AACf,OAAO,UAAU;AAEV,MAAM,iBAAiB;AAAA,EAC5B,YACU,eACA,wBACA,qBACR;AAHQ;AACA;AACA;AAAA,EACP;AAAA,EAEH,OAAc,SAAS,UAAkB,UAA0B;AACjE,WAAO,GAAG,aAAa,KAAK,KAAK,UAAU,QAAQ,GAAG,MAAM;AAAA,EAC9D;AAAA,EAEA,MAAM,MAA4B;AAGhC,UAAM,UAAU,KAAK,KAAK,KAAK,eAAe,KAAK,sBAAsB;AAEzE,UAAM,QAAQ,MAAM,MAAM,MAAM,SAAS,SAAS,CAAC,CAAC;AACpD,QAAI,KAAK,qBAAqB;AAC5B,YAAM,YAAY,KAAK,mBAAmB;AAAA,IAC5C;AAMA,WAAO,WAAW,MAAM,OAAO;AAE/B,WAAO,SAAS,MAAM;AAEtB,WAAO,OAAO,wBAAwB,MAAM;AAAA,IAAC;AAC7C,WAAO,OAAO,WAAW,MAAM;AAAA,IAAC;AAqBhC,WAAO,UAAU,MAAM,OAAO;AAC9B,WAAO,QAAQ,MAAM,OAAO;AAE5B,WAAO,gBAAgB,MAAM,OAAO;AACpC,WAAO,uBAAuB,MAAM,OAAO;AAK3C,WAAO,aAAa,MAAM,OAAO;AACjC,WAAO,OAAO,MAAM,OAAO;AAC3B,WAAO,cAAc,MAAM,OAAO;AAClC,WAAO,kBAAkB,MAAM,OAAO;AACtC,WAAO,UAAU,MAAM,OAAO;AAC9B,WAAO,oBAAoB,MAAM,OAAO;AACxC,WAAO,kBAAkB,UAAU,aAAa,MAAM;AACpD,aAAO;AAAA,IACT;AACA,WAAO,2BAA2B,MAAM,OAAO;AAC/C,WAAO,gBAAgB,MAAM,OAAO;AACpC,WAAO,iBAAiB,MAAM,OAAO;AACrC,WAAO,SAAS,MAAM,OAAO;AAC7B,WAAO,YAAY,MAAM,OAAO;AAChC,WAAO;AAAA,EACT;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ export * from './JsdomInitializer';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/initializers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./JsdomInitializer.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/initializers/index.ts"],
4
+ "sourcesContent": ["export * from './JsdomInitializer';"],
5
+ "mappings": "AAAA,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,4 @@
1
+ import { HttpServerOption } from '@dooboostore/simple-boot-http-server/option/HttpServerOption';
2
+ export declare class HttpSSRServerOption extends HttpServerOption {
3
+ }
4
+ //# sourceMappingURL=HttpSSRServerOption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpSSRServerOption.d.ts","sourceRoot":"","sources":["../../../src/option/HttpSSRServerOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AAEhG,qBAAa,mBAAoB,SAAQ,gBAAgB;CACxD"}
@@ -0,0 +1,7 @@
1
+ import { HttpServerOption } from "@dooboostore/simple-boot-http-server/option/HttpServerOption";
2
+ class HttpSSRServerOption extends HttpServerOption {
3
+ }
4
+ export {
5
+ HttpSSRServerOption
6
+ };
7
+ //# sourceMappingURL=HttpSSRServerOption.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/option/HttpSSRServerOption.ts"],
4
+ "sourcesContent": ["import { HttpServerOption } from '@dooboostore/simple-boot-http-server/option/HttpServerOption';\n\nexport class HttpSSRServerOption extends HttpServerOption {\n}\n"],
5
+ "mappings": "AAAA,SAAS,wBAAwB;AAE1B,MAAM,4BAA4B,iBAAiB;AAC1D;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ export * from './HttpSSRServerOption';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/option/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./HttpSSRServerOption.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/option/index.ts"],
4
+ "sourcesContent": ["export * from './HttpSSRServerOption';"],
5
+ "mappings": "AAAA,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,4 @@
1
+ export declare class IntentSchemeFrontProxy implements ProxyHandler<any> {
2
+ get(target: any, prop: string): any;
3
+ }
4
+ //# sourceMappingURL=IntentSchemeFrontProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntentSchemeFrontProxy.d.ts","sourceRoot":"","sources":["../../../src/proxy/IntentSchemeFrontProxy.ts"],"names":[],"mappings":"AAOA,qBACa,sBAAuB,YAAW,YAAY,CAAC,GAAG,CAAC;IACvD,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG;CAyD3C"}
@@ -0,0 +1,64 @@
1
+ var __decorate = function(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { getSim, Sim } from "@dooboostore/simple-boot/decorators/SimDecorator";
8
+ import { HttpHeaders } from "@dooboostore/simple-boot-http-server/codes/HttpHeaders";
9
+ import { HttpHeaders as SSRHttpHeaders } from "../codes/HttpHeaders.js";
10
+ import { Mimes as SSRMimes } from "../codes/Mimes.js";
11
+ import { ReflectUtils } from "@dooboostore/core/reflect/ReflectUtils";
12
+ import { ConvertUtils } from "@dooboostore/core/convert/ConvertUtils";
13
+ let IntentSchemeFrontProxy = class IntentSchemeFrontProxy2 {
14
+ get(target, prop) {
15
+ const t = target[prop];
16
+ if (!["constructor", "onProxyDomRender", "toString"].includes(prop)) {
17
+ return (...args) => {
18
+ const simOption = target._SimpleBoot_simOption;
19
+ const config = getSim(target);
20
+ const firstScheme = ConvertUtils.flatArray(config?.scheme)[0];
21
+ const key = firstScheme + "_" + prop;
22
+ const type = ReflectUtils.getReturnType(target, prop);
23
+ const isHas = key in (simOption.window.server_side_data ?? {});
24
+ if (isHas) {
25
+ const data = simOption.window.server_side_data?.[key];
26
+ delete simOption.window.server_side_data?.[key];
27
+ let rdata;
28
+ if (type instanceof Promise) {
29
+ rdata = Promise.resolve(data);
30
+ } else {
31
+ rdata = data;
32
+ }
33
+ return rdata;
34
+ } else {
35
+ return fetch(`/${prop.toString()}`, {
36
+ method: "POST",
37
+ headers: { [HttpHeaders.ContentType]: SSRMimes.ApplicationJsonPostSimpleBootSsrIntentScheme, [SSRHttpHeaders.XSimpleBootSsrIntentScheme]: firstScheme ?? "" },
38
+ body: JSON.stringify(args[0])
39
+ }).then(async (res) => {
40
+ try {
41
+ const data = await res.json();
42
+ return data;
43
+ } catch (e) {
44
+ try {
45
+ return await res.text();
46
+ } catch (e2) {
47
+ return void 0;
48
+ }
49
+ }
50
+ });
51
+ }
52
+ };
53
+ } else {
54
+ return t;
55
+ }
56
+ }
57
+ };
58
+ IntentSchemeFrontProxy = __decorate([
59
+ Sim
60
+ ], IntentSchemeFrontProxy);
61
+ export {
62
+ IntentSchemeFrontProxy
63
+ };
64
+ //# sourceMappingURL=IntentSchemeFrontProxy.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/proxy/IntentSchemeFrontProxy.ts"],
4
+ "sourcesContent": ["import { getSim, Sim } from '@dooboostore/simple-boot/decorators/SimDecorator';\nimport { HttpHeaders } from '@dooboostore/simple-boot-http-server/codes/HttpHeaders';\nimport { HttpHeaders as SSRHttpHeaders } from '../codes/HttpHeaders';\nimport { Mimes as SSRMimes } from '../codes/Mimes';\nimport { ReflectUtils } from '@dooboostore/core/reflect/ReflectUtils';\nimport { ConvertUtils } from '@dooboostore/core/convert/ConvertUtils';\n\n@Sim\nexport class IntentSchemeFrontProxy implements ProxyHandler<any> {\n public get(target: any, prop: string): any {\n const t = target[prop];\n // TODO: 여기에 추가적인 프로퍼티 작성으 추가적으로 해야된다..\n // if (typeof t === 'function') {\n if (!['constructor', 'onProxyDomRender', 'toString'].includes(prop)) {\n return (...args: any[]) => {\n // const simstanceManager = target._SimpleBoot_simstanceManager;\n const simOption = target._SimpleBoot_simOption;\n const config = getSim(target);\n // const scheme = getSim(target)?.scheme;\n const firstScheme = ConvertUtils.flatArray(config?.scheme)[0];\n const key = firstScheme + '_' + prop;\n const type = ReflectUtils.getReturnType(target, prop);\n const isHas = (key in (simOption.window.server_side_data ?? {}));\n if (isHas) {\n const data = simOption.window.server_side_data?.[key];\n delete simOption.window.server_side_data?.[key];\n let rdata;\n if (type instanceof Promise) {\n rdata = Promise.resolve(data);\n } else {\n rdata = data;\n }\n return rdata;\n } else {\n return fetch(`/${prop.toString()}`,\n {\n method: 'POST',\n headers: {[HttpHeaders.ContentType]: SSRMimes.ApplicationJsonPostSimpleBootSsrIntentScheme, [SSRHttpHeaders.XSimpleBootSsrIntentScheme]: firstScheme ?? ''},\n body: JSON.stringify(args[0])\n }\n ).then(async (res) => {\n try {\n const data = await res.json();\n return data;\n } catch(e) {\n try {\n return await res.text();\n } catch(e) {\n return undefined;\n }\n }\n });\n }\n // return t.apply(target, args);\n }\n } else {\n return t;\n }\n }\n\n\n // apply(target: Function, thisArg: any, ...argumentsList: any[]): any {\n // console.log('-IntentSchemeFrontProxyHandler----?????')\n // return target(...argumentsList);\n // }\n\n}\n"],
5
+ "mappings": ";;;;;;AAAA,SAAS,QAAQ,WAAW;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,eAAe,sBAAsB;AAC9C,SAAS,SAAS,gBAAgB;AAClC,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAGtB,IAAM,yBAAN,MAAMA,wBAAsB;EAC1B,IAAI,QAAa,MAAY;AAClC,UAAM,IAAI,OAAO,IAAI;AAGrB,QAAI,CAAC,CAAC,eAAe,oBAAoB,UAAU,EAAE,SAAS,IAAI,GAAG;AACnE,aAAO,IAAI,SAAe;AAExB,cAAM,YAAY,OAAO;AACzB,cAAM,SAAS,OAAO,MAAM;AAE5B,cAAM,cAAc,aAAa,UAAU,QAAQ,MAAM,EAAE,CAAC;AAC5D,cAAM,MAAM,cAAc,MAAM;AAChC,cAAM,OAAO,aAAa,cAAc,QAAQ,IAAI;AACpD,cAAM,QAAS,QAAQ,UAAU,OAAO,oBAAoB,CAAA;AAC5D,YAAI,OAAO;AACP,gBAAM,OAAO,UAAU,OAAO,mBAAmB,GAAG;AACpD,iBAAO,UAAU,OAAO,mBAAmB,GAAG;AAC9C,cAAI;AACJ,cAAI,gBAAgB,SAAS;AAC3B,oBAAQ,QAAQ,QAAQ,IAAI;UAC9B,OAAO;AACL,oBAAQ;UACV;AACA,iBAAO;QACX,OAAO;AACN,iBAAO,MAAM,IAAI,KAAK,SAAQ,CAAE,IAC7B;YACE,QAAQ;YACR,SAAS,EAAC,CAAC,YAAY,WAAW,GAAG,SAAS,8CAA8C,CAAC,eAAe,0BAA0B,GAAG,eAAe,GAAE;YAC1J,MAAM,KAAK,UAAU,KAAK,CAAC,CAAC;WAC7B,EACD,KAAK,OAAO,QAAO;AACpB,gBAAI;AACF,oBAAM,OAAO,MAAM,IAAI,KAAI;AAC3B,qBAAO;YACT,SAAQ,GAAG;AACT,kBAAI;AACF,uBAAO,MAAM,IAAI,KAAI;cACvB,SAAQC,IAAG;AACT,uBAAO;cACT;YACF;UACD,CAAC;QACH;MAEF;IACF,OAAO;AACL,aAAO;IACT;EACF;;AAlDW,yBAAsB,WAAA;EADlC;GACY,sBAAsB;",
6
+ "names": ["IntentSchemeFrontProxy", "e"]
7
+ }