Skip to content

Commit

Permalink
Add global mutation trigger field to EntityCompanionProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
Josh-McFarlin committed Jun 6, 2024
1 parent 778d9e3 commit 4bdd86b
Show file tree
Hide file tree
Showing 5 changed files with 437 additions and 370 deletions.
13 changes: 7 additions & 6 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@ node_modules/
# Yarn Integrity file
.yarn-integrity

# yarn v2

.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.pnp.*
# [yarn](https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored)
**/.yarn/*
!**/.yarn/plugins
!**/.yarn/releases
!**/.yarn/sdks
!**/.yarn/versions
**/.pnp.*

# Entity-specific ignores

Expand Down
1 change: 1 addition & 0 deletions .yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodeLinker: node-modules
36 changes: 22 additions & 14 deletions packages/entity/src/EntityCompanionProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ export interface EntityCompanionDefinition<
TEntity,
TSelectedFields
>,
TSelectedFields extends keyof TFields = keyof TFields,
TSelectedFields extends keyof TFields = keyof TFields
> {
/**
* The concrete Entity class for which this is the definition.
Expand Down Expand Up @@ -139,6 +139,7 @@ export default class EntityCompanionProvider {
* @param metricsAdapter - An IEntityMetricsAdapter for collecting metrics on this instance
* @param databaseAdapterFlavors - Database adapter configurations for this instance
* @param cacheAdapterFlavors - Cache adapter configurations for this instance
* @param globalMutationTriggers - An optional list of EntityMutationTrigger for all entities.
*/
constructor(
public readonly metricsAdapter: IEntityMetricsAdapter,
Expand All @@ -147,6 +148,13 @@ export default class EntityCompanionProvider {
DatabaseAdapterFlavorDefinition
>,
private cacheAdapterFlavors: ReadonlyMap<CacheAdapterFlavor, CacheAdapterFlavorDefinition>,
readonly globalMutationTriggers: EntityMutationTriggerConfiguration<
any,
any,
any,
any,
any
> = {}
) {}

/**
Expand All @@ -167,7 +175,7 @@ export default class EntityCompanionProvider {
TEntity,
TSelectedFields
>,
TSelectedFields extends keyof TFields,
TSelectedFields extends keyof TFields
>(
entityClass: IEntityClass<
TFields,
Expand All @@ -176,58 +184,58 @@ export default class EntityCompanionProvider {
TEntity,
TPrivacyPolicy,
TSelectedFields
>,
>
): EntityCompanion<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields> {
const entityCompanionDefinition = computeIfAbsent(
this.companionDefinitionMap,
entityClass.name,
() => entityClass.defineCompanionDefinition(),
() => entityClass.defineCompanionDefinition()
);
const tableDataCoordinator = this.getTableDataCoordinatorForEntity(
entityCompanionDefinition.entityConfiguration,
entityClass.name,
entityClass.name
);
return computeIfAbsent(this.companionMap, entityClass.name, () => {
return new EntityCompanion(
this,
entityCompanionDefinition,
tableDataCoordinator,
this.metricsAdapter,
this.metricsAdapter
);
});
}

getQueryContextProviderForDatabaseAdaptorFlavor(
databaseAdapterFlavor: DatabaseAdapterFlavor,
databaseAdapterFlavor: DatabaseAdapterFlavor
): EntityQueryContextProvider {
const entityDatabaseAdapterFlavor = this.databaseAdapterFlavors.get(databaseAdapterFlavor);
invariant(
entityDatabaseAdapterFlavor,
`No database adaptor configuration found for flavor: ${databaseAdapterFlavor}`,
`No database adaptor configuration found for flavor: ${databaseAdapterFlavor}`
);

return entityDatabaseAdapterFlavor.queryContextProvider;
}

private getTableDataCoordinatorForEntity<TFields extends Record<string, any>>(
entityConfiguration: EntityConfiguration<TFields>,
entityClassName: string,
entityClassName: string
): EntityTableDataCoordinator<TFields> {
return computeIfAbsent(this.tableDataCoordinatorMap, entityConfiguration.tableName, () => {
const entityDatabaseAdapterFlavor = this.databaseAdapterFlavors.get(
entityConfiguration.databaseAdapterFlavor,
entityConfiguration.databaseAdapterFlavor
);
invariant(
entityDatabaseAdapterFlavor,
`No database adaptor configuration found for flavor: ${entityConfiguration.databaseAdapterFlavor}`,
`No database adaptor configuration found for flavor: ${entityConfiguration.databaseAdapterFlavor}`
);

const entityCacheAdapterFlavor = this.cacheAdapterFlavors.get(
entityConfiguration.cacheAdapterFlavor,
entityConfiguration.cacheAdapterFlavor
);
invariant(
entityCacheAdapterFlavor,
`No cache adaptor configuration found for flavor: ${entityConfiguration.cacheAdapterFlavor}`,
`No cache adaptor configuration found for flavor: ${entityConfiguration.cacheAdapterFlavor}`
);

return new EntityTableDataCoordinator(
Expand All @@ -236,7 +244,7 @@ export default class EntityCompanionProvider {
entityCacheAdapterFlavor.cacheAdapterProvider,
entityDatabaseAdapterFlavor.queryContextProvider,
this.metricsAdapter,
entityClassName,
entityClassName
);
});
}
Expand Down
Loading

0 comments on commit 4bdd86b

Please sign in to comment.