@servicelabsco/nestjs-utility-services 3.0.6 → 3.0.7

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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.0.7
4
+
5
+ ### Fixed
6
+
7
+ - **`@SubscribeFor` jobs run for subclass entities again.** `DispatcherSubscriber` looked jobs up
8
+ by the saved entity's exact class, so when a consuming app saved its own subclass of a platform
9
+ entity (e.g. `LocalEmailMessageEntity extends EmailMessageEntity`), the jobs bound to the parent
10
+ were silently skipped. The pre-3.0 per-entity subscribers fired for subclasses because TypeORM's
11
+ `listenTo()` matches them. The dispatcher now walks the saved class's prototype chain: parent-bound
12
+ jobs run first, then the subclass's own; a job bound to several classes on the chain runs once.
13
+ Consumers that worked around this by binding a parent's job to the subclass can drop the extra
14
+ `@SubscribeFor`.
15
+
3
16
  ## 3.0.6
4
17
 
5
18
  ### Changed
@@ -22,8 +22,8 @@ exports.AuthModule = AuthModule;
22
22
  exports.AuthModule = AuthModule = __decorate([
23
23
  (0, common_1.Module)({
24
24
  imports: [typeorm_1.TypeOrmModule.forFeature(es6_classes_1.default.entities), jwt_1.JwtModule.register(jwtConfig), (0, common_1.forwardRef)(() => platform_utility_module_1.PlatformUtilityModule)],
25
- providers: [...es6_classes_1.default.services, ...es6_classes_1.default.jobs],
26
- exports: [...es6_classes_1.default.services, ...es6_classes_1.default.jobs],
25
+ providers: es6_classes_1.default.services,
26
+ exports: es6_classes_1.default.services,
27
27
  })
28
28
  ], AuthModule);
29
29
  //# sourceMappingURL=auth.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../src/auth/auth.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAoD;AACpD,qCAAwC;AACxC,wFAAmF;AACnF,gEAAuC;AACvC,kDAAmD;AACnD,6CAAgD;AAOzC,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IALtB,IAAA,eAAM,EAAC;QACJ,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,qBAAU,CAAC,QAAQ,CAAC,EAAE,eAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,+CAAqB,CAAC,CAAC;QAChI,SAAS,EAAE,CAAC,GAAG,qBAAU,CAAC,QAAQ,EAAE,GAAG,qBAAU,CAAC,IAAI,CAAC;QACvD,OAAO,EAAE,CAAC,GAAG,qBAAU,CAAC,QAAQ,EAAE,GAAG,qBAAU,CAAC,IAAI,CAAC;KACxD,CAAC;GACW,UAAU,CAAG"}
1
+ {"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../src/auth/auth.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAoD;AACpD,qCAAwC;AACxC,wFAAmF;AACnF,gEAAuC;AACvC,kDAAmD;AACnD,6CAAgD;AAOzC,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IALtB,IAAA,eAAM,EAAC;QACJ,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,qBAAU,CAAC,QAAQ,CAAC,EAAE,eAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,+CAAqB,CAAC,CAAC;QAChI,SAAS,EAAE,qBAAU,CAAC,QAAQ;QAC9B,OAAO,EAAE,qBAAU,CAAC,QAAQ;KAC/B,CAAC;GACW,UAAU,CAAG"}
@@ -33,9 +33,7 @@ declare const es6Classes: {
33
33
  dtos: (typeof UserRolesAccessObjectDto | typeof SessionIdentifierAttributesDto | typeof PermissionAssignmentDto | typeof RoleAssignmentDto | typeof UserLoginDto | typeof CreateUserDto | typeof OfflineUserDto | typeof UpdateUserDto)[];
34
34
  entities: (typeof CreatorEntity | typeof CountryEntity | typeof UserReferralEntity | typeof DeviceTokenEntity | typeof RefreshTokenEntity | typeof SessionIdentifierEntity | typeof SocialIdentityEntity)[];
35
35
  interfaces: any[];
36
- jobs: any[];
37
36
  middlewares: (typeof BasicAuthMiddleware | typeof ClientConnectMiddleware | typeof InternalMiddleware | typeof JwtMiddleware | typeof RestrictedMiddleware)[];
38
37
  services: (typeof AccessService | typeof RefreshTokenService | typeof UserService | typeof AuthService | typeof DeviceTokenService | typeof SocialIdentityService | typeof SocialService)[];
39
- subscribers: any[];
40
38
  };
