Skip to content

Commit 8a8634c

Browse files
committed
enhance: Update SnapshotInterface to include improvements in getError type
1 parent f65eb4a commit 8a8634c

File tree

8 files changed

+42
-22
lines changed

8 files changed

+42
-22
lines changed

.changeset/smooth-jobs-invite.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@data-client/endpoint": patch
3+
"@data-client/graphql": patch
4+
"@data-client/rest": patch
5+
---
6+
7+
Update SnapshotInterface to include improvements in getError type

.changeset/wild-pillows-protect.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@data-client/core": patch
3+
---
4+
5+
Reduce GC pressure by reusing AbortOptimistic instance

packages/core/src/controller/Controller.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,10 +562,12 @@ function schemaHasEntity(schema: Schema): boolean {
562562
export type { ErrorTypes };
563563

564564
class Snapshot<T = unknown> implements SnapshotInterface {
565+
static readonly abort = new AbortOptimistic();
566+
565567
private state: State<T>;
566568
private controller: Controller;
567569
readonly fetchedAt: number;
568-
readonly abort = new AbortOptimistic();
570+
readonly abort = Snapshot.abort;
569571

570572
constructor(controller: Controller, state: State<T>, fetchedAt = 0) {
571573
this.state = state;

packages/endpoint/src/SnapshotInterface.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import type { EndpointInterface, Queryable } from './interface.js';
33
import type { DenormalizeNullable, SchemaArgs } from './normal.js';
44

55
export interface SnapshotInterface {
6+
readonly fetchedAt: number;
7+
readonly abort: Error;
8+
69
/**
710
* Gets the (globally referentially stable) response for a given endpoint/args pair from state given.
811
* @see https://dataclient.io/docs/api/Snapshot#getResponse
@@ -37,13 +40,15 @@ export interface SnapshotInterface {
3740
};
3841

3942
/** @see https://dataclient.io/docs/api/Snapshot#getError */
40-
getError: <
41-
E extends Pick<EndpointInterface, 'key'>,
42-
Args extends readonly [...Parameters<E['key']>],
43-
>(
43+
getError<E extends EndpointInterface>(
44+
endpoint: E,
45+
...args: readonly [...Parameters<E>] | readonly [null]
46+
): ErrorTypes | undefined;
47+
48+
getError<E extends Pick<EndpointInterface, 'key'>>(
4449
endpoint: E,
45-
...args: Args
46-
) => ErrorTypes | undefined;
50+
...args: readonly [...Parameters<E['key']>] | readonly [null]
51+
): ErrorTypes | undefined;
4752

4853
/**
4954
* Retrieved memoized value for any Querable schema
@@ -53,9 +58,6 @@ export interface SnapshotInterface {
5358
schema: S,
5459
...args: SchemaArgs<S>
5560
): DenormalizeNullable<S> | undefined;
56-
57-
readonly fetchedAt: number;
58-
readonly abort: Error;
5961
}
6062

6163
// looser version to allow for cross-package version compatibility

website/src/components/Playground/editor-types/@data-client/endpoint.d.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ type SchemaArgs<S extends Schema> = S extends EntityInterface<infer U> ? [Entity
6767
}) ? Args : never;
6868

6969
interface SnapshotInterface {
70+
readonly fetchedAt: number;
71+
readonly abort: Error;
7072
/**
7173
* Gets the (globally referentially stable) response for a given endpoint/args pair from state given.
7274
* @see https://dataclient.io/docs/api/Snapshot#getResponse
@@ -87,14 +89,13 @@ interface SnapshotInterface {
8789
expiresAt: number;
8890
};
8991
/** @see https://dataclient.io/docs/api/Snapshot#getError */
90-
getError: <E extends Pick<EndpointInterface, 'key'>, Args extends readonly [...Parameters<E['key']>]>(endpoint: E, ...args: Args) => ErrorTypes | undefined;
92+
getError<E extends EndpointInterface>(endpoint: E, ...args: readonly [...Parameters<E>] | readonly [null]): ErrorTypes | undefined;
93+
getError<E extends Pick<EndpointInterface, 'key'>>(endpoint: E, ...args: readonly [...Parameters<E['key']>] | readonly [null]): ErrorTypes | undefined;
9194
/**
9295
* Retrieved memoized value for any Querable schema
9396
* @see https://dataclient.io/docs/api/Snapshot#get
9497
*/
9598
get<S extends Queryable>(schema: S, ...args: SchemaArgs<S>): DenormalizeNullable<S> | undefined;
96-
readonly fetchedAt: number;
97-
readonly abort: Error;
9899
}
99100
type ExpiryStatusInterface = 1 | 2 | 3;
100101

website/src/components/Playground/editor-types/@data-client/graphql.d.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ type SchemaArgs<S extends Schema> = S extends EntityInterface<infer U> ? [Entity
6767
}) ? Args : never;
6868

6969
interface SnapshotInterface {
70+
readonly fetchedAt: number;
71+
readonly abort: Error;
7072
/**
7173
* Gets the (globally referentially stable) response for a given endpoint/args pair from state given.
7274
* @see https://dataclient.io/docs/api/Snapshot#getResponse
@@ -87,14 +89,13 @@ interface SnapshotInterface {
8789
expiresAt: number;
8890
};
8991
/** @see https://dataclient.io/docs/api/Snapshot#getError */
90-
getError: <E extends Pick<EndpointInterface, 'key'>, Args extends readonly [...Parameters<E['key']>]>(endpoint: E, ...args: Args) => ErrorTypes | undefined;
92+
getError<E extends EndpointInterface>(endpoint: E, ...args: readonly [...Parameters<E>] | readonly [null]): ErrorTypes | undefined;
93+
getError<E extends Pick<EndpointInterface, 'key'>>(endpoint: E, ...args: readonly [...Parameters<E['key']>] | readonly [null]): ErrorTypes | undefined;
9194
/**
9295
* Retrieved memoized value for any Querable schema
9396
* @see https://dataclient.io/docs/api/Snapshot#get
9497
*/
9598
get<S extends Queryable>(schema: S, ...args: SchemaArgs<S>): DenormalizeNullable<S> | undefined;
96-
readonly fetchedAt: number;
97-
readonly abort: Error;
9899
}
99100
type ExpiryStatusInterface = 1 | 2 | 3;
100101

website/src/components/Playground/editor-types/@data-client/rest.d.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ type SchemaArgs<S extends Schema> = S extends EntityInterface<infer U> ? [Entity
6969
}) ? Args : never;
7070

7171
interface SnapshotInterface {
72+
readonly fetchedAt: number;
73+
readonly abort: Error;
7274
/**
7375
* Gets the (globally referentially stable) response for a given endpoint/args pair from state given.
7476
* @see https://dataclient.io/docs/api/Snapshot#getResponse
@@ -89,14 +91,13 @@ interface SnapshotInterface {
8991
expiresAt: number;
9092
};
9193
/** @see https://dataclient.io/docs/api/Snapshot#getError */
92-
getError: <E extends Pick<EndpointInterface, 'key'>, Args extends readonly [...Parameters<E['key']>]>(endpoint: E, ...args: Args) => ErrorTypes | undefined;
94+
getError<E extends EndpointInterface>(endpoint: E, ...args: readonly [...Parameters<E>] | readonly [null]): ErrorTypes | undefined;
95+
getError<E extends Pick<EndpointInterface, 'key'>>(endpoint: E, ...args: readonly [...Parameters<E['key']>] | readonly [null]): ErrorTypes | undefined;
9396
/**
9497
* Retrieved memoized value for any Querable schema
9598
* @see https://dataclient.io/docs/api/Snapshot#get
9699
*/
97100
get<S extends Queryable>(schema: S, ...args: SchemaArgs<S>): DenormalizeNullable<S> | undefined;
98-
readonly fetchedAt: number;
99-
readonly abort: Error;
100101
}
101102
type ExpiryStatusInterface = 1 | 2 | 3;
102103

website/src/components/Playground/editor-types/globals.d.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ type SchemaArgs<S extends Schema> = S extends EntityInterface<infer U> ? [Entity
7373
}) ? Args : never;
7474

7575
interface SnapshotInterface {
76+
readonly fetchedAt: number;
77+
readonly abort: Error;
7678
/**
7779
* Gets the (globally referentially stable) response for a given endpoint/args pair from state given.
7880
* @see https://dataclient.io/docs/api/Snapshot#getResponse
@@ -93,14 +95,13 @@ interface SnapshotInterface {
9395
expiresAt: number;
9496
};
9597
/** @see https://dataclient.io/docs/api/Snapshot#getError */
96-
getError: <E extends Pick<EndpointInterface, 'key'>, Args extends readonly [...Parameters<E['key']>]>(endpoint: E, ...args: Args) => ErrorTypes$1 | undefined;
98+
getError<E extends EndpointInterface>(endpoint: E, ...args: readonly [...Parameters<E>] | readonly [null]): ErrorTypes$1 | undefined;
99+
getError<E extends Pick<EndpointInterface, 'key'>>(endpoint: E, ...args: readonly [...Parameters<E['key']>] | readonly [null]): ErrorTypes$1 | undefined;
97100
/**
98101
* Retrieved memoized value for any Querable schema
99102
* @see https://dataclient.io/docs/api/Snapshot#get
100103
*/
101104
get<S extends Queryable>(schema: S, ...args: SchemaArgs<S>): DenormalizeNullable<S> | undefined;
102-
readonly fetchedAt: number;
103-
readonly abort: Error;
104105
}
105106
type ExpiryStatusInterface = 1 | 2 | 3;
106107

0 commit comments

Comments
 (0)