Skip to content
This repository was archived by the owner on Jun 15, 2021. It is now read-only.

Commit 364d138

Browse files
committed
feat: Adds utils for sync facades.
1 parent 8bdc862 commit 364d138

File tree

3 files changed

+53
-25
lines changed

3 files changed

+53
-25
lines changed

src/factory.ts

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,19 @@
11
import Facade from '@js-entity-repos/core/dist/Facade';
22
import Entity from '@js-entity-repos/core/dist/types/Entity';
3-
import FacadeConfig from './FacadeConfig';
43
import FactoryConfig from './FactoryConfig';
5-
import countEntities from './functions/countEntities';
6-
import createEntity from './functions/createEntity';
7-
import getEntities from './functions/getEntities';
8-
import getEntity from './functions/getEntity';
9-
import patchEntity from './functions/patchEntity';
10-
import removeEntities from './functions/removeEntities';
11-
import removeEntity from './functions/removeEntity';
12-
import replaceEntity from './functions/replaceEntity';
134
import createPromiser from './utils/createPromiser';
5+
import syncFactory from './utils/syncFactory';
146

157
export default <E extends Entity>(factoryConfig: FactoryConfig<E>): Facade<E> => {
16-
// tslint:disable-next-line:no-let
17-
let entities: E[] = [];
18-
const facadeConfig: FacadeConfig<E> = {
19-
defaultPaginationLimit: 10,
20-
getEntities: () => entities,
21-
setEntities: (nextEntities) => entities = nextEntities,
22-
...factoryConfig,
23-
};
8+
const syncFacade = syncFactory(factoryConfig);
249
return {
25-
countEntities: createPromiser(countEntities<E>(facadeConfig)),
26-
createEntity: createPromiser(createEntity<E>(facadeConfig)),
27-
getEntities: createPromiser(getEntities<E>(facadeConfig)),
28-
getEntity: createPromiser(getEntity<E>(facadeConfig)),
29-
patchEntity: createPromiser(patchEntity<E>(facadeConfig)),
30-
removeEntities: createPromiser(removeEntities<E>(facadeConfig)),
31-
removeEntity: createPromiser(removeEntity<E>(facadeConfig)),
32-
replaceEntity: createPromiser(replaceEntity<E>(facadeConfig)),
10+
countEntities: createPromiser(syncFacade.countEntities),
11+
createEntity: createPromiser(syncFacade.createEntity),
12+
getEntities: createPromiser(syncFacade.getEntities),
13+
getEntity: createPromiser(syncFacade.getEntity),
14+
patchEntity: createPromiser(syncFacade.patchEntity),
15+
removeEntities: createPromiser(syncFacade.removeEntities),
16+
removeEntity: createPromiser(syncFacade.removeEntity),
17+
replaceEntity: createPromiser(syncFacade.replaceEntity),
3318
};
3419
};

src/utils/SyncFacade.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import Facade from '@js-entity-repos/core/dist/Facade';
2+
import Entity from '@js-entity-repos/core/dist/types/Entity';
3+
4+
export type PromiseResult<T> = T extends Promise<infer R> ? R : any;
5+
6+
type SyncFacade<E extends Entity> = {
7+
readonly [K in keyof Facade<E>]: PromiseResult<Facade<E>[K]>;
8+
};
9+
10+
export default SyncFacade;

src/utils/syncFactory.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import Entity from '@js-entity-repos/core/dist/types/Entity';
2+
import FacadeConfig from '../FacadeConfig';
3+
import FactoryConfig from '../FactoryConfig';
4+
import countEntities from '../functions/countEntities';
5+
import createEntity from '../functions/createEntity';
6+
import getEntities from '../functions/getEntities';
7+
import getEntity from '../functions/getEntity';
8+
import patchEntity from '../functions/patchEntity';
9+
import removeEntities from '../functions/removeEntities';
10+
import removeEntity from '../functions/removeEntity';
11+
import replaceEntity from '../functions/replaceEntity';
12+
import SyncFacade from './SyncFacade';
13+
14+
export default <E extends Entity>(factoryConfig: FactoryConfig<E>): SyncFacade<E> => {
15+
// tslint:disable-next-line:no-let
16+
let entities: E[] = [];
17+
const facadeConfig: FacadeConfig<E> = {
18+
defaultPaginationLimit: 10,
19+
getEntities: () => entities,
20+
setEntities: (nextEntities) => entities = nextEntities,
21+
...factoryConfig,
22+
};
23+
return {
24+
countEntities: countEntities<E>(facadeConfig),
25+
createEntity: createEntity<E>(facadeConfig),
26+
getEntities: getEntities<E>(facadeConfig),
27+
getEntity: getEntity<E>(facadeConfig),
28+
patchEntity: patchEntity<E>(facadeConfig),
29+
removeEntities: removeEntities<E>(facadeConfig),
30+
removeEntity: removeEntity<E>(facadeConfig),
31+
replaceEntity: replaceEntity<E>(facadeConfig),
32+
};
33+
};

0 commit comments

Comments
 (0)