accessio 1.1.1 → 1.1.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.
@@ -32,97 +32,33 @@ __export(request_exports, {
32
32
  });
33
33
  module.exports = __toCommonJS(request_exports);
34
34
  var import_buildURL = __toESM(require("./buildURL"), 1);
35
- var import_accessioError = __toESM(require("./accessioError"), 1);
36
- var import_parseHeaders = __toESM(require("../helpers/parseHeaders"), 1);
37
35
  var import_transformData = __toESM(require("../helpers/transformData"), 1);
38
36
  var import_settle = __toESM(require("../helpers/settle"), 1);
39
- const METHOD_KEYS = /* @__PURE__ */ new Set([
40
- "common",
41
- "delete",
42
- "get",
43
- "head",
44
- "options",
45
- "post",
46
- "put",
47
- "patch"
48
- ]);
49
- function flattenHeaders(headers, method) {
50
- if (!headers) return {};
51
- const merged = {};
52
- const methodLower = (method || "get").toLowerCase();
53
- if (headers["common"]) {
54
- Object.assign(merged, headers["common"]);
55
- }
56
- if (headers[methodLower]) {
57
- Object.assign(merged, headers[methodLower]);
58
- }
59
- for (const key in headers) {
60
- if (Object.prototype.hasOwnProperty.call(headers, key) && !METHOD_KEYS.has(key)) {
61
- merged[key] = headers[key];
62
- }
63
- }
64
- return merged;
65
- }
66
- function removeContentType(headers) {
67
- const keys = Object.keys(headers).filter((k) => k.toLowerCase() === "content-type");
68
- for (const key of keys) {
69
- delete headers[key];
70
- }
71
- }
37
+ var import_flattenHeaders = require("../helpers/flattenHeaders");
38
+ var import_auth = require("../helpers/auth");
39
+ var import_fetchAdapter = __toESM(require("./fetchAdapter"), 1);
72
40
  function buildTransformArray(transform) {
73
41
  if (!transform) return [];
74
42
  if (Array.isArray(transform)) return transform;
75
43
  return [transform];
76
44
  }
77
- function setBasicAuth(config, headers) {
78
- if (!config.auth) return;
79
- const username = config.auth.username || "";
80
- const password = config.auth.password || "";
81
- const credentials = `${username}:${password}`;
82
- let encoded;
83
- if (typeof Buffer !== "undefined") {
84
- encoded = Buffer.from(credentials).toString("base64");
85
- } else {
86
- encoded = btoa(
87
- encodeURIComponent(credentials).replace(/%([0-9A-F]{2})/g, (match, p1) => {
88
- return String.fromCharCode(parseInt(p1, 16));
89
- })
90
- );
91
- }
92
- headers["Authorization"] = `Basic ${encoded}`;
93
- }
94
- async function readResponseData(fetchResponse, responseType) {
95
- switch (responseType) {
96
- case "arraybuffer":
97
- return await fetchResponse.arrayBuffer();
98
- case "blob":
99
- return await fetchResponse.blob();
100
- case "text":
101
- return await fetchResponse.text();
102
- case "stream":
103
- return fetchResponse.body;
104
- case "json":
105
- default:
106
- return await fetchResponse.text();
107
- }
108
- }
109
- function dispatchRequest(config) {
45
+ async function dispatchRequest(config) {
110
46
  const fullURL = config._builtUrl || (0, import_buildURL.default)(
111
47
  config.url ?? "",
112
48
  config.baseURL,
113
49
  config.params,
114
50
  config.paramsSerializer
115
51
  );
116
- const flatHeaders = flattenHeaders(config.headers, config.method);
52
+ const flatHeaders = (0, import_flattenHeaders.flattenHeaders)(config.headers, config.method);
117
53
  const requestTransforms = buildTransformArray(config.transformRequest);
118
- const requestData = (0, import_transformData.default)(requestTransforms, config.data, flatHeaders, config);
54
+ const requestData = await (0, import_transformData.default)(requestTransforms, config.data, flatHeaders, config);
119
55
  if (requestData === null || requestData === void 0 || typeof FormData !== "undefined" && requestData instanceof FormData) {
120
- removeContentType(flatHeaders);
56
+ (0, import_flattenHeaders.removeContentType)(flatHeaders);
121
57
  }
122
- setBasicAuth(config, flatHeaders);
58
+ (0, import_auth.setBasicAuth)(config, flatHeaders);
123
59
  const fetchOptions = {
124
60
  method: (config.method || "GET").toUpperCase(),
125
- headers: flatHeaders
61
+ headers: (0, import_flattenHeaders.buildFetchHeaders)(flatHeaders)
126
62
  };
127
63
  const methodsWithBody = ["POST", "PUT", "PATCH", "DELETE"];
128
64
  if (methodsWithBody.includes(fetchOptions.method) && requestData !== void 0 && requestData !== null) {
@@ -137,131 +73,17 @@ function dispatchRequest(config) {
137
73
  if (config.agent) {
138
74
  fetchOptions.agent = config.agent;
139
75
  }
140
- let abortController = null;
141
- let timeoutId = null;
142
- let isTimedOut = false;
143
- let onUserAbort = null;
144
- const timeoutValue = Number(config.timeout);
145
- if (!isNaN(timeoutValue) && timeoutValue > 0) {
146
- abortController = new AbortController();
147
- timeoutId = setTimeout(() => {
148
- isTimedOut = true;
149
- abortController.abort(
150
- new import_accessioError.default(
151
- `timeout of ${timeoutValue}ms exceeded`,
152
- import_accessioError.default.ETIMEDOUT,
153
- config,
154
- null,
155
- null
156
- )
157
- );
158
- }, timeoutValue);
159
- if (config.signal) {
160
- if (typeof AbortSignal.any === "function") {
161
- fetchOptions.signal = AbortSignal.any([config.signal, abortController.signal]);
162
- } else {
163
- if (config.signal.aborted) {
164
- abortController.abort(config.signal.reason);
165
- } else {
166
- onUserAbort = () => {
167
- if (!isTimedOut && abortController) {
168
- abortController.abort(config.signal.reason);
169
- }
170
- };
171
- config.signal.addEventListener("abort", onUserAbort, {
172
- once: true
173
- });
174
- }
175
- fetchOptions.signal = abortController.signal;
176
- }
177
- } else {
178
- fetchOptions.signal = abortController.signal;
179
- }
180
- } else if (config.signal) {
181
- fetchOptions.signal = config.signal;
182
- }
183
76
  const requestStartTime = Date.now();
184
- return fetch(fullURL, fetchOptions).then(async (fetchResponse) => {
185
- let responseData;
186
- const responseType = config.responseType || "json";
187
- const contentLength = fetchResponse.headers.get("content-length");
188
- if (contentLength && config.maxContentLength && parseInt(contentLength, 10) > config.maxContentLength) {
189
- throw new import_accessioError.default(
190
- `maxContentLength size of ${config.maxContentLength} exceeded`,
191
- import_accessioError.default.ERR_BAD_RESPONSE,
192
- config,
193
- fetchResponse,
194
- null
195
- );
196
- }
197
- try {
198
- responseData = await readResponseData(fetchResponse, responseType);
199
- } catch (readError) {
200
- throw import_accessioError.default.from(
201
- readError,
202
- import_accessioError.default.ERR_BAD_RESPONSE,
203
- config,
204
- fetchResponse,
205
- null
206
- );
207
- }
208
- const responseHeaders = (0, import_parseHeaders.default)(fetchResponse.headers);
209
- const responseTransforms = buildTransformArray(config.transformResponse);
210
- responseData = (0, import_transformData.default)(responseTransforms, responseData, responseHeaders, config);
211
- const response = {
212
- data: responseData,
213
- status: fetchResponse.status,
214
- statusText: fetchResponse.statusText,
215
- headers: responseHeaders,
216
- config,
217
- request: fetchResponse,
218
- duration: Date.now() - requestStartTime
219
- };
220
- return new Promise((resolve, reject) => {
221
- (0, import_settle.default)(
222
- resolve,
223
- reject,
224
- response,
225
- config
226
- );
227
- });
228
- }).catch((error) => {
229
- if (error instanceof import_accessioError.default) {
230
- throw error;
231
- }
232
- if (error instanceof Error && error.name === "AbortError") {
233
- if (isTimedOut) {
234
- throw new import_accessioError.default(
235
- `timeout of ${config.timeout}ms exceeded`,
236
- import_accessioError.default.ETIMEDOUT,
237
- config,
238
- null,
239
- null
240
- );
241
- }
242
- throw new import_accessioError.default("Request aborted", import_accessioError.default.ERR_CANCELED, config, null, null);
243
- }
244
- if (error instanceof TypeError && (error.message.toLowerCase().includes("url") || error.message.toLowerCase().includes("fetch"))) {
245
- throw new import_accessioError.default(
246
- `Invalid URL: ${fullURL}`,
247
- import_accessioError.default.ERR_INVALID_URL,
248
- config,
249
- null,
250
- null
251
- );
252
- }
253
- throw import_accessioError.default.from(
254
- error instanceof Error ? error : new Error(String(error)),
255
- import_accessioError.default.ERR_NETWORK,
256
- config,
257
- null,
258
- null
77
+ const response = await (0, import_fetchAdapter.default)(config, fullURL, fetchOptions, requestStartTime);
78
+ const responseTransforms = buildTransformArray(config.transformResponse);
79
+ response.data = await (0, import_transformData.default)(responseTransforms, response.data, response.headers, config);
80
+ return new Promise((resolve, reject) => {
81
+ (0, import_settle.default)(
82
+ resolve,
83
+ reject,
84
+ response,
85
+ config
259
86
  );
260
- }).finally(() => {
261
- if (timeoutId) clearTimeout(timeoutId);
262
- if (config.signal && onUserAbort) {
263
- config.signal.removeEventListener("abort", onUserAbort);
264
- }
265
87
  });
266
88
  }
267
89
  //# sourceMappingURL=request.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/request.ts"],"sourcesContent":["import buildURL from './buildURL';\nimport AccessioError from './accessioError';\nimport parseHeaders from '../helpers/parseHeaders';\nimport transformData from '../helpers/transformData';\nimport settle from '../helpers/settle';\nimport type { AccessioRequestConfig, AccessioResponse, TransformFunction } from '../types';\n\nconst METHOD_KEYS = new Set<string>([\n 'common',\n 'delete',\n 'get',\n 'head',\n 'options',\n 'post',\n 'put',\n 'patch',\n]);\n\ntype HeadersConfig = Record<string, Record<string, string>>;\n\nfunction flattenHeaders(\n headers: HeadersConfig | undefined,\n method?: string,\n): Record<string, string> {\n if (!headers) return {};\n\n const merged: Record<string, string> = {};\n const methodLower = (method || 'get').toLowerCase();\n\n if (headers['common']) {\n Object.assign(merged, headers['common']);\n }\n\n if (headers[methodLower]) {\n Object.assign(merged, headers[methodLower]);\n }\n\n for (const key in headers) {\n if (Object.prototype.hasOwnProperty.call(headers, key) && !METHOD_KEYS.has(key)) {\n merged[key] = headers[key] as unknown as string;\n }\n }\n\n return merged;\n}\n\nfunction removeContentType(headers: Record<string, string>): void {\n const keys = Object.keys(headers).filter((k) => k.toLowerCase() === 'content-type');\n for (const key of keys) {\n delete headers[key];\n }\n}\n\nfunction buildTransformArray(\n transform: TransformFunction | TransformFunction[] | undefined,\n): TransformFunction[] {\n if (!transform) return [];\n if (Array.isArray(transform)) return transform;\n return [transform];\n}\n\nfunction setBasicAuth(config: AccessioRequestConfig, headers: Record<string, string>): void {\n if (!config.auth) return;\n const username = config.auth.username || '';\n const password = config.auth.password || '';\n const credentials = `${username}:${password}`;\n\n let encoded: string;\n if (typeof Buffer !== 'undefined') {\n encoded = Buffer.from(credentials).toString('base64');\n } else {\n encoded = btoa(\n encodeURIComponent(credentials).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n }),\n );\n }\n headers['Authorization'] = `Basic ${encoded}`;\n}\n\nasync function readResponseData(fetchResponse: Response, responseType: string): Promise<unknown> {\n switch (responseType) {\n case 'arraybuffer':\n return await fetchResponse.arrayBuffer();\n case 'blob':\n return await fetchResponse.blob();\n case 'text':\n return await fetchResponse.text();\n case 'stream':\n return fetchResponse.body;\n case 'json':\n default:\n return await fetchResponse.text();\n }\n}\n\nexport default function dispatchRequest(config: AccessioRequestConfig): Promise<AccessioResponse> {\n const fullURL =\n config._builtUrl ||\n buildURL(\n config.url ?? '',\n config.baseURL,\n config.params as Record<string, unknown> | undefined,\n config.paramsSerializer,\n );\n\n const flatHeaders = flattenHeaders(config.headers as HeadersConfig | undefined, config.method);\n\n const requestTransforms = buildTransformArray(config.transformRequest);\n\n const requestData = transformData(requestTransforms, config.data, flatHeaders, config);\n\n if (\n requestData === null ||\n requestData === undefined ||\n (typeof FormData !== 'undefined' && requestData instanceof FormData)\n ) {\n removeContentType(flatHeaders);\n }\n\n setBasicAuth(config, flatHeaders);\n\n const fetchOptions: RequestInit = {\n method: (config.method || 'GET').toUpperCase(),\n headers: flatHeaders,\n };\n\n const methodsWithBody = ['POST', 'PUT', 'PATCH', 'DELETE'];\n if (\n methodsWithBody.includes(fetchOptions.method!) &&\n requestData !== undefined &&\n requestData !== null\n ) {\n fetchOptions.body = requestData as BodyInit;\n }\n\n if (config.withCredentials) {\n fetchOptions.credentials = 'include';\n }\n\n if (config.dispatcher) {\n (fetchOptions as any).dispatcher = config.dispatcher;\n }\n if (config.agent) {\n (fetchOptions as any).agent = config.agent;\n }\n\n let abortController: AbortController | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let isTimedOut = false;\n let onUserAbort: (() => void) | null = null;\n\n const timeoutValue = Number(config.timeout);\n if (!isNaN(timeoutValue) && timeoutValue > 0) {\n abortController = new AbortController();\n\n timeoutId = setTimeout(() => {\n isTimedOut = true;\n abortController!.abort(\n new AccessioError(\n `timeout of ${timeoutValue}ms exceeded`,\n AccessioError.ETIMEDOUT,\n config,\n null,\n null,\n ),\n );\n }, timeoutValue);\n\n if (config.signal) {\n if (typeof AbortSignal.any === 'function') {\n fetchOptions.signal = AbortSignal.any([config.signal, abortController.signal]);\n } else {\n if (config.signal.aborted) {\n abortController.abort(config.signal.reason);\n } else {\n onUserAbort = () => {\n if (!isTimedOut && abortController) {\n abortController.abort(config.signal!.reason);\n }\n };\n config.signal.addEventListener('abort', onUserAbort, {\n once: true,\n });\n }\n fetchOptions.signal = abortController.signal;\n }\n } else {\n fetchOptions.signal = abortController.signal;\n }\n } else if (config.signal) {\n fetchOptions.signal = config.signal;\n }\n\n const requestStartTime = Date.now();\n\n return fetch(fullURL, fetchOptions)\n .then(async (fetchResponse) => {\n let responseData: unknown;\n const responseType = config.responseType || 'json';\n\n const contentLength = fetchResponse.headers.get('content-length');\n if (\n contentLength &&\n config.maxContentLength &&\n parseInt(contentLength, 10) > config.maxContentLength\n ) {\n throw new AccessioError(\n `maxContentLength size of ${config.maxContentLength} exceeded`,\n AccessioError.ERR_BAD_RESPONSE,\n config,\n fetchResponse,\n null,\n );\n }\n\n try {\n responseData = await readResponseData(fetchResponse, responseType);\n } catch (readError) {\n throw AccessioError.from(\n readError as Error,\n AccessioError.ERR_BAD_RESPONSE,\n config,\n fetchResponse,\n null,\n );\n }\n\n const responseHeaders = parseHeaders(fetchResponse.headers);\n\n const responseTransforms = buildTransformArray(config.transformResponse);\n\n responseData = transformData(responseTransforms, responseData, responseHeaders, config);\n\n const response: AccessioResponse = {\n data: responseData,\n status: fetchResponse.status,\n statusText: fetchResponse.statusText,\n headers: responseHeaders,\n config: config,\n request: fetchResponse,\n duration: Date.now() - requestStartTime,\n };\n\n return new Promise<AccessioResponse>((resolve, reject) => {\n settle(\n resolve as (value: AccessioResponse) => void,\n reject as (reason: AccessioError) => void,\n response,\n config,\n );\n });\n })\n .catch((error) => {\n if (error instanceof AccessioError) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n if (isTimedOut) {\n throw new AccessioError(\n `timeout of ${config.timeout}ms exceeded`,\n AccessioError.ETIMEDOUT,\n config,\n null,\n null,\n );\n }\n throw new AccessioError('Request aborted', AccessioError.ERR_CANCELED, config, null, null);\n }\n\n if (\n error instanceof TypeError &&\n (error.message.toLowerCase().includes('url') ||\n error.message.toLowerCase().includes('fetch'))\n ) {\n throw new AccessioError(\n `Invalid URL: ${fullURL}`,\n AccessioError.ERR_INVALID_URL,\n config,\n null,\n null,\n );\n }\n\n throw AccessioError.from(\n error instanceof Error ? error : new Error(String(error)),\n AccessioError.ERR_NETWORK,\n config,\n null,\n null,\n );\n })\n .finally(() => {\n if (timeoutId) clearTimeout(timeoutId);\n if (config.signal && onUserAbort) {\n config.signal.removeEventListener('abort', onUserAbort);\n }\n });\n}\n"],"mappings":"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","names":["buildURL","transformData","AccessioError","parseHeaders","settle"]}
1
+ {"version":3,"sources":["../../src/core/request.ts"],"sourcesContent":["import buildURL from './buildURL';\nimport AccessioError from './accessioError';\nimport transformData from '../helpers/transformData';\nimport settle from '../helpers/settle';\nimport { flattenHeaders, removeContentType, buildFetchHeaders } from '../helpers/flattenHeaders';\nimport { setBasicAuth } from '../helpers/auth';\nimport fetchAdapter from './fetchAdapter';\nimport type { AccessioRequestConfig, AccessioResponse, TransformFunction } from '../types';\n\ntype HeadersConfig = Record<string, Record<string, string | string[]>>;\n\nfunction buildTransformArray(\n transform: TransformFunction | TransformFunction[] | undefined,\n): TransformFunction[] {\n if (!transform) return [];\n if (Array.isArray(transform)) return transform;\n return [transform];\n}\n\nexport default async function dispatchRequest(\n config: AccessioRequestConfig,\n): Promise<AccessioResponse> {\n const fullURL =\n config._builtUrl ||\n buildURL(\n config.url ?? '',\n config.baseURL,\n config.params as Record<string, unknown> | undefined,\n config.paramsSerializer,\n );\n\n const flatHeaders = flattenHeaders(config.headers as HeadersConfig | undefined, config.method);\n\n const requestTransforms = buildTransformArray(config.transformRequest);\n\n const requestData = await transformData(requestTransforms, config.data, flatHeaders, config);\n\n if (\n requestData === null ||\n requestData === undefined ||\n (typeof FormData !== 'undefined' && requestData instanceof FormData)\n ) {\n removeContentType(flatHeaders);\n }\n\n setBasicAuth(config, flatHeaders);\n\n const fetchOptions: RequestInit = {\n method: (config.method || 'GET').toUpperCase(),\n headers: buildFetchHeaders(flatHeaders),\n };\n\n const methodsWithBody = ['POST', 'PUT', 'PATCH', 'DELETE'];\n if (\n methodsWithBody.includes(fetchOptions.method!) &&\n requestData !== undefined &&\n requestData !== null\n ) {\n fetchOptions.body = requestData as BodyInit;\n }\n\n if (config.withCredentials) {\n fetchOptions.credentials = 'include';\n }\n\n if (config.dispatcher) {\n (fetchOptions as any).dispatcher = config.dispatcher;\n }\n if (config.agent) {\n (fetchOptions as any).agent = config.agent;\n }\n\n const requestStartTime = Date.now();\n\n const response = await fetchAdapter(config, fullURL, fetchOptions, requestStartTime);\n\n const responseTransforms = buildTransformArray(config.transformResponse);\n\n response.data = await transformData(responseTransforms, response.data, response.headers, config);\n\n return new Promise<AccessioResponse>((resolve, reject) => {\n settle(\n resolve as (value: AccessioResponse) => void,\n reject as (reason: AccessioError) => void,\n response,\n config,\n );\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AAErB,2BAA0B;AAC1B,oBAAmB;AACnB,4BAAqE;AACrE,kBAA6B;AAC7B,0BAAyB;AAKzB,SAAS,oBACP,WACqB;AACrB,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,MAAI,MAAM,QAAQ,SAAS,EAAG,QAAO;AACrC,SAAO,CAAC,SAAS;AACnB;AAEA,eAAO,gBACL,QAC2B;AAC3B,QAAM,UACJ,OAAO,iBACP,gBAAAA;AAAA,IACE,OAAO,OAAO;AAAA,IACd,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAEF,QAAM,kBAAc,sCAAe,OAAO,SAAsC,OAAO,MAAM;AAE7F,QAAM,oBAAoB,oBAAoB,OAAO,gBAAgB;AAErE,QAAM,cAAc,UAAM,qBAAAC,SAAc,mBAAmB,OAAO,MAAM,aAAa,MAAM;AAE3F,MACE,gBAAgB,QAChB,gBAAgB,UACf,OAAO,aAAa,eAAe,uBAAuB,UAC3D;AACA,iDAAkB,WAAW;AAAA,EAC/B;AAEA,gCAAa,QAAQ,WAAW;AAEhC,QAAM,eAA4B;AAAA,IAChC,SAAS,OAAO,UAAU,OAAO,YAAY;AAAA,IAC7C,aAAS,yCAAkB,WAAW;AAAA,EACxC;AAEA,QAAM,kBAAkB,CAAC,QAAQ,OAAO,SAAS,QAAQ;AACzD,MACE,gBAAgB,SAAS,aAAa,MAAO,KAC7C,gBAAgB,UAChB,gBAAgB,MAChB;AACA,iBAAa,OAAO;AAAA,EACtB;AAEA,MAAI,OAAO,iBAAiB;AAC1B,iBAAa,cAAc;AAAA,EAC7B;AAEA,MAAI,OAAO,YAAY;AACrB,IAAC,aAAqB,aAAa,OAAO;AAAA,EAC5C;AACA,MAAI,OAAO,OAAO;AAChB,IAAC,aAAqB,QAAQ,OAAO;AAAA,EACvC;AAEA,QAAM,mBAAmB,KAAK,IAAI;AAElC,QAAM,WAAW,UAAM,oBAAAC,SAAa,QAAQ,SAAS,cAAc,gBAAgB;AAEnF,QAAM,qBAAqB,oBAAoB,OAAO,iBAAiB;AAEvE,WAAS,OAAO,UAAM,qBAAAD,SAAc,oBAAoB,SAAS,MAAM,SAAS,SAAS,MAAM;AAE/F,SAAO,IAAI,QAA0B,CAAC,SAAS,WAAW;AACxD,sBAAAE;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":["buildURL","transformData","fetchAdapter","settle"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/defaults/transforms.ts"],"sourcesContent":["export function defaultTransformRequest(data: unknown, headers: Record<string, string>): unknown {\n if (data === null || data === undefined) {\n return data;\n }\n\n if (\n typeof data === 'string' ||\n data instanceof ArrayBuffer ||\n (typeof Blob !== 'undefined' && data instanceof Blob) ||\n (typeof FormData !== 'undefined' && data instanceof FormData) ||\n (typeof URLSearchParams !== 'undefined' && data instanceof URLSearchParams) ||\n (typeof ReadableStream !== 'undefined' && data instanceof ReadableStream)\n ) {\n return data;\n }\n\n if (typeof data === 'object') {\n if (headers && typeof headers === 'object') {\n const hasContentType = Object.keys(headers).some(\n (key) => key.toLowerCase() === 'content-type',\n );\n if (!hasContentType) {\n headers['Content-Type'] = 'application/json';\n }\n }\n try {\n return JSON.stringify(data);\n } catch (e: any) {\n if (e instanceof TypeError && e.message.toLowerCase().includes('circular')) {\n throw new Error('Accessio: Cannot stringify circular structure in request data');\n }\n throw e;\n }\n }\n\n return data;\n}\n\nexport function defaultTransformResponse(data: unknown): unknown {\n if (typeof data === 'string') {\n try {\n return JSON.parse(data);\n } catch {\n // Not JSON — return as-is\n }\n }\n return data;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,SAAS,wBAAwB,MAAe,SAA0C;AAC/F,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC,WAAO;AAAA,EACT;AAEA,MACE,OAAO,SAAS,YAChB,gBAAgB,eACf,OAAO,SAAS,eAAe,gBAAgB,QAC/C,OAAO,aAAa,eAAe,gBAAgB,YACnD,OAAO,oBAAoB,eAAe,gBAAgB,mBAC1D,OAAO,mBAAmB,eAAe,gBAAgB,gBAC1D;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,QAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,YAAM,iBAAiB,OAAO,KAAK,OAAO,EAAE;AAAA,QAC1C,CAAC,QAAQ,IAAI,YAAY,MAAM;AAAA,MACjC;AACA,UAAI,CAAC,gBAAgB;AACnB,gBAAQ,cAAc,IAAI;AAAA,MAC5B;AAAA,IACF;AACA,QAAI;AACF,aAAO,KAAK,UAAU,IAAI;AAAA,IAC5B,SAAS,GAAQ;AACf,UAAI,aAAa,aAAa,EAAE,QAAQ,YAAY,EAAE,SAAS,UAAU,GAAG;AAC1E,cAAM,IAAI,MAAM,+DAA+D;AAAA,MACjF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,yBAAyB,MAAwB;AAC/D,MAAI,OAAO,SAAS,UAAU;AAC5B,QAAI;AACF,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,QAAQ;AAAA,IAER;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../src/defaults/transforms.ts"],"sourcesContent":["export function defaultTransformRequest(\n data: unknown,\n headers: Record<string, string | string[]>,\n): unknown {\n if (data === null || data === undefined) {\n return data;\n }\n\n if (\n typeof data === 'string' ||\n data instanceof ArrayBuffer ||\n (typeof Blob !== 'undefined' && data instanceof Blob) ||\n (typeof FormData !== 'undefined' && data instanceof FormData) ||\n (typeof URLSearchParams !== 'undefined' && data instanceof URLSearchParams) ||\n (typeof ReadableStream !== 'undefined' && data instanceof ReadableStream)\n ) {\n return data;\n }\n\n if (typeof data === 'object') {\n if (headers && typeof headers === 'object') {\n const hasContentType = Object.keys(headers).some(\n (key) => key.toLowerCase() === 'content-type',\n );\n if (!hasContentType) {\n headers['Content-Type'] = 'application/json';\n }\n }\n try {\n return JSON.stringify(data);\n } catch (e: any) {\n if (e instanceof TypeError && e.message.toLowerCase().includes('circular')) {\n throw new Error('Accessio: Cannot stringify circular structure in request data');\n }\n throw e;\n }\n }\n\n return data;\n}\n\nexport function defaultTransformResponse(data: unknown): unknown {\n if (typeof data === 'string') {\n try {\n return JSON.parse(data);\n } catch {\n // Not JSON — return as-is\n }\n }\n return data;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,SAAS,wBACd,MACA,SACS;AACT,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC,WAAO;AAAA,EACT;AAEA,MACE,OAAO,SAAS,YAChB,gBAAgB,eACf,OAAO,SAAS,eAAe,gBAAgB,QAC/C,OAAO,aAAa,eAAe,gBAAgB,YACnD,OAAO,oBAAoB,eAAe,gBAAgB,mBAC1D,OAAO,mBAAmB,eAAe,gBAAgB,gBAC1D;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,QAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,YAAM,iBAAiB,OAAO,KAAK,OAAO,EAAE;AAAA,QAC1C,CAAC,QAAQ,IAAI,YAAY,MAAM;AAAA,MACjC;AACA,UAAI,CAAC,gBAAgB;AACnB,gBAAQ,cAAc,IAAI;AAAA,MAC5B;AAAA,IACF;AACA,QAAI;AACF,aAAO,KAAK,UAAU,IAAI;AAAA,IAC5B,SAAS,GAAQ;AACf,UAAI,aAAa,aAAa,EAAE,QAAQ,YAAY,EAAE,SAAS,UAAU,GAAG;AAC1E,cAAM,IAAI,MAAM,+DAA+D;AAAA,MACjF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,yBAAyB,MAAwB;AAC/D,MAAI,OAAO,SAAS,UAAU;AAC5B,QAAI;AACF,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,QAAQ;AAAA,IAER;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,45 @@
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
+ var auth_exports = {};
20
+ __export(auth_exports, {
21
+ setBasicAuth: () => setBasicAuth
22
+ });
23
+ module.exports = __toCommonJS(auth_exports);
24
+ function setBasicAuth(config, headers) {
25
+ if (!config.auth) return;
26
+ const username = config.auth.username || "";
27
+ const password = config.auth.password || "";
28
+ const credentials = `${username}:${password}`;
29
+ let encoded;
30
+ if (typeof Buffer !== "undefined") {
31
+ encoded = Buffer.from(credentials).toString("base64");
32
+ } else {
33
+ encoded = btoa(
34
+ encodeURIComponent(credentials).replace(/%([0-9A-F]{2})/g, (match, p1) => {
35
+ return String.fromCharCode(parseInt(p1, 16));
36
+ })
37
+ );
38
+ }
39
+ headers["Authorization"] = `Basic ${encoded}`;
40
+ }
41
+ // Annotate the CommonJS export names for ESM import in node:
42
+ 0 && (module.exports = {
43
+ setBasicAuth
44
+ });
45
+ //# sourceMappingURL=auth.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/helpers/auth.ts"],"sourcesContent":["import type { AccessioRequestConfig } from '../types';\n\nexport function setBasicAuth(\n config: AccessioRequestConfig,\n headers: Record<string, string | string[]>,\n): void {\n if (!config.auth) return;\n const username = config.auth.username || '';\n const password = config.auth.password || '';\n const credentials = `${username}:${password}`;\n\n let encoded: string;\n if (typeof Buffer !== 'undefined') {\n encoded = Buffer.from(credentials).toString('base64');\n } else {\n // Cryptic but effective UTF-8 to Base64 conversion for browsers lacking Buffer.\n // encodeURIComponent converts non-ASCII to %XX, then we replace %XX with raw bytes\n // before applying btoa.\n encoded = btoa(\n encodeURIComponent(credentials).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n }),\n );\n }\n headers['Authorization'] = `Basic ${encoded}`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,aACd,QACA,SACM;AACN,MAAI,CAAC,OAAO,KAAM;AAClB,QAAM,WAAW,OAAO,KAAK,YAAY;AACzC,QAAM,WAAW,OAAO,KAAK,YAAY;AACzC,QAAM,cAAc,GAAG,QAAQ,IAAI,QAAQ;AAE3C,MAAI;AACJ,MAAI,OAAO,WAAW,aAAa;AACjC,cAAU,OAAO,KAAK,WAAW,EAAE,SAAS,QAAQ;AAAA,EACtD,OAAO;AAIL,cAAU;AAAA,MACR,mBAAmB,WAAW,EAAE,QAAQ,mBAAmB,CAAC,OAAO,OAAO;AACxE,eAAO,OAAO,aAAa,SAAS,IAAI,EAAE,CAAC;AAAA,MAC7C,CAAC;AAAA,IACH;AAAA,EACF;AACA,UAAQ,eAAe,IAAI,SAAS,OAAO;AAC7C;","names":[]}
@@ -0,0 +1,78 @@
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
+ var flattenHeaders_exports = {};
20
+ __export(flattenHeaders_exports, {
21
+ buildFetchHeaders: () => buildFetchHeaders,
22
+ flattenHeaders: () => flattenHeaders,
23
+ removeContentType: () => removeContentType
24
+ });
25
+ module.exports = __toCommonJS(flattenHeaders_exports);
26
+ const METHOD_KEYS = /* @__PURE__ */ new Set([
27
+ "common",
28
+ "delete",
29
+ "get",
30
+ "head",
31
+ "options",
32
+ "post",
33
+ "put",
34
+ "patch"
35
+ ]);
36
+ function flattenHeaders(headers, method) {
37
+ if (!headers) return {};
38
+ const merged = {};
39
+ const methodLower = (method || "get").toLowerCase();
40
+ if (headers["common"]) {
41
+ Object.assign(merged, headers["common"]);
42
+ }
43
+ if (headers[methodLower]) {
44
+ Object.assign(merged, headers[methodLower]);
45
+ }
46
+ for (const key in headers) {
47
+ if (Object.prototype.hasOwnProperty.call(headers, key) && !METHOD_KEYS.has(key)) {
48
+ merged[key] = headers[key];
49
+ }
50
+ }
51
+ return merged;
52
+ }
53
+ function removeContentType(headers) {
54
+ const keys = Object.keys(headers).filter((k) => k.toLowerCase() === "content-type");
55
+ for (const key of keys) {
56
+ delete headers[key];
57
+ }
58
+ }
59
+ function buildFetchHeaders(headers) {
60
+ const fetchHeaders = new Headers();
61
+ for (const [key, value] of Object.entries(headers)) {
62
+ if (Array.isArray(value)) {
63
+ for (const v of value) {
64
+ fetchHeaders.append(key, v);
65
+ }
66
+ } else {
67
+ fetchHeaders.set(key, value);
68
+ }
69
+ }
70
+ return fetchHeaders;
71
+ }
72
+ // Annotate the CommonJS export names for ESM import in node:
73
+ 0 && (module.exports = {
74
+ buildFetchHeaders,
75
+ flattenHeaders,
76
+ removeContentType
77
+ });
78
+ //# sourceMappingURL=flattenHeaders.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/helpers/flattenHeaders.ts"],"sourcesContent":["const METHOD_KEYS = new Set<string>([\n 'common',\n 'delete',\n 'get',\n 'head',\n 'options',\n 'post',\n 'put',\n 'patch',\n]);\n\ntype HeadersConfig = Record<string, Record<string, string | string[]>>;\n\nexport function flattenHeaders(\n headers: HeadersConfig | undefined,\n method?: string,\n): Record<string, string | string[]> {\n if (!headers) return {};\n\n const merged: Record<string, string | string[]> = {};\n const methodLower = (method || 'get').toLowerCase();\n\n if (headers['common']) {\n Object.assign(merged, headers['common']);\n }\n\n if (headers[methodLower]) {\n Object.assign(merged, headers[methodLower]);\n }\n\n for (const key in headers) {\n if (Object.prototype.hasOwnProperty.call(headers, key) && !METHOD_KEYS.has(key)) {\n merged[key] = headers[key] as unknown as string | string[];\n }\n }\n\n return merged;\n}\n\nexport function removeContentType(headers: Record<string, string | string[]>): void {\n const keys = Object.keys(headers).filter((k) => k.toLowerCase() === 'content-type');\n for (const key of keys) {\n delete headers[key];\n }\n}\n\nexport function buildFetchHeaders(headers: Record<string, string | string[]>): Headers {\n const fetchHeaders = new Headers();\n for (const [key, value] of Object.entries(headers)) {\n if (Array.isArray(value)) {\n for (const v of value) {\n fetchHeaders.append(key, v);\n }\n } else {\n fetchHeaders.set(key, value);\n }\n }\n return fetchHeaders;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAM,cAAc,oBAAI,IAAY;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAIM,SAAS,eACd,SACA,QACmC;AACnC,MAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,QAAM,SAA4C,CAAC;AACnD,QAAM,eAAe,UAAU,OAAO,YAAY;AAElD,MAAI,QAAQ,QAAQ,GAAG;AACrB,WAAO,OAAO,QAAQ,QAAQ,QAAQ,CAAC;AAAA,EACzC;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO,OAAO,QAAQ,QAAQ,WAAW,CAAC;AAAA,EAC5C;AAEA,aAAW,OAAO,SAAS;AACzB,QAAI,OAAO,UAAU,eAAe,KAAK,SAAS,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,GAAG;AAC/E,aAAO,GAAG,IAAI,QAAQ,GAAG;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,SAAkD;AAClF,QAAM,OAAO,OAAO,KAAK,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,MAAM,cAAc;AAClF,aAAW,OAAO,MAAM;AACtB,WAAO,QAAQ,GAAG;AAAA,EACpB;AACF;AAEO,SAAS,kBAAkB,SAAqD;AACrF,QAAM,eAAe,IAAI,QAAQ;AACjC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAW,KAAK,OAAO;AACrB,qBAAa,OAAO,KAAK,CAAC;AAAA,MAC5B;AAAA,IACF,OAAO;AACL,mBAAa,IAAI,KAAK,KAAK;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -24,9 +24,21 @@ module.exports = __toCommonJS(parseHeaders_exports);
24
24
  function parseHeaders(headers) {
25
25
  const parsed = {};
26
26
  if (!headers) return parsed;
27
+ const addHeader = (key, value) => {
28
+ const k = key.toLowerCase();
29
+ if (parsed[k]) {
30
+ if (Array.isArray(parsed[k])) {
31
+ parsed[k].push(value);
32
+ } else {
33
+ parsed[k] = [parsed[k], value];
34
+ }
35
+ } else {
36
+ parsed[k] = value;
37
+ }
38
+ };
27
39
  if (typeof headers.forEach === "function") {
28
40
  headers.forEach((value, key) => {
29
- parsed[key.toLowerCase()] = value;
41
+ addHeader(key, value);
30
42
  });
31
43
  return parsed;
32
44
  }
@@ -34,16 +46,16 @@ function parseHeaders(headers) {
34
46
  headers.split("\n").forEach((line) => {
35
47
  const index = line.indexOf(":");
36
48
  if (index > 0) {
37
- const key = line.substring(0, index).trim().toLowerCase();
49
+ const key = line.substring(0, index).trim();
38
50
  const value = line.substring(index + 1).trim();
39
- parsed[key] = value;
51
+ addHeader(key, value);
40
52
  }
41
53
  });
42
54
  return parsed;
43
55
  }
44
56
  if (typeof headers === "object") {
45
57
  Object.keys(headers).forEach((key) => {
46
- parsed[key.toLowerCase()] = headers[key];
58
+ addHeader(key, headers[key]);
47
59
  });
48
60
  return parsed;
49
61
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/helpers/parseHeaders.ts"],"sourcesContent":["export default function parseHeaders(headers: any): Record<string, string> {\n const parsed: Record<string, string> = {};\n\n if (!headers) return parsed;\n\n if (typeof headers.forEach === 'function') {\n headers.forEach((value: string, key: string) => {\n parsed[key.toLowerCase()] = value;\n });\n return parsed;\n }\n\n if (typeof headers === 'string') {\n headers.split('\\n').forEach((line: string) => {\n const index = line.indexOf(':');\n if (index > 0) {\n const key = line.substring(0, index).trim().toLowerCase();\n const value = line.substring(index + 1).trim();\n parsed[key] = value;\n }\n });\n return parsed;\n }\n\n if (typeof headers === 'object') {\n Object.keys(headers).forEach((key) => {\n parsed[key.toLowerCase()] = headers[key];\n });\n return parsed;\n }\n\n return parsed;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAe,SAAR,aAA8B,SAAsC;AACzE,QAAM,SAAiC,CAAC;AAExC,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,OAAO,QAAQ,YAAY,YAAY;AACzC,YAAQ,QAAQ,CAAC,OAAe,QAAgB;AAC9C,aAAO,IAAI,YAAY,CAAC,IAAI;AAAA,IAC9B,CAAC;AACD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,UAAU;AAC/B,YAAQ,MAAM,IAAI,EAAE,QAAQ,CAAC,SAAiB;AAC5C,YAAM,QAAQ,KAAK,QAAQ,GAAG;AAC9B,UAAI,QAAQ,GAAG;AACb,cAAM,MAAM,KAAK,UAAU,GAAG,KAAK,EAAE,KAAK,EAAE,YAAY;AACxD,cAAM,QAAQ,KAAK,UAAU,QAAQ,CAAC,EAAE,KAAK;AAC7C,eAAO,GAAG,IAAI;AAAA,MAChB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO,KAAK,OAAO,EAAE,QAAQ,CAAC,QAAQ;AACpC,aAAO,IAAI,YAAY,CAAC,IAAI,QAAQ,GAAG;AAAA,IACzC,CAAC;AACD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../src/helpers/parseHeaders.ts"],"sourcesContent":["export default function parseHeaders(headers: any): Record<string, string | string[]> {\n const parsed: Record<string, string | string[]> = {};\n\n if (!headers) return parsed;\n\n const addHeader = (key: string, value: string) => {\n const k = key.toLowerCase();\n if (parsed[k]) {\n if (Array.isArray(parsed[k])) {\n (parsed[k] as string[]).push(value);\n } else {\n parsed[k] = [parsed[k] as string, value];\n }\n } else {\n parsed[k] = value;\n }\n };\n\n if (typeof headers.forEach === 'function') {\n headers.forEach((value: string, key: string) => {\n addHeader(key, value);\n });\n return parsed;\n }\n\n if (typeof headers === 'string') {\n headers.split('\\n').forEach((line: string) => {\n const index = line.indexOf(':');\n if (index > 0) {\n const key = line.substring(0, index).trim();\n const value = line.substring(index + 1).trim();\n addHeader(key, value);\n }\n });\n return parsed;\n }\n\n if (typeof headers === 'object') {\n Object.keys(headers).forEach((key) => {\n addHeader(key, headers[key]);\n });\n return parsed;\n }\n\n return parsed;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAe,SAAR,aAA8B,SAAiD;AACpF,QAAM,SAA4C,CAAC;AAEnD,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,YAAY,CAAC,KAAa,UAAkB;AAChD,UAAM,IAAI,IAAI,YAAY;AAC1B,QAAI,OAAO,CAAC,GAAG;AACb,UAAI,MAAM,QAAQ,OAAO,CAAC,CAAC,GAAG;AAC5B,QAAC,OAAO,CAAC,EAAe,KAAK,KAAK;AAAA,MACpC,OAAO;AACL,eAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAa,KAAK;AAAA,MACzC;AAAA,IACF,OAAO;AACL,aAAO,CAAC,IAAI;AAAA,IACd;AAAA,EACF;AAEA,MAAI,OAAO,QAAQ,YAAY,YAAY;AACzC,YAAQ,QAAQ,CAAC,OAAe,QAAgB;AAC9C,gBAAU,KAAK,KAAK;AAAA,IACtB,CAAC;AACD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,UAAU;AAC/B,YAAQ,MAAM,IAAI,EAAE,QAAQ,CAAC,SAAiB;AAC5C,YAAM,QAAQ,KAAK,QAAQ,GAAG;AAC9B,UAAI,QAAQ,GAAG;AACb,cAAM,MAAM,KAAK,UAAU,GAAG,KAAK,EAAE,KAAK;AAC1C,cAAM,QAAQ,KAAK,UAAU,QAAQ,CAAC,EAAE,KAAK;AAC7C,kBAAU,KAAK,KAAK;AAAA,MACtB;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO,KAAK,OAAO,EAAE,QAAQ,CAAC,QAAQ;AACpC,gBAAU,KAAK,QAAQ,GAAG,CAAC;AAAA,IAC7B,CAAC;AACD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;","names":[]}
@@ -36,7 +36,10 @@ function createRateLimiter(maxConcurrent = Infinity, maxQueueSize = Infinity) {
36
36
  }
37
37
  let active = 0;
38
38
  let destroyed = false;
39
- const queue = [];
39
+ let head = 0;
40
+ let tail = 0;
41
+ let pendingCount = 0;
42
+ const queue = {};
40
43
  function acquire() {
41
44
  if (destroyed) {
42
45
  return Promise.reject(new Error("[Accessio] Rate limiter has been destroyed"));
@@ -45,30 +48,37 @@ function createRateLimiter(maxConcurrent = Infinity, maxQueueSize = Infinity) {
45
48
  active++;
46
49
  return Promise.resolve();
47
50
  }
48
- if (queue.length >= maxQueueSize) {
51
+ if (pendingCount >= maxQueueSize) {
49
52
  return Promise.reject(
50
53
  new Error(`[Accessio] Rate limiter queue size exceeded maxQueueSize (${maxQueueSize})`)
51
54
  );
52
55
  }
53
56
  return new Promise((resolve, reject) => {
54
- queue.push({ resolve, reject });
57
+ queue[tail++] = { resolve, reject };
58
+ pendingCount++;
55
59
  });
56
60
  }
57
61
  function release() {
58
62
  if (destroyed) return;
59
63
  if (active <= 0) return;
60
64
  active--;
61
- if (queue.length > 0 && active < maxConcurrent) {
65
+ if (pendingCount > 0 && active < maxConcurrent) {
62
66
  active++;
63
- const next = queue.shift();
67
+ const next = queue[head];
68
+ delete queue[head];
69
+ head++;
70
+ pendingCount--;
64
71
  next?.resolve();
65
72
  }
66
73
  }
67
74
  function destroy() {
68
75
  destroyed = true;
69
76
  const reason = new Error("[Accessio] Rate limiter destroyed \u2014 pending request cancelled");
70
- while (queue.length > 0) {
71
- const next = queue.shift();
77
+ while (pendingCount > 0) {
78
+ const next = queue[head];
79
+ delete queue[head];
80
+ head++;
81
+ pendingCount--;
72
82
  next?.reject(reason);
73
83
  }
74
84
  }
@@ -77,7 +87,7 @@ function createRateLimiter(maxConcurrent = Infinity, maxQueueSize = Infinity) {
77
87
  release,
78
88
  destroy,
79
89
  get pending() {
80
- return queue.length;
90
+ return pendingCount;
81
91
  },
82
92
  get active() {
83
93
  return active;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/helpers/rateLimiter.ts"],"sourcesContent":["import type { RateLimiter, AccessioRequestConfig, AccessioResponse } from '../types';\n\ninterface QueueItem {\n resolve: () => void;\n reject: (reason: Error) => void;\n}\n\nexport function createRateLimiter(\n maxConcurrent: number = Infinity,\n maxQueueSize: number = Infinity,\n): RateLimiter {\n if (maxConcurrent !== Infinity && (!Number.isInteger(maxConcurrent) || maxConcurrent < 1)) {\n throw new RangeError(\n `[Accessio] maxConcurrent must be a positive integer or Infinity, got: ${maxConcurrent}`,\n );\n }\n if (maxQueueSize !== Infinity && (!Number.isInteger(maxQueueSize) || maxQueueSize < 1)) {\n throw new RangeError(\n `[Accessio] maxQueueSize must be a positive integer or Infinity, got: ${maxQueueSize}`,\n );\n }\n let active = 0;\n let destroyed = false;\n const queue: QueueItem[] = [];\n\n function acquire(): Promise<void> {\n if (destroyed) {\n return Promise.reject(new Error('[Accessio] Rate limiter has been destroyed'));\n }\n\n if (active < maxConcurrent) {\n active++;\n return Promise.resolve();\n }\n\n if (queue.length >= maxQueueSize) {\n return Promise.reject(\n new Error(`[Accessio] Rate limiter queue size exceeded maxQueueSize (${maxQueueSize})`),\n );\n }\n\n return new Promise((resolve, reject) => {\n queue.push({ resolve, reject });\n });\n }\n\n function release(): void {\n if (destroyed) return;\n\n if (active <= 0) return;\n\n active--;\n\n if (queue.length > 0 && active < maxConcurrent) {\n active++;\n const next = queue.shift();\n next?.resolve();\n }\n }\n\n function destroy(): void {\n destroyed = true;\n const reason = new Error('[Accessio] Rate limiter destroyed — pending request cancelled');\n while (queue.length > 0) {\n const next = queue.shift();\n next?.reject(reason);\n }\n }\n\n return {\n acquire,\n release,\n destroy,\n get pending() {\n return queue.length;\n },\n get active() {\n return active;\n },\n get destroyed() {\n return destroyed;\n },\n };\n}\n\nexport async function rateLimitedRequest<T = unknown>(\n dispatchFn: (config: AccessioRequestConfig) => Promise<AccessioResponse<T>>,\n limiter: RateLimiter,\n config: AccessioRequestConfig,\n): Promise<AccessioResponse<T>> {\n await limiter.acquire();\n try {\n return await dispatchFn(config);\n } finally {\n limiter.release();\n }\n}\n\nexport default createRateLimiter;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,SAAS,kBACd,gBAAwB,UACxB,eAAuB,UACV;AACb,MAAI,kBAAkB,aAAa,CAAC,OAAO,UAAU,aAAa,KAAK,gBAAgB,IAAI;AACzF,UAAM,IAAI;AAAA,MACR,yEAAyE,aAAa;AAAA,IACxF;AAAA,EACF;AACA,MAAI,iBAAiB,aAAa,CAAC,OAAO,UAAU,YAAY,KAAK,eAAe,IAAI;AACtF,UAAM,IAAI;AAAA,MACR,wEAAwE,YAAY;AAAA,IACtF;AAAA,EACF;AACA,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,QAAM,QAAqB,CAAC;AAE5B,WAAS,UAAyB;AAChC,QAAI,WAAW;AACb,aAAO,QAAQ,OAAO,IAAI,MAAM,4CAA4C,CAAC;AAAA,IAC/E;AAEA,QAAI,SAAS,eAAe;AAC1B;AACA,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAEA,QAAI,MAAM,UAAU,cAAc;AAChC,aAAO,QAAQ;AAAA,QACb,IAAI,MAAM,6DAA6D,YAAY,GAAG;AAAA,MACxF;AAAA,IACF;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,KAAK,EAAE,SAAS,OAAO,CAAC;AAAA,IAChC,CAAC;AAAA,EACH;AAEA,WAAS,UAAgB;AACvB,QAAI,UAAW;AAEf,QAAI,UAAU,EAAG;AAEjB;AAEA,QAAI,MAAM,SAAS,KAAK,SAAS,eAAe;AAC9C;AACA,YAAM,OAAO,MAAM,MAAM;AACzB,YAAM,QAAQ;AAAA,IAChB;AAAA,EACF;AAEA,WAAS,UAAgB;AACvB,gBAAY;AACZ,UAAM,SAAS,IAAI,MAAM,oEAA+D;AACxF,WAAO,MAAM,SAAS,GAAG;AACvB,YAAM,OAAO,MAAM,MAAM;AACzB,YAAM,OAAO,MAAM;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,UAAU;AACZ,aAAO,MAAM;AAAA,IACf;AAAA,IACA,IAAI,SAAS;AACX,aAAO;AAAA,IACT;AAAA,IACA,IAAI,YAAY;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,eAAsB,mBACpB,YACA,SACA,QAC8B;AAC9B,QAAM,QAAQ,QAAQ;AACtB,MAAI;AACF,WAAO,MAAM,WAAW,MAAM;AAAA,EAChC,UAAE;AACA,YAAQ,QAAQ;AAAA,EAClB;AACF;AAEA,IAAO,sBAAQ;","names":[]}
1
+ {"version":3,"sources":["../../src/helpers/rateLimiter.ts"],"sourcesContent":["import type { RateLimiter, AccessioRequestConfig, AccessioResponse } from '../types';\n\ninterface QueueItem {\n resolve: () => void;\n reject: (reason: Error) => void;\n}\n\nexport function createRateLimiter(\n maxConcurrent: number = Infinity,\n maxQueueSize: number = Infinity,\n): RateLimiter {\n if (maxConcurrent !== Infinity && (!Number.isInteger(maxConcurrent) || maxConcurrent < 1)) {\n throw new RangeError(\n `[Accessio] maxConcurrent must be a positive integer or Infinity, got: ${maxConcurrent}`,\n );\n }\n if (maxQueueSize !== Infinity && (!Number.isInteger(maxQueueSize) || maxQueueSize < 1)) {\n throw new RangeError(\n `[Accessio] maxQueueSize must be a positive integer or Infinity, got: ${maxQueueSize}`,\n );\n }\n let active = 0;\n let destroyed = false;\n let head = 0;\n let tail = 0;\n let pendingCount = 0;\n const queue: Record<number, QueueItem> = {};\n\n function acquire(): Promise<void> {\n if (destroyed) {\n return Promise.reject(new Error('[Accessio] Rate limiter has been destroyed'));\n }\n\n if (active < maxConcurrent) {\n active++;\n return Promise.resolve();\n }\n\n if (pendingCount >= maxQueueSize) {\n return Promise.reject(\n new Error(`[Accessio] Rate limiter queue size exceeded maxQueueSize (${maxQueueSize})`),\n );\n }\n\n return new Promise((resolve, reject) => {\n queue[tail++] = { resolve, reject };\n pendingCount++;\n });\n }\n\n function release(): void {\n if (destroyed) return;\n\n if (active <= 0) return;\n\n active--;\n\n if (pendingCount > 0 && active < maxConcurrent) {\n active++;\n const next = queue[head];\n delete queue[head];\n head++;\n pendingCount--;\n next?.resolve();\n }\n }\n\n function destroy(): void {\n destroyed = true;\n const reason = new Error('[Accessio] Rate limiter destroyed — pending request cancelled');\n while (pendingCount > 0) {\n const next = queue[head];\n delete queue[head];\n head++;\n pendingCount--;\n next?.reject(reason);\n }\n }\n\n return {\n acquire,\n release,\n destroy,\n get pending() {\n return pendingCount;\n },\n get active() {\n return active;\n },\n get destroyed() {\n return destroyed;\n },\n };\n}\n\nexport async function rateLimitedRequest<T = unknown>(\n dispatchFn: (config: AccessioRequestConfig) => Promise<AccessioResponse<T>>,\n limiter: RateLimiter,\n config: AccessioRequestConfig,\n): Promise<AccessioResponse<T>> {\n await limiter.acquire();\n try {\n return await dispatchFn(config);\n } finally {\n limiter.release();\n }\n}\n\nexport default createRateLimiter;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,SAAS,kBACd,gBAAwB,UACxB,eAAuB,UACV;AACb,MAAI,kBAAkB,aAAa,CAAC,OAAO,UAAU,aAAa,KAAK,gBAAgB,IAAI;AACzF,UAAM,IAAI;AAAA,MACR,yEAAyE,aAAa;AAAA,IACxF;AAAA,EACF;AACA,MAAI,iBAAiB,aAAa,CAAC,OAAO,UAAU,YAAY,KAAK,eAAe,IAAI;AACtF,UAAM,IAAI;AAAA,MACR,wEAAwE,YAAY;AAAA,IACtF;AAAA,EACF;AACA,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,eAAe;AACnB,QAAM,QAAmC,CAAC;AAE1C,WAAS,UAAyB;AAChC,QAAI,WAAW;AACb,aAAO,QAAQ,OAAO,IAAI,MAAM,4CAA4C,CAAC;AAAA,IAC/E;AAEA,QAAI,SAAS,eAAe;AAC1B;AACA,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAEA,QAAI,gBAAgB,cAAc;AAChC,aAAO,QAAQ;AAAA,QACb,IAAI,MAAM,6DAA6D,YAAY,GAAG;AAAA,MACxF;AAAA,IACF;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,MAAM,IAAI,EAAE,SAAS,OAAO;AAClC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,UAAgB;AACvB,QAAI,UAAW;AAEf,QAAI,UAAU,EAAG;AAEjB;AAEA,QAAI,eAAe,KAAK,SAAS,eAAe;AAC9C;AACA,YAAM,OAAO,MAAM,IAAI;AACvB,aAAO,MAAM,IAAI;AACjB;AACA;AACA,YAAM,QAAQ;AAAA,IAChB;AAAA,EACF;AAEA,WAAS,UAAgB;AACvB,gBAAY;AACZ,UAAM,SAAS,IAAI,MAAM,oEAA+D;AACxF,WAAO,eAAe,GAAG;AACvB,YAAM,OAAO,MAAM,IAAI;AACvB,aAAO,MAAM,IAAI;AACjB;AACA;AACA,YAAM,OAAO,MAAM;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAAA,IACA,IAAI,SAAS;AACX,aAAO;AAAA,IACT;AAAA,IACA,IAAI,YAAY;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,eAAsB,mBACpB,YACA,SACA,QAC8B;AAC9B,QAAM,QAAQ,QAAQ;AACtB,MAAI;AACF,WAAO,MAAM,WAAW,MAAM;AAAA,EAChC,UAAE;AACA,YAAQ,QAAQ;AAAA,EAClB;AACF;AAEA,IAAO,sBAAQ;","names":[]}
@@ -32,7 +32,7 @@ __export(transformData_exports, {
32
32
  });
33
33
  module.exports = __toCommonJS(transformData_exports);
34
34
  var import_accessioError = __toESM(require("../core/accessioError"), 1);
35
- function transformData(transforms, data, headers, config) {
35
+ async function transformData(transforms, data, headers, config) {
36
36
  if (!transforms || !Array.isArray(transforms)) {
37
37
  return data;
38
38
  }
@@ -40,7 +40,7 @@ function transformData(transforms, data, headers, config) {
40
40
  for (const transform of transforms) {
41
41
  if (typeof transform === "function") {
42
42
  try {
43
- result = transform(result, headers);
43
+ result = await transform(result, headers);
44
44
  } catch (err) {
45
45
  throw import_accessioError.default.from(
46
46
  err instanceof Error ? err : new Error(String(err)),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/helpers/transformData.ts"],"sourcesContent":["import AccessioError from '../core/accessioError';\nimport type { TransformFunction, AccessioRequestConfig } from '../types';\n\nexport default function transformData(\n transforms: TransformFunction | TransformFunction[] | undefined,\n data: unknown,\n headers: Record<string, string>,\n config?: AccessioRequestConfig,\n): unknown {\n if (!transforms || !Array.isArray(transforms)) {\n return data;\n }\n\n let result = data;\n\n for (const transform of transforms) {\n if (typeof transform === 'function') {\n try {\n result = transform(result, headers);\n } catch (err) {\n throw AccessioError.from(\n err instanceof Error ? err : new Error(String(err)),\n AccessioError.ERR_BAD_REQUEST,\n config ?? null,\n null,\n null,\n );\n }\n }\n }\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAA0B;AAGX,SAAR,cACL,YACA,MACA,SACA,QACS;AACT,MAAI,CAAC,cAAc,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC7C,WAAO;AAAA,EACT;AAEA,MAAI,SAAS;AAEb,aAAW,aAAa,YAAY;AAClC,QAAI,OAAO,cAAc,YAAY;AACnC,UAAI;AACF,iBAAS,UAAU,QAAQ,OAAO;AAAA,MACpC,SAAS,KAAK;AACZ,cAAM,qBAAAA,QAAc;AAAA,UAClB,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAAA,UAClD,qBAAAA,QAAc;AAAA,UACd,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":["AccessioError"]}
1
+ {"version":3,"sources":["../../src/helpers/transformData.ts"],"sourcesContent":["import AccessioError from '../core/accessioError';\nimport type { TransformFunction, AccessioRequestConfig } from '../types';\n\nexport default async function transformData(\n transforms: TransformFunction | TransformFunction[] | undefined,\n data: unknown,\n headers: Record<string, string | string[]>,\n config?: AccessioRequestConfig,\n): Promise<unknown> {\n if (!transforms || !Array.isArray(transforms)) {\n return data;\n }\n\n let result = data;\n\n for (const transform of transforms) {\n if (typeof transform === 'function') {\n try {\n result = await transform(result, headers);\n } catch (err) {\n throw AccessioError.from(\n err instanceof Error ? err : new Error(String(err)),\n AccessioError.ERR_BAD_REQUEST,\n config ?? null,\n null,\n null,\n );\n }\n }\n }\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAA0B;AAG1B,eAAO,cACL,YACA,MACA,SACA,QACkB;AAClB,MAAI,CAAC,cAAc,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC7C,WAAO;AAAA,EACT;AAEA,MAAI,SAAS;AAEb,aAAW,aAAa,YAAY;AAClC,QAAI,OAAO,cAAc,YAAY;AACnC,UAAI;AACF,iBAAS,MAAM,UAAU,QAAQ,OAAO;AAAA,MAC1C,SAAS,KAAK;AACZ,cAAM,qBAAAA,QAAc;AAAA,UAClB,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAAA,UAClD,qBAAAA,QAAc;AAAA,UACd,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":["AccessioError"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "accessio",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Fast, flexible HTTP client — simple, modular, and dependency-free",
5
5
  "type": "module",
6
6
  "main": "./cjs/index.cjs",
@@ -77,7 +77,7 @@
77
77
  "test": "vitest run",
78
78
  "test:watch": "vitest",
79
79
  "test:coverage": "vitest run --coverage",
80
- "test:browser": "vitest run --config vitest.browser.config.js",
80
+ "test:browser": "vitest run --config vitest.browser.config.ts",
81
81
  "release:npm": "gh workflow run publish-npm.yml -f publish_tag=$(git describe --tags --abbrev=0)",
82
82
  "typecheck": "tsc --noEmit"
83
83
  },