@pocket-architect/core 0.1.20 → 0.1.26
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/.eslintignore +1 -0
- package/build/Entity.d.ts +9 -1
- package/build/Entity.js +25 -12
- package/build/Entity.js.map +1 -1
- package/build/Entity.spec.js +100 -7
- package/build/Entity.spec.js.map +1 -1
- package/build/EntityId.d.ts +1 -0
- package/build/EntityId.js +3 -0
- package/build/EntityId.js.map +1 -1
- package/build/EventBus.spec.js +28 -4
- package/build/EventBus.spec.js.map +1 -1
- package/build/application/Application.d.ts +10 -0
- package/build/application/Application.js +43 -0
- package/build/application/Application.js.map +1 -0
- package/build/application/ApplicationModule.d.ts +5 -0
- package/build/application/ApplicationModule.js +10 -0
- package/build/application/ApplicationModule.js.map +1 -0
- package/build/bootstrap.d.ts +14 -0
- package/build/bootstrap.js +88 -0
- package/build/bootstrap.js.map +1 -0
- package/build/bootstrap.spec.d.ts +1 -0
- package/build/bootstrap.spec.js +144 -0
- package/build/bootstrap.spec.js.map +1 -0
- package/build/eventBus/InMemoryEventBus.d.ts +1 -1
- package/build/eventBus/InMemoryEventBus.js +3 -2
- package/build/eventBus/InMemoryEventBus.js.map +1 -1
- package/build/helpers/diff.d.ts +43 -0
- package/build/helpers/diff.js +154 -0
- package/build/helpers/diff.js.map +1 -0
- package/build/helpers.js +23 -14
- package/build/helpers.js.map +1 -1
- package/build/helpers.spec.js +2 -2
- package/build/helpers.spec.js.map +1 -1
- package/build/index.d.ts +5 -1
- package/build/index.js +9 -1
- package/build/index.js.map +1 -1
- package/package.json +2 -1
- package/src/Entity.spec.ts +103 -7
- package/src/Entity.ts +32 -14
- package/src/EntityId.ts +4 -0
- package/src/EventBus.spec.ts +30 -5
- package/src/application/Application.ts +24 -0
- package/src/application/ApplicationModule.ts +7 -0
- package/src/bootstrap.spec.ts +100 -0
- package/src/bootstrap.ts +87 -0
- package/src/eventBus/InMemoryEventBus.ts +3 -2
- package/src/helpers/diff.ts +220 -0
- package/src/helpers.spec.ts +5 -2
- package/src/helpers.ts +32 -18
- package/src/index.ts +11 -1
- package/tests/testapp/domain/test/service/TestService.d.ts +4 -0
- package/tests/testapp/domain/test/service/TestService.js +13 -0
- package/tests/testapp/domain/test/service/TestService.js.map +1 -0
- package/tests/testapp/domain/test/service/TestService.ts +8 -0
- package/tests/testapp/infra/test/providers/TestProvider.d.ts +4 -0
- package/tests/testapp/infra/test/providers/TestProvider.js +13 -0
- package/tests/testapp/infra/test/providers/TestProvider.js.map +1 -0
- package/tests/testapp/infra/test/providers/TestProvider.ts +8 -0
- package/tsconfig.json +1 -1
|
@@ -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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"}
|
|
@@ -12,5 +12,5 @@ export declare class InMemoryEventBus implements EventBus {
|
|
|
12
12
|
publish(events?: AnyDomainEvent[]): Promise<void>;
|
|
13
13
|
on(event: string, listener: (...args: never[]) => void): void;
|
|
14
14
|
listenerCount(event: string): number;
|
|
15
|
-
addSubscribers(subscribers: DomainEventSubscriber[]): void;
|
|
15
|
+
addSubscribers(subscribers: DomainEventSubscriber[] | DomainEventSubscriber): void;
|
|
16
16
|
}
|
|
@@ -52,8 +52,9 @@ var InMemoryEventBus = /** @class */ (function () {
|
|
|
52
52
|
};
|
|
53
53
|
InMemoryEventBus.prototype.addSubscribers = function (subscribers) {
|
|
54
54
|
var _a;
|
|
55
|
-
|
|
56
|
-
|
|
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];
|
|
57
58
|
var events = subscriber.subscribedTo();
|
|
58
59
|
for (var _b = 0, events_2 = events; _b < events_2.length; _b++) {
|
|
59
60
|
var event = events_2[_b];
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,43 @@
|
|
|
1
|
+
export type DiffKind = 'added' | 'removed' | 'changed';
|
|
2
|
+
export type PathSegment = {
|
|
3
|
+
type: 'key';
|
|
4
|
+
key: string;
|
|
5
|
+
} | {
|
|
6
|
+
type: 'index';
|
|
7
|
+
index: number;
|
|
8
|
+
};
|
|
9
|
+
export interface DiffEntry {
|
|
10
|
+
path: string;
|
|
11
|
+
segments: PathSegment[];
|
|
12
|
+
kind: DiffKind;
|
|
13
|
+
before?: unknown;
|
|
14
|
+
after?: unknown;
|
|
15
|
+
}
|
|
16
|
+
export interface LabelContext {
|
|
17
|
+
key: string | null;
|
|
18
|
+
index: number | null;
|
|
19
|
+
path: string;
|
|
20
|
+
segments: PathSegment[];
|
|
21
|
+
entry: DiffEntry;
|
|
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
|
+
}
|
|
32
|
+
export interface DiffViewModel {
|
|
33
|
+
kind: DiffKind;
|
|
34
|
+
label: string;
|
|
35
|
+
path: string;
|
|
36
|
+
index: number | null;
|
|
37
|
+
beforeRaw?: unknown;
|
|
38
|
+
afterRaw?: unknown;
|
|
39
|
+
before?: string;
|
|
40
|
+
after?: string;
|
|
41
|
+
}
|
|
42
|
+
export declare function diffObjects(before: unknown, after: unknown): DiffEntry[];
|
|
43
|
+
export declare function buildDiffViewModel(diffs: DiffEntry[], options: DiffFormatterOptions): DiffViewModel[];
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildDiffViewModel = exports.diffObjects = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
function diffObjects(before, after) {
|
|
6
|
+
var diffs = [];
|
|
7
|
+
walk(before, after, [], diffs);
|
|
8
|
+
return diffs;
|
|
9
|
+
}
|
|
10
|
+
exports.diffObjects = diffObjects;
|
|
11
|
+
function walk(before, after, segments, out) {
|
|
12
|
+
if (Object.is(before, after))
|
|
13
|
+
return;
|
|
14
|
+
var isPlainObject = function (v) {
|
|
15
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
16
|
+
};
|
|
17
|
+
// arrays
|
|
18
|
+
if (Array.isArray(before) || Array.isArray(after)) {
|
|
19
|
+
var bArr = Array.isArray(before) ? before : [];
|
|
20
|
+
var aArr = Array.isArray(after) ? after : [];
|
|
21
|
+
var max = Math.max(bArr.length, aArr.length);
|
|
22
|
+
for (var i = 0; i < max; i++) {
|
|
23
|
+
walk(bArr[i], aArr[i], tslib_1.__spreadArray(tslib_1.__spreadArray([], segments, true), [{ type: 'index', index: i }], false), out);
|
|
24
|
+
}
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// primitives or mismatched types
|
|
28
|
+
if (!isPlainObject(before) || !isPlainObject(after)) {
|
|
29
|
+
out.push({
|
|
30
|
+
path: segmentsToPath(segments),
|
|
31
|
+
segments: segments,
|
|
32
|
+
kind: 'changed',
|
|
33
|
+
before: before,
|
|
34
|
+
after: after,
|
|
35
|
+
});
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// objects
|
|
39
|
+
var bObj = before;
|
|
40
|
+
var aObj = after;
|
|
41
|
+
var keys = tslib_1.__spreadArray(tslib_1.__spreadArray([], Object.keys(bObj), true), Object.keys(aObj), true);
|
|
42
|
+
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
43
|
+
var key = keys_1[_i];
|
|
44
|
+
var b = bObj[key];
|
|
45
|
+
var a = aObj[key];
|
|
46
|
+
var nextSeg = tslib_1.__spreadArray(tslib_1.__spreadArray([], segments, true), [{ type: 'key', key: key }], false);
|
|
47
|
+
if (b === undefined && a !== undefined) {
|
|
48
|
+
out.push({
|
|
49
|
+
path: segmentsToPath(nextSeg),
|
|
50
|
+
segments: nextSeg,
|
|
51
|
+
kind: 'added',
|
|
52
|
+
after: a,
|
|
53
|
+
});
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (b !== undefined && a === undefined) {
|
|
57
|
+
out.push({
|
|
58
|
+
path: segmentsToPath(nextSeg),
|
|
59
|
+
segments: nextSeg,
|
|
60
|
+
kind: 'removed',
|
|
61
|
+
before: b,
|
|
62
|
+
});
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
walk(b, a, nextSeg, out);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function segmentsToPath(segments) {
|
|
69
|
+
var path = '';
|
|
70
|
+
for (var _i = 0, segments_1 = segments; _i < segments_1.length; _i++) {
|
|
71
|
+
var s = segments_1[_i];
|
|
72
|
+
if (s.type === 'key') {
|
|
73
|
+
path += path ? ".".concat(s.key) : s.key;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
path += "[".concat(s.index, "]");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return path || '';
|
|
80
|
+
}
|
|
81
|
+
function buildLabelContext(entry) {
|
|
82
|
+
var key = null;
|
|
83
|
+
var index = null;
|
|
84
|
+
for (var i = entry.segments.length - 1; i >= 0; i--) {
|
|
85
|
+
var s = entry.segments[i];
|
|
86
|
+
if (s.type === 'key') {
|
|
87
|
+
key = s.key;
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
for (var i = entry.segments.length - 1; i >= 0; i--) {
|
|
92
|
+
var s = entry.segments[i];
|
|
93
|
+
if (s.type === 'index') {
|
|
94
|
+
index = s.index;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
key: key,
|
|
100
|
+
index: index,
|
|
101
|
+
path: entry.path,
|
|
102
|
+
segments: entry.segments,
|
|
103
|
+
entry: entry,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
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);
|
|
116
|
+
}
|
|
117
|
+
function buildDiffViewModel(diffs, options) {
|
|
118
|
+
var resolveLabel = options.resolveLabel, _a = options.formatValue, formatValue = _a === void 0 ? defaultStringify : _a;
|
|
119
|
+
var seen = new Set();
|
|
120
|
+
var result = [];
|
|
121
|
+
for (var _i = 0, diffs_1 = diffs; _i < diffs_1.length; _i++) {
|
|
122
|
+
var entry = diffs_1[_i];
|
|
123
|
+
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;
|
|
130
|
+
// якщо форматовано однаково — не зміна
|
|
131
|
+
if (entry.kind === 'changed' && beforeFormatted === afterFormatted) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
// 👇 КЛЮЧ ДЕДУПЛІКАЦІЇ
|
|
135
|
+
var dedupeKey = "".concat(entry.kind, "|").concat(entry.path);
|
|
136
|
+
if (seen.has(dedupeKey)) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
seen.add(dedupeKey);
|
|
140
|
+
result.push({
|
|
141
|
+
kind: entry.kind,
|
|
142
|
+
label: label,
|
|
143
|
+
path: entry.path,
|
|
144
|
+
index: ctx.index,
|
|
145
|
+
beforeRaw: entry.before,
|
|
146
|
+
afterRaw: entry.after,
|
|
147
|
+
before: beforeFormatted,
|
|
148
|
+
after: afterFormatted,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
exports.buildDiffViewModel = buildDiffViewModel;
|
|
154
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/helpers/diff.ts"],"names":[],"mappings":"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"}
|
package/build/helpers.js
CHANGED
|
@@ -3,26 +3,35 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createSnapshot = void 0;
|
|
4
4
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
5
|
function createSnapshot(obj) {
|
|
6
|
-
if (
|
|
6
|
+
if (obj === null || obj === undefined) {
|
|
7
7
|
return obj;
|
|
8
8
|
}
|
|
9
|
-
//
|
|
10
|
-
// @
|
|
9
|
+
// toSnapshot має найвищий пріоритет
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
11
|
if (typeof obj.toSnapshot === 'function') {
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/
|
|
13
|
-
// @ts-ignore
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
13
|
return obj.toSnapshot();
|
|
15
14
|
}
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
+
if (typeof obj.toJSON === 'function') {
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
|
+
return obj.toJSON();
|
|
19
|
+
}
|
|
20
|
+
// ✅ МАСИВИ
|
|
21
|
+
if (Array.isArray(obj)) {
|
|
22
|
+
return obj.map(function (item) { return createSnapshot(item); });
|
|
23
|
+
}
|
|
24
|
+
// primitives
|
|
25
|
+
if (typeof obj !== 'object') {
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
// plain object
|
|
16
29
|
var copy = {};
|
|
17
|
-
for (var
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
copy[key] = obj[key];
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
copy[key] = createSnapshot(obj[key]);
|
|
30
|
+
for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {
|
|
31
|
+
var key = _a[_i];
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
+
var value = obj[key];
|
|
34
|
+
copy[key] = createSnapshot(value);
|
|
26
35
|
}
|
|
27
36
|
return copy;
|
|
28
37
|
}
|
package/build/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;AAAA,8DAA8D;AAC9D,SAAgB,cAAc,CAAI,GAAM;IACtC,IAAI,
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;AAAA,8DAA8D;AAC9D,SAAgB,cAAc,CAAI,GAAM;IACtC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,oCAAoC;IACpC,8DAA8D;IAC9D,IAAI,OAAQ,GAAW,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAClD,8DAA8D;QAC9D,OAAQ,GAAW,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC;IACD,8DAA8D;IAC9D,IAAI,OAAQ,GAAW,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC9C,8DAA8D;QAC9D,OAAQ,GAAW,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,WAAW;IACX,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,cAAc,CAAC,IAAI,CAAC,EAApB,CAAoB,CAAiB,CAAC;IAC/D,CAAC;IAED,aAAa;IACb,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,eAAe;IACf,IAAM,IAAI,GAAG,EAA6B,CAAC;IAE3C,KAAkB,UAA0B,EAA1B,KAAA,MAAM,CAAC,IAAI,CAAC,GAAa,CAAC,EAA1B,cAA0B,EAA1B,IAA0B,EAAE,CAAC;QAA1C,IAAM,GAAG,SAAA;QACZ,8DAA8D;QAC9D,IAAM,KAAK,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,IAAS,CAAC;AACnB,CAAC;AArCD,wCAqCC"}
|
package/build/helpers.spec.js
CHANGED
|
@@ -48,12 +48,12 @@ describe('helpers', function () {
|
|
|
48
48
|
id: new EntityId_1.EntityId('1'),
|
|
49
49
|
};
|
|
50
50
|
snapshot = (0, helpers_1.createSnapshot)(original);
|
|
51
|
-
expect(snapshot).toEqual(original);
|
|
51
|
+
expect(snapshot).toEqual(tslib_1.__assign(tslib_1.__assign({}, original), { id: '3D4WX' }));
|
|
52
52
|
expect(snapshot).not.toBe(original);
|
|
53
53
|
expect(snapshot.c).not.toBe(original.c);
|
|
54
54
|
expect(snapshot.c.f).not.toBe(original.c.f);
|
|
55
55
|
expect(snapshot.id).not.toBe(original.id);
|
|
56
|
-
expect(snapshot.id).toEqual(
|
|
56
|
+
expect(snapshot.id).toEqual('3D4WX');
|
|
57
57
|
item = TestEntity.create({
|
|
58
58
|
name: 'test',
|
|
59
59
|
testId: new EntityId_1.EntityId('2')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AACzC,uCAAoC;AACpC,mCAAgC;AAMhC;IAAyB,sCAA2C;IAApE;;IAmBA,CAAC;IAlBQ,iBAAM,GAAb,UAAc,KAAgB,EAAE,EAA2B;QACzD,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,sBAAI,4BAAI;aAAR,UAAS,IAAY;YACnB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,CAAC;;;OAAA;IAED,sBAAI,8BAAM;aAAV,UAAW,GAAqB;YAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAC1B,CAAC;;;OAAA;IAED,+BAAU,GAAV;QACE,OAAO,sCACF,IAAI,CAAC,KAAK,KACb,MAAM,EAAE,SAAS,GACT,CAAC;IACb,CAAC;IACH,iBAAC;AAAD,CAAC,AAnBD,CAAyB,eAAM,GAmB9B;AAED,QAAQ,CAAC,SAAS,EAAE;IAClB,IAAI,CAAC,gBAAgB,EAAE;;;YACf,QAAQ,GAAG;gBACf,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,MAAM;gBACT,CAAC,EAAE;oBACD,CAAC,EAAE,CAAC;oBACJ,CAAC,EAAE,QAAQ;oBACX,CAAC,EAAE;wBACD,CAAC,EAAE,CAAC;qBACL;iBACF;gBACD,EAAE,EAAE,IAAI,mBAAQ,CAAS,GAAG,CAAC;aAC9B,CAAC;YACI,QAAQ,GAAG,IAAA,wBAAc,EAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AACzC,uCAAoC;AACpC,mCAAgC;AAMhC;IAAyB,sCAA2C;IAApE;;IAmBA,CAAC;IAlBQ,iBAAM,GAAb,UAAc,KAAgB,EAAE,EAA2B;QACzD,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,sBAAI,4BAAI;aAAR,UAAS,IAAY;YACnB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,CAAC;;;OAAA;IAED,sBAAI,8BAAM;aAAV,UAAW,GAAqB;YAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAC1B,CAAC;;;OAAA;IAED,+BAAU,GAAV;QACE,OAAO,sCACF,IAAI,CAAC,KAAK,KACb,MAAM,EAAE,SAAS,GACT,CAAC;IACb,CAAC;IACH,iBAAC;AAAD,CAAC,AAnBD,CAAyB,eAAM,GAmB9B;AAED,QAAQ,CAAC,SAAS,EAAE;IAClB,IAAI,CAAC,gBAAgB,EAAE;;;YACf,QAAQ,GAAG;gBACf,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,MAAM;gBACT,CAAC,EAAE;oBACD,CAAC,EAAE,CAAC;oBACJ,CAAC,EAAE,QAAQ;oBACX,CAAC,EAAE;wBACD,CAAC,EAAE,CAAC;qBACL;iBACF;gBACD,EAAE,EAAE,IAAI,mBAAQ,CAAS,GAAG,CAAC;aAC9B,CAAC;YACI,QAAQ,GAAG,IAAA,wBAAc,EAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,uCACnB,QAAQ,KACX,EAAE,EAAE,OAAO,IACX,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE/B,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;gBAC7B,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,IAAI,mBAAQ,CAAC,GAAG,CAAC;aAC1B,EAAE,GAAG,CAAC,CAAC;YACF,YAAY,GAAG,IAAA,wBAAc,EAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;gBAC3B,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;;;SACJ,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/build/index.d.ts
CHANGED
|
@@ -6,4 +6,8 @@ import { HashError } from './error/HashError';
|
|
|
6
6
|
import { DomainEvent } from './DomainEvent';
|
|
7
7
|
import { DomainEventSubscriber } from './DomainEventSubscriber';
|
|
8
8
|
import { EventBus } from './EventBus';
|
|
9
|
-
|
|
9
|
+
import { Eventable } from './mixins/Eventable';
|
|
10
|
+
import { Application } from './application/Application';
|
|
11
|
+
import { ApplicationModule } from './application/ApplicationModule';
|
|
12
|
+
import { bootstrap } from './bootstrap';
|
|
13
|
+
export { Entity, EntityId, ValueObject, AggregateRoot, HashError, DomainEvent, DomainEventSubscriber, EventBus, Eventable, Application, ApplicationModule, bootstrap };
|
package/build/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DomainEvent = exports.HashError = exports.AggregateRoot = exports.ValueObject = exports.EntityId = exports.Entity = void 0;
|
|
3
|
+
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");
|
|
@@ -13,4 +13,12 @@ var HashError_1 = require("./error/HashError");
|
|
|
13
13
|
Object.defineProperty(exports, "HashError", { enumerable: true, get: function () { return HashError_1.HashError; } });
|
|
14
14
|
var DomainEvent_1 = require("./DomainEvent");
|
|
15
15
|
Object.defineProperty(exports, "DomainEvent", { enumerable: true, get: function () { return DomainEvent_1.DomainEvent; } });
|
|
16
|
+
var Eventable_1 = require("./mixins/Eventable");
|
|
17
|
+
Object.defineProperty(exports, "Eventable", { enumerable: true, get: function () { return Eventable_1.Eventable; } });
|
|
18
|
+
var Application_1 = require("./application/Application");
|
|
19
|
+
Object.defineProperty(exports, "Application", { enumerable: true, get: function () { return Application_1.Application; } });
|
|
20
|
+
var ApplicationModule_1 = require("./application/ApplicationModule");
|
|
21
|
+
Object.defineProperty(exports, "ApplicationModule", { enumerable: true, get: function () { return ApplicationModule_1.ApplicationModule; } });
|
|
22
|
+
var bootstrap_1 = require("./bootstrap");
|
|
23
|
+
Object.defineProperty(exports, "bootstrap", { enumerable: true, get: function () { return bootstrap_1.bootstrap; } });
|
|
16
24
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pocket-architect/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.26",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@paralleldrive/cuid2": "^2.2.2",
|
|
20
|
+
"awilix": "^10.0.2",
|
|
20
21
|
"hashids": "^2.3.0",
|
|
21
22
|
"shallow-equal-object": "^1.1.1",
|
|
22
23
|
"uuid-by-string": "^4.0.0"
|