aziosxjs 0.4.1 → 1.0.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/LICENSE +21 -0
- package/README.md +92 -267
- package/dist/cache/memoryCache.d.ts +1 -0
- package/dist/cache/memoryCache.js +7 -1
- package/dist/cache/memoryCache.js.map +1 -1
- package/dist/core/Azios.d.ts +33 -8
- package/dist/core/Azios.js +68 -2
- package/dist/core/Azios.js.map +1 -1
- package/dist/core/dispatchRequest.js +10 -75
- package/dist/core/dispatchRequest.js.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/MiddlewarePipeline.d.ts +54 -0
- package/dist/middleware/MiddlewarePipeline.js +122 -0
- package/dist/middleware/MiddlewarePipeline.js.map +1 -0
- package/dist/middleware/compose.d.ts +1 -0
- package/dist/middleware/compose.js +25 -0
- package/dist/middleware/compose.js.map +1 -0
- package/dist/middleware/middlewareManager.d.ts +4 -0
- package/dist/middleware/middlewareManager.js +12 -0
- package/dist/middleware/middlewareManager.js.map +1 -0
- package/dist/plugins/pluginManager.d.ts +44 -0
- package/dist/plugins/pluginManager.js +120 -0
- package/dist/plugins/pluginManager.js.map +1 -0
- package/dist/runtimes/AdapterFactory.d.ts +22 -0
- package/dist/runtimes/AdapterFactory.js +43 -0
- package/dist/runtimes/AdapterFactory.js.map +1 -0
- package/dist/runtimes/HttpAdapter.d.ts +23 -0
- package/dist/runtimes/HttpAdapter.js +10 -0
- package/dist/runtimes/HttpAdapter.js.map +1 -0
- package/dist/runtimes/UniversalHttpAdapter.d.ts +19 -0
- package/dist/runtimes/UniversalHttpAdapter.js +114 -0
- package/dist/runtimes/UniversalHttpAdapter.js.map +1 -0
- package/dist/runtimes/detectRuntime.d.ts +34 -0
- package/dist/runtimes/detectRuntime.js +77 -0
- package/dist/runtimes/detectRuntime.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +22 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/middleware.d.ts +16 -0
- package/dist/types/middleware.js +3 -0
- package/dist/types/middleware.js.map +1 -0
- package/dist/types/plugin.d.ts +43 -0
- package/dist/types/plugin.js +3 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/request.d.ts +5 -0
- package/dist/types/response.d.ts +23 -1
- package/package.json +24 -5
- package/src/adapters/httpAdapter.ts +0 -0
- package/src/adapters/index.ts +0 -0
- package/src/adapters/xhrAdapter.ts +0 -0
- package/src/cache/memoryCache.ts +45 -0
- package/src/config/mergeConfig.ts +0 -0
- package/src/core/Azios.ts +184 -0
- package/src/core/createInstance.ts +23 -0
- package/src/core/dispatchRequest.ts +111 -0
- package/src/core/requestMethods.ts +0 -0
- package/src/core/requestStore.ts +13 -0
- package/src/errors/AziosError.ts +26 -0
- package/src/helpers/buildURL.ts +44 -0
- package/src/helpers/normalizeHeaders.ts +0 -0
- package/src/helpers/parseHeaders.ts +0 -0
- package/src/index.ts +64 -0
- package/src/interceptors/InterceptorManager.ts +30 -0
- package/src/middleware/MiddlewarePipeline.ts +155 -0
- package/src/middleware/compose.ts +33 -0
- package/src/middleware/middlewareManager.ts +9 -0
- package/src/plugins/pluginManager.ts +143 -0
- package/src/rateLimiter/rateLimiter.ts +36 -0
- package/src/runtimes/AdapterFactory.ts +46 -0
- package/src/runtimes/HttpAdapter.ts +26 -0
- package/src/runtimes/UniversalHttpAdapter.ts +136 -0
- package/src/runtimes/detectRuntime.ts +85 -0
- package/src/types/config.ts +30 -0
- package/src/types/index.ts +5 -0
- package/src/types/middleware.ts +21 -0
- package/src/types/plugin.ts +50 -0
- package/src/types/request.ts +39 -0
- package/src/types/response.ts +37 -0
|
@@ -4,88 +4,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.default = dispatchRequest;
|
|
7
|
-
const
|
|
8
|
-
const https_1 = __importDefault(require("https"));
|
|
9
|
-
const url_1 = require("url");
|
|
10
|
-
const buildURL_1 = __importDefault(require("../helpers/buildURL"));
|
|
11
|
-
const AziosError_1 = __importDefault(require("../errors/AziosError"));
|
|
7
|
+
const AdapterFactory_1 = __importDefault(require("../runtimes/AdapterFactory"));
|
|
12
8
|
const requestStore_1 = require("./requestStore");
|
|
13
9
|
const memoryCache_1 = require("../cache/memoryCache");
|
|
14
10
|
const rateLimiter_1 = require("../rateLimiter/rateLimiter");
|
|
11
|
+
/**
|
|
12
|
+
* Sleep utility for retry delays
|
|
13
|
+
*/
|
|
15
14
|
function delay(ms) {
|
|
16
15
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
17
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Make a single HTTP request using the universal adapter
|
|
19
|
+
* This ensures cross-runtime compatibility
|
|
20
|
+
*/
|
|
18
21
|
async function makeRequest(config) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
? config.baseURL + config.url
|
|
22
|
-
: config.url;
|
|
23
|
-
url = (0, buildURL_1.default)(url, config.params);
|
|
24
|
-
const parsedURL = new url_1.URL(url);
|
|
25
|
-
const isHttps = parsedURL.protocol === "https:";
|
|
26
|
-
const transport = isHttps ? https_1.default : http_1.default;
|
|
27
|
-
const options = {
|
|
28
|
-
hostname: parsedURL.hostname,
|
|
29
|
-
port: parsedURL.port || (isHttps ? 443 : 80),
|
|
30
|
-
path: parsedURL.pathname + parsedURL.search,
|
|
31
|
-
method: config.method || "GET",
|
|
32
|
-
headers: {
|
|
33
|
-
"Content-Type": "application/json",
|
|
34
|
-
...config.headers
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
const req = transport.request(options, res => {
|
|
38
|
-
// -------------------------
|
|
39
|
-
// TIMEOUT SUPPORT
|
|
40
|
-
// -------------------------
|
|
41
|
-
if (config.timeout) {
|
|
42
|
-
req.setTimeout(config.timeout, () => {
|
|
43
|
-
req.destroy();
|
|
44
|
-
reject(new AziosError_1.default("Request timeout", "TIMEOUT", config, req));
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
// -------------------------
|
|
48
|
-
// ABORT SUPPORT
|
|
49
|
-
// -------------------------
|
|
50
|
-
if (config.signal) {
|
|
51
|
-
const abortHandler = () => {
|
|
52
|
-
req.destroy();
|
|
53
|
-
reject(new AziosError_1.default("Request aborted", "ABORTED", config, req));
|
|
54
|
-
};
|
|
55
|
-
config.signal.addEventListener("abort", abortHandler, { once: true });
|
|
56
|
-
}
|
|
57
|
-
let rawData = "";
|
|
58
|
-
res.on("data", chunk => {
|
|
59
|
-
rawData += chunk;
|
|
60
|
-
});
|
|
61
|
-
res.on("end", () => {
|
|
62
|
-
let responseData = rawData;
|
|
63
|
-
try {
|
|
64
|
-
responseData = JSON.parse(rawData);
|
|
65
|
-
}
|
|
66
|
-
catch (_a) { }
|
|
67
|
-
const response = {
|
|
68
|
-
data: responseData,
|
|
69
|
-
status: res.statusCode || 0,
|
|
70
|
-
statusText: res.statusMessage || "",
|
|
71
|
-
headers: res.headers,
|
|
72
|
-
config,
|
|
73
|
-
request: req
|
|
74
|
-
};
|
|
75
|
-
resolve(response);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
req.on("error", err => {
|
|
79
|
-
reject(new AziosError_1.default(err.message, "NETWORK_ERROR", config, req));
|
|
80
|
-
});
|
|
81
|
-
if (config.data) {
|
|
82
|
-
const body = typeof config.data === "string"
|
|
83
|
-
? config.data
|
|
84
|
-
: JSON.stringify(config.data);
|
|
85
|
-
req.write(body);
|
|
86
|
-
}
|
|
87
|
-
req.end();
|
|
88
|
-
});
|
|
22
|
+
const adapter = AdapterFactory_1.default.getAdapter();
|
|
23
|
+
return adapter.request(config);
|
|
89
24
|
}
|
|
90
25
|
async function dispatchRequest(config) {
|
|
91
26
|
const requestKey = `${config.method}-${config.url}-${JSON.stringify(config.params)}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatchRequest.js","sourceRoot":"","sources":["../../src/core/dispatchRequest.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"dispatchRequest.js","sourceRoot":"","sources":["../../src/core/dispatchRequest.ts"],"names":[],"mappings":";;;;;AA0BA,kCAoFC;AA1GD,gFAAuD;AAEvD,iDAAsE;AACtE,sDAAyD;AACzD,4DAAqD;AAErD;;GAEG;AACH,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AACxD,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,WAAW,CAAC,MAA0B;IACnD,MAAM,OAAO,GAAG,wBAAc,CAAC,UAAU,EAAE,CAAA;IAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAChC,CAAC;AAEc,KAAK,UAAU,eAAe,CAAC,MAA0B;IAEtE,MAAM,UAAU,GACd,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA;IAEnE,4BAA4B;IAC5B,yBAAyB;IACzB,4BAA4B;IAE5B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAEjB,MAAM,MAAM,GAAG,IAAA,sBAAQ,EAAC,UAAU,CAAC,CAAA;QAEnC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAA;QACf,CAAC;IAEH,CAAC;IAED,4BAA4B;IAC5B,2BAA2B;IAC3B,4BAA4B;IAE5B,MAAM,QAAQ,GAAG,IAAA,yBAAU,EAAC,UAAU,CAAC,CAAA;IAEvC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAA;IAE3C,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;;QAE1B,OAAO,IAAI,EAAE,CAAC;YAEZ,IAAI,CAAC;gBAEH,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;gBAEtC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS;oBAC/B,CAAC,CAAC,MAAM,IAAA,sBAAQ,EAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;oBACxC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAA;gBAEhB,4BAA4B;gBAC5B,cAAc;gBACd,4BAA4B;gBAE5B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,IAAA,sBAAQ,EAAC,UAAU,EAAE,QAAQ,EAAE,MAAA,MAAM,CAAC,QAAQ,mCAAI,IAAI,CAAC,CAAA;gBACzD,CAAC;gBAED,IAAA,4BAAa,EAAC,UAAU,CAAC,CAAA;gBAEzB,OAAO,QAAQ,CAAA;YAEjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBAEb,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;oBAEvB,IAAA,4BAAa,EAAC,UAAU,CAAC,CAAA;oBAEzB,MAAM,GAAG,CAAA;gBAEX,CAAC;gBAED,OAAO,EAAE,CAAA;gBAET,MAAM,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;gBAEjD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAA;YAEtB,CAAC;QAEH,CAAC;IAEH,CAAC,CAAC,EAAE,CAAA;IAEJ,IAAA,yBAAU,EAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAE/B,OAAO,OAAO,CAAA;AAEhB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,17 @@
|
|
|
1
1
|
declare const azios: import("./types/request").AziosInstance;
|
|
2
|
+
export type { AziosRequestConfig } from "./types/config";
|
|
3
|
+
export type { AziosResponse } from "./types/response";
|
|
4
|
+
export type { AziosInstance } from "./types/request";
|
|
5
|
+
export type { AziosPlugin, PluginHooks } from "./types/plugin";
|
|
6
|
+
export { default as AziosError } from "./errors/AziosError";
|
|
7
|
+
export { default as InterceptorManager } from "./interceptors/InterceptorManager";
|
|
8
|
+
export { default as Azios } from "./core/Azios";
|
|
9
|
+
export { createInstance } from "./core/createInstance";
|
|
10
|
+
export { default as PluginManager } from "./plugins/pluginManager";
|
|
11
|
+
export { default as MiddlewarePipeline } from "./middleware/MiddlewarePipeline";
|
|
12
|
+
export type { RequestMiddleware, ResponseMiddleware } from "./middleware/MiddlewarePipeline";
|
|
13
|
+
export { detectRuntime, currentRuntime, isRuntime, isServerRuntime, isBrowserRuntime, RuntimeType } from "./runtimes/detectRuntime";
|
|
14
|
+
export { default as AdapterFactory } from "./runtimes/AdapterFactory";
|
|
15
|
+
export { getCache, setCache, clearCache } from "./cache/memoryCache";
|
|
16
|
+
export { schedule } from "./rateLimiter/rateLimiter";
|
|
2
17
|
export default azios;
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,58 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.schedule = exports.clearCache = exports.setCache = exports.getCache = exports.AdapterFactory = exports.RuntimeType = exports.isBrowserRuntime = exports.isServerRuntime = exports.isRuntime = exports.currentRuntime = exports.detectRuntime = exports.MiddlewarePipeline = exports.PluginManager = exports.createInstance = exports.Azios = exports.InterceptorManager = exports.AziosError = void 0;
|
|
3
7
|
const createInstance_1 = require("./core/createInstance");
|
|
8
|
+
// Export main instance
|
|
4
9
|
const azios = (0, createInstance_1.createInstance)({
|
|
5
10
|
url: ""
|
|
6
11
|
});
|
|
12
|
+
// ============================================
|
|
13
|
+
// Class Exports
|
|
14
|
+
// ============================================
|
|
15
|
+
var AziosError_1 = require("./errors/AziosError");
|
|
16
|
+
Object.defineProperty(exports, "AziosError", { enumerable: true, get: function () { return __importDefault(AziosError_1).default; } });
|
|
17
|
+
var InterceptorManager_1 = require("./interceptors/InterceptorManager");
|
|
18
|
+
Object.defineProperty(exports, "InterceptorManager", { enumerable: true, get: function () { return __importDefault(InterceptorManager_1).default; } });
|
|
19
|
+
var Azios_1 = require("./core/Azios");
|
|
20
|
+
Object.defineProperty(exports, "Azios", { enumerable: true, get: function () { return __importDefault(Azios_1).default; } });
|
|
21
|
+
var createInstance_2 = require("./core/createInstance");
|
|
22
|
+
Object.defineProperty(exports, "createInstance", { enumerable: true, get: function () { return createInstance_2.createInstance; } });
|
|
23
|
+
// ============================================
|
|
24
|
+
// Plugin System Exports
|
|
25
|
+
// ============================================
|
|
26
|
+
var pluginManager_1 = require("./plugins/pluginManager");
|
|
27
|
+
Object.defineProperty(exports, "PluginManager", { enumerable: true, get: function () { return __importDefault(pluginManager_1).default; } });
|
|
28
|
+
// ============================================
|
|
29
|
+
// Middleware System Exports
|
|
30
|
+
// ============================================
|
|
31
|
+
var MiddlewarePipeline_1 = require("./middleware/MiddlewarePipeline");
|
|
32
|
+
Object.defineProperty(exports, "MiddlewarePipeline", { enumerable: true, get: function () { return __importDefault(MiddlewarePipeline_1).default; } });
|
|
33
|
+
// ============================================
|
|
34
|
+
// Runtime Support Exports
|
|
35
|
+
// ============================================
|
|
36
|
+
var detectRuntime_1 = require("./runtimes/detectRuntime");
|
|
37
|
+
Object.defineProperty(exports, "detectRuntime", { enumerable: true, get: function () { return detectRuntime_1.detectRuntime; } });
|
|
38
|
+
Object.defineProperty(exports, "currentRuntime", { enumerable: true, get: function () { return detectRuntime_1.currentRuntime; } });
|
|
39
|
+
Object.defineProperty(exports, "isRuntime", { enumerable: true, get: function () { return detectRuntime_1.isRuntime; } });
|
|
40
|
+
Object.defineProperty(exports, "isServerRuntime", { enumerable: true, get: function () { return detectRuntime_1.isServerRuntime; } });
|
|
41
|
+
Object.defineProperty(exports, "isBrowserRuntime", { enumerable: true, get: function () { return detectRuntime_1.isBrowserRuntime; } });
|
|
42
|
+
Object.defineProperty(exports, "RuntimeType", { enumerable: true, get: function () { return detectRuntime_1.RuntimeType; } });
|
|
43
|
+
var AdapterFactory_1 = require("./runtimes/AdapterFactory");
|
|
44
|
+
Object.defineProperty(exports, "AdapterFactory", { enumerable: true, get: function () { return __importDefault(AdapterFactory_1).default; } });
|
|
45
|
+
// ============================================
|
|
46
|
+
// Cache & Rate Limit Exports
|
|
47
|
+
// ============================================
|
|
48
|
+
var memoryCache_1 = require("./cache/memoryCache");
|
|
49
|
+
Object.defineProperty(exports, "getCache", { enumerable: true, get: function () { return memoryCache_1.getCache; } });
|
|
50
|
+
Object.defineProperty(exports, "setCache", { enumerable: true, get: function () { return memoryCache_1.setCache; } });
|
|
51
|
+
Object.defineProperty(exports, "clearCache", { enumerable: true, get: function () { return memoryCache_1.clearCache; } });
|
|
52
|
+
var rateLimiter_1 = require("./rateLimiter/rateLimiter");
|
|
53
|
+
Object.defineProperty(exports, "schedule", { enumerable: true, get: function () { return rateLimiter_1.schedule; } });
|
|
54
|
+
// ============================================
|
|
55
|
+
// Default Export
|
|
56
|
+
// ============================================
|
|
7
57
|
exports.default = azios;
|
|
8
58
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAsD;AAEtD,uBAAuB;AACvB,MAAM,KAAK,GAAG,IAAA,+BAAc,EAAC;IAC3B,GAAG,EAAE,EAAE;CACR,CAAC,CAAA;AAWF,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,kDAA2D;AAAlD,yHAAA,OAAO,OAAc;AAC9B,wEAAiF;AAAxE,yIAAA,OAAO,OAAsB;AACtC,sCAA+C;AAAtC,+GAAA,OAAO,OAAS;AACzB,wDAAsD;AAA7C,gHAAA,cAAc,OAAA;AAEvB,+CAA+C;AAC/C,wBAAwB;AACxB,+CAA+C;AAE/C,yDAAkE;AAAzD,+HAAA,OAAO,OAAiB;AAEjC,+CAA+C;AAC/C,4BAA4B;AAC5B,+CAA+C;AAE/C,sEAA+E;AAAtE,yIAAA,OAAO,OAAsB;AAGtC,+CAA+C;AAC/C,0BAA0B;AAC1B,+CAA+C;AAE/C,0DAOiC;AAN/B,8GAAA,aAAa,OAAA;AACb,+GAAA,cAAc,OAAA;AACd,0GAAA,SAAS,OAAA;AACT,gHAAA,eAAe,OAAA;AACf,iHAAA,gBAAgB,OAAA;AAChB,4GAAA,WAAW,OAAA;AAEb,4DAAqE;AAA5D,iIAAA,OAAO,OAAkB;AAElC,+CAA+C;AAC/C,6BAA6B;AAC7B,+CAA+C;AAE/C,mDAAoE;AAA3D,uGAAA,QAAQ,OAAA;AAAE,uGAAA,QAAQ,OAAA;AAAE,yGAAA,UAAU,OAAA;AACvC,yDAAoD;AAA3C,uGAAA,QAAQ,OAAA;AAEjB,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAE/C,kBAAe,KAAK,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { AziosRequestConfig } from '../types/config';
|
|
2
|
+
import type { AziosResponse } from '../types/response';
|
|
3
|
+
/**
|
|
4
|
+
* Middleware handler types
|
|
5
|
+
* Supports async middleware in the style of Koa
|
|
6
|
+
*/
|
|
7
|
+
export type RequestMiddleware = (config: AziosRequestConfig, next: () => Promise<AziosResponse>) => Promise<AziosResponse>;
|
|
8
|
+
export type ResponseMiddleware = (response: AziosResponse, next: () => Promise<AziosResponse>) => Promise<AziosResponse>;
|
|
9
|
+
/**
|
|
10
|
+
* Composition utility for middleware chaining
|
|
11
|
+
* Implements Koa-style middleware flow control
|
|
12
|
+
*/
|
|
13
|
+
export declare class MiddlewarePipeline {
|
|
14
|
+
private requestMiddleware;
|
|
15
|
+
private responseMiddleware;
|
|
16
|
+
/**
|
|
17
|
+
* Add request middleware
|
|
18
|
+
* Middleware will execute in registration order
|
|
19
|
+
*/
|
|
20
|
+
useRequest(middleware: RequestMiddleware): this;
|
|
21
|
+
/**
|
|
22
|
+
* Add response middleware
|
|
23
|
+
* Middleware will execute in registration order
|
|
24
|
+
*/
|
|
25
|
+
useResponse(middleware: ResponseMiddleware): this;
|
|
26
|
+
/**
|
|
27
|
+
* Compose request middleware with proper async error handling
|
|
28
|
+
*/
|
|
29
|
+
private composeRequest;
|
|
30
|
+
/**
|
|
31
|
+
* Compose response middleware with proper async error handling
|
|
32
|
+
*/
|
|
33
|
+
private composeResponse;
|
|
34
|
+
/**
|
|
35
|
+
* Execute request middleware pipeline
|
|
36
|
+
*/
|
|
37
|
+
executeRequestMiddleware(config: AziosRequestConfig, next: () => Promise<AziosResponse>): Promise<AziosResponse>;
|
|
38
|
+
/**
|
|
39
|
+
* Execute response middleware pipeline
|
|
40
|
+
*/
|
|
41
|
+
executeResponseMiddleware(response: AziosResponse, next: () => Promise<AziosResponse>): Promise<AziosResponse>;
|
|
42
|
+
/**
|
|
43
|
+
* Clear all middleware
|
|
44
|
+
*/
|
|
45
|
+
clear(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Get registered middleware count
|
|
48
|
+
*/
|
|
49
|
+
getMiddlewareCount(): {
|
|
50
|
+
request: number;
|
|
51
|
+
response: number;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export default MiddlewarePipeline;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MiddlewarePipeline = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Composition utility for middleware chaining
|
|
6
|
+
* Implements Koa-style middleware flow control
|
|
7
|
+
*/
|
|
8
|
+
class MiddlewarePipeline {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.requestMiddleware = [];
|
|
11
|
+
this.responseMiddleware = [];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Add request middleware
|
|
15
|
+
* Middleware will execute in registration order
|
|
16
|
+
*/
|
|
17
|
+
useRequest(middleware) {
|
|
18
|
+
this.requestMiddleware.push(middleware);
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Add response middleware
|
|
23
|
+
* Middleware will execute in registration order
|
|
24
|
+
*/
|
|
25
|
+
useResponse(middleware) {
|
|
26
|
+
this.responseMiddleware.push(middleware);
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Compose request middleware with proper async error handling
|
|
31
|
+
*/
|
|
32
|
+
composeRequest() {
|
|
33
|
+
const middleware = this.requestMiddleware;
|
|
34
|
+
return async (config, next) => {
|
|
35
|
+
let index = -1;
|
|
36
|
+
const dispatch = async (i) => {
|
|
37
|
+
if (i <= index) {
|
|
38
|
+
throw new Error('next() called multiple times in middleware');
|
|
39
|
+
}
|
|
40
|
+
index = i;
|
|
41
|
+
try {
|
|
42
|
+
if (i < middleware.length) {
|
|
43
|
+
return await middleware[i](config, () => dispatch(i + 1));
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return await next();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
return dispatch(0);
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Compose response middleware with proper async error handling
|
|
58
|
+
*/
|
|
59
|
+
composeResponse() {
|
|
60
|
+
const middleware = this.responseMiddleware;
|
|
61
|
+
return async (response, next) => {
|
|
62
|
+
let index = -1;
|
|
63
|
+
const dispatch = async (i) => {
|
|
64
|
+
if (i <= index) {
|
|
65
|
+
throw new Error('next() called multiple times in middleware');
|
|
66
|
+
}
|
|
67
|
+
index = i;
|
|
68
|
+
try {
|
|
69
|
+
if (i < middleware.length) {
|
|
70
|
+
return await middleware[i](response, () => dispatch(i + 1));
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return await next();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
return dispatch(0);
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Execute request middleware pipeline
|
|
85
|
+
*/
|
|
86
|
+
async executeRequestMiddleware(config, next) {
|
|
87
|
+
if (this.requestMiddleware.length === 0) {
|
|
88
|
+
return next();
|
|
89
|
+
}
|
|
90
|
+
const composed = this.composeRequest();
|
|
91
|
+
return composed(config, next);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Execute response middleware pipeline
|
|
95
|
+
*/
|
|
96
|
+
async executeResponseMiddleware(response, next) {
|
|
97
|
+
if (this.responseMiddleware.length === 0) {
|
|
98
|
+
return next();
|
|
99
|
+
}
|
|
100
|
+
const composed = this.composeResponse();
|
|
101
|
+
return composed(response, next);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Clear all middleware
|
|
105
|
+
*/
|
|
106
|
+
clear() {
|
|
107
|
+
this.requestMiddleware = [];
|
|
108
|
+
this.responseMiddleware = [];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get registered middleware count
|
|
112
|
+
*/
|
|
113
|
+
getMiddlewareCount() {
|
|
114
|
+
return {
|
|
115
|
+
request: this.requestMiddleware.length,
|
|
116
|
+
response: this.responseMiddleware.length
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.MiddlewarePipeline = MiddlewarePipeline;
|
|
121
|
+
exports.default = MiddlewarePipeline;
|
|
122
|
+
//# sourceMappingURL=MiddlewarePipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiddlewarePipeline.js","sourceRoot":"","sources":["../../src/middleware/MiddlewarePipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function compose(middleware: any[]): (context: any) => Promise<any>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compose = compose;
|
|
4
|
+
function compose(middleware) {
|
|
5
|
+
return function (context) {
|
|
6
|
+
let index = -1;
|
|
7
|
+
function dispatch(i) {
|
|
8
|
+
if (i <= index) {
|
|
9
|
+
return Promise.reject(new Error("next() called multiple times"));
|
|
10
|
+
}
|
|
11
|
+
index = i;
|
|
12
|
+
const fn = middleware[i];
|
|
13
|
+
if (!fn)
|
|
14
|
+
return Promise.resolve();
|
|
15
|
+
try {
|
|
16
|
+
return Promise.resolve(fn(context, () => dispatch(i + 1)));
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
return Promise.reject(err);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return dispatch(0);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/middleware/compose.ts"],"names":[],"mappings":";;AAAA,0BAgCC;AAhCD,SAAgB,OAAO,CAAC,UAAiB;IAEvC,OAAO,UAAU,OAAY;QAE3B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;QAEd,SAAS,QAAQ,CAAC,CAAS;YAEzB,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;gBACf,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAA;YAClE,CAAC;YAED,KAAK,GAAG,CAAC,CAAA;YAET,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YAExB,IAAI,CAAC,EAAE;gBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;YAEjC,IAAI,CAAC;gBACH,OAAO,OAAO,CAAC,OAAO,CACpB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CACnC,CAAA;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC5B,CAAC;QAEH,CAAC;QAED,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;IAEpB,CAAC,CAAA;AAEH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class MiddlewareManager {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.middlewares = [];
|
|
6
|
+
}
|
|
7
|
+
use(fn) {
|
|
8
|
+
this.middlewares.push(fn);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.default = MiddlewareManager;
|
|
12
|
+
//# sourceMappingURL=middlewareManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewareManager.js","sourceRoot":"","sources":["../../src/middleware/middlewareManager.ts"],"names":[],"mappings":";;AAAA,MAAqB,iBAAiB;IAAtC;QAEE,gBAAW,GAAU,EAAE,CAAA;IAMzB,CAAC;IAJC,GAAG,CAAC,EAAO;QACT,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;CAEF;AARD,oCAQC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { AziosPlugin } from '../types/plugin';
|
|
2
|
+
import type { AziosInstance } from '../types/request';
|
|
3
|
+
import type { AziosRequestConfig } from '../types/config';
|
|
4
|
+
import type { AziosResponse } from '../types/response';
|
|
5
|
+
/**
|
|
6
|
+
* PluginManager handles plugin lifecycle and hook execution
|
|
7
|
+
* Production-grade plugin system with error handling and validation
|
|
8
|
+
*/
|
|
9
|
+
export default class PluginManager {
|
|
10
|
+
private plugins;
|
|
11
|
+
/**
|
|
12
|
+
* Install a plugin and trigger its onInstall hook
|
|
13
|
+
* @throws Error if plugin name is already registered
|
|
14
|
+
*/
|
|
15
|
+
install(plugin: AziosPlugin, instance: AziosInstance): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Uninstall a plugin and trigger its onUninstall hook
|
|
18
|
+
*/
|
|
19
|
+
uninstall(pluginName: string, instance: AziosInstance): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Execute beforeRequest hooks from all plugins
|
|
22
|
+
*/
|
|
23
|
+
executeBeforeRequestHooks(config: AziosRequestConfig): Promise<AziosRequestConfig>;
|
|
24
|
+
/**
|
|
25
|
+
* Execute afterResponse hooks from all plugins
|
|
26
|
+
*/
|
|
27
|
+
executeAfterResponseHooks(response: AziosResponse): Promise<AziosResponse>;
|
|
28
|
+
/**
|
|
29
|
+
* Execute onError hooks from all plugins
|
|
30
|
+
*/
|
|
31
|
+
executeOnErrorHooks(error: Error): Promise<Error>;
|
|
32
|
+
/**
|
|
33
|
+
* Get all currently installed plugins
|
|
34
|
+
*/
|
|
35
|
+
getInstalledPlugins(): AziosPlugin[];
|
|
36
|
+
/**
|
|
37
|
+
* Check if a plugin is installed
|
|
38
|
+
*/
|
|
39
|
+
isPluginInstalled(name: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Clear all plugins
|
|
42
|
+
*/
|
|
43
|
+
clear(): void;
|
|
44
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* PluginManager handles plugin lifecycle and hook execution
|
|
5
|
+
* Production-grade plugin system with error handling and validation
|
|
6
|
+
*/
|
|
7
|
+
class PluginManager {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.plugins = {};
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Install a plugin and trigger its onInstall hook
|
|
13
|
+
* @throws Error if plugin name is already registered
|
|
14
|
+
*/
|
|
15
|
+
async install(plugin, instance) {
|
|
16
|
+
if (this.plugins[plugin.name]) {
|
|
17
|
+
throw new Error(`Plugin "${plugin.name}" is already installed`);
|
|
18
|
+
}
|
|
19
|
+
this.plugins[plugin.name] = plugin;
|
|
20
|
+
try {
|
|
21
|
+
if (plugin.hooks.onInstall) {
|
|
22
|
+
await plugin.hooks.onInstall(instance);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
// Rollback on error
|
|
27
|
+
delete this.plugins[plugin.name];
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Uninstall a plugin and trigger its onUninstall hook
|
|
33
|
+
*/
|
|
34
|
+
async uninstall(pluginName, instance) {
|
|
35
|
+
const plugin = this.plugins[pluginName];
|
|
36
|
+
if (!plugin) {
|
|
37
|
+
throw new Error(`Plugin "${pluginName}" is not installed`);
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
if (plugin.hooks.onUninstall) {
|
|
41
|
+
await plugin.hooks.onUninstall(instance);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
delete this.plugins[pluginName];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Execute beforeRequest hooks from all plugins
|
|
50
|
+
*/
|
|
51
|
+
async executeBeforeRequestHooks(config) {
|
|
52
|
+
let result = config;
|
|
53
|
+
for (const plugin of Object.values(this.plugins)) {
|
|
54
|
+
if (plugin.hooks.beforeRequest) {
|
|
55
|
+
try {
|
|
56
|
+
result = await plugin.hooks.beforeRequest(result);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
throw new Error(`Plugin "${plugin.name}" beforeRequest hook failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Execute afterResponse hooks from all plugins
|
|
67
|
+
*/
|
|
68
|
+
async executeAfterResponseHooks(response) {
|
|
69
|
+
let result = response;
|
|
70
|
+
for (const plugin of Object.values(this.plugins)) {
|
|
71
|
+
if (plugin.hooks.afterResponse) {
|
|
72
|
+
try {
|
|
73
|
+
result = await plugin.hooks.afterResponse(result);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
throw new Error(`Plugin "${plugin.name}" afterResponse hook failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Execute onError hooks from all plugins
|
|
84
|
+
*/
|
|
85
|
+
async executeOnErrorHooks(error) {
|
|
86
|
+
let result = error;
|
|
87
|
+
for (const plugin of Object.values(this.plugins)) {
|
|
88
|
+
if (plugin.hooks.onError) {
|
|
89
|
+
try {
|
|
90
|
+
result = await plugin.hooks.onError(result);
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
// Log but don't throw - error handlers should not crash
|
|
94
|
+
console.warn(`Plugin "${plugin.name}" onError hook failed:`, err instanceof Error ? err.message : String(err));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get all currently installed plugins
|
|
102
|
+
*/
|
|
103
|
+
getInstalledPlugins() {
|
|
104
|
+
return Object.values(this.plugins);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if a plugin is installed
|
|
108
|
+
*/
|
|
109
|
+
isPluginInstalled(name) {
|
|
110
|
+
return name in this.plugins;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Clear all plugins
|
|
114
|
+
*/
|
|
115
|
+
clear() {
|
|
116
|
+
this.plugins = {};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.default = PluginManager;
|
|
120
|
+
//# sourceMappingURL=pluginManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManager.js","sourceRoot":"","sources":["../../src/plugins/pluginManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { HttpAdapter } from './HttpAdapter';
|
|
2
|
+
import { RuntimeType } from './detectRuntime';
|
|
3
|
+
/**
|
|
4
|
+
* Adapter factory for selecting the appropriate HTTP adapter
|
|
5
|
+
* Uses universal Fetch API when available with fallbacks for specific runtimes
|
|
6
|
+
*/
|
|
7
|
+
export declare class AdapterFactory {
|
|
8
|
+
private static adapters;
|
|
9
|
+
/**
|
|
10
|
+
* Get or create adapter for current runtime
|
|
11
|
+
*/
|
|
12
|
+
static getAdapter(): HttpAdapter;
|
|
13
|
+
/**
|
|
14
|
+
* Register custom adapter for specific runtime
|
|
15
|
+
*/
|
|
16
|
+
static registerAdapter(runtime: RuntimeType, adapter: HttpAdapter): void;
|
|
17
|
+
/**
|
|
18
|
+
* Clear adapter cache
|
|
19
|
+
*/
|
|
20
|
+
static clearCache(): void;
|
|
21
|
+
}
|
|
22
|
+
export default AdapterFactory;
|