@foxford/den 1.0.2 → 2.0.0
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/adapter.cjs +3 -2
- package/adapter.d.cts +1 -1
- package/adapter.d.ts +1 -1
- package/adapter.js +2 -1
- package/{chunk-4FPCRHSM.cjs → chunk-5DJZZML5.cjs} +15 -35
- package/chunk-A6ZPAM6Z.cjs +26 -0
- package/chunk-C7BM4DGX.cjs +18 -0
- package/chunk-HJO26HIQ.js +41 -0
- package/chunk-LJE7K7VD.cjs +35 -0
- package/chunk-TCYGDT2A.js +35 -0
- package/chunk-TPBI6TOU.js +26 -0
- package/{chunk-E7HG2NXO.js → chunk-WBHHHICS.js} +0 -22
- package/{chunk-S5KTWI6P.js → chunk-WRQC6BVJ.js} +9 -29
- package/chunk-XHYR3SGG.cjs +41 -0
- package/define-repository-DZg34Tb3.d.ts +83 -0
- package/define-repository-OpMj-Q9O.d.cts +83 -0
- package/define-slot-ESU7FR9O.d.ts +74 -0
- package/define-slot-RfgqKa6n.d.cts +74 -0
- package/define.cjs +6 -3
- package/define.d.cts +3 -2
- package/define.d.ts +3 -2
- package/define.js +7 -4
- package/index.cjs +32 -25
- package/index.d.cts +11 -10
- package/index.d.ts +11 -10
- package/index.js +14 -7
- package/island/index.cjs +137 -0
- package/island/index.d.cts +158 -0
- package/island/index.d.ts +158 -0
- package/island/index.js +137 -0
- package/package.json +26 -10
- package/types-Deyolj1-.d.cts +802 -0
- package/types-Deyolj1-.d.ts +802 -0
- package/view-adapter-CL0vZ-rv.d.ts +110 -0
- package/view-adapter-vwO-7b1t.d.cts +110 -0
- package/chunk-NRE6DV6O.cjs +0 -40
- package/define-slot--HM6B232.d.ts +0 -500
- package/define-slot-es1K6_-L.d.cts +0 -500
- package/types-B4Arep3V.d.cts +0 -415
- package/types-B4Arep3V.d.ts +0 -415
package/adapter.cjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkC7BM4DGXcjs = require('./chunk-C7BM4DGX.cjs');
|
|
5
|
+
require('./chunk-XHYR3SGG.cjs');
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
|
|
8
|
-
exports.installResolver =
|
|
9
|
+
exports.installResolver = _chunkC7BM4DGXcjs.installResolver; exports.resolveDefinition = _chunkC7BM4DGXcjs.resolveDefinition;
|
package/adapter.d.cts
CHANGED
package/adapter.d.ts
CHANGED
package/adapter.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkC7BM4DGXcjs = require('./chunk-C7BM4DGX.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkA6ZPAM6Zcjs = require('./chunk-A6ZPAM6Z.cjs');
|
|
4
7
|
|
|
5
8
|
// src/core/types.ts
|
|
6
9
|
var _ioc = require('@foxford/ioc');
|
|
@@ -41,26 +44,6 @@ var SlotRegistry = class {
|
|
|
41
44
|
}
|
|
42
45
|
};
|
|
43
46
|
|
|
44
|
-
// src/logger.ts
|
|
45
|
-
|
|
46
|
-
var _logger = require('@foxford/logger');
|
|
47
|
-
var logger = _logger.log.getLogger("@foxford/den");
|
|
48
|
-
var LoggerToken = _ioc.createToken.call(void 0, "den:Logger");
|
|
49
|
-
function scopeLogger(container) {
|
|
50
|
-
if (container.has(LoggerToken)) {
|
|
51
|
-
const resolved = container.resolve(LoggerToken);
|
|
52
|
-
if (!(resolved instanceof Promise)) {
|
|
53
|
-
return resolved;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return logger;
|
|
57
|
-
}
|
|
58
|
-
function unitLogger(container, name) {
|
|
59
|
-
var _a;
|
|
60
|
-
const base = scopeLogger(container);
|
|
61
|
-
return (_a = base.getLogger(name)) != null ? _a : base;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
47
|
// src/define-service.ts
|
|
65
48
|
|
|
66
49
|
function defineService(token, options) {
|
|
@@ -79,7 +62,7 @@ function defineService(token, options) {
|
|
|
79
62
|
* @param container - Контейнер для регистрации
|
|
80
63
|
*/
|
|
81
64
|
register(container) {
|
|
82
|
-
const unitLog = unitLogger(container, token.description);
|
|
65
|
+
const unitLog = _chunkA6ZPAM6Zcjs.unitLogger.call(void 0, container, token.description);
|
|
83
66
|
const factory = _ioc.inject.call(void 0, requireTokens, (...args) => {
|
|
84
67
|
unitLog.debug(`\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (${create ? "\u0444\u0430\u0431\u0440\u0438\u043A\u0430" : "lifecycle-\u043E\u0431\u0451\u0440\u0442\u043A\u0430"})`);
|
|
85
68
|
let instance;
|
|
@@ -141,7 +124,7 @@ function defineViewModel(token, options) {
|
|
|
141
124
|
* @param container - Контейнер для регистрации
|
|
142
125
|
*/
|
|
143
126
|
register(container) {
|
|
144
|
-
const unitLog = unitLogger(container, token.description);
|
|
127
|
+
const unitLog = _chunkA6ZPAM6Zcjs.unitLogger.call(void 0, container, token.description);
|
|
145
128
|
const factory = _ioc.inject.call(void 0, requireTokens, (...args) => {
|
|
146
129
|
unitLog.debug("\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435 view-model");
|
|
147
130
|
return create(args);
|
|
@@ -161,7 +144,7 @@ function defineViewModel(token, options) {
|
|
|
161
144
|
* @returns Экземпляр VM или Promise с экземпляром
|
|
162
145
|
*/
|
|
163
146
|
resolve() {
|
|
164
|
-
return
|
|
147
|
+
return _chunkC7BM4DGXcjs.resolveDefinition.call(void 0, token);
|
|
165
148
|
},
|
|
166
149
|
token,
|
|
167
150
|
/**
|
|
@@ -188,7 +171,7 @@ function defineRepository(token, options) {
|
|
|
188
171
|
* @param container - Контейнер для регистрации
|
|
189
172
|
*/
|
|
190
173
|
register(container) {
|
|
191
|
-
const unitLog = unitLogger(container, token.description);
|
|
174
|
+
const unitLog = _chunkA6ZPAM6Zcjs.unitLogger.call(void 0, container, token.description);
|
|
192
175
|
const factory = _ioc.inject.call(void 0, requireTokens, (...args) => {
|
|
193
176
|
unitLog.debug("\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u044F");
|
|
194
177
|
return create(args);
|
|
@@ -201,12 +184,11 @@ function defineRepository(token, options) {
|
|
|
201
184
|
}
|
|
202
185
|
|
|
203
186
|
// src/define-slot.ts
|
|
204
|
-
function defineSlot({
|
|
187
|
+
function defineSlot({ view, units = [], viewLayer } = {}) {
|
|
205
188
|
return {
|
|
206
189
|
__type: "slot",
|
|
207
|
-
name
|
|
208
|
-
|
|
209
|
-
const slotLog = unitLogger(container, `slot:${name}`);
|
|
190
|
+
register(container, name) {
|
|
191
|
+
const slotLog = _chunkA6ZPAM6Zcjs.unitLogger.call(void 0, container, `slot:${name}`);
|
|
210
192
|
for (const unit of units) {
|
|
211
193
|
unit.register(container);
|
|
212
194
|
}
|
|
@@ -216,11 +198,12 @@ function defineSlot({ name, view, units = [] }) {
|
|
|
216
198
|
slotLog.debug("\u0441\u043E\u0437\u0434\u0430\u043D SlotRegistry \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0430");
|
|
217
199
|
return created;
|
|
218
200
|
})();
|
|
219
|
-
registry.add({ name, view });
|
|
201
|
+
registry.add({ name, view, viewLayer });
|
|
220
202
|
slotLog.debug(`\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F \u0441\u043B\u043E\u0442\u0430 (units=${units.length})`);
|
|
221
203
|
},
|
|
222
204
|
units,
|
|
223
|
-
view
|
|
205
|
+
view,
|
|
206
|
+
viewLayer
|
|
224
207
|
};
|
|
225
208
|
}
|
|
226
209
|
|
|
@@ -238,7 +221,4 @@ function defineSlot({ name, view, units = [] }) {
|
|
|
238
221
|
|
|
239
222
|
|
|
240
223
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
exports.ContainerManagerToken = ContainerManagerToken; exports.GuardRunnerToken = GuardRunnerToken; exports.NavigationManagerToken = NavigationManagerToken; exports.StateSerializerToken = StateSerializerToken; exports.StateRegistryToken = StateRegistryToken; exports.SlotRegistryToken = SlotRegistryToken; exports.ActivatableToken = ActivatableToken; exports.RequestContextToken = RequestContextToken; exports.SlotRegistry = SlotRegistry; exports.logger = logger; exports.LoggerToken = LoggerToken; exports.scopeLogger = scopeLogger; exports.defineService = defineService; exports.defineViewModel = defineViewModel; exports.defineRepository = defineRepository; exports.defineSlot = defineSlot;
|
|
224
|
+
exports.ContainerManagerToken = ContainerManagerToken; exports.GuardRunnerToken = GuardRunnerToken; exports.NavigationManagerToken = NavigationManagerToken; exports.StateSerializerToken = StateSerializerToken; exports.StateRegistryToken = StateRegistryToken; exports.SlotRegistryToken = SlotRegistryToken; exports.ActivatableToken = ActivatableToken; exports.RequestContextToken = RequestContextToken; exports.SlotRegistry = SlotRegistry; exports.defineService = defineService; exports.defineViewModel = defineViewModel; exports.defineRepository = defineRepository; exports.defineSlot = defineSlot;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/logger.ts
|
|
2
|
+
var _ioc = require('@foxford/ioc');
|
|
3
|
+
var _logger = require('@foxford/logger');
|
|
4
|
+
var logger = _logger.log.getLogger("@foxford/den");
|
|
5
|
+
var LoggerToken = _ioc.createToken.call(void 0, "den:Logger");
|
|
6
|
+
function scopeLogger(container) {
|
|
7
|
+
if (container.has(LoggerToken)) {
|
|
8
|
+
const resolved = container.resolve(LoggerToken);
|
|
9
|
+
if (!(resolved instanceof Promise)) {
|
|
10
|
+
return resolved;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return logger;
|
|
14
|
+
}
|
|
15
|
+
function unitLogger(container, name) {
|
|
16
|
+
var _a;
|
|
17
|
+
const base = scopeLogger(container);
|
|
18
|
+
return (_a = base.getLogger(name)) != null ? _a : base;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
exports.logger = logger; exports.LoggerToken = LoggerToken; exports.scopeLogger = scopeLogger; exports.unitLogger = unitLogger;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/adapter.ts
|
|
2
|
+
var activeResolver = null;
|
|
3
|
+
function installResolver(resolver) {
|
|
4
|
+
activeResolver = resolver;
|
|
5
|
+
}
|
|
6
|
+
function resolveDefinition(token) {
|
|
7
|
+
if (activeResolver === null) {
|
|
8
|
+
throw new Error(
|
|
9
|
+
`den/adapter: \u0440\u0435\u0437\u043E\u043B\u0432\u0435\u0440 \u043D\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D \u0434\u043B\u044F \xAB${token.description}\xBB \u2014 \u043D\u0438 \u043E\u0434\u0438\u043D host-\u0430\u0434\u0430\u043F\u0442\u0435\u0440 \u043D\u0435 \u0432\u044B\u0437\u0432\u0430\u043B installResolver()`
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
return activeResolver(token);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
exports.installResolver = installResolver; exports.resolveDefinition = resolveDefinition;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
var __async = (__this, __arguments, generator) => {
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
var fulfilled = (value) => {
|
|
20
|
+
try {
|
|
21
|
+
step(generator.next(value));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
reject(e);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var rejected = (value) => {
|
|
27
|
+
try {
|
|
28
|
+
step(generator.throw(value));
|
|
29
|
+
} catch (e) {
|
|
30
|
+
reject(e);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
34
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export {
|
|
39
|
+
__spreadValues,
|
|
40
|
+
__async
|
|
41
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/island/view-adapter.ts
|
|
2
|
+
var _ioc = require('@foxford/ioc');
|
|
3
|
+
var ViewLayerToken = _ioc.createToken.call(void 0, "den:ViewLayer");
|
|
4
|
+
function isViewAdapter(value) {
|
|
5
|
+
if (typeof value !== "object" || value === null) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const candidate = value;
|
|
9
|
+
return typeof candidate.type === "string" && typeof candidate.createIsland === "function" && typeof candidate.installResolver === "function";
|
|
10
|
+
}
|
|
11
|
+
function viewAdapterOf(layer) {
|
|
12
|
+
return adapterOfConfig(layer.config);
|
|
13
|
+
}
|
|
14
|
+
function adapterOfConfig(config) {
|
|
15
|
+
if (!isViewAdapter(config.adapter)) {
|
|
16
|
+
throw new Error(
|
|
17
|
+
`den/island: view-\u0441\u043B\u043E\u0439 \xAB${config.name}\xBB \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D \u0431\u0435\u0437 \u0430\u0434\u0430\u043F\u0442\u0435\u0440\u0430 \u2014 \u043E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F ViewAdapter (type + createIsland + installResolver), \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 reactAdapter()`
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
return config.adapter;
|
|
21
|
+
}
|
|
22
|
+
function resolveViewAdapter(container) {
|
|
23
|
+
if (container.has(ViewLayerToken)) {
|
|
24
|
+
return adapterOfConfig(container.resolve(ViewLayerToken));
|
|
25
|
+
}
|
|
26
|
+
throw new Error(
|
|
27
|
+
'den/island: view-\u0441\u043B\u043E\u0439 \u043D\u0435 \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D \u2014 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043E\u0431\u044F\u0437\u0430\u043D\u043E \u043E\u0431\u044A\u044F\u0432\u0438\u0442\u044C \u0435\u0433\u043E \u0441\u0430\u043C\u043E: defineLayer(ViewLayerToken, { name: "view", adapter: reactAdapter() })'
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
exports.ViewLayerToken = ViewLayerToken; exports.viewAdapterOf = viewAdapterOf; exports.resolveViewAdapter = resolveViewAdapter;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/island/view-adapter.ts
|
|
2
|
+
import { createToken } from "@foxford/ioc";
|
|
3
|
+
var ViewLayerToken = createToken("den:ViewLayer");
|
|
4
|
+
function isViewAdapter(value) {
|
|
5
|
+
if (typeof value !== "object" || value === null) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const candidate = value;
|
|
9
|
+
return typeof candidate.type === "string" && typeof candidate.createIsland === "function" && typeof candidate.installResolver === "function";
|
|
10
|
+
}
|
|
11
|
+
function viewAdapterOf(layer) {
|
|
12
|
+
return adapterOfConfig(layer.config);
|
|
13
|
+
}
|
|
14
|
+
function adapterOfConfig(config) {
|
|
15
|
+
if (!isViewAdapter(config.adapter)) {
|
|
16
|
+
throw new Error(
|
|
17
|
+
`den/island: view-\u0441\u043B\u043E\u0439 \xAB${config.name}\xBB \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D \u0431\u0435\u0437 \u0430\u0434\u0430\u043F\u0442\u0435\u0440\u0430 \u2014 \u043E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F ViewAdapter (type + createIsland + installResolver), \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 reactAdapter()`
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
return config.adapter;
|
|
21
|
+
}
|
|
22
|
+
function resolveViewAdapter(container) {
|
|
23
|
+
if (container.has(ViewLayerToken)) {
|
|
24
|
+
return adapterOfConfig(container.resolve(ViewLayerToken));
|
|
25
|
+
}
|
|
26
|
+
throw new Error(
|
|
27
|
+
'den/island: view-\u0441\u043B\u043E\u0439 \u043D\u0435 \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D \u2014 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043E\u0431\u044F\u0437\u0430\u043D\u043E \u043E\u0431\u044A\u044F\u0432\u0438\u0442\u044C \u0435\u0433\u043E \u0441\u0430\u043C\u043E: defineLayer(ViewLayerToken, { name: "view", adapter: reactAdapter() })'
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
ViewLayerToken,
|
|
33
|
+
viewAdapterOf,
|
|
34
|
+
resolveViewAdapter
|
|
35
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// src/logger.ts
|
|
2
|
+
import { createToken } from "@foxford/ioc";
|
|
3
|
+
import { log } from "@foxford/logger";
|
|
4
|
+
var logger = log.getLogger("@foxford/den");
|
|
5
|
+
var LoggerToken = createToken("den:Logger");
|
|
6
|
+
function scopeLogger(container) {
|
|
7
|
+
if (container.has(LoggerToken)) {
|
|
8
|
+
const resolved = container.resolve(LoggerToken);
|
|
9
|
+
if (!(resolved instanceof Promise)) {
|
|
10
|
+
return resolved;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return logger;
|
|
14
|
+
}
|
|
15
|
+
function unitLogger(container, name) {
|
|
16
|
+
var _a;
|
|
17
|
+
const base = scopeLogger(container);
|
|
18
|
+
return (_a = base.getLogger(name)) != null ? _a : base;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
logger,
|
|
23
|
+
LoggerToken,
|
|
24
|
+
scopeLogger,
|
|
25
|
+
unitLogger
|
|
26
|
+
};
|
|
@@ -1,24 +1,3 @@
|
|
|
1
|
-
var __async = (__this, __arguments, generator) => {
|
|
2
|
-
return new Promise((resolve, reject) => {
|
|
3
|
-
var fulfilled = (value) => {
|
|
4
|
-
try {
|
|
5
|
-
step(generator.next(value));
|
|
6
|
-
} catch (e) {
|
|
7
|
-
reject(e);
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
var rejected = (value) => {
|
|
11
|
-
try {
|
|
12
|
-
step(generator.throw(value));
|
|
13
|
-
} catch (e) {
|
|
14
|
-
reject(e);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
|
|
22
1
|
// src/adapter.ts
|
|
23
2
|
var activeResolver = null;
|
|
24
3
|
function installResolver(resolver) {
|
|
@@ -34,7 +13,6 @@ function resolveDefinition(token) {
|
|
|
34
13
|
}
|
|
35
14
|
|
|
36
15
|
export {
|
|
37
|
-
__async,
|
|
38
16
|
installResolver,
|
|
39
17
|
resolveDefinition
|
|
40
18
|
};
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveDefinition
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WBHHHICS.js";
|
|
4
|
+
import {
|
|
5
|
+
unitLogger
|
|
6
|
+
} from "./chunk-TPBI6TOU.js";
|
|
4
7
|
|
|
5
8
|
// src/core/types.ts
|
|
6
9
|
import { createToken } from "@foxford/ioc";
|
|
@@ -41,26 +44,6 @@ var SlotRegistry = class {
|
|
|
41
44
|
}
|
|
42
45
|
};
|
|
43
46
|
|
|
44
|
-
// src/logger.ts
|
|
45
|
-
import { createToken as createToken2 } from "@foxford/ioc";
|
|
46
|
-
import { log } from "@foxford/logger";
|
|
47
|
-
var logger = log.getLogger("@foxford/den");
|
|
48
|
-
var LoggerToken = createToken2("den:Logger");
|
|
49
|
-
function scopeLogger(container) {
|
|
50
|
-
if (container.has(LoggerToken)) {
|
|
51
|
-
const resolved = container.resolve(LoggerToken);
|
|
52
|
-
if (!(resolved instanceof Promise)) {
|
|
53
|
-
return resolved;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return logger;
|
|
57
|
-
}
|
|
58
|
-
function unitLogger(container, name) {
|
|
59
|
-
var _a;
|
|
60
|
-
const base = scopeLogger(container);
|
|
61
|
-
return (_a = base.getLogger(name)) != null ? _a : base;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
47
|
// src/define-service.ts
|
|
65
48
|
import { inject, Lifecycle } from "@foxford/ioc";
|
|
66
49
|
function defineService(token, options) {
|
|
@@ -201,11 +184,10 @@ function defineRepository(token, options) {
|
|
|
201
184
|
}
|
|
202
185
|
|
|
203
186
|
// src/define-slot.ts
|
|
204
|
-
function defineSlot({
|
|
187
|
+
function defineSlot({ view, units = [], viewLayer } = {}) {
|
|
205
188
|
return {
|
|
206
189
|
__type: "slot",
|
|
207
|
-
name
|
|
208
|
-
register(container) {
|
|
190
|
+
register(container, name) {
|
|
209
191
|
const slotLog = unitLogger(container, `slot:${name}`);
|
|
210
192
|
for (const unit of units) {
|
|
211
193
|
unit.register(container);
|
|
@@ -216,11 +198,12 @@ function defineSlot({ name, view, units = [] }) {
|
|
|
216
198
|
slotLog.debug("\u0441\u043E\u0437\u0434\u0430\u043D SlotRegistry \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0430");
|
|
217
199
|
return created;
|
|
218
200
|
})();
|
|
219
|
-
registry.add({ name, view });
|
|
201
|
+
registry.add({ name, view, viewLayer });
|
|
220
202
|
slotLog.debug(`\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F \u0441\u043B\u043E\u0442\u0430 (units=${units.length})`);
|
|
221
203
|
},
|
|
222
204
|
units,
|
|
223
|
-
view
|
|
205
|
+
view,
|
|
206
|
+
viewLayer
|
|
224
207
|
};
|
|
225
208
|
}
|
|
226
209
|
|
|
@@ -234,9 +217,6 @@ export {
|
|
|
234
217
|
ActivatableToken,
|
|
235
218
|
RequestContextToken,
|
|
236
219
|
SlotRegistry,
|
|
237
|
-
logger,
|
|
238
|
-
LoggerToken,
|
|
239
|
-
scopeLogger,
|
|
240
220
|
defineService,
|
|
241
221
|
defineViewModel,
|
|
242
222
|
defineRepository,
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
var __async = (__this, __arguments, generator) => {
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
var fulfilled = (value) => {
|
|
20
|
+
try {
|
|
21
|
+
step(generator.next(value));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
reject(e);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var rejected = (value) => {
|
|
27
|
+
try {
|
|
28
|
+
step(generator.throw(value));
|
|
29
|
+
} catch (e) {
|
|
30
|
+
reject(e);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
34
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
exports.__spreadValues = __spreadValues; exports.__async = __async;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { x as DefineServiceOptions, K as ServiceDefinition, y as DefineViewModelOptions, X as ViewModelDefinition, w as DefineRepositoryOptions, I as RepositoryDefinition } from './types-Deyolj1-.js';
|
|
2
|
+
import { Token } from '@foxford/ioc';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Определяет сервис с IoC-биндингом и опциональными lifecycle-хуками activate/deactivate.
|
|
6
|
+
* Если передана опция create — регистрирует экземпляр класса напрямую (как Singleton).
|
|
7
|
+
* Если create не передана — создаёт Activatable-обёртку с хуками activate/deactivate.
|
|
8
|
+
*
|
|
9
|
+
* @template T - Тип регистрируемого сервиса
|
|
10
|
+
* @template Deps - Кортеж токенов зависимостей (по умолчанию пустой кортеж)
|
|
11
|
+
* @param token - Токен для регистрации сервиса в IoC
|
|
12
|
+
* @param options - Опции: requires, create, activate, deactivate
|
|
13
|
+
* @returns ServiceDefinition с методом register(container)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // С фабрикой create (сервис-класс регистрируется напрямую)
|
|
17
|
+
* const authService = defineService(AuthServiceToken, {
|
|
18
|
+
* create: () => new AuthService(),
|
|
19
|
+
* })
|
|
20
|
+
* authService.register(appContainer)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // С lifecycle-хуками (без create)
|
|
24
|
+
* const dataService = defineService(DataServiceToken, {
|
|
25
|
+
* requires: [RepoToken] as const,
|
|
26
|
+
* activate: ([repo], params) => repo.loadData(params.id),
|
|
27
|
+
* deactivate: ([repo]) => repo.cleanup(),
|
|
28
|
+
* })
|
|
29
|
+
* dataService.register(appContainer)
|
|
30
|
+
*/
|
|
31
|
+
declare function defineService<T, Deps extends readonly Token<unknown>[] = readonly []>(token: Token<T>, options: DefineServiceOptions<Deps, T>): ServiceDefinition<T, Deps>;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Определяет ViewModel с IoC-биндингом и proxy для прямого импорта из view.
|
|
35
|
+
* Поддерживает deferred resolution — контейнер не нужен на момент импорта модуля.
|
|
36
|
+
* Метод resolve() делегирует резолв стратегии активного host-адаптера
|
|
37
|
+
* (см. `@foxford/den/adapter` → `installResolver`).
|
|
38
|
+
*
|
|
39
|
+
* @template T - Тип ViewModel
|
|
40
|
+
* @template Deps - Кортеж токенов зависимостей (по умолчанию пустой кортеж)
|
|
41
|
+
* @param token - Токен для регистрации VM в IoC
|
|
42
|
+
* @param options - Опции: requires, create
|
|
43
|
+
* @returns ViewModelDefinition с методами register(container) и resolve()
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* // home.vm.ts — создаётся при импорте модуля
|
|
47
|
+
* export const homeVm = defineViewModel(HomeVmToken, {
|
|
48
|
+
* requires: [UserServiceToken] as const,
|
|
49
|
+
* create: ([userService]) => ({
|
|
50
|
+
* title: userService.getTitle(),
|
|
51
|
+
* }),
|
|
52
|
+
* })
|
|
53
|
+
*
|
|
54
|
+
* // home.view.tsx — контейнер уже инициализирован
|
|
55
|
+
* const vm = await homeVm.use()
|
|
56
|
+
*/
|
|
57
|
+
declare function defineViewModel<T, Deps extends readonly Token<unknown>[] = readonly []>(token: Token<T>, options: DefineViewModelOptions<Deps, T>): ViewModelDefinition<T, Deps>;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Определяет репозиторий уровня данных с IoC-биндингом.
|
|
61
|
+
* Регистрирует Singleton-фабрику в IoC-контейнере.
|
|
62
|
+
* В отличие от defineService, репозиторий не имеет activate/deactivate lifecycle —
|
|
63
|
+
* он предоставляет методы доступа к данным без управления состоянием страницы.
|
|
64
|
+
*
|
|
65
|
+
* @template T - Тип регистрируемого репозитория
|
|
66
|
+
* @template Deps - Кортеж токенов зависимостей (по умолчанию пустой кортеж)
|
|
67
|
+
* @param token - Токен для регистрации репозитория в IoC
|
|
68
|
+
* @param options - Опции: requires, create
|
|
69
|
+
* @returns RepositoryDefinition с методом register(container)
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* const userRepo = defineRepository(UserRepoToken, {
|
|
73
|
+
* requires: [HttpServiceToken] as const,
|
|
74
|
+
* create: ([http]) => ({
|
|
75
|
+
* getUser: (id: string) => http.get(`/users/${id}`),
|
|
76
|
+
* saveUser: (data: UserData) => http.post('/users', data),
|
|
77
|
+
* }),
|
|
78
|
+
* })
|
|
79
|
+
* userRepo.register(appContainer)
|
|
80
|
+
*/
|
|
81
|
+
declare function defineRepository<T, Deps extends readonly Token<unknown>[] = readonly []>(token: Token<T>, options: DefineRepositoryOptions<Deps, T>): RepositoryDefinition<T, Deps>;
|
|
82
|
+
|
|
83
|
+
export { defineService as a, defineViewModel as b, defineRepository as d };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { x as DefineServiceOptions, K as ServiceDefinition, y as DefineViewModelOptions, X as ViewModelDefinition, w as DefineRepositoryOptions, I as RepositoryDefinition } from './types-Deyolj1-.cjs';
|
|
2
|
+
import { Token } from '@foxford/ioc';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Определяет сервис с IoC-биндингом и опциональными lifecycle-хуками activate/deactivate.
|
|
6
|
+
* Если передана опция create — регистрирует экземпляр класса напрямую (как Singleton).
|
|
7
|
+
* Если create не передана — создаёт Activatable-обёртку с хуками activate/deactivate.
|
|
8
|
+
*
|
|
9
|
+
* @template T - Тип регистрируемого сервиса
|
|
10
|
+
* @template Deps - Кортеж токенов зависимостей (по умолчанию пустой кортеж)
|
|
11
|
+
* @param token - Токен для регистрации сервиса в IoC
|
|
12
|
+
* @param options - Опции: requires, create, activate, deactivate
|
|
13
|
+
* @returns ServiceDefinition с методом register(container)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // С фабрикой create (сервис-класс регистрируется напрямую)
|
|
17
|
+
* const authService = defineService(AuthServiceToken, {
|
|
18
|
+
* create: () => new AuthService(),
|
|
19
|
+
* })
|
|
20
|
+
* authService.register(appContainer)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // С lifecycle-хуками (без create)
|
|
24
|
+
* const dataService = defineService(DataServiceToken, {
|
|
25
|
+
* requires: [RepoToken] as const,
|
|
26
|
+
* activate: ([repo], params) => repo.loadData(params.id),
|
|
27
|
+
* deactivate: ([repo]) => repo.cleanup(),
|
|
28
|
+
* })
|
|
29
|
+
* dataService.register(appContainer)
|
|
30
|
+
*/
|
|
31
|
+
declare function defineService<T, Deps extends readonly Token<unknown>[] = readonly []>(token: Token<T>, options: DefineServiceOptions<Deps, T>): ServiceDefinition<T, Deps>;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Определяет ViewModel с IoC-биндингом и proxy для прямого импорта из view.
|
|
35
|
+
* Поддерживает deferred resolution — контейнер не нужен на момент импорта модуля.
|
|
36
|
+
* Метод resolve() делегирует резолв стратегии активного host-адаптера
|
|
37
|
+
* (см. `@foxford/den/adapter` → `installResolver`).
|
|
38
|
+
*
|
|
39
|
+
* @template T - Тип ViewModel
|
|
40
|
+
* @template Deps - Кортеж токенов зависимостей (по умолчанию пустой кортеж)
|
|
41
|
+
* @param token - Токен для регистрации VM в IoC
|
|
42
|
+
* @param options - Опции: requires, create
|
|
43
|
+
* @returns ViewModelDefinition с методами register(container) и resolve()
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* // home.vm.ts — создаётся при импорте модуля
|
|
47
|
+
* export const homeVm = defineViewModel(HomeVmToken, {
|
|
48
|
+
* requires: [UserServiceToken] as const,
|
|
49
|
+
* create: ([userService]) => ({
|
|
50
|
+
* title: userService.getTitle(),
|
|
51
|
+
* }),
|
|
52
|
+
* })
|
|
53
|
+
*
|
|
54
|
+
* // home.view.tsx — контейнер уже инициализирован
|
|
55
|
+
* const vm = await homeVm.use()
|
|
56
|
+
*/
|
|
57
|
+
declare function defineViewModel<T, Deps extends readonly Token<unknown>[] = readonly []>(token: Token<T>, options: DefineViewModelOptions<Deps, T>): ViewModelDefinition<T, Deps>;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Определяет репозиторий уровня данных с IoC-биндингом.
|
|
61
|
+
* Регистрирует Singleton-фабрику в IoC-контейнере.
|
|
62
|
+
* В отличие от defineService, репозиторий не имеет activate/deactivate lifecycle —
|
|
63
|
+
* он предоставляет методы доступа к данным без управления состоянием страницы.
|
|
64
|
+
*
|
|
65
|
+
* @template T - Тип регистрируемого репозитория
|
|
66
|
+
* @template Deps - Кортеж токенов зависимостей (по умолчанию пустой кортеж)
|
|
67
|
+
* @param token - Токен для регистрации репозитория в IoC
|
|
68
|
+
* @param options - Опции: requires, create
|
|
69
|
+
* @returns RepositoryDefinition с методом register(container)
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* const userRepo = defineRepository(UserRepoToken, {
|
|
73
|
+
* requires: [HttpServiceToken] as const,
|
|
74
|
+
* create: ([http]) => ({
|
|
75
|
+
* getUser: (id: string) => http.get(`/users/${id}`),
|
|
76
|
+
* saveUser: (data: UserData) => http.post('/users', data),
|
|
77
|
+
* }),
|
|
78
|
+
* })
|
|
79
|
+
* userRepo.register(appContainer)
|
|
80
|
+
*/
|
|
81
|
+
declare function defineRepository<T, Deps extends readonly Token<unknown>[] = readonly []>(token: Token<T>, options: DefineRepositoryOptions<Deps, T>): RepositoryDefinition<T, Deps>;
|
|
82
|
+
|
|
83
|
+
export { defineService as a, defineViewModel as b, defineRepository as d };
|