Skip to content

Commit 35db7e9

Browse files
authored
feat!: add database adapter provider for better injection (#46)
1 parent 60cc0fb commit 35db7e9

22 files changed

+449
-222
lines changed

.eslintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"eslint-plugin-tsdoc"
99
],
1010
"rules": {
11-
"no-restricted-imports": ["error",{ "paths": [".", ".."] }],
11+
"no-restricted-imports": ["error",{ "paths": [".", "..", "../.."] }],
1212
"tsdoc/syntax": "warn"
1313
},
1414
"overrides": [

packages/entity-cache-adapter-redis/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"tsc": "tsc",
1313
"clean": "rm -rf build coverage coverage-integration",
1414
"lint": "eslint src --ext '.ts'",
15-
"test": "jest --config ../../resources/jest.config.js --rootDir",
15+
"test": "jest --rootDir --config ../../resources/jest.config.js",
1616
"integration": "../../resources/run-with-docker yarn integration-no-setup",
1717
"integration-no-setup": "jest --config ../../resources/jest-integration.config.js --rootDir --runInBand --passWithNoTests",
1818
"barrelsby": "barrelsby --directory src --location top --exclude tests__ --singleQuotes --exportDefault --delete"

packages/entity-cache-adapter-redis/src/testfixtures/createRedisIntegrationTestEntityCompanionProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import {
44
EntityCompanionProvider,
55
CacheAdapterFlavor,
66
DatabaseAdapterFlavor,
7-
StubDatabaseAdapter,
87
StubQueryContextProvider,
8+
StubDatabaseAdapterProvider,
99
} from '@expo/entity';
1010

1111
import { RedisCacheAdapterContext } from '../RedisCacheAdapter';
@@ -19,7 +19,7 @@ export const createRedisIntegrationTestEntityCompanionProvider = (
1919
metricsAdapter,
2020
{
2121
[DatabaseAdapterFlavor.POSTGRES]: {
22-
adapter: StubDatabaseAdapter,
22+
adapterProvider: new StubDatabaseAdapterProvider(),
2323
queryContextProvider: StubQueryContextProvider,
2424
},
2525
},

packages/entity-database-adapter-knex/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"tsc": "tsc",
1313
"clean": "rm -rf build coverage coverage-integration",
1414
"lint": "eslint src --ext '.ts'",
15-
"test": "jest --config ../../resources/jest.config.js --rootDir --passWithNoTests",
15+
"test": "jest --rootDir --config ../../resources/jest.config.js --passWithNoTests",
1616
"integration": "../../resources/run-with-docker yarn integration-no-setup",
1717
"integration-no-setup": "jest --config ../../resources/jest-integration.config.js --rootDir --runInBand --passWithNoTests",
1818
"barrelsby": "barrelsby --directory src --location top --exclude tests__ --singleQuotes --exportDefault --delete"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import {
2+
IEntityDatabaseAdapterProvider,
3+
EntityConfiguration,
4+
EntityDatabaseAdapter,
5+
} from '@expo/entity';
6+
7+
import PostgresEntityDatabaseAdapter from './PostgresEntityDatabaseAdapter';
8+
9+
export default class PostgresEntityDatabaseAdapterProvider
10+
implements IEntityDatabaseAdapterProvider {
11+
getDatabaseAdapter<TFields>(
12+
entityConfiguration: EntityConfiguration<TFields>
13+
): EntityDatabaseAdapter<TFields> {
14+
return new PostgresEntityDatabaseAdapter(entityConfiguration);
15+
}
16+
}

packages/entity-database-adapter-knex/src/testfixtures/createKnexIntegrationTestEntityCompanionProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from '@expo/entity';
99
import Knex from 'knex';
1010

11-
import PostgresEntityDatabaseAdapter from '../PostgresEntityDatabaseAdapter';
11+
import PostgresEntityDatabaseAdapterProvider from '../PostgresEntityDatabaseAdapterProvider';
1212
import PostgresEntityQueryContextProvider from '../PostgresEntityQueryContextProvider';
1313

1414
export const createKnexIntegrationTestEntityCompanionProvider = (
@@ -19,7 +19,7 @@ export const createKnexIntegrationTestEntityCompanionProvider = (
1919
metricsAdapter,
2020
{
2121
[DatabaseAdapterFlavor.POSTGRES]: {
22-
adapter: PostgresEntityDatabaseAdapter,
22+
adapterProvider: new PostgresEntityDatabaseAdapterProvider(),
2323
queryContextProvider: new PostgresEntityQueryContextProvider(knex),
2424
},
2525
},

packages/entity-example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"tsc": "tsc",
88
"clean": "rm -rf build coverage coverage-integration",
99
"lint": "eslint src --ext '.ts'",
10-
"test": "jest --config ../../resources/jest.config.js --rootDir",
10+
"test": "jest --rootDir --config ../../resources/jest.config.js",
1111
"integration": "../../resources/run-with-docker yarn integration-no-setup",
1212
"integration-no-setup": "jest --config ../../resources/jest-integration.config.js --rootDir --runInBand --passWithNoTests",
1313
"barrelsby": "barrelsby --directory src --location top --exclude tests__ --singleQuotes --exportDefault --delete",

packages/entity-example/src/adapters/InMemoryDatabaseAdapter.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,26 @@ import {
77
TableQuerySelectionModifiers,
88
getDatabaseFieldForEntityField,
99
EntityConfiguration,
10+
IEntityDatabaseAdapterProvider,
1011
} from '@expo/entity';
1112
import invariant from 'invariant';
1213
import { v4 as uuidv4 } from 'uuid';
1314

1415
const dbObjects: Readonly<{ [key: string]: any }>[] = [];
1516

17+
export class InMemoryDatabaseAdapterProvider implements IEntityDatabaseAdapterProvider {
18+
getDatabaseAdapter<TFields>(
19+
entityConfiguration: EntityConfiguration<TFields>
20+
): EntityDatabaseAdapter<TFields> {
21+
return new InMemoryDatabaseAdapter(entityConfiguration);
22+
}
23+
}
24+
1625
/**
1726
* In-memory database adapter for entity for the purposes of this example. Normally `@expo/entity-database-adapter-knex`
1827
* or another production adapter would be used. Very similar to StubDatabaseAdapter but shared in a way more akin to a normal database.
1928
*/
20-
export default class InMemoryDatabaseAdapter<T> extends EntityDatabaseAdapter<T> {
29+
class InMemoryDatabaseAdapter<T> extends EntityDatabaseAdapter<T> {
2130
protected getFieldTransformerMap(): FieldTransformerMap {
2231
return new Map();
2332
}

packages/entity-example/src/data.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
DatabaseAdapterFlavor,
88
} from '@expo/entity';
99

10-
import InMemoryDatabaseAdapter from './adapters/InMemoryDatabaseAdapter';
10+
import { InMemoryDatabaseAdapterProvider } from './adapters/InMemoryDatabaseAdapter';
1111
import InMemoryQueryContextProvider from './adapters/InMemoryQueryContextProvider';
1212

1313
/**
@@ -25,7 +25,7 @@ export const createEntityCompanionProvider = (
2525
// An in-memory DB is used for demonstration purposes, but generally this would be
2626
// instantiated with PostgresEntityDatabaseAdapter and PostgresEntityQueryContextProvider
2727
[DatabaseAdapterFlavor.POSTGRES]: {
28-
adapter: InMemoryDatabaseAdapter,
28+
adapterProvider: new InMemoryDatabaseAdapterProvider(),
2929
queryContextProvider: new InMemoryQueryContextProvider(),
3030
},
3131
},

packages/entity/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"tsc": "tsc",
1313
"clean": "rm -rf build coverage coverage-integration",
1414
"lint": "eslint src --ext '.ts'",
15-
"test": "jest --config ../../resources/jest.config.js --rootDir",
15+
"test": "jest --rootDir --config ../../resources/jest.config.js",
1616
"integration": "../../resources/run-with-docker yarn integration-no-setup",
1717
"integration-no-setup": "jest --config ../../resources/jest-integration.config.js --rootDir --runInBand --passWithNoTests",
1818
"barrelsby": "barrelsby --directory src --location top --exclude tests__ --singleQuotes --exportDefault --delete"

0 commit comments

Comments
 (0)