Skip to content

Commit 04980af

Browse files
authored
Merge pull request #97 from takker99/purge-req-and-res
✨ extract request builder and response analyzer in `getPage`/`listPages` and `getProject`/`listProjects`
2 parents 0b58fe7 + fed3e94 commit 04980af

16 files changed

+323
-116
lines changed

rest/__snapshots__/pages.test.ts.snap

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export const snapshot = {};
2+
3+
snapshot[`getPage 1`] = `
4+
Request {
5+
bodyUsed: false,
6+
headers: Headers {},
7+
method: "GET",
8+
redirect: "follow",
9+
url: "https://scrapbox.io/api/pages/takker/%E3%83%86%E3%82%B9%E3%83%88%E3%83%9A%E3%83%BC%E3%82%B8?followRe..."
10+
}
11+
`;
12+
13+
snapshot[`listPages 1`] = `
14+
Request {
15+
bodyUsed: false,
16+
headers: Headers {},
17+
method: "GET",
18+
redirect: "follow",
19+
url: "https://scrapbox.io/api/pages/takker?sort=updated"
20+
}
21+
`;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export const snapshot = {};
2+
3+
snapshot[`getProject 1`] = `
4+
Request {
5+
bodyUsed: false,
6+
headers: Headers {},
7+
method: "GET",
8+
redirect: "follow",
9+
url: "https://scrapbox.io/api/projects/takker"
10+
}
11+
`;
12+
13+
snapshot[`listProjects 1`] = `
14+
Request {
15+
bodyUsed: false,
16+
headers: Headers {},
17+
method: "GET",
18+
redirect: "follow",
19+
url: "https://scrapbox.io/api/projects?ids=dummy-id1&ids=dummy-id2"
20+
}
21+
`;

rest/error.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,14 @@ import { tryToErrorLike } from "../is.ts";
44
/** 想定されない応答が帰ってきたときに投げる例外 */
55
export class UnexpectedResponseError extends Error {
66
name = "UnexpectedResponseError";
7-
request: Request;
8-
response: Response;
97

108
constructor(
11-
init: { request: Request; response: Response },
9+
public response: Response,
1210
) {
1311
super(
14-
`${init.response.status} ${init.response.statusText} when fetching ${init.request.url}`,
12+
`${response.status} ${response.statusText} when fetching ${response.url}`,
1513
);
1614

17-
this.request = init.request.clone();
18-
this.response = init.response.clone();
19-
2015
// @ts-ignore only available on V8
2116
if (Error.captureStackTrace) {
2217
// @ts-ignore only available on V8
@@ -27,14 +22,13 @@ export class UnexpectedResponseError extends Error {
2722

2823
/** 失敗した要求からエラー情報を取り出す */
2924
export const makeError = async <T extends ErrorLike>(
30-
req: Request,
3125
res: Response,
3226
): Promise<{ ok: false; value: T }> => {
3327
const response = res.clone();
3428
const text = await response.text();
3529
const value = tryToErrorLike(text);
3630
if (!value) {
37-
throw new UnexpectedResponseError({ request: req, response });
31+
throw new UnexpectedResponseError(response);
3832
}
3933
return {
4034
ok: false,

rest/getGyazoToken.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,7 @@ export const getGyazoToken = async (
3434

3535
const res = await fetch(req);
3636
if (!res.ok) {
37-
return makeError<NotLoggedInError>(
38-
req,
39-
res,
40-
);
37+
return makeError<NotLoggedInError>(res);
4138
}
4239

4340
const { token } = (await res.json()) as { token?: string };

rest/getSnapshots.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,7 @@ export const getSnapshots = async (
5858
},
5959
};
6060
}
61-
return makeError<NotFoundError | NotLoggedInError | NotMemberError>(
62-
req,
63-
res,
64-
);
61+
return makeError<NotFoundError | NotLoggedInError | NotMemberError>(res);
6562
}
6663

6764
const data = (await res.json()) as PageSnapshot;

rest/getTweetInfo.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export const getTweetInfo = async (
5353
},
5454
};
5555
}
56-
return makeError<SessionError | BadRequestError>(req, res);
56+
return makeError<SessionError | BadRequestError>(res);
5757
}
5858

5959
const tweet = (await res.json()) as TweetInfo;

rest/getWebPageTitle.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export const getWebPageTitle = async (
5353
},
5454
};
5555
}
56-
return makeError<SessionError | BadRequestError>(req, res);
56+
return makeError<SessionError | BadRequestError>(res);
5757
}
5858

5959
const { title } = (await res.json()) as { title: string };

rest/link.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export const getLinks = async (
5353
};
5454
}
5555

56-
return makeError<NotFoundError | NotLoggedInError>(req, res);
56+
return makeError<NotFoundError | NotLoggedInError>(res);
5757
}
5858

5959
const pages = (await res.json()) as SearchedTitle[];

rest/page-data.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export const importPages = async (
4949

5050
const res = await fetch(req);
5151
if (!res.ok) {
52-
return makeError(req, res);
52+
return makeError(res);
5353
}
5454

5555
const { message } = (await res.json()) as { message: string };
@@ -83,9 +83,7 @@ export const exportPages = async <withMetadata extends true | false>(
8383
const res = await fetch(req);
8484

8585
if (!res.ok) {
86-
return makeError<
87-
NotFoundError | NotPrivilegeError | NotLoggedInError
88-
>(req, res);
86+
return makeError<NotFoundError | NotPrivilegeError | NotLoggedInError>(res);
8987
}
9088

9189
const value = (await res.json()) as ExportedData<withMetadata>;

rest/pages.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { getPage, listPages } from "./pages.ts";
2+
import { assertSnapshot } from "../deps/testing.ts";
3+
4+
Deno.test("getPage", async (t) => {
5+
await assertSnapshot(
6+
t,
7+
getPage.toRequest("takker", "テストページ", { followRename: true }),
8+
);
9+
});
10+
Deno.test("listPages", async (t) => {
11+
await assertSnapshot(
12+
t,
13+
listPages.toRequest("takker", { sort: "updated" }),
14+
);
15+
});

0 commit comments

Comments
 (0)