phecda-server 1.1.0 → 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/axios-13a49ed4.d.ts +104 -0
- package/dist/client/index.d.ts +5 -26
- package/dist/client/index.js +31 -6
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +28 -5
- package/dist/client/index.mjs.map +1 -1
- package/dist/index.d.ts +14 -16
- package/dist/index.js +178 -33
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +164 -34
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
- package/dist/types-acc60391.d.ts +0 -70
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
|
+
```
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
2
|
+
import { Request, Response } from 'express';
|
|
3
|
+
import amqplib from 'amqplib';
|
|
4
|
+
import { PhecdaEvents } from 'phecda-core';
|
|
5
|
+
|
|
6
|
+
declare class Wrap<F, T> {
|
|
7
|
+
v1: F;
|
|
8
|
+
V2: T;
|
|
9
|
+
constructor(v1: F, V2: T);
|
|
10
|
+
get value(): T;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
type Construct<T = any> = new (...args: any[]) => T;
|
|
14
|
+
interface PhecdaEmitter {
|
|
15
|
+
on<N extends keyof PhecdaEvents>(eventName: N, cb: (args: PhecdaEvents[N]) => void): void;
|
|
16
|
+
once<N extends keyof PhecdaEvents>(eventName: N, cb: (args: PhecdaEvents[N]) => void): void;
|
|
17
|
+
off<N extends keyof PhecdaEvents>(eventName: N, cb: (args: PhecdaEvents[N]) => void): void;
|
|
18
|
+
removeAllListeners<N extends keyof PhecdaEvents>(eventName: N): void;
|
|
19
|
+
emit<N extends keyof PhecdaEvents>(eventName: N, param: PhecdaEvents[N]): void;
|
|
20
|
+
}
|
|
21
|
+
interface PHandler {
|
|
22
|
+
error?: (arg: any) => void;
|
|
23
|
+
}
|
|
24
|
+
interface ServerMeta {
|
|
25
|
+
route?: {
|
|
26
|
+
type: RequestType;
|
|
27
|
+
route: string;
|
|
28
|
+
};
|
|
29
|
+
mq?: {
|
|
30
|
+
queue: string;
|
|
31
|
+
routeKey: string;
|
|
32
|
+
options: amqplib.Options.Consume;
|
|
33
|
+
};
|
|
34
|
+
header: Record<string, string>;
|
|
35
|
+
params: {
|
|
36
|
+
type: string;
|
|
37
|
+
index: number;
|
|
38
|
+
key: string;
|
|
39
|
+
validate?: boolean;
|
|
40
|
+
}[];
|
|
41
|
+
guards: string[];
|
|
42
|
+
interceptors: string[];
|
|
43
|
+
middlewares: string[];
|
|
44
|
+
method: string;
|
|
45
|
+
name: string;
|
|
46
|
+
}
|
|
47
|
+
type RequestType = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head';
|
|
48
|
+
type MergeType = <R extends Promise<any>[]>(...args: R) => {
|
|
49
|
+
[K in keyof R]: Awaited<R[K]>;
|
|
50
|
+
};
|
|
51
|
+
interface BaseError {
|
|
52
|
+
error: true;
|
|
53
|
+
status: number;
|
|
54
|
+
}
|
|
55
|
+
interface PError extends BaseError {
|
|
56
|
+
message: string;
|
|
57
|
+
description: string;
|
|
58
|
+
}
|
|
59
|
+
type ResOrErr<R> = {
|
|
60
|
+
[K in keyof R]: Awaited<R[K]> | PError;
|
|
61
|
+
};
|
|
62
|
+
type PRes<T> = T;
|
|
63
|
+
type UnWrap<T extends any[]> = {
|
|
64
|
+
[K in keyof T]: T[K] extends Wrap<infer F, infer _> ? F : T[K];
|
|
65
|
+
};
|
|
66
|
+
type Transform<A> = {
|
|
67
|
+
[K in keyof A]: A[K] extends (...args: infer P) => infer R ? (...args: UnWrap<P> extends unknown[] ? UnWrap<P> : unknown[]) => R : never;
|
|
68
|
+
};
|
|
69
|
+
interface ServerContextData {
|
|
70
|
+
request?: Request<any, any, any, any, Record<string, any>>;
|
|
71
|
+
response?: Response<any, Record<string, any>>;
|
|
72
|
+
}
|
|
73
|
+
interface MqContextData {
|
|
74
|
+
content?: string;
|
|
75
|
+
message?: any;
|
|
76
|
+
channel?: amqplib.Channel;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
interface RequestArgs {
|
|
80
|
+
body: Record<string, any>;
|
|
81
|
+
query: Record<string, string>;
|
|
82
|
+
params: Record<string, string>;
|
|
83
|
+
realParam: string;
|
|
84
|
+
method: RequestType;
|
|
85
|
+
url: string;
|
|
86
|
+
tag: string;
|
|
87
|
+
}
|
|
88
|
+
type MergedReqArg = Pick<RequestArgs, 'body' | 'query' | 'params' | 'tag'>;
|
|
89
|
+
declare function toReq(arg: RequestArgs): {
|
|
90
|
+
method: RequestType;
|
|
91
|
+
url: string;
|
|
92
|
+
body: Record<string, any>;
|
|
93
|
+
query: string;
|
|
94
|
+
params: string;
|
|
95
|
+
};
|
|
96
|
+
declare const merge: (...args: RequestArgs[]) => MergedReqArg[];
|
|
97
|
+
type RequestMethod = <F extends (...args: any[]) => any>(fn: F, args: Parameters<F>) => Promise<ReturnType<F>>;
|
|
98
|
+
declare function createReq(instance: AxiosInstance): <R>(arg: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<PRes<Awaited<R>>>>;
|
|
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>>>>;
|
|
101
|
+
declare function isError<T = any>(data: T | PError): data is PError;
|
|
102
|
+
declare function $S(index: number, key?: string): any;
|
|
103
|
+
|
|
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,30 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
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
|
+
import 'axios';
|
|
3
3
|
import 'express';
|
|
4
4
|
import 'amqplib';
|
|
5
|
+
import 'phecda-core';
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
body: Record<string, any>;
|
|
8
|
-
query: Record<string, string>;
|
|
9
|
-
params: Record<string, string>;
|
|
10
|
-
realParam: string;
|
|
11
|
-
method: RequestType;
|
|
12
|
-
url: string;
|
|
13
|
-
tag: string;
|
|
14
|
-
}
|
|
15
|
-
type MergedReqArg = Pick<RequestArgs, 'body' | 'query' | 'params' | 'tag'>;
|
|
16
|
-
declare function toReq(arg: RequestArgs): {
|
|
17
|
-
method: RequestType;
|
|
18
|
-
url: string;
|
|
19
|
-
body: Record<string, any>;
|
|
20
|
-
query: string;
|
|
21
|
-
params: string;
|
|
22
|
-
};
|
|
23
|
-
declare const merge: (...args: RequestArgs[]) => MergedReqArg[];
|
|
24
|
-
type RequestMethod = <F extends (...args: any[]) => any>(fn: F, args: Parameters<F>) => Promise<ReturnType<F>>;
|
|
25
|
-
declare function createReq(instance: AxiosInstance): <R>(arg: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<PRes<Awaited<R>>>>;
|
|
26
|
-
declare function createMergeReq(instance: AxiosInstance, key?: string): <R extends unknown[]>(args: R, config?: AxiosRequestConfig) => Promise<AxiosResponse<ResOrErr<PRes<R>>>>;
|
|
27
|
-
declare function isError<T = any>(data: T | PError): data is PError;
|
|
28
|
-
declare function $S(index: number, key?: string): any;
|
|
7
|
+
declare function createBeacon(baseUrl: string): (arg: any) => void;
|
|
29
8
|
|
|
30
|
-
export {
|
|
9
|
+
export { createBeacon };
|
package/dist/client/index.js
CHANGED
|
@@ -22,8 +22,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
22
22
|
var client_exports = {};
|
|
23
23
|
__export(client_exports, {
|
|
24
24
|
$S: () => $S,
|
|
25
|
-
|
|
25
|
+
createBeacon: () => createBeacon,
|
|
26
|
+
createParallelReq: () => createParallelReq,
|
|
26
27
|
createReq: () => createReq,
|
|
28
|
+
createSeriesReq: () => createSeriesReq,
|
|
27
29
|
isError: () => isError,
|
|
28
30
|
merge: () => merge,
|
|
29
31
|
toReq: () => toReq
|
|
@@ -33,7 +35,7 @@ module.exports = __toCommonJS(client_exports);
|
|
|
33
35
|
// src/common.ts
|
|
34
36
|
var SERIES_SYMBOL = "__symbol_series__";
|
|
35
37
|
|
|
36
|
-
// src/client/
|
|
38
|
+
// src/client/axios.ts
|
|
37
39
|
function toReq(arg) {
|
|
38
40
|
const { body, query, realParam, method, url } = arg;
|
|
39
41
|
return {
|
|
@@ -74,12 +76,24 @@ function createReq(instance) {
|
|
|
74
76
|
};
|
|
75
77
|
}
|
|
76
78
|
__name(createReq, "createReq");
|
|
77
|
-
function
|
|
79
|
+
function createSeriesReq(instance, key = "/__PHECDA_SERVER__") {
|
|
80
|
+
return (args, config) => {
|
|
81
|
+
return instance.post(key, {
|
|
82
|
+
category: "series",
|
|
83
|
+
data: merge(...args)
|
|
84
|
+
}, config);
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
__name(createSeriesReq, "createSeriesReq");
|
|
88
|
+
function createParallelReq(instance, key = "/__PHECDA_SERVER__") {
|
|
78
89
|
return (args, config) => {
|
|
79
|
-
return instance.post(key,
|
|
90
|
+
return instance.post(key, {
|
|
91
|
+
category: "parallel",
|
|
92
|
+
data: merge(...args)
|
|
93
|
+
}, config);
|
|
80
94
|
};
|
|
81
95
|
}
|
|
82
|
-
__name(
|
|
96
|
+
__name(createParallelReq, "createParallelReq");
|
|
83
97
|
function isError(data) {
|
|
84
98
|
return typeof data === "object" && data.error;
|
|
85
99
|
}
|
|
@@ -88,11 +102,22 @@ function $S(index, key = "") {
|
|
|
88
102
|
return `${SERIES_SYMBOL}@${index}@${key}`;
|
|
89
103
|
}
|
|
90
104
|
__name($S, "$S");
|
|
105
|
+
|
|
106
|
+
// src/client/index.ts
|
|
107
|
+
function createBeacon(baseUrl) {
|
|
108
|
+
return (arg) => {
|
|
109
|
+
const { url, params, query, body } = toReq(arg);
|
|
110
|
+
navigator.sendBeacon(`${baseUrl}${url}${params}${query}`, JSON.stringify(body));
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
__name(createBeacon, "createBeacon");
|
|
91
114
|
// Annotate the CommonJS export names for ESM import in node:
|
|
92
115
|
0 && (module.exports = {
|
|
93
116
|
$S,
|
|
94
|
-
|
|
117
|
+
createBeacon,
|
|
118
|
+
createParallelReq,
|
|
95
119
|
createReq,
|
|
120
|
+
createSeriesReq,
|
|
96
121
|
isError,
|
|
97
122
|
merge,
|
|
98
123
|
toReq
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/index.ts","../../src/common.ts"],"sourcesContent":["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
|
|
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
|
+
return (args, config) => {
|
|
50
|
+
return instance.post(key, {
|
|
51
|
+
category: "series",
|
|
52
|
+
data: merge(...args)
|
|
53
|
+
}, config);
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
__name(createSeriesReq, "createSeriesReq");
|
|
57
|
+
function createParallelReq(instance, key = "/__PHECDA_SERVER__") {
|
|
49
58
|
return (args, config) => {
|
|
50
|
-
return instance.post(key,
|
|
59
|
+
return instance.post(key, {
|
|
60
|
+
category: "parallel",
|
|
61
|
+
data: merge(...args)
|
|
62
|
+
}, config);
|
|
51
63
|
};
|
|
52
64
|
}
|
|
53
|
-
__name(
|
|
65
|
+
__name(createParallelReq, "createParallelReq");
|
|
54
66
|
function isError(data) {
|
|
55
67
|
return typeof data === "object" && data.error;
|
|
56
68
|
}
|
|
@@ -59,10 +71,21 @@ function $S(index, key = "") {
|
|
|
59
71
|
return `${SERIES_SYMBOL}@${index}@${key}`;
|
|
60
72
|
}
|
|
61
73
|
__name($S, "$S");
|
|
74
|
+
|
|
75
|
+
// src/client/index.ts
|
|
76
|
+
function createBeacon(baseUrl) {
|
|
77
|
+
return (arg) => {
|
|
78
|
+
const { url, params, query, body } = toReq(arg);
|
|
79
|
+
navigator.sendBeacon(`${baseUrl}${url}${params}${query}`, JSON.stringify(body));
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
__name(createBeacon, "createBeacon");
|
|
62
83
|
export {
|
|
63
84
|
$S,
|
|
64
|
-
|
|
85
|
+
createBeacon,
|
|
86
|
+
createParallelReq,
|
|
65
87
|
createReq,
|
|
88
|
+
createSeriesReq,
|
|
66
89
|
isError,
|
|
67
90
|
merge,
|
|
68
91
|
toReq
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common.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
|
|
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,9 +1,10 @@
|
|
|
1
|
-
import { S as ServerMeta, P as PHandler, R as RequestType, C as Construct } from './
|
|
2
|
-
export { B as BaseError, M as MergeType,
|
|
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';
|
|
6
6
|
import amqplib from 'amqplib';
|
|
7
|
+
import 'axios';
|
|
7
8
|
|
|
8
9
|
interface ValidatePipe {
|
|
9
10
|
transform(args: {
|
|
@@ -138,21 +139,19 @@ declare class Pcompiler {
|
|
|
138
139
|
}[]): void;
|
|
139
140
|
}
|
|
140
141
|
|
|
142
|
+
declare const emitter: PhecdaEmitter;
|
|
143
|
+
declare function Factory<T>(Modules: Construct<T>[]): Promise<{
|
|
144
|
+
moduleMap: Map<string, any>;
|
|
145
|
+
meta: Pmeta[];
|
|
146
|
+
}>;
|
|
147
|
+
|
|
141
148
|
interface Options {
|
|
142
149
|
route?: string;
|
|
143
150
|
globalGuards?: string[];
|
|
144
151
|
globalInterceptors?: string[];
|
|
145
152
|
middlewares?: string[];
|
|
146
153
|
}
|
|
147
|
-
declare function bindApp(app: Express, { meta, moduleMap }:
|
|
148
|
-
meta: Pmeta[];
|
|
149
|
-
moduleMap: any;
|
|
150
|
-
}, options?: Options): void;
|
|
151
|
-
|
|
152
|
-
declare function Factory<T>(Modules: Construct<T>[]): Promise<{
|
|
153
|
-
moduleMap: Map<string, any>;
|
|
154
|
-
meta: Pmeta[];
|
|
155
|
-
}>;
|
|
154
|
+
declare function bindApp(app: Express, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>, options?: Options): void;
|
|
156
155
|
|
|
157
156
|
declare function BaseParam(type: string, key: string, validate?: boolean): any;
|
|
158
157
|
declare function Body(key?: string, validate?: boolean): any;
|
|
@@ -175,11 +174,10 @@ declare function Header(name: string, value: string): (target: any, k: PropertyK
|
|
|
175
174
|
|
|
176
175
|
declare function Server(localPath: string): PluginOption;
|
|
177
176
|
|
|
178
|
-
declare function bindMQ(ch: amqplib.Channel, { meta, moduleMap }:
|
|
179
|
-
meta: Pmeta[];
|
|
180
|
-
moduleMap: any;
|
|
181
|
-
}): Promise<void>;
|
|
177
|
+
declare function bindMQ(ch: amqplib.Channel, { meta, moduleMap }: Awaited<ReturnType<typeof Factory>>): Promise<void>;
|
|
182
178
|
type MqMethod<T> = (arg: T) => void;
|
|
183
179
|
declare function createPub<T extends (...args: any[]) => any>(ch: amqplib.Channel, method: T, type?: string): Promise<MqMethod<Parameters<T>>>;
|
|
184
180
|
|
|
185
|
-
|
|
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 };
|