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

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 (171) hide show
  1. package/README.MD +24 -209
  2. package/dist/cjs/bundle-entry.js +36 -0
  3. package/dist/cjs/bundle-entry.js.map +7 -0
  4. package/dist/cjs/codes/HttpHeaders.js.map +2 -2
  5. package/dist/cjs/filters/SSRFilter.js +5 -7
  6. package/dist/cjs/filters/SSRFilter.js.map +2 -2
  7. package/dist/cjs/filters/SSRLinkDomDomFilter.js +183 -0
  8. package/dist/cjs/filters/SSRLinkDomDomFilter.js.map +7 -0
  9. package/dist/cjs/filters/SSRWorker.js +1 -2
  10. package/dist/cjs/filters/SSRWorker.js.map +1 -1
  11. package/dist/cjs/index.js.map +2 -2
  12. package/dist/cjs/initializers/JsdomInitializer.js +1 -0
  13. package/dist/cjs/initializers/JsdomInitializer.js.map +2 -2
  14. package/dist/cjs/initializers/LinkedomInitializer.js +81 -0
  15. package/dist/cjs/initializers/LinkedomInitializer.js.map +7 -0
  16. package/dist/cjs/package.json +2 -0
  17. package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js +17 -2
  18. package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js.map +3 -3
  19. package/dist/esm/bundle-entry.js +9 -0
  20. package/dist/esm/bundle-entry.js.map +7 -0
  21. package/dist/esm/codes/HttpHeaders.js.map +2 -2
  22. package/dist/esm/filters/SSRFilter.js +5 -7
  23. package/dist/esm/filters/SSRFilter.js.map +2 -2
  24. package/dist/esm/filters/SSRLinkDomDomFilter.js +160 -0
  25. package/dist/esm/filters/SSRLinkDomDomFilter.js.map +7 -0
  26. package/dist/esm/filters/SSRWorker.js +1 -2
  27. package/dist/esm/filters/SSRWorker.js.map +1 -1
  28. package/dist/esm/index.js.map +2 -2
  29. package/dist/esm/initializers/JsdomInitializer.js +1 -0
  30. package/dist/esm/initializers/JsdomInitializer.js.map +2 -2
  31. package/dist/esm/initializers/LinkedomInitializer.js +48 -0
  32. package/dist/esm/initializers/LinkedomInitializer.js.map +7 -0
  33. package/dist/esm/proxy/SymbolIntentApiServiceProxy.js +18 -3
  34. package/dist/esm/proxy/SymbolIntentApiServiceProxy.js.map +3 -3
  35. package/dist/esm-bundle/dooboostore-simple-boot-http-server-ssr.esm.js +11811 -3
  36. package/dist/esm-bundle/dooboostore-simple-boot-http-server-ssr.esm.js.map +4 -4
  37. package/dist/{esm → types}/SimpleBootHttpSSRServer.d.ts +1 -1
  38. package/dist/types/bundle-entry.d.ts +9 -0
  39. package/dist/types/bundle-entry.d.ts.map +1 -0
  40. package/dist/types/codes/HttpHeaders.d.ts +45 -0
  41. package/dist/types/codes/HttpHeaders.d.ts.map +1 -0
  42. package/dist/{cjs → types}/filters/SSRFilter.d.ts.map +1 -1
  43. package/dist/{esm/filters/SSRFilter.d.ts → types/filters/SSRLinkDomDomFilter.d.ts} +4 -6
  44. package/dist/types/filters/SSRLinkDomDomFilter.d.ts.map +1 -0
  45. package/dist/{esm → types}/index.d.ts.map +1 -1
  46. package/dist/{cjs → types}/initializers/JsdomInitializer.d.ts.map +1 -1
  47. package/dist/types/initializers/LinkedomInitializer.d.ts +11 -0
  48. package/dist/types/initializers/LinkedomInitializer.d.ts.map +1 -0
  49. package/dist/{cjs → types}/proxy/SymbolIntentApiServiceProxy.d.ts.map +1 -1
  50. package/dist/umd-bundle/dooboostore-simple-boot-http-server-ssr.umd.js +11803 -6
  51. package/dist/umd-bundle/dooboostore-simple-boot-http-server-ssr.umd.js.map +4 -4
  52. package/package.json +36 -23
  53. package/src/SimpleBootHttpSSRFactory.ts +11 -0
  54. package/src/SimpleBootHttpSSRServer.ts +21 -0
  55. package/src/bundle-entry.ts +8 -0
  56. package/src/codes/HttpHeaders.ts +17 -0
  57. package/src/codes/Mimes.ts +6 -0
  58. package/src/codes/index.ts +2 -0
  59. package/src/decorators/LoadAroundBefore.ts +28 -0
  60. package/src/decorators/SaveAroundAfter.ts +27 -0
  61. package/src/decorators/index.ts +2 -0
  62. package/src/filters/IntentSchemeFilter.ts +66 -0
  63. package/src/filters/SSRFilter.ts +339 -0
  64. package/src/filters/SSRLinkDomDomFilter.ts +227 -0
  65. package/src/filters/SSRWorker.ts +76 -0
  66. package/{dist/esm/filters/index.d.ts → src/filters/index.ts} +1 -2
  67. package/src/index.ts +9 -0
  68. package/src/initializers/JsdomInitializer.ts +85 -0
  69. package/src/initializers/LinkedomInitializer.ts +69 -0
  70. package/src/initializers/index.ts +1 -0
  71. package/src/node_modules/.bin/acorn +17 -0
  72. package/src/node_modules/.bin/browserslist +17 -0
  73. package/src/node_modules/.bin/eslint +17 -0
  74. package/src/node_modules/.bin/jest +17 -0
  75. package/src/node_modules/.bin/ts-jest +17 -0
  76. package/src/node_modules/.bin/ts-node +17 -0
  77. package/src/node_modules/.bin/ts-node-cwd +17 -0
  78. package/src/node_modules/.bin/ts-node-esm +17 -0
  79. package/src/node_modules/.bin/ts-node-script +17 -0
  80. package/src/node_modules/.bin/ts-node-transpile-only +17 -0
  81. package/src/node_modules/.bin/ts-script +17 -0
  82. package/src/node_modules/.bin/tsc +17 -0
  83. package/src/node_modules/.bin/tsserver +17 -0
  84. package/src/option/HttpSSRServerOption.ts +4 -0
  85. package/src/option/index.ts +1 -0
  86. package/src/proxy/IntentSchemeFrontProxy.ts +67 -0
  87. package/src/proxy/IntentSchemeServerProxy.ts +35 -0
  88. package/src/proxy/SymbolIntentApiServiceProxy.ts +131 -0
  89. package/src/proxy/SymbolIntentApiServiceProxyBase.ts +97 -0
  90. package/{dist/esm/proxy/index.d.ts → src/proxy/index.ts} +1 -2
  91. package/tsconfig.json +24 -0
  92. package/dist/cjs/SimpleBootHttpSSRServer.d.ts +0 -9
  93. package/dist/cjs/codes/HttpHeaders.d.ts +0 -45
  94. package/dist/cjs/codes/HttpHeaders.d.ts.map +0 -1
  95. package/dist/cjs/index.d.ts.map +0 -1
  96. package/dist/esm/SimpleBootHttpSSRFactory.d.ts +0 -8
  97. package/dist/esm/SimpleBootHttpSSRFactory.d.ts.map +0 -1
  98. package/dist/esm/SimpleBootHttpSSRServer.d.ts.map +0 -1
  99. package/dist/esm/codes/HttpHeaders.d.ts +0 -45
  100. package/dist/esm/codes/HttpHeaders.d.ts.map +0 -1
  101. package/dist/esm/codes/Mimes.d.ts +0 -31
  102. package/dist/esm/codes/Mimes.d.ts.map +0 -1
  103. package/dist/esm/codes/index.d.ts +0 -3
  104. package/dist/esm/codes/index.d.ts.map +0 -1
  105. package/dist/esm/decorators/LoadAroundBefore.d.ts +0 -2
  106. package/dist/esm/decorators/LoadAroundBefore.d.ts.map +0 -1
  107. package/dist/esm/decorators/SaveAroundAfter.d.ts +0 -3
  108. package/dist/esm/decorators/SaveAroundAfter.d.ts.map +0 -1
  109. package/dist/esm/decorators/index.d.ts +0 -3
  110. package/dist/esm/decorators/index.d.ts.map +0 -1
  111. package/dist/esm/filters/IntentSchemeFilter.d.ts +0 -20
  112. package/dist/esm/filters/IntentSchemeFilter.d.ts.map +0 -1
  113. package/dist/esm/filters/SSRFilter.d.ts.map +0 -1
  114. package/dist/esm/filters/SSRWorker.d.ts +0 -16
  115. package/dist/esm/filters/SSRWorker.d.ts.map +0 -1
  116. package/dist/esm/filters/index.d.ts.map +0 -1
  117. package/dist/esm/index.d.ts +0 -3
  118. package/dist/esm/initializers/JsdomInitializer.d.ts +0 -11
  119. package/dist/esm/initializers/JsdomInitializer.d.ts.map +0 -1
  120. package/dist/esm/initializers/index.d.ts +0 -2
  121. package/dist/esm/initializers/index.d.ts.map +0 -1
  122. package/dist/esm/option/HttpSSRServerOption.d.ts +0 -4
  123. package/dist/esm/option/HttpSSRServerOption.d.ts.map +0 -1
  124. package/dist/esm/option/index.d.ts +0 -2
  125. package/dist/esm/option/index.d.ts.map +0 -1
  126. package/dist/esm/proxy/IntentSchemeFrontProxy.d.ts +0 -4
  127. package/dist/esm/proxy/IntentSchemeFrontProxy.d.ts.map +0 -1
  128. package/dist/esm/proxy/IntentSchemeServerProxy.d.ts +0 -4
  129. package/dist/esm/proxy/IntentSchemeServerProxy.d.ts.map +0 -1
  130. package/dist/esm/proxy/SymbolIntentApiServiceProxy.d.ts +0 -16
  131. package/dist/esm/proxy/SymbolIntentApiServiceProxy.d.ts.map +0 -1
  132. package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.d.ts +0 -13
  133. package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.d.ts.map +0 -1
  134. package/dist/esm/proxy/index.d.ts.map +0 -1
  135. /package/dist/{cjs → types}/SimpleBootHttpSSRFactory.d.ts +0 -0
  136. /package/dist/{cjs → types}/SimpleBootHttpSSRFactory.d.ts.map +0 -0
  137. /package/dist/{cjs → types}/SimpleBootHttpSSRServer.d.ts.map +0 -0
  138. /package/dist/{cjs → types}/codes/Mimes.d.ts +0 -0
  139. /package/dist/{cjs → types}/codes/Mimes.d.ts.map +0 -0
  140. /package/dist/{cjs → types}/codes/index.d.ts +0 -0
  141. /package/dist/{cjs → types}/codes/index.d.ts.map +0 -0
  142. /package/dist/{cjs → types}/decorators/LoadAroundBefore.d.ts +0 -0
  143. /package/dist/{cjs → types}/decorators/LoadAroundBefore.d.ts.map +0 -0
  144. /package/dist/{cjs → types}/decorators/SaveAroundAfter.d.ts +0 -0
  145. /package/dist/{cjs → types}/decorators/SaveAroundAfter.d.ts.map +0 -0
  146. /package/dist/{cjs → types}/decorators/index.d.ts +0 -0
  147. /package/dist/{cjs → types}/decorators/index.d.ts.map +0 -0
  148. /package/dist/{cjs → types}/filters/IntentSchemeFilter.d.ts +0 -0
  149. /package/dist/{cjs → types}/filters/IntentSchemeFilter.d.ts.map +0 -0
  150. /package/dist/{cjs → types}/filters/SSRFilter.d.ts +0 -0
  151. /package/dist/{cjs → types}/filters/SSRWorker.d.ts +0 -0
  152. /package/dist/{cjs → types}/filters/SSRWorker.d.ts.map +0 -0
  153. /package/dist/{cjs → types}/filters/index.d.ts +0 -0
  154. /package/dist/{cjs → types}/filters/index.d.ts.map +0 -0
  155. /package/dist/{cjs → types}/index.d.ts +0 -0
  156. /package/dist/{cjs → types}/initializers/JsdomInitializer.d.ts +0 -0
  157. /package/dist/{cjs → types}/initializers/index.d.ts +0 -0
  158. /package/dist/{cjs → types}/initializers/index.d.ts.map +0 -0
  159. /package/dist/{cjs → types}/option/HttpSSRServerOption.d.ts +0 -0
  160. /package/dist/{cjs → types}/option/HttpSSRServerOption.d.ts.map +0 -0
  161. /package/dist/{cjs → types}/option/index.d.ts +0 -0
  162. /package/dist/{cjs → types}/option/index.d.ts.map +0 -0
  163. /package/dist/{cjs → types}/proxy/IntentSchemeFrontProxy.d.ts +0 -0
  164. /package/dist/{cjs → types}/proxy/IntentSchemeFrontProxy.d.ts.map +0 -0
  165. /package/dist/{cjs → types}/proxy/IntentSchemeServerProxy.d.ts +0 -0
  166. /package/dist/{cjs → types}/proxy/IntentSchemeServerProxy.d.ts.map +0 -0
  167. /package/dist/{cjs → types}/proxy/SymbolIntentApiServiceProxy.d.ts +0 -0
  168. /package/dist/{cjs → types}/proxy/SymbolIntentApiServiceProxyBase.d.ts +0 -0
  169. /package/dist/{cjs → types}/proxy/SymbolIntentApiServiceProxyBase.d.ts.map +0 -0
  170. /package/dist/{cjs → types}/proxy/index.d.ts +0 -0
  171. /package/dist/{cjs → types}/proxy/index.d.ts.map +0 -0
