vigor-fetch 1.0.9 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,6 +7,7 @@
7
7
  - 🛡️ **Smart Resilience:** Automatically handles 429 errors by respecting `Retry-After` headers.
8
8
  - 📈 **Exponential Backoff & Jitter:** Prevents server hammering by increasing wait times with random variation.
9
9
  - ⚡ **Zero Dependencies:** Built using native Fetch API and AbortController.
10
+ - ⚡ **Tiny footprint** (~3 KB)
10
11
  - 🎯 **Fully Type-Safe:** Written in TypeScript for excellent developer experience and auto-completion.
11
12
  - 🚦 **Concurrency Control**: Execute bulk requests with a global limit and inter-request jitter using the VigorAll engine.
12
13
  - 🎯 **Immutable Chaining**: Every configuration method returns a new instance, making it perfect for base templates and functional patterns.
@@ -18,14 +19,34 @@ npm install vigor-fetch
18
19
 
19
20
  ```
20
21
 
22
+ ## Why Vigor?
23
+
24
+ | Feature | Vigor | Axios | Native fetch |
25
+ |-------|------|------|-------------|
26
+ | Built-in Retry | ✅ | ❌ | ❌ |
27
+ | Rate-limit handling | ✅ | ❌ | ❌ |
28
+ | Concurrency control | ✅ | ❌ | ❌ |
29
+ | Zero dependencies | ✅ | ❌ | ✅ |
30
+ | Immutable request builder | ✅ | ❌ | ❌ |
31
+
32
+ ## Use Cases
33
+
34
+ **Vigor is useful when:**
35
+
36
+ - Your API frequently returns 429 (Too Many Requests)
37
+ - You need automatic retry with exponential backoff
38
+ - You want concurrency control for batch requests
39
+ - You prefer immutable request builders
40
+
21
41
  ## 🛠️ API References
22
42
 
23
- 1. **Vigor().fetch(origin, config)**
43
+ 1. **vigor.fetch(origin)**
24
44
 
25
45
  | Method | Type | Default | Description
26
46
  | :--- | :--- | :--- | :--- |
27
47
  | .path(arg) | string | "" | Sets the endpoint path to be appended to the origin. |
28
48
  | .query(arg) | Record<string, any> | {} | Appends key-value pairs as query parameters to the URL. |
49
+ | .method(arg) | string | "POST" | "GET" (depends on body) | Sets the HTTP request method. |
29
50
  | .headers(arg) | Record<string, string> | {} | Sets the HTTP request headers. |
30
51
  | .body(arg) | any | null | Sets the request body |
31
52
  | .offset(arg) | RequestInit | {} | Provides raw fetch options to be merged into the request. |
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -53,7 +53,11 @@ class VigorFetch {
53
53
  url: this._origin, status: 0, message: "Invalid Protocol"
54
54
  });
55
55
  }
56
- const urlObj = new URL(path.replace(/^\//, ""), this._origin + "/");
56
+ const originBase = this._origin.endsWith('/') ? this._origin : this._origin + '/';
57
+ const cleanPath = path.replace(/^\//, "");
58
+ const urlObj = cleanPath
59
+ ? new URL(cleanPath, originBase)
60
+ : new URL(this._origin);
57
61
  Object.entries(query).forEach(([key, value]) => {
58
62
  if (value !== null && value !== undefined)
59
63
  urlObj.searchParams.append(key, String(value));
package/dist/index.mjs CHANGED
@@ -51,7 +51,11 @@ class VigorFetch {
51
51
  url: this._origin, status: 0, message: "Invalid Protocol"
52
52
  });
53
53
  }
54
- const urlObj = new URL(path.replace(/^\//, ""), this._origin + "/");
54
+ const originBase = this._origin.endsWith('/') ? this._origin : this._origin + '/';
55
+ const cleanPath = path.replace(/^\//, "");
56
+ const urlObj = cleanPath
57
+ ? new URL(cleanPath, originBase)
58
+ : new URL(this._origin);
55
59
  Object.entries(query).forEach(([key, value]) => {
56
60
  if (value !== null && value !== undefined)
57
61
  urlObj.searchParams.append(key, String(value));
package/package.json CHANGED
@@ -1,10 +1,14 @@
1
1
  {
2
2
  "name": "vigor-fetch",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "description": "Smart, zero-dependency HTTP client with self-healing retries for rate-limited servers.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/Uav3537/Vigor"
11
+ },
8
12
  "exports": {
9
13
  ".": {
10
14
  "types": "./dist/index.d.ts",
@@ -14,19 +18,23 @@
14
18
  },
15
19
  "scripts": {
16
20
  "prebuild": "rimraf dist",
17
- "build": "rollup -c"
21
+ "build": "rollup -c",
22
+ "save": "node commit.js"
18
23
  },
19
24
  "files": [
20
25
  "dist"
21
26
  ],
22
27
  "keywords": [
23
28
  "fetch",
24
- "PromiseAll",
29
+ "fetch retry",
30
+ "concurrency",
25
31
  "retry",
26
32
  "backoff",
27
33
  "ratelimit",
34
+ "hooks",
28
35
  "typescript",
29
- "zero-dependency"
36
+ "zero-dependency",
37
+ "resilient HTTP client"
30
38
  ],
31
39
  "author": "Uav1010",
32
40
  "license": "MIT",