aziosxjs 0.4.0 → 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 +4 -0
- package/dist/cache/memoryCache.js +32 -0
- package/dist/cache/memoryCache.js.map +1 -0
- package/dist/core/Azios.d.ts +33 -3
- package/dist/core/Azios.js +119 -2
- package/dist/core/Azios.js.map +1 -1
- package/dist/core/createInstance.js +3 -0
- package/dist/core/createInstance.js.map +1 -1
- package/dist/core/dispatchRequest.d.ts +1 -2
- package/dist/core/dispatchRequest.js +68 -42
- package/dist/core/dispatchRequest.js.map +1 -1
- package/dist/core/requestStore.d.ts +3 -0
- package/dist/core/requestStore.js +16 -0
- package/dist/core/requestStore.js.map +1 -0
- package/dist/errors/AziosError.d.ts +2 -2
- package/dist/errors/AziosError.js +6 -3
- package/dist/errors/AziosError.js.map +1 -1
- package/dist/helpers/buildURL.d.ts +1 -0
- package/dist/helpers/buildURL.js +27 -0
- package/dist/helpers/buildURL.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/rateLimiter/rateLimiter.d.ts +1 -0
- package/dist/rateLimiter/rateLimiter.js +31 -0
- package/dist/rateLimiter/rateLimiter.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/config.d.ts +8 -1
- 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 +15 -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
|
@@ -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 @@
|
|
|
1
|
+
export declare function schedule(task: Function, limit: number): Promise<unknown>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.schedule = schedule;
|
|
4
|
+
let queue = [];
|
|
5
|
+
let activeRequests = 0;
|
|
6
|
+
function schedule(task, limit) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const run = async () => {
|
|
9
|
+
activeRequests++;
|
|
10
|
+
try {
|
|
11
|
+
const result = await task();
|
|
12
|
+
resolve(result);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
reject(err);
|
|
16
|
+
}
|
|
17
|
+
activeRequests--;
|
|
18
|
+
if (queue.length) {
|
|
19
|
+
const next = queue.shift();
|
|
20
|
+
next && next();
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
if (activeRequests < limit) {
|
|
24
|
+
run();
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
queue.push(run);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=rateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../src/rateLimiter/rateLimiter.ts"],"names":[],"mappings":";;AAGA,4BAgCC;AAnCD,IAAI,KAAK,GAAe,EAAE,CAAC;AAC3B,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB,SAAgB,QAAQ,CAAC,IAAc,EAAE,KAAa;IAEpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAErC,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YAErB,cAAc,EAAE,CAAC;YAEjB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;YAED,cAAc,EAAE,CAAC;YAEjB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,CAAC;QAEH,CAAC,CAAC;QAEF,IAAI,cAAc,GAAG,KAAK,EAAE,CAAC;YAC3B,GAAG,EAAE,CAAC;QACR,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IAEH,CAAC,CAAC,CAAC;AAEL,CAAC"}
|
|
@@ -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;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AdapterFactory = void 0;
|
|
7
|
+
const detectRuntime_1 = require("./detectRuntime");
|
|
8
|
+
const UniversalHttpAdapter_1 = __importDefault(require("./UniversalHttpAdapter"));
|
|
9
|
+
/**
|
|
10
|
+
* Adapter factory for selecting the appropriate HTTP adapter
|
|
11
|
+
* Uses universal Fetch API when available with fallbacks for specific runtimes
|
|
12
|
+
*/
|
|
13
|
+
class AdapterFactory {
|
|
14
|
+
/**
|
|
15
|
+
* Get or create adapter for current runtime
|
|
16
|
+
*/
|
|
17
|
+
static getAdapter() {
|
|
18
|
+
if (!this.adapters.has(detectRuntime_1.currentRuntime)) {
|
|
19
|
+
this.adapters.set(detectRuntime_1.currentRuntime, new UniversalHttpAdapter_1.default());
|
|
20
|
+
}
|
|
21
|
+
const adapter = this.adapters.get(detectRuntime_1.currentRuntime);
|
|
22
|
+
if (!adapter.isSupported()) {
|
|
23
|
+
throw new Error(`No supported HTTP adapter found for runtime: ${detectRuntime_1.currentRuntime}`);
|
|
24
|
+
}
|
|
25
|
+
return adapter;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Register custom adapter for specific runtime
|
|
29
|
+
*/
|
|
30
|
+
static registerAdapter(runtime, adapter) {
|
|
31
|
+
this.adapters.set(runtime, adapter);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Clear adapter cache
|
|
35
|
+
*/
|
|
36
|
+
static clearCache() {
|
|
37
|
+
this.adapters.clear();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.AdapterFactory = AdapterFactory;
|
|
41
|
+
AdapterFactory.adapters = new Map();
|
|
42
|
+
exports.default = AdapterFactory;
|
|
43
|
+
//# sourceMappingURL=AdapterFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdapterFactory.js","sourceRoot":"","sources":["../../src/runtimes/AdapterFactory.ts"],"names":[],"mappings":";;;;;;AACA,mDAA6D;AAC7D,kFAAyD;AAEzD;;;GAGG;AACH,MAAa,cAAc;IAGzB;;OAEG;IACH,MAAM,CAAC,UAAU;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,8BAAc,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,8BAAc,EAAE,IAAI,8BAAoB,EAAE,CAAC,CAAA;QAC/D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,8BAAc,CAAE,CAAA;QAElD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,gDAAgD,8BAAc,EAAE,CACjE,CAAA;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,OAAoB,EAAE,OAAoB;QAC/D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU;QACf,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;;AAlCH,wCAmCC;AAlCgB,uBAAQ,GAAkC,IAAI,GAAG,EAAE,CAAA;AAoCpE,kBAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AziosRequestConfig } from '../types/config';
|
|
2
|
+
import type { AziosResponse } from '../types/response';
|
|
3
|
+
/**
|
|
4
|
+
* Universal HTTP adapter interface
|
|
5
|
+
* Abstracts HTTP functionality across different runtimes
|
|
6
|
+
*/
|
|
7
|
+
export interface HttpAdapter {
|
|
8
|
+
/**
|
|
9
|
+
* Execute an HTTP request
|
|
10
|
+
*/
|
|
11
|
+
request(config: AziosRequestConfig): Promise<AziosResponse>;
|
|
12
|
+
/**
|
|
13
|
+
* Method to check if adapter supports the current runtime
|
|
14
|
+
*/
|
|
15
|
+
isSupported(): boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Base adapter class with common logic
|
|
19
|
+
*/
|
|
20
|
+
export declare abstract class BaseAdapter implements HttpAdapter {
|
|
21
|
+
abstract request(config: AziosRequestConfig): Promise<AziosResponse>;
|
|
22
|
+
abstract isSupported(): boolean;
|
|
23
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseAdapter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Base adapter class with common logic
|
|
6
|
+
*/
|
|
7
|
+
class BaseAdapter {
|
|
8
|
+
}
|
|
9
|
+
exports.BaseAdapter = BaseAdapter;
|
|
10
|
+
//# sourceMappingURL=HttpAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpAdapter.js","sourceRoot":"","sources":["../../src/runtimes/HttpAdapter.ts"],"names":[],"mappings":";;;AAmBA;;GAEG;AACH,MAAsB,WAAW;CAGhC;AAHD,kCAGC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AziosRequestConfig } from '../types/config';
|
|
2
|
+
import type { AziosResponse } from '../types/response';
|
|
3
|
+
import { BaseAdapter } from './HttpAdapter';
|
|
4
|
+
/**
|
|
5
|
+
* Unified HTTP adapter using Fetch API
|
|
6
|
+
* Works across Node 18+, browsers, Bun, Deno, and edge runtimes
|
|
7
|
+
* Falls back to runtime-specific implementations if needed
|
|
8
|
+
*/
|
|
9
|
+
export declare class UniversalHttpAdapter extends BaseAdapter {
|
|
10
|
+
/**
|
|
11
|
+
* Check if Fetch API is available
|
|
12
|
+
*/
|
|
13
|
+
isSupported(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Execute HTTP request using Fetch API
|
|
16
|
+
*/
|
|
17
|
+
request(config: AziosRequestConfig): Promise<AziosResponse>;
|
|
18
|
+
}
|
|
19
|
+
export default UniversalHttpAdapter;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.UniversalHttpAdapter = void 0;
|
|
7
|
+
const HttpAdapter_1 = require("./HttpAdapter");
|
|
8
|
+
const AziosError_1 = __importDefault(require("../errors/AziosError"));
|
|
9
|
+
/**
|
|
10
|
+
* Unified HTTP adapter using Fetch API
|
|
11
|
+
* Works across Node 18+, browsers, Bun, Deno, and edge runtimes
|
|
12
|
+
* Falls back to runtime-specific implementations if needed
|
|
13
|
+
*/
|
|
14
|
+
class UniversalHttpAdapter extends HttpAdapter_1.BaseAdapter {
|
|
15
|
+
/**
|
|
16
|
+
* Check if Fetch API is available
|
|
17
|
+
*/
|
|
18
|
+
isSupported() {
|
|
19
|
+
return typeof fetch !== 'undefined';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute HTTP request using Fetch API
|
|
23
|
+
*/
|
|
24
|
+
async request(config) {
|
|
25
|
+
if (!this.isSupported()) {
|
|
26
|
+
throw new AziosError_1.default('Fetch API is not available in this runtime', 'UNSUPPORTED_RUNTIME', config);
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const { url, method = 'GET', headers, data, timeout, signal } = config;
|
|
30
|
+
const baseURL = config.baseURL ? config.baseURL : '';
|
|
31
|
+
const fullURL = new URL(baseURL + url);
|
|
32
|
+
// Add query parameters
|
|
33
|
+
if (config.params) {
|
|
34
|
+
Object.entries(config.params).forEach(([key, value]) => {
|
|
35
|
+
if (value !== null && value !== undefined) {
|
|
36
|
+
if (Array.isArray(value)) {
|
|
37
|
+
value.forEach(v => fullURL.searchParams.append(key, String(v)));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
fullURL.searchParams.set(key, String(value));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// Prepare request body
|
|
46
|
+
let body = null;
|
|
47
|
+
if (data) {
|
|
48
|
+
body = typeof data === 'string' ? data : JSON.stringify(data);
|
|
49
|
+
}
|
|
50
|
+
// Set up timeout if specified (using AbortController)
|
|
51
|
+
let timeoutId;
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const finalSignal = signal || controller.signal;
|
|
54
|
+
if (timeout) {
|
|
55
|
+
timeoutId = setTimeout(() => {
|
|
56
|
+
controller.abort();
|
|
57
|
+
}, timeout);
|
|
58
|
+
}
|
|
59
|
+
// Execute fetch
|
|
60
|
+
const response = await fetch(fullURL.toString(), {
|
|
61
|
+
method,
|
|
62
|
+
headers: {
|
|
63
|
+
'Content-Type': 'application/json',
|
|
64
|
+
...headers
|
|
65
|
+
},
|
|
66
|
+
body,
|
|
67
|
+
signal: finalSignal
|
|
68
|
+
});
|
|
69
|
+
if (timeoutId) {
|
|
70
|
+
clearTimeout(timeoutId);
|
|
71
|
+
}
|
|
72
|
+
// Parse response body
|
|
73
|
+
let responseData;
|
|
74
|
+
if (response.status === 204) {
|
|
75
|
+
// No content
|
|
76
|
+
responseData = null;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const contentType = response.headers.get('content-type');
|
|
80
|
+
if (contentType === null || contentType === void 0 ? void 0 : contentType.includes('application/json')) {
|
|
81
|
+
try {
|
|
82
|
+
responseData = await response.json();
|
|
83
|
+
}
|
|
84
|
+
catch (_a) {
|
|
85
|
+
responseData = await response.text();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
responseData = await response.text();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const aziosResponse = {
|
|
93
|
+
data: responseData,
|
|
94
|
+
status: response.status,
|
|
95
|
+
statusText: response.statusText,
|
|
96
|
+
headers: Object.fromEntries(response.headers.entries()),
|
|
97
|
+
config
|
|
98
|
+
};
|
|
99
|
+
return aziosResponse;
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
if (err instanceof TypeError && err.message.includes('aborted')) {
|
|
103
|
+
throw new AziosError_1.default('Request aborted', 'ABORTED', config);
|
|
104
|
+
}
|
|
105
|
+
if (err instanceof AziosError_1.default) {
|
|
106
|
+
throw err;
|
|
107
|
+
}
|
|
108
|
+
throw new AziosError_1.default(err instanceof Error ? err.message : 'Network request failed', 'NETWORK_ERROR', config, undefined, err instanceof Error ? err : new Error(String(err)));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.UniversalHttpAdapter = UniversalHttpAdapter;
|
|
113
|
+
exports.default = UniversalHttpAdapter;
|
|
114
|
+
//# sourceMappingURL=UniversalHttpAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniversalHttpAdapter.js","sourceRoot":"","sources":["../../src/runtimes/UniversalHttpAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime detection utilities
|
|
3
|
+
* Identifies the current JavaScript runtime environment
|
|
4
|
+
* Supports: Node.js, Browser, Bun, Deno, Cloudflare Workers/Edge
|
|
5
|
+
*/
|
|
6
|
+
export declare enum RuntimeType {
|
|
7
|
+
Node = "node",
|
|
8
|
+
Browser = "browser",
|
|
9
|
+
Bun = "bun",
|
|
10
|
+
Deno = "deno",
|
|
11
|
+
Edge = "edge",
|
|
12
|
+
Unknown = "unknown"
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Detects the current runtime environment
|
|
16
|
+
* Production-grade detection with reliable environment checks
|
|
17
|
+
*/
|
|
18
|
+
export declare function detectRuntime(): RuntimeType;
|
|
19
|
+
/**
|
|
20
|
+
* Get current runtime for use in adapters
|
|
21
|
+
*/
|
|
22
|
+
export declare const currentRuntime: RuntimeType;
|
|
23
|
+
/**
|
|
24
|
+
* Check if running in a specific runtime
|
|
25
|
+
*/
|
|
26
|
+
export declare function isRuntime(runtime: RuntimeType): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Check if running in server-side runtime
|
|
29
|
+
*/
|
|
30
|
+
export declare function isServerRuntime(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Check if running in browser runtime
|
|
33
|
+
*/
|
|
34
|
+
export declare function isBrowserRuntime(): boolean;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Runtime detection utilities
|
|
4
|
+
* Identifies the current JavaScript runtime environment
|
|
5
|
+
* Supports: Node.js, Browser, Bun, Deno, Cloudflare Workers/Edge
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.currentRuntime = exports.RuntimeType = void 0;
|
|
9
|
+
exports.detectRuntime = detectRuntime;
|
|
10
|
+
exports.isRuntime = isRuntime;
|
|
11
|
+
exports.isServerRuntime = isServerRuntime;
|
|
12
|
+
exports.isBrowserRuntime = isBrowserRuntime;
|
|
13
|
+
var RuntimeType;
|
|
14
|
+
(function (RuntimeType) {
|
|
15
|
+
RuntimeType["Node"] = "node";
|
|
16
|
+
RuntimeType["Browser"] = "browser";
|
|
17
|
+
RuntimeType["Bun"] = "bun";
|
|
18
|
+
RuntimeType["Deno"] = "deno";
|
|
19
|
+
RuntimeType["Edge"] = "edge";
|
|
20
|
+
RuntimeType["Unknown"] = "unknown";
|
|
21
|
+
})(RuntimeType || (exports.RuntimeType = RuntimeType = {}));
|
|
22
|
+
/**
|
|
23
|
+
* Detects the current runtime environment
|
|
24
|
+
* Production-grade detection with reliable environment checks
|
|
25
|
+
*/
|
|
26
|
+
function detectRuntime() {
|
|
27
|
+
// Check for Deno
|
|
28
|
+
if (typeof globalThis.Deno !== 'undefined') {
|
|
29
|
+
return RuntimeType.Deno;
|
|
30
|
+
}
|
|
31
|
+
// Check for Bun
|
|
32
|
+
if (typeof globalThis.Bun !== 'undefined') {
|
|
33
|
+
return RuntimeType.Bun;
|
|
34
|
+
}
|
|
35
|
+
// Check for Cloudflare Workers / Edge
|
|
36
|
+
if (typeof globalThis.caches !== 'undefined' &&
|
|
37
|
+
typeof globalThis.ENVIRONMENT !== 'undefined') {
|
|
38
|
+
return RuntimeType.Edge;
|
|
39
|
+
}
|
|
40
|
+
// Check for Node.js
|
|
41
|
+
if (typeof process !== 'undefined' &&
|
|
42
|
+
process.versions &&
|
|
43
|
+
process.versions.node) {
|
|
44
|
+
return RuntimeType.Node;
|
|
45
|
+
}
|
|
46
|
+
// Check for Browser
|
|
47
|
+
if (typeof globalThis.window !== 'undefined' && typeof globalThis.document !== 'undefined') {
|
|
48
|
+
return RuntimeType.Browser;
|
|
49
|
+
}
|
|
50
|
+
return RuntimeType.Unknown;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get current runtime for use in adapters
|
|
54
|
+
*/
|
|
55
|
+
exports.currentRuntime = detectRuntime();
|
|
56
|
+
/**
|
|
57
|
+
* Check if running in a specific runtime
|
|
58
|
+
*/
|
|
59
|
+
function isRuntime(runtime) {
|
|
60
|
+
return exports.currentRuntime === runtime;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if running in server-side runtime
|
|
64
|
+
*/
|
|
65
|
+
function isServerRuntime() {
|
|
66
|
+
return (exports.currentRuntime === RuntimeType.Node ||
|
|
67
|
+
exports.currentRuntime === RuntimeType.Bun ||
|
|
68
|
+
exports.currentRuntime === RuntimeType.Deno ||
|
|
69
|
+
exports.currentRuntime === RuntimeType.Edge);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check if running in browser runtime
|
|
73
|
+
*/
|
|
74
|
+
function isBrowserRuntime() {
|
|
75
|
+
return exports.currentRuntime === RuntimeType.Browser;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=detectRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectRuntime.js","sourceRoot":"","sources":["../../src/runtimes/detectRuntime.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAeH,sCAkCC;AAUD,8BAEC;AAKD,0CAOC;AAKD,4CAEC;AA9ED,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,4BAAa,CAAA;IACb,kCAAmB,CAAA;IACnB,0BAAW,CAAA;IACX,4BAAa,CAAA;IACb,4BAAa,CAAA;IACb,kCAAmB,CAAA;AACrB,CAAC,EAPW,WAAW,2BAAX,WAAW,QAOtB;AAED;;;GAGG;AACH,SAAgB,aAAa;IAC3B,iBAAiB;IACjB,IAAI,OAAQ,UAAkB,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACpD,OAAO,WAAW,CAAC,IAAI,CAAA;IACzB,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAQ,UAAkB,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;QACnD,OAAO,WAAW,CAAC,GAAG,CAAA;IACxB,CAAC;IAED,sCAAsC;IACtC,IACE,OAAQ,UAAkB,CAAC,MAAM,KAAK,WAAW;QACjD,OAAQ,UAAkB,CAAC,WAAW,KAAK,WAAW,EACtD,CAAC;QACD,OAAO,WAAW,CAAC,IAAI,CAAA;IACzB,CAAC;IAED,oBAAoB;IACpB,IACE,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,CAAC,QAAQ;QAChB,OAAO,CAAC,QAAQ,CAAC,IAAI,EACrB,CAAC;QACD,OAAO,WAAW,CAAC,IAAI,CAAA;IACzB,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAQ,UAAkB,CAAC,MAAM,KAAK,WAAW,IAAI,OAAQ,UAAkB,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7G,OAAO,WAAW,CAAC,OAAO,CAAA;IAC5B,CAAC;IAED,OAAO,WAAW,CAAC,OAAO,CAAA;AAC5B,CAAC;AAED;;GAEG;AACU,QAAA,cAAc,GAAG,aAAa,EAAE,CAAA;AAE7C;;GAEG;AACH,SAAgB,SAAS,CAAC,OAAoB;IAC5C,OAAO,sBAAc,KAAK,OAAO,CAAA;AACnC,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,OAAO,CACL,sBAAc,KAAK,WAAW,CAAC,IAAI;QACnC,sBAAc,KAAK,WAAW,CAAC,GAAG;QAClC,sBAAc,KAAK,WAAW,CAAC,IAAI;QACnC,sBAAc,KAAK,WAAW,CAAC,IAAI,CACpC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,OAAO,sBAAc,KAAK,WAAW,CAAC,OAAO,CAAA;AAC/C,CAAC"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
export interface AziosRequestConfig {
|
|
2
|
-
url
|
|
2
|
+
url?: string;
|
|
3
3
|
method?: string;
|
|
4
4
|
baseURL?: string;
|
|
5
5
|
headers?: Record<string, any>;
|
|
6
6
|
params?: Record<string, any>;
|
|
7
7
|
data?: any;
|
|
8
8
|
timeout?: number;
|
|
9
|
+
responseType?: string;
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
retry?: number;
|
|
12
|
+
retryDelay?: number;
|
|
13
|
+
cache?: boolean;
|
|
14
|
+
cacheTTL?: number;
|
|
15
|
+
rateLimit?: number;
|
|
9
16
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./config"), exports);
|
|
18
|
+
__exportStar(require("./request"), exports);
|
|
19
|
+
__exportStar(require("./response"), exports);
|
|
20
|
+
__exportStar(require("./plugin"), exports);
|
|
21
|
+
__exportStar(require("./middleware"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,4CAAyB;AACzB,6CAA0B;AAC1B,2CAAwB;AACxB,+CAA4B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AziosRequestConfig } from './config';
|
|
2
|
+
import { AziosResponse } from './response';
|
|
3
|
+
/**
|
|
4
|
+
* Middleware function type for request/response processing
|
|
5
|
+
* Koa-style middleware pattern that receives context and next function
|
|
6
|
+
*/
|
|
7
|
+
export type AziosMiddleware = (config: AziosRequestConfig, next: (cfg?: AziosRequestConfig) => Promise<AziosResponse>) => Promise<AziosResponse>;
|
|
8
|
+
/**
|
|
9
|
+
* Middleware context for tracking state across pipeline
|
|
10
|
+
*/
|
|
11
|
+
export interface MiddlewareContext {
|
|
12
|
+
startTime?: number;
|
|
13
|
+
endTime?: number;
|
|
14
|
+
config: AziosRequestConfig;
|
|
15
|
+
metadata?: Record<string, any>;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/types/middleware.ts"],"names":[],"mappings":""}
|