rauricoste-http-client 0.0.2

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.
@@ -0,0 +1,25 @@
1
+ export type HttpClientProps = {
2
+ baseUrl: string;
3
+ defaultHeaders?: Record<string, string>;
4
+ };
5
+ export type HttpCallProps = {
6
+ path: string;
7
+ method?: string;
8
+ headers?: Record<string, string>;
9
+ body?: string | null | object;
10
+ searchParams?: Record<string, string | string[]>;
11
+ };
12
+ export declare const HttpClient: ({ defaultHeaders, baseUrl, }: HttpClientProps) => {
13
+ callRaw(callProps: HttpCallProps): Promise<Response>;
14
+ call(props: HttpCallProps): Promise<string>;
15
+ build({ path, headers, method, body, searchParams, }: HttpCallProps): {
16
+ url: string;
17
+ method: string;
18
+ headers: {
19
+ [x: string]: string;
20
+ };
21
+ body: string | null;
22
+ searchParams: Record<string, string | string[]>;
23
+ };
24
+ };
25
+ export type HttpClient = ReturnType<typeof HttpClient>;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpClient = void 0;
4
+ const HttpClient = ({ defaultHeaders = {}, baseUrl, }) => {
5
+ const httpClient = {
6
+ async callRaw(callProps) {
7
+ const fetchProps = this.build(callProps);
8
+ const { url, headers, searchParams, ...rest } = fetchProps;
9
+ const method = fetchProps.method;
10
+ console.info("calling", method, url);
11
+ const headersRaw = new Headers();
12
+ Object.entries(headers).forEach(([key, value]) => headersRaw.set(key, value));
13
+ const urlRaw = new URL(url);
14
+ Object.entries(searchParams).forEach(([key, value]) => {
15
+ if (Array.isArray(value)) {
16
+ value.forEach((item) => {
17
+ urlRaw.searchParams.append(key, item);
18
+ });
19
+ }
20
+ else {
21
+ urlRaw.searchParams.set(key, value);
22
+ }
23
+ });
24
+ const urlStr = urlRaw.href;
25
+ const response = await fetch(urlStr, {
26
+ ...rest,
27
+ headers: headersRaw,
28
+ });
29
+ if (response.status >= 400) {
30
+ const error = new Error(`error while calling ${method} ${urlStr}: status=${response.status}, body=${await response.text()}`);
31
+ Object.assign(error, {
32
+ status: response.status,
33
+ });
34
+ throw error;
35
+ }
36
+ return response;
37
+ },
38
+ async call(props) {
39
+ const response = await httpClient.callRaw(props);
40
+ return response.text();
41
+ },
42
+ build({ path, headers = {}, method = "GET", body = null, searchParams = {}, }) {
43
+ const mergedHeaders = { ...defaultHeaders, ...headers };
44
+ const url = new URL(`${baseUrl}${path}`);
45
+ return {
46
+ url: url.href,
47
+ method,
48
+ headers: mergedHeaders,
49
+ body: body && typeof body === "object" ? JSON.stringify(body) : body,
50
+ searchParams,
51
+ };
52
+ },
53
+ };
54
+ return httpClient;
55
+ };
56
+ exports.HttpClient = HttpClient;
@@ -0,0 +1,7 @@
1
+ import type { HttpCallProps } from "./HttpClient";
2
+ import { HttpClient } from "./HttpClient";
3
+ export declare const JsonHttpClient: (callClient: {
4
+ call: HttpClient["call"];
5
+ }) => {
6
+ call<T>(props: HttpCallProps): Promise<T | undefined>;
7
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonHttpClient = void 0;
4
+ const JsonHttpClient = (callClient) => {
5
+ return {
6
+ async call(props) {
7
+ const body = await callClient.call({
8
+ ...props,
9
+ headers: {
10
+ "Content-Type": "application/json",
11
+ ...props.headers,
12
+ },
13
+ });
14
+ return body ? JSON.parse(body) : undefined;
15
+ },
16
+ };
17
+ };
18
+ exports.JsonHttpClient = JsonHttpClient;
@@ -0,0 +1,2 @@
1
+ export { HttpClient, type HttpClientProps, type HttpCallProps, } from "./HttpClient";
2
+ export { JsonHttpClient } from "./JsonHttpClient";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonHttpClient = exports.HttpClient = void 0;
4
+ var HttpClient_1 = require("./HttpClient");
5
+ Object.defineProperty(exports, "HttpClient", { enumerable: true, get: function () { return HttpClient_1.HttpClient; } });
6
+ var JsonHttpClient_1 = require("./JsonHttpClient");
7
+ Object.defineProperty(exports, "JsonHttpClient", { enumerable: true, get: function () { return JsonHttpClient_1.JsonHttpClient; } });
@@ -0,0 +1 @@
1
+ {"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/HttpClient.ts","../src/JsonHttpClient.ts","../src/exports.ts"],"fileIdsList":[[26],[26,27]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab640a354aef8267ae5e00ebc1bc76cfbc9f34e7df3837e6968eb296106a38ed","signature":"cd9f03707ae4c7938801f2d08b6fafc5fef7dc2875c5dc080f171ccd8d3c359b"},{"version":"fc97b6a78788c3eedd6fe73aad2b7ae3aead181bf3ca352eba35dcdce1f79144","signature":"68acdb026e567b9c0bcfe06b9a424b007aea1120986329387d31504b7607df51"},{"version":"43d49c57558e5353f4e4736751a7de43b34073251d9c3ac8559d2a2feafe3b56","signature":"50e84d5b012668266d7ed9b39c61dc7781513e562229fdcf386d98fe01856915"}],"root":[[26,28]],"options":{"declaration":true,"emitDecoratorMetadata":false,"esModuleInterop":true,"experimentalDecorators":false,"jsx":2,"module":1,"outDir":"./","removeComments":true,"sourceMap":false,"strict":true,"strictPropertyInitialization":false,"target":99},"referencedMap":[[27,1],[28,2]],"version":"5.9.3"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "rauricoste-http-client",
3
+ "version": "0.0.2",
4
+ "description": "",
5
+ "main": "./dist/exports.js",
6
+ "types": "./dist/exports.d.js",
7
+ "scripts": {
8
+ "test": "vitest",
9
+ "dev": "node --watch --experimental-strip-types --import=extensionless/register src/main.ts",
10
+ "typecheck": "tsc --noEmit",
11
+ "build:ts": "rm -rf dist && tsc -p tsconfig.json"
12
+ },
13
+ "author": "remy.auricoste@gmail.com",
14
+ "license": "ISC",
15
+ "dependencies": {},
16
+ "devDependencies": {
17
+ "extensionless": "^1.9.9",
18
+ "typescript": "^5.9.3",
19
+ "vitest": "^3.2.4"
20
+ },
21
+ "extensionless": {
22
+ "lookFor": [
23
+ "js",
24
+ "ts",
25
+ "cjs",
26
+ "mjs"
27
+ ]
28
+ },
29
+ "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
30
+ }