@pocket-architect/core 0.1.26 → 0.1.29

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/build/Entity.d.ts CHANGED
@@ -1,17 +1,9 @@
1
1
  import { EntityId } from './EntityId';
2
- import { DiffFormatterOptions, DiffViewModel } from "./helpers/diff";
3
2
  export declare abstract class Entity<T, E, H extends EntityId<E>> {
4
3
  protected readonly _id: H;
5
4
  protected props: T;
6
5
  protected _snapshot: string;
7
6
  snapshot(): T;
8
- /**
9
- * Повертає diff у вигляді масиву обʼєктів (DiffViewModel),
10
- * АЛЕ лише якщо Entity перевизначив toDiff().
11
- *
12
- * За замовчуванням toDiff() = null → snapshotDiff() = null.
13
- */
14
- snapshotDiff(): DiffViewModel[] | null;
15
7
  isDirty(): boolean;
16
8
  protected constructor(props: T, id?: H | E);
17
9
  equals(object?: Entity<T, E, H>): boolean;
@@ -19,5 +11,4 @@ export declare abstract class Entity<T, E, H extends EntityId<E>> {
19
11
  toPrimitive(): T;
20
12
  toJSON(): any;
21
13
  toSnapshot(): any;
22
- toDiff(): DiffFormatterOptions | null;
23
14
  }
package/build/Entity.js CHANGED
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Entity = void 0;
4
4
  var EntityId_1 = require("./EntityId");
5
5
  var helpers_1 = require("./helpers");
6
- var diff_1 = require("./helpers/diff");
7
6
  var isEntity = function (v) {
8
7
  return v instanceof Entity;
9
8
  };
@@ -25,25 +24,6 @@ var Entity = /** @class */ (function () {
25
24
  Object.freeze(copy);
26
25
  return copy;
27
26
  };
28
- /**
29
- * Повертає diff у вигляді масиву обʼєктів (DiffViewModel),
30
- * АЛЕ лише якщо Entity перевизначив toDiff().
31
- *
32
- * За замовчуванням toDiff() = null → snapshotDiff() = null.
33
- */
34
- Entity.prototype.snapshotDiff = function () {
35
- if (!this._snapshot)
36
- return null;
37
- var diffOptions = this.toDiff();
38
- if (!diffOptions)
39
- return null;
40
- var beforeObj = JSON.parse(this._snapshot);
41
- var afterObj = (0, helpers_1.createSnapshot)(this.props);
42
- var diffs = (0, diff_1.diffObjects)(beforeObj, afterObj);
43
- if (diffs.length === 0)
44
- return [];
45
- return (0, diff_1.buildDiffViewModel)(diffs, diffOptions);
46
- };
47
27
  Entity.prototype.isDirty = function () {
48
28
  if (!this._snapshot) {
49
29
  return false;
@@ -80,9 +60,6 @@ var Entity = /** @class */ (function () {
80
60
  Entity.prototype.toSnapshot = function () {
81
61
  return this.toPrimitive();
82
62
  };
83
- Entity.prototype.toDiff = function () {
84
- return null;
85
- };
86
63
  return Entity;
87
64
  }());
88
65
  exports.Entity = Entity;
@@ -1 +1 @@
1
- {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AACtC,qCAAyC;AAEzC,IAAM,QAAQ,GAAG,UAA8B,CAAkB;IAC/D,OAAO,CAAC,YAAY,MAAM,CAAA;AAC5B,CAAC,CAAA;AAED;IAsBE,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;IAxBD,yBAAQ,GAAR;QACE,yDAAyD;QACzD,IAAM,OAAO,GAAG,IAAA,wBAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAEzC,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,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,IAAA,wBAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,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,8DAA8D;IAC9D,uBAAM,GAAN;QACE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,8DAA8D;IAC9D,2BAAU,GAAV;QACE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IACH,aAAC;AAAD,CAAC,AAhED,IAgEC;AAhEqB,wBAAM"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var tslib_1 = require("tslib");
4
4
  var Entity_1 = require("./Entity");
5
5
  var EntityId_1 = require("./EntityId");
6
+ var diff_1 = require("./helpers/diff");
6
7
  var TestEntity = /** @class */ (function (_super) {
7
8
  tslib_1.__extends(TestEntity, _super);
8
9
  function TestEntity() {
@@ -28,29 +29,6 @@ var TestEntity = /** @class */ (function (_super) {
28
29
  TestEntity.prototype.setFirstAmount = function (amount) {
29
30
  this.props.parts[0].amount = amount;
30
31
  };
31
- TestEntity.prototype.toDiff = function () {
32
- return {
33
- resolveLabel: function (_a) {
34
- var key = _a.key, index = _a.index, path = _a.path;
35
- if (key === 'createdAt')
36
- return null; // ignore
37
- if (key === 'amount' && index !== null)
38
- return "\u0426\u0456\u043D\u0430 (\u043F\u043E\u0437\u0438\u0446\u0456\u044F ".concat(index + 1, ")");
39
- if (path === 'name')
40
- return 'Імʼя';
41
- return undefined;
42
- },
43
- formatValue: function (value, _a) {
44
- var key = _a.key;
45
- if (value instanceof EntityId_1.EntityId) {
46
- return value.toHash();
47
- }
48
- if (key === 'amount' && typeof value === 'number')
49
- return "".concat(value.toFixed(2), " \u0433\u0440\u043D");
50
- return String(value);
51
- },
52
- };
53
- };
54
32
  return TestEntity;
55
33
  }(Entity_1.Entity));
56
34
  var TestEntity2 = /** @class */ (function (_super) {
@@ -107,7 +85,7 @@ describe('Entity', function () {
107
85
  });
108
86
  }); });
109
87
  test('snapshot', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
110
- var snapshot;
88
+ var snapshot, beforeSnapshot, formatter;
111
89
  return tslib_1.__generator(this, function (_a) {
112
90
  snapshot = entity.snapshot();
113
91
  expect(snapshot).toEqual({
@@ -130,12 +108,22 @@ describe('Entity', function () {
130
108
  expect(function () {
131
109
  snapshot.name = 'changed';
132
110
  }).toThrow();
111
+ beforeSnapshot = entity.snapshot();
112
+ formatter = function (value, _a) {
113
+ var key = _a.key;
114
+ if (value instanceof EntityId_1.EntityId) {
115
+ return value.toHash();
116
+ }
117
+ if (key === 'amount' && typeof value === 'number')
118
+ return "".concat(value.toFixed(2), " \u0433\u0440\u043D");
119
+ return String(value);
120
+ };
133
121
  expect(entity.isDirty()).toEqual(false);
134
- expect(entity.snapshotDiff()).toEqual([]);
122
+ expect((0, diff_1.getDiff)(beforeSnapshot, entity.snapshot(), formatter)).toEqual(null);
135
123
  entity.name = 'test changed';
136
124
  entity.setFirstAmount(200);
137
125
  expect(entity.isDirty()).toEqual(true);
138
- expect(entity.snapshotDiff()).toEqual([
126
+ expect((0, diff_1.getDiff)(beforeSnapshot, entity.snapshot(), formatter)).toEqual([
139
127
  {
140
128
  "after": "test changed",
141
129
  "afterRaw": "test changed",
@@ -143,7 +131,6 @@ describe('Entity', function () {
143
131
  "beforeRaw": "test",
144
132
  "index": null,
145
133
  "kind": "changed",
146
- "label": "Імʼя",
147
134
  "path": "name"
148
135
  },
149
136
  {
@@ -153,7 +140,6 @@ describe('Entity', function () {
153
140
  "beforeRaw": 1000,
154
141
  "index": 0,
155
142
  "kind": "changed",
156
- "label": "Ціна (позиція 1)",
157
143
  "path": "parts[0].amount"
158
144
  }
159
145
  ]);
@@ -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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"}
@@ -88,17 +88,6 @@ describe('EventBus', function () {
88
88
  enumerable: false,
89
89
  configurable: true
90
90
  });
91
- User.prototype.toDiff = function () {
92
- return {
93
- resolveLabel: function (_a) {
94
- var key = _a.key;
95
- return key;
96
- },
97
- formatValue: function (value) {
98
- return value === null || value === void 0 ? void 0 : value.toString();
99
- },
100
- };
101
- };
102
91
  return User;
103
92
  }(Entity_1.Entity));
104
93
  UserCreatedEvent = /** @class */ (function (_super) {
@@ -130,16 +119,7 @@ describe('EventBus', function () {
130
119
  return tslib_1.__awaiter(this, void 0, void 0, function () {
131
120
  return tslib_1.__generator(this, function (_a) {
132
121
  expect(domainEvent.diff).toEqual([
133
- {
134
- kind: 'changed',
135
- label: 'username',
136
- path: 'username',
137
- index: null,
138
- beforeRaw: 'john_doe',
139
- afterRaw: 'john_doe_updated',
140
- before: 'john_doe',
141
- after: 'john_doe_updated'
142
- }
122
+ { test: 1 }
143
123
  ]);
144
124
  return [2 /*return*/];
145
125
  });
@@ -159,7 +139,7 @@ describe('EventBus', function () {
159
139
  expect(user.isDirty()).toBeTruthy();
160
140
  // Перевіряємо, чи є зміни
161
141
  if (user.isDirty()) {
162
- diff = user.snapshotDiff();
142
+ diff = [{ test: 1 }];
163
143
  if (diff) {
164
144
  event = new UserCreatedEvent({ diff: diff });
165
145
  // записуємо подію в чергу (не publish). Бо якщо в циклі може бути багато подій і їх треба назбирати, а потім виконати, тому збираємо через push
@@ -1 +1 @@
1
- {"version":3,"file":"EventBus.spec.js","sourceRoot":"","sources":["../src/EventBus.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EventBus.spec.js","sourceRoot":"","sources":["../src/EventBus.spec.ts"],"names":[],"mappings":"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"}
@@ -20,18 +20,9 @@ export interface LabelContext {
20
20
  segments: PathSegment[];
21
21
  entry: DiffEntry;
22
22
  }
23
- export interface DiffFormatterOptions {
24
- /**
25
- * - string → label (людська назва поля)
26
- * - null → ignore
27
- * - undefined → fallback на path
28
- */
29
- resolveLabel?: (ctx: LabelContext) => string | null | undefined;
30
- formatValue?: (value: unknown, ctx: LabelContext) => string;
31
- }
23
+ export type DiffFormatter = (value: unknown, ctx: LabelContext) => string;
32
24
  export interface DiffViewModel {
33
25
  kind: DiffKind;
34
- label: string;
35
26
  path: string;
36
27
  index: number | null;
37
28
  beforeRaw?: unknown;
@@ -40,4 +31,8 @@ export interface DiffViewModel {
40
31
  after?: string;
41
32
  }
42
33
  export declare function diffObjects(before: unknown, after: unknown): DiffEntry[];
43
- export declare function buildDiffViewModel(diffs: DiffEntry[], options: DiffFormatterOptions): DiffViewModel[];
34
+ export declare function buildDiffViewModel(diffs: DiffEntry[], formatValue?: DiffFormatter): DiffViewModel[];
35
+ /**
36
+ * Повертає diff у вигляді масиву обʼєктів (DiffViewModel),
37
+ */
38
+ export declare function getDiff(beforeObj: any, afterObj: any, formatter?: DiffFormatter): DiffViewModel[] | null;
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildDiffViewModel = exports.diffObjects = void 0;
3
+ exports.getDiff = exports.buildDiffViewModel = exports.diffObjects = void 0;
4
4
  var tslib_1 = require("tslib");
5
+ var EntityId_1 = require("../EntityId");
5
6
  function diffObjects(before, after) {
6
7
  var diffs = [];
7
8
  walk(before, after, [], diffs);
@@ -103,30 +104,21 @@ function buildLabelContext(entry) {
103
104
  entry: entry,
104
105
  };
105
106
  }
107
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
108
  function defaultStringify(value) {
107
- if (typeof value === 'string')
108
- return "\"".concat(value, "\"");
109
- if (typeof value === 'boolean')
110
- return value ? 'true' : 'false';
111
- if (value === null)
112
- return 'null';
113
- if (typeof value === 'object')
114
- return JSON.stringify(value);
115
- return String(value);
109
+ if (value instanceof EntityId_1.EntityId)
110
+ return value.toJSON();
111
+ return value;
116
112
  }
117
- function buildDiffViewModel(diffs, options) {
118
- var resolveLabel = options.resolveLabel, _a = options.formatValue, formatValue = _a === void 0 ? defaultStringify : _a;
113
+ function buildDiffViewModel(diffs, formatValue) {
114
+ var formatter = formatValue || defaultStringify;
119
115
  var seen = new Set();
120
116
  var result = [];
121
117
  for (var _i = 0, diffs_1 = diffs; _i < diffs_1.length; _i++) {
122
118
  var entry = diffs_1[_i];
123
119
  var ctx = buildLabelContext(entry);
124
- var resolvedLabel = resolveLabel === null || resolveLabel === void 0 ? void 0 : resolveLabel(ctx);
125
- if (resolvedLabel === null)
126
- continue;
127
- var label = resolvedLabel !== null && resolvedLabel !== void 0 ? resolvedLabel : entry.path;
128
- var beforeFormatted = entry.before !== undefined ? formatValue(entry.before, ctx) : undefined;
129
- var afterFormatted = entry.after !== undefined ? formatValue(entry.after, ctx) : undefined;
120
+ var beforeFormatted = entry.before !== undefined ? formatter(entry.before, ctx) : undefined;
121
+ var afterFormatted = entry.after !== undefined ? formatter(entry.after, ctx) : undefined;
130
122
  // якщо форматовано однаково — не зміна
131
123
  if (entry.kind === 'changed' && beforeFormatted === afterFormatted) {
132
124
  continue;
@@ -139,7 +131,6 @@ function buildDiffViewModel(diffs, options) {
139
131
  seen.add(dedupeKey);
140
132
  result.push({
141
133
  kind: entry.kind,
142
- label: label,
143
134
  path: entry.path,
144
135
  index: ctx.index,
145
136
  beforeRaw: entry.before,
@@ -151,4 +142,15 @@ function buildDiffViewModel(diffs, options) {
151
142
  return result;
152
143
  }
153
144
  exports.buildDiffViewModel = buildDiffViewModel;
145
+ /**
146
+ * Повертає diff у вигляді масиву обʼєктів (DiffViewModel),
147
+ */
148
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
+ function getDiff(beforeObj, afterObj, formatter) {
150
+ var diffs = diffObjects(beforeObj, afterObj);
151
+ if (diffs.length === 0)
152
+ return null;
153
+ return buildDiffViewModel(diffs, formatter);
154
+ }
155
+ exports.getDiff = getDiff;
154
156
  //# sourceMappingURL=diff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/helpers/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/helpers/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var diff_1 = require("./diff");
4
+ test('getDiff', function () {
5
+ expect((0, diff_1.getDiff)({ test: '1' }, { test: '2' })).toEqual([
6
+ {
7
+ "after": "2",
8
+ "afterRaw": "2",
9
+ "before": "1",
10
+ "beforeRaw": "1",
11
+ "index": null,
12
+ "kind": "changed",
13
+ "path": "test"
14
+ }
15
+ ]);
16
+ expect((0, diff_1.getDiff)({ test: [1] }, { test: [2] })).toEqual([
17
+ {
18
+ "after": 2,
19
+ "afterRaw": 2,
20
+ "before": 1,
21
+ "beforeRaw": 1,
22
+ "index": 0,
23
+ "kind": "changed",
24
+ "path": "test[0]"
25
+ }
26
+ ]);
27
+ expect((0, diff_1.getDiff)({ test: [] }, { test: [2] })).toEqual([
28
+ {
29
+ "after": 2,
30
+ "afterRaw": 2,
31
+ "index": 0,
32
+ "kind": "changed",
33
+ "path": "test[0]"
34
+ }
35
+ ]);
36
+ expect((0, diff_1.getDiff)({ test: [1] }, { test: [] })).toEqual([
37
+ {
38
+ "before": 1,
39
+ "beforeRaw": 1,
40
+ "index": 0,
41
+ "kind": "changed",
42
+ "path": "test[0]"
43
+ }
44
+ ]);
45
+ });
46
+ //# sourceMappingURL=diff.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.spec.js","sourceRoot":"","sources":["../../src/helpers/diff.spec.ts"],"names":[],"mappings":";;AAAA,+BAA+B;AAE/B,IAAI,CAAC,SAAS,EAAE;IACd,MAAM,CAAC,IAAA,cAAO,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACpD;YACE,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,GAAG;YACb,WAAW,EAAE,GAAG;YAChB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,MAAM;SACf;KACF,CAAC,CAAC;IACH,MAAM,CAAC,IAAA,cAAO,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACpD;YACE,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;SAClB;KACF,CAAC,CAAC;IACH,MAAM,CAAC,IAAA,cAAO,EAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACnD;YACE,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;SAClB;KACF,CAAC,CAAC;IACH,MAAM,CAAC,IAAA,cAAO,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACnD;YACE,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;SAClB;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/build/index.d.ts CHANGED
@@ -10,4 +10,5 @@ import { Eventable } from './mixins/Eventable';
10
10
  import { Application } from './application/Application';
11
11
  import { ApplicationModule } from './application/ApplicationModule';
12
12
  import { bootstrap } from './bootstrap';
13
- export { Entity, EntityId, ValueObject, AggregateRoot, HashError, DomainEvent, DomainEventSubscriber, EventBus, Eventable, Application, ApplicationModule, bootstrap };
13
+ import { getDiff, DiffFormatter, DiffViewModel } from './helpers/diff';
14
+ export { Entity, EntityId, ValueObject, AggregateRoot, HashError, DomainEvent, DomainEventSubscriber, EventBus, Eventable, Application, ApplicationModule, bootstrap, DiffViewModel, DiffFormatter, getDiff };
package/build/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.bootstrap = exports.ApplicationModule = exports.Application = exports.Eventable = exports.DomainEvent = exports.HashError = exports.AggregateRoot = exports.ValueObject = exports.EntityId = exports.Entity = void 0;
3
+ exports.getDiff = exports.bootstrap = exports.ApplicationModule = exports.Application = exports.Eventable = exports.DomainEvent = exports.HashError = exports.AggregateRoot = exports.ValueObject = exports.EntityId = exports.Entity = void 0;
4
4
  var Entity_1 = require("./Entity");
5
5
  Object.defineProperty(exports, "Entity", { enumerable: true, get: function () { return Entity_1.Entity; } });
6
6
  var EntityId_1 = require("./EntityId");
@@ -21,4 +21,6 @@ var ApplicationModule_1 = require("./application/ApplicationModule");
21
21
  Object.defineProperty(exports, "ApplicationModule", { enumerable: true, get: function () { return ApplicationModule_1.ApplicationModule; } });
22
22
  var bootstrap_1 = require("./bootstrap");
23
23
  Object.defineProperty(exports, "bootstrap", { enumerable: true, get: function () { return bootstrap_1.bootstrap; } });
24
+ var diff_1 = require("./helpers/diff");
25
+ Object.defineProperty(exports, "getDiff", { enumerable: true, get: function () { return diff_1.getDiff; } });
24
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAchC,uFAdO,eAAM,OAcP;AAbR,uCAAsC;AAcpC,yFAdO,mBAAQ,OAcP;AAbV,6CAA4C;AAc1C,4FAdO,yBAAW,OAcP;AAbb,iDAAgD;AAc9C,8FAdO,6BAAa,OAcP;AAbf,+CAA8C;AAc5C,0FAdO,qBAAS,OAcP;AAbX,6CAA4C;AAc1C,4FAdO,yBAAW,OAcP;AAXb,gDAA+C;AAc7C,0FAdO,qBAAS,OAcP;AAbX,yDAAwD;AAetD,4FAfO,yBAAW,OAeP;AAdb,qEAAoE;AAelE,kGAfO,qCAAiB,OAeP;AAdnB,yCAAwC;AAgBtC,0FAhBO,qBAAS,OAgBP"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAehC,uFAfO,eAAM,OAeP;AAdR,uCAAsC;AAepC,yFAfO,mBAAQ,OAeP;AAdV,6CAA4C;AAe1C,4FAfO,yBAAW,OAeP;AAdb,iDAAgD;AAe9C,8FAfO,6BAAa,OAeP;AAdf,+CAA8C;AAe5C,0FAfO,qBAAS,OAeP;AAdX,6CAA4C;AAe1C,4FAfO,yBAAW,OAeP;AAZb,gDAA+C;AAe7C,0FAfO,qBAAS,OAeP;AAdX,yDAAwD;AAgBtD,4FAhBO,yBAAW,OAgBP;AAfb,qEAAoE;AAgBlE,kGAhBO,qCAAiB,OAgBP;AAfnB,yCAAwC;AAiBtC,0FAjBO,qBAAS,OAiBP;AAhBX,uCAAuE;AAoBrE,wFApBO,cAAO,OAoBP"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pocket-architect/core",
3
- "version": "0.1.26",
3
+ "version": "0.1.29",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -1,6 +1,6 @@
1
1
  import { Entity } from './Entity';
2
2
  import { EntityId } from './EntityId';
3
- import {DiffFormatterOptions} from "./helpers/diff";
3
+ import {getDiff} from "./helpers/diff";
4
4
 
5
5
  interface TestProps {
6
6
  name: string;
@@ -31,26 +31,6 @@ class TestEntity extends Entity<TestProps, string, EntityId<string>> {
31
31
  setFirstAmount(amount:number):void {
32
32
  this.props.parts[0].amount = amount;
33
33
  }
34
-
35
- toDiff(): DiffFormatterOptions | null {
36
- return {
37
- resolveLabel({ key, index, path }) {
38
- if (key === 'createdAt') return null; // ignore
39
-
40
- if (key === 'amount' && index !== null) return `Ціна (позиція ${index + 1})`;
41
- if (path === 'name') return 'Імʼя';
42
-
43
- return undefined;
44
- },
45
- formatValue(value, { key }) {
46
- if (value instanceof EntityId) {
47
- return value.toHash();
48
- }
49
- if (key === 'amount' && typeof value === 'number') return `${value.toFixed(2)} грн`;
50
- return String(value);
51
- },
52
- };
53
- }
54
34
  }
55
35
  class TestEntity2 extends Entity<TestProps2, string, EntityId<string>> {
56
36
  static create(props: TestProps2, id?:EntityId<string>|string): TestEntity2 {
@@ -124,13 +104,22 @@ describe('Entity', () => {
124
104
 
125
105
  expect(() => {
126
106
  snapshot.name = 'changed';
127
- }).toThrow()
107
+ }).toThrow();
108
+ const beforeSnapshot = entity.snapshot();
109
+ const formatter = (value, { key }) => {
110
+ if (value instanceof EntityId) {
111
+ return value.toHash();
112
+ }
113
+ if (key === 'amount' && typeof value === 'number') return `${value.toFixed(2)} грн`;
114
+ return String(value);
115
+ };
116
+
128
117
  expect(entity.isDirty()).toEqual(false);
129
- expect(entity.snapshotDiff()).toEqual([]);
118
+ expect(getDiff(beforeSnapshot, entity.snapshot(), formatter)).toEqual(null);
130
119
  entity.name = 'test changed';
131
120
  entity.setFirstAmount(200);
132
121
  expect(entity.isDirty()).toEqual(true);
133
- expect(entity.snapshotDiff()).toEqual([
122
+ expect(getDiff(beforeSnapshot, entity.snapshot(), formatter)).toEqual([
134
123
  {
135
124
  "after": "test changed",
136
125
  "afterRaw": "test changed",
@@ -138,7 +127,6 @@ describe('Entity', () => {
138
127
  "beforeRaw": "test",
139
128
  "index": null,
140
129
  "kind": "changed",
141
- "label": "Імʼя",
142
130
  "path": "name"
143
131
  },
144
132
  {
@@ -148,7 +136,6 @@ describe('Entity', () => {
148
136
  "beforeRaw": 1000,
149
137
  "index": 0,
150
138
  "kind": "changed",
151
- "label": "Ціна (позиція 1)",
152
139
  "path": "parts[0].amount"
153
140
  }
154
141
  ]);
package/src/Entity.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { EntityId } from './EntityId';
2
2
  import {createSnapshot} from "./helpers";
3
- import {buildDiffViewModel, DiffFormatterOptions, diffObjects, DiffViewModel} from "./helpers/diff";
4
3
 
5
4
  const isEntity = <T, E, M extends EntityId<E>>(v: Entity<T, E, M>): v is Entity<T, E, M> => {
6
5
  return v instanceof Entity
@@ -11,9 +10,8 @@ export abstract class Entity<T, E, H extends EntityId<E>> {
11
10
  protected props: T;
12
11
  protected _snapshot: string;
13
12
 
14
-
15
13
  snapshot(): T {
16
- // важливо: snapshot має бути стабільним (createSnapshot)
14
+ // важливо: snapshot має бути стабільним (createSnapshot)
17
15
  const snapObj = createSnapshot(this.props);
18
16
  this._snapshot = JSON.stringify(snapObj);
19
17
 
@@ -22,28 +20,6 @@ export abstract class Entity<T, E, H extends EntityId<E>> {
22
20
  return copy;
23
21
  }
24
22
 
25
-
26
- /**
27
- * Повертає diff у вигляді масиву обʼєктів (DiffViewModel),
28
- * АЛЕ лише якщо Entity перевизначив toDiff().
29
- *
30
- * За замовчуванням toDiff() = null → snapshotDiff() = null.
31
- */
32
- snapshotDiff(): DiffViewModel[] | null {
33
- if (!this._snapshot) return null;
34
-
35
- const diffOptions = this.toDiff();
36
- if (!diffOptions) return null;
37
-
38
- const beforeObj = JSON.parse(this._snapshot) as unknown;
39
- const afterObj = createSnapshot(this.props);
40
-
41
- const diffs = diffObjects(beforeObj, afterObj);
42
- if (diffs.length === 0) return [];
43
-
44
- return buildDiffViewModel(diffs, diffOptions);
45
- }
46
-
47
23
  isDirty(): boolean {
48
24
  if (!this._snapshot) {
49
25
  return false;
@@ -93,8 +69,4 @@ export abstract class Entity<T, E, H extends EntityId<E>> {
93
69
  toSnapshot(): any {
94
70
  return this.toPrimitive();
95
71
  }
96
-
97
- toDiff(): DiffFormatterOptions | null {
98
- return null;
99
- }
100
72
  }
@@ -3,7 +3,6 @@ import {DomainEventSubscriber} from "./DomainEventSubscriber";
3
3
  import {DomainEvent, DomainEventClass} from "./DomainEvent";
4
4
  import {EntityId} from "./EntityId";
5
5
  import {Entity} from "./Entity";
6
- import {DiffFormatterOptions} from "./helpers/diff";
7
6
 
8
7
  describe('EventBus', () => {
9
8
  class NewUserCreated extends DomainEvent<{ username: string }> {
@@ -58,17 +57,6 @@ describe('EventBus', () => {
58
57
  get username(): string {
59
58
  return this.props.username;
60
59
  }
61
-
62
- toDiff(): DiffFormatterOptions | null {
63
- return {
64
- resolveLabel({ key }) {
65
- return key;
66
- },
67
- formatValue(value) {
68
- return value?.toString();
69
- },
70
- };
71
- }
72
60
  }
73
61
 
74
62
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -89,16 +77,7 @@ describe('EventBus', () => {
89
77
  // Реалізуємо логіку обробки подій
90
78
  async on(domainEvent: UserCreatedEvent) {
91
79
  expect(domainEvent.diff).toEqual([
92
- {
93
- kind: 'changed',
94
- label: 'username',
95
- path: 'username',
96
- index: null,
97
- beforeRaw: 'john_doe',
98
- afterRaw: 'john_doe_updated',
99
- before: 'john_doe',
100
- after: 'john_doe_updated'
101
- }
80
+ { test: 1 }
102
81
  ]);
103
82
  }
104
83
  }
@@ -118,7 +97,7 @@ describe('EventBus', () => {
118
97
  expect(user.isDirty()).toBeTruthy();
119
98
  // Перевіряємо, чи є зміни
120
99
  if (user.isDirty()) {
121
- const diff = user.snapshotDiff();
100
+ const diff = [{ test: 1 }];
122
101
  if (diff) {
123
102
  event = new UserCreatedEvent({ diff });
124
103
  // записуємо подію в чергу (не publish). Бо якщо в циклі може бути багато подій і їх треба назбирати, а потім виконати, тому збираємо через push
@@ -0,0 +1,44 @@
1
+ import {getDiff} from "./diff";
2
+
3
+ test('getDiff', () => {
4
+ expect(getDiff({ test: '1' }, { test: '2' })).toEqual([
5
+ {
6
+ "after": "2",
7
+ "afterRaw": "2",
8
+ "before": "1",
9
+ "beforeRaw": "1",
10
+ "index": null,
11
+ "kind": "changed",
12
+ "path": "test"
13
+ }
14
+ ]);
15
+ expect(getDiff({ test: [1] }, { test: [2] })).toEqual([
16
+ {
17
+ "after": 2,
18
+ "afterRaw": 2,
19
+ "before": 1,
20
+ "beforeRaw": 1,
21
+ "index": 0,
22
+ "kind": "changed",
23
+ "path": "test[0]"
24
+ }
25
+ ]);
26
+ expect(getDiff({ test: [] }, { test: [2] })).toEqual([
27
+ {
28
+ "after": 2,
29
+ "afterRaw": 2,
30
+ "index": 0,
31
+ "kind": "changed",
32
+ "path": "test[0]"
33
+ }
34
+ ]);
35
+ expect(getDiff({ test: [1] }, { test: [] })).toEqual([
36
+ {
37
+ "before": 1,
38
+ "beforeRaw": 1,
39
+ "index": 0,
40
+ "kind": "changed",
41
+ "path": "test[0]"
42
+ }
43
+ ]);
44
+ });
@@ -1,3 +1,5 @@
1
+ import {EntityId} from "../EntityId";
2
+
1
3
  export type DiffKind = 'added' | 'removed' | 'changed';
2
4
 
3
5
  export type PathSegment =
@@ -20,20 +22,10 @@ export interface LabelContext {
20
22
  entry: DiffEntry;
21
23
  }
22
24
 
23
- export interface DiffFormatterOptions {
24
- /**
25
- * - string → label (людська назва поля)
26
- * - null → ignore
27
- * - undefined → fallback на path
28
- */
29
- resolveLabel?: (ctx: LabelContext) => string | null | undefined;
30
-
31
- formatValue?: (value: unknown, ctx: LabelContext) => string;
32
- }
25
+ export type DiffFormatter = (value: unknown, ctx: LabelContext) => string;
33
26
 
34
27
  export interface DiffViewModel {
35
28
  kind: DiffKind;
36
- label: string;
37
29
  path: string;
38
30
  index: number | null;
39
31
 
@@ -160,19 +152,14 @@ function buildLabelContext(entry: DiffEntry): LabelContext {
160
152
  };
161
153
  }
162
154
 
163
- function defaultStringify(value: unknown): string {
164
- if (typeof value === 'string') return `"${value}"`;
165
- if (typeof value === 'boolean') return value ? 'true' : 'false';
166
- if (value === null) return 'null';
167
- if (typeof value === 'object') return JSON.stringify(value);
168
- return String(value);
155
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
156
+ function defaultStringify(value: unknown): any {
157
+ if (value instanceof EntityId) return value.toJSON();
158
+ return value;
169
159
  }
170
160
 
171
- export function buildDiffViewModel(
172
- diffs: DiffEntry[],
173
- options: DiffFormatterOptions
174
- ): DiffViewModel[] {
175
- const { resolveLabel, formatValue = defaultStringify } = options;
161
+ export function buildDiffViewModel(diffs: DiffEntry[], formatValue?: DiffFormatter): DiffViewModel[] {
162
+ const formatter = formatValue || defaultStringify;
176
163
 
177
164
  const seen = new Set<string>();
178
165
  const result: DiffViewModel[] = [];
@@ -180,16 +167,8 @@ export function buildDiffViewModel(
180
167
  for (const entry of diffs) {
181
168
  const ctx = buildLabelContext(entry);
182
169
 
183
- const resolvedLabel = resolveLabel?.(ctx);
184
- if (resolvedLabel === null) continue;
185
-
186
- const label = resolvedLabel ?? entry.path;
187
-
188
- const beforeFormatted =
189
- entry.before !== undefined ? formatValue(entry.before, ctx) : undefined;
190
-
191
- const afterFormatted =
192
- entry.after !== undefined ? formatValue(entry.after, ctx) : undefined;
170
+ const beforeFormatted = entry.before !== undefined ? formatter(entry.before, ctx) : undefined;
171
+ const afterFormatted = entry.after !== undefined ? formatter(entry.after, ctx) : undefined;
193
172
 
194
173
  // якщо форматовано однаково — не зміна
195
174
  if (entry.kind === 'changed' && beforeFormatted === afterFormatted) {
@@ -206,7 +185,6 @@ export function buildDiffViewModel(
206
185
 
207
186
  result.push({
208
187
  kind: entry.kind,
209
- label,
210
188
  path: entry.path,
211
189
  index: ctx.index,
212
190
  beforeRaw: entry.before,
@@ -218,3 +196,14 @@ export function buildDiffViewModel(
218
196
 
219
197
  return result;
220
198
  }
199
+
200
+ /**
201
+ * Повертає diff у вигляді масиву обʼєктів (DiffViewModel),
202
+ */
203
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
204
+ export function getDiff(beforeObj: any, afterObj: any, formatter?: DiffFormatter): DiffViewModel[] | null {
205
+ const diffs = diffObjects(beforeObj, afterObj);
206
+ if (diffs.length === 0) return null;
207
+
208
+ return buildDiffViewModel(diffs, formatter);
209
+ }
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@ import { Eventable } from './mixins/Eventable';
10
10
  import { Application } from './application/Application';
11
11
  import { ApplicationModule } from './application/ApplicationModule';
12
12
  import { bootstrap } from './bootstrap';
13
+ import { getDiff, DiffFormatter, DiffViewModel } from './helpers/diff';
13
14
 
14
15
  export {
15
16
  Entity,
@@ -25,5 +26,9 @@ export {
25
26
  Application,
26
27
  ApplicationModule,
27
28
 
28
- bootstrap
29
+ bootstrap,
30
+
31
+ DiffViewModel,
32
+ DiffFormatter,
33
+ getDiff
29
34
  }