Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,21 @@ export class StubPostgresDatabaseAdapterProvider implements IEntityDatabaseAdapt
return 'StubPostgresDatabaseAdapterProvider';
}

installExtensions(): void {
installEntityCompanionExtensions();
installEntityTableDataCoordinatorExtensions();
installViewerScopedEntityCompanionExtensions();
installReadonlyEntityExtensions();
installExtensions({
EntityCompanionClass,
EntityTableDataCoordinatorClass,
ViewerScopedEntityCompanionClass,
ReadonlyEntityClass,
}: {
EntityCompanionClass: typeof import('@expo/entity').EntityCompanion;
EntityTableDataCoordinatorClass: typeof import('@expo/entity').EntityTableDataCoordinator;
ViewerScopedEntityCompanionClass: typeof import('@expo/entity').ViewerScopedEntityCompanion;
ReadonlyEntityClass: typeof import('@expo/entity').ReadonlyEntity;
}): void {
installEntityCompanionExtensions({ EntityCompanionClass });
installEntityTableDataCoordinatorExtensions({ EntityTableDataCoordinatorClass });
installViewerScopedEntityCompanionExtensions({ ViewerScopedEntityCompanionClass });
installReadonlyEntityExtensions({ ReadonlyEntityClass });
}

private readonly objectCollection = new Map();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,21 @@ export class PostgresEntityDatabaseAdapterProvider implements IEntityDatabaseAda
return 'PostgresEntityDatabaseAdapterProvider';
}

installExtensions(): void {
installEntityCompanionExtensions();
installEntityTableDataCoordinatorExtensions();
installViewerScopedEntityCompanionExtensions();
installReadonlyEntityExtensions();
installExtensions({
EntityCompanionClass,
EntityTableDataCoordinatorClass,
ViewerScopedEntityCompanionClass,
ReadonlyEntityClass,
}: {
EntityCompanionClass: typeof import('@expo/entity').EntityCompanion;
EntityTableDataCoordinatorClass: typeof import('@expo/entity').EntityTableDataCoordinator;
ViewerScopedEntityCompanionClass: typeof import('@expo/entity').ViewerScopedEntityCompanion;
ReadonlyEntityClass: typeof import('@expo/entity').ReadonlyEntity;
}): void {
installEntityCompanionExtensions({ EntityCompanionClass });
installEntityTableDataCoordinatorExtensions({ EntityTableDataCoordinatorClass });
installViewerScopedEntityCompanionExtensions({ ViewerScopedEntityCompanionClass });
installReadonlyEntityExtensions({ ReadonlyEntityClass });
}

getDatabaseAdapter<TFields extends Record<string, any>, TIDField extends keyof TFields>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,21 @@ export class StubPostgresDatabaseAdapterProvider implements IEntityDatabaseAdapt
return 'StubPostgresDatabaseAdapterProvider';
}

installExtensions(): void {
installEntityCompanionExtensions();
installEntityTableDataCoordinatorExtensions();
installViewerScopedEntityCompanionExtensions();
installReadonlyEntityExtensions();
installExtensions({
EntityCompanionClass,
EntityTableDataCoordinatorClass,
ViewerScopedEntityCompanionClass,
ReadonlyEntityClass,
}: {
EntityCompanionClass: typeof import('@expo/entity').EntityCompanion;
EntityTableDataCoordinatorClass: typeof import('@expo/entity').EntityTableDataCoordinator;
ViewerScopedEntityCompanionClass: typeof import('@expo/entity').ViewerScopedEntityCompanion;
ReadonlyEntityClass: typeof import('@expo/entity').ReadonlyEntity;
}): void {
installEntityCompanionExtensions({ EntityCompanionClass });
installEntityTableDataCoordinatorExtensions({ EntityTableDataCoordinatorClass });
installViewerScopedEntityCompanionExtensions({ ViewerScopedEntityCompanionClass });
installReadonlyEntityExtensions({ ReadonlyEntityClass });
}

private readonly objectCollection = new Map();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,12 @@ declare module '@expo/entity' {
}
}

