@thepassle/app-tools 1.0.1 → 1.1.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/api/index.js CHANGED
@@ -31,7 +31,7 @@ function handleStatus(response) {
31
31
  * plugins: [
32
32
  * {
33
33
  * beforeFetch: ({url, method, opts, data}) => {},
34
- * afterFetch: (res) => res,
34
+ * afterFetch: ({response}) => response,
35
35
  * }
36
36
  * ]
37
37
  *});
@@ -131,22 +131,22 @@ export class Api {
131
131
  ...(opts?.signal ? { signal: opts.signal } : {}),
132
132
  })
133
133
  /** [PLUGINS - AFTERFETCH] */
134
- .then(async (res) => {
134
+ .then(async (response) => {
135
135
  for (const plugin of plugins) {
136
136
  try {
137
- const afterFetchResult =
138
- (await plugin?.afterFetch?.(res, {
139
- responseType,
140
- headers,
141
- fetchFn,
142
- baseURL,
143
- url,
144
- method,
145
- opts,
146
- data,
147
- })) ?? res;
137
+ const afterFetchResult = await plugin?.afterFetch?.({
138
+ responseType,
139
+ headers,
140
+ fetchFn,
141
+ baseURL,
142
+ url,
143
+ method,
144
+ opts,
145
+ data,
146
+ response,
147
+ });
148
148
  if (afterFetchResult) {
149
- res = afterFetchResult;
149
+ response = afterFetchResult;
150
150
  }
151
151
  } catch (e) {
152
152
  log(`Plugin "${plugin.name}" error on afterFetch hook`);
@@ -154,12 +154,12 @@ export class Api {
154
154
  }
155
155
  }
156
156
 
157
- return res;
157
+ return response;
158
158
  })
159
159
  /** [STATUS] */
160
160
  .then(handleStatus)
161
161
  /** [RESPONSETYPE] */
162
- .then((res) => res[responseType]())
162
+ .then((response) => response[responseType]())
163
163
  .then(async (data) => {
164
164
  for (const plugin of plugins) {
165
165
  try {
@@ -6,12 +6,12 @@ export function abortPlugin() {
6
6
  const requests = new Map();
7
7
 
8
8
  return {
9
- name: 'abort',
9
+ name: "abort",
10
10
  beforeFetch: (meta) => {
11
11
  const { method, url } = meta;
12
12
  requestId = `${method}:${url}`;
13
13
 
14
- if(requests.has(requestId)) {
14
+ if (requests.has(requestId)) {
15
15
  const request = requests.get(requestId);
16
16
  request.abort();
17
17
  }
@@ -21,17 +21,17 @@ export function abortPlugin() {
21
21
  ...meta,
22
22
  opts: {
23
23
  ...meta.opts,
24
- signal: requests.get(requestId).signal
25
- }
24
+ signal: requests.get(requestId).signal,
25
+ },
26
26
  };
27
27
  },
28
- afterFetch: (res) => {
28
+ afterFetch: ({ response }) => {
29
29
  requests.delete(requestId);
30
- return res;
30
+ return response;
31
31
  },
32
32
  // return true if an error should throw, return false if an error should be ignored
33
- handleError: ({name}) => name !== 'AbortError'
34
- }
33
+ handleError: ({ name }) => name !== "AbortError",
34
+ };
35
35
  }
36
36
 
37
- export const abort = abortPlugin();
37
+ export const abort = abortPlugin();
@@ -44,13 +44,13 @@ export function cachePlugin({
44
44
  }
45
45
  }
46
46
  },
47
- afterFetch: async (res, meta) => {
48
- const requestId = `${meta.method}:${meta.url}`;
49
- const clone = res.clone();
47
+ afterFetch: async ({ response, method, url }) => {
48
+ const requestId = `${method}:${url}`;
49
+ const clone = response.clone();
50
50
  const data = await clone.json();
51
51
  cache.set(requestId, { updatedAt: Date.now(), data });
52
52
  evict();
53
- return res;
53
+ return response;
54
54
  },
55
55
  };
56
56
  }
@@ -5,23 +5,23 @@
5
5
  export function jsonPrefixPlugin(jsonPrefix) {
6
6
  let responseType;
7
7
  return {
8
- name: 'jsonPrefix',
9
- beforeFetch: ({responseType: type}) => {
8
+ name: "jsonPrefix",
9
+ beforeFetch: ({ responseType: type }) => {
10
10
  responseType = type;
11
11
  },
12
- afterFetch: async (res) => {
13
- if(jsonPrefix && responseType === 'json') {
14
- let responseAsText = await res.text();
15
-
16
- if(responseAsText.startsWith(jsonPrefix)) {
12
+ afterFetch: async ({ response }) => {
13
+ if (jsonPrefix && responseType === "json") {
14
+ let responseAsText = await response.text();
15
+
16
+ if (responseAsText.startsWith(jsonPrefix)) {
17
17
  responseAsText = responseAsText.substring(jsonPrefix.length);
18
18
  }
19
19
 
20
- return new Response(responseAsText, res);
20
+ return new Response(responseAsText, response);
21
21
  }
22
- return res;
23
- }
24
- }
22
+ return response;
23
+ },
24
+ };
25
25
  }
26
26
 
27
- export const jsonPrefix = jsonPrefixPlugin(`)]}',\n`);
27
+ export const jsonPrefix = jsonPrefixPlugin(`)]}',\n`);
@@ -1,27 +1,31 @@
1
- /**
1
+ /**
2
2
  * @param {{
3
3
  * collapsed?: boolean
4
4
  * }} options
5
- * @returns {import('../index.js').Plugin}
5
+ * @returns {import('../index.js').Plugin}
6
6
  */
7
- export function loggerPlugin({collapsed = true} = {}) {
7
+ export function loggerPlugin({ collapsed = true } = {}) {
8
8
  let m;
9
9
  let start;
10
- const group = collapsed ? 'groupCollapsed' : 'group';
10
+ const group = collapsed ? "groupCollapsed" : "group";
11
11
  return {
12
- name: 'logger',
12
+ name: "logger",
13
13
  beforeFetch: (meta) => {
14
- console[group](`[START] [${new Date().toLocaleTimeString()}] [${meta.method}] "${meta.url}"`);
14
+ console[group](
15
+ `[START] [${new Date().toLocaleTimeString()}] [${meta.method}] "${meta.url}"`,
16
+ );
15
17
  console.table([meta]);
16
- console.groupEnd()
18
+ console.groupEnd();
17
19
  start = Date.now();
18
20
  m = meta;
19
21
  },
20
- afterFetch: (r) => {
21
- console.log(`[END] [${m.method}] "${m.url}" Request took ${Date.now() - start}ms`);
22
- return r;
23
- }
24
- }
22
+ afterFetch: ({ response }) => {
23
+ console.log(
24
+ `[END] [${m.method}] "${m.url}" Request took ${Date.now() - start}ms`,
25
+ );
26
+ return response;
27
+ },
28
+ };
25
29
  }
26
30
 
27
- export const logger = loggerPlugin();
31
+ export const logger = loggerPlugin();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thepassle/app-tools",
3
- "version": "1.0.1",
3
+ "version": "1.1.1",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -12,7 +12,7 @@
12
12
  * plugins: [
13
13
  * {
14
14
  * beforeFetch: ({url, method, opts, data}) => {},
15
- * afterFetch: (res) => res,
15
+ * afterFetch: ({response}) => response,
16
16
  * }
17
17
  * ]
18
18
  *});
@@ -8,12 +8,15 @@ export type BodyMethod = <R>(url: string, data?: object, opts?: RequestOptions)
8
8
  export type BodylessMethod = <R>(url: string, opts?: RequestOptions) => Promise<R>;
9
9
  export type Method = 'GET' | 'DELETE' | 'HEAD' | 'OPTIONS' | 'POST' | 'PUT' | 'PATCH';
10
10
  export interface Plugin {
11
- beforeFetch?: (meta: MetaParams) => MetaParams | Promise<MetaParams> | void;
12
- afterFetch?: (res: Response, meta: MetaParams) => void | Promise<void> | Response | Promise<Response>;
11
+ beforeFetch?: (meta: MetaParams) => MetaParams | Promise<MetaParams> | void | Promise<void>;
12
+ afterFetch?: (meta: AfterFetchParams) => void | Promise<void> | Response | Promise<Response>;
13
13
  transform?: (data: any) => any;
14
14
  name: string;
15
15
  handleError?: (e: Error) => boolean;
16
16
  }
17
+ export interface AfterFetchParams extends MetaParams {
18
+ response: Response;
19
+ }
17
20
  export interface CustomRequestOptions {
18
21
  transform?: (data: object) => object;
19
22
  responseType?: ResponseType;