Skip to content

Commit baa44b7

Browse files
committed
feat(jike-client): cache user instance
1 parent f444cb3 commit baa44b7

File tree

4 files changed

+49
-5
lines changed

4 files changed

+49
-5
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
"@types/md5": "^2.3.2",
5757
"@types/node": "*",
5858
"@types/sharp": "^0.30.2",
59+
"@vitest/ui": "^0.10.0",
5960
"bumpp": "^7.1.1",
6061
"dayjs": "^1.11.1",
6162
"esbuild": "^0.14.38",

pnpm-lock.yaml

Lines changed: 34 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/client/client.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@ interface EventMap {
2323

2424
export type { JikeClientJSON }
2525

26+
const userSelfKey = Symbol('userSelfKey')
27+
2628
export class JikeClient extends EventEmitter<EventMap> {
2729
#refreshToken: string
2830
#config: ApiConfigResolved
2931
#client!: Api
32+
#userCache: { [userSelfKey]?: JikeUser<true> } & Record<string, JikeUser> = {}
3033

3134
get accessToken() {
3235
return this.#config.accessToken
@@ -164,15 +167,17 @@ export class JikeClient extends EventEmitter<EventMap> {
164167
* @returns {@link JikeUser} 实例
165168
*/
166169
getUser<M extends boolean = boolean>(username: string): JikeUser {
167-
return new JikeUser<M>(this, username)
170+
if (this.#userCache[username]) return this.#userCache[username]
171+
return (this.#userCache[username] = new JikeUser<M>(this, username))
168172
}
169173

170174
/**
171175
* 获取自身用户
172176
* @returns {@link JikeUser} 实例
173177
*/
174-
getSelf() {
175-
return new JikeUser<true>(this, undefined)
178+
getSelf(): JikeUser<true> {
179+
if (this.#userCache[userSelfKey]) return this.#userCache[userSelfKey]!
180+
return (this.#userCache[userSelfKey] = new JikeUser<true>(this, undefined))
176181
}
177182

178183
/**

tests/jike-client/constructor.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,10 @@ describe('constructor', () => {
5252
const { beforeRetry, ...clien2Config } = client2.config
5353
expect(clien2Config).toEqual(clienConfig)
5454
})
55+
56+
it('should create user instance only once', () => {
57+
expect(client.getSelf()).toBe(client.getSelf())
58+
const username = '82D23B32-CF36-4C59-AD6F-D05E3552CBF3'
59+
expect(client.getUser(username)).toBe(client.getUser(username))
60+
})
5561
})

0 commit comments

Comments
 (0)