1
- import type {
2
- EntityInterface ,
3
- INormalizeDelegate ,
4
- SchemaSimple ,
5
- } from '../interface.js' ;
6
- import type { AbstractInstanceType } from '../normal.js' ;
1
+ import type { EntityInterface , INormalizeDelegate } from '../interface.js' ;
7
2
import { INVALID } from '../special.js' ;
8
3
9
4
/**
@@ -13,90 +8,141 @@ import { INVALID } from '../special.js';
13
8
* Optional (like variable sized Array and Values) will simply remove the item.
14
9
* @see https://dataclient.io/rest/api/Invalidate
15
10
*/
16
- export default class Invalidate <
11
+ export default function Invalidate <
17
12
E extends EntityInterface & {
18
13
process : any ;
19
14
} ,
20
- > implements SchemaSimple
21
- {
22
- declare protected _entity : E ;
23
-
24
- /**
25
- * Marks entity as Invalid.
26
- *
27
- * This triggers suspense for all endpoints requiring it.
28
- * Optional (like variable sized Array and Values) will simply remove the item.
29
- * @see https://dataclient.io/rest/api/Invalidate
30
- */
31
- constructor ( entity : E ) {
32
- if ( process . env . NODE_ENV !== 'production' && ! entity ) {
33
- throw new Error ( 'Invalidate schema requires "entity" option.' ) ;
34
- }
35
- this . _entity = entity ;
15
+ > ( entity : E ) : E {
16
+ if ( process . env . NODE_ENV !== 'production' && ! entity ) {
17
+ throw new Error ( 'Invalidate schema requires "entity" option.' ) ;
36
18
}
19
+ return Object . create ( entity , {
20
+ normalize : {
21
+ value (
22
+ input : any ,
23
+ parent : any ,
24
+ key : string | undefined ,
25
+ args : any [ ] ,
26
+ visit : ( ...args : any ) => any ,
27
+ delegate : INormalizeDelegate ,
28
+ ) : string {
29
+ // TODO: what's store needs to be a differing type from fromJS
30
+ const processedEntity = entity . process ( input , parent , key , args ) ;
31
+ let pk = entity . pk ( processedEntity , parent , key , args ) ;
37
32
38
- get key ( ) {
39
- return this . _entity . key ;
40
- }
33
+ if (
34
+ process . env . NODE_ENV !== 'production' &&
35
+ ( pk === undefined || pk === '' || pk === 'undefined' )
36
+ ) {
37
+ const error = new Error (
38
+ `Missing usable primary key when normalizing response.
39
+
40
+ This is likely due to a malformed response.
41
+ Try inspecting the network response or fetch() return value.
42
+ Or use debugging tools: https://dataclient.io/docs/getting-started/debugging
43
+ Learn more about schemas: https://dataclient.io/docs/api/schema
44
+
45
+ Invalidate(Entity): Invalidate(${ this . _entity . key } )
46
+ Value (processed): ${ input && JSON . stringify ( input , null , 2 ) }
47
+ ` ,
48
+ ) ;
49
+ ( error as any ) . status = 400 ;
50
+ throw error ;
51
+ }
52
+ pk = `${ pk } ` ; // ensure pk is a string
41
53
42
- normalize (
43
- input : any ,
44
- parent : any ,
45
- key : string | undefined ,
46
- args : any [ ] ,
47
- visit : ( ...args : any ) => any ,
48
- delegate : INormalizeDelegate ,
49
- ) : string {
50
- // TODO: what's store needs to be a differing type from fromJS
51
- const processedEntity = this . _entity . process ( input , parent , key , args ) ;
52
- let pk = this . _entity . pk ( processedEntity , parent , key , args ) ;
54
+ // any queued updates are meaningless with delete, so we should just set it
55
+ // and creates will have a different pk
56
+ delegate . setEntity ( this as any , pk , INVALID ) ;
57
+ return pk ;
58
+ } ,
59
+ } ,
60
+ } ) ;
61
+ }
62
+ // export default class Invalidate<
63
+ // E extends EntityInterface & {
64
+ // process: any;
65
+ // },
66
+ // > implements SchemaSimple
67
+ // {
68
+ // declare protected _entity: E;
53
69
54
- if (
55
- process . env . NODE_ENV !== 'production' &&
56
- ( pk === undefined || pk === '' || pk === 'undefined' )
57
- ) {
58
- const error = new Error (
59
- `Missing usable primary key when normalizing response.
70
+ // /**
71
+ // * Marks entity as Invalid.
72
+ // *
73
+ // * This triggers suspense for all endpoints requiring it.
74
+ // * Optional (like variable sized Array and Values) will simply remove the item.
75
+ // * @see https://dataclient.io/rest/api/Invalidate
76
+ // */
77
+ // constructor(entity: E) {
78
+ // if (process.env.NODE_ENV !== 'production' && !entity) {
79
+ // throw new Error('Invalidate schema requires "entity" option.');
80
+ // }
81
+ // this._entity = entity;
82
+ // }
60
83
61
- This is likely due to a malformed response.
62
- Try inspecting the network response or fetch() return value.
63
- Or use debugging tools: https://dataclient.io/docs/getting-started/debugging
64
- Learn more about schemas: https://dataclient.io/docs/api/schema
84
+ // get key() {
85
+ // return this._entity.key;
86
+ // }
65
87
66
- Invalidate(Entity): Invalidate(${ this . _entity . key } )
67
- Value (processed): ${ input && JSON . stringify ( input , null , 2 ) }
68
- ` ,
69
- ) ;
70
- ( error as any ) . status = 400 ;
71
- throw error ;
72
- }
73
- pk = `${ pk } ` ; // ensure pk is a string
88
+ // normalize(
89
+ // input: any,
90
+ // parent: any,
91
+ // key: string | undefined,
92
+ // args: any[],
93
+ // visit: (...args: any) => any,
94
+ // delegate: INormalizeDelegate,
95
+ // ): string {
96
+ // // TODO: what's store needs to be a differing type from fromJS
97
+ // const processedEntity = this._entity.process(input, parent, key, args);
98
+ // let pk = this._entity.pk(processedEntity, parent, key, args);
74
99
75
- // any queued updates are meaningless with delete, so we should just set it
76
- // and creates will have a different pk
77
- delegate . setEntity ( this as any , pk , INVALID ) ;
78
- return pk ;
79
- }
100
+ // if (
101
+ // process.env.NODE_ENV !== 'production' &&
102
+ // (pk === undefined || pk === '' || pk === 'undefined')
103
+ // ) {
104
+ // const error = new Error(
105
+ // `Missing usable primary key when normalizing response.
80
106
81
- queryKey ( args : any , unvisit : unknown , delegate : unknown ) : undefined {
82
- return undefined ;
83
- }
107
+ // This is likely due to a malformed response.
108
+ // Try inspecting the network response or fetch() return value.
109
+ // Or use debugging tools: https://dataclient.io/docs/getting-started/debugging
110
+ // Learn more about schemas: https://dataclient.io/docs/api/schema
84
111
85
- denormalize (
86
- id : string ,
87
- args : readonly any [ ] ,
88
- unvisit : ( schema : any , input : any ) => any ,
89
- ) : AbstractInstanceType < E > {
90
- return unvisit ( this . _entity , id ) as any ;
91
- }
112
+ // Invalidate(Entity): Invalidate(${this._entity.key})
113
+ // Value (processed): ${input && JSON.stringify(input, null, 2)}
114
+ // `,
115
+ // );
116
+ // (error as any).status = 400;
117
+ // throw error;
118
+ // }
119
+ // pk = `${pk}`; // ensure pk is a string
92
120
93
- /* istanbul ignore next */
94
- _denormalizeNullable ( ) : AbstractInstanceType < E > | undefined {
95
- return { } as any ;
96
- }
121
+ // // any queued updates are meaningless with delete, so we should just set it
122
+ // // and creates will have a different pk
123
+ // delegate.setEntity(this as any, pk, INVALID);
124
+ // return pk;
125
+ // }
97
126
98
- /* istanbul ignore next */
99
- _normalizeNullable ( ) : string | undefined {
100
- return { } as any ;
101
- }
102
- }
127
+ // queryKey(args: any, unvisit: unknown, delegate: unknown): undefined {
128
+ // return undefined;
129
+ // }
130
+
131
+ // denormalize(
132
+ // id: string,
133
+ // args: readonly any[],
134
+ // unvisit: (schema: any, input: any) => any,
135
+ // ): AbstractInstanceType<E> {
136
+ // return unvisit(this._entity, id) as any;
137
+ // }
138
+
139
+ // /* istanbul ignore next */
140
+ // _denormalizeNullable(): AbstractInstanceType<E> | undefined {
141
+ // return {} as any;
142
+ // }
143
+
144
+ // /* istanbul ignore next */
145
+ // _normalizeNullable(): string | undefined {
146
+ // return {} as any;
147
+ // }
148
+ // }
0 commit comments