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

Commit

Permalink
feat: Adds utils for sync facades.
Browse files Browse the repository at this point in the history
  • Loading branch information
ryasmi committed Mar 29, 2018
1 parent 8bdc862 commit 364d138
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 25 deletions.
35 changes: 10 additions & 25 deletions src/factory.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,19 @@
import Facade from '@js-entity-repos/core/dist/Facade';
import Entity from '@js-entity-repos/core/dist/types/Entity';
import FacadeConfig from './FacadeConfig';
import FactoryConfig from './FactoryConfig';
import countEntities from './functions/countEntities';
import createEntity from './functions/createEntity';
import getEntities from './functions/getEntities';
import getEntity from './functions/getEntity';
import patchEntity from './functions/patchEntity';
import removeEntities from './functions/removeEntities';
import removeEntity from './functions/removeEntity';
import replaceEntity from './functions/replaceEntity';
import createPromiser from './utils/createPromiser';
import syncFactory from './utils/syncFactory';

export default <E extends Entity>(factoryConfig: FactoryConfig<E>): Facade<E> => {
// tslint:disable-next-line:no-let
let entities: E[] = [];
const facadeConfig: FacadeConfig<E> = {
defaultPaginationLimit: 10,
getEntities: () => entities,
setEntities: (nextEntities) => entities = nextEntities,
...factoryConfig,
};
const syncFacade = syncFactory(factoryConfig);
return {
countEntities: createPromiser(countEntities<E>(facadeConfig)),
createEntity: createPromiser(createEntity<E>(facadeConfig)),
getEntities: createPromiser(getEntities<E>(facadeConfig)),
getEntity: createPromiser(getEntity<E>(facadeConfig)),
patchEntity: createPromiser(patchEntity<E>(facadeConfig)),
removeEntities: createPromiser(removeEntities<E>(facadeConfig)),
removeEntity: createPromiser(removeEntity<E>(facadeConfig)),
replaceEntity: createPromiser(replaceEntity<E>(facadeConfig)),
countEntities: createPromiser(syncFacade.countEntities),
createEntity: createPromiser(syncFacade.createEntity),
getEntities: createPromiser(syncFacade.getEntities),
getEntity: createPromiser(syncFacade.getEntity),
patchEntity: createPromiser(syncFacade.patchEntity),
removeEntities: createPromiser(syncFacade.removeEntities),
removeEntity: createPromiser(syncFacade.removeEntity),
replaceEntity: createPromiser(syncFacade.replaceEntity),
};
};
10 changes: 10 additions & 0 deletions src/utils/SyncFacade.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import Facade from '@js-entity-repos/core/dist/Facade';
import Entity from '@js-entity-repos/core/dist/types/Entity';

export type PromiseResult<T> = T extends Promise<infer R> ? R : any;

type SyncFacade<E extends Entity> = {
readonly [K in keyof Facade<E>]: PromiseResult<Facade<E>[K]>;
};

export default SyncFacade;
33 changes: 33 additions & 0 deletions src/utils/syncFactory.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import Entity from '@js-entity-repos/core/dist/types/Entity';
import FacadeConfig from '../FacadeConfig';
import FactoryConfig from '../FactoryConfig';
import countEntities from '../functions/countEntities';
import createEntity from '../functions/createEntity';
import getEntities from '../functions/getEntities';
import getEntity from '../functions/getEntity';
import patchEntity from '../functions/patchEntity';
import removeEntities from '../functions/removeEntities';
import removeEntity from '../functions/removeEntity';
import replaceEntity from '../functions/replaceEntity';
import SyncFacade from './SyncFacade';

export default <E extends Entity>(factoryConfig: FactoryConfig<E>): SyncFacade<E> => {
// tslint:disable-next-line:no-let
let entities: E[] = [];
const facadeConfig: FacadeConfig<E> = {
defaultPaginationLimit: 10,
getEntities: () => entities,
setEntities: (nextEntities) => entities = nextEntities,
...factoryConfig,
};
return {
countEntities: countEntities<E>(facadeConfig),
createEntity: createEntity<E>(facadeConfig),
getEntities: getEntities<E>(facadeConfig),
getEntity: getEntity<E>(facadeConfig),
patchEntity: patchEntity<E>(facadeConfig),
removeEntities: removeEntities<E>(facadeConfig),
removeEntity: removeEntity<E>(facadeConfig),
replaceEntity: replaceEntity<E>(facadeConfig),
};
};

0 comments on commit 364d138

Please sign in to comment.