@snail-js/api 0.1.16 → 0.1.18
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/dist/core/snailApi.d.ts +1 -1
- package/dist/core/snailMethod.d.ts +11 -11
- package/dist/core/snailServer.d.ts +3 -3
- package/dist/snail-api.js +70 -67
- package/dist/snail-api.umd.cjs +70 -67
- package/dist/typings/apiProxy.d.ts +2 -2
- package/dist/typings/response.data.d.ts +1 -1
- package/package.json +2 -2
package/dist/core/snailApi.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export declare class SnailApi {
|
|
|
9
9
|
constructor(options: ApiInstanceOptions);
|
|
10
10
|
private init;
|
|
11
11
|
private initStrategy;
|
|
12
|
-
registerStrategies(...strategys: Array<new () => Strategy>)
|
|
12
|
+
registerStrategies: (...strategys: Array<new () => Strategy>) => void;
|
|
13
13
|
private initName;
|
|
14
14
|
private getApiConfig;
|
|
15
15
|
private isNoCache;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { AxiosResponse, AxiosRequestConfig } from "axios";
|
|
2
|
-
import { EventHandler, Strategy, ResponseData, SendRequest, StandardResponseData,
|
|
2
|
+
import { EventHandler, Strategy, ResponseData, SendRequest, StandardResponseData, SnailMethodEventType } from "../typings";
|
|
3
3
|
import { SnailApi } from "./snailApi";
|
|
4
4
|
/**
|
|
5
5
|
* SnailMethod
|
|
6
6
|
* 泛型参数: RT => response.data类型,默认标准json返回
|
|
7
7
|
* DK => response.data.data 类型
|
|
8
8
|
*/
|
|
9
|
-
export declare class SnailMethod<RT extends ResponseData = StandardResponseData
|
|
9
|
+
export declare class SnailMethod<RT extends ResponseData = StandardResponseData> {
|
|
10
10
|
private Name;
|
|
11
11
|
private apiInstance;
|
|
12
12
|
private target;
|
|
@@ -29,14 +29,14 @@ export declare class SnailMethod<RT extends ResponseData = StandardResponseData<
|
|
|
29
29
|
private initVersion;
|
|
30
30
|
private getExpireSources;
|
|
31
31
|
private createRequest;
|
|
32
|
-
onSuccess(handler: EventHandler<RT>)
|
|
33
|
-
onError(handler: EventHandler<RT>)
|
|
34
|
-
onHitCache(handler: EventHandler<RT>)
|
|
35
|
-
onFinish(handler: EventHandler<RT>)
|
|
36
|
-
on(eventName: SnailMethodEventType, handler: EventHandler<RT>)
|
|
37
|
-
once(eventName: SnailMethodEventType, handler: EventHandler<RT>)
|
|
38
|
-
emit(eventName: SnailMethodEventType, ...args: any)
|
|
39
|
-
off(eventName: SnailMethodEventType, handler: EventHandler<RT>)
|
|
32
|
+
onSuccess: (handler: EventHandler<RT>) => void;
|
|
33
|
+
onError: (handler: EventHandler<RT>) => void;
|
|
34
|
+
onHitCache: (handler: EventHandler<RT>) => void;
|
|
35
|
+
onFinish: (handler: EventHandler<RT>) => void;
|
|
36
|
+
on: (eventName: SnailMethodEventType, handler: EventHandler<RT>) => void;
|
|
37
|
+
once: (eventName: SnailMethodEventType, handler: EventHandler<RT>) => void;
|
|
38
|
+
emit: (eventName: SnailMethodEventType, ...args: any) => boolean;
|
|
39
|
+
off: (eventName: SnailMethodEventType, handler: EventHandler<RT>) => void;
|
|
40
40
|
private getCacheData;
|
|
41
41
|
private setCacheData;
|
|
42
42
|
get response(): AxiosResponse<RT, any>;
|
|
@@ -44,7 +44,7 @@ export declare class SnailMethod<RT extends ResponseData = StandardResponseData<
|
|
|
44
44
|
get version(): string | undefined;
|
|
45
45
|
get name(): string;
|
|
46
46
|
get error(): any;
|
|
47
|
-
registerStrategies(...strategys: Array<new () => Strategy>)
|
|
47
|
+
registerStrategies: (...strategys: Array<new () => Strategy>) => void;
|
|
48
48
|
private getStrategies;
|
|
49
49
|
private getMethodOptions;
|
|
50
50
|
private isNoCache;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
import { AxiosInstance } from "axios";
|
|
3
|
-
import { Strategy, ApiInstanceOptions, VersioningOption, CacheStorage, ApiProxy, ResponseData, StandardResponseData,
|
|
3
|
+
import { Strategy, ApiInstanceOptions, VersioningOption, CacheStorage, ApiProxy, ResponseData, StandardResponseData, CacheForType } from "../typings";
|
|
4
4
|
import { SnailApi } from "./snailApi";
|
|
5
5
|
import { SnailSse } from "./snailSse";
|
|
6
6
|
export declare const CacheStorageMap: Map<string, CacheStorage>;
|
|
@@ -10,7 +10,7 @@ export declare const ExpireSourceMap: Map<string, Set<string>>;
|
|
|
10
10
|
export declare const AxiosInstanceMap: Map<string, AxiosInstance>;
|
|
11
11
|
export declare const StrategyMap: Map<string, (new () => Strategy)[]>;
|
|
12
12
|
export declare const VersioningMap: Map<string, VersioningOption>;
|
|
13
|
-
export declare class SnailServer<RT extends ResponseData = StandardResponseData
|
|
13
|
+
export declare class SnailServer<RT extends ResponseData = StandardResponseData, DK extends string = "data"> {
|
|
14
14
|
private Name;
|
|
15
15
|
private BaseURL;
|
|
16
16
|
private Version;
|
|
@@ -20,7 +20,7 @@ export declare class SnailServer<RT extends ResponseData = StandardResponseData<
|
|
|
20
20
|
private initLog;
|
|
21
21
|
private initStrategy;
|
|
22
22
|
private initVersioning;
|
|
23
|
-
registerStrategies(...strategys: Array<new () => Strategy>)
|
|
23
|
+
registerStrategies: (...strategys: Array<new () => Strategy>) => void;
|
|
24
24
|
createApi<T extends SnailApi>(constructor: new (options: ApiInstanceOptions) => T): ApiProxy<T, RT, DK>;
|
|
25
25
|
private initCacheManage;
|
|
26
26
|
private initExpireSource;
|
package/dist/snail-api.js
CHANGED
|
@@ -3880,8 +3880,9 @@ const buildRequestArgs = (target, propertyKey, args) => {
|
|
|
3880
3880
|
return requestArgs;
|
|
3881
3881
|
};
|
|
3882
3882
|
function isSpecialResponse(response) {
|
|
3883
|
-
const contentType = response.headers["
|
|
3884
|
-
|
|
3883
|
+
const contentType = response.headers["Content-Type"];
|
|
3884
|
+
if (!contentType) return false;
|
|
3885
|
+
return !contentType.includes("application/json");
|
|
3885
3886
|
}
|
|
3886
3887
|
const METHOD_KEY = Symbol("SNAIL_METHOD_KEY");
|
|
3887
3888
|
const API_CONFIG_KEY = Symbol("SNAIL_API_CONFIG_KEY");
|
|
@@ -4084,7 +4085,9 @@ class SnailMethod {
|
|
|
4084
4085
|
this.applyHitSource(serverName);
|
|
4085
4086
|
this.emit("success", response.data);
|
|
4086
4087
|
this.emit("finish", response.data);
|
|
4088
|
+
isSpecial && console.log("isSpecial:", isSpecial);
|
|
4087
4089
|
if (isSpecial) return response;
|
|
4090
|
+
!isSpecial && console.log("isSpecial:", isSpecial);
|
|
4088
4091
|
return response.data;
|
|
4089
4092
|
} catch (error) {
|
|
4090
4093
|
this.emit("error", error);
|
|
@@ -4094,6 +4097,61 @@ class SnailMethod {
|
|
|
4094
4097
|
return error;
|
|
4095
4098
|
}
|
|
4096
4099
|
});
|
|
4100
|
+
__publicField(this, "onSuccess", (handler) => {
|
|
4101
|
+
this.on("success", handler);
|
|
4102
|
+
});
|
|
4103
|
+
__publicField(this, "onError", (handler) => {
|
|
4104
|
+
this.on("error", handler);
|
|
4105
|
+
});
|
|
4106
|
+
__publicField(this, "onHitCache", (handler) => {
|
|
4107
|
+
this.on("hitCache", handler);
|
|
4108
|
+
});
|
|
4109
|
+
__publicField(this, "onFinish", (handler) => {
|
|
4110
|
+
this.on("finish", handler);
|
|
4111
|
+
});
|
|
4112
|
+
__publicField(this, "on", (eventName, handler) => {
|
|
4113
|
+
if (typeof handler !== "function") {
|
|
4114
|
+
throw new TypeError("Handler must be a function");
|
|
4115
|
+
}
|
|
4116
|
+
const handlers = this.eventMap.get(eventName) || /* @__PURE__ */ new Set();
|
|
4117
|
+
handlers.add(handler);
|
|
4118
|
+
this.eventMap.set(eventName, handlers);
|
|
4119
|
+
});
|
|
4120
|
+
__publicField(this, "once", (eventName, handler) => {
|
|
4121
|
+
const onceHandler = (data) => {
|
|
4122
|
+
try {
|
|
4123
|
+
handler.apply(this, [data]);
|
|
4124
|
+
} finally {
|
|
4125
|
+
this.off(eventName, onceHandler);
|
|
4126
|
+
this.onceWrapperMap.delete(handler);
|
|
4127
|
+
}
|
|
4128
|
+
};
|
|
4129
|
+
this.onceWrapperMap.set(handler, onceHandler);
|
|
4130
|
+
this.on(eventName, onceHandler);
|
|
4131
|
+
});
|
|
4132
|
+
__publicField(this, "emit", (eventName, ...args) => {
|
|
4133
|
+
const handlers = this.eventMap.get(eventName);
|
|
4134
|
+
if (!handlers || handlers.size === 0) return false;
|
|
4135
|
+
handlers.forEach((handler) => {
|
|
4136
|
+
Promise.resolve().then(() => {
|
|
4137
|
+
handler.apply(this, args);
|
|
4138
|
+
});
|
|
4139
|
+
});
|
|
4140
|
+
return true;
|
|
4141
|
+
});
|
|
4142
|
+
__publicField(this, "off", (eventName, handler) => {
|
|
4143
|
+
const handlers = this.eventMap.get(eventName);
|
|
4144
|
+
if (!handlers) return;
|
|
4145
|
+
if (handlers.has(handler)) {
|
|
4146
|
+
handlers.delete(handler);
|
|
4147
|
+
}
|
|
4148
|
+
if (handlers.size === 0) {
|
|
4149
|
+
this.eventMap.delete(eventName);
|
|
4150
|
+
}
|
|
4151
|
+
});
|
|
4152
|
+
__publicField(this, "registerStrategies", (...strategys) => {
|
|
4153
|
+
this.strategies.push(...strategys);
|
|
4154
|
+
});
|
|
4097
4155
|
this.apiInstance = apiInstance;
|
|
4098
4156
|
this.target = target;
|
|
4099
4157
|
this.propertyKey = propertyKey.toString();
|
|
@@ -4180,58 +4238,6 @@ class SnailMethod {
|
|
|
4180
4238
|
this.Request = request;
|
|
4181
4239
|
return request;
|
|
4182
4240
|
}
|
|
4183
|
-
onSuccess(handler) {
|
|
4184
|
-
this.on("success", handler);
|
|
4185
|
-
}
|
|
4186
|
-
onError(handler) {
|
|
4187
|
-
this.on("error", handler);
|
|
4188
|
-
}
|
|
4189
|
-
onHitCache(handler) {
|
|
4190
|
-
this.on("hitCache", handler);
|
|
4191
|
-
}
|
|
4192
|
-
onFinish(handler) {
|
|
4193
|
-
this.on("finish", handler);
|
|
4194
|
-
}
|
|
4195
|
-
on(eventName, handler) {
|
|
4196
|
-
if (typeof handler !== "function") {
|
|
4197
|
-
throw new TypeError("Handler must be a function");
|
|
4198
|
-
}
|
|
4199
|
-
const handlers = this.eventMap.get(eventName) || /* @__PURE__ */ new Set();
|
|
4200
|
-
handlers.add(handler);
|
|
4201
|
-
this.eventMap.set(eventName, handlers);
|
|
4202
|
-
}
|
|
4203
|
-
once(eventName, handler) {
|
|
4204
|
-
const onceHandler = (data) => {
|
|
4205
|
-
try {
|
|
4206
|
-
handler.apply(this, [data]);
|
|
4207
|
-
} finally {
|
|
4208
|
-
this.off(eventName, onceHandler);
|
|
4209
|
-
this.onceWrapperMap.delete(handler);
|
|
4210
|
-
}
|
|
4211
|
-
};
|
|
4212
|
-
this.onceWrapperMap.set(handler, onceHandler);
|
|
4213
|
-
this.on(eventName, onceHandler);
|
|
4214
|
-
}
|
|
4215
|
-
emit(eventName, ...args) {
|
|
4216
|
-
const handlers = this.eventMap.get(eventName);
|
|
4217
|
-
if (!handlers || handlers.size === 0) return false;
|
|
4218
|
-
handlers.forEach((handler) => {
|
|
4219
|
-
Promise.resolve().then(() => {
|
|
4220
|
-
handler.apply(this, args);
|
|
4221
|
-
});
|
|
4222
|
-
});
|
|
4223
|
-
return true;
|
|
4224
|
-
}
|
|
4225
|
-
off(eventName, handler) {
|
|
4226
|
-
const handlers = this.eventMap.get(eventName);
|
|
4227
|
-
if (!handlers) return;
|
|
4228
|
-
if (handlers.has(handler)) {
|
|
4229
|
-
handlers.delete(handler);
|
|
4230
|
-
}
|
|
4231
|
-
if (handlers.size === 0) {
|
|
4232
|
-
this.eventMap.delete(eventName);
|
|
4233
|
-
}
|
|
4234
|
-
}
|
|
4235
4241
|
async getCacheData(serverName) {
|
|
4236
4242
|
const methodKey = await generateCacheKey(
|
|
4237
4243
|
this.name,
|
|
@@ -4281,9 +4287,6 @@ class SnailMethod {
|
|
|
4281
4287
|
if (this.Error) return this.Error;
|
|
4282
4288
|
return null;
|
|
4283
4289
|
}
|
|
4284
|
-
registerStrategies(...strategys) {
|
|
4285
|
-
this.strategies.push(...strategys);
|
|
4286
|
-
}
|
|
4287
4290
|
getStrategies() {
|
|
4288
4291
|
const [serverName, apiName] = this.apiInstance.name.split(".");
|
|
4289
4292
|
const serverStrategies = StrategyMap.get(serverName) ?? [];
|
|
@@ -4386,6 +4389,11 @@ class SnailServer {
|
|
|
4386
4389
|
__publicField(this, "BaseURL");
|
|
4387
4390
|
__publicField(this, "Version");
|
|
4388
4391
|
__publicField(this, "EnableLog", false);
|
|
4392
|
+
__publicField(this, "registerStrategies", (...strategys) => {
|
|
4393
|
+
const serverStrategies = StrategyMap.get(this.Name) ?? [];
|
|
4394
|
+
serverStrategies.push(...strategys);
|
|
4395
|
+
StrategyMap.set(this.Name, serverStrategies);
|
|
4396
|
+
});
|
|
4389
4397
|
const options = this.getServerOptions();
|
|
4390
4398
|
this.Name = options.name ?? this.constructor.name;
|
|
4391
4399
|
this.init();
|
|
@@ -4428,11 +4436,6 @@ class SnailServer {
|
|
|
4428
4436
|
VersioningMap.set(this.Name, versioning);
|
|
4429
4437
|
}
|
|
4430
4438
|
}
|
|
4431
|
-
registerStrategies(...strategys) {
|
|
4432
|
-
const serverStrategies = StrategyMap.get(this.Name) ?? [];
|
|
4433
|
-
serverStrategies.push(...strategys);
|
|
4434
|
-
StrategyMap.set(this.Name, serverStrategies);
|
|
4435
|
-
}
|
|
4436
4439
|
createApi(constructor) {
|
|
4437
4440
|
const serverVersioning = Reflect.getMetadata(
|
|
4438
4441
|
VERSIONING_KEY,
|
|
@@ -4562,6 +4565,11 @@ class SnailApi {
|
|
|
4562
4565
|
__publicField(this, "Url");
|
|
4563
4566
|
__publicField(this, "Timeout");
|
|
4564
4567
|
__publicField(this, "EnableLog");
|
|
4568
|
+
__publicField(this, "registerStrategies", (...strategys) => {
|
|
4569
|
+
const serverStrategies = StrategyMap.get(this.Name) ?? [];
|
|
4570
|
+
serverStrategies.push(...strategys);
|
|
4571
|
+
StrategyMap.set(this.Name, serverStrategies);
|
|
4572
|
+
});
|
|
4565
4573
|
const apiConfig = this.getApiConfig();
|
|
4566
4574
|
if (!apiConfig) {
|
|
4567
4575
|
throw new Error("Create SnailApi must be used for @Api() decoration");
|
|
@@ -4583,11 +4591,6 @@ class SnailApi {
|
|
|
4583
4591
|
const serverStrategies = Reflect.getMetadata(STRATEGY_KEY, this.constructor) || [];
|
|
4584
4592
|
StrategyMap.set(this.Name, serverStrategies);
|
|
4585
4593
|
}
|
|
4586
|
-
registerStrategies(...strategys) {
|
|
4587
|
-
const serverStrategies = StrategyMap.get(this.Name) ?? [];
|
|
4588
|
-
serverStrategies.push(...strategys);
|
|
4589
|
-
StrategyMap.set(this.Name, serverStrategies);
|
|
4590
|
-
}
|
|
4591
4594
|
initName() {
|
|
4592
4595
|
const { name } = this.getApiConfig();
|
|
4593
4596
|
const apiName = name ?? this.constructor.name;
|
package/dist/snail-api.umd.cjs
CHANGED
|
@@ -3884,8 +3884,9 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3884
3884
|
return requestArgs;
|
|
3885
3885
|
};
|
|
3886
3886
|
function isSpecialResponse(response) {
|
|
3887
|
-
const contentType = response.headers["
|
|
3888
|
-
|
|
3887
|
+
const contentType = response.headers["Content-Type"];
|
|
3888
|
+
if (!contentType) return false;
|
|
3889
|
+
return !contentType.includes("application/json");
|
|
3889
3890
|
}
|
|
3890
3891
|
const METHOD_KEY = Symbol("SNAIL_METHOD_KEY");
|
|
3891
3892
|
const API_CONFIG_KEY = Symbol("SNAIL_API_CONFIG_KEY");
|
|
@@ -4088,7 +4089,9 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4088
4089
|
this.applyHitSource(serverName);
|
|
4089
4090
|
this.emit("success", response.data);
|
|
4090
4091
|
this.emit("finish", response.data);
|
|
4092
|
+
isSpecial && console.log("isSpecial:", isSpecial);
|
|
4091
4093
|
if (isSpecial) return response;
|
|
4094
|
+
!isSpecial && console.log("isSpecial:", isSpecial);
|
|
4092
4095
|
return response.data;
|
|
4093
4096
|
} catch (error) {
|
|
4094
4097
|
this.emit("error", error);
|
|
@@ -4098,6 +4101,61 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4098
4101
|
return error;
|
|
4099
4102
|
}
|
|
4100
4103
|
});
|
|
4104
|
+
__publicField(this, "onSuccess", (handler) => {
|
|
4105
|
+
this.on("success", handler);
|
|
4106
|
+
});
|
|
4107
|
+
__publicField(this, "onError", (handler) => {
|
|
4108
|
+
this.on("error", handler);
|
|
4109
|
+
});
|
|
4110
|
+
__publicField(this, "onHitCache", (handler) => {
|
|
4111
|
+
this.on("hitCache", handler);
|
|
4112
|
+
});
|
|
4113
|
+
__publicField(this, "onFinish", (handler) => {
|
|
4114
|
+
this.on("finish", handler);
|
|
4115
|
+
});
|
|
4116
|
+
__publicField(this, "on", (eventName, handler) => {
|
|
4117
|
+
if (typeof handler !== "function") {
|
|
4118
|
+
throw new TypeError("Handler must be a function");
|
|
4119
|
+
}
|
|
4120
|
+
const handlers = this.eventMap.get(eventName) || /* @__PURE__ */ new Set();
|
|
4121
|
+
handlers.add(handler);
|
|
4122
|
+
this.eventMap.set(eventName, handlers);
|
|
4123
|
+
});
|
|
4124
|
+
__publicField(this, "once", (eventName, handler) => {
|
|
4125
|
+
const onceHandler = (data) => {
|
|
4126
|
+
try {
|
|
4127
|
+
handler.apply(this, [data]);
|
|
4128
|
+
} finally {
|
|
4129
|
+
this.off(eventName, onceHandler);
|
|
4130
|
+
this.onceWrapperMap.delete(handler);
|
|
4131
|
+
}
|
|
4132
|
+
};
|
|
4133
|
+
this.onceWrapperMap.set(handler, onceHandler);
|
|
4134
|
+
this.on(eventName, onceHandler);
|
|
4135
|
+
});
|
|
4136
|
+
__publicField(this, "emit", (eventName, ...args) => {
|
|
4137
|
+
const handlers = this.eventMap.get(eventName);
|
|
4138
|
+
if (!handlers || handlers.size === 0) return false;
|
|
4139
|
+
handlers.forEach((handler) => {
|
|
4140
|
+
Promise.resolve().then(() => {
|
|
4141
|
+
handler.apply(this, args);
|
|
4142
|
+
});
|
|
4143
|
+
});
|
|
4144
|
+
return true;
|
|
4145
|
+
});
|
|
4146
|
+
__publicField(this, "off", (eventName, handler) => {
|
|
4147
|
+
const handlers = this.eventMap.get(eventName);
|
|
4148
|
+
if (!handlers) return;
|
|
4149
|
+
if (handlers.has(handler)) {
|
|
4150
|
+
handlers.delete(handler);
|
|
4151
|
+
}
|
|
4152
|
+
if (handlers.size === 0) {
|
|
4153
|
+
this.eventMap.delete(eventName);
|
|
4154
|
+
}
|
|
4155
|
+
});
|
|
4156
|
+
__publicField(this, "registerStrategies", (...strategys) => {
|
|
4157
|
+
this.strategies.push(...strategys);
|
|
4158
|
+
});
|
|
4101
4159
|
this.apiInstance = apiInstance;
|
|
4102
4160
|
this.target = target;
|
|
4103
4161
|
this.propertyKey = propertyKey.toString();
|
|
@@ -4184,58 +4242,6 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4184
4242
|
this.Request = request;
|
|
4185
4243
|
return request;
|
|
4186
4244
|
}
|
|
4187
|
-
onSuccess(handler) {
|
|
4188
|
-
this.on("success", handler);
|
|
4189
|
-
}
|
|
4190
|
-
onError(handler) {
|
|
4191
|
-
this.on("error", handler);
|
|
4192
|
-
}
|
|
4193
|
-
onHitCache(handler) {
|
|
4194
|
-
this.on("hitCache", handler);
|
|
4195
|
-
}
|
|
4196
|
-
onFinish(handler) {
|
|
4197
|
-
this.on("finish", handler);
|
|
4198
|
-
}
|
|
4199
|
-
on(eventName, handler) {
|
|
4200
|
-
if (typeof handler !== "function") {
|
|
4201
|
-
throw new TypeError("Handler must be a function");
|
|
4202
|
-
}
|
|
4203
|
-
const handlers = this.eventMap.get(eventName) || /* @__PURE__ */ new Set();
|
|
4204
|
-
handlers.add(handler);
|
|
4205
|
-
this.eventMap.set(eventName, handlers);
|
|
4206
|
-
}
|
|
4207
|
-
once(eventName, handler) {
|
|
4208
|
-
const onceHandler = (data) => {
|
|
4209
|
-
try {
|
|
4210
|
-
handler.apply(this, [data]);
|
|
4211
|
-
} finally {
|
|
4212
|
-
this.off(eventName, onceHandler);
|
|
4213
|
-
this.onceWrapperMap.delete(handler);
|
|
4214
|
-
}
|
|
4215
|
-
};
|
|
4216
|
-
this.onceWrapperMap.set(handler, onceHandler);
|
|
4217
|
-
this.on(eventName, onceHandler);
|
|
4218
|
-
}
|
|
4219
|
-
emit(eventName, ...args) {
|
|
4220
|
-
const handlers = this.eventMap.get(eventName);
|
|
4221
|
-
if (!handlers || handlers.size === 0) return false;
|
|
4222
|
-
handlers.forEach((handler) => {
|
|
4223
|
-
Promise.resolve().then(() => {
|
|
4224
|
-
handler.apply(this, args);
|
|
4225
|
-
});
|
|
4226
|
-
});
|
|
4227
|
-
return true;
|
|
4228
|
-
}
|
|
4229
|
-
off(eventName, handler) {
|
|
4230
|
-
const handlers = this.eventMap.get(eventName);
|
|
4231
|
-
if (!handlers) return;
|
|
4232
|
-
if (handlers.has(handler)) {
|
|
4233
|
-
handlers.delete(handler);
|
|
4234
|
-
}
|
|
4235
|
-
if (handlers.size === 0) {
|
|
4236
|
-
this.eventMap.delete(eventName);
|
|
4237
|
-
}
|
|
4238
|
-
}
|
|
4239
4245
|
async getCacheData(serverName) {
|
|
4240
4246
|
const methodKey = await generateCacheKey(
|
|
4241
4247
|
this.name,
|
|
@@ -4285,9 +4291,6 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4285
4291
|
if (this.Error) return this.Error;
|
|
4286
4292
|
return null;
|
|
4287
4293
|
}
|
|
4288
|
-
registerStrategies(...strategys) {
|
|
4289
|
-
this.strategies.push(...strategys);
|
|
4290
|
-
}
|
|
4291
4294
|
getStrategies() {
|
|
4292
4295
|
const [serverName, apiName] = this.apiInstance.name.split(".");
|
|
4293
4296
|
const serverStrategies = StrategyMap.get(serverName) ?? [];
|
|
@@ -4390,6 +4393,11 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4390
4393
|
__publicField(this, "BaseURL");
|
|
4391
4394
|
__publicField(this, "Version");
|
|
4392
4395
|
__publicField(this, "EnableLog", false);
|
|
4396
|
+
__publicField(this, "registerStrategies", (...strategys) => {
|
|
4397
|
+
const serverStrategies = StrategyMap.get(this.Name) ?? [];
|
|
4398
|
+
serverStrategies.push(...strategys);
|
|
4399
|
+
StrategyMap.set(this.Name, serverStrategies);
|
|
4400
|
+
});
|
|
4393
4401
|
const options = this.getServerOptions();
|
|
4394
4402
|
this.Name = options.name ?? this.constructor.name;
|
|
4395
4403
|
this.init();
|
|
@@ -4432,11 +4440,6 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4432
4440
|
VersioningMap.set(this.Name, versioning);
|
|
4433
4441
|
}
|
|
4434
4442
|
}
|
|
4435
|
-
registerStrategies(...strategys) {
|
|
4436
|
-
const serverStrategies = StrategyMap.get(this.Name) ?? [];
|
|
4437
|
-
serverStrategies.push(...strategys);
|
|
4438
|
-
StrategyMap.set(this.Name, serverStrategies);
|
|
4439
|
-
}
|
|
4440
4443
|
createApi(constructor) {
|
|
4441
4444
|
const serverVersioning = Reflect.getMetadata(
|
|
4442
4445
|
VERSIONING_KEY,
|
|
@@ -4566,6 +4569,11 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4566
4569
|
__publicField(this, "Url");
|
|
4567
4570
|
__publicField(this, "Timeout");
|
|
4568
4571
|
__publicField(this, "EnableLog");
|
|
4572
|
+
__publicField(this, "registerStrategies", (...strategys) => {
|
|
4573
|
+
const serverStrategies = StrategyMap.get(this.Name) ?? [];
|
|
4574
|
+
serverStrategies.push(...strategys);
|
|
4575
|
+
StrategyMap.set(this.Name, serverStrategies);
|
|
4576
|
+
});
|
|
4569
4577
|
const apiConfig = this.getApiConfig();
|
|
4570
4578
|
if (!apiConfig) {
|
|
4571
4579
|
throw new Error("Create SnailApi must be used for @Api() decoration");
|
|
@@ -4587,11 +4595,6 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4587
4595
|
const serverStrategies = Reflect.getMetadata(STRATEGY_KEY, this.constructor) || [];
|
|
4588
4596
|
StrategyMap.set(this.Name, serverStrategies);
|
|
4589
4597
|
}
|
|
4590
|
-
registerStrategies(...strategys) {
|
|
4591
|
-
const serverStrategies = StrategyMap.get(this.Name) ?? [];
|
|
4592
|
-
serverStrategies.push(...strategys);
|
|
4593
|
-
StrategyMap.set(this.Name, serverStrategies);
|
|
4594
|
-
}
|
|
4595
4598
|
initName() {
|
|
4596
4599
|
const { name } = this.getApiConfig();
|
|
4597
4600
|
const apiName = name ?? this.constructor.name;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ResponseData,
|
|
1
|
+
import { ResponseData, SpecialResponseData, StandardResponseData } from "./response.data";
|
|
2
2
|
import { SnailMethod } from "../core/snailMethod";
|
|
3
3
|
export type ApiResponse<T> = Promise<{
|
|
4
4
|
data: T | null;
|
|
5
5
|
error: Error | null;
|
|
6
6
|
hitCache?: boolean;
|
|
7
7
|
}>;
|
|
8
|
-
export type ApiProxy<T extends object, RT extends ResponseData = StandardResponseData
|
|
8
|
+
export type ApiProxy<T extends object, RT extends ResponseData = StandardResponseData, DK extends string = "data"> = {
|
|
9
9
|
[K in keyof T]: T[K] extends (...args: infer A) => any ? RT extends SpecialResponseData ? <RD>(...args: A) => SnailMethod<RD extends SpecialResponseData ? RD : never> : <RD>(...args: A) => RD extends SpecialResponseData ? SnailMethod<RD> : SnailMethod<RT & {
|
|
10
10
|
[KK in DK]: RD;
|
|
11
11
|
}> : T[K];
|
|
@@ -6,7 +6,7 @@ export interface PaginationData<T> {
|
|
|
6
6
|
}
|
|
7
7
|
export type ResponseJsonData = Record<string, any> | object;
|
|
8
8
|
export type SpecialResponseData = string | ArrayBuffer | Blob | FormData;
|
|
9
|
-
export type StandardResponseData<T
|
|
9
|
+
export type StandardResponseData<T = any> = {
|
|
10
10
|
code: number;
|
|
11
11
|
message: string;
|
|
12
12
|
data: T;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@snail-js/api",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.18",
|
|
4
4
|
"description": "Http Request with Decorators Api, build on axios",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.ts",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"author": "",
|
|
27
27
|
"license": "MIT",
|
|
28
28
|
"peerDependencies": {
|
|
29
|
-
"axios": "^1.
|
|
29
|
+
"axios": "^1.8.3"
|
|
30
30
|
},
|
|
31
31
|
"files": [
|
|
32
32
|
"README.md",
|