phecda-server 1.1.1 → 1.2.0
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 +106 -0
- package/dist/{server-d482bc0d.d.ts → axios-13a49ed4.d.ts} +3 -2
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +20 -6
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +18 -5
- package/dist/client/index.mjs.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.js +95 -35
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +92 -34
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# phecda-server
|
|
2
|
+
types share between server and client, like `nestjs`
|
|
3
|
+
|
|
4
|
+
## express
|
|
5
|
+
### server side
|
|
6
|
+
```ts
|
|
7
|
+
// in test.controller.ts
|
|
8
|
+
import { Body, Controller, Get, Param, Post, Query, Watcher, emitter } from 'phecda-server'
|
|
9
|
+
|
|
10
|
+
@Controller('/base')
|
|
11
|
+
export class TestController {
|
|
12
|
+
@Post('/:test')
|
|
13
|
+
async test(@Param('test') test: string, @Body('name') name: string, @Query('id') id: string) {
|
|
14
|
+
console.log(`${test}-${name}-${id}`)
|
|
15
|
+
emitter.emit('watch', 1)
|
|
16
|
+
return `${test}-${name}-${id}`
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@Get('/get')
|
|
20
|
+
async get() {
|
|
21
|
+
return {
|
|
22
|
+
data: 'test',
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
```ts
|
|
28
|
+
// in server.ts
|
|
29
|
+
import fs from 'fs'
|
|
30
|
+
import { Factory, bindApp } from 'phecda-server'
|
|
31
|
+
import express from 'express'
|
|
32
|
+
import { TestController } from './test.controller'
|
|
33
|
+
const data = await Factory([TestController])
|
|
34
|
+
fs.writeFileSync('meta.p.js', JSON.stringify(data.meta.map(item => item.data)))
|
|
35
|
+
const app = express()
|
|
36
|
+
app.all('*', (req, res, next) => {
|
|
37
|
+
res.header('Access-Control-Allow-Origin', '*')
|
|
38
|
+
res.header('Access-Control-Allow-Headers', 'Content-Type')
|
|
39
|
+
res.header('Access-Control-Allow-Methods', '*')
|
|
40
|
+
next()
|
|
41
|
+
})
|
|
42
|
+
app.use(express.json())
|
|
43
|
+
|
|
44
|
+
bindApp(app, data)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### client side
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
// in vite.config.ts
|
|
51
|
+
|
|
52
|
+
import { defineConfig } from 'vite'
|
|
53
|
+
import { Server } from 'phecda-server'
|
|
54
|
+
|
|
55
|
+
export default defineConfig({
|
|
56
|
+
plugins: [Server('meta.p.js')],
|
|
57
|
+
|
|
58
|
+
})
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
// in main.ts
|
|
63
|
+
|
|
64
|
+
import { $S, createBeacon, createMergeReq, createReq, isError } from 'phecda-server/client'
|
|
65
|
+
import axios from 'axios'
|
|
66
|
+
import { TestController } from './test.controller'
|
|
67
|
+
|
|
68
|
+
const instance = axios.create({
|
|
69
|
+
// ...
|
|
70
|
+
})
|
|
71
|
+
const useRequest = createReq(instance)
|
|
72
|
+
const useMergeRequest = createMergeReq(instance)
|
|
73
|
+
const { test, get } = new TestController()
|
|
74
|
+
async function request() {
|
|
75
|
+
const { data } = await useRequest(test('phecda', 'server', '1'))
|
|
76
|
+
console.log('[normal request]:')
|
|
77
|
+
|
|
78
|
+
console.log(data)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function seriesRequest() {
|
|
82
|
+
const { data: [, res2] } = await useMergeRequest([get(), test($S(0, 'data'), 'server', '1')])
|
|
83
|
+
console.log('[series request]:')
|
|
84
|
+
|
|
85
|
+
if (isError(res2))
|
|
86
|
+
console.error(res2.message)
|
|
87
|
+
else console.log(res2)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async function mergeRequest() {
|
|
91
|
+
const { data: [res1, res2] } = await useMergeRequest([test('phecda', 'server', '1'), get()])
|
|
92
|
+
console.log('[merge request]:')
|
|
93
|
+
|
|
94
|
+
if (isError(res1))
|
|
95
|
+
console.error(res1.message)
|
|
96
|
+
else console.log(res1)
|
|
97
|
+
|
|
98
|
+
if (isError(res2))
|
|
99
|
+
console.error(res2.message)
|
|
100
|
+
else console.log(res2)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
request()
|
|
104
|
+
mergeRequest()
|
|
105
|
+
seriesRequest()
|
|
106
|
+
```
|
|
@@ -96,8 +96,9 @@ declare function toReq(arg: RequestArgs): {
|
|
|
96
96
|
declare const merge: (...args: RequestArgs[]) => MergedReqArg[];
|
|
97
97
|
type RequestMethod = <F extends (...args: any[]) => any>(fn: F, args: Parameters<F>) => Promise<ReturnType<F>>;
|
|
98
98
|
declare function createReq(instance: AxiosInstance): <R>(arg: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<PRes<Awaited<R>>>>;
|
|
99
|
-
declare function
|
|
99
|
+
declare function createSeriesReq(instance: AxiosInstance, key?: string): <R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>>;
|
|
100
|
+
declare function createParallelReq(instance: AxiosInstance, key?: string): <R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>>;
|
|
100
101
|
declare function isError<T = any>(data: T | PError): data is PError;
|
|
101
102
|
declare function $S(index: number, key?: string): any;
|
|
102
103
|
|
|
103
|
-
export { $S as $, BaseError as B, Construct as C, MergeType as M, PHandler as P, RequestType as R, ServerMeta as S, Transform as T, UnWrap as U, PhecdaEmitter as a, PError as b, ResOrErr as c, PRes as d, ServerContextData as e, MqContextData as f, RequestMethod as g, createReq as h,
|
|
104
|
+
export { $S as $, BaseError as B, Construct as C, MergeType as M, PHandler as P, RequestType as R, ServerMeta as S, Transform as T, UnWrap as U, PhecdaEmitter as a, PError as b, ResOrErr as c, PRes as d, ServerContextData as e, MqContextData as f, RequestMethod as g, createReq as h, createSeriesReq as i, createParallelReq as j, isError as k, merge as m, toReq as t };
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { $ as $S, g as RequestMethod,
|
|
1
|
+
export { $ as $S, g as RequestMethod, j as createParallelReq, h as createReq, i as createSeriesReq, k as isError, m as merge, t as toReq } from '../axios-13a49ed4.js';
|
|
2
2
|
import 'axios';
|
|
3
3
|
import 'express';
|
|
4
4
|
import 'amqplib';
|
package/dist/client/index.js
CHANGED
|
@@ -23,8 +23,9 @@ var client_exports = {};
|
|
|
23
23
|
__export(client_exports, {
|
|
24
24
|
$S: () => $S,
|
|
25
25
|
createBeacon: () => createBeacon,
|
|
26
|
-
|
|
26
|
+
createParallelReq: () => createParallelReq,
|
|
27
27
|
createReq: () => createReq,
|
|
28
|
+
createSeriesReq: () => createSeriesReq,
|
|
28
29
|
isError: () => isError,
|
|
29
30
|
merge: () => merge,
|
|
30
31
|
toReq: () => toReq
|
|
@@ -34,7 +35,7 @@ module.exports = __toCommonJS(client_exports);
|
|
|
34
35
|
// src/common.ts
|
|
35
36
|
var SERIES_SYMBOL = "__symbol_series__";
|
|
36
37
|
|
|
37
|
-
// src/client/
|
|
38
|
+
// src/client/axios.ts
|
|
38
39
|
function toReq(arg) {
|
|
39
40
|
const { body, query, realParam, method, url } = arg;
|
|
40
41
|
return {
|
|
@@ -75,12 +76,24 @@ function createReq(instance) {
|
|
|
75
76
|
};
|
|
76
77
|
}
|
|
77
78
|
__name(createReq, "createReq");
|
|
78
|
-
function
|
|
79
|
+
function createSeriesReq(instance, key = "/__PHECDA_SERVER__") {
|
|
79
80
|
return (args, config) => {
|
|
80
|
-
return instance.post(key,
|
|
81
|
+
return instance.post(key, {
|
|
82
|
+
category: "series",
|
|
83
|
+
data: merge(...args)
|
|
84
|
+
}, config);
|
|
81
85
|
};
|
|
82
86
|
}
|
|
83
|
-
__name(
|
|
87
|
+
__name(createSeriesReq, "createSeriesReq");
|
|
88
|
+
function createParallelReq(instance, key = "/__PHECDA_SERVER__") {
|
|
89
|
+
return (args, config) => {
|
|
90
|
+
return instance.post(key, {
|
|
91
|
+
category: "parallel",
|
|
92
|
+
data: merge(...args)
|
|
93
|
+
}, config);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
__name(createParallelReq, "createParallelReq");
|
|
84
97
|
function isError(data) {
|
|
85
98
|
return typeof data === "object" && data.error;
|
|
86
99
|
}
|
|
@@ -102,8 +115,9 @@ __name(createBeacon, "createBeacon");
|
|
|
102
115
|
0 && (module.exports = {
|
|
103
116
|
$S,
|
|
104
117
|
createBeacon,
|
|
105
|
-
|
|
118
|
+
createParallelReq,
|
|
106
119
|
createReq,
|
|
120
|
+
createSeriesReq,
|
|
107
121
|
isError,
|
|
108
122
|
merge,
|
|
109
123
|
toReq
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/index.ts","../../src/common.ts","../../src/client/
|
|
1
|
+
{"version":3,"sources":["../../src/client/index.ts","../../src/common.ts","../../src/client/axios.ts"],"sourcesContent":["import { toReq } from './axios'\nexport * from './axios'\n\nexport function createBeacon(baseUrl: string) {\n return (arg: any) => {\n const { url, params, query, body } = toReq(arg as any)\n\n navigator.sendBeacon(`${baseUrl}${url}${params}${query}`, JSON.stringify(body))\n }\n}\n","export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\n","import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'\nimport type { PError, PRes, RequestType, ResOrErr } from '../types'\nimport { SERIES_SYMBOL } from '../common'\ninterface RequestArgs {\n body: Record<string, any>\n query: Record<string, string>\n params: Record<string, string>\n realParam: string\n method: RequestType\n url: string\n tag: string\n}\ntype MergedReqArg = Pick<RequestArgs, 'body' | 'query' | 'params' | 'tag' >\nexport function toReq(arg: RequestArgs) {\n const { body, query, realParam, method, url } = arg\n return { method, url, body, query: Object.keys(query).length > 0 ? `?${Object.entries(query).map(([k, v]) => `${k}=${v}`).join('&')}` : '', params: realParam }\n}\n\nexport const merge = (...args: RequestArgs[]) => {\n const ret = [] as MergedReqArg[]\n for (const i of args) {\n const { body, query, params, tag } = i\n ret.push({ tag, body, query, params })\n }\n\n return ret\n}\n\nexport type RequestMethod = <F extends (...args: any[]) => any >(fn: F, args: Parameters<F>) => Promise<ReturnType<F>>\n\nexport function createReq(instance: AxiosInstance): <R>(arg: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<PRes<Awaited<R>>> > {\n // @ts-expect-error methods without route decorator won't send request\n return (arg: any, config?: AxiosRequestConfig) => {\n const { url, params, query, body, method } = toReq(arg as RequestArgs)\n if (!method) {\n console.warn('methods without route decorator won\\'t send request')\n return\n }\n\n const ret = [`${url}${params}${query}`] as any[]\n body && ret.push(body)\n config && ret.push(config)\n // @ts-expect-error misdirction\n return instance[method](...ret)\n }\n}\n\nexport function createSeriesReq(instance: AxiosInstance, key = '/__PHECDA_SERVER__'): < R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>> {\n // @ts-expect-error misdirction\n return (args: RequestArgs[], config?: AxiosRequestConfig) => {\n return instance.post(key, {\n category: 'series',\n data: merge(...args),\n }, config)\n }\n}\n\nexport function createParallelReq(instance: AxiosInstance, key = '/__PHECDA_SERVER__'): < R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>> {\n // @ts-expect-error misdirction\n return (args: RequestArgs[], config?: AxiosRequestConfig) => {\n return instance.post(key, {\n category: 'parallel',\n data: merge(...args),\n }, config)\n }\n}\n\nexport function isError<T = any>(data: T | PError): data is PError {\n return typeof data === 'object' && (data as any).error\n}\n\nexport function $S(index: number, key = ''): any {\n return `${SERIES_SYMBOL}@${index}@${key}`\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;ACAO,IAAMA,gBAAgB;;;ACatB,SAASC,MAAMC,KAAkB;AACtC,QAAM,EAAEC,MAAMC,OAAOC,WAAWC,QAAQC,IAAG,IAAKL;AAChD,SAAO;IAAEI;IAAQC;IAAKJ;IAAMC,OAAOI,OAAOC,KAAKL,KAAAA,EAAOM,SAAS,IAAI,IAAIF,OAAOG,QAAQP,KAAAA,EAAOQ,IAAI,CAAC,CAACC,GAAGC,CAAAA,MAAO,GAAGD,KAAKC,GAAG,EAAEC,KAAK,GAAA,MAAS;IAAIC,QAAQX;EAAU;AAChK;AAHgBJ;AAKT,IAAMgB,QAAQ,2BAAIC,SAAwB;AAC/C,QAAMC,MAAM,CAAA;AACZ,aAAWC,KAAKF,MAAM;AACpB,UAAM,EAAEf,MAAMC,OAAOY,QAAQK,IAAG,IAAKD;AACrCD,QAAIG,KAAK;MAAED;MAAKlB;MAAMC;MAAOY;IAAO,CAAA;EACtC;AAEA,SAAOG;AACT,GARqB;AAYd,SAASI,UAAUC,UAAgH;AAExI,SAAO,CAACtB,KAAUuB,WAAgC;AAChD,UAAM,EAAElB,KAAKS,QAAQZ,OAAOD,MAAMG,OAAM,IAAKL,MAAMC,GAAAA;AACnD,QAAI,CAACI,QAAQ;AACXoB,cAAQC,KAAK,oDAAA;AACb;IACF;AAEA,UAAMR,MAAM;MAAC,GAAGZ,MAAMS,SAASZ;;AAC/BD,YAAQgB,IAAIG,KAAKnB,IAAAA;AACjBsB,cAAUN,IAAIG,KAAKG,MAAAA;AAEnB,WAAOD,SAASlB,QAAO,GAAIa,GAAAA;EAC7B;AACF;AAfgBI;AAiBT,SAASK,gBAAgBJ,UAAyBK,MAAM,sBAAiI;AAE9L,SAAO,CAACX,MAAqBO,WAAgC;AAC3D,WAAOD,SAASM,KAAKD,KAAK;MACxBE,UAAU;MACVC,MAAMf,MAAAA,GAASC,IAAAA;IACjB,GAAGO,MAAAA;EACL;AACF;AARgBG;AAUT,SAASK,kBAAkBT,UAAyBK,MAAM,sBAAiI;AAEhM,SAAO,CAACX,MAAqBO,WAAgC;AAC3D,WAAOD,SAASM,KAAKD,KAAK;MACxBE,UAAU;MACVC,MAAMf,MAAAA,GAASC,IAAAA;IACjB,GAAGO,MAAAA;EACL;AACF;AARgBQ;AAUT,SAASC,QAAiBF,MAAkC;AACjE,SAAO,OAAOA,SAAS,YAAaA,KAAaG;AACnD;AAFgBD;AAIT,SAASE,GAAGC,OAAeR,MAAM,IAAS;AAC/C,SAAO,GAAGS,iBAAiBD,SAASR;AACtC;AAFgBO;;;AFpET,SAASG,aAAaC,SAAiB;AAC5C,SAAO,CAACC,QAAa;AACnB,UAAM,EAAEC,KAAKC,QAAQC,OAAOC,KAAI,IAAKC,MAAML,GAAAA;AAE3CM,cAAUC,WAAW,GAAGR,UAAUE,MAAMC,SAASC,SAASK,KAAKC,UAAUL,IAAAA,CAAAA;EAC3E;AACF;AANgBN;","names":["SERIES_SYMBOL","toReq","arg","body","query","realParam","method","url","Object","keys","length","entries","map","k","v","join","params","merge","args","ret","i","tag","push","createReq","instance","config","console","warn","createSeriesReq","key","post","category","data","createParallelReq","isError","error","$S","index","SERIES_SYMBOL","createBeacon","baseUrl","arg","url","params","query","body","toReq","navigator","sendBeacon","JSON","stringify"]}
|
package/dist/client/index.mjs
CHANGED
|
@@ -4,7 +4,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
4
4
|
// src/common.ts
|
|
5
5
|
var SERIES_SYMBOL = "__symbol_series__";
|
|
6
6
|
|
|
7
|
-
// src/client/
|
|
7
|
+
// src/client/axios.ts
|
|
8
8
|
function toReq(arg) {
|
|
9
9
|
const { body, query, realParam, method, url } = arg;
|
|
10
10
|
return {
|
|
@@ -45,12 +45,24 @@ function createReq(instance) {
|
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
47
|
__name(createReq, "createReq");
|
|
48
|
-
function
|
|
48
|
+
function createSeriesReq(instance, key = "/__PHECDA_SERVER__") {
|
|
49
49
|
return (args, config) => {
|
|
50
|
-
return instance.post(key,
|
|
50
|
+
return instance.post(key, {
|
|
51
|
+
category: "series",
|
|
52
|
+
data: merge(...args)
|
|
53
|
+
}, config);
|
|
51
54
|
};
|
|
52
55
|
}
|
|
53
|
-
__name(
|
|
56
|
+
__name(createSeriesReq, "createSeriesReq");
|
|
57
|
+
function createParallelReq(instance, key = "/__PHECDA_SERVER__") {
|
|
58
|
+
return (args, config) => {
|
|
59
|
+
return instance.post(key, {
|
|
60
|
+
category: "parallel",
|
|
61
|
+
data: merge(...args)
|
|
62
|
+
}, config);
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
__name(createParallelReq, "createParallelReq");
|
|
54
66
|
function isError(data) {
|
|
55
67
|
return typeof data === "object" && data.error;
|
|
56
68
|
}
|
|
@@ -71,8 +83,9 @@ __name(createBeacon, "createBeacon");
|
|
|
71
83
|
export {
|
|
72
84
|
$S,
|
|
73
85
|
createBeacon,
|
|
74
|
-
|
|
86
|
+
createParallelReq,
|
|
75
87
|
createReq,
|
|
88
|
+
createSeriesReq,
|
|
76
89
|
isError,
|
|
77
90
|
merge,
|
|
78
91
|
toReq
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common.ts","../../src/client/
|
|
1
|
+
{"version":3,"sources":["../../src/common.ts","../../src/client/axios.ts","../../src/client/index.ts"],"sourcesContent":["export const SERIES_SYMBOL = '__symbol_series__'\nexport const REQ_SYMBOL = '__symbol_req__'\n","import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'\nimport type { PError, PRes, RequestType, ResOrErr } from '../types'\nimport { SERIES_SYMBOL } from '../common'\ninterface RequestArgs {\n body: Record<string, any>\n query: Record<string, string>\n params: Record<string, string>\n realParam: string\n method: RequestType\n url: string\n tag: string\n}\ntype MergedReqArg = Pick<RequestArgs, 'body' | 'query' | 'params' | 'tag' >\nexport function toReq(arg: RequestArgs) {\n const { body, query, realParam, method, url } = arg\n return { method, url, body, query: Object.keys(query).length > 0 ? `?${Object.entries(query).map(([k, v]) => `${k}=${v}`).join('&')}` : '', params: realParam }\n}\n\nexport const merge = (...args: RequestArgs[]) => {\n const ret = [] as MergedReqArg[]\n for (const i of args) {\n const { body, query, params, tag } = i\n ret.push({ tag, body, query, params })\n }\n\n return ret\n}\n\nexport type RequestMethod = <F extends (...args: any[]) => any >(fn: F, args: Parameters<F>) => Promise<ReturnType<F>>\n\nexport function createReq(instance: AxiosInstance): <R>(arg: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<PRes<Awaited<R>>> > {\n // @ts-expect-error methods without route decorator won't send request\n return (arg: any, config?: AxiosRequestConfig) => {\n const { url, params, query, body, method } = toReq(arg as RequestArgs)\n if (!method) {\n console.warn('methods without route decorator won\\'t send request')\n return\n }\n\n const ret = [`${url}${params}${query}`] as any[]\n body && ret.push(body)\n config && ret.push(config)\n // @ts-expect-error misdirction\n return instance[method](...ret)\n }\n}\n\nexport function createSeriesReq(instance: AxiosInstance, key = '/__PHECDA_SERVER__'): < R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>> {\n // @ts-expect-error misdirction\n return (args: RequestArgs[], config?: AxiosRequestConfig) => {\n return instance.post(key, {\n category: 'series',\n data: merge(...args),\n }, config)\n }\n}\n\nexport function createParallelReq(instance: AxiosInstance, key = '/__PHECDA_SERVER__'): < R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>> {\n // @ts-expect-error misdirction\n return (args: RequestArgs[], config?: AxiosRequestConfig) => {\n return instance.post(key, {\n category: 'parallel',\n data: merge(...args),\n }, config)\n }\n}\n\nexport function isError<T = any>(data: T | PError): data is PError {\n return typeof data === 'object' && (data as any).error\n}\n\nexport function $S(index: number, key = ''): any {\n return `${SERIES_SYMBOL}@${index}@${key}`\n}\n","import { toReq } from './axios'\nexport * from './axios'\n\nexport function createBeacon(baseUrl: string) {\n return (arg: any) => {\n const { url, params, query, body } = toReq(arg as any)\n\n navigator.sendBeacon(`${baseUrl}${url}${params}${query}`, JSON.stringify(body))\n }\n}\n"],"mappings":";;;;AAAO,IAAMA,gBAAgB;;;ACatB,SAASC,MAAMC,KAAkB;AACtC,QAAM,EAAEC,MAAMC,OAAOC,WAAWC,QAAQC,IAAG,IAAKL;AAChD,SAAO;IAAEI;IAAQC;IAAKJ;IAAMC,OAAOI,OAAOC,KAAKL,KAAAA,EAAOM,SAAS,IAAI,IAAIF,OAAOG,QAAQP,KAAAA,EAAOQ,IAAI,CAAC,CAACC,GAAGC,CAAAA,MAAO,GAAGD,KAAKC,GAAG,EAAEC,KAAK,GAAA,MAAS;IAAIC,QAAQX;EAAU;AAChK;AAHgBJ;AAKT,IAAMgB,QAAQ,2BAAIC,SAAwB;AAC/C,QAAMC,MAAM,CAAA;AACZ,aAAWC,KAAKF,MAAM;AACpB,UAAM,EAAEf,MAAMC,OAAOY,QAAQK,IAAG,IAAKD;AACrCD,QAAIG,KAAK;MAAED;MAAKlB;MAAMC;MAAOY;IAAO,CAAA;EACtC;AAEA,SAAOG;AACT,GARqB;AAYd,SAASI,UAAUC,UAAgH;AAExI,SAAO,CAACtB,KAAUuB,WAAgC;AAChD,UAAM,EAAElB,KAAKS,QAAQZ,OAAOD,MAAMG,OAAM,IAAKL,MAAMC,GAAAA;AACnD,QAAI,CAACI,QAAQ;AACXoB,cAAQC,KAAK,oDAAA;AACb;IACF;AAEA,UAAMR,MAAM;MAAC,GAAGZ,MAAMS,SAASZ;;AAC/BD,YAAQgB,IAAIG,KAAKnB,IAAAA;AACjBsB,cAAUN,IAAIG,KAAKG,MAAAA;AAEnB,WAAOD,SAASlB,QAAO,GAAIa,GAAAA;EAC7B;AACF;AAfgBI;AAiBT,SAASK,gBAAgBJ,UAAyBK,MAAM,sBAAiI;AAE9L,SAAO,CAACX,MAAqBO,WAAgC;AAC3D,WAAOD,SAASM,KAAKD,KAAK;MACxBE,UAAU;MACVC,MAAMf,MAAAA,GAASC,IAAAA;IACjB,GAAGO,MAAAA;EACL;AACF;AARgBG;AAUT,SAASK,kBAAkBT,UAAyBK,MAAM,sBAAiI;AAEhM,SAAO,CAACX,MAAqBO,WAAgC;AAC3D,WAAOD,SAASM,KAAKD,KAAK;MACxBE,UAAU;MACVC,MAAMf,MAAAA,GAASC,IAAAA;IACjB,GAAGO,MAAAA;EACL;AACF;AARgBQ;AAUT,SAASC,QAAiBF,MAAkC;AACjE,SAAO,OAAOA,SAAS,YAAaA,KAAaG;AACnD;AAFgBD;AAIT,SAASE,GAAGC,OAAeR,MAAM,IAAS;AAC/C,SAAO,GAAGS,iBAAiBD,SAASR;AACtC;AAFgBO;;;ACpET,SAASG,aAAaC,SAAiB;AAC5C,SAAO,CAACC,QAAa;AACnB,UAAM,EAAEC,KAAKC,QAAQC,OAAOC,KAAI,IAAKC,MAAML,GAAAA;AAE3CM,cAAUC,WAAW,GAAGR,UAAUE,MAAMC,SAASC,SAASK,KAAKC,UAAUL,IAAAA,CAAAA;EAC3E;AACF;AANgBN;","names":["SERIES_SYMBOL","toReq","arg","body","query","realParam","method","url","Object","keys","length","entries","map","k","v","join","params","merge","args","ret","i","tag","push","createReq","instance","config","console","warn","createSeriesReq","key","post","category","data","createParallelReq","isError","error","$S","index","SERIES_SYMBOL","createBeacon","baseUrl","arg","url","params","query","body","toReq","navigator","sendBeacon","JSON","stringify"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as ServerMeta, P as PHandler, R as RequestType, a as PhecdaEmitter, C as Construct } from './
|
|
2
|
-
export { $ as $S, B as BaseError, M as MergeType, f as MqContextData, b as PError, d as PRes, g as RequestMethod, c as ResOrErr, e as ServerContextData, T as Transform, U as UnWrap,
|
|
1
|
+
import { S as ServerMeta, P as PHandler, R as RequestType, a as PhecdaEmitter, C as Construct } from './axios-13a49ed4.js';
|
|
2
|
+
export { $ as $S, B as BaseError, M as MergeType, f as MqContextData, b as PError, d as PRes, g as RequestMethod, c as ResOrErr, e as ServerContextData, T as Transform, U as UnWrap, j as createParallelReq, h as createReq, i as createSeriesReq, k as isError, m as merge, t as toReq } from './axios-13a49ed4.js';
|
|
3
3
|
import { Express } from 'express';
|
|
4
4
|
import { PluginOption } from 'vite';
|
|
5
5
|
export * from 'phecda-core';
|
|
@@ -178,4 +178,6 @@ declare function bindMQ(ch: amqplib.Channel, { meta, moduleMap }: Awaited<Return
|
|
|
178
178
|
type MqMethod<T> = (arg: T) => void;
|
|
179
179
|
declare function createPub<T extends (...args: any[]) => any>(ch: amqplib.Channel, method: T, type?: string): Promise<MqMethod<Parameters<T>>>;
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
declare function createMqReq(channel: amqplib.Channel): <R>(arg: R) => Promise<void>;
|
|
182
|
+
|
|
183
|
+
export { BadRequestException, BaseParam, Body, Construct, Controller, Delete, Factory, ForbiddenException, Get, Guard, Header, HttpException, Inject, Interceptor, MQ, Options, PHandler, Param, Pcompiler, Pcontext, PhecdaEmitter, Pmeta, Post, Put, Query, RabbitMqContext, RequestType, Route, Server, ServerContext, ServerMeta, UndefinedException, ValidateException, ValidatePipe, addGuard, addInterceptor, bindApp, bindMQ, createMqReq, createPub, defaultPipe, emitter, getInstance, parseMeta, useMqFilter, useMqPipe, useServerFilter, useServerPipe };
|
package/dist/index.js
CHANGED
|
@@ -65,9 +65,11 @@ __export(src_exports, {
|
|
|
65
65
|
addInterceptor: () => addInterceptor,
|
|
66
66
|
bindApp: () => bindApp,
|
|
67
67
|
bindMQ: () => bindMQ,
|
|
68
|
-
|
|
68
|
+
createMqReq: () => createMqReq,
|
|
69
|
+
createParallelReq: () => createParallelReq,
|
|
69
70
|
createPub: () => createPub,
|
|
70
71
|
createReq: () => createReq,
|
|
72
|
+
createSeriesReq: () => createSeriesReq,
|
|
71
73
|
defaultPipe: () => defaultPipe,
|
|
72
74
|
emitter: () => emitter,
|
|
73
75
|
getInstance: () => getInstance,
|
|
@@ -488,40 +490,74 @@ function bindApp(app, { meta, moduleMap }, options = {}) {
|
|
|
488
490
|
};
|
|
489
491
|
const context = new ServerContext(route, contextData);
|
|
490
492
|
const ret = [];
|
|
491
|
-
const { body } = req;
|
|
492
|
-
|
|
493
|
-
const
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
const
|
|
504
|
-
|
|
505
|
-
|
|
493
|
+
const { body: { category, data } } = req;
|
|
494
|
+
if (category === "series") {
|
|
495
|
+
for (const item of data) {
|
|
496
|
+
const { tag } = item;
|
|
497
|
+
const [name] = tag.split("-");
|
|
498
|
+
const { guards, reflect, interceptors, params } = Pcontext.metaDataRecord[tag];
|
|
499
|
+
const instance = moduleMap.get(name);
|
|
500
|
+
try {
|
|
501
|
+
if (!params)
|
|
502
|
+
throw new NotFoundException(`"${tag}" doesn't exist`);
|
|
503
|
+
await context.useGuard(guards, true);
|
|
504
|
+
await context.useInterceptor(interceptors, true);
|
|
505
|
+
const args = await context.usePipe(params.map(({ type, key, validate }) => {
|
|
506
|
+
const arg = resolveDep(item[type], key);
|
|
507
|
+
if (typeof arg === "string" && arg.startsWith(SERIES_SYMBOL)) {
|
|
508
|
+
const [, index, argKey] = arg.split("@");
|
|
509
|
+
return {
|
|
510
|
+
arg: resolveDep(ret[Number(index)], argKey || key),
|
|
511
|
+
validate
|
|
512
|
+
};
|
|
513
|
+
}
|
|
506
514
|
return {
|
|
507
|
-
arg
|
|
515
|
+
arg,
|
|
508
516
|
validate
|
|
509
517
|
};
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
} catch (e) {
|
|
519
|
-
const m = Pcontext.metaRecord[tag];
|
|
520
|
-
m.handlers.forEach((handler) => handler.error?.(e));
|
|
521
|
-
ret.push(await context.useFilter(e));
|
|
518
|
+
}), reflect);
|
|
519
|
+
instance.meta = contextData;
|
|
520
|
+
ret.push(await context.usePost(await methodMap[tag](...args)));
|
|
521
|
+
} catch (e) {
|
|
522
|
+
const m = Pcontext.metaRecord[tag];
|
|
523
|
+
m.handlers.forEach((handler) => handler.error?.(e));
|
|
524
|
+
ret.push(await context.useFilter(e));
|
|
525
|
+
}
|
|
522
526
|
}
|
|
527
|
+
return res.json(ret);
|
|
523
528
|
}
|
|
524
|
-
|
|
529
|
+
if (category === "parallel") {
|
|
530
|
+
return Promise.all(data.map((item) => {
|
|
531
|
+
return new Promise(async (resolve2) => {
|
|
532
|
+
const { tag } = item;
|
|
533
|
+
const [name] = tag.split("-");
|
|
534
|
+
const { guards, reflect, interceptors, params } = Pcontext.metaDataRecord[tag];
|
|
535
|
+
const instance = moduleMap.get(name);
|
|
536
|
+
try {
|
|
537
|
+
if (!params)
|
|
538
|
+
throw new NotFoundException(`"${tag}" doesn't exist`);
|
|
539
|
+
await context.useGuard(guards, true);
|
|
540
|
+
await context.useInterceptor(interceptors, true);
|
|
541
|
+
const args = await context.usePipe(params.map(({ type, key, validate }) => {
|
|
542
|
+
const arg = resolveDep(item[type], key);
|
|
543
|
+
return {
|
|
544
|
+
arg,
|
|
545
|
+
validate
|
|
546
|
+
};
|
|
547
|
+
}), reflect);
|
|
548
|
+
instance.meta = contextData;
|
|
549
|
+
resolve2(await context.usePost(await methodMap[tag](...args)));
|
|
550
|
+
} catch (e) {
|
|
551
|
+
const m = Pcontext.metaRecord[tag];
|
|
552
|
+
m.handlers.forEach((handler) => handler.error?.(e));
|
|
553
|
+
resolve2(await context.useFilter(e));
|
|
554
|
+
}
|
|
555
|
+
});
|
|
556
|
+
})).then((ret2) => {
|
|
557
|
+
res.json(ret2);
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
res.json(await context.useFilter(new NotFoundException("category should be 'parallel' or 'series'")));
|
|
525
561
|
});
|
|
526
562
|
}
|
|
527
563
|
__name(bindApp, "bindApp");
|
|
@@ -906,7 +942,7 @@ async function createPub(ch, method, type) {
|
|
|
906
942
|
}
|
|
907
943
|
__name(createPub, "createPub");
|
|
908
944
|
|
|
909
|
-
// src/client/
|
|
945
|
+
// src/client/axios.ts
|
|
910
946
|
function toReq(arg) {
|
|
911
947
|
const { body, query, realParam, method, url } = arg;
|
|
912
948
|
return {
|
|
@@ -947,12 +983,24 @@ function createReq(instance) {
|
|
|
947
983
|
};
|
|
948
984
|
}
|
|
949
985
|
__name(createReq, "createReq");
|
|
950
|
-
function
|
|
986
|
+
function createSeriesReq(instance, key = "/__PHECDA_SERVER__") {
|
|
987
|
+
return (args, config) => {
|
|
988
|
+
return instance.post(key, {
|
|
989
|
+
category: "series",
|
|
990
|
+
data: merge(...args)
|
|
991
|
+
}, config);
|
|
992
|
+
};
|
|
993
|
+
}
|
|
994
|
+
__name(createSeriesReq, "createSeriesReq");
|
|
995
|
+
function createParallelReq(instance, key = "/__PHECDA_SERVER__") {
|
|
951
996
|
return (args, config) => {
|
|
952
|
-
return instance.post(key,
|
|
997
|
+
return instance.post(key, {
|
|
998
|
+
category: "parallel",
|
|
999
|
+
data: merge(...args)
|
|
1000
|
+
}, config);
|
|
953
1001
|
};
|
|
954
1002
|
}
|
|
955
|
-
__name(
|
|
1003
|
+
__name(createParallelReq, "createParallelReq");
|
|
956
1004
|
function isError(data) {
|
|
957
1005
|
return typeof data === "object" && data.error;
|
|
958
1006
|
}
|
|
@@ -961,6 +1009,16 @@ function $S(index, key = "") {
|
|
|
961
1009
|
return `${SERIES_SYMBOL}@${index}@${key}`;
|
|
962
1010
|
}
|
|
963
1011
|
__name($S, "$S");
|
|
1012
|
+
|
|
1013
|
+
// src/client/server.ts
|
|
1014
|
+
function createMqReq(channel) {
|
|
1015
|
+
return async (arg) => {
|
|
1016
|
+
const { url, body } = arg;
|
|
1017
|
+
await channel.assertQueue(url);
|
|
1018
|
+
await channel.sendToQueue(url, Buffer.from(JSON.stringify(body)));
|
|
1019
|
+
};
|
|
1020
|
+
}
|
|
1021
|
+
__name(createMqReq, "createMqReq");
|
|
964
1022
|
// Annotate the CommonJS export names for ESM import in node:
|
|
965
1023
|
0 && (module.exports = {
|
|
966
1024
|
$S,
|
|
@@ -995,9 +1053,11 @@ __name($S, "$S");
|
|
|
995
1053
|
addInterceptor,
|
|
996
1054
|
bindApp,
|
|
997
1055
|
bindMQ,
|
|
998
|
-
|
|
1056
|
+
createMqReq,
|
|
1057
|
+
createParallelReq,
|
|
999
1058
|
createPub,
|
|
1000
1059
|
createReq,
|
|
1060
|
+
createSeriesReq,
|
|
1001
1061
|
defaultPipe,
|
|
1002
1062
|
emitter,
|
|
1003
1063
|
getInstance,
|