export function installEntityCompanionExtensions(): void {
EntityCompanion.prototype.getKnexLoaderFactory = function <
export function installEntityCompanionExtensions({
EntityCompanionClass,
}: {
EntityCompanionClass: typeof EntityCompanion;
}): void {
EntityCompanionClass.prototype.getKnexLoaderFactory = function <
TFields extends Record<string, any>,
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
TViewerContext extends ViewerContext,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,12 @@ function requireBasePostgresAdapter<
return databaseAdapter;
}

export function installEntityTableDataCoordinatorExtensions(): void {
EntityTableDataCoordinator.prototype.getKnexDataManager = function <
export function installEntityTableDataCoordinatorExtensions({
EntityTableDataCoordinatorClass,
}: {
EntityTableDataCoordinatorClass: typeof EntityTableDataCoordinator;
}): void {
EntityTableDataCoordinatorClass.prototype.getKnexDataManager = function <
TFields extends Record<string, any>,
TIDField extends keyof TFields,
>(this: EntityTableDataCoordinator<TFields, TIDField>): EntityKnexDataManager<TFields, TIDField> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,12 @@ class ReadonlyEntityExtensions {
}
}

export function installReadonlyEntityExtensions(): void {
ReadonlyEntity.knexLoader = ReadonlyEntityExtensions.knexLoader;
ReadonlyEntity.knexLoaderWithAuthorizationResults =
export function installReadonlyEntityExtensions({
ReadonlyEntityClass,
}: {
ReadonlyEntityClass: typeof ReadonlyEntity;
}): void {
ReadonlyEntityClass.knexLoader = ReadonlyEntityExtensions.knexLoader;
ReadonlyEntityClass.knexLoaderWithAuthorizationResults =
ReadonlyEntityExtensions.knexLoaderWithAuthorizationResults;
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,12 @@ declare module '@expo/entity' {
}
}

export function installViewerScopedEntityCompanionExtensions(): void {
ViewerScopedEntityCompanion.prototype.getKnexLoaderFactory = function <
export function installViewerScopedEntityCompanionExtensions({
ViewerScopedEntityCompanionClass,
}: {
ViewerScopedEntityCompanionClass: typeof ViewerScopedEntityCompanion;
}): void {
ViewerScopedEntityCompanionClass.prototype.getKnexLoaderFactory = function <
TFields extends Record<string, any>,
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
TViewerContext extends ViewerContext,
Expand Down
8 changes: 7 additions & 1 deletion packages/entity/src/EntityCompanionProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { IEntityCacheAdapterProvider } from './IEntityCacheAdapterProvider';
import { IEntityDatabaseAdapterProvider } from './IEntityDatabaseAdapterProvider';
import { ReadonlyEntity } from './ReadonlyEntity';
import { ViewerContext } from './ViewerContext';
import { ViewerScopedEntityCompanion } from './ViewerScopedEntityCompanion';
import { EntityTableDataCoordinator } from './internal/EntityTableDataCoordinator';
import { IEntityMetricsAdapter } from './metrics/IEntityMetricsAdapter';
import { computeIfAbsent } from './utils/collections/maps';
Expand Down Expand Up @@ -167,7 +168,12 @@ export class EntityCompanionProvider {
flavorDefinition.adapterProvider.getExtensionsKey(),
)
) {
flavorDefinition.adapterProvider.installExtensions();
flavorDefinition.adapterProvider.installExtensions({
EntityCompanionClass: EntityCompanion,
EntityTableDataCoordinatorClass: EntityTableDataCoordinator,
ViewerScopedEntityCompanionClass: ViewerScopedEntityCompanion,
ReadonlyEntityClass: ReadonlyEntity,
});
EntityCompanionProvider.installedExtensions.add(
flavorDefinition.adapterProvider.getExtensionsKey(),
);
Expand Down
16 changes: 15 additions & 1 deletion packages/entity/src/IEntityDatabaseAdapterProvider.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
/* c8 ignore start - interface only */

import { EntityCompanion } from './EntityCompanion';
import { EntityConfiguration } from './EntityConfiguration';
import { EntityDatabaseAdapter } from './EntityDatabaseAdapter';
import { ReadonlyEntity } from './ReadonlyEntity';
import { ViewerScopedEntityCompanion } from './ViewerScopedEntityCompanion';
import { EntityTableDataCoordinator } from './internal/EntityTableDataCoordinator';

/**
* A database adapter provider vends database adapters for a particular database adapter type.
Expand All @@ -16,7 +20,17 @@ export interface IEntityDatabaseAdapterProvider {
/**
* Install any necessary extensions to the Entity system.
*/
installExtensions(): void;
installExtensions({
EntityCompanionClass,
EntityTableDataCoordinatorClass,
ViewerScopedEntityCompanionClass,
ReadonlyEntityClass,
}: {
EntityCompanionClass: typeof EntityCompanion;
EntityTableDataCoordinatorClass: typeof EntityTableDataCoordinator;
ViewerScopedEntityCompanionClass: typeof ViewerScopedEntityCompanion;
ReadonlyEntityClass: typeof ReadonlyEntity;
}): void;

/**
* Vend a database adapter.
Expand Down