@pureq/pureq 1.0.0 → 1.0.1
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/package.json +3 -2
- package/dist/tests/client.integration.d.ts +0 -2
- package/dist/tests/client.integration.d.ts.map +0 -1
- package/dist/tests/client.integration.js +0 -44
- package/dist/tests/client.integration.js.map +0 -1
- package/dist/tests/public-api.contract.d.ts +0 -2
- package/dist/tests/public-api.contract.d.ts.map +0 -1
- package/dist/tests/public-api.contract.js +0 -14
- package/dist/tests/public-api.contract.js.map +0 -1
- package/dist/tests/retry.stress.d.ts +0 -2
- package/dist/tests/retry.stress.d.ts.map +0 -1
- package/dist/tests/retry.stress.js +0 -21
- package/dist/tests/retry.stress.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pureq/pureq",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Functional, immutable, and type-safe HTTP client layer with middleware composition.",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
"middleware",
|
|
39
39
|
"retry",
|
|
40
40
|
"circuit-breaker",
|
|
41
|
-
"typescript"
|
|
41
|
+
"typescript",
|
|
42
|
+
"security"
|
|
42
43
|
],
|
|
43
44
|
"author": "shiro-shihi",
|
|
44
45
|
"license": "MIT",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.integration.d.ts","sourceRoot":"","sources":["../../tests/client.integration.ts"],"names":[],"mappings":""}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { createClient, retry } from "../src/index";
|
|
3
|
-
describe("integration: client flow", () => {
|
|
4
|
-
afterEach(() => {
|
|
5
|
-
vi.restoreAllMocks();
|
|
6
|
-
});
|
|
7
|
-
it("composes retry + hooks + json helper in a single request flow", async () => {
|
|
8
|
-
let calls = 0;
|
|
9
|
-
const retryEvents = [];
|
|
10
|
-
const successRetryCounts = [];
|
|
11
|
-
vi.spyOn(globalThis, "fetch").mockImplementation(async () => {
|
|
12
|
-
calls += 1;
|
|
13
|
-
if (calls === 1) {
|
|
14
|
-
return new Response("temporary", { status: 500 });
|
|
15
|
-
}
|
|
16
|
-
return new Response(JSON.stringify({ id: "u1", name: "Alice" }), {
|
|
17
|
-
status: 200,
|
|
18
|
-
headers: { "content-type": "application/json" },
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
const client = createClient({
|
|
22
|
-
hooks: {
|
|
23
|
-
onRequestSuccess: (event) => {
|
|
24
|
-
successRetryCounts.push(event.retryCount);
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
}).use(retry({
|
|
28
|
-
maxRetries: 2,
|
|
29
|
-
delay: 1,
|
|
30
|
-
backoff: false,
|
|
31
|
-
onRetry: (event) => {
|
|
32
|
-
retryEvents.push(event.attempt);
|
|
33
|
-
},
|
|
34
|
-
}));
|
|
35
|
-
const user = await client.getJson("https://example.com/users/:id", {
|
|
36
|
-
params: { id: "u1" },
|
|
37
|
-
});
|
|
38
|
-
expect(user).toEqual({ id: "u1", name: "Alice" });
|
|
39
|
-
expect(calls).toBe(2);
|
|
40
|
-
expect(retryEvents).toEqual([1]);
|
|
41
|
-
expect(successRetryCounts).toEqual([1]);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
//# sourceMappingURL=client.integration.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.integration.js","sourceRoot":"","sources":["../../tests/client.integration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEnD,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,kBAAkB,GAAa,EAAE,CAAC;QAExC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;YAC1D,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;gBAC/D,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,KAAK,EAAE;gBACL,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC1B,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC5C,CAAC;aACF;SACF,CAAC,CAAC,GAAG,CACJ,KAAK,CAAC;YACJ,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;SACF,CAAC,CACH,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAA+B,+BAA+B,EAAE;YAC/F,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.contract.d.ts","sourceRoot":"","sources":["../../tests/public-api.contract.ts"],"names":[],"mappings":""}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import * as pureq from "../src/index";
|
|
3
|
-
describe("contract: public api", () => {
|
|
4
|
-
it("exports required stable surface", () => {
|
|
5
|
-
expect(typeof pureq.createClient).toBe("function");
|
|
6
|
-
expect(typeof pureq.retry).toBe("function");
|
|
7
|
-
expect(typeof pureq.compose).toBe("function");
|
|
8
|
-
expect(typeof pureq.execute).toBe("function");
|
|
9
|
-
expect(typeof pureq.executeResult).toBe("function");
|
|
10
|
-
expect(typeof pureq.HttpResponse).toBe("function");
|
|
11
|
-
expect(typeof pureq.toPureqError).toBe("function");
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
//# sourceMappingURL=public-api.contract.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.contract.js","sourceRoot":"","sources":["../../tests/public-api.contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.stress.d.ts","sourceRoot":"","sources":["../../tests/retry.stress.ts"],"names":[],"mappings":""}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { createClient, retry } from "../src/index";
|
|
3
|
-
describe("stress: retry loop", () => {
|
|
4
|
-
afterEach(() => {
|
|
5
|
-
vi.restoreAllMocks();
|
|
6
|
-
});
|
|
7
|
-
it("handles repeated request cycles without state leakage", async () => {
|
|
8
|
-
vi.spyOn(globalThis, "fetch").mockResolvedValue(new Response("ok", { status: 200 }));
|
|
9
|
-
const client = createClient().use(retry({
|
|
10
|
-
maxRetries: 1,
|
|
11
|
-
delay: 0,
|
|
12
|
-
backoff: false,
|
|
13
|
-
}));
|
|
14
|
-
const iterations = 200;
|
|
15
|
-
for (let i = 0; i < iterations; i++) {
|
|
16
|
-
const result = await client.getResult("https://example.com/ping");
|
|
17
|
-
expect(result.ok).toBe(true);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
//# sourceMappingURL=retry.stress.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.stress.js","sourceRoot":"","sources":["../../tests/retry.stress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEnD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAErF,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC,GAAG,CAC/B,KAAK,CAAC;YACJ,UAAU,EAAE,CAAC;YACb,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,KAAK;SACf,CAAC,CACH,CAAC;QAEF,MAAM,UAAU,GAAG,GAAG,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|