@dooboostore/simple-boot-http-server-ssr 1.0.12 → 1.0.14
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.
- package/README.MD +1 -3
- package/dist/cjs/filters/IntentSchemeFilter.js.map +2 -2
- package/dist/cjs/filters/SSRDomParserFilter.js +186 -0
- package/dist/cjs/filters/SSRDomParserFilter.js.map +7 -0
- package/dist/cjs/filters/SSRFilter.js +1 -1
- package/dist/cjs/filters/SSRFilter.js.map +2 -2
- package/dist/cjs/filters/SSRLinkDomDomFilter.js +183 -0
- package/dist/cjs/filters/SSRLinkDomDomFilter.js.map +7 -0
- package/dist/cjs/initializers/DomParserInitializer.js +79 -0
- package/dist/cjs/initializers/DomParserInitializer.js.map +7 -0
- package/dist/cjs/initializers/LinkedomInitializer.js +81 -0
- package/dist/cjs/initializers/LinkedomInitializer.js.map +7 -0
- package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js +85 -73
- package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js.map +2 -2
- package/dist/cjs/proxy/SymbolIntentApiServiceProxyBase.js +2 -77
- package/dist/cjs/proxy/SymbolIntentApiServiceProxyBase.js.map +2 -2
- package/dist/esm/filters/IntentSchemeFilter.js.map +2 -2
- package/dist/esm/filters/SSRDomParserFilter.js +163 -0
- package/dist/esm/filters/SSRDomParserFilter.js.map +7 -0
- package/dist/esm/filters/SSRFilter.js +1 -1
- package/dist/esm/filters/SSRFilter.js.map +2 -2
- package/dist/esm/filters/SSRLinkDomDomFilter.js +160 -0
- package/dist/esm/filters/SSRLinkDomDomFilter.js.map +7 -0
- package/dist/esm/initializers/DomParserInitializer.js +46 -0
- package/dist/esm/initializers/DomParserInitializer.js.map +7 -0
- package/dist/esm/initializers/LinkedomInitializer.js +48 -0
- package/dist/esm/initializers/LinkedomInitializer.js.map +7 -0
- package/dist/esm/proxy/SymbolIntentApiServiceProxy.js +85 -73
- package/dist/esm/proxy/SymbolIntentApiServiceProxy.js.map +2 -2
- package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.js +2 -77
- package/dist/esm/proxy/SymbolIntentApiServiceProxyBase.js.map +2 -2
- package/dist/esm-bundle/dooboostore-simple-boot-http-server-ssr.esm.js +1184 -525
- package/dist/esm-bundle/dooboostore-simple-boot-http-server-ssr.esm.js.map +4 -4
- package/dist/types/filters/IntentSchemeFilter.d.ts.map +1 -1
- package/dist/types/filters/SSRDomParserFilter.d.ts +57 -0
- package/dist/types/filters/SSRDomParserFilter.d.ts.map +1 -0
- package/dist/types/filters/SSRLinkDomDomFilter.d.ts +57 -0
- package/dist/types/filters/SSRLinkDomDomFilter.d.ts.map +1 -0
- package/dist/types/index.d.ts +0 -19
- package/dist/types/initializers/DomParserInitializer.d.ts +11 -0
- package/dist/types/initializers/DomParserInitializer.d.ts.map +1 -0
- package/dist/types/initializers/LinkedomInitializer.d.ts +11 -0
- package/dist/types/initializers/LinkedomInitializer.d.ts.map +1 -0
- package/dist/types/proxy/SymbolIntentApiServiceProxy.d.ts +2 -0
- package/dist/types/proxy/SymbolIntentApiServiceProxy.d.ts.map +1 -1
- package/dist/types/proxy/SymbolIntentApiServiceProxyBase.d.ts +0 -8
- package/dist/types/proxy/SymbolIntentApiServiceProxyBase.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-boot-http-server-ssr.umd.js +1184 -525
- package/dist/umd-bundle/dooboostore-simple-boot-http-server-ssr.umd.js.map +4 -4
- package/package.json +16 -14
- package/src/filters/IntentSchemeFilter.ts +51 -48
- package/src/filters/SSRDomParserFilter.ts +233 -0
- package/src/filters/SSRFilter.ts +2 -2
- package/src/filters/SSRLinkDomDomFilter.ts +227 -0
- package/src/initializers/DomParserInitializer.ts +70 -0
- package/src/initializers/LinkedomInitializer.ts +69 -0
- package/src/proxy/SymbolIntentApiServiceProxy.ts +100 -116
- package/src/proxy/SymbolIntentApiServiceProxyBase.ts +7 -85
- package/tsconfig.json +2 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { parseHTML } from '@dooboostore/dom-parser';
|
|
4
|
+
|
|
5
|
+
export class DomParserInitializer {
|
|
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, {href: this.reconfigureSettings.url}) as unknown as Window & typeof globalThis; ;
|
|
24
|
+
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
w.location ??= { href: 'about:blank'};
|
|
27
|
+
if(this.reconfigureSettings?.url){
|
|
28
|
+
// console.log('--',w,w.location);
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
w.location.href = this.reconfigureSettings.url;
|
|
31
|
+
}
|
|
32
|
+
// console.log('!!!!!!!!!!!', html, w.document);
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
// global.document = w.document;
|
|
35
|
+
// @ts-ignore
|
|
36
|
+
// global.window = w as unknown as Window & typeof globalThis;
|
|
37
|
+
// @ts-ignore
|
|
38
|
+
// global.window.requestAnimationFrame = () => {};
|
|
39
|
+
// global.window.scrollTo = () => {};
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
// global.history = w.history;
|
|
42
|
+
global.Event = w.Event;
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
global.PopStateEvent = w.Event;
|
|
45
|
+
global.IntersectionObserver = w.IntersectionObserver;
|
|
46
|
+
// @ts-ignore
|
|
47
|
+
// global.Error = ErrorBase;
|
|
48
|
+
// @ts-ignore
|
|
49
|
+
// global.navigator = w.navigator;
|
|
50
|
+
global.NodeFilter = w.NodeFilter;
|
|
51
|
+
global.Node = w.Node;
|
|
52
|
+
global.DocumentFragment = w.DocumentFragment;
|
|
53
|
+
global.HTMLElement = w.HTMLElement;
|
|
54
|
+
global.HTMLMetaElement = w.HTMLMetaElement;
|
|
55
|
+
global.Element = w.Element;
|
|
56
|
+
global.HTMLCanvasElement = w.HTMLCanvasElement;
|
|
57
|
+
global.HTMLCanvasElement.prototype.getContext = () => {
|
|
58
|
+
return null;
|
|
59
|
+
};
|
|
60
|
+
global.CanvasRenderingContext2D = w.CanvasRenderingContext2D;
|
|
61
|
+
global.CanvasPattern = w.CanvasPattern;
|
|
62
|
+
global.CanvasGradient = w.CanvasGradient;
|
|
63
|
+
global.Path2D = w.Path2D;
|
|
64
|
+
global.ImageData = w.ImageData;
|
|
65
|
+
// console.log('cvvvvvvvvvvvvvv', w.Node.DOCUMENT_FRAGMENT_NODE);
|
|
66
|
+
return w;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//
|
|
70
|
+
// 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();
|
|
@@ -1,131 +1,115 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export type Config<T = any> = {
|
|
1
|
+
import {getSim, Sim} from '@dooboostore/simple-boot/decorators/SimDecorator';
|
|
2
|
+
import {makeIntentHeaderBySymbol} from '../codes/HttpHeaders';
|
|
3
|
+
import {ConvertUtils} from '@dooboostore/core/convert/ConvertUtils';
|
|
4
|
+
import {ApiService} from '@dooboostore/simple-boot/fetch/ApiService';
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export type Config<T = any> = {
|
|
8
|
+
method?: 'get' | 'post' | 'petch' | 'delete' | 'head',
|
|
9
|
+
multipartFormData?: boolean,
|
|
10
|
+
bypassTransform?: boolean;
|
|
11
|
+
transformText?: boolean,
|
|
12
|
+
headers?: HeadersInit,
|
|
13
|
+
body?: T,
|
|
14
|
+
config?: ApiService.ApiServiceConfig
|
|
15
|
+
};
|
|
8
16
|
const _ = ApiService;
|
|
17
|
+
|
|
9
18
|
@Sim
|
|
10
19
|
export class SymbolIntentApiServiceProxy<T extends object> implements ProxyHandler<T> {
|
|
11
20
|
|
|
12
|
-
|
|
13
21
|
constructor(private apiService: ApiService) {
|
|
14
|
-
console.log('-------apiService', apiService);
|
|
22
|
+
// console.log('-------apiService', apiService);
|
|
15
23
|
}
|
|
16
24
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
25
|
+
static createHandler<T extends object>(apiService: ApiService): ProxyHandler<T> {
|
|
26
|
+
return {
|
|
27
|
+
get(target: T, prop: string | symbol, receiver: any): any {
|
|
28
|
+
const simConfig = getSim(target)
|
|
29
|
+
const value = Reflect.get(target, prop, receiver);
|
|
30
|
+
if (typeof value === 'function' && simConfig?.symbol) {
|
|
31
|
+
return function (...args: any[]) {
|
|
32
|
+
const f = value as Function;
|
|
33
|
+
const p = (userConfig: Config) => {
|
|
34
|
+
const headers = {...(userConfig?.headers ?? {}), ...makeIntentHeaderBySymbol(simConfig.symbol as Symbol)};
|
|
35
|
+
const method = userConfig?.method ?? 'post';
|
|
36
|
+
if (method === 'post' && userConfig?.multipartFormData) {
|
|
37
|
+
return apiService.post({
|
|
38
|
+
target: `/${String(prop)}`,
|
|
39
|
+
config: {
|
|
40
|
+
bypassTransform: userConfig?.bypassTransform,
|
|
41
|
+
transformText: userConfig?.transformText,
|
|
42
|
+
config: userConfig?.config,
|
|
43
|
+
fetch: {
|
|
44
|
+
credentials: 'include',
|
|
45
|
+
headers: headers,
|
|
46
|
+
body: ConvertUtils.toFormData(userConfig?.body)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
} else if (method === 'post') {
|
|
51
|
+
return apiService.postJson({
|
|
52
|
+
target: `/${String(prop)}`,
|
|
53
|
+
config: {
|
|
54
|
+
bypassTransform: userConfig?.bypassTransform,
|
|
55
|
+
transformText: userConfig?.transformText,
|
|
56
|
+
config: userConfig?.config,
|
|
57
|
+
fetch: {
|
|
58
|
+
credentials: 'include',
|
|
59
|
+
headers: headers,
|
|
60
|
+
body: userConfig?.body
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
} else if (method === 'petch') {
|
|
65
|
+
return apiService.patchJson({
|
|
66
|
+
target: `/${String(prop)}`,
|
|
67
|
+
config: {
|
|
68
|
+
bypassTransform: userConfig?.bypassTransform,
|
|
69
|
+
transformText: userConfig?.transformText,
|
|
70
|
+
config: userConfig?.config,
|
|
71
|
+
fetch: {
|
|
72
|
+
credentials: 'include',
|
|
73
|
+
headers: headers,
|
|
74
|
+
body: userConfig?.body
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
} else {
|
|
79
|
+
return apiService[method]({
|
|
80
|
+
target: {url: `/${String(prop)}`, searchParams: userConfig?.body},
|
|
81
|
+
config: {
|
|
82
|
+
bypassTransform: userConfig?.bypassTransform,
|
|
83
|
+
transformText: userConfig?.transformText,
|
|
84
|
+
config: userConfig?.config,
|
|
85
|
+
fetch: {
|
|
86
|
+
credentials: 'include',
|
|
87
|
+
headers: headers,
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
39
91
|
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return
|
|
43
|
-
target: `/${String(prop)}`,
|
|
44
|
-
config: {
|
|
45
|
-
bypassTransform: userConfig?.bypassTransform,
|
|
46
|
-
transformText: userConfig?.transformText,
|
|
47
|
-
fetch: {
|
|
48
|
-
credentials: 'include',
|
|
49
|
-
headers: headers,
|
|
50
|
-
body: userConfig?.body
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
}else if (method === 'petch') {
|
|
55
|
-
return apiService.patchJson({
|
|
56
|
-
target: `/${String(prop)}`,
|
|
57
|
-
config: {
|
|
58
|
-
bypassTransform: userConfig?.bypassTransform,
|
|
59
|
-
transformText: userConfig?.transformText,
|
|
60
|
-
fetch: {
|
|
61
|
-
credentials: 'include',
|
|
62
|
-
headers: headers,
|
|
63
|
-
body: userConfig?.body
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
} else {
|
|
68
|
-
return apiService[method]({
|
|
69
|
-
// return apiService.head({
|
|
70
|
-
target: {url: `/${String(prop)}`, searchParams: userConfig?.body},
|
|
71
|
-
config: {
|
|
72
|
-
bypassTransform: userConfig?.bypassTransform,
|
|
73
|
-
transformText: userConfig?.transformText,
|
|
74
|
-
fetch: {
|
|
75
|
-
credentials: 'include',
|
|
76
|
-
headers: headers,
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
});
|
|
92
|
+
};
|
|
93
|
+
args.push(p);
|
|
94
|
+
return Reflect.apply(f, target, args);
|
|
80
95
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
// bypassTransform: userConfig?.bypassTransform,
|
|
90
|
-
// transformText: userConfig?.transformText,
|
|
91
|
-
// fetch: {
|
|
92
|
-
// credentials: 'include',
|
|
93
|
-
// headers: headers,
|
|
94
|
-
// body: ConvertUtils.toFormData(userConfig?.body)
|
|
95
|
-
// }
|
|
96
|
-
// }
|
|
97
|
-
// });
|
|
98
|
-
// } else {
|
|
99
|
-
// return apiService.postJson({
|
|
100
|
-
// target: `/${String(prop)}`,
|
|
101
|
-
// config: {
|
|
102
|
-
// bypassTransform: userConfig?.bypassTransform,
|
|
103
|
-
// transformText: userConfig?.transformText,
|
|
104
|
-
// fetch: {
|
|
105
|
-
// credentials: 'include',
|
|
106
|
-
// headers: headers,
|
|
107
|
-
// body: userConfig?.body
|
|
108
|
-
// }
|
|
109
|
-
// }
|
|
110
|
-
// });
|
|
111
|
-
// }
|
|
112
|
-
|
|
113
|
-
};
|
|
114
|
-
args.push(p);
|
|
115
|
-
return Reflect.apply(f, target, args);
|
|
116
|
-
// return f.apply(target, args);
|
|
96
|
+
}
|
|
97
|
+
return Reflect.get(target, prop, receiver);
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
apply(target: T, thisArg: any, argArray: any[]): any {
|
|
101
|
+
console.log('SymbolIntentApiServiceProxy apply')
|
|
102
|
+
// @ts-ignore
|
|
103
|
+
return Reflect.apply(target, thisArg, argArray);
|
|
117
104
|
}
|
|
118
|
-
}
|
|
119
|
-
return Reflect.get(target, prop, receiver);
|
|
105
|
+
};
|
|
120
106
|
}
|
|
121
107
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// @ts-ignore
|
|
125
|
-
return Reflect.apply(target, thisArg, argArray);
|
|
108
|
+
get(target: T, prop: string | symbol, receiver: any): any {
|
|
109
|
+
return SymbolIntentApiServiceProxy.createHandler<T>(this.apiService).get!(target, prop, receiver);
|
|
126
110
|
}
|
|
127
111
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
112
|
+
apply(target: T, thisArg: any, argArray: any[]): any {
|
|
113
|
+
return SymbolIntentApiServiceProxy.createHandler<T>(this.apiService).apply!(target, thisArg, argArray);
|
|
114
|
+
}
|
|
131
115
|
}
|
|
@@ -1,96 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export type SymbolIntentApiServiceProxyBaseConfig<T = any> = { method?:'get' | 'post' | 'petch' | 'delete' | 'head', multipartFormData?: boolean, bypassTransform?: boolean; transformText?: boolean, headers?: HeadersInit, body?: T };
|
|
1
|
+
import {getSim, Sim} from '@dooboostore/simple-boot/decorators/SimDecorator';
|
|
2
|
+
import {makeIntentHeaderBySymbol} from '../codes/HttpHeaders';
|
|
3
|
+
import {ConvertUtils} from '@dooboostore/core/convert/ConvertUtils';
|
|
4
|
+
import {ApiService} from '@dooboostore/simple-boot/fetch/ApiService';
|
|
5
|
+
import {SymbolIntentApiServiceProxy} from './SymbolIntentApiServiceProxy';
|
|
8
6
|
|
|
9
7
|
export class SymbolIntentApiServiceProxyBase<T extends object = any> {
|
|
10
8
|
// 생성자는 프록시될 대상 객체(target)와 의존성을 주입받습니다.
|
|
11
9
|
constructor(
|
|
12
10
|
apiService: ApiService,
|
|
13
11
|
) {
|
|
14
|
-
//
|
|
15
|
-
const handler
|
|
16
|
-
get(target: T, prop: string | symbol, receiver: any): any {
|
|
17
|
-
const simConfig = getSim(target)
|
|
18
|
-
const value = Reflect.get(target, prop, receiver);
|
|
19
|
-
if (typeof value === 'function' && simConfig?.symbol) {
|
|
20
|
-
return function (...args: any[]) {
|
|
21
|
-
const f = value as Function;
|
|
22
|
-
const p = (userConfig: SymbolIntentApiServiceProxyBaseConfig) => {
|
|
23
|
-
const headers = {...(userConfig?.headers ?? {}), ...makeIntentHeaderBySymbol(simConfig.symbol as Symbol)};
|
|
24
|
-
const method = userConfig?.method ?? 'post';
|
|
25
|
-
if(method === 'post' && userConfig?.multipartFormData) {
|
|
26
|
-
return apiService.post({
|
|
27
|
-
target: `/${String(prop)}`,
|
|
28
|
-
config: {
|
|
29
|
-
bypassTransform: userConfig?.bypassTransform,
|
|
30
|
-
transformText: userConfig?.transformText,
|
|
31
|
-
fetch: {
|
|
32
|
-
credentials: 'include',
|
|
33
|
-
headers: headers,
|
|
34
|
-
body: ConvertUtils.toFormData(userConfig?.body)
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
} else if (method === 'post') {
|
|
39
|
-
return apiService.postJson({
|
|
40
|
-
target: `/${String(prop)}`,
|
|
41
|
-
config: {
|
|
42
|
-
bypassTransform: userConfig?.bypassTransform,
|
|
43
|
-
transformText: userConfig?.transformText,
|
|
44
|
-
fetch: {
|
|
45
|
-
credentials: 'include',
|
|
46
|
-
headers: headers,
|
|
47
|
-
body: userConfig?.body
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
}else if (method === 'petch') {
|
|
52
|
-
return apiService.patchJson({
|
|
53
|
-
target: `/${String(prop)}`,
|
|
54
|
-
config: {
|
|
55
|
-
bypassTransform: userConfig?.bypassTransform,
|
|
56
|
-
transformText: userConfig?.transformText,
|
|
57
|
-
fetch: {
|
|
58
|
-
credentials: 'include',
|
|
59
|
-
headers: headers,
|
|
60
|
-
body: userConfig?.body
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
} else {
|
|
65
|
-
return apiService[method]({
|
|
66
|
-
target: {url: `/${String(prop)}`, searchParams: userConfig?.body},
|
|
67
|
-
config: {
|
|
68
|
-
bypassTransform: userConfig?.bypassTransform,
|
|
69
|
-
transformText: userConfig?.transformText,
|
|
70
|
-
fetch: {
|
|
71
|
-
credentials: 'include',
|
|
72
|
-
headers: headers,
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
args.push(p);
|
|
79
|
-
return Reflect.apply(f, target, args);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return Reflect.get(target, prop, receiver);
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
apply(target: T, thisArg: any, argArray: any[]): any {
|
|
86
|
-
console.log('SymbolIntentApiServiceProxyBase apply (from handler)');
|
|
87
|
-
// @ts-ignore
|
|
88
|
-
return Reflect.apply(target, thisArg, argArray);
|
|
89
|
-
}
|
|
90
|
-
};
|
|
12
|
+
// SymbolIntentApiServiceProxy의 static handler를 사용합니다.
|
|
13
|
+
const handler = SymbolIntentApiServiceProxy.createHandler<T>(apiService);
|
|
91
14
|
|
|
92
15
|
// 생성자에서 Proxy 객체를 반환합니다.
|
|
93
|
-
|
|
94
16
|
// @ts-ignore
|
|
95
17
|
return new Proxy(this, handler);
|
|
96
18
|
}
|
package/tsconfig.json
CHANGED
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"emitDecoratorMetadata": true,
|
|
13
13
|
"esModuleInterop": true,
|
|
14
14
|
"skipLibCheck": true,
|
|
15
|
-
"
|
|
15
|
+
"module": "esnext",
|
|
16
|
+
"moduleResolution": "bundler",
|
|
16
17
|
"baseUrl": ".",
|
|
17
18
|
"paths": {
|
|
18
19
|
// "@dooboostore/core/*": ["../../core/src/*"],
|