@pocket-architect/core 0.1.19 → 0.1.23

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 (54) hide show
  1. package/.eslintignore +1 -0
  2. package/build/Entity.d.ts +2 -1
  3. package/build/Entity.js +9 -2
  4. package/build/Entity.js.map +1 -1
  5. package/build/Entity.spec.js +9 -2
  6. package/build/Entity.spec.js.map +1 -1
  7. package/build/EntityId.d.ts +1 -0
  8. package/build/EntityId.js +3 -0
  9. package/build/EntityId.js.map +1 -1
  10. package/build/application/Application.d.ts +10 -0
  11. package/build/application/Application.js +43 -0
  12. package/build/application/Application.js.map +1 -0
  13. package/build/application/ApplicationModule.d.ts +5 -0
  14. package/build/application/ApplicationModule.js +10 -0
  15. package/build/application/ApplicationModule.js.map +1 -0
  16. package/build/bootstrap.d.ts +14 -0
  17. package/build/bootstrap.js +88 -0
  18. package/build/bootstrap.js.map +1 -0
  19. package/build/bootstrap.spec.d.ts +1 -0
  20. package/build/bootstrap.spec.js +144 -0
  21. package/build/bootstrap.spec.js.map +1 -0
  22. package/build/eventBus/InMemoryEventBus.d.ts +6 -2
  23. package/build/eventBus/InMemoryEventBus.js +15 -10
  24. package/build/eventBus/InMemoryEventBus.js.map +1 -1
  25. package/build/helpers.d.ts +1 -0
  26. package/build/helpers.js +37 -0
  27. package/build/helpers.js.map +1 -0
  28. package/build/helpers.spec.d.ts +1 -0
  29. package/build/helpers.spec.js +70 -0
  30. package/build/helpers.spec.js.map +1 -0
  31. package/build/index.d.ts +8 -1
  32. package/build/index.js +11 -1
  33. package/build/index.js.map +1 -1
  34. package/package.json +2 -1
  35. package/src/Entity.spec.ts +7 -2
  36. package/src/Entity.ts +12 -4
  37. package/src/EntityId.ts +4 -0
  38. package/src/application/Application.ts +24 -0
  39. package/src/application/ApplicationModule.ts +7 -0
  40. package/src/bootstrap.spec.ts +100 -0
  41. package/src/bootstrap.ts +87 -0
  42. package/src/eventBus/InMemoryEventBus.ts +19 -5
  43. package/src/helpers.spec.ts +65 -0
  44. package/src/helpers.ts +32 -0
  45. package/src/index.ts +17 -1
  46. package/tests/testapp/domain/test/service/TestService.d.ts +4 -0
  47. package/tests/testapp/domain/test/service/TestService.js +13 -0
  48. package/tests/testapp/domain/test/service/TestService.js.map +1 -0
  49. package/tests/testapp/domain/test/service/TestService.ts +8 -0
  50. package/tests/testapp/infra/test/providers/TestProvider.d.ts +4 -0
  51. package/tests/testapp/infra/test/providers/TestProvider.js +13 -0
  52. package/tests/testapp/infra/test/providers/TestProvider.js.map +1 -0
  53. package/tests/testapp/infra/test/providers/TestProvider.ts +8 -0
  54. package/tsconfig.json +1 -1
package/.eslintignore CHANGED
@@ -1,2 +1,3 @@
1
1
  /**/*.js
2
2
  build/*
3
+ tests/
package/build/Entity.d.ts CHANGED
@@ -10,5 +10,6 @@ export declare abstract class Entity<T, E, H extends EntityId<E>> {
10
10
  equals(object?: Entity<T, E, H>): boolean;
11
11
  get id(): H;
12
12
  toPrimitive(): T;
13
- toJSON(): T;
13
+ toJSON(): any;
14
+ toSnapshot(): any;
14
15
  }
package/build/Entity.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Entity = void 0;
4
4
  var EntityId_1 = require("./EntityId");
5
+ var helpers_1 = require("./helpers");
5
6
  var isEntity = function (v) {
6
7
  return v instanceof Entity;
7
8
  };
@@ -27,8 +28,9 @@ var Entity = /** @class */ (function () {
27
28
  }
28
29
  var diffs = {};
29
30
  var copy = JSON.parse(this._snapshot);
31
+ var snapshotObj = (0, helpers_1.createSnapshot)(this.props);
30
32
  for (var key in this.props) {
31
- if (JSON.stringify(this.props[key]) !== JSON.stringify(copy[key])) {
33
+ if (JSON.stringify(snapshotObj[key]) !== JSON.stringify(copy[key])) {
32
34
  diffs[key] = this.props[key];
33
35
  }
34
36
  }
@@ -38,7 +40,7 @@ var Entity = /** @class */ (function () {
38
40
  if (!this._snapshot) {
39
41
  return false;
40
42
  }
41
- return this._snapshot !== JSON.stringify(this.props);
43
+ return this._snapshot !== JSON.stringify((0, helpers_1.createSnapshot)(this.props));
42
44
  };
43
45
  Entity.prototype.equals = function (object) {
44
46
  if (object === null || object === undefined) {
@@ -62,9 +64,14 @@ var Entity = /** @class */ (function () {
62
64
  Entity.prototype.toPrimitive = function () {
63
65
  return this.props;
64
66
  };
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
65
68
  Entity.prototype.toJSON = function () {
66
69
  return this.toPrimitive();
67
70
  };
71
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
+ Entity.prototype.toSnapshot = function () {
73
+ return this.toPrimitive();
74
+ };
68
75
  return Entity;
69
76
  }());
70
77
  exports.Entity = Entity;
@@ -1 +1 @@
1
- {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AAEtC,IAAM,QAAQ,GAAG,UAA8B,CAAkB;IAC/D,OAAO,CAAC,YAAY,MAAM,CAAA;AAC5B,CAAC,CAAA;AAED;IAiCE,gBAAsB,KAAQ,EAAE,EAAQ;QACtC,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,GAAG,GAAM,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,mBAAQ,CAAI,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,GAAM,CAAC,IAAI,mBAAQ,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAnCD,yBAAQ,GAAR;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAM,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAAY,GAAZ;QACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,KAAK,IAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAClE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;IAED,wBAAO,GAAP;QACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAWM,uBAAM,GAAb,UAAc,MAAwB;QACpC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,sBAAI,sBAAE;aAAN;YACE,OAAO,IAAI,CAAC,GAAG,CAAA;QACjB,CAAC;;;OAAA;IAED,4BAAW,GAAX;QACE,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,uBAAM,GAAN;QACE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;IAC3B,CAAC;IACH,aAAC;AAAD,CAAC,AArED,IAqEC;AArEqB,wBAAM"}
1
+ {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":"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"}
@@ -18,12 +18,19 @@ var TestEntity = /** @class */ (function (_super) {
18
18
  enumerable: false,
19
19
  configurable: true
20
20
  });
21
+ Object.defineProperty(TestEntity.prototype, "testId", {
22
+ set: function (val) {
23
+ this.props.testId = val;
24
+ },
25
+ enumerable: false,
26
+ configurable: true
27
+ });
21
28
  return TestEntity;
22
29
  }(Entity_1.Entity));
23
30
  describe('Entity', function () {
24
31
  var entity;
25
32
  beforeAll(function () {
26
- entity = TestEntity.create({ name: 'test' }, '1');
33
+ entity = TestEntity.create({ name: 'test', testId: new EntityId_1.EntityId('1') }, '1');
27
34
  });
28
35
  test('base', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
29
36
  var entityNew, entity2, entity3;
@@ -48,7 +55,7 @@ describe('Entity', function () {
48
55
  var snapshot;
49
56
  return tslib_1.__generator(this, function (_a) {
50
57
  snapshot = entity.snapshot();
51
- expect(snapshot).toEqual({ name: 'test' });
58
+ expect(snapshot).toEqual({ name: 'test', testId: '3D4WX' });
52
59
  expect(function () {
53
60
  snapshot.name = 'changed';
54
61
  }).toThrow();
@@ -1 +1 @@
1
- {"version":3,"file":"Entity.spec.js","sourceRoot":"","sources":["../src/Entity.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Entity.spec.js","sourceRoot":"","sources":["../src/Entity.spec.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,6 @@ export declare class EntityId<T> {
8
8
  protected fromHash(hash: string): EntityId<T>;
9
9
  toPrimitive(): T;
10
10
  toString(): string;
11
+ toJSON(): string;
11
12
  equals(id: EntityId<T>): boolean;
12
13
  }
package/build/EntityId.js CHANGED
@@ -57,6 +57,9 @@ var EntityId = /** @class */ (function () {
57
57
  EntityId.prototype.toString = function () {
58
58
  return this._uuid;
59
59
  };
60
+ EntityId.prototype.toJSON = function () {
61
+ return this.toHash();
62
+ };
60
63
  EntityId.prototype.equals = function (id) {
61
64
  return this._uuid === id._uuid;
62
65
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EntityId.js","sourceRoot":"","sources":["../src/EntityId.ts"],"names":[],"mappings":";;;;AAAA,0EAAuC;AACvC,8CAA+C;AAC/C,4DAA8B;AAC9B,+CAA4C;AAE5C;IAIE,kBAAY,QAAyB,EAAE,MAAsB,EAAE,IAAmB;QAAtE,yBAAA,EAAA,eAAyB;QAAE,uBAAA,EAAA,cAAsB;QAAE,qBAAA,EAAA,WAAmB;QAHxE,cAAS,GAAW,IAAI,CAAC;QACzB,UAAK,GAAW,IAAI,CAAC;QAG7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,QAAkB,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,6BAAU,GAAlB;QACE,IAAI,CAAC,KAAK,GAAG,IAAA,wBAAU,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAA,gBAAQ,GAAE,EAAE,IAAA,wBAAU,EAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACtH,CAAC;IAED,sBAAI,iCAAW;aAAf;YACE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;;;OAAA;IAED,yBAAM,GAAN;QACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,IAAM,OAAO,QAAO,iBAAO,YAAP,iBAAO,kCAAI,IAAI,CAAC,WAAW,YAAC,CAAC;QACjD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;IAES,2BAAQ,GAAlB,UAAmB,IAAY;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAM,OAAO,QAAO,iBAAO,YAAP,iBAAO,kCAAI,IAAI,CAAC,WAAW,YAAC,CAAC;QACjD,IAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,qBAAS,CAAC,uBAAgB,IAAI,CAAE,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,SAAS,GAAM,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAAW,GAAX;QACE,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,2BAAQ,GAAR;QACE,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,yBAAM,GAAN,UAAO,EAAe;QACpB,OAAO,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC;IACjC,CAAC;IACH,eAAC;AAAD,CAAC,AAvDD,IAuDC;AAvDY,4BAAQ"}
1
+ {"version":3,"file":"EntityId.js","sourceRoot":"","sources":["../src/EntityId.ts"],"names":[],"mappings":";;;;AAAA,0EAAuC;AACvC,8CAA+C;AAC/C,4DAA8B;AAC9B,+CAA4C;AAE5C;IAIE,kBAAY,QAAyB,EAAE,MAAsB,EAAE,IAAmB;QAAtE,yBAAA,EAAA,eAAyB;QAAE,uBAAA,EAAA,cAAsB;QAAE,qBAAA,EAAA,WAAmB;QAHxE,cAAS,GAAW,IAAI,CAAC;QACzB,UAAK,GAAW,IAAI,CAAC;QAG7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,QAAkB,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,6BAAU,GAAlB;QACE,IAAI,CAAC,KAAK,GAAG,IAAA,wBAAU,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAA,gBAAQ,GAAE,EAAE,IAAA,wBAAU,EAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACtH,CAAC;IAED,sBAAI,iCAAW;aAAf;YACE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;;;OAAA;IAED,yBAAM,GAAN;QACE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,IAAM,OAAO,QAAO,iBAAO,YAAP,iBAAO,kCAAI,IAAI,CAAC,WAAW,YAAC,CAAC;QACjD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;IAES,2BAAQ,GAAlB,UAAmB,IAAY;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAM,OAAO,QAAO,iBAAO,YAAP,iBAAO,kCAAI,IAAI,CAAC,WAAW,YAAC,CAAC;QACjD,IAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,qBAAS,CAAC,uBAAgB,IAAI,CAAE,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,SAAS,GAAM,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8BAAW,GAAX;QACE,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,2BAAQ,GAAR;QACE,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,yBAAM,GAAN;QACE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,yBAAM,GAAN,UAAO,EAAe;QACpB,OAAO,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC;IACjC,CAAC;IACH,eAAC;AAAD,CAAC,AA3DD,IA2DC;AA3DY,4BAAQ"}
@@ -0,0 +1,10 @@
1
+ import { BaseBootstrapEnv } from "../bootstrap";
2
+ import type { ApplicationModule } from "./ApplicationModule";
3
+ export declare abstract class Application {
4
+ protected _modules: ApplicationModule[];
5
+ abstract initApplication(scope: BaseBootstrapEnv): Promise<void>;
6
+ prepareApplication?(scope: BaseBootstrapEnv): Promise<void>;
7
+ postInitApplication?(scope: BaseBootstrapEnv): Promise<void>;
8
+ initModules(modules: ApplicationModule[], scope: BaseBootstrapEnv): Promise<void>;
9
+ get modules(): ApplicationModule[];
10
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Application = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var Application = /** @class */ (function () {
6
+ function Application() {
7
+ this._modules = [];
8
+ }
9
+ Application.prototype.initModules = function (modules, scope) {
10
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
11
+ var _i, modules_1, module_1;
12
+ return tslib_1.__generator(this, function (_a) {
13
+ switch (_a.label) {
14
+ case 0:
15
+ _i = 0, modules_1 = modules;
16
+ _a.label = 1;
17
+ case 1:
18
+ if (!(_i < modules_1.length)) return [3 /*break*/, 4];
19
+ module_1 = modules_1[_i];
20
+ return [4 /*yield*/, module_1.initModule(this, scope)];
21
+ case 2:
22
+ _a.sent();
23
+ this._modules.push(module_1);
24
+ _a.label = 3;
25
+ case 3:
26
+ _i++;
27
+ return [3 /*break*/, 1];
28
+ case 4: return [2 /*return*/];
29
+ }
30
+ });
31
+ });
32
+ };
33
+ Object.defineProperty(Application.prototype, "modules", {
34
+ get: function () {
35
+ return this._modules;
36
+ },
37
+ enumerable: false,
38
+ configurable: true
39
+ });
40
+ return Application;
41
+ }());
42
+ exports.Application = Application;
43
+ //# sourceMappingURL=Application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Application.js","sourceRoot":"","sources":["../../src/application/Application.ts"],"names":[],"mappings":";;;;AAGA;IAAA;QAEY,aAAQ,GAAwB,EAAE,CAAC;IAkB/C,CAAC;IAVO,iCAAW,GAAjB,UAAkB,OAA4B,EAAE,KAAuB;;;;;;8BACzC,EAAP,mBAAO;;;6BAAP,CAAA,qBAAO,CAAA;wBAAvB;wBACH,qBAAM,QAAM,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA;;wBAApC,SAAoC,CAAC;wBACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAM,CAAC,CAAC;;;wBAFR,IAAO,CAAA;;;;;;KAI7B;IAED,sBAAI,gCAAO;aAAX;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;;;OAAA;IACH,kBAAC;AAAD,CAAC,AApBD,IAoBC;AAnBc,kCAAW"}
@@ -0,0 +1,5 @@
1
+ import { BaseBootstrapEnv } from "../bootstrap";
2
+ import { Application } from "./Application";
3
+ export declare abstract class ApplicationModule {
4
+ abstract initModule(app: Application, scope: BaseBootstrapEnv): Promise<void>;
5
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApplicationModule = void 0;
4
+ var ApplicationModule = /** @class */ (function () {
5
+ function ApplicationModule() {
6
+ }
7
+ return ApplicationModule;
8
+ }());
9
+ exports.ApplicationModule = ApplicationModule;
10
+ //# sourceMappingURL=ApplicationModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationModule.js","sourceRoot":"","sources":["../../src/application/ApplicationModule.ts"],"names":[],"mappings":";;;AAGA;IAAA;IAGA,CAAC;IAAD,wBAAC;AAAD,CAAC,AAHD,IAGC;AAFc,8CAAiB"}
@@ -0,0 +1,14 @@
1
+ import { AwilixContainer } from 'awilix';
2
+ import { Application } from "./application/Application";
3
+ export interface BootstrapOptions {
4
+ appFolder: string;
5
+ domainsFolder: string;
6
+ infraFolder: string;
7
+ scanFolders?: string[];
8
+ }
9
+ export interface BaseBootstrapEnv {
10
+ app: Application;
11
+ env: string;
12
+ DIContainer: AwilixContainer<BaseBootstrapEnv>;
13
+ }
14
+ export declare function bootstrap(app: Application, { appFolder, domainsFolder, infraFolder, scanFolders }: BootstrapOptions, env?: string): Promise<void>;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bootstrap = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var awilix_1 = require("awilix");
6
+ function bootstrap(app, _a, env) {
7
+ var appFolder = _a.appFolder, domainsFolder = _a.domainsFolder, infraFolder = _a.infraFolder, scanFolders = _a.scanFolders;
8
+ if (env === void 0) { env = 'dev'; }
9
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
10
+ function warmupSingletons(container) {
11
+ var _a;
12
+ var regs = (_a = container.registrations) !== null && _a !== void 0 ? _a : {};
13
+ var names = Object.keys(regs);
14
+ for (var _i = 0, names_1 = names; _i < names_1.length; _i++) {
15
+ var name = names_1[_i];
16
+ var r = regs[name];
17
+ // Awilix зберігає lifetime всередині resolver'а (зазвичай r.lifetime)
18
+ if ((r === null || r === void 0 ? void 0 : r.lifetime) === awilix_1.Lifetime.SINGLETON) {
19
+ // важливо: резолвимо саме з ROOT
20
+ container.resolve(name);
21
+ }
22
+ }
23
+ }
24
+ var rootContainer, scope, folders, err_1;
25
+ return tslib_1.__generator(this, function (_b) {
26
+ switch (_b.label) {
27
+ case 0:
28
+ _b.trys.push([0, 6, , 7]);
29
+ if (!appFolder) {
30
+ throw new Error('`appFolder` is required');
31
+ }
32
+ if (!domainsFolder) {
33
+ throw new Error('`domainsFolder` is required');
34
+ }
35
+ if (!infraFolder) {
36
+ throw new Error('`infraFolder` is required');
37
+ }
38
+ rootContainer = (0, awilix_1.createContainer)({
39
+ injectionMode: awilix_1.InjectionMode.PROXY
40
+ });
41
+ rootContainer.register({
42
+ app: (0, awilix_1.asValue)(app),
43
+ env: (0, awilix_1.asValue)(env),
44
+ });
45
+ scope = rootContainer.createScope();
46
+ scope.register({
47
+ DIContainer: (0, awilix_1.asValue)(scope)
48
+ });
49
+ folders = [];
50
+ // app folder
51
+ // folders.push(`${appFolder}/**/!(*.spec|*.d|index).{ts,js}`);
52
+ // domains folder
53
+ folders.push("".concat(domainsFolder, "/**/!(*.spec|*.d).{ts,js}"));
54
+ folders.push("".concat(domainsFolder, "/**/service/**/!(*.spec|*.d).{ts,js}"));
55
+ // infra folder
56
+ folders.push("".concat(infraFolder, "/**/repository/**/!(*.spec|*.d).{ts,js}"));
57
+ // провайдери реєструються у глобальному контейнері як синглтони і потім через warmupSingletons створюються одразу
58
+ // щоб перевірити чи не використовують вони залежності з transient lifetime
59
+ rootContainer.loadModules([
60
+ ["".concat(infraFolder, "/**/providers/**/!(*.spec|*.d).{ts,js}"), { lifetime: awilix_1.Lifetime.SINGLETON }]
61
+ ], { resolverOptions: {} });
62
+ scope.loadModules(tslib_1.__spreadArray(tslib_1.__spreadArray([], folders, true), (scanFolders !== null && scanFolders !== void 0 ? scanFolders : []), true), { resolverOptions: {} });
63
+ warmupSingletons(scope);
64
+ if (!app.prepareApplication) return [3 /*break*/, 2];
65
+ return [4 /*yield*/, app.prepareApplication(scope.cradle)];
66
+ case 1:
67
+ _b.sent();
68
+ _b.label = 2;
69
+ case 2: return [4 /*yield*/, app.initApplication(scope.cradle)];
70
+ case 3:
71
+ _b.sent();
72
+ if (!app.postInitApplication) return [3 /*break*/, 5];
73
+ return [4 /*yield*/, app.postInitApplication(scope.cradle)];
74
+ case 4:
75
+ _b.sent();
76
+ _b.label = 5;
77
+ case 5: return [3 /*break*/, 7];
78
+ case 6:
79
+ err_1 = _b.sent();
80
+ console.info(err_1);
81
+ throw err_1;
82
+ case 7: return [2 /*return*/];
83
+ }
84
+ });
85
+ });
86
+ }
87
+ exports.bootstrap = bootstrap;
88
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var bootstrap_1 = require("./bootstrap");
5
+ var Application_1 = require("./application/Application");
6
+ var awilix_1 = require("awilix");
7
+ var ApplicationModule_1 = require("./application/ApplicationModule");
8
+ var InMemoryEventBus_1 = require("./eventBus/InMemoryEventBus");
9
+ var DomainEvent_1 = require("./DomainEvent");
10
+ var TestApplication = /** @class */ (function (_super) {
11
+ tslib_1.__extends(TestApplication, _super);
12
+ function TestApplication() {
13
+ var _this = _super !== null && _super.apply(this, arguments) || this;
14
+ _this.result = [];
15
+ return _this;
16
+ }
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ TestApplication.prototype.initApplication = function (_a) {
19
+ var scope = _a.DIContainer;
20
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
21
+ var provider, service, newScope;
22
+ return tslib_1.__generator(this, function (_b) {
23
+ switch (_b.label) {
24
+ case 0:
25
+ this.eventBus = new InMemoryEventBus_1.InMemoryEventBus();
26
+ provider = scope.resolve('TestProvider');
27
+ service = scope.resolve('TestService');
28
+ provider.inc();
29
+ service.inc();
30
+ newScope = scope.createScope();
31
+ provider = newScope.resolve('TestProvider');
32
+ service = newScope.resolve('TestService');
33
+ provider.inc();
34
+ service.inc();
35
+ newScope = scope.createScope();
36
+ provider = newScope.resolve('TestProvider');
37
+ service = newScope.resolve('TestService');
38
+ provider.inc();
39
+ service.inc();
40
+ this.result = [provider.value, service.value];
41
+ scope.register({
42
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
43
+ // @ts-ignore
44
+ context: (0, awilix_1.asValue)({ userId: '1' }),
45
+ TestModule: (0, awilix_1.asValue)(new TestModule())
46
+ });
47
+ this.scope = scope;
48
+ return [4 /*yield*/, this.initModules([
49
+ scope.resolve('TestModule')
50
+ ], scope.cradle)];
51
+ case 1:
52
+ _b.sent();
53
+ return [2 /*return*/];
54
+ }
55
+ });
56
+ });
57
+ };
58
+ return TestApplication;
59
+ }(Application_1.Application));
60
+ var TestModule = /** @class */ (function (_super) {
61
+ tslib_1.__extends(TestModule, _super);
62
+ function TestModule() {
63
+ var _this = _super !== null && _super.apply(this, arguments) || this;
64
+ _this.events = [];
65
+ return _this;
66
+ }
67
+ TestModule.prototype.subscribedTo = function () {
68
+ return [TestDomainEvent];
69
+ };
70
+ TestModule.prototype.on = function (domainEvent) {
71
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
72
+ return tslib_1.__generator(this, function (_a) {
73
+ this.events.push(domainEvent.test);
74
+ return [2 /*return*/];
75
+ });
76
+ });
77
+ };
78
+ TestModule.prototype.initModule = function (app) {
79
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
80
+ return tslib_1.__generator(this, function (_a) {
81
+ app.eventBus.addSubscribers(this);
82
+ return [2 /*return*/];
83
+ });
84
+ });
85
+ };
86
+ return TestModule;
87
+ }(ApplicationModule_1.ApplicationModule));
88
+ var TestDomainEvent = /** @class */ (function (_super) {
89
+ tslib_1.__extends(TestDomainEvent, _super);
90
+ function TestDomainEvent() {
91
+ return _super !== null && _super.apply(this, arguments) || this;
92
+ }
93
+ Object.defineProperty(TestDomainEvent.prototype, "test", {
94
+ get: function () {
95
+ return this.props.test;
96
+ },
97
+ enumerable: false,
98
+ configurable: true
99
+ });
100
+ return TestDomainEvent;
101
+ }(DomainEvent_1.DomainEvent));
102
+ describe('bootstrap', function () {
103
+ test('bootstrap', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
104
+ var app;
105
+ return tslib_1.__generator(this, function (_a) {
106
+ switch (_a.label) {
107
+ case 0:
108
+ app = new TestApplication();
109
+ return [4 /*yield*/, (0, bootstrap_1.bootstrap)(app, {
110
+ appFolder: "".concat(__dirname, "/../tests/testapp/app"),
111
+ domainsFolder: "".concat(__dirname, "/../tests/testapp/domain"),
112
+ infraFolder: "".concat(__dirname, "/../tests/testapp/infra"),
113
+ })];
114
+ case 1:
115
+ _a.sent();
116
+ // провайдер в інфрі синглтон, сервіс - ні
117
+ expect(app.result).toEqual([3, 1]);
118
+ return [4 /*yield*/, app.eventBus.push(new TestDomainEvent({ test: 'data' }))];
119
+ case 2:
120
+ _a.sent();
121
+ expect(app.eventBus.listenerCount('TestDomainEvent')).toBe(1);
122
+ return [4 /*yield*/, app.eventBus.publish()];
123
+ case 3:
124
+ _a.sent();
125
+ expect(app.modules[0].events).toEqual(['data']);
126
+ return [2 /*return*/];
127
+ }
128
+ });
129
+ }); });
130
+ test('bootstrap error', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
131
+ return tslib_1.__generator(this, function (_a) {
132
+ switch (_a.label) {
133
+ case 0:
134
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
135
+ return [4 /*yield*/, expect(function () { return (0, bootstrap_1.bootstrap)(new TestApplication(), {}); }).rejects.toThrow('`appFolder` is required')];
136
+ case 1:
137
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
138
+ _a.sent();
139
+ return [2 /*return*/];
140
+ }
141
+ });
142
+ }); });
143
+ });
144
+ //# sourceMappingURL=bootstrap.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.spec.js","sourceRoot":"","sources":["../src/bootstrap.spec.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,14 @@ import { EventEmitter } from 'events';
3
3
  import { AnyDomainEvent } from '../DomainEvent';
4
4
  import { EventBus } from '../EventBus';
5
5
  import { DomainEventSubscriber } from "../DomainEventSubscriber";
6
- export declare class InMemoryEventBus extends EventEmitter implements EventBus {
6
+ export declare class InMemoryEventBus implements EventBus {
7
7
  protected _events: AnyDomainEvent[];
8
+ protected _emitter: EventEmitter;
9
+ constructor();
8
10
  push(event: AnyDomainEvent): Promise<void>;
9
11
  clear(): Promise<void>;
10
12
  publish(events?: AnyDomainEvent[]): Promise<void>;
11
- addSubscribers(subscribers: DomainEventSubscriber[]): void;
13
+ on(event: string, listener: (...args: never[]) => void): void;
14
+ listenerCount(event: string): number;
15
+ addSubscribers(subscribers: DomainEventSubscriber[] | DomainEventSubscriber): void;
12
16
  }
@@ -3,12 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InMemoryEventBus = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var events_1 = require("events");
6
- var InMemoryEventBus = /** @class */ (function (_super) {
7
- tslib_1.__extends(InMemoryEventBus, _super);
6
+ var InMemoryEventBus = /** @class */ (function () {
8
7
  function InMemoryEventBus() {
9
- var _this = _super !== null && _super.apply(this, arguments) || this;
10
- _this._events = [];
11
- return _this;
8
+ this._events = [];
9
+ this._emitter = new events_1.EventEmitter();
12
10
  }
13
11
  InMemoryEventBus.prototype.push = function (event) {
14
12
  return tslib_1.__awaiter(this, void 0, void 0, function () {
@@ -36,7 +34,7 @@ var InMemoryEventBus = /** @class */ (function (_super) {
36
34
  allEvents = (this._events || []).concat(events !== null && events !== void 0 ? events : []);
37
35
  for (_i = 0, allEvents_1 = allEvents; _i < allEvents_1.length; _i++) {
38
36
  event = allEvents_1[_i];
39
- this.emit(event.eventName, event);
37
+ this._emitter.emit(event.eventName, event);
40
38
  }
41
39
  return [4 /*yield*/, this.clear()];
42
40
  case 1:
@@ -46,18 +44,25 @@ var InMemoryEventBus = /** @class */ (function (_super) {
46
44
  });
47
45
  });
48
46
  };
47
+ InMemoryEventBus.prototype.on = function (event, listener) {
48
+ this._emitter.on(event, listener);
49
+ };
50
+ InMemoryEventBus.prototype.listenerCount = function (event) {
51
+ return this._emitter.listenerCount(event);
52
+ };
49
53
  InMemoryEventBus.prototype.addSubscribers = function (subscribers) {
50
54
  var _a;
51
- for (var _i = 0, subscribers_1 = subscribers; _i < subscribers_1.length; _i++) {
52
- var subscriber = subscribers_1[_i];
55
+ var subsArray = Array.isArray(subscribers) ? subscribers : [subscribers];
56
+ for (var _i = 0, subsArray_1 = subsArray; _i < subsArray_1.length; _i++) {
57
+ var subscriber = subsArray_1[_i];
53
58
  var events = subscriber.subscribedTo();
54
59
  for (var _b = 0, events_2 = events; _b < events_2.length; _b++) {
55
60
  var event = events_2[_b];
56
- this.on((_a = event.EVENT_NAME) !== null && _a !== void 0 ? _a : event.name, subscriber.on.bind(subscriber));
61
+ this._emitter.on((_a = event.EVENT_NAME) !== null && _a !== void 0 ? _a : event.name, subscriber.on.bind(subscriber));
57
62
  }
58
63
  }
59
64
  };
60
65
  return InMemoryEventBus;
61
- }(events_1.EventEmitter));
66
+ }());
62
67
  exports.InMemoryEventBus = InMemoryEventBus;
63
68
  //# sourceMappingURL=InMemoryEventBus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InMemoryEventBus.js","sourceRoot":"","sources":["../../src/eventBus/InMemoryEventBus.ts"],"names":[],"mappings":";;;;AAAA,iCAAsC;AAKtC;IAAsC,4CAAY;IAAlD;;QACY,aAAO,GAAqB,EAAE,CAAC;;IA0B3C,CAAC;IAxBO,+BAAI,GAAV,UAAW,KAAqB;;;gBAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;;;KAC1B;IAEK,gCAAK,GAAX;;;gBACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;;;;KACnB;IAEK,kCAAO,GAAb,UAAc,MAA6B;QAA7B,uBAAA,EAAA,WAA6B;;;;;;wBACnC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC;wBAC5D,WAA6B,EAAT,uBAAS,EAAT,uBAAS,EAAT,IAAS,EAAE,CAAC;4BAArB,KAAK;4BACd,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;wBACpC,CAAC;wBACD,qBAAM,IAAI,CAAC,KAAK,EAAE,EAAA;;wBAAlB,SAAkB,CAAC;;;;;KACpB;IAED,yCAAc,GAAd,UAAe,WAAoC;;QACjD,KAAyB,UAAW,EAAX,2BAAW,EAAX,yBAAW,EAAX,IAAW,EAAE,CAAC;YAAlC,IAAM,UAAU,oBAAA;YACnB,IAAM,MAAM,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;YACzC,KAAoB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE,CAAC;gBAAxB,IAAM,KAAK,eAAA;gBACd,IAAI,CAAC,EAAE,CAAC,MAAA,KAAK,CAAC,UAAU,mCAAI,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IACH,uBAAC;AAAD,CAAC,AA3BD,CAAsC,qBAAY,GA2BjD;AA3BY,4CAAgB"}
1
+ {"version":3,"file":"InMemoryEventBus.js","sourceRoot":"","sources":["../../src/eventBus/InMemoryEventBus.ts"],"names":[],"mappings":";;;;AAAA,iCAAsC;AAKtC;IAIE;QAHU,YAAO,GAAqB,EAAE,CAAC;QAIvC,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAY,EAAE,CAAC;IACrC,CAAC;IAEK,+BAAI,GAAV,UAAW,KAAqB;;;gBAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;;;KAC1B;IAEK,gCAAK,GAAX;;;gBACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;;;;KACnB;IAEK,kCAAO,GAAb,UAAc,MAA6B;QAA7B,uBAAA,EAAA,WAA6B;;;;;;wBACnC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC;wBAC5D,WAA6B,EAAT,uBAAS,EAAT,uBAAS,EAAT,IAAS,EAAE,CAAC;4BAArB,KAAK;4BACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;wBAC7C,CAAC;wBACD,qBAAM,IAAI,CAAC,KAAK,EAAE,EAAA;;wBAAlB,SAAkB,CAAC;;;;;KACpB;IAED,6BAAE,GAAF,UAAG,KAAa,EAAE,QAAoC;QACpD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,wCAAa,GAAb,UAAc,KAAa;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,yCAAc,GAAd,UAAe,WAA4D;;QACzE,IAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC3E,KAAyB,UAAS,EAAT,uBAAS,EAAT,uBAAS,EAAT,IAAS,EAAE,CAAC;YAAhC,IAAM,UAAU,kBAAA;YACnB,IAAM,MAAM,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;YACzC,KAAoB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE,CAAC;gBAAxB,IAAM,KAAK,eAAA;gBACd,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAA,KAAK,CAAC,UAAU,mCAAI,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IACH,uBAAC;AAAD,CAAC,AAzCD,IAyCC;AAzCY,4CAAgB"}
@@ -0,0 +1 @@
1
+ export declare function createSnapshot<T>(obj: T): T;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSnapshot = void 0;
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ function createSnapshot(obj) {
6
+ if (!obj) {
7
+ return obj;
8
+ }
9
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
10
+ // @ts-ignore
11
+ if (typeof obj.toSnapshot === 'function') {
12
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
13
+ // @ts-ignore
14
+ return obj.toSnapshot();
15
+ }
16
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
17
+ // @ts-ignore
18
+ if (typeof obj.toJSON === 'function') {
19
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
20
+ // @ts-ignore
21
+ return obj.toJSON();
22
+ }
23
+ var copy = {};
24
+ for (var key in obj) {
25
+ if (!Object.prototype.hasOwnProperty.call(obj, key)) {
26
+ continue;
27
+ }
28
+ if (typeof obj[key] !== 'object') {
29
+ copy[key] = obj[key];
30
+ continue;
31
+ }
32
+ copy[key] = createSnapshot(obj[key]);
33
+ }
34
+ return copy;
35
+ }
36
+ exports.createSnapshot = createSnapshot;
37
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;AAAA,8DAA8D;AAC9D,SAAgB,cAAc,CAAI,GAAM;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,GAAG,CAAC;IACb,CAAC;IACD,6DAA6D;IAC7D,aAAa;IACb,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACzC,6DAA6D;QAC7D,aAAa;QACb,OAAO,GAAG,CAAC,UAAU,EAAO,CAAC;IAC/B,CAAC;IACD,6DAA6D;IAC7D,aAAa;IACb,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACrC,6DAA6D;QAC7D,aAAa;QACb,OAAO,GAAG,CAAC,MAAM,EAAO,CAAC;IAC3B,CAAC;IACD,IAAM,IAAI,GAAK,EAAO,CAAC;IACvB,KAAK,IAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACpD,SAAS;QACX,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AA9BD,wCA8BC"}
@@ -0,0 +1 @@
1
+ export {};