Skip to content

Commit a391f2d

Browse files
committed
feat(jike-client): add fromJSON
1 parent 2b2d06f commit a391f2d

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

src/client/client.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { HTTPError } from 'ky'
22
import { resolveApiConfig } from '../request'
33
import { ApiClient } from '../api-client'
4+
import { objectPick } from '../utils/objects'
45
import { isSuccess, throwRequestFailureError } from './utils/response'
56
import { resolveAreaCode } from './utils/user'
67
import { JikeUser } from './user'
@@ -235,13 +236,35 @@ export class JikeClient {
235236
return JSON.stringify(await this.toJSON(), undefined, space)
236237
}
237238

239+
/**
240+
* 从 JSON 数据创建
241+
* @param data 数据
242+
*/
243+
static fromJSON(data: JikeClientJSON): JikeClient {
244+
return new JikeClient(
245+
objectPick(data, [
246+
'endpointId',
247+
'endpointUrl',
248+
'bundleId',
249+
'appVersion',
250+
'buildNo',
251+
'userAgent',
252+
'deviceId',
253+
'idfv',
254+
255+
'accessToken',
256+
'refreshToken',
257+
])
258+
)
259+
}
260+
238261
/**
239262
* 反序列化
240263
* @param data 数据
241264
*/
242265
static deserialize(data: string): JikeClient {
243266
const json: JikeClientJSON = JSON.parse(data)
244-
return new JikeClient({ ...json })
267+
return this.fromJSON(json)
245268
}
246269
}
247270

src/utils/objects.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* Create a new subset object by giving keys
3+
*
4+
* @category Object
5+
* @fork {@link https://github.com/antfu/utils/blob/main/src/object.ts#L113}
6+
*/
7+
export function objectPick<O, T extends keyof O>(
8+
obj: O,
9+
keys: T[],
10+
omitUndefined = false
11+
) {
12+
return keys.reduce((n, k) => {
13+
if (k in obj && (!omitUndefined || obj[k] !== undefined)) n[k] = obj[k]
14+
return n
15+
}, {} as Pick<O, T>)
16+
}

0 commit comments

Comments
 (0)