@@ -0,0 +1,227 @@
1
+ import { RequestResponse } from '@dooboostore/simple-boot-http-server/models/RequestResponse';
2
+ import { HttpHeaders } from '@dooboostore/simple-boot-http-server/codes/HttpHeaders';
3
+ import { SimpleBootHttpSSRFactory } from '../SimpleBootHttpSSRFactory';
4
+ import { ConstructorType } from '@dooboostore/core/types';
5
+ import { JsdomInitializer } from '../initializers/JsdomInitializer';
6
+ import { Filter } from '@dooboostore/simple-boot-http-server/filters/Filter';
7
+ import { Mimes } from '@dooboostore/simple-boot-http-server/codes/Mimes';
8
+ import { HttpStatus } from '@dooboostore/simple-boot-http-server/codes/HttpStatus';
9
+ import { SimpleBootHttpServer } from '@dooboostore/simple-boot-http-server/SimpleBootHttpServer';
10
+ import { SimFrontOption } from '@dooboostore/simple-boot-front/option/SimFrontOption';
11
+ import { SimpleBootFront } from '@dooboostore/simple-boot-front/SimpleBootFront';
12
+ import { AsyncBlockingQueue } from '@dooboostore/core/queues/AsyncBlockingQueue';
13
+ import { RandomUtils } from '@dooboostore/core/random/RandomUtils';
14
+ import * as JSDOM from 'jsdom';
15
+ import { NotFoundError } from '@dooboostore/simple-boot-http-server/errors/NotFoundError';
16
+ import { DomRenderProxy } from '@dooboostore/dom-render/DomRenderProxy';
17
+ import { filter } from '@dooboostore/core/message/operators/filter';
18
+ import { first } from '@dooboostore/core/message/operators/first';
19
+ import { firstValueFrom } from '@dooboostore/core/message/internal/firstValueFrom';
20
+ import { parseHTML } from 'linkedom';
21
+ import { LinkedomInitializer } from '../initializers/LinkedomInitializer';
22
+
23
+ export type FactoryAndParams = {
24
+ frontDistPath: string;
25
+ frontDistIndexFileName?: string;
26
+ factorySimFrontOption: (window: any) => SimFrontOption;
27
+ factory: SimpleBootHttpSSRFactory;
28
+ poolOption: {
29
+ max: number;
30
+ min: number;
31
+ clearIntervalTime?: number;
32
+ };
33
+ using: ConstructorType<any>[];
34
+ domExcludes?: ConstructorType<any>[];
35
+ ssrExcludeFilter?: (rr: RequestResponse) => boolean;
36
+ simpleBootFront?: {
37
+ notFoundError?: boolean;
38
+ };
39
+ };
40
+
41
+ export class SSRLinkDomDomFilter implements Filter {
42
+ private simpleBootFrontPool: SimpleBootFront[] = [];
43
+ private simpleBootFrontQueue = new AsyncBlockingQueue<SimpleBootFront>();
44
+ // private indexHTML: string;
45
+ private welcomUrl = 'http://localhost';
46
+ private poolGeneration = 0;
47
+ private intervalId?: NodeJS.Timeout;
48
+
49
+ constructor(
50
+ public config: FactoryAndParams,
51
+ public otherInstanceSim?: Map<ConstructorType<any>, any>
52
+ ) {
53
+ config.frontDistIndexFileName = config.frontDistIndexFileName || 'index.html';
54
+ // this.indexHTML = JsdomInitializer.loadFile(this.config.frontDistPath, config.frontDistIndexFileName);
55
+ }
56
+
57
+ async onInit(app: SimpleBootHttpServer) {
58
+ for (let i = 0; i < this.config.poolOption.min; i++) {
59
+ await this.pushQueue();
60
+ }
61
+
62
+ if (this.config.poolOption.clearIntervalTime && this.config.poolOption.clearIntervalTime > 0) {
63
+ this.intervalId = setInterval(() => {
64
+ this.poolGeneration++;
65
+ }, this.config.poolOption.clearIntervalTime);
66
+ }
67
+ }
68
+
69
+ async onDestroy() {
70
+ if (this.intervalId) {
71
+ clearInterval(this.intervalId);
72
+ }
73
+ // this.simpleBootFrontQueue.clear();
74
+ this.simpleBootFrontPool.forEach(front => {
75
+ (front as any).jsdom?.window.close();
76
+ });
77
+ this.simpleBootFrontPool = [];
78
+ }
79
+
80
+ async makePage() {
81
+ return new LinkedomInitializer(
82
+ this.config.frontDistPath,
83
+ this.config.frontDistIndexFileName || 'index.html',
84
+ { url: this.welcomUrl }
85
+ ).run();
86
+ // const jsdom = await new JsdomInitializer(
87
+ // this.config.frontDistPath,
88
+ // this.config.frontDistIndexFileName || 'index.html',
89
+ // { url: this.welcomUrl }
90
+ // ).run();
91
+ // return jsdom;
92
+ }
93
+
94
+ async makeFront(window: Window) {
95
+ const name = RandomUtils.uuid();
96
+ (window as any).ssrUse = false;
97
+ const option = this.config.factorySimFrontOption(DomRenderProxy.final(window));
98
+ const simpleBootFront = await this.config.factory.create(option, this.config.using, this.config.domExcludes);
99
+ simpleBootFront.run(this.otherInstanceSim);
100
+ (simpleBootFront as any).generation = this.poolGeneration;
101
+ return simpleBootFront;
102
+ }
103
+
104
+ enqueueFrontApp(simpleBootFront: SimpleBootFront) {
105
+ // this.simpleBootFrontPool.set(simpleBootFront.option.name!, simpleBootFront);
106
+ this.simpleBootFrontPool.push(simpleBootFront);
107
+ this.simpleBootFrontQueue.enqueue(simpleBootFront);
108
+ }
109
+ async pushQueue() {
110
+ if (this.simpleBootFrontPool.length < this.config.poolOption.max) {
111
+ this.enqueueFrontApp(await this.makeFront(await this.makePage()));
112
+ }
113
+ }
114
+
115
+ async proceedBefore({ rr, app }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map<string, any> }) {
116
+ if (this.config.ssrExcludeFilter?.(rr)) {
117
+ return false;
118
+ }
119
+ if (rr.reqHasAcceptHeader(Mimes.TextHtml) || rr.reqHasAcceptHeader(Mimes.All)) {
120
+ if (this.simpleBootFrontQueue.isEmpty()) {
121
+ await this.pushQueue();
122
+ }
123
+ const simpleBootFront = await this.simpleBootFrontQueue.dequeue();
124
+ try {
125
+ (simpleBootFront.option.window as any).ssrUse = true;
126
+ delete (simpleBootFront.option.window as any).server_side_data;
127
+ const url = rr.reqUrlObj({ host: 'localhost' });
128
+ if (this.config.simpleBootFront?.notFoundError) {
129
+ // intent router check first
130
+ const intent = await simpleBootFront.getIntent(url.pathname);
131
+ // route를 못찾은상태에서 router path까지 안맞으면 404 처리한다. route랑 router랑 다르니깐 헛갈리지말도록
132
+ if (intent.module === undefined && !intent.getRouterPathData(rr.reqUrlPathName)) {
133
+ throw new NotFoundError({ message: `Not Found: ${rr.reqUrlPathName}` });
134
+ }
135
+ }
136
+
137
+ // runRouting!!
138
+ const targetUrl = url.toString();
139
+ await simpleBootFront.goRouting(targetUrl);
140
+ await new Promise(r => setTimeout(r, 0)); // <--중요: 이거 넣어야지 두번불러지는게 없어지는듯? 뭐지 event loop 변경된건가?
141
+
142
+
143
+ // simpleBootFront.routingSubjectObservable.subscribe(it=>{
144
+ // console.log('zzzzzzzzzzzzzzzzzzz', it);
145
+ // if (it.triggerPoint==='end') {
146
+ // console.log('zzz@@', it.routerModule.intent);
147
+ // }
148
+ // })
149
+
150
+ const data = await firstValueFrom(
151
+ // @ts-ignore
152
+ simpleBootFront.routingSubjectObservable.pipe(
153
+ // @ts-ignore
154
+ filter(
155
+ (it) =>
156
+ it.triggerPoint === 'end' &&
157
+ typeof it.routerModule.intent.uri === 'string' &&
158
+ targetUrl.endsWith(it.routerModule.intent.uri)
159
+ ),
160
+ // delay(1000),
161
+ first()
162
+ )
163
+ );
164
+ // console.log('???????done');
165
+ const html = this.makeHTML(simpleBootFront);
166
+ await this.writeOkHtmlAndEnd({ rr }, html);
167
+ } finally {
168
+ (simpleBootFront.option.window as any).ssrUse = false;
169
+ delete (simpleBootFront.option.window as any).server_side_data;
170
+ if ((simpleBootFront as any).generation < this.poolGeneration) {
171
+ // Stale instance, destroy it
172
+ const jsdom = (simpleBootFront as any).jsdom as JSDOM.JSDOM | undefined;
173
+ jsdom?.window.close();
174
+ const index = this.simpleBootFrontPool.indexOf(simpleBootFront);
175
+ if (index > -1) {
176
+ this.simpleBootFrontPool.splice(index, 1);
177
+ }
178
+ this.pushQueue();
179
+ } else {
180
+ // Current instance, return to queue
181
+ this.simpleBootFrontQueue.enqueue(simpleBootFront);
182
+ }
183
+ }
184
+ return false;
185
+ } else {
186
+ return true;
187
+ }
188
+ }
189
+
190
+ makeHTML(simpleBootFront: SimpleBootFront) {
191
+ (simpleBootFront.option.window as any).document.querySelectorAll('*').forEach((el:HTMLElement )=> {
192
+ Array.from(el.attributes).forEach(attr => {
193
+ if (/^dr-/.test(attr.name) || /^domstyle/.test(attr.name) || /this-path/.test(attr.name)) {
194
+ el.removeAttribute(attr.name);
195
+ }
196
+ });
197
+ });
198
+ let html = simpleBootFront.option.window.document.documentElement.outerHTML;
199
+ html = '<!DOCTYPE html>' + html;
200
+ html = html.replace(/\$\{[\s\S]*?\}\$/g, '');
201
+ const serverSideData = (simpleBootFront.option.window as any).server_side_data;
202
+ if (serverSideData) {
203
+ const data = Object.entries(serverSideData)
204
+ .map(([k, v]) => {
205
+ if (typeof v === 'string') {
206
+ return `window.server_side_data.${k} = ${v}`;
207
+ } else {
208
+ return `window.server_side_data.${k} = ${JSON.stringify(v)}`;
209
+ }
210
+ })
211
+ .join(';');
212
+ if (data) {
213
+ html = html.replace('</head>', `<script> window.server_side_data={}; ${data}; </script></head>`);
214
+ }
215
+ }
216
+ return html;
217
+ }
218
+ async writeOkHtmlAndEnd({ rr, status = HttpStatus.Ok }: { rr: RequestResponse; status?: HttpStatus }, html: string) {
219
+ rr.resStatusCode(status);
220
+ rr.resSetHeader(HttpHeaders.ContentType, Mimes.TextHtml);
221
+ await rr.resEnd(html);
222
+ }
223
+
224
+ async proceedAfter({ rr, app }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map<string, any> }) {
225
+ return true;
226
+ }
227
+ }
@@ -0,0 +1,76 @@
1
+ import { ConstructorType } from '@dooboostore/core/types';
2
+ import {FactoryAndParams} from './SSRFilter';
3
+ import {JsdomInitializer} from '../initializers/JsdomInitializer';
4
+ import JSDOM from 'jsdom';
5
+ import {RandomUtils} from '@dooboostore/core/random/RandomUtils';
6
+ import {SimpleBootFront} from '@dooboostore/simple-boot-front/SimpleBootFront';
7
+
8
+ export class SSRWorker {
9
+ public welcomUrl = 'http://localhost'
10
+ private simpleBootFront?: SimpleBootFront;
11
+
12
+ constructor(public factory: FactoryAndParams, public otherInstanceSim?: Map<ConstructorType<any>, any>) {
13
+
14
+ }
15
+
16
+ async run() {
17
+ this.simpleBootFront = await this.makeFront();
18
+ }
19
+
20
+ async makeJsdom() {
21
+ const jsdom = await new JsdomInitializer(this.factory.frontDistPath, this.factory.frontDistIndexFileName || 'index.html', {url: this.welcomUrl}).run();
22
+ return jsdom;
23
+ }
24
+
25
+ async makeFront(jsdom?: JSDOM.JSDOM) {
26
+ if (!jsdom) {
27
+ jsdom = await this.makeJsdom();
28
+ }
29
+ const name = RandomUtils.uuid();
30
+ // const jsdom = await this.makeJsdom();
31
+ const window = jsdom.window as unknown as Window & typeof globalThis;
32
+ (window as any).ssrUse = false;
33
+ const option = this.factory.factorySimFrontOption(window);
34
+ // option.name = name;
35
+ const simpleBootFront = await this.factory.factory.create(option, this.factory.using, this.factory.domExcludes);
36
+ simpleBootFront.run(this.otherInstanceSim);
37
+ (simpleBootFront as any).jsdom = jsdom;
38
+ return simpleBootFront;
39
+ }
40
+
41
+
42
+ async getHtml(url: string) {
43
+ if (this.simpleBootFront && (this.simpleBootFront.option.window as any).ssrUse) {
44
+
45
+ } else if (this.simpleBootFront) {
46
+ (this.simpleBootFront.option.window as any).ssrUse = true;
47
+ delete (this.simpleBootFront.option.window as any).server_side_data;
48
+
49
+ // run
50
+ await this.simpleBootFront.goRouting(url);
51
+ let html = this.simpleBootFront.option.window.document.documentElement.outerHTML;
52
+
53
+ const serverSideData = (this.simpleBootFront.option.window as any).server_side_data;
54
+ if (serverSideData) {
55
+ const data = Object.entries(serverSideData).map(([k, v]) => {
56
+ if (typeof v === 'string') {
57
+ return `window.server_side_data.${k} = ${v}`;
58
+ } else {
59
+ return `window.server_side_data.${k} = ${JSON.stringify(v)}`;
60
+ }
61
+ }).join(';');
62
+ if (data) {
63
+ html = html.replace('</head>', `<script> window.server_side_data={}; ${data}; </script></head>`);
64
+ }
65
+ }
66
+
67
+ this.makeFront().then(it => {
68
+ this.simpleBootFront = it;
69
+ });
70
+ return html;
71
+ } {
72
+
73
+ }
74
+
75
+ }
76
+ }
@@ -1,4 +1,3 @@
1
1
  export * from './IntentSchemeFilter';
2
2
  export * from './SSRFilter';
3
- export * from './SSRWorker';
4
- //# sourceMappingURL=index.d.ts.map
3
+ export * from './SSRWorker';
package/src/index.ts ADDED
@@ -0,0 +1,9 @@
1
+ // export * from './codes';
2
+ // export * from './decorators';
3
+ // export * from './filters';
4
+ // export * from './initializers';
5
+ // export * from './option';
6
+ // export * from './proxy';
7
+ // export * from './SimpleBootHttpSSRFactory';
8
+ // export * from './SimpleBootHttpSSRServer';
9
+ export default {}
@@ -0,0 +1,85 @@
1
+ import * as JSDOM from 'jsdom';
2
+ import { ReconfigureSettings } from 'jsdom';
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+
6
+ export class JsdomInitializer {
7
+ constructor(
8
+ private frontDistPath: string,
9
+ private frontDistIndexFileName: string,
10
+ private reconfigureSettings?: ReconfigureSettings
11
+ ) {}
12
+
13
+ public static loadFile(distPath: string, filePath: string): string {
14
+ return fs.readFileSync(path.join(distPath, filePath), 'utf8');
15
+ }
16
+
17
+ async run(): Promise<JSDOM.JSDOM> {
18
+ // const indexHTML = fs.readFileSync(path.join(this.frontDistPath, 'index.html'), 'utf8');
19
+ // const indexHTML = JsdomInitializer.loadFile(this.frontDistPath, this.frontDistIndexFileName);
20
+ const pathStr = path.join(this.frontDistPath, this.frontDistIndexFileName);
21
+
22
+ const jsdom = await JSDOM.JSDOM.fromFile(pathStr, {});
23
+ if (this.reconfigureSettings) {
24
+ jsdom.reconfigure(this.reconfigureSettings);
25
+ }
26
+ // devDependencies
27
+ // "@types/jsdom": "^21.1.2",
28
+ // "canvas": "^3.1.0",
29
+ // global setting
30
+ // @ts-ignore
31
+ global.document = jsdom.window.document;
32
+ // @ts-ignore
33
+ global.window = jsdom.window as unknown as Window & typeof globalThis;
34
+ // @ts-ignore
35
+ global.window.requestAnimationFrame = () => {};
36
+ global.window.scrollTo = () => {};
37
+ // const originalPushState = global.window.history.pushState;
38
+ // global.window.history.pushState = (data: any,title: any,path: string) => {
39
+ // console.log('----iida',path)
40
+ // path.replace()
41
+ //
42
+ // let s = `${UrlUtils.origin(global.window.location.href)}${path?`${path}`:''}`;
43
+ // console.log('----da',s)
44
+ // originalPushState.apply(global.window.history, [data, title, s]);
45
+ // }
46
+ // const originalReplaceState = global.window.history.replaceState;
47
+ // global.window.history.replaceState = (data: any,title: any,path: string) => {
48
+ // let s = `${UrlUtils.origin(global.window.location.href)}${path?`${path}`:''}`;
49
+ // originalReplaceState.apply(global.window.history, [data, title, s]);
50
+ // }
51
+ // const dummyResponse = {ok: false, json: () => Promise.resolve({})}; // as Response;
52
+ // global.fetch = (...data: any): Promise<any> => {
53
+ // console.log('dummy fetch')
54
+ // return Promise.resolve(dummyResponse)
55
+ // };
56
+ // @ts-ignore
57
+ global.history = jsdom.window.history;
58
+ global.Event = jsdom.window.Event;
59
+ // @ts-ignore
60
+ global.PopStateEvent = jsdom.window.Event;
61
+ global.IntersectionObserver = jsdom.window.IntersectionObserver;
62
+ // @ts-ignore
63
+ // global.Error = ErrorBase;
64
+ // @ts-ignore
65
+ // global.navigator = jsdom.window.navigator;
66
+ global.NodeFilter = jsdom.window.NodeFilter;
67
+ global.Node = jsdom.window.Node;
68
+ global.DocumentFragment = jsdom.window.DocumentFragment;
69
+ global.HTMLElement = jsdom.window.HTMLElement;
70
+ global.HTMLMetaElement = jsdom.window.HTMLMetaElement;
71
+ global.Element = jsdom.window.Element;
72
+ global.HTMLCanvasElement = jsdom.window.HTMLCanvasElement;
73
+ global.HTMLCanvasElement.prototype.getContext = () => {
74
+ return null;
75
+ };
76
+ global.CanvasRenderingContext2D = jsdom.window.CanvasRenderingContext2D;
77
+ global.CanvasPattern = jsdom.window.CanvasPattern;
78
+ global.CanvasGradient = jsdom.window.CanvasGradient;
79
+ global.Path2D = jsdom.window.Path2D;
80
+ global.ImageData = jsdom.window.ImageData;
81
+ return jsdom;
82
+ }
83
+ }
84
+ //
85
+ // export default new JsdomInitializer();
@@ -0,0 +1,69 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { parseHTML } from 'linkedom';
4
+
5
+ export class LinkedomInitializer {
6
+ constructor(
7
+ private frontDistPath: string,
8
+ private frontDistIndexFileName: string,
9
+ private reconfigureSettings?: {url: string}
10
+ ) {}
11
+
12
+ public static loadFile(distPath: string, filePath: string): string {
13
+ return fs.readFileSync(path.join(distPath, filePath), 'utf8');
14
+ }
15
+
16
+ async run(): Promise<Window> {
17
+ // const indexHTML = fs.readFileSync(path.join(this.frontDistPath, 'index.html'), 'utf8');
18
+ // const indexHTML = JsdomInitializer.loadFile(this.frontDistPath, this.frontDistIndexFileName);
19
+ const pathStr = path.join(this.frontDistPath, this.frontDistIndexFileName);
20
+
21
+ const html = fs.readFileSync(pathStr,'utf8');
22
+
23
+ const w = parseHTML(html);
24
+ // @ts-ignore
25
+ // w.location ??= { href: 'about:blank'};
26
+ // if(this.reconfigureSettings?.url){
27
+ // console.log('--',w,w.location);
28
+ // @ts-ignore
29
+ // w.location.href = this.reconfigureSettings.url;
30
+ // }
31
+ // console.log('!!!!!!!!!!!', html, w.document);
32
+ // @ts-ignore
33
+ global.document = w.document;
34
+ // @ts-ignore
35
+ global.window = w as unknown as Window & typeof globalThis;
36
+ // @ts-ignore
37
+ global.window.requestAnimationFrame = () => {};
38
+ global.window.scrollTo = () => {};
39
+ // @ts-ignore
40
+ global.history = w.history;
41
+ global.Event = w.Event;
42
+ // @ts-ignore
43
+ global.PopStateEvent = w.Event;
44
+ global.IntersectionObserver = w.IntersectionObserver;
45
+ // @ts-ignore
46
+ // global.Error = ErrorBase;
47
+ // @ts-ignore
48
+ // global.navigator = w.navigator;
49
+ global.NodeFilter = w.NodeFilter;
50
+ global.Node = w.Node;
51
+ global.DocumentFragment = w.DocumentFragment;
52
+ global.HTMLElement = w.HTMLElement;
53
+ global.HTMLMetaElement = w.HTMLMetaElement;
54
+ global.Element = w.Element;
55
+ global.HTMLCanvasElement = w.HTMLCanvasElement;
56
+ global.HTMLCanvasElement.prototype.getContext = () => {
57
+ return null;
58
+ };
59
+ global.CanvasRenderingContext2D = w.CanvasRenderingContext2D;
60
+ global.CanvasPattern = w.CanvasPattern;
61
+ global.CanvasGradient = w.CanvasGradient;
62
+ global.Path2D = w.Path2D;
63
+ global.ImageData = w.ImageData;
64
+ // console.log('cvvvvvvvvvvvvvv', w.Node.DOCUMENT_FRAGMENT_NODE);
65
+ return w;
66
+ }
67
+ }
68
+ //
69
+ // export default new JsdomInitializer();
@@ -0,0 +1 @@
1
+ export * from './JsdomInitializer';
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/acorn@7.4.1/node_modules/acorn/bin/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/acorn@7.4.1/node_modules/acorn/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/acorn@7.4.1/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/acorn@7.4.1/node_modules/acorn/bin/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/acorn@7.4.1/node_modules/acorn/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/acorn@7.4.1/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../../../../../node_modules/.pnpm/acorn@7.4.1/node_modules/acorn/bin/acorn" "$@"
15
+ else
16
+ exec node "$basedir/../../../../../node_modules/.pnpm/acorn@7.4.1/node_modules/acorn/bin/acorn" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/browserslist@4.26.2/node_modules/browserslist/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/browserslist@4.26.2/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/browserslist@4.26.2/node_modules/browserslist/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/browserslist@4.26.2/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../../../../../node_modules/.pnpm/browserslist@4.26.2/node_modules/browserslist/cli.js" "$@"
15
+ else
16
+ exec node "$basedir/../../../../../node_modules/.pnpm/browserslist@4.26.2/node_modules/browserslist/cli.js" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/eslint@7.32.0/node_modules/eslint/bin/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/eslint@7.32.0/node_modules/eslint/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/eslint@7.32.0/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/eslint@7.32.0/node_modules/eslint/bin/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/eslint@7.32.0/node_modules/eslint/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/eslint@7.32.0/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../eslint/bin/eslint.js" "$@"
15
+ else
16
+ exec node "$basedir/../eslint/bin/eslint.js" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/jest@26.6.3_ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2_/node_modules/jest/bin/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/jest@26.6.3_ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2_/node_modules/jest/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/jest@26.6.3_ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2_/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/jest@26.6.3_ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2_/node_modules/jest/bin/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/jest@26.6.3_ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2_/node_modules/jest/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/jest@26.6.3_ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2_/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../jest/bin/jest.js" "$@"
15
+ else
16
+ exec node "$basedir/../jest/bin/jest.js" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-jest@26.5.6_jest@26.6.3_ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2___typescript@5.9.2/node_modules/ts-jest/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-jest@26.5.6_jest@26.6.3_ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2___typescript@5.9.2/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-jest@26.5.6_jest@26.6.3_ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2___typescript@5.9.2/node_modules/ts-jest/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-jest@26.5.6_jest@26.6.3_ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2___typescript@5.9.2/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../ts-jest/cli.js" "$@"
15
+ else
16
+ exec node "$basedir/../ts-jest/cli.js" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../../../../../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/bin.js" "$@"
15
+ else
16
+ exec node "$basedir/../../../../../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/bin.js" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../../../../../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/bin-cwd.js" "$@"
15
+ else
16
+ exec node "$basedir/../../../../../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/bin-cwd.js" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules:/Users/hyunhakim/workspace/dooboostore/source/dooboostore-develop/dooboostore-develop.github.io/source/packages/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../../../../../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/bin-esm.js" "$@"
15
+ else
16
+ exec node "$basedir/../../../../../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.17_typescript@5.9.2/node_modules/ts-node/dist/bin-esm.js" "$@"
17
+ fi