41
39
  export default es6Classes;
@@ -58,18 +58,8 @@ const es6Classes = {
58
58
  user_referral_entity_1.UserReferralEntity,
59
59
  ],
60
60
  interfaces: [],
61
- jobs: [],
62
61
  middlewares: [basic_auth_middleware_1.BasicAuthMiddleware, client_connect_middleware_1.ClientConnectMiddleware, internal_middleware_1.InternalMiddleware, jwt_middleware_1.JwtMiddleware, restricted_middleware_1.RestrictedMiddleware],
63
- services: [
64
- access_service_1.AccessService,
65
- auth_service_1.AuthService,
66
- device_token_service_1.DeviceTokenService,
67
- refresh_token_service_1.RefreshTokenService,
68
- social_identity_service_1.SocialIdentityService,
69
- social_service_1.SocialService,
70
- user_service_1.UserService,
71
- ],
72
- subscribers: [],
62
+ services: [access_service_1.AccessService, auth_service_1.AuthService, device_token_service_1.DeviceTokenService, refresh_token_service_1.RefreshTokenService, social_identity_service_1.SocialIdentityService, social_service_1.SocialService, user_service_1.UserService],
73
63
  };
74
64
  exports.default = es6Classes;
75
65
  //# sourceMappingURL=es6.classes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"es6.classes.js","sourceRoot":"","sources":["../../src/auth/es6.classes.ts"],"names":[],"mappings":";;AAAA,+EAA0E;AAC1E,uEAAmE;AACnE,mEAA+D;AAC/D,4DAAuD;AACvD,8DAAyD;AACzD,gFAA2E;AAC3E,oEAA+D;AAC/D,gGAA0F;AAC1F,4DAAuD;AACvD,4DAAuD;AACvD,oEAA+D;AAC/D,0DAAqD;AACrD,sFAA+E;AAC/E,8DAA0D;AAC1D,8DAA0D;AAC1D,wEAAmE;AACnE,0EAAqE;AACrE,oFAA+E;AAC/E,8EAAyE;AACzE,wDAAoD;AACpD,0EAAqE;AACrE,+EAA0E;AAC1E,uFAAkF;AAClF,2EAAuE;AACvE,iEAA6D;AAC7D,+EAA2E;AAC3E,8DAA0D;AAC1D,0DAAsD;AACtD,0EAAqE;AACrE,4EAAuE;AACvE,gFAA2E;AAC3E,8DAA0D;AAC1D,0DAAsD;AAEtD,MAAM,UAAU,GAAG;IACf,WAAW,EAAE,CAAC,2CAAmB,EAAE,oCAAgB,EAAE,gCAAc,CAAC;IACpE,IAAI,EAAE;QACF,+BAAa;QACb,iCAAc;QACd,mDAAuB;QACvB,uCAAiB;QACjB,kEAA8B;QAC9B,+BAAa;QACb,+BAAa;QACb,uCAAiB;QACjB,6BAAY;QACZ,uDAAwB;KAC3B;IACD,QAAQ,EAAE;QACN,8BAAa;QACb,8BAAa;QACb,uCAAiB;QACjB,yCAAkB;QAClB,mDAAuB;QACvB,6CAAoB;QACpB,wBAAU;QACV,yCAAkB;KACrB;IACD,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,EAAE;IACR,WAAW,EAAE,CAAC,2CAAmB,EAAE,mDAAuB,EAAE,wCAAkB,EAAE,8BAAa,EAAE,4CAAoB,CAAC;IACpH,QAAQ,EAAE;QACN,8BAAa;QACb,0BAAW;QACX,yCAAkB;QAClB,2CAAmB;QACnB,+CAAqB;QACrB,8BAAa;QACb,0BAAW;KACd;IACD,WAAW,EAAE,EAAE;CAClB,CAAC;AAEF,kBAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"es6.classes.js","sourceRoot":"","sources":["../../src/auth/es6.classes.ts"],"names":[],"mappings":";;AAAA,+EAA0E;AAC1E,uEAAmE;AACnE,mEAA+D;AAC/D,4DAAuD;AACvD,8DAAyD;AACzD,gFAA2E;AAC3E,oEAA+D;AAC/D,gGAA0F;AAC1F,4DAAuD;AACvD,4DAAuD;AACvD,oEAA+D;AAC/D,0DAAqD;AACrD,sFAA+E;AAC/E,8DAA0D;AAC1D,8DAA0D;AAC1D,wEAAmE;AACnE,0EAAqE;AACrE,oFAA+E;AAC/E,8EAAyE;AACzE,wDAAoD;AACpD,0EAAqE;AACrE,+EAA0E;AAC1E,uFAAkF;AAClF,2EAAuE;AACvE,iEAA6D;AAC7D,+EAA2E;AAC3E,8DAA0D;AAC1D,0DAAsD;AACtD,0EAAqE;AACrE,4EAAuE;AACvE,gFAA2E;AAC3E,8DAA0D;AAC1D,0DAAsD;AAEtD,MAAM,UAAU,GAAG;IACf,WAAW,EAAE,CAAC,2CAAmB,EAAE,oCAAgB,EAAE,gCAAc,CAAC;IACpE,IAAI,EAAE;QACF,+BAAa;QACb,iCAAc;QACd,mDAAuB;QACvB,uCAAiB;QACjB,kEAA8B;QAC9B,+BAAa;QACb,+BAAa;QACb,uCAAiB;QACjB,6BAAY;QACZ,uDAAwB;KAC3B;IACD,QAAQ,EAAE;QACN,8BAAa;QACb,8BAAa;QACb,uCAAiB;QACjB,yCAAkB;QAClB,mDAAuB;QACvB,6CAAoB;QACpB,wBAAU;QACV,yCAAkB;KACrB;IACD,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,CAAC,2CAAmB,EAAE,mDAAuB,EAAE,wCAAkB,EAAE,8BAAa,EAAE,4CAAoB,CAAC;IACpH,QAAQ,EAAE,CAAC,8BAAa,EAAE,0BAAW,EAAE,yCAAkB,EAAE,2CAAmB,EAAE,+CAAqB,EAAE,8BAAa,EAAE,0BAAW,CAAC;CACrI,CAAC;AAEF,kBAAe,UAAU,CAAC"}
@@ -6,10 +6,13 @@ export declare class DispatcherSubscriber extends CommonSubscriber<any> implemen
6
6
  private readonly dataSource;
7
7
  private readonly moduleRef;
8
8
  private readonly jobs;
9
+ private readonly jobsByTarget;
10
+ private initialized;
9
11
  constructor(dataSource: DataSource, moduleRef: ModuleRef);
10
12
  onModuleInit(): Promise<void>;
11
13
  private warnIgnoredPrePersistHooks;
12
14
  afterInsert(evt: InsertEvent<any>): Promise<any>;
13
15
  afterUpdate(evt: UpdateEvent<any>): Promise<any>;
14
16
  private routeDispatch;
17
+ private jobsFor;
15
18
  }
@@ -55,6 +55,8 @@ let DispatcherSubscriber = class DispatcherSubscriber extends common_subscriber_
55
55
  this.dataSource = dataSource;
56
56
  this.moduleRef = moduleRef;
57
57
  this.jobs = new Map();
58
+ this.jobsByTarget = new Map();
59
+ this.initialized = false;
58
60
  dataSource.subscribers.push(this);
59
61
  }
60
62
  async onModuleInit() {
@@ -72,6 +74,8 @@ let DispatcherSubscriber = class DispatcherSubscriber extends common_subscriber_
72
74
  }
73
75
  this.jobs.set(entityClass, resolved);
74
76
  }
77
+ this.jobsByTarget.clear();
78
+ this.initialized = true;
75
79
  }
76
80
  warnIgnoredPrePersistHooks(job, jobClass, entityClass) {
77
81
  const hooks = ['beforeInsert', 'beforeUpdate'].filter((hook) => typeof job?.[hook] === 'function');
@@ -89,15 +93,33 @@ let DispatcherSubscriber = class DispatcherSubscriber extends common_subscriber_
89
93
  return this.routeDispatch(evt);
90
94
  }
91
95
  async routeDispatch(evt) {
92
- const target = evt.metadata.target;
93
- const jobs = this.jobs.get(target);
94
- if (!jobs?.length)
96
+ const jobs = this.jobsFor(evt.metadata.target);
97
+ if (!jobs.length)
95
98
  return;
96
99
  const data = this.getEventData(evt);
97
100
  for (const job of jobs) {
98
101
  await this.enqueueDispatch(evt.queryRunner, job, data);
99
102
  }
100
103
  }
104
+ jobsFor(target) {
105
+ const cached = this.jobsByTarget.get(target);
106
+ if (cached)
107
+ return cached;
108
+ const lineage = [];
109
+ for (let cls = target; typeof cls === 'function' && cls !== Function.prototype; cls = Object.getPrototypeOf(cls)) {
110
+ lineage.unshift(cls);
111
+ }
112
+ const jobs = [];
113
+ for (const cls of lineage) {
114
+ for (const job of this.jobs.get(cls) ?? []) {
115
+ if (!jobs.includes(job))
116
+ jobs.push(job);
117
+ }
118
+ }
119
+ if (this.initialized)
120
+ this.jobsByTarget.set(target, jobs);
121
+ return jobs;
122
+ }
101
123
  };
102
124
  exports.DispatcherSubscriber = DispatcherSubscriber;
103
125
  exports.DispatcherSubscriber = DispatcherSubscriber = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher.subscriber.js","sourceRoot":"","sources":["../../../src/platformUtility/subscribers/dispatcher.subscriber.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatcher.subscriber.js","sourceRoot":"","sources":["../../../src/platformUtility/subscribers/dispatcher.subscriber.ts"],"names":[],"mappings":"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"}
@@ -170,6 +170,7 @@ other job.
170
170
  | `afterInsert` / `afterUpdate` | Fan-out to **all** `@SubscribeFor` jobs for that entity (registration order, sequential enqueue). |
171
171
  | `beforeInsert` / `beforeUpdate` | **Only** on standalone `CommonSubscriber`s. Never routed to jobs. |
172
172
  | Standalone subscriber + `@SubscribeFor` | Allowed. Mutation on subscriber; post-persist via dispatcher. |
173
+ | Saving a subclass entity (e.g. `LocalEmailMessageEntity extends EmailMessageEntity`) | Runs the jobs bound to the subclass **and** to every entity it extends (parents first), like TypeORM `listenTo()`. A job bound to several classes on the chain runs once. Saving the parent never runs subclass-only jobs. |
173
174
  | Transactional saves | Dispatch is buffered until commit (see `CommonSubscriber` / dispatcher); rolled back on rollback. |
174
175
 
175
176
  Platform modules usually register before the app, so NU’s job is typically
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicelabsco/nestjs-utility-services",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "NestJS generic packages to support development",
5
5
  "author": "Hemant Kumar Sah <hemantanshu@gmail.com>",
6
6
  "license": "MIT",