@maguya/auri 0.1.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/dist/index.cjs ADDED
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ auri: () => auri
24
+ });
25
+ module.exports = __toCommonJS(index_exports);
26
+ function resolveHeaders(sources) {
27
+ const headers = new Headers();
28
+ for (const source of sources) {
29
+ const resolved = typeof source === "function" ? source() : source;
30
+ for (const [key, value] of Object.entries(resolved)) {
31
+ headers.set(key, value);
32
+ }
33
+ }
34
+ return headers;
35
+ }
36
+ function toURLSearchParams(params) {
37
+ if (params instanceof URLSearchParams) return params;
38
+ return new URLSearchParams(params);
39
+ }
40
+ function createInstance(ctx) {
41
+ function clone(patch) {
42
+ return createInstance({ ...ctx, ...patch });
43
+ }
44
+ async function handleResponse(response) {
45
+ switch (ctx.responseType) {
46
+ case "json":
47
+ return response.json();
48
+ case "text":
49
+ return response.text();
50
+ case "blob":
51
+ return response.blob();
52
+ case "arrayBuffer":
53
+ return response.arrayBuffer();
54
+ case "formData":
55
+ return response.formData();
56
+ default:
57
+ throw new Error(`Unknown responseType: ${ctx.responseType}`);
58
+ }
59
+ }
60
+ async function request(path, method, body, init) {
61
+ const params = ctx.searchParams.toString();
62
+ const url = ctx.baseUrl + path + (params ? "?" + params : "");
63
+ const headers = resolveHeaders(ctx.headerSources);
64
+ let req = new Request(url, {
65
+ ...init,
66
+ method: method.toUpperCase(),
67
+ headers,
68
+ signal: ctx.abortController.signal,
69
+ ...body !== void 0 && { body: JSON.stringify(body) }
70
+ });
71
+ for (const handler of ctx.beforeRequest) {
72
+ req = handler(req) ?? req;
73
+ }
74
+ let response = await fetch(req);
75
+ for (const handler of ctx.afterRequest) {
76
+ response = handler(response) ?? response;
77
+ }
78
+ return handleResponse(response);
79
+ }
80
+ const instance = {
81
+ baseUrl: (url) => clone({ baseUrl: url }),
82
+ headers: (input) => clone({ headerSources: [...ctx.headerSources, input] }),
83
+ responseType: (type) => clone({ responseType: type }),
84
+ searchParams: (params) => clone({ searchParams: toURLSearchParams(params) }),
85
+ addSearchParams: (params) => {
86
+ const merged = [];
87
+ ctx.searchParams.forEach((v, k) => merged.push([k, v]));
88
+ toURLSearchParams(params).forEach((v, k) => merged.push([k, v]));
89
+ return clone({ searchParams: new URLSearchParams(merged) });
90
+ },
91
+ addBeforeRequest: (handler) => {
92
+ const newSet = new Set(ctx.beforeRequest);
93
+ newSet.add(handler);
94
+ return clone({ beforeRequest: newSet });
95
+ },
96
+ addAfterRequest: (handler) => {
97
+ const newSet = new Set(ctx.afterRequest);
98
+ newSet.add(handler);
99
+ return clone({ afterRequest: newSet });
100
+ },
101
+ setAbortController: (controller) => clone({ abortController: controller }),
102
+ get: (path, init) => request(path, "get", void 0, init),
103
+ delete: (path, init) => request(path, "delete", void 0, init),
104
+ post: (path, body, init) => request(path, "post", body, init),
105
+ put: (path, body, init) => request(path, "put", body, init),
106
+ patch: (path, body, init) => request(path, "patch", body, init)
107
+ };
108
+ return instance;
109
+ }
110
+ function auri() {
111
+ return createInstance({
112
+ baseUrl: typeof window !== "undefined" ? window.location.origin : "",
113
+ responseType: "json",
114
+ inputType: "json",
115
+ searchParams: new URLSearchParams(),
116
+ headerSources: [],
117
+ beforeRequest: /* @__PURE__ */ new Set(),
118
+ afterRequest: /* @__PURE__ */ new Set(),
119
+ abortController: new AbortController()
120
+ });
121
+ }
122
+ // Annotate the CommonJS export names for ESM import in node:
123
+ 0 && (module.exports = {
124
+ auri
125
+ });
@@ -0,0 +1,22 @@
1
+ type AuriResponseType = "json" | "text" | "blob" | "arrayBuffer" | "formData";
2
+ type AuriRequestInit = Omit<RequestInit, "method" | "headers" | "body" | "signal">;
3
+ type HeadersInput = Record<string, string> | (() => Record<string, string>);
4
+ type ResponseTypeResult<T, R extends AuriResponseType> = R extends "json" ? T : R extends "text" ? string : R extends "blob" ? Blob : R extends "arrayBuffer" ? ArrayBuffer : R extends "formData" ? FormData : never;
5
+ type AuriInstance<R extends AuriResponseType> = {
6
+ baseUrl(url: string): AuriInstance<R>;
7
+ headers(input: HeadersInput): AuriInstance<R>;
8
+ responseType<T extends AuriResponseType>(type: T): AuriInstance<T>;
9
+ searchParams(params: URLSearchParams | Record<string, string>): AuriInstance<R>;
10
+ addSearchParams(params: URLSearchParams | Record<string, string>): AuriInstance<R>;
11
+ addBeforeRequest(handler: (request: Request) => Request | void): AuriInstance<R>;
12
+ addAfterRequest(handler: (response: Response) => Response | void): AuriInstance<R>;
13
+ setAbortController(controller: AbortController): AuriInstance<R>;
14
+ get<T>(path: string, init?: AuriRequestInit): Promise<ResponseTypeResult<T, R>>;
15
+ post<T, B = unknown>(path: string, body?: B, init?: AuriRequestInit): Promise<ResponseTypeResult<T, R>>;
16
+ put<T, B = unknown>(path: string, body?: B, init?: AuriRequestInit): Promise<ResponseTypeResult<T, R>>;
17
+ patch<T, B = unknown>(path: string, body?: B, init?: AuriRequestInit): Promise<ResponseTypeResult<T, R>>;
18
+ delete<T>(path: string, init?: AuriRequestInit): Promise<ResponseTypeResult<T, R>>;
19
+ };
20
+ declare function auri(): AuriInstance<"json">;
21
+
22
+ export { auri };
@@ -0,0 +1,22 @@
1
+ type AuriResponseType = "json" | "text" | "blob" | "arrayBuffer" | "formData";
2
+ type AuriRequestInit = Omit<RequestInit, "method" | "headers" | "body" | "signal">;
3
+ type HeadersInput = Record<string, string> | (() => Record<string, string>);
4
+ type ResponseTypeResult<T, R extends AuriResponseType> = R extends "json" ? T : R extends "text" ? string : R extends "blob" ? Blob : R extends "arrayBuffer" ? ArrayBuffer : R extends "formData" ? FormData : never;
5
+ type AuriInstance<R extends AuriResponseType> = {
6
+ baseUrl(url: string): AuriInstance<R>;
7
+ headers(input: HeadersInput): AuriInstance<R>;
8
+ responseType<T extends AuriResponseType>(type: T): AuriInstance<T>;
9
+ searchParams(params: URLSearchParams | Record<string, string>): AuriInstance<R>;
10
+ addSearchParams(params: URLSearchParams | Record<string, string>): AuriInstance<R>;
11
+ addBeforeRequest(handler: (request: Request) => Request | void): AuriInstance<R>;
12
+ addAfterRequest(handler: (response: Response) => Response | void): AuriInstance<R>;
13
+ setAbortController(controller: AbortController): AuriInstance<R>;
14
+ get<T>(path: string, init?: AuriRequestInit): Promise<ResponseTypeResult<T, R>>;
15
+ post<T, B = unknown>(path: string, body?: B, init?: AuriRequestInit): Promise<ResponseTypeResult<T, R>>;
16
+ put<T, B = unknown>(path: string, body?: B, init?: AuriRequestInit): Promise<ResponseTypeResult<T, R>>;
17
+ patch<T, B = unknown>(path: string, body?: B, init?: AuriRequestInit): Promise<ResponseTypeResult<T, R>>;
18
+ delete<T>(path: string, init?: AuriRequestInit): Promise<ResponseTypeResult<T, R>>;
19
+ };
20
+ declare function auri(): AuriInstance<"json">;
21
+
22
+ export { auri };
package/dist/index.js ADDED
@@ -0,0 +1,100 @@
1
+ // src/index.ts
2
+ function resolveHeaders(sources) {
3
+ const headers = new Headers();
4
+ for (const source of sources) {
5
+ const resolved = typeof source === "function" ? source() : source;
6
+ for (const [key, value] of Object.entries(resolved)) {
7
+ headers.set(key, value);
8
+ }
9
+ }
10
+ return headers;
11
+ }
12
+ function toURLSearchParams(params) {
13
+ if (params instanceof URLSearchParams) return params;
14
+ return new URLSearchParams(params);
15
+ }
16
+ function createInstance(ctx) {
17
+ function clone(patch) {
18
+ return createInstance({ ...ctx, ...patch });
19
+ }
20
+ async function handleResponse(response) {
21
+ switch (ctx.responseType) {
22
+ case "json":
23
+ return response.json();
24
+ case "text":
25
+ return response.text();
26
+ case "blob":
27
+ return response.blob();
28
+ case "arrayBuffer":
29
+ return response.arrayBuffer();
30
+ case "formData":
31
+ return response.formData();
32
+ default:
33
+ throw new Error(`Unknown responseType: ${ctx.responseType}`);
34
+ }
35
+ }
36
+ async function request(path, method, body, init) {
37
+ const params = ctx.searchParams.toString();
38
+ const url = ctx.baseUrl + path + (params ? "?" + params : "");
39
+ const headers = resolveHeaders(ctx.headerSources);
40
+ let req = new Request(url, {
41
+ ...init,
42
+ method: method.toUpperCase(),
43
+ headers,
44
+ signal: ctx.abortController.signal,
45
+ ...body !== void 0 && { body: JSON.stringify(body) }
46
+ });
47
+ for (const handler of ctx.beforeRequest) {
48
+ req = handler(req) ?? req;
49
+ }
50
+ let response = await fetch(req);
51
+ for (const handler of ctx.afterRequest) {
52
+ response = handler(response) ?? response;
53
+ }
54
+ return handleResponse(response);
55
+ }
56
+ const instance = {
57
+ baseUrl: (url) => clone({ baseUrl: url }),
58
+ headers: (input) => clone({ headerSources: [...ctx.headerSources, input] }),
59
+ responseType: (type) => clone({ responseType: type }),
60
+ searchParams: (params) => clone({ searchParams: toURLSearchParams(params) }),
61
+ addSearchParams: (params) => {
62
+ const merged = [];
63
+ ctx.searchParams.forEach((v, k) => merged.push([k, v]));
64
+ toURLSearchParams(params).forEach((v, k) => merged.push([k, v]));
65
+ return clone({ searchParams: new URLSearchParams(merged) });
66
+ },
67
+ addBeforeRequest: (handler) => {
68
+ const newSet = new Set(ctx.beforeRequest);
69
+ newSet.add(handler);
70
+ return clone({ beforeRequest: newSet });
71
+ },
72
+ addAfterRequest: (handler) => {
73
+ const newSet = new Set(ctx.afterRequest);
74
+ newSet.add(handler);
75
+ return clone({ afterRequest: newSet });
76
+ },
77
+ setAbortController: (controller) => clone({ abortController: controller }),
78
+ get: (path, init) => request(path, "get", void 0, init),
79
+ delete: (path, init) => request(path, "delete", void 0, init),
80
+ post: (path, body, init) => request(path, "post", body, init),
81
+ put: (path, body, init) => request(path, "put", body, init),
82
+ patch: (path, body, init) => request(path, "patch", body, init)
83
+ };
84
+ return instance;
85
+ }
86
+ function auri() {
87
+ return createInstance({
88
+ baseUrl: typeof window !== "undefined" ? window.location.origin : "",
89
+ responseType: "json",
90
+ inputType: "json",
91
+ searchParams: new URLSearchParams(),
92
+ headerSources: [],
93
+ beforeRequest: /* @__PURE__ */ new Set(),
94
+ afterRequest: /* @__PURE__ */ new Set(),
95
+ abortController: new AbortController()
96
+ });
97
+ }
98
+ export {
99
+ auri
100
+ };
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@maguya/auri",
3
+ "version": "0.1.0",
4
+ "description": "Fluent HTTP client for the browser",
5
+ "author": "BalgabayevD",
6
+ "license": "MIT",
7
+ "type": "module",
8
+
9
+ "main": "./dist/index.cjs",
10
+ "module": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js",
17
+ "require": "./dist/index.cjs"
18
+ }
19
+ },
20
+
21
+ "files": ["dist"],
22
+
23
+ "scripts": {
24
+ "build": "tsup src/index.ts --format esm,cjs --dts",
25
+ "dev": "tsup src/index.ts --format esm,cjs --dts --watch",
26
+ "prepublishOnly": "npm run build"
27
+ },
28
+
29
+ "devDependencies": {
30
+ "tsup": "^8.0.0",
31
+ "typescript": "^5.0.0"
32
+ }
33
+ }