@punks/backend-entity-manager 0.0.246 → 0.0.247
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +88 -9
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/platforms/nest/decorators/connector.d.ts +4 -2
- package/dist/cjs/types/platforms/nest/decorators/connectorMapper.d.ts +5 -0
- package/dist/cjs/types/platforms/nest/decorators/index.d.ts +1 -0
- package/dist/cjs/types/platforms/nest/decorators/symbols.d.ts +1 -0
- package/dist/cjs/types/platforms/nest/ioc/registry/index.d.ts +4 -2
- package/dist/cjs/types/platforms/nest/processors/initializer/index.d.ts +2 -0
- package/dist/cjs/types/services/connectors.d.ts +1 -0
- package/dist/esm/index.js +89 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/platforms/nest/decorators/connector.d.ts +4 -2
- package/dist/esm/types/platforms/nest/decorators/connectorMapper.d.ts +5 -0
- package/dist/esm/types/platforms/nest/decorators/index.d.ts +1 -0
- package/dist/esm/types/platforms/nest/decorators/symbols.d.ts +1 -0
- package/dist/esm/types/platforms/nest/ioc/registry/index.d.ts +4 -2
- package/dist/esm/types/platforms/nest/processors/initializer/index.d.ts +2 -0
- package/dist/esm/types/services/connectors.d.ts +1 -0
- package/dist/index.d.ts +16 -4
- package/package.json +3 -3
package/dist/cjs/index.js
CHANGED
|
@@ -2111,15 +2111,33 @@ var ConnectorMode;
|
|
|
2111
2111
|
class EntityConnectorsManager {
|
|
2112
2112
|
constructor(services) {
|
|
2113
2113
|
this.services = services;
|
|
2114
|
+
this.logger = backendCore.Log.getLogger(`[${services.getEntityName()}]: ${EntityConnectorsManager.name}`);
|
|
2114
2115
|
}
|
|
2115
2116
|
async syncEntity(entity) {
|
|
2116
2117
|
for (const connector of this.getEnabledConnectors()) {
|
|
2118
|
+
this.logger.debug(`Entity sync started - connector: ${connector.name}`, {
|
|
2119
|
+
entity,
|
|
2120
|
+
});
|
|
2117
2121
|
switch (connector.options.mode) {
|
|
2118
2122
|
case ConnectorMode.Sync:
|
|
2119
2123
|
await this.processSync(connector, entity);
|
|
2124
|
+
this.logger.debug(`Entity sync completed - connector: ${connector.name}`, {
|
|
2125
|
+
connector: connector.name,
|
|
2126
|
+
entity,
|
|
2127
|
+
});
|
|
2120
2128
|
break;
|
|
2121
2129
|
case ConnectorMode.Async:
|
|
2122
|
-
this.processSync(connector, entity)
|
|
2130
|
+
this.processSync(connector, entity)
|
|
2131
|
+
.then(() => this.logger.debug(`Entity sync completed - connector: ${connector.name}`, {
|
|
2132
|
+
connector: connector.name,
|
|
2133
|
+
entity,
|
|
2134
|
+
}))
|
|
2135
|
+
.catch((error) => {
|
|
2136
|
+
this.logger.exception(`Entity sync error - connector: ${connector.name}`, error, {
|
|
2137
|
+
connector: connector.name,
|
|
2138
|
+
entity,
|
|
2139
|
+
});
|
|
2140
|
+
});
|
|
2123
2141
|
break;
|
|
2124
2142
|
default:
|
|
2125
2143
|
throw new Error("Invalid connector mode found");
|
|
@@ -2134,12 +2152,28 @@ class EntityConnectorsManager {
|
|
|
2134
2152
|
}
|
|
2135
2153
|
async deleteEntity(entityId) {
|
|
2136
2154
|
for (const connector of this.getEnabledConnectors()) {
|
|
2155
|
+
this.logger.debug(`Entity sync delete started - connector: ${connector.name}`, {
|
|
2156
|
+
entityId,
|
|
2157
|
+
});
|
|
2137
2158
|
switch (connector.options.mode) {
|
|
2138
2159
|
case ConnectorMode.Sync:
|
|
2139
2160
|
await this.processDelete(connector, entityId);
|
|
2161
|
+
this.logger.debug(`Entity sync delete completed - connector: ${connector.name}`, {
|
|
2162
|
+
entityId,
|
|
2163
|
+
});
|
|
2140
2164
|
break;
|
|
2141
2165
|
case ConnectorMode.Async:
|
|
2142
|
-
this.processDelete(connector, entityId)
|
|
2166
|
+
this.processDelete(connector, entityId)
|
|
2167
|
+
.then(() => this.logger.debug(`Entity sync delete completed - connector: ${connector.name}`, {
|
|
2168
|
+
connector: connector.name,
|
|
2169
|
+
entityId,
|
|
2170
|
+
}))
|
|
2171
|
+
.catch((error) => {
|
|
2172
|
+
this.logger.exception(`Entity sync delete error - connector: ${connector.name}`, error, {
|
|
2173
|
+
connector: connector.name,
|
|
2174
|
+
entityId,
|
|
2175
|
+
});
|
|
2176
|
+
});
|
|
2143
2177
|
break;
|
|
2144
2178
|
default:
|
|
2145
2179
|
throw new Error("Invalid connector mode");
|
|
@@ -2171,15 +2205,15 @@ class EntityEventsManager {
|
|
|
2171
2205
|
this.logger = backendCore.Log.getLogger("EntityEventsManager");
|
|
2172
2206
|
}
|
|
2173
2207
|
async processEntityCreatedEvent(entity) {
|
|
2174
|
-
this.services.resolveReplicaSyncManager().syncReplicas(entity);
|
|
2175
|
-
this.services.resolveConnectorSyncManager().syncEntity(entity);
|
|
2208
|
+
await this.services.resolveReplicaSyncManager().syncReplicas(entity);
|
|
2209
|
+
await this.services.resolveConnectorSyncManager().syncEntity(entity);
|
|
2176
2210
|
await this.emitEntityEvent("created", {
|
|
2177
2211
|
entity,
|
|
2178
2212
|
});
|
|
2179
2213
|
}
|
|
2180
2214
|
async processEntityUpdatedEvent(entity) {
|
|
2181
|
-
this.services.resolveReplicaSyncManager().syncReplicas(entity);
|
|
2182
|
-
this.services.resolveConnectorSyncManager().syncEntity(entity);
|
|
2215
|
+
await this.services.resolveReplicaSyncManager().syncReplicas(entity);
|
|
2216
|
+
await this.services.resolveConnectorSyncManager().syncEntity(entity);
|
|
2183
2217
|
await this.emitEntityEvent("updated", {
|
|
2184
2218
|
entity,
|
|
2185
2219
|
});
|
|
@@ -3479,6 +3513,7 @@ const EntityManagerSymbols = {
|
|
|
3479
3513
|
EntityAuthMiddleware: Symbol.for("WP:ENTITY_AUTH_MIDDLEWARE"),
|
|
3480
3514
|
EntityRepository: Symbol.for("WP:ENTITY_REPOSITORY"),
|
|
3481
3515
|
EntityConnector: Symbol.for("WP:ENTITY_CONNECTOR"),
|
|
3516
|
+
EntityConnectorMapper: Symbol.for("WP:ENTITY_CONNECTOR_MAPPER"),
|
|
3482
3517
|
EntityConverter: Symbol.for("WP:ENTITY_CONVERTER"),
|
|
3483
3518
|
EntitySerializer: Symbol.for("WP:ENTITY_SERIALIZER"),
|
|
3484
3519
|
EntitySnapshotService: Symbol.for("WP:ENTITY_SNAPSHOT_SERVICE"),
|
|
@@ -3528,7 +3563,12 @@ const WpEntityAdapter = (entityName, props = {}) => common.applyDecorators(commo
|
|
|
3528
3563
|
...props,
|
|
3529
3564
|
}));
|
|
3530
3565
|
|
|
3531
|
-
const WpEntityConnector = (entityName, props
|
|
3566
|
+
const WpEntityConnector = (entityName, props) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.EntityConnector, {
|
|
3567
|
+
entityName,
|
|
3568
|
+
...props,
|
|
3569
|
+
}));
|
|
3570
|
+
|
|
3571
|
+
const WpEntityConnectorMapper = (entityName, props) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.EntityConnectorMapper, {
|
|
3532
3572
|
entityName,
|
|
3533
3573
|
...props,
|
|
3534
3574
|
}));
|
|
@@ -3951,7 +3991,7 @@ exports.EntityManagerRegistry = class EntityManagerRegistry {
|
|
|
3951
3991
|
.registerEventEmitter(eventEmitter);
|
|
3952
3992
|
}
|
|
3953
3993
|
}
|
|
3954
|
-
async registerDiscoveredEntity(app, { adapter, entityName, entity, converter, queryBuilder, repository, authMiddleware, serializer, snapshotService, settings, }) {
|
|
3994
|
+
async registerDiscoveredEntity(app, { adapter, entityName, entity, converter, queryBuilder, repository, authMiddleware, serializer, snapshotService, connectors, connectorMappers, settings, }) {
|
|
3955
3995
|
if (!repository.discoveredClass.injectType) {
|
|
3956
3996
|
throw new Error(`No inject type found for entity repository: ${entityName}`);
|
|
3957
3997
|
}
|
|
@@ -3995,7 +4035,31 @@ exports.EntityManagerRegistry = class EntityManagerRegistry {
|
|
|
3995
4035
|
middleware: authMiddlewareInstance,
|
|
3996
4036
|
});
|
|
3997
4037
|
}
|
|
3998
|
-
|
|
4038
|
+
const mappers = backendCore.toDict(connectorMappers ?? [], (x) => x.meta.connectorName);
|
|
4039
|
+
for (const connector of connectors ?? []) {
|
|
4040
|
+
if (!connector.discoveredClass.injectType) {
|
|
4041
|
+
throw new Error(`No inject type found for entity connector: ${entityName}`);
|
|
4042
|
+
}
|
|
4043
|
+
const mapper = mappers[connector.meta.connectorName];
|
|
4044
|
+
if (!mapper) {
|
|
4045
|
+
throw new Error(`No connector mapper found for entity connector: entityName:${entityName} - connectorName:${connector.meta.connectorName}`);
|
|
4046
|
+
}
|
|
4047
|
+
if (!mapper.discoveredClass.injectType) {
|
|
4048
|
+
throw new Error(`No inject type found for entity connector mapper: ${entityName} - ${connector.meta.connectorName}`);
|
|
4049
|
+
}
|
|
4050
|
+
const connectorInstance = (await app.resolve(connector.discoveredClass.injectType));
|
|
4051
|
+
const mapperInstance = (await app.resolve(connector.discoveredClass.injectType));
|
|
4052
|
+
registration.withSynchronization({
|
|
4053
|
+
name: connector.meta.connectorName,
|
|
4054
|
+
mapper: mapperInstance,
|
|
4055
|
+
connector: connectorInstance,
|
|
4056
|
+
options: {
|
|
4057
|
+
mode: connector.meta.mode,
|
|
4058
|
+
enabled: connector.meta.enabled,
|
|
4059
|
+
},
|
|
4060
|
+
});
|
|
4061
|
+
}
|
|
4062
|
+
// todo: configure replica
|
|
3999
4063
|
}
|
|
4000
4064
|
resolveEntityServicesCollection(entityName) {
|
|
4001
4065
|
return this.container.getEntityServicesLocator(entityName);
|
|
@@ -22628,6 +22692,8 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
|
|
|
22628
22692
|
const snapshotServices = await this.discoverSnapshotService();
|
|
22629
22693
|
const adapters = await this.discoverAdapters();
|
|
22630
22694
|
const auth = await this.discoverAuthMiddlewares();
|
|
22695
|
+
const connectors = await this.discoverEntityConnectors();
|
|
22696
|
+
const connectorMappers = await this.discoverEntityConnectorMappers();
|
|
22631
22697
|
const repositoriesDict = backendCore.toDict(repositories, (q) => q.meta.entityName);
|
|
22632
22698
|
const queryBuilderDict = backendCore.toDict(queryBuilders, (q) => q.meta.entityName);
|
|
22633
22699
|
const converterDict = backendCore.toDict(converters, (c) => c.meta.entityName);
|
|
@@ -22635,6 +22701,8 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
|
|
|
22635
22701
|
const snapshotServicesDict = backendCore.toDict(snapshotServices, (s) => s.meta.entityName);
|
|
22636
22702
|
const adapterDict = backendCore.toDict(adapters, (a) => a.meta.entityName);
|
|
22637
22703
|
const authDict = backendCore.toDict(auth, (a) => a.meta.entityName);
|
|
22704
|
+
const connectorsDict = backendCore.toArrayDict(connectors, (c) => c.meta.entityName);
|
|
22705
|
+
const connectorMappersDict = backendCore.toArrayDict(connectorMappers, (c) => c.meta.entityName);
|
|
22638
22706
|
const sortedEntities = lodash.exports.orderBy(entities, (x) => x.meta.name);
|
|
22639
22707
|
this.logger.log(`Discovered entities: \n${sortedEntities
|
|
22640
22708
|
.map((x) => x.discoveredClass.name)
|
|
@@ -22658,6 +22726,8 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
|
|
|
22658
22726
|
const authMiddleware = authDict[entityName];
|
|
22659
22727
|
const serializer = serializerDict[entityName];
|
|
22660
22728
|
const snapshotService = snapshotServicesDict[entityName];
|
|
22729
|
+
const connectors = connectorsDict[entityName];
|
|
22730
|
+
const connectorMappers = connectorMappersDict[entityName];
|
|
22661
22731
|
await this.registry.registerDiscoveredEntity(app, {
|
|
22662
22732
|
entityName,
|
|
22663
22733
|
entity,
|
|
@@ -22669,6 +22739,8 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
|
|
|
22669
22739
|
snapshotService,
|
|
22670
22740
|
authMiddleware,
|
|
22671
22741
|
settings: staticProviders.settings,
|
|
22742
|
+
connectorMappers,
|
|
22743
|
+
connectors,
|
|
22672
22744
|
});
|
|
22673
22745
|
this.logger.log(`Entity ${entityName} registered:
|
|
22674
22746
|
- Repository: ${repository.discoveredClass.injectType?.name ?? ""}
|
|
@@ -22915,6 +22987,12 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
|
|
|
22915
22987
|
async discoverGlobalAuthenticationMiddlewares() {
|
|
22916
22988
|
return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.GlobalAuthenticationMiddleware);
|
|
22917
22989
|
}
|
|
22990
|
+
async discoverEntityConnectors() {
|
|
22991
|
+
return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EntityConnector);
|
|
22992
|
+
}
|
|
22993
|
+
async discoverEntityConnectorMappers() {
|
|
22994
|
+
return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EntityConnectorMapper);
|
|
22995
|
+
}
|
|
22918
22996
|
async discoverAppInitializers() {
|
|
22919
22997
|
return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.AppInitializer);
|
|
22920
22998
|
}
|
|
@@ -32607,6 +32685,7 @@ exports.WpEntityActions = WpEntityActions;
|
|
|
32607
32685
|
exports.WpEntityAdapter = WpEntityAdapter;
|
|
32608
32686
|
exports.WpEntityAuthMiddleware = WpEntityAuthMiddleware;
|
|
32609
32687
|
exports.WpEntityConnector = WpEntityConnector;
|
|
32688
|
+
exports.WpEntityConnectorMapper = WpEntityConnectorMapper;
|
|
32610
32689
|
exports.WpEntityConverter = WpEntityConverter;
|
|
32611
32690
|
exports.WpEntityManager = WpEntityManager;
|
|
32612
32691
|
exports.WpEntityQueryBuilder = WpEntityQueryBuilder;
|