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

Commit c7165ca

Browse files
committed
fix: Improves factory config defaults.
1 parent 00d4953 commit c7165ca

13 files changed

+54
-56
lines changed

readme.md

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
1. Install it with `npm i @js-entity-repos/memory`.
66
1. For each entity you will need to do the following.
77
1. [Create Entity interface](#entity-interface).
8-
1. [Create a factory config](#factory-config).
98
1. [Construct the facade](#construct-the-facade).
109
1. [Use the facade](https://github.com/js-entity-repos/core/blob/master/docs/facade.md).
1110

@@ -20,28 +19,21 @@ export interface TodoEntity extends Entity {
2019
}
2120
```
2221

23-
### Factory Config
22+
### Construct the Facade
2423

2524
```ts
26-
import FactoryConfig from '@js-entity-repos/memory/dist/Config';
27-
28-
interface State {
29-
todos: TodoEntity[];
30-
}
25+
import factory from '@js-entity-repos/memory/dist/factory';
3126

27+
interface State { todos: TodoEntity[]; }
3228
const state: State = { todos: [] };
33-
const todoFactoryConfig: FactoryConfig = {
34-
defaultPaginationLimit: 100,
29+
30+
const todosFacade = factory({
31+
// Optional property. Defaults to 10.
32+
defaultPaginationLimit: 10,
3533
entityName: 'todo',
34+
// Optional property. Defaults to using entities stored locally in the factory.
3635
getEntities: () => state.todos,
36+
// Optional property. Defaults to using entities stored locally in the factory.
3737
setEntities: (todos) => state.todos = todos,
38-
};
39-
```
40-
41-
### Construct the Facade
42-
43-
```ts
44-
import factory from '@js-entity-repos/memory/dist/factory';
45-
46-
const todosFacade = factory(todoFactoryConfig);
38+
});
4739
```

src/Config.ts renamed to src/FacadeConfig.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Entity from '@js-entity-repos/core/dist/types/Entity';
22

3-
export default interface Config<E extends Entity> {
3+
export default interface FacadeConfig<E extends Entity> {
44
readonly getEntities: () => E[];
55
readonly setEntities: (entities: E[]) => void;
66
readonly entityName: string;

src/FactoryConfig.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import Entity from '@js-entity-repos/core/dist/types/Entity';
2+
3+
export default interface FactoryConfig<E extends Entity> {
4+
readonly getEntities?: () => E[];
5+
readonly setEntities?: (entities: E[]) => void;
6+
readonly entityName: string;
7+
readonly defaultPaginationLimit?: number;
8+
}

src/factory.test.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
11
import facadeTest from '@js-entity-repos/core/dist/tests';
2-
import { TestEntity } from '@js-entity-repos/core/dist/tests/utils/testEntity';
32
import factory from './factory';
43

5-
interface State {
6-
// tslint:disable-next-line:readonly-keyword
7-
entities: TestEntity[];
8-
}
9-
10-
const state: State = { entities: [] };
11-
124
facadeTest(factory({
13-
defaultPaginationLimit: 100,
145
entityName: 'Test Entity',
15-
getEntities: () => state.entities,
16-
setEntities: (entities) => state.entities = entities,
176
}));

src/factory.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Facade from '@js-entity-repos/core/dist/Facade';
22
import Entity from '@js-entity-repos/core/dist/types/Entity';
3-
import Config from './Config';
3+
import FacadeConfig from './FacadeConfig';
4+
import FactoryConfig from './FactoryConfig';
45
import countEntities from './functions/countEntities';
56
import createEntity from './functions/createEntity';
67
import getEntities from './functions/getEntities';
@@ -10,15 +11,23 @@ import removeEntities from './functions/removeEntities';
1011
import removeEntity from './functions/removeEntity';
1112
import replaceEntity from './functions/replaceEntity';
1213

13-
export default <E extends Entity>(config: Config<E>): Facade<E> => {
14+
export default <E extends Entity>(factoryConfig: FactoryConfig<E>): Facade<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+
};
1423
return {
15-
countEntities: countEntities<E>(config),
16-
createEntity: createEntity<E>(config),
17-
getEntities: getEntities<E>(config),
18-
getEntity: getEntity<E>(config),
19-
patchEntity: patchEntity<E>(config),
20-
removeEntities: removeEntities<E>(config),
21-
removeEntity: removeEntity<E>(config),
22-
replaceEntity: replaceEntity<E>(config),
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),
2332
};
2433
};

src/functions/countEntities.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import CountEntities from '@js-entity-repos/core/dist/signatures/CountEntities';
22
import Entity from '@js-entity-repos/core/dist/types/Entity';
3-
import Config from '../Config';
3+
import FacadeConfig from '../FacadeConfig';
44
import filterEntities from '../utils/filterEntities';
55

6-
export default <E extends Entity>(config: Config<E>): CountEntities<E> => {
6+
export default <E extends Entity>(config: FacadeConfig<E>): CountEntities<E> => {
77
return async ({ filter = {} }) => {
88
const entities = config.getEntities();
99
const matchedEntities = filterEntities({ entities, filter });

src/functions/createEntity.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import ConflictingEntityError from '@js-entity-repos/core/dist/errors/Conflictin
22
import CreateEntity from '@js-entity-repos/core/dist/signatures/CreateEntity';
33
import Entity from '@js-entity-repos/core/dist/types/Entity';
44
import Filter from '@js-entity-repos/core/dist/types/Filter';
5-
import Config from '../Config';
5+
import FacadeConfig from '../FacadeConfig';
66
import filterEntities from '../utils/filterEntities';
77

88
export default <E extends Entity>({
99
entityName,
1010
getEntities,
1111
setEntities,
12-
}: Config<E>): CreateEntity<E> => {
12+
}: FacadeConfig<E>): CreateEntity<E> => {
1313
return async ({ id, entity }) => {
1414
const entities = getEntities();
1515
const idFilter = { id } as Filter<E>;

src/functions/getEntities.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import { asc } from '@js-entity-repos/core/dist/types/SortOrder';
77
import createCursorFromEntity from '@js-entity-repos/core/dist/utils/createCursorFromEntity';
88
import createPaginationFilter from '@js-entity-repos/core/dist/utils/createPaginationFilter';
99
import { first, last } from 'lodash';
10-
import Config from '../Config';
10+
import FacadeConfig from '../FacadeConfig';
1111
import filterEntities from '../utils/filterEntities';
1212
import sortEntities from '../utils/sortEntities';
1313

14-
export default <E extends Entity>(config: Config<E>): GetEntities<E> => {
14+
export default <E extends Entity>(config: FacadeConfig<E>): GetEntities<E> => {
1515
const defaultPagination: Pagination = {
1616
cursor: undefined,
1717
direction: forward,

src/functions/getEntity.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import GetEntity from '@js-entity-repos/core/dist/signatures/GetEntity';
22
import Entity from '@js-entity-repos/core/dist/types/Entity';
3-
import Config from '../Config';
3+
import FacadeConfig from '../FacadeConfig';
44
import filterEntity from '../utils/filterEntity';
55

66
export default <E extends Entity>({
77
entityName,
88
getEntities,
9-
}: Config<E>): GetEntity<E> => {
9+
}: FacadeConfig<E>): GetEntity<E> => {
1010
return async ({ id, filter = {} }) => {
1111
const entities = getEntities();
1212
const entity = filterEntity({ entities, entityName, id, filter });

src/functions/patchEntity.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import PatchEntity from '@js-entity-repos/core/dist/signatures/PatchEntity';
22
import Entity from '@js-entity-repos/core/dist/types/Entity';
33
import { difference } from 'lodash';
4-
import Config from '../Config';
4+
import FacadeConfig from '../FacadeConfig';
55
import filterEntity from '../utils/filterEntity';
66

77
export default <E extends Entity>({
88
entityName,
99
getEntities,
1010
setEntities,
11-
}: Config<E>): PatchEntity<E> => {
11+
}: FacadeConfig<E>): PatchEntity<E> => {
1212
return async ({ id, patch, filter = {} }) => {
1313
const entities = getEntities();
1414
const matchedEntity = filterEntity({ entities, entityName, id, filter });

src/functions/removeEntities.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import RemoveEntities from '@js-entity-repos/core/dist/signatures/RemoveEntities';
22
import Entity from '@js-entity-repos/core/dist/types/Entity';
3-
import Config from '../Config';
3+
import FacadeConfig from '../FacadeConfig';
44
import filterEntities from '../utils/filterEntities';
55

6-
export default <E extends Entity>(config: Config<E>): RemoveEntities<E> => {
6+
export default <E extends Entity>(config: FacadeConfig<E>): RemoveEntities<E> => {
77
return async ({ filter = {} }) => {
88
const entities = config.getEntities();
99
const removalFilter = { $nor: [filter] };

src/functions/removeEntity.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import MissingEntityError from '@js-entity-repos/core/dist/errors/MissingEntityE
33
import RemoveEntity from '@js-entity-repos/core/dist/signatures/RemoveEntity';
44
import Entity from '@js-entity-repos/core/dist/types/Entity';
55
import Filter from '@js-entity-repos/core/dist/types/Filter';
6-
import Config from '../Config';
6+
import FacadeConfig from '../FacadeConfig';
77
import filterEntities from '../utils/filterEntities';
88

9-
export default <E extends Entity>(config: Config<E>): RemoveEntity<E> => {
9+
export default <E extends Entity>(config: FacadeConfig<E>): RemoveEntity<E> => {
1010
return async ({ id, filter = {} }) => {
1111
const entities = config.getEntities();
1212
const idFilter = { id } as Filter<E>;

src/functions/replaceEntity.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import ReplaceEntity from '@js-entity-repos/core/dist/signatures/ReplaceEntity';
22
import Entity from '@js-entity-repos/core/dist/types/Entity';
33
import { difference } from 'lodash';
4-
import Config from '../Config';
4+
import FacadeConfig from '../FacadeConfig';
55
import filterEntity from '../utils/filterEntity';
66

77
export default <E extends Entity>({
88
entityName,
99
getEntities,
1010
setEntities,
11-
}: Config<E>): ReplaceEntity<E> => {
11+
}: FacadeConfig<E>): ReplaceEntity<E> => {
1212
return async ({ id, entity, filter = {} }) => {
1313
const entities = getEntities();
1414
const matchedEntity = filterEntity({ entities, entityName, id, filter });

0 commit comments

Comments
 (0)