Skip to content

Commit 682f66e

Browse files
committed
fix(akita): support TS strict mode
This is a quick spike created to find out a way to fix akita for Angular 15+ in strict mode Refs: salesforce#870
1 parent e8b7d6a commit 682f66e

File tree

6 files changed

+19
-16
lines changed

6 files changed

+19
-16
lines changed

packages/akita/src/lib/entityStore.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ export class EntityStore<S extends EntityState = any, EntityType = getEntityType
663663
}
664664

665665
// @internal
666-
export class EntityUIStore<UIState, DEPRECATED = any> extends EntityStore<UIState> {
666+
export class EntityUIStore<UIState extends EntityState, DEPRECATED = any> extends EntityStore<UIState> {
667667
_akitaCreateEntityFn: EntityUICreateFn;
668668

669669
constructor(initialState = {}, storeConfig: Partial<StoreConfigOptions> = {}) {

packages/akita/src/lib/plugins/dirtyCheck/dirtyCheckPlugin.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { isUndefined } from '../../isUndefined';
66
import { Query } from '../../query';
77
import { QueryEntity } from '../../queryEntity';
88
import { AkitaPlugin, Queries } from '../plugin';
9+
import { EntityState } from '../../types';
910

1011
type Head<State = any> = State | Partial<State>;
1112

@@ -29,7 +30,7 @@ export type DirtyCheckResetParams<StoreState = any> = {
2930
updateFn?: StoreState | ((head: StoreState, current: StoreState) => any);
3031
};
3132

32-
export class DirtyCheckPlugin<State = any> extends AkitaPlugin<State> {
33+
export class DirtyCheckPlugin<State extends EntityState = any> extends AkitaPlugin<State> {
3334
private head: Head<State>;
3435
private dirty = new BehaviorSubject(false);
3536
private subscription: Subscription;

packages/akita/src/lib/plugins/plugin.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ import { toBoolean } from '../toBoolean';
66
import { getAkitaConfig } from '../config';
77
import { getValue } from '../getValueByString';
88
import { setValue } from '../setValueByString';
9+
import { EntityState } from '../types';
910

10-
export type Queries<State> = Query<State> | QueryEntity<State>;
11+
export type Queries<State extends EntityState> = Query<State> | QueryEntity<State>;
1112

12-
export abstract class AkitaPlugin<State = any> {
13+
export abstract class AkitaPlugin<State extends EntityState = any> {
1314
protected constructor(protected query: Queries<State>, config?: { resetFn?: Function }) {
1415
if (config && config.resetFn) {
1516
if (getAkitaConfig().resettable) {

packages/akita/src/lib/plugins/stateHistory/stateHistoryPlugin.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { BehaviorSubject, distinctUntilChanged, Observable, pairwise } from 'rxj
22
import { logAction } from '../../actions';
33
import { isFunction } from '../../isFunction';
44
import { AkitaPlugin, Queries } from '../plugin';
5+
import { EntityState } from '../../types';
56

67
export interface StateHistoryParams {
78
maxAge?: number;
@@ -15,7 +16,7 @@ export type History<State> = {
1516
future: State[];
1617
};
1718

18-
export class StateHistoryPlugin<State = any> extends AkitaPlugin<State> {
19+
export class StateHistoryPlugin<State extends EntityState = any> extends AkitaPlugin<State> {
1920
/** Allow skipping an update from outside */
2021
private skip = false;
2122

packages/akita/src/lib/queryEntity.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ export class QueryEntity<S extends EntityState, EntityType = getEntityType<S>, I
397397
}
398398

399399
// @internal
400-
export class EntityUIQuery<UIState, DEPRECATED = any> extends QueryEntity<UIState> {
400+
export class EntityUIQuery<UIState extends EntityState, DEPRECATED = any> extends QueryEntity<UIState> {
401401
constructor(store) {
402402
super(store);
403403
}

packages/akita/src/lib/runStoreAction.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { isNil } from './isNil';
44
import { Store } from './store';
55
import { configKey } from './storeConfig';
66
import { __stores__ } from './stores';
7-
import { Constructor } from './types';
7+
import { Constructor, EntityState } from './types';
88

99
export enum StoreAction {
1010
Update = 'UPDATE',
@@ -60,15 +60,15 @@ export function getStoreByName<TStore extends Store<S>, S = TStore extends Store
6060
* Get a {@link EntityStore} from the global store registry.
6161
* @param storeClass The {@link EntityStore} class of the instance to be returned.
6262
*/
63-
export function getEntityStore<TEntityStore extends EntityStore<S>, S = TEntityStore extends EntityStore<infer T> ? T : never>(storeClass: Constructor<TEntityStore>): TEntityStore {
63+
export function getEntityStore<TEntityStore extends EntityStore<S>, S extends EntityState = TEntityStore extends EntityStore<infer T> ? T : never>(storeClass: Constructor<TEntityStore>): TEntityStore {
6464
return getStore(storeClass as Constructor<Store<S>>) as TEntityStore;
6565
}
6666

6767
/**
6868
* Get a {@link EntityStore} from the global store registry.
6969
* @param storeName The {@link EntityStore} name of the instance to be returned.
7070
*/
71-
export function getEntityStoreByName<TEntityStore extends EntityStore<S>, S = TEntityStore extends EntityStore<infer T> ? T : never>(storeName: string): TEntityStore {
71+
export function getEntityStoreByName<TEntityStore extends EntityStore<S>, S extends EntityState = TEntityStore extends EntityStore<infer T> ? T : never>(storeName: string): TEntityStore {
7272
return getStoreByName<TEntityStore, S>(storeName) as TEntityStore;
7373
}
7474

@@ -106,7 +106,7 @@ export function runStoreAction<TStore extends Store<S>, S = TStore extends Store
106106
* runEntityStoreAction(BooksStore, EntityStoreAction.SetEntities, set => set([{ id: 1 }, { id: 2 }]));
107107
*
108108
*/
109-
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TEntityStore extends EntityStore<infer T> ? T : any>(
109+
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S extends EntityState = TEntityStore extends EntityStore<infer T> ? T : any>(
110110
storeClassOrName: Constructor<TEntityStore> | string,
111111
action: EntityStoreAction.SetEntities,
112112
operation: (operator: TEntityStore['set']) => void
@@ -121,7 +121,7 @@ export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TE
121121
* runEntityStoreAction(BooksStore, EntityStoreAction.AddEntities, add => add({ id: 1 }));
122122
*
123123
*/
124-
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TEntityStore extends EntityStore<infer T> ? T : any>(
124+
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S extends EntityState = TEntityStore extends EntityStore<infer T> ? T : any>(
125125
storeClassOrName: Constructor<TEntityStore> | string,
126126
action: EntityStoreAction.AddEntities,
127127
operation: (operator: TEntityStore['add']) => void
@@ -136,7 +136,7 @@ export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TE
136136
* runEntityStoreAction(BooksStore, EntityStoreAction.UpdateEntities, update => update(2, { title: 'New title' }));
137137
*
138138
*/
139-
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TEntityStore extends EntityStore<infer T> ? T : any>(
139+
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S extends EntityState = TEntityStore extends EntityStore<infer T> ? T : any>(
140140
storeClassOrName: Constructor<TEntityStore> | string,
141141
action: EntityStoreAction.UpdateEntities,
142142
operation: (operator: TEntityStore['update']) => void
@@ -151,7 +151,7 @@ export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TE
151151
* runEntityStoreAction(BooksStore, EntityStoreAction.RemoveEntities, remove => remove(2));
152152
*
153153
*/
154-
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TEntityStore extends EntityStore<infer T> ? T : any>(
154+
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S extends EntityState = TEntityStore extends EntityStore<infer T> ? T : any>(
155155
storeClassOrName: Constructor<TEntityStore> | string,
156156
action: EntityStoreAction.RemoveEntities,
157157
operation: (operator: TEntityStore['remove']) => void
@@ -166,7 +166,7 @@ export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TE
166166
* runEntityStoreAction(BooksStore, EntityStoreAction.UpsertEntities, upsert => upsert([2, 3], { title: 'New Title' }, (id, newState) => ({ id, ...newState, price: 0 })));
167167
*
168168
*/
169-
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TEntityStore extends EntityStore<infer T> ? T : any>(
169+
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S extends EntityState = TEntityStore extends EntityStore<infer T> ? T : any>(
170170
storeClassOrName: Constructor<TEntityStore> | string,
171171
action: EntityStoreAction.UpsertEntities,
172172
operation: (operator: TEntityStore['upsert']) => void
@@ -183,12 +183,12 @@ export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TE
183183
* { id: 4, title: 'Another title', price: 0 },
184184
* ));
185185
*/
186-
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TEntityStore extends EntityStore<infer T> ? T : any>(
186+
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S extends EntityState = TEntityStore extends EntityStore<infer T> ? T : any>(
187187
storeClassOrName: Constructor<TEntityStore> | string,
188188
action: EntityStoreAction.UpsertManyEntities,
189189
operation: (operator: TEntityStore['upsertMany']) => void
190190
);
191-
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S = TEntityStore extends EntityStore<infer T> ? T : any>(
191+
export function runEntityStoreAction<TEntityStore extends EntityStore<S>, S extends EntityState = TEntityStore extends EntityStore<infer T> ? T : any>(
192192
storeClassOrName: Constructor<TEntityStore> | string,
193193
action: EntityStoreAction,
194194
operation: (operator: TEntityStore[keyof TEntityStore] & Function) => void

0 commit comments

Comments
 (0)