@punks/backend-entity-manager 0.0.137 → 0.0.139
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 +69 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/abstractions/configuration.d.ts +2 -0
- package/dist/cjs/types/abstractions/index.d.ts +1 -0
- package/dist/cjs/types/abstractions/snapshot.d.ts +3 -0
- package/dist/cjs/types/base/index.d.ts +1 -0
- package/dist/cjs/types/base/snapshot.d.ts +6 -0
- package/dist/cjs/types/platforms/nest/__test__/server/database/core/entities/foo.entity.d.ts +2 -0
- package/dist/cjs/types/platforms/nest/__test__/server/entities/foos/foo.snapshot.d.ts +8 -0
- package/dist/cjs/types/platforms/nest/__test__/tests/versioning/entity-versioning-custom.test.d.ts +1 -0
- package/dist/cjs/types/platforms/nest/base/entitySnapshotService.d.ts +8 -0
- package/dist/cjs/types/platforms/nest/base/index.d.ts +1 -0
- package/dist/cjs/types/platforms/nest/decorators/index.d.ts +1 -0
- package/dist/cjs/types/platforms/nest/decorators/snapshot.d.ts +4 -0
- package/dist/cjs/types/platforms/nest/decorators/symbols.d.ts +1 -0
- package/dist/cjs/types/platforms/nest/ioc/registry/index.d.ts +3 -2
- package/dist/cjs/types/platforms/nest/processors/initializer/index.d.ts +1 -0
- package/dist/cjs/types/providers/services.d.ts +4 -1
- package/dist/cjs/types/symbols/ioc.d.ts +1 -0
- package/dist/esm/index.js +67 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/abstractions/configuration.d.ts +2 -0
- package/dist/esm/types/abstractions/index.d.ts +1 -0
- package/dist/esm/types/abstractions/snapshot.d.ts +3 -0
- package/dist/esm/types/base/index.d.ts +1 -0
- package/dist/esm/types/base/snapshot.d.ts +6 -0
- package/dist/esm/types/platforms/nest/__test__/server/database/core/entities/foo.entity.d.ts +2 -0
- package/dist/esm/types/platforms/nest/__test__/server/entities/foos/foo.snapshot.d.ts +8 -0
- package/dist/esm/types/platforms/nest/__test__/tests/versioning/entity-versioning-custom.test.d.ts +1 -0
- package/dist/esm/types/platforms/nest/base/entitySnapshotService.d.ts +8 -0
- package/dist/esm/types/platforms/nest/base/index.d.ts +1 -0
- package/dist/esm/types/platforms/nest/decorators/index.d.ts +1 -0
- package/dist/esm/types/platforms/nest/decorators/snapshot.d.ts +4 -0
- package/dist/esm/types/platforms/nest/decorators/symbols.d.ts +1 -0
- package/dist/esm/types/platforms/nest/ioc/registry/index.d.ts +3 -2
- package/dist/esm/types/platforms/nest/processors/initializer/index.d.ts +1 -0
- package/dist/esm/types/providers/services.d.ts +4 -1
- package/dist/esm/types/symbols/ioc.d.ts +1 -0
- package/dist/index.d.ts +30 -2
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -294,6 +294,12 @@ class EntitySerializer {
|
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
+
class EntitySnapshotService {
|
|
298
|
+
constructor(entityName) {
|
|
299
|
+
this.entityName = entityName;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
297
303
|
class EntitiesCountAction {
|
|
298
304
|
constructor(services) {
|
|
299
305
|
this.services = services;
|
|
@@ -524,11 +530,13 @@ class EntityCreateCommand {
|
|
|
524
530
|
}
|
|
525
531
|
const contextService = this.services.resolveAuthenticationContextProvider();
|
|
526
532
|
const context = await contextService?.getContext();
|
|
533
|
+
const snapshotService = this.services.resolveSnapshotService();
|
|
534
|
+
const snapshot = (await snapshotService?.getSnapshot(id)) ?? entity;
|
|
527
535
|
await versioning.createVersion({
|
|
528
536
|
operationType: exports.EntityVersionOperation.Create,
|
|
529
537
|
entityId: id,
|
|
530
538
|
entityType: this.services.getEntityName(),
|
|
531
|
-
data:
|
|
539
|
+
data: snapshot,
|
|
532
540
|
modifiedByUserId: context?.userId,
|
|
533
541
|
});
|
|
534
542
|
}
|
|
@@ -546,8 +554,8 @@ class EntityDeleteCommand {
|
|
|
546
554
|
throw new MissingEntityIdError();
|
|
547
555
|
}
|
|
548
556
|
await this.authorize(id);
|
|
549
|
-
await this.services.resolveRepository().delete(id);
|
|
550
557
|
await this.versionEntity(id);
|
|
558
|
+
await this.services.resolveRepository().delete(id);
|
|
551
559
|
await this.services.resolveEventsManager().processEntityDeletedEvent(id);
|
|
552
560
|
}
|
|
553
561
|
async authorize(id) {
|
|
@@ -578,10 +586,13 @@ class EntityDeleteCommand {
|
|
|
578
586
|
}
|
|
579
587
|
const contextService = this.services.resolveAuthenticationContextProvider();
|
|
580
588
|
const context = await contextService?.getContext();
|
|
589
|
+
const snapshotService = this.services.resolveSnapshotService();
|
|
590
|
+
const snapshot = await snapshotService?.getSnapshot(id);
|
|
581
591
|
await versioning.createVersion({
|
|
582
592
|
operationType: exports.EntityVersionOperation.Delete,
|
|
583
593
|
entityId: id,
|
|
584
594
|
entityType: this.services.getEntityName(),
|
|
595
|
+
data: snapshot,
|
|
585
596
|
modifiedByUserId: context?.userId,
|
|
586
597
|
});
|
|
587
598
|
}
|
|
@@ -821,11 +832,13 @@ class EntityUpdateCommand {
|
|
|
821
832
|
}
|
|
822
833
|
const contextService = this.services.resolveAuthenticationContextProvider();
|
|
823
834
|
const context = await contextService?.getContext();
|
|
835
|
+
const snapshotService = this.services.resolveSnapshotService();
|
|
836
|
+
const snapshot = (await snapshotService?.getSnapshot(id)) ?? entity;
|
|
824
837
|
await versioning.createVersion({
|
|
825
838
|
operationType: exports.EntityVersionOperation.Update,
|
|
826
839
|
entityId: id,
|
|
827
840
|
entityType: this.services.getEntityName(),
|
|
828
|
-
data:
|
|
841
|
+
data: snapshot,
|
|
829
842
|
modifiedByUserId: context?.userId,
|
|
830
843
|
});
|
|
831
844
|
}
|
|
@@ -888,11 +901,13 @@ class EntityUpsertCommand {
|
|
|
888
901
|
}
|
|
889
902
|
const contextService = this.services.resolveAuthenticationContextProvider();
|
|
890
903
|
const context = await contextService?.getContext();
|
|
904
|
+
const snapshotService = this.services.resolveSnapshotService();
|
|
905
|
+
const snapshot = (await snapshotService?.getSnapshot(id)) ?? entity;
|
|
891
906
|
await versioning.createVersion({
|
|
892
907
|
operationType: exports.EntityVersionOperation.Upsert,
|
|
893
908
|
entityId: id,
|
|
894
909
|
entityType: this.services.getEntityName(),
|
|
895
|
-
data:
|
|
910
|
+
data: snapshot,
|
|
896
911
|
modifiedByUserId: context?.userId,
|
|
897
912
|
});
|
|
898
913
|
}
|
|
@@ -1094,6 +1109,7 @@ const EntityServices = {
|
|
|
1094
1109
|
IEntityAdapter: "IEntityAdapter",
|
|
1095
1110
|
IEntityConverter: "IEntityConverter",
|
|
1096
1111
|
IEntitySerializer: "IEntitySerializer",
|
|
1112
|
+
IEntitySnapshotService: "IEntitySnapshotService",
|
|
1097
1113
|
},
|
|
1098
1114
|
Connectors: {
|
|
1099
1115
|
IConnectorsConfiguration: "IConnectorsConfiguration",
|
|
@@ -1209,6 +1225,9 @@ class EntityServiceLocator {
|
|
|
1209
1225
|
resolveSerializer() {
|
|
1210
1226
|
return this.services.resolveSerializer(this.entityName);
|
|
1211
1227
|
}
|
|
1228
|
+
resolveSnapshotService() {
|
|
1229
|
+
return this.services.resolveSnapshotService(this.entityName);
|
|
1230
|
+
}
|
|
1212
1231
|
resolveAdapter() {
|
|
1213
1232
|
return this.services.resolveAdapter(this.entityName);
|
|
1214
1233
|
}
|
|
@@ -1479,6 +1498,14 @@ class EntitiesServiceLocator {
|
|
|
1479
1498
|
resolveSerializer(entityName) {
|
|
1480
1499
|
return this.provider.resolveEntityService(EntityServices.Converters.IEntitySerializer, entityName);
|
|
1481
1500
|
}
|
|
1501
|
+
registerSnapshotService(entityName, instance) {
|
|
1502
|
+
this.provider.registerEntityService(EntityServices.Converters.IEntitySnapshotService, entityName, instance);
|
|
1503
|
+
}
|
|
1504
|
+
resolveSnapshotService(entityName) {
|
|
1505
|
+
return this.provider.resolveEntityService(EntityServices.Converters.IEntitySnapshotService, entityName, {
|
|
1506
|
+
optional: true,
|
|
1507
|
+
});
|
|
1508
|
+
}
|
|
1482
1509
|
resolveAuthorizationMiddleware(entityName) {
|
|
1483
1510
|
return this.provider.resolveEntityService(EntityServices.Authorization.IEntityAuthorizationMiddleware, entityName, {
|
|
1484
1511
|
optional: true,
|
|
@@ -2209,6 +2236,10 @@ class EntityManagerServiceCollection {
|
|
|
2209
2236
|
this.locator.registerSerializer(this.entityName, serializer);
|
|
2210
2237
|
return this;
|
|
2211
2238
|
}
|
|
2239
|
+
addSnapshotService(service) {
|
|
2240
|
+
this.locator.registerSnapshotService(this.entityName, service);
|
|
2241
|
+
return this;
|
|
2242
|
+
}
|
|
2212
2243
|
addConverter(converter) {
|
|
2213
2244
|
this.locator.registerConverter(this.entityName, converter);
|
|
2214
2245
|
return this;
|
|
@@ -2288,6 +2319,16 @@ class NestEntitySerializer extends EntitySerializer {
|
|
|
2288
2319
|
}
|
|
2289
2320
|
}
|
|
2290
2321
|
|
|
2322
|
+
class NestEntitySnapshotService extends EntitySnapshotService {
|
|
2323
|
+
constructor(entityName, registry) {
|
|
2324
|
+
super(entityName);
|
|
2325
|
+
this.services = registry.resolveEntityServicesCollection(entityName);
|
|
2326
|
+
}
|
|
2327
|
+
get repository() {
|
|
2328
|
+
return this.services.resolveRepository();
|
|
2329
|
+
}
|
|
2330
|
+
}
|
|
2331
|
+
|
|
2291
2332
|
const EntityManagerSymbols = {
|
|
2292
2333
|
AppInitializer: Symbol.for("WP:APP_INITIALIZER"),
|
|
2293
2334
|
EventsTracker: Symbol.for("WP:EVENTS_TRACKER"),
|
|
@@ -2299,6 +2340,7 @@ const EntityManagerSymbols = {
|
|
|
2299
2340
|
EntityConnector: Symbol.for("WP:ENTITY_CONNECTOR"),
|
|
2300
2341
|
EntityConverter: Symbol.for("WP:ENTITY_CONVERTER"),
|
|
2301
2342
|
EntitySerializer: Symbol.for("WP:ENTITY_SERIALIZER"),
|
|
2343
|
+
EntitySnapshotService: Symbol.for("WP:ENTITY_SNAPSHOT_SERVICE"),
|
|
2302
2344
|
EntityManager: Symbol.for("WP:ENTITY_MANAGER"),
|
|
2303
2345
|
EntityQueryBuilder: Symbol.for("WP:ENTITY_QUERY_BUILDER"),
|
|
2304
2346
|
EntitySeeder: Symbol.for("WP:ENTITY_SEEDER"),
|
|
@@ -2389,6 +2431,11 @@ const WpEntitySerializer = (entityName, props = {}) => common.applyDecorators(co
|
|
|
2389
2431
|
...props,
|
|
2390
2432
|
}));
|
|
2391
2433
|
|
|
2434
|
+
const WpEntitySnapshotService = (entityName, props = {}) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.EntitySnapshotService, {
|
|
2435
|
+
entityName,
|
|
2436
|
+
...props,
|
|
2437
|
+
}));
|
|
2438
|
+
|
|
2392
2439
|
const WpEventsTracker = (props = {}) => common.applyDecorators(common.Injectable(), common.SetMetadata(EntityManagerSymbols.EventsTracker, {
|
|
2393
2440
|
...props,
|
|
2394
2441
|
}));
|
|
@@ -2731,7 +2778,7 @@ exports.EntityManagerRegistry = class EntityManagerRegistry {
|
|
|
2731
2778
|
.registerEventEmitter(eventEmitter);
|
|
2732
2779
|
}
|
|
2733
2780
|
}
|
|
2734
|
-
async registerDiscoveredEntity(app, { adapter, entityName, entity, converter, queryBuilder, repository, authMiddleware, serializer, settings, }) {
|
|
2781
|
+
async registerDiscoveredEntity(app, { adapter, entityName, entity, converter, queryBuilder, repository, authMiddleware, serializer, snapshotService, settings, }) {
|
|
2735
2782
|
if (!repository.discoveredClass.injectType) {
|
|
2736
2783
|
throw new Error(`No inject type found for entity repository: ${entityName}`);
|
|
2737
2784
|
}
|
|
@@ -2762,6 +2809,12 @@ exports.EntityManagerRegistry = class EntityManagerRegistry {
|
|
|
2762
2809
|
if (adapterInstance) {
|
|
2763
2810
|
registration.addAdapter(adapterInstance);
|
|
2764
2811
|
}
|
|
2812
|
+
const snapshotServiceInstance = snapshotService?.discoveredClass.injectType
|
|
2813
|
+
? (await app.resolve(snapshotService.discoveredClass.injectType))
|
|
2814
|
+
: undefined;
|
|
2815
|
+
if (snapshotServiceInstance) {
|
|
2816
|
+
registration.addSnapshotService(snapshotServiceInstance);
|
|
2817
|
+
}
|
|
2765
2818
|
const authMiddlewareInstance = authMiddleware?.discoveredClass.injectType
|
|
2766
2819
|
? (await app.resolve(authMiddleware.discoveredClass.injectType))
|
|
2767
2820
|
: undefined;
|
|
@@ -21397,12 +21450,14 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
|
|
|
21397
21450
|
const queryBuilders = await this.discoverQueryBuilders();
|
|
21398
21451
|
const converters = await this.discoverConverters();
|
|
21399
21452
|
const serializers = await this.discoverSerializers();
|
|
21453
|
+
const snapshotServices = await this.discoverSnapshotService();
|
|
21400
21454
|
const adapters = await this.discoverAdapters();
|
|
21401
21455
|
const auth = await this.discoverAuthMiddlewares();
|
|
21402
21456
|
const repositoriesDict = backendCore.toDict(repositories, (q) => q.meta.entityName);
|
|
21403
21457
|
const queryBuilderDict = backendCore.toDict(queryBuilders, (q) => q.meta.entityName);
|
|
21404
21458
|
const converterDict = backendCore.toDict(converters, (c) => c.meta.entityName);
|
|
21405
21459
|
const serializerDict = backendCore.toDict(serializers, (s) => s.meta.entityName);
|
|
21460
|
+
const snapshotServicesDict = backendCore.toDict(snapshotServices, (s) => s.meta.entityName);
|
|
21406
21461
|
const adapterDict = backendCore.toDict(adapters, (a) => a.meta.entityName);
|
|
21407
21462
|
const authDict = backendCore.toDict(auth, (a) => a.meta.entityName);
|
|
21408
21463
|
const sortedEntities = lodash.exports.orderBy(entities, (x) => x.meta.name);
|
|
@@ -21427,6 +21482,7 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
|
|
|
21427
21482
|
const adapter = adapterDict[entityName];
|
|
21428
21483
|
const authMiddleware = authDict[entityName];
|
|
21429
21484
|
const serializer = serializerDict[entityName];
|
|
21485
|
+
const snapshotService = snapshotServicesDict[entityName];
|
|
21430
21486
|
await this.registry.registerDiscoveredEntity(app, {
|
|
21431
21487
|
entityName,
|
|
21432
21488
|
entity,
|
|
@@ -21435,6 +21491,7 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
|
|
|
21435
21491
|
queryBuilder,
|
|
21436
21492
|
converter,
|
|
21437
21493
|
serializer,
|
|
21494
|
+
snapshotService,
|
|
21438
21495
|
authMiddleware,
|
|
21439
21496
|
settings: staticProviders.settings,
|
|
21440
21497
|
});
|
|
@@ -21444,6 +21501,7 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
|
|
|
21444
21501
|
- Adapter: ${adapter?.discoveredClass.injectType?.name ?? ""}
|
|
21445
21502
|
- Converter: ${converter?.discoveredClass.injectType?.name ?? ""}
|
|
21446
21503
|
- Serializer: ${serializer?.discoveredClass.injectType?.name ?? ""}
|
|
21504
|
+
- SnapshotService: ${snapshotService?.discoveredClass.injectType?.name ?? ""}
|
|
21447
21505
|
- Auth middleware: ${authMiddleware?.discoveredClass.injectType?.name ?? ""}
|
|
21448
21506
|
✨
|
|
21449
21507
|
`);
|
|
@@ -21586,6 +21644,9 @@ exports.EntityManagerInitializer = EntityManagerInitializer_1 = class EntityMana
|
|
|
21586
21644
|
async discoverSerializers() {
|
|
21587
21645
|
return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EntitySerializer);
|
|
21588
21646
|
}
|
|
21647
|
+
async discoverSnapshotService() {
|
|
21648
|
+
return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EntitySnapshotService);
|
|
21649
|
+
}
|
|
21589
21650
|
async discoverAdapters() {
|
|
21590
21651
|
return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EntityAdapter);
|
|
21591
21652
|
}
|
|
@@ -28128,6 +28189,7 @@ exports.EntityNotFoundException = EntityNotFoundException;
|
|
|
28128
28189
|
exports.EntityOperationUnauthorizedException = EntityOperationUnauthorizedException;
|
|
28129
28190
|
exports.EntitySeeder = EntitySeeder;
|
|
28130
28191
|
exports.EntitySerializer = EntitySerializer;
|
|
28192
|
+
exports.EntitySnapshotService = EntitySnapshotService;
|
|
28131
28193
|
exports.IEntityVersionsCursor = IEntityVersionsCursor;
|
|
28132
28194
|
exports.InvalidCredentialsError = InvalidCredentialsError;
|
|
28133
28195
|
exports.MemberOf = MemberOf;
|
|
@@ -28137,6 +28199,7 @@ exports.NestEntityActions = NestEntityActions;
|
|
|
28137
28199
|
exports.NestEntityAuthorizationMiddleware = NestEntityAuthorizationMiddleware;
|
|
28138
28200
|
exports.NestEntityManager = NestEntityManager;
|
|
28139
28201
|
exports.NestEntitySerializer = NestEntitySerializer;
|
|
28202
|
+
exports.NestEntitySnapshotService = NestEntitySnapshotService;
|
|
28140
28203
|
exports.NestPipelineTemplate = NestPipelineTemplate;
|
|
28141
28204
|
exports.NestTypeOrmEntitySeeder = NestTypeOrmEntitySeeder;
|
|
28142
28205
|
exports.NestTypeOrmQueryBuilder = NestTypeOrmQueryBuilder;
|
|
@@ -28168,6 +28231,7 @@ exports.WpEntityQueryBuilder = WpEntityQueryBuilder;
|
|
|
28168
28231
|
exports.WpEntityRepository = WpEntityRepository;
|
|
28169
28232
|
exports.WpEntitySeeder = WpEntitySeeder;
|
|
28170
28233
|
exports.WpEntitySerializer = WpEntitySerializer;
|
|
28234
|
+
exports.WpEntitySnapshotService = WpEntitySnapshotService;
|
|
28171
28235
|
exports.WpEntityVersioningProvider = WpEntityVersioningProvider;
|
|
28172
28236
|
exports.WpEventsTracker = WpEventsTracker;
|
|
28173
28237
|
exports.WpFileProvider = WpFileProvider;
|