@punks/backend-entity-manager 0.0.60 → 0.0.62

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.
Files changed (70) hide show
  1. package/dist/cjs/index.js +90 -11
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/abstractions/actions.d.ts +3 -2
  4. package/dist/cjs/types/abstractions/configuration.d.ts +2 -2
  5. package/dist/cjs/types/abstractions/index.d.ts +1 -1
  6. package/dist/cjs/types/abstractions/manager.d.ts +2 -2
  7. package/dist/cjs/types/abstractions/queries.d.ts +8 -2
  8. package/dist/cjs/types/abstractions/seed.d.ts +8 -0
  9. package/dist/cjs/types/actions/search.d.ts +2 -1
  10. package/dist/cjs/types/base/index.d.ts +1 -0
  11. package/dist/cjs/types/base/seed.d.ts +9 -0
  12. package/dist/cjs/types/concrete/index.d.ts +3 -3
  13. package/dist/cjs/types/index.d.ts +1 -0
  14. package/dist/cjs/types/integrations/repository/typeorm/queryBuilder.d.ts +2 -2
  15. package/dist/cjs/types/integrations/repository/typeorm/repository.d.ts +1 -0
  16. package/dist/cjs/types/integrations/repository/typeorm/seed.d.ts +7 -0
  17. package/dist/cjs/types/platforms/nest/__test__/server/entities/foo/seeder.d.ts +9 -0
  18. package/dist/cjs/types/platforms/nest/__test__/tests/base/test_seeder.test.d.ts +1 -0
  19. package/dist/cjs/types/platforms/nest/base/entityActions.d.ts +2 -2
  20. package/dist/cjs/types/platforms/nest/base/entityManager.d.ts +2 -2
  21. package/dist/cjs/types/platforms/nest/decorators/index.d.ts +1 -0
  22. package/dist/cjs/types/platforms/nest/decorators/seed.d.ts +5 -0
  23. package/dist/cjs/types/platforms/nest/decorators/symbols.d.ts +1 -0
  24. package/dist/cjs/types/platforms/nest/extensions/authentication/handlers/user-register/index.d.ts +1 -0
  25. package/dist/cjs/types/platforms/nest/integrations/typeorm/index.d.ts +1 -0
  26. package/dist/cjs/types/platforms/nest/integrations/typeorm/queryBuilder.d.ts +2 -2
  27. package/dist/cjs/types/platforms/nest/integrations/typeorm/seed.d.ts +11 -0
  28. package/dist/cjs/types/platforms/nest/processors/initializer/index.d.ts +2 -2
  29. package/dist/cjs/types/platforms/nest/processors/initializer/utils.d.ts +1 -0
  30. package/dist/cjs/types/platforms/nest/services/manager/index.d.ts +2 -2
  31. package/dist/cjs/types/providers/services.d.ts +16 -16
  32. package/dist/cjs/types/queries/search.d.ts +2 -2
  33. package/dist/cjs/types/reflection/decorators/index.d.ts +1 -1
  34. package/dist/cjs/types/templates/queryBuilder.d.ts +2 -2
  35. package/dist/esm/index.js +88 -12
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/types/abstractions/actions.d.ts +3 -2
  38. package/dist/esm/types/abstractions/configuration.d.ts +2 -2
  39. package/dist/esm/types/abstractions/index.d.ts +1 -1
  40. package/dist/esm/types/abstractions/manager.d.ts +2 -2
  41. package/dist/esm/types/abstractions/queries.d.ts +8 -2
  42. package/dist/esm/types/abstractions/seed.d.ts +8 -0
  43. package/dist/esm/types/actions/search.d.ts +2 -1
  44. package/dist/esm/types/base/index.d.ts +1 -0
  45. package/dist/esm/types/base/seed.d.ts +9 -0
  46. package/dist/esm/types/concrete/index.d.ts +3 -3
  47. package/dist/esm/types/index.d.ts +1 -0
  48. package/dist/esm/types/integrations/repository/typeorm/queryBuilder.d.ts +2 -2
  49. package/dist/esm/types/integrations/repository/typeorm/repository.d.ts +1 -0
  50. package/dist/esm/types/integrations/repository/typeorm/seed.d.ts +7 -0
  51. package/dist/esm/types/platforms/nest/__test__/server/entities/foo/seeder.d.ts +9 -0
  52. package/dist/esm/types/platforms/nest/__test__/tests/base/test_seeder.test.d.ts +1 -0
  53. package/dist/esm/types/platforms/nest/base/entityActions.d.ts +2 -2
  54. package/dist/esm/types/platforms/nest/base/entityManager.d.ts +2 -2
  55. package/dist/esm/types/platforms/nest/decorators/index.d.ts +1 -0
  56. package/dist/esm/types/platforms/nest/decorators/seed.d.ts +5 -0
  57. package/dist/esm/types/platforms/nest/decorators/symbols.d.ts +1 -0
  58. package/dist/esm/types/platforms/nest/extensions/authentication/handlers/user-register/index.d.ts +1 -0
  59. package/dist/esm/types/platforms/nest/integrations/typeorm/index.d.ts +1 -0
  60. package/dist/esm/types/platforms/nest/integrations/typeorm/queryBuilder.d.ts +2 -2
  61. package/dist/esm/types/platforms/nest/integrations/typeorm/seed.d.ts +11 -0
  62. package/dist/esm/types/platforms/nest/processors/initializer/index.d.ts +2 -2
  63. package/dist/esm/types/platforms/nest/processors/initializer/utils.d.ts +1 -0
  64. package/dist/esm/types/platforms/nest/services/manager/index.d.ts +2 -2
  65. package/dist/esm/types/providers/services.d.ts +16 -16
  66. package/dist/esm/types/queries/search.d.ts +2 -2
  67. package/dist/esm/types/reflection/decorators/index.d.ts +1 -1
  68. package/dist/esm/types/templates/queryBuilder.d.ts +2 -2
  69. package/dist/index.d.ts +97 -48
  70. package/package.json +1 -1
package/dist/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
+ import { Log, sort, byField, toDict, newUuid as newUuid$1, removeUndefinedProps } from '@punks/backend-core';
1
2
  import { applyDecorators, Injectable, SetMetadata, Global, Module, Scope, Logger, HttpStatus, HttpException } from '@nestjs/common';
2
3
  import { AsyncLocalStorage } from 'async_hooks';
3
4
  import { hash } from 'bcrypt';
4
- import { Log, toDict, sort, byField, newUuid as newUuid$1, removeUndefinedProps } from '@punks/backend-core';
5
5
  import { PATH_METADATA } from '@nestjs/common/constants';
6
6
  import { STATIC_CONTEXT } from '@nestjs/core/injector/constants';
7
7
  import { MetadataScanner } from '@nestjs/core/metadata-scanner';
@@ -79,6 +79,25 @@ var SortDirection;
79
79
  SortDirection["Desc"] = "desc";
80
80
  })(SortDirection || (SortDirection = {}));
81
81
 
82
+ class EntitySeeder {
83
+ constructor() {
84
+ this.logger = Log.getLogger(EntitySeeder.name);
85
+ }
86
+ async execute() {
87
+ const items = await this.getEntries();
88
+ for (const item of items) {
89
+ const exists = await this.exists(item.identifier);
90
+ if (!exists) {
91
+ const data = item.data();
92
+ await this.create(data);
93
+ this.logger.info(`Entity created`, {
94
+ data,
95
+ });
96
+ }
97
+ }
98
+ }
99
+ }
100
+
82
101
  const PLATFORM_EVENT_NAMESPACE = "platform";
83
102
  const PlatformEvents = {
84
103
  Messaging: {
@@ -130,6 +149,7 @@ const EntityManagerSymbols = {
130
149
  EntityConverter: Symbol.for("WP:ENTITY_CONVERTER"),
131
150
  EntityManager: Symbol.for("WP:ENTITY_MANAGER"),
132
151
  EntityQueryBuilder: Symbol.for("WP:ENTITY_QUERY_BUILDER"),
152
+ EntitySeeder: Symbol.for("WP:ENTITY_SEEDER"),
133
153
  EmailProvider: Symbol.for("WP:EMAIL_PROVIDER"),
134
154
  EmailTemplate: Symbol.for("WP:EMAIL_TEMPLATE"),
135
155
  };
@@ -188,6 +208,11 @@ const WpEntityQueryBuilder = (entityName, props = {}) => applyDecorators(Injecta
188
208
  ...props,
189
209
  }));
190
210
 
211
+ const WpEntitySeeder = (entityName, props = {}) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.EntitySeeder, {
212
+ entityName,
213
+ ...props,
214
+ }));
215
+
191
216
  const WpEventsTracker = (props = {}) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.EventsTracker, {
192
217
  ...props,
193
218
  }));
@@ -19078,11 +19103,13 @@ let UserRegistrationHandler = class UserRegistrationHandler {
19078
19103
  this.passwordHashingProvider = passwordHashingProvider;
19079
19104
  this.emailService = emailService;
19080
19105
  this.jwtProvider = jwtProvider;
19106
+ this.logger = Log.getLogger("UserRegistration");
19081
19107
  }
19082
19108
  async execute(input) {
19083
19109
  const user = (await this.resolveUser(input.email, input.context)) ??
19084
19110
  (await this.resolveUser(input.userName, input.context));
19085
19111
  if (user && user.verified) {
19112
+ this.logger.debug(`User already exists: ${input.email} - ${input.userName}`, { user });
19086
19113
  return {
19087
19114
  success: false,
19088
19115
  error: UserRegistrationError.UserAlreadyExists,
@@ -19095,6 +19122,7 @@ let UserRegistrationHandler = class UserRegistrationHandler {
19095
19122
  passwordUpdateTimestamp: new Date(),
19096
19123
  });
19097
19124
  await this.sendRegistrationEmail(user, input.callback, input.languageId);
19125
+ this.logger.debug(`User already exists but not verified. Sending new verification email: ${input.email} - ${input.userName}`, { user });
19098
19126
  return {
19099
19127
  success: true,
19100
19128
  };
@@ -19106,6 +19134,9 @@ let UserRegistrationHandler = class UserRegistrationHandler {
19106
19134
  passwordUpdateTimestamp: new Date(),
19107
19135
  });
19108
19136
  await this.sendRegistrationEmail(newUser, input.callback, input.languageId);
19137
+ this.logger.debug(`New user created: ${input.email} - ${input.userName}`, {
19138
+ user: newUser,
19139
+ });
19109
19140
  return {
19110
19141
  success: true,
19111
19142
  };
@@ -19546,9 +19577,6 @@ let NestEventEmitter = class NestEventEmitter {
19546
19577
  constructor(eventEmitter) {
19547
19578
  this.eventEmitter = eventEmitter;
19548
19579
  }
19549
- // setEmitter(eventEmitter: EventEmitter2) {
19550
- // this.eventEmitter = eventEmitter
19551
- // }
19552
19580
  async emit(event, ...args) {
19553
19581
  await this.eventEmitter.emitAsync(event, ...args);
19554
19582
  }
@@ -19576,6 +19604,10 @@ class EmailTemplatesCollection {
19576
19604
  }
19577
19605
  }
19578
19606
 
19607
+ const orderByPriority = (items, priorityFieldSelector, nameFieldSelector) => {
19608
+ return sort(items, byField((x) => priorityFieldSelector(x) ?? Number.MAX_VALUE), byField((x) => nameFieldSelector(x)));
19609
+ };
19610
+
19579
19611
  var EntityManagerInitializer_1;
19580
19612
  let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerInitializer {
19581
19613
  constructor(discover, registry, eventEmitter) {
@@ -19601,6 +19633,7 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
19601
19633
  await this.registerEmailProviders();
19602
19634
  await this.registerEventTrackingProviders();
19603
19635
  await this.executeInitializers(app);
19636
+ await this.executeSeeders();
19604
19637
  this.logger.log("Entity manager initialization completed 🚀");
19605
19638
  }
19606
19639
  async registerAuthentication(authenticationProvider) {
@@ -19648,12 +19681,20 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
19648
19681
  }
19649
19682
  async executeInitializers(app) {
19650
19683
  const initializers = await this.discoverAppInitializers();
19651
- const sortedInitializers = sort(initializers, byField((x) => x.meta.priority ?? Number.MAX_VALUE), byField((x) => x.discoveredClass.name));
19684
+ const sortedInitializers = orderByPriority(initializers, (x) => x.meta.priority, (x) => x.discoveredClass.name);
19652
19685
  for (const initializer of sortedInitializers) {
19653
19686
  await initializer.discoveredClass.instance.initialize(app);
19654
19687
  this.logger.log(`Entity manager app initializer ${initializer.discoveredClass.name} initialized 💪`);
19655
19688
  }
19656
19689
  }
19690
+ async executeSeeders() {
19691
+ const seders = await this.discoverEntitySeeders();
19692
+ const sortedSeeder = orderByPriority(seders, (x) => x.meta.priority, (x) => x.discoveredClass.name);
19693
+ for (const initializer of sortedSeeder) {
19694
+ await initializer.discoveredClass.instance.execute();
19695
+ this.logger.log(`Entity seeder initializer ${initializer.discoveredClass.name} initialized 💪`);
19696
+ }
19697
+ }
19657
19698
  async registerEventTrackingProviders() {
19658
19699
  const providers = await this.discoverEventTrackingProviders();
19659
19700
  if (!providers.length) {
@@ -19696,7 +19737,6 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
19696
19737
  app
19697
19738
  .get(ModulesContainerProvider)
19698
19739
  .setModulesContainer(staticProviders.modulesContainer);
19699
- // app.get(NestEventEmitter).setEmitter(staticProviders.eventEmitter)
19700
19740
  }
19701
19741
  async discoverRepositories() {
19702
19742
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EntityRepository);
@@ -19716,6 +19756,9 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
19716
19756
  async discoverAppInitializers() {
19717
19757
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.AppInitializer);
19718
19758
  }
19759
+ async discoverEntitySeeders() {
19760
+ return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EntitySeeder);
19761
+ }
19719
19762
  async discoverEmailTemplates() {
19720
19763
  return await this.discover.providersWithMetaAtKey(EntityManagerSymbols.EmailTemplate);
19721
19764
  }
@@ -19902,6 +19945,9 @@ class TypeOrmRepository {
19902
19945
  constructor(innerRepository) {
19903
19946
  this.innerRepository = innerRepository;
19904
19947
  }
19948
+ getInnerRepository() {
19949
+ return this.innerRepository;
19950
+ }
19905
19951
  async exists(id) {
19906
19952
  if (typeof id === "undefined") {
19907
19953
  throw new Error("Invalid 'id' parameter.");
@@ -19996,6 +20042,41 @@ class NestTypeOrmRepository extends TypeOrmRepository {
19996
20042
  }
19997
20043
  }
19998
20044
 
20045
+ class TypeOrmEntitySeeder extends EntitySeeder {
20046
+ async exists(condition) {
20047
+ const count = await this.getRepository().count(condition);
20048
+ return count > 0;
20049
+ }
20050
+ async create(entity) {
20051
+ await this.getRepository().insert(entity);
20052
+ }
20053
+ }
20054
+
20055
+ const getInstanceDecoratorData = (metadataKey, instance) => {
20056
+ const reflector = new Reflector();
20057
+ return reflector.get(metadataKey, instance.constructor);
20058
+ };
20059
+
20060
+ const resolveTypeormRepository = (entityName, registry) => {
20061
+ const repository = registry
20062
+ .resolveEntityServicesCollection(entityName)
20063
+ .resolveRepository();
20064
+ return repository.getInnerRepository();
20065
+ };
20066
+ class NestTypeOrmEntitySeeder extends TypeOrmEntitySeeder {
20067
+ constructor(registry) {
20068
+ super();
20069
+ this.registry = registry;
20070
+ this.metadata = getInstanceDecoratorData(EntityManagerSymbols.EntitySeeder, this);
20071
+ }
20072
+ get priority() {
20073
+ return this.metadata.priority;
20074
+ }
20075
+ getRepository() {
20076
+ return resolveTypeormRepository(this.metadata.entityName, this.registry);
20077
+ }
20078
+ }
20079
+
19999
20080
  class AppExceptionsFilterBase {
20000
20081
  catch(exception, host) {
20001
20082
  const ctx = host.switchToHttp();
@@ -20037,11 +20118,6 @@ const AwsSesModuleSymbols = {
20037
20118
  EmailTemplate: Symbol.for("WP.PLG:AWS_SES.EMAIL_TEMPLATE"),
20038
20119
  };
20039
20120
 
20040
- const getInstanceDecoratorData = (metadataKey, instance) => {
20041
- const reflector = new Reflector();
20042
- return reflector.get(metadataKey, instance.constructor);
20043
- };
20044
-
20045
20121
  class AwsSesEmailTemplate {
20046
20122
  async processPayload(payload) {
20047
20123
  return payload;
@@ -25289,5 +25365,5 @@ AppSessionMiddleware = __decorate([
25289
25365
  Injectable()
25290
25366
  ], AppSessionMiddleware);
25291
25367
 
25292
- export { AUTHENTICATION_EVENTS_NAMESPACE, AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsEmailModule, AwsSesEmailTemplate, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EventsService, InvalidCredentialsError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestTypeOrmQueryBuilder, NestTypeOrmRepository, OperationTokenMismatchError, PLATFORM_EVENT_NAMESPACE, PlatformEvents, QueryBuilderBase, ReplicationMode, SendgridEmailModule, SendgridEmailTemplate, SortDirection, TrackingService, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEventsTracker, WpSendgridEmailTemplate, WpUserService, getLocalizedText, newUuid, renderHandlebarsTemplate };
25368
+ export { AUTHENTICATION_EVENTS_NAMESPACE, AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsEmailModule, AwsSesEmailTemplate, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EntitySeeder, EventsService, InvalidCredentialsError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestTypeOrmEntitySeeder, NestTypeOrmQueryBuilder, NestTypeOrmRepository, OperationTokenMismatchError, PLATFORM_EVENT_NAMESPACE, PlatformEvents, QueryBuilderBase, ReplicationMode, SendgridEmailModule, SendgridEmailTemplate, SortDirection, TrackingService, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEntitySeeder, WpEventsTracker, WpSendgridEmailTemplate, WpUserService, getLocalizedText, newUuid, renderHandlebarsTemplate };
25293
25369
  //# sourceMappingURL=index.js.map