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' ;
72import { INVALID } from '../special.js' ;
83
94/**
@@ -13,90 +8,141 @@ import { INVALID } from '../special.js';
138 * Optional (like variable sized Array and Values) will simply remove the item.
149 * @see https://dataclient.io/rest/api/Invalidate
1510 */
16- export default class Invalidate <
11+ export default function Invalidate <
1712 E extends EntityInterface & {
1813 process : any ;
1914 } ,
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.' ) ;
3618 }
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 ) ;
3732
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
4153
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;
5369
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+ // }
6083
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+ // }
6587
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);
7499
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.
80106
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
84111
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
92120
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+ // }
97126
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