Skip to content

Commit 8da8bc4

Browse files
committed
Update
1 parent aee9a13 commit 8da8bc4

File tree

10 files changed

+1575
-1700
lines changed

10 files changed

+1575
-1700
lines changed
Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
1-
import type { ApiRequestOptions } from "./ApiRequestOptions"
2-
import type { ApiResult } from "./ApiResult"
1+
import type { ApiRequestOptions } from './ApiRequestOptions';
2+
import type { ApiResult } from './ApiResult';
33

44
export class ApiError extends Error {
5-
public readonly url: string
6-
public readonly status: number
7-
public readonly statusText: string
8-
public readonly body: unknown
9-
public readonly request: ApiRequestOptions
5+
public readonly url: string;
6+
public readonly status: number;
7+
public readonly statusText: string;
8+
public readonly body: unknown;
9+
public readonly request: ApiRequestOptions;
1010

11-
constructor(
12-
request: ApiRequestOptions,
13-
response: ApiResult,
14-
message: string,
15-
) {
16-
super(message)
11+
constructor(request: ApiRequestOptions, response: ApiResult, message: string) {
12+
super(message);
1713

18-
this.name = "ApiError"
19-
this.url = response.url
20-
this.status = response.status
21-
this.statusText = response.statusText
22-
this.body = response.body
23-
this.request = request
24-
}
25-
}
14+
this.name = 'ApiError';
15+
this.url = response.url;
16+
this.status = response.status;
17+
this.statusText = response.statusText;
18+
this.body = response.body;
19+
this.request = request;
20+
}
21+
}
Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
export type ApiRequestOptions<T = unknown> = {
2-
readonly body?: any
3-
readonly cookies?: Record<string, unknown>
4-
readonly errors?: Record<number | string, string>
5-
readonly formData?: Record<string, unknown> | any[] | Blob | File
6-
readonly headers?: Record<string, unknown>
7-
readonly mediaType?: string
8-
readonly method:
9-
| "DELETE"
10-
| "GET"
11-
| "HEAD"
12-
| "OPTIONS"
13-
| "PATCH"
14-
| "POST"
15-
| "PUT"
16-
readonly path?: Record<string, unknown>
17-
readonly query?: Record<string, unknown>
18-
readonly responseHeader?: string
19-
readonly responseTransformer?: (data: unknown) => Promise<T>
20-
readonly url: string
21-
}
2+
readonly body?: any;
3+
readonly cookies?: Record<string, unknown>;
4+
readonly errors?: Record<number | string, string>;
5+
readonly formData?: Record<string, unknown> | any[] | Blob | File;
6+
readonly headers?: Record<string, unknown>;
7+
readonly mediaType?: string;
8+
readonly method:
9+
| 'DELETE'
10+
| 'GET'
11+
| 'HEAD'
12+
| 'OPTIONS'
13+
| 'PATCH'
14+
| 'POST'
15+
| 'PUT';
16+
readonly path?: Record<string, unknown>;
17+
readonly query?: Record<string, unknown>;
18+
readonly responseHeader?: string;
19+
readonly responseTransformer?: (data: unknown) => Promise<T>;
20+
readonly url: string;
21+
};
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export type ApiResult<TData = any> = {
2-
readonly body: TData
3-
readonly ok: boolean
4-
readonly status: number
5-
readonly statusText: string
6-
readonly url: string
7-
}
2+
readonly body: TData;
3+
readonly ok: boolean;
4+
readonly status: number;
5+
readonly statusText: string;
6+
readonly url: string;
7+
};
Lines changed: 118 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,126 +1,126 @@
11
export class CancelError extends Error {
2-
constructor(message: string) {
3-
super(message)
4-
this.name = "CancelError"
5-
}
6-
7-
public get isCancelled(): boolean {
8-
return true
9-
}
2+
constructor(message: string) {
3+
super(message);
4+
this.name = 'CancelError';
5+
}
6+
7+
public get isCancelled(): boolean {
8+
return true;
9+
}
1010
}
1111

1212
export interface OnCancel {
13-
readonly isResolved: boolean
14-
readonly isRejected: boolean
15-
readonly isCancelled: boolean
13+
readonly isResolved: boolean;
14+
readonly isRejected: boolean;
15+
readonly isCancelled: boolean;
1616

17-
(cancelHandler: () => void): void
17+
(cancelHandler: () => void): void;
1818
}
1919

2020
export class CancelablePromise<T> implements Promise<T> {
21-
private _isResolved: boolean
22-
private _isRejected: boolean
23-
private _isCancelled: boolean
24-
readonly cancelHandlers: (() => void)[]
25-
readonly promise: Promise<T>
26-
private _resolve?: (value: T | PromiseLike<T>) => void
27-
private _reject?: (reason?: unknown) => void
28-
29-
constructor(
30-
executor: (
31-
resolve: (value: T | PromiseLike<T>) => void,
32-
reject: (reason?: unknown) => void,
33-
onCancel: OnCancel,
34-
) => void,
35-
) {
36-
this._isResolved = false
37-
this._isRejected = false
38-
this._isCancelled = false
39-
this.cancelHandlers = []
40-
this.promise = new Promise<T>((resolve, reject) => {
41-
this._resolve = resolve
42-
this._reject = reject
43-
44-
const onResolve = (value: T | PromiseLike<T>): void => {
45-
if (this._isResolved || this._isRejected || this._isCancelled) {
46-
return
47-
}
48-
this._isResolved = true
49-
if (this._resolve) this._resolve(value)
50-
}
51-
52-
const onReject = (reason?: unknown): void => {
53-
if (this._isResolved || this._isRejected || this._isCancelled) {
54-
return
55-
}
56-
this._isRejected = true
57-
if (this._reject) this._reject(reason)
58-
}
59-
60-
const onCancel = (cancelHandler: () => void): void => {
61-
if (this._isResolved || this._isRejected || this._isCancelled) {
62-
return
63-
}
64-
this.cancelHandlers.push(cancelHandler)
65-
}
66-
67-
Object.defineProperty(onCancel, "isResolved", {
68-
get: (): boolean => this._isResolved,
69-
})
70-
71-
Object.defineProperty(onCancel, "isRejected", {
72-
get: (): boolean => this._isRejected,
73-
})
74-
75-
Object.defineProperty(onCancel, "isCancelled", {
76-
get: (): boolean => this._isCancelled,
77-
})
78-
79-
return executor(onResolve, onReject, onCancel as OnCancel)
80-
})
81-
}
82-
83-
get [Symbol.toStringTag]() {
84-
return "Cancellable Promise"
85-
}
86-
87-
public then<TResult1 = T, TResult2 = never>(
88-
onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,
89-
onRejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,
90-
): Promise<TResult1 | TResult2> {
91-
return this.promise.then(onFulfilled, onRejected)
92-
}
93-
94-
public catch<TResult = never>(
95-
onRejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null,
96-
): Promise<T | TResult> {
97-
return this.promise.catch(onRejected)
98-
}
99-
100-
public finally(onFinally?: (() => void) | null): Promise<T> {
101-
return this.promise.finally(onFinally)
102-
}
103-
104-
public cancel(): void {
105-
if (this._isResolved || this._isRejected || this._isCancelled) {
106-
return
107-
}
108-
this._isCancelled = true
109-
if (this.cancelHandlers.length) {
110-
try {
111-
for (const cancelHandler of this.cancelHandlers) {
112-
cancelHandler()
113-
}
114-
} catch (error) {
115-
console.warn("Cancellation threw an error", error)
116-
return
117-
}
118-
}
119-
this.cancelHandlers.length = 0
120-
if (this._reject) this._reject(new CancelError("Request aborted"))
121-
}
122-
123-
public get isCancelled(): boolean {
124-
return this._isCancelled
125-
}
126-
}
21+
private _isResolved: boolean;
22+
private _isRejected: boolean;
23+
private _isCancelled: boolean;
24+
readonly cancelHandlers: (() => void)[];
25+
readonly promise: Promise<T>;
26+
private _resolve?: (value: T | PromiseLike<T>) => void;
27+
private _reject?: (reason?: unknown) => void;
28+
29+
constructor(
30+
executor: (
31+
resolve: (value: T | PromiseLike<T>) => void,
32+
reject: (reason?: unknown) => void,
33+
onCancel: OnCancel
34+
) => void
35+
) {
36+
this._isResolved = false;
37+
this._isRejected = false;
38+
this._isCancelled = false;
39+
this.cancelHandlers = [];
40+
this.promise = new Promise<T>((resolve, reject) => {
41+
this._resolve = resolve;
42+
this._reject = reject;
43+
44+
const onResolve = (value: T | PromiseLike<T>): void => {
45+
if (this._isResolved || this._isRejected || this._isCancelled) {
46+
return;
47+
}
48+
this._isResolved = true;
49+
if (this._resolve) this._resolve(value);
50+
};
51+
52+
const onReject = (reason?: unknown): void => {
53+
if (this._isResolved || this._isRejected || this._isCancelled) {
54+
return;
55+
}
56+
this._isRejected = true;
57+
if (this._reject) this._reject(reason);
58+
};
59+
60+
const onCancel = (cancelHandler: () => void): void => {
61+
if (this._isResolved || this._isRejected || this._isCancelled) {
62+
return;
63+
}
64+
this.cancelHandlers.push(cancelHandler);
65+
};
66+
67+
Object.defineProperty(onCancel, 'isResolved', {
68+
get: (): boolean => this._isResolved,
69+
});
70+
71+
Object.defineProperty(onCancel, 'isRejected', {
72+
get: (): boolean => this._isRejected,
73+
});
74+
75+
Object.defineProperty(onCancel, 'isCancelled', {
76+
get: (): boolean => this._isCancelled,
77+
});
78+
79+
return executor(onResolve, onReject, onCancel as OnCancel);
80+
});
81+
}
82+
83+
get [Symbol.toStringTag]() {
84+
return "Cancellable Promise";
85+
}
86+
87+
public then<TResult1 = T, TResult2 = never>(
88+
onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,
89+
onRejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null
90+
): Promise<TResult1 | TResult2> {
91+
return this.promise.then(onFulfilled, onRejected);
92+
}
93+
94+
public catch<TResult = never>(
95+
onRejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null
96+
): Promise<T | TResult> {
97+
return this.promise.catch(onRejected);
98+
}
99+
100+
public finally(onFinally?: (() => void) | null): Promise<T> {
101+
return this.promise.finally(onFinally);
102+
}
103+
104+
public cancel(): void {
105+
if (this._isResolved || this._isRejected || this._isCancelled) {
106+
return;
107+
}
108+
this._isCancelled = true;
109+
if (this.cancelHandlers.length) {
110+
try {
111+
for (const cancelHandler of this.cancelHandlers) {
112+
cancelHandler();
113+
}
114+
} catch (error) {
115+
console.warn('Cancellation threw an error', error);
116+
return;
117+
}
118+
}
119+
this.cancelHandlers.length = 0;
120+
if (this._reject) this._reject(new CancelError('Request aborted'));
121+
}
122+
123+
public get isCancelled(): boolean {
124+
return this._isCancelled;
125+
}
126+
}

0 commit comments

Comments
 (0)