Skip to content

Commit 9b2f4dc

Browse files
authored
Merge pull request #17 from microcmsio/feature/types
feature: Improved type definition
2 parents 0ed2693 + 6c9e8d6 commit 9b2f4dc

File tree

4 files changed

+161
-21
lines changed

4 files changed

+161
-21
lines changed

src/createClient.ts

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,25 @@
55
import fetch from 'node-fetch';
66
import { parseQuery } from './utils/parseQuery';
77
import { isString } from './utils/isCheckValue';
8-
import { ClientParams, MakeRequest, GetRequest } from './types';
8+
import {
9+
MicroCMSClient,
10+
MakeRequest,
11+
GetRequest,
12+
GetListRequest,
13+
GetListDetailRequest,
14+
GetObjectRequest,
15+
MicroCMSListResponse,
16+
MicroCMSListContent,
17+
MicroCMSObjectContent,
18+
} from './types';
919

1020
const BASE_DOMAIN = 'microcms.io';
1121
const API_VERSION = 'v1';
1222

1323
/**
1424
* Initialize SDK Client
1525
*/
16-
export const createClient = ({ serviceDomain, apiKey, globalDraftKey }: ClientParams) => {
26+
export const createClient = ({ serviceDomain, apiKey, globalDraftKey }: MicroCMSClient) => {
1727
if (!serviceDomain || !apiKey) {
1828
throw new Error('parameter is required (check serviceDomain and apiKey)');
1929
}
@@ -74,9 +84,9 @@ export const createClient = ({ serviceDomain, apiKey, globalDraftKey }: ClientPa
7484
};
7585

7686
/**
77-
* Get API data for microCMS
87+
* Get list and object API data for microCMS
7888
*/
79-
const get = async <T>({
89+
const get = async <T = any>({
8090
endpoint,
8191
contentId,
8292
queries = {},
@@ -88,7 +98,62 @@ export const createClient = ({ serviceDomain, apiKey, globalDraftKey }: ClientPa
8898
return await makeRequest<T>({ endpoint, contentId, queries, useGlobalDraftKey });
8999
};
90100

101+
/**
102+
* Get list API data for microCMS
103+
*/
104+
const getList = async <T = any>({
105+
endpoint,
106+
queries = {},
107+
useGlobalDraftKey,
108+
}: GetListRequest): Promise<MicroCMSListResponse<T>> => {
109+
if (!endpoint) {
110+
return Promise.reject(new Error('endpoint is required'));
111+
}
112+
return await makeRequest<MicroCMSListResponse<T>>({ endpoint, queries, useGlobalDraftKey });
113+
};
114+
115+
/**
116+
* Get list API detail data for microCMS
117+
*/
118+
const getListDetail = async <T = any>({
119+
endpoint,
120+
contentId,
121+
queries = {},
122+
useGlobalDraftKey,
123+
}: GetListDetailRequest): Promise<T & MicroCMSListContent> => {
124+
if (!endpoint) {
125+
return Promise.reject(new Error('endpoint is required'));
126+
}
127+
return await makeRequest<T & MicroCMSListContent>({
128+
endpoint,
129+
contentId,
130+
queries,
131+
useGlobalDraftKey,
132+
});
133+
};
134+
135+
/**
136+
* Get object API data for microCMS
137+
*/
138+
const getObject = async <T = any>({
139+
endpoint,
140+
queries = {},
141+
useGlobalDraftKey,
142+
}: GetObjectRequest): Promise<T & MicroCMSObjectContent> => {
143+
if (!endpoint) {
144+
return Promise.reject(new Error('endpoint is required'));
145+
}
146+
return await makeRequest<T & MicroCMSObjectContent>({
147+
endpoint,
148+
queries,
149+
useGlobalDraftKey,
150+
});
151+
};
152+
91153
return {
92154
get,
155+
getList,
156+
getListDetail,
157+
getObject,
93158
};
94159
};

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export { createClient } from './createClient';
2+
export * from './types';

src/types.ts

Lines changed: 88 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,107 @@
1-
export interface ClientParams {
1+
/**
2+
* microCMS createClient params
3+
*/
4+
export interface MicroCMSClient {
25
serviceDomain: string;
36
apiKey: string;
47
globalDraftKey?: string;
58
}
69

10+
type depthNumber = 1 | 2 | 3;
11+
12+
/**
13+
* microCMS queries
14+
* https://document.microcms.io/content-api/get-list-contents#h9ce528688c
15+
* https://document.microcms.io/content-api/get-content#h9ce528688c
16+
*/
17+
export interface MicroCMSQueries {
18+
draftKey?: string;
19+
limit?: number;
20+
offset?: number;
21+
orders?: string;
22+
fields?: string | string[];
23+
q?: string;
24+
depth?: depthNumber;
25+
ids?: string | string[];
26+
filters?: string;
27+
}
28+
29+
/**
30+
* microCMS contentId
31+
* https://document.microcms.io/manual/content-id-setting
32+
*/
33+
export interface MicroCMSContentId {
34+
id: string;
35+
}
36+
37+
/**
38+
* microCMS content common date
39+
*/
40+
export interface MicroCMSDate {
41+
createdAt: string;
42+
updatedAt: string;
43+
publishedAt: string;
44+
revisedAt: string;
45+
}
46+
47+
/**
48+
* microCMS image
49+
*/
50+
export interface MicroCMSImage {
51+
url: string;
52+
width?: number;
53+
height?: number;
54+
}
55+
56+
/**
57+
* microCMS list api Response
58+
*/
59+
export interface MicroCMSListResponse<T> {
60+
contents: (T & MicroCMSListContent)[];
61+
totalCount: number;
62+
limit?: number;
63+
offset: number;
64+
}
65+
66+
/**
67+
* microCMS list content common types
68+
*/
69+
export type MicroCMSListContent = MicroCMSContentId & MicroCMSDate;
70+
71+
/**
72+
* microCMS object content common types
73+
*/
74+
export type MicroCMSObjectContent = MicroCMSDate;
75+
776
export interface MakeRequest {
877
endpoint: string;
978
contentId?: string;
10-
queries?: QueriesType;
79+
queries?: MicroCMSQueries;
1180
useGlobalDraftKey?: boolean;
1281
}
1382

1483
export interface GetRequest {
1584
endpoint: string;
1685
contentId?: string;
17-
queries?: QueriesType;
86+
queries?: MicroCMSQueries;
1887
useGlobalDraftKey?: boolean;
1988
}
2089

21-
type depthNumber = 1 | 2 | 3;
90+
export interface GetListDetailRequest {
91+
endpoint: string;
92+
contentId: string;
93+
queries?: MicroCMSQueries;
94+
useGlobalDraftKey?: boolean;
95+
}
2296

23-
export interface QueriesType {
24-
draftKey?: string;
25-
limit?: number;
26-
offset?: number;
27-
orders?: string;
28-
fields?: string|string[];
29-
q?: string;
30-
depth?: depthNumber;
31-
ids?: string|string[];
32-
filters?: string;
97+
export interface GetListRequest {
98+
endpoint: string;
99+
queries?: MicroCMSQueries;
100+
useGlobalDraftKey?: boolean;
101+
}
102+
103+
export interface GetObjectRequest {
104+
endpoint: string;
105+
queries?: MicroCMSQueries;
106+
useGlobalDraftKey?: boolean;
33107
}

src/utils/parseQuery.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
*/
77
import qs from 'qs';
88
import { isObject } from './isCheckValue';
9-
import { QueriesType } from '../types';
9+
import { MicroCMSQueries } from '../types';
1010

11-
export const parseQuery = (queries: QueriesType): string => {
12-
if (!isObject<QueriesType>(queries)) {
11+
export const parseQuery = (queries: MicroCMSQueries): string => {
12+
if (!isObject<MicroCMSQueries>(queries)) {
1313
throw new Error('queries is not object');
1414
}
1515
const queryString = qs.stringify(queries, {arrayFormat: 'comma'});

0 commit comments

Comments
 (0)