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.
Files changed (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +92 -267
  3. package/dist/cache/memoryCache.d.ts +1 -0
  4. package/dist/cache/memoryCache.js +7 -1
  5. package/dist/cache/memoryCache.js.map +1 -1
  6. package/dist/core/Azios.d.ts +33 -8
  7. package/dist/core/Azios.js +68 -2
  8. package/dist/core/Azios.js.map +1 -1
  9. package/dist/core/dispatchRequest.js +10 -75
  10. package/dist/core/dispatchRequest.js.map +1 -1
  11. package/dist/index.d.ts +15 -0
  12. package/dist/index.js +50 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/middleware/MiddlewarePipeline.d.ts +54 -0
  15. package/dist/middleware/MiddlewarePipeline.js +122 -0
  16. package/dist/middleware/MiddlewarePipeline.js.map +1 -0
  17. package/dist/middleware/compose.d.ts +1 -0
  18. package/dist/middleware/compose.js +25 -0
  19. package/dist/middleware/compose.js.map +1 -0
  20. package/dist/middleware/middlewareManager.d.ts +4 -0
  21. package/dist/middleware/middlewareManager.js +12 -0
  22. package/dist/middleware/middlewareManager.js.map +1 -0
  23. package/dist/plugins/pluginManager.d.ts +44 -0
  24. package/dist/plugins/pluginManager.js +120 -0
  25. package/dist/plugins/pluginManager.js.map +1 -0
  26. package/dist/runtimes/AdapterFactory.d.ts +22 -0
  27. package/dist/runtimes/AdapterFactory.js +43 -0
  28. package/dist/runtimes/AdapterFactory.js.map +1 -0
  29. package/dist/runtimes/HttpAdapter.d.ts +23 -0
  30. package/dist/runtimes/HttpAdapter.js +10 -0
  31. package/dist/runtimes/HttpAdapter.js.map +1 -0
  32. package/dist/runtimes/UniversalHttpAdapter.d.ts +19 -0
  33. package/dist/runtimes/UniversalHttpAdapter.js +114 -0
  34. package/dist/runtimes/UniversalHttpAdapter.js.map +1 -0
  35. package/dist/runtimes/detectRuntime.d.ts +34 -0
  36. package/dist/runtimes/detectRuntime.js +77 -0
  37. package/dist/runtimes/detectRuntime.js.map +1 -0
  38. package/dist/types/index.d.ts +5 -0
  39. package/dist/types/index.js +22 -0
  40. package/dist/types/index.js.map +1 -0
  41. package/dist/types/middleware.d.ts +16 -0
  42. package/dist/types/middleware.js +3 -0
  43. package/dist/types/middleware.js.map +1 -0
  44. package/dist/types/plugin.d.ts +43 -0
  45. package/dist/types/plugin.js +3 -0
  46. package/dist/types/plugin.js.map +1 -0
  47. package/dist/types/request.d.ts +5 -0
  48. package/dist/types/response.d.ts +23 -1
  49. package/package.json +24 -5
  50. package/src/adapters/httpAdapter.ts +0 -0
  51. package/src/adapters/index.ts +0 -0
  52. package/src/adapters/xhrAdapter.ts +0 -0
  53. package/src/cache/memoryCache.ts +45 -0
  54. package/src/config/mergeConfig.ts +0 -0
  55. package/src/core/Azios.ts +184 -0
  56. package/src/core/createInstance.ts +23 -0
  57. package/src/core/dispatchRequest.ts +111 -0
  58. package/src/core/requestMethods.ts +0 -0
  59. package/src/core/requestStore.ts +13 -0
  60. package/src/errors/AziosError.ts +26 -0
  61. package/src/helpers/buildURL.ts +44 -0
  62. package/src/helpers/normalizeHeaders.ts +0 -0
  63. package/src/helpers/parseHeaders.ts +0 -0
  64. package/src/index.ts +64 -0
  65. package/src/interceptors/InterceptorManager.ts +30 -0
  66. package/src/middleware/MiddlewarePipeline.ts +155 -0
  67. package/src/middleware/compose.ts +33 -0
  68. package/src/middleware/middlewareManager.ts +9 -0
  69. package/src/plugins/pluginManager.ts +143 -0
  70. package/src/rateLimiter/rateLimiter.ts +36 -0
  71. package/src/runtimes/AdapterFactory.ts +46 -0
  72. package/src/runtimes/HttpAdapter.ts +26 -0
  73. package/src/runtimes/UniversalHttpAdapter.ts +136 -0
  74. package/src/runtimes/detectRuntime.ts +85 -0
  75. package/src/types/config.ts +30 -0
  76. package/src/types/index.ts +5 -0
  77. package/src/types/middleware.ts +21 -0
  78. package/src/types/plugin.ts +50 -0
  79. package/src/types/request.ts +39 -0
  80. package/src/types/response.ts +37 -0
@@ -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"}
@@ -0,0 +1,5 @@
1
+ export * from './config';
2
+ export * from './request';
3
+ export * from './response';
4
+ export * from './plugin';
5
+ export * from './middleware';
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/types/middleware.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ import { AziosRequestConfig } from './config';
2
+ import { AziosResponse } from './response';
3
+ import type { AziosInstance } from './request';
4
+ /**
5
+ * Plugin lifecycle hooks
6
+ * Allows plugins to inject behavior at various stages of the request/response pipeline
7
+ */
8
+ export interface PluginHooks {
9
+ /**
10
+ * Called when plugin is installed
11
+ */
12
+ onInstall?(instance: AziosInstance): void | Promise<void>;
13
+ /**
14
+ * Called before request is sent
15
+ */
16
+ beforeRequest?(config: AziosRequestConfig): AziosRequestConfig | Promise<AziosRequestConfig>;
17
+ /**
18
+ * Called after response is received
19
+ */
20
+ afterResponse?(response: AziosResponse): AziosResponse | Promise<AziosResponse>;
21
+ /**
22
+ * Called when an error occurs
23
+ */
24
+ onError?(error: Error): Error | Promise<Error>;
25
+ /**
26
+ * Called when plugin is uninstalled
27
+ */
28
+ onUninstall?(instance: AziosInstance): void | Promise<void>;
29
+ }
30
+ /**
31
+ * Plugin definition with metadata
32
+ */
33
+ export interface AziosPlugin {
34
+ name: string;
35
+ version?: string;
36
+ hooks: PluginHooks;
37
+ }
38
+ /**
39
+ * Plugin registry to track installed plugins
40
+ */
41
+ export interface PluginRegistry {
42
+ [key: string]: AziosPlugin;
43
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/types/plugin.ts"],"names":[],"mappings":""}
@@ -1,6 +1,8 @@
1
1
  import { AziosRequestConfig } from "./config";
2
2
  import { AziosResponse } from "./response";
3
3
  import InterceptorManager from "../interceptors/InterceptorManager";
4
+ import type { AziosPlugin } from "./plugin";
5
+ import type { AziosMiddleware } from "./middleware";
4
6
  export interface AziosInstance {
5
7
  (config: AziosRequestConfig): Promise<AziosResponse>;
6
8
  request(config: AziosRequestConfig): Promise<AziosResponse>;
@@ -15,4 +17,7 @@ export interface AziosInstance {
15
17
  request: InterceptorManager<AziosRequestConfig>;
16
18
  response: InterceptorManager<AziosResponse>;
17
19
  };
20
+ installPlugin(plugin: AziosPlugin): Promise<void>;
21
+ uninstallPlugin(name: string): Promise<void>;
22
+ use(middleware: AziosMiddleware): void;
18
23
  }
@@ -1,9 +1,31 @@
1
1
  import { AziosRequestConfig } from "./config";
2
+ /**
3
+ * Azios HTTP response object
4
+ * Returned by all request methods
5
+ */
2
6
  export interface AziosResponse<T = any> {
7
+ /**
8
+ * Response data (parsed if JSON)
9
+ */
3
10
  data: T;
11
+ /**
12
+ * HTTP status code
13
+ */
4
14
  status: number;
15
+ /**
16
+ * HTTP status text
17
+ */
5
18
  statusText: string;
6
- headers: any;
19
+ /**
20
+ * Response headers
21
+ */
22
+ headers: Record<string, any>;
23
+ /**
24
+ * Original request config
25
+ */
7
26
  config: AziosRequestConfig;
27
+ /**
28
+ * Native request object (if available)
29
+ */
8
30
  request?: any;
9
31
  }
package/package.json CHANGED
@@ -1,21 +1,37 @@
1
1
  {
2
2
  "name": "aziosxjs",
3
- "version": "0.4.1",
4
- "description": "Lightweight HTTP client inspired by axios",
3
+ "version": "1.0.0",
4
+ "description": "Lightweight, predictable HTTP client with plugins, middleware, and universal runtime support",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "scripts": {
8
- "build": "tsc"
8
+ "build": "tsc",
9
+ "test": "ts-node tests/all.test.ts",
10
+ "test:sprint1": "ts-node examples/sprint2.ts",
11
+ "test:sprint2": "ts-node examples/sprint2.ts",
12
+ "test:sprint3": "ts-node examples/sprint3.ts",
13
+ "test:sprint4": "ts-node examples/sprint4.ts",
14
+ "test:sprint5:plugins": "ts-node examples/sprint5-plugins.ts",
15
+ "test:sprint5:middleware": "ts-node examples/sprint5-middleware.ts",
16
+ "test:sprint7": "ts-node examples/sprint7-universal.ts",
17
+ "prepublishOnly": "npm run build"
9
18
  },
10
19
  "files": [
11
- "dist"
20
+ "dist",
21
+ "src"
12
22
  ],
13
23
  "keywords": [
14
24
  "http",
15
25
  "client",
16
26
  "axios",
17
27
  "request",
18
- "nodejs"
28
+ "nodejs",
29
+ "browser",
30
+ "universal",
31
+ "plugin",
32
+ "middleware",
33
+ "lightweight",
34
+ "typescript"
19
35
  ],
20
36
  "author": "Azeem Ali",
21
37
  "license": "MIT",
@@ -26,5 +42,8 @@
26
42
  "homepage": "https://github.com/azeemali2001/azios",
27
43
  "bugs": {
28
44
  "url": "https://github.com/azeemali2001/azios/issues"
45
+ },
46
+ "devDependencies": {
47
+ "typescript": "^5.0.0"
29
48
  }
30
49
  }
File without changes
File without changes
File without changes
@@ -0,0 +1,45 @@
1
+ type CacheEntry = {
2
+ data: any
3
+ expiry: number
4
+ }
5
+
6
+ const cache = new Map<string, CacheEntry>()
7
+
8
+ export function getCache(key: string) {
9
+
10
+ const entry = cache.get(key)
11
+
12
+ if (!entry) return null
13
+
14
+ // remove expired cache
15
+ if (Date.now() > entry.expiry) {
16
+ cache.delete(key)
17
+ return null
18
+ }
19
+
20
+ return entry.data
21
+
22
+ }
23
+
24
+ export function setCache(
25
+ key: string,
26
+ value: any,
27
+ ttl: number = 5000
28
+ ) {
29
+
30
+ const expiry = Date.now() + ttl
31
+
32
+ cache.set(key, {
33
+ data: value,
34
+ expiry
35
+ })
36
+
37
+ }
38
+
39
+ export function clearCache(key: string) {
40
+ cache.delete(key)
41
+ }
42
+
43
+ export function clearAllCache() {
44
+ cache.clear()
45
+ }
File without changes