@foxford/den 1.0.0 → 1.0.2

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 CHANGED
@@ -1,43 +1,8 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
19
2
 
20
- // src/adapter.ts
21
- var adapter_exports = {};
22
- __export(adapter_exports, {
23
- installResolver: () => installResolver,
24
- resolveDefinition: () => resolveDefinition
25
- });
26
- module.exports = __toCommonJS(adapter_exports);
27
- var activeResolver = null;
28
- function installResolver(resolver) {
29
- activeResolver = resolver;
30
- }
31
- function resolveDefinition(token) {
32
- if (activeResolver === null) {
33
- throw new Error(
34
- `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()`
35
- );
36
- }
37
- return activeResolver(token);
38
- }
39
- // Annotate the CommonJS export names for ESM import in node:
40
- 0 && (module.exports = {
41
- installResolver,
42
- resolveDefinition
43
- });
3
+
4
+ var _chunkNRE6DV6Ocjs = require('./chunk-NRE6DV6O.cjs');
5
+
6
+
7
+
8
+ exports.installResolver = _chunkNRE6DV6Ocjs.installResolver; exports.resolveDefinition = _chunkNRE6DV6Ocjs.resolveDefinition;
package/adapter.js ADDED
@@ -0,0 +1,8 @@
1
+ import {
2
+ installResolver,
3
+ resolveDefinition
4
+ } from "./chunk-E7HG2NXO.js";
5
+ export {
6
+ installResolver,
7
+ resolveDefinition
8
+ };
@@ -0,0 +1,244 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkNRE6DV6Ocjs = require('./chunk-NRE6DV6O.cjs');
4
+
5
+ // src/core/types.ts
6
+ var _ioc = require('@foxford/ioc');
7
+ var ContainerManagerToken = _ioc.createToken.call(void 0, "core:ContainerManager");
8
+ var GuardRunnerToken = _ioc.createToken.call(void 0, "core:GuardRunner");
9
+ var NavigationManagerToken = _ioc.createToken.call(void 0, "core:NavigationManager");
10
+ var StateSerializerToken = _ioc.createToken.call(void 0, "core:StateSerializer");
11
+ var StateRegistryToken = _ioc.createToken.call(void 0, "core:StateRegistry");
12
+ var SlotRegistryToken = _ioc.createToken.call(void 0, "core:SlotRegistry");
13
+ var ActivatableToken = _ioc.createToken.call(void 0, "core:Activatable");
14
+ var RequestContextToken = _ioc.createToken.call(void 0, "core:RequestContext");
15
+
16
+ // src/core/slot-registry.ts
17
+ var SlotRegistry = class {
18
+ constructor() {
19
+ /** Слоты по имени. Повторная регистрация с тем же именем перезаписывает. */
20
+ this.slots = /* @__PURE__ */ new Map();
21
+ }
22
+ /**
23
+ * Регистрирует слот.
24
+ * @param entry - Запись слота (имя + непрозрачный view)
25
+ */
26
+ add(entry) {
27
+ this.slots.set(entry.name, entry);
28
+ }
29
+ /**
30
+ * Возвращает слот по имени.
31
+ * @param name - Имя слота
32
+ */
33
+ get(name) {
34
+ return this.slots.get(name);
35
+ }
36
+ /**
37
+ * Возвращает все зарегистрированные слоты.
38
+ */
39
+ all() {
40
+ return [...this.slots.values()];
41
+ }
42
+ };
43
+
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
+ // src/define-service.ts
65
+
66
+ function defineService(token, options) {
67
+ const { requires, create, activate, deactivate, serialize, deserialize, scope } = options;
68
+ const requireTokens = requires != null ? requires : [];
69
+ const participatesInState = serialize !== void 0 || deserialize !== void 0;
70
+ return {
71
+ __meta: { requires: requireTokens, scope: scope != null ? scope : "app" },
72
+ __type: "service",
73
+ /**
74
+ * Регистрирует сервис в IoC-контейнере как Singleton.
75
+ * Если передана create — биндит экземпляр класса напрямую.
76
+ * Иначе — биндит Activatable-обёртку с хуками lifecycle.
77
+ * Если объявлены serialize/deserialize — при создании экземпляра сервис
78
+ * регистрируется участником в StateRegistry этого контейнера.
79
+ * @param container - Контейнер для регистрации
80
+ */
81
+ register(container) {
82
+ const unitLog = unitLogger(container, token.description);
83
+ const factory = _ioc.inject.call(void 0, requireTokens, (...args) => {
84
+ 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
+ let instance;
86
+ if (create) {
87
+ instance = create(args);
88
+ } else {
89
+ const service = {
90
+ activate(params) {
91
+ return activate == null ? void 0 : activate(args, params);
92
+ },
93
+ deactivate() {
94
+ return deactivate == null ? void 0 : deactivate(args);
95
+ }
96
+ };
97
+ instance = service;
98
+ }
99
+ if (participatesInState) {
100
+ unitLog.debug("\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u043C StateRegistry (serialize/deserialize)");
101
+ registerStateParticipant(container, token, instance, args, serialize, deserialize);
102
+ }
103
+ return instance;
104
+ });
105
+ container.bind(token).toFactory(factory, { lifecycle: _ioc.Lifecycle.Singleton });
106
+ unitLog.debug(`\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (scope=${scope != null ? scope : "app"}, requires=${requireTokens.length})`);
107
+ },
108
+ token
109
+ };
110
+ }
111
+ function registerStateParticipant(container, token, instance, deps, serialize, deserialize) {
112
+ if (!container.has(StateRegistryToken)) {
113
+ return;
114
+ }
115
+ const resolved = container.resolve(StateRegistryToken);
116
+ if (resolved instanceof Promise) {
117
+ return;
118
+ }
119
+ ;
120
+ resolved.add(token.description, {
121
+ activate: (params) => {
122
+ var _a;
123
+ return (_a = instance.activate) == null ? void 0 : _a.call(instance, params);
124
+ },
125
+ fromJSON: deserialize ? (data) => deserialize(deps, data) : void 0,
126
+ toJSON: serialize ? () => serialize(deps) : void 0
127
+ });
128
+ }
129
+
130
+ // src/define-view-model.ts
131
+
132
+ function defineViewModel(token, options) {
133
+ const { requires, create } = options;
134
+ const requireTokens = requires != null ? requires : [];
135
+ return {
136
+ __meta: { requires: requireTokens },
137
+ __type: "view-model",
138
+ /**
139
+ * Регистрирует VM в IoC-контейнере как Singleton.
140
+ * Зависимости из requires резолвятся автоматически через inject.
141
+ * @param container - Контейнер для регистрации
142
+ */
143
+ register(container) {
144
+ const unitLog = unitLogger(container, token.description);
145
+ const factory = _ioc.inject.call(void 0, requireTokens, (...args) => {
146
+ unitLog.debug("\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435 view-model");
147
+ return create(args);
148
+ });
149
+ container.bind(token).toFactory(factory, { lifecycle: _ioc.Lifecycle.Singleton });
150
+ unitLog.debug(`\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F view-model (requires=${requireTokens.length})`);
151
+ },
152
+ /**
153
+ * Резолвит VM через стратегию активного host-адаптера.
154
+ * Вызывайте когда контейнер уже инициализирован (в render-контексте).
155
+ *
156
+ * Дескриптор не знает, откуда берётся инстанс — стратегию ставит адаптер
157
+ * через `installResolver()` (см. `@foxford/den/adapter`):
158
+ * - Vike (дефолт) — async/global: подъём по parent-chain, pending Promise при промахе;
159
+ * - Next — sync/island: контейнер острова из React-контекста.
160
+ *
161
+ * @returns Экземпляр VM или Promise с экземпляром
162
+ */
163
+ resolve() {
164
+ return _chunkNRE6DV6Ocjs.resolveDefinition.call(void 0, token);
165
+ },
166
+ token,
167
+ /**
168
+ * Псевдоним для resolve(). Резолвит VM через стратегию активного адаптера.
169
+ * @returns Экземпляр VM или Promise с экземпляром
170
+ */
171
+ use() {
172
+ return this.resolve();
173
+ }
174
+ };
175
+ }
176
+
177
+ // src/define-repository.ts
178
+
179
+ function defineRepository(token, options) {
180
+ const { requires, create, scope } = options;
181
+ const requireTokens = requires != null ? requires : [];
182
+ return {
183
+ __meta: { requires: requireTokens, scope: scope != null ? scope : "app" },
184
+ __type: "repository",
185
+ /**
186
+ * Регистрирует репозиторий в IoC-контейнере как Singleton.
187
+ * Зависимости из requires резолвятся автоматически через inject.
188
+ * @param container - Контейнер для регистрации
189
+ */
190
+ register(container) {
191
+ const unitLog = unitLogger(container, token.description);
192
+ const factory = _ioc.inject.call(void 0, requireTokens, (...args) => {
193
+ unitLog.debug("\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u044F");
194
+ return create(args);
195
+ });
196
+ container.bind(token).toFactory(factory, { lifecycle: _ioc.Lifecycle.Singleton });
197
+ unitLog.debug(`\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u044F (scope=${scope != null ? scope : "app"}, requires=${requireTokens.length})`);
198
+ },
199
+ token
200
+ };
201
+ }
202
+
203
+ // src/define-slot.ts
204
+ function defineSlot({ name, view, units = [] }) {
205
+ return {
206
+ __type: "slot",
207
+ name,
208
+ register(container) {
209
+ const slotLog = unitLogger(container, `slot:${name}`);
210
+ for (const unit of units) {
211
+ unit.register(container);
212
+ }
213
+ const registry = container.has(SlotRegistryToken) ? container.resolve(SlotRegistryToken) : (() => {
214
+ const created = new SlotRegistry();
215
+ container.bind(SlotRegistryToken).toValue(created);
216
+ slotLog.debug("\u0441\u043E\u0437\u0434\u0430\u043D SlotRegistry \u043A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0430");
217
+ return created;
218
+ })();
219
+ registry.add({ name, view });
220
+ slotLog.debug(`\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F \u0441\u043B\u043E\u0442\u0430 (units=${units.length})`);
221
+ },
222
+ units,
223
+ view
224
+ };
225
+ }
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
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;
@@ -1,3 +1,24 @@
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
+
1
22
  // src/adapter.ts
2
23
  var activeResolver = null;
3
24
  function installResolver(resolver) {
@@ -11,7 +32,9 @@ function resolveDefinition(token) {
11
32
  }
12
33
  return activeResolver(token);
13
34
  }
35
+
14
36
  export {
37
+ __async,
15
38
  installResolver,
16
39
  resolveDefinition
17
40
  };
@@ -0,0 +1,40 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});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
+ // src/adapter.ts
23
+ var activeResolver = null;
24
+ function installResolver(resolver) {
25
+ activeResolver = resolver;
26
+ }
27
+ function resolveDefinition(token) {
28
+ if (activeResolver === null) {
29
+ throw new Error(
30
+ `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()`
31
+ );
32
+ }
33
+ return activeResolver(token);
34
+ }
35
+
36
+
37
+
38
+
39
+
40
+ exports.__async = __async; exports.installResolver = installResolver; exports.resolveDefinition = resolveDefinition;
@@ -1,5 +1,6 @@
1
- // src/define-service.ts
2
- import { inject, Lifecycle } from "@foxford/ioc";
1
+ import {
2
+ resolveDefinition
3
+ } from "./chunk-E7HG2NXO.js";
3
4
 
4
5
  // src/core/types.ts
5
6
  import { createToken } from "@foxford/ioc";
@@ -12,6 +13,34 @@ var SlotRegistryToken = createToken("core:SlotRegistry");
12
13
  var ActivatableToken = createToken("core:Activatable");
13
14
  var RequestContextToken = createToken("core:RequestContext");
14
15
 
16
+ // src/core/slot-registry.ts
17
+ var SlotRegistry = class {
18
+ constructor() {
19
+ /** Слоты по имени. Повторная регистрация с тем же именем перезаписывает. */
20
+ this.slots = /* @__PURE__ */ new Map();
21
+ }
22
+ /**
23
+ * Регистрирует слот.
24
+ * @param entry - Запись слота (имя + непрозрачный view)
25
+ */
26
+ add(entry) {
27
+ this.slots.set(entry.name, entry);
28
+ }
29
+ /**
30
+ * Возвращает слот по имени.
31
+ * @param name - Имя слота
32
+ */
33
+ get(name) {
34
+ return this.slots.get(name);
35
+ }
36
+ /**
37
+ * Возвращает все зарегистрированные слоты.
38
+ */
39
+ all() {
40
+ return [...this.slots.values()];
41
+ }
42
+ };
43
+
15
44
  // src/logger.ts
16
45
  import { createToken as createToken2 } from "@foxford/ioc";
17
46
  import { log } from "@foxford/logger";
@@ -33,6 +62,7 @@ function unitLogger(container, name) {
33
62
  }
34
63
 
35
64
  // src/define-service.ts
65
+ import { inject, Lifecycle } from "@foxford/ioc";
36
66
  function defineService(token, options) {
37
67
  const { requires, create, activate, deactivate, serialize, deserialize, scope } = options;
38
68
  const requireTokens = requires != null ? requires : [];
@@ -97,47 +127,8 @@ function registerStateParticipant(container, token, instance, deps, serialize, d
97
127
  });
98
128
  }
99
129
 
100
- // src/define-repository.ts
101
- import { inject as inject2, Lifecycle as Lifecycle2 } from "@foxford/ioc";
102
- function defineRepository(token, options) {
103
- const { requires, create, scope } = options;
104
- const requireTokens = requires != null ? requires : [];
105
- return {
106
- __meta: { requires: requireTokens, scope: scope != null ? scope : "app" },
107
- __type: "repository",
108
- /**
109
- * Регистрирует репозиторий в IoC-контейнере как Singleton.
110
- * Зависимости из requires резолвятся автоматически через inject.
111
- * @param container - Контейнер для регистрации
112
- */
113
- register(container) {
114
- const unitLog = unitLogger(container, token.description);
115
- const factory = inject2(requireTokens, (...args) => {
116
- unitLog.debug("\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u044F");
117
- return create(args);
118
- });
119
- container.bind(token).toFactory(factory, { lifecycle: Lifecycle2.Singleton });
120
- unitLog.debug(`\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u044F (scope=${scope != null ? scope : "app"}, requires=${requireTokens.length})`);
121
- },
122
- token
123
- };
124
- }
125
-
126
- // src/define-view-model.ts
127
- import { inject as inject3, Lifecycle as Lifecycle3 } from "@foxford/ioc";
128
-
129
- // src/adapter.ts
130
- var activeResolver = null;
131
- function resolveDefinition(token) {
132
- if (activeResolver === null) {
133
- throw new Error(
134
- `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()`
135
- );
136
- }
137
- return activeResolver(token);
138
- }
139
-
140
130
  // src/define-view-model.ts
131
+ import { inject as inject2, Lifecycle as Lifecycle2 } from "@foxford/ioc";
141
132
  function defineViewModel(token, options) {
142
133
  const { requires, create } = options;
143
134
  const requireTokens = requires != null ? requires : [];
@@ -151,11 +142,11 @@ function defineViewModel(token, options) {
151
142
  */
152
143
  register(container) {
153
144
  const unitLog = unitLogger(container, token.description);
154
- const factory = inject3(requireTokens, (...args) => {
145
+ const factory = inject2(requireTokens, (...args) => {
155
146
  unitLog.debug("\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435 view-model");
156
147
  return create(args);
157
148
  });
158
- container.bind(token).toFactory(factory, { lifecycle: Lifecycle3.Singleton });
149
+ container.bind(token).toFactory(factory, { lifecycle: Lifecycle2.Singleton });
159
150
  unitLog.debug(`\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F view-model (requires=${requireTokens.length})`);
160
151
  },
161
152
  /**
@@ -183,33 +174,31 @@ function defineViewModel(token, options) {
183
174
  };
184
175
  }
185
176
 
186
- // src/core/slot-registry.ts
187
- var SlotRegistry = class {
188
- constructor() {
189
- /** Слоты по имени. Повторная регистрация с тем же именем перезаписывает. */
190
- this.slots = /* @__PURE__ */ new Map();
191
- }
192
- /**
193
- * Регистрирует слот.
194
- * @param entry - Запись слота (имя + непрозрачный view)
195
- */
196
- add(entry) {
197
- this.slots.set(entry.name, entry);
198
- }
199
- /**
200
- * Возвращает слот по имени.
201
- * @param name - Имя слота
202
- */
203
- get(name) {
204
- return this.slots.get(name);
205
- }
206
- /**
207
- * Возвращает все зарегистрированные слоты.
208
- */
209
- all() {
210
- return [...this.slots.values()];
211
- }
212
- };
177
+ // src/define-repository.ts
178
+ import { inject as inject3, Lifecycle as Lifecycle3 } from "@foxford/ioc";
179
+ function defineRepository(token, options) {
180
+ const { requires, create, scope } = options;
181
+ const requireTokens = requires != null ? requires : [];
182
+ return {
183
+ __meta: { requires: requireTokens, scope: scope != null ? scope : "app" },
184
+ __type: "repository",
185
+ /**
186
+ * Регистрирует репозиторий в IoC-контейнере как Singleton.
187
+ * Зависимости из requires резолвятся автоматически через inject.
188
+ * @param container - Контейнер для регистрации
189
+ */
190
+ register(container) {
191
+ const unitLog = unitLogger(container, token.description);
192
+ const factory = inject3(requireTokens, (...args) => {
193
+ unitLog.debug("\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u044F");
194
+ return create(args);
195
+ });
196
+ container.bind(token).toFactory(factory, { lifecycle: Lifecycle3.Singleton });
197
+ unitLog.debug(`\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F \u0440\u0435\u043F\u043E\u0437\u0438\u0442\u043E\u0440\u0438\u044F (scope=${scope != null ? scope : "app"}, requires=${requireTokens.length})`);
198
+ },
199
+ token
200
+ };
201
+ }
213
202
 
214
203
  // src/define-slot.ts
215
204
  function defineSlot({ name, view, units = [] }) {
@@ -234,14 +223,22 @@ function defineSlot({ name, view, units = [] }) {
234
223
  view
235
224
  };
236
225
  }
226
+
237
227
  export {
238
- LoggerToken,
239
- SlotRegistry,
228
+ ContainerManagerToken,
229
+ GuardRunnerToken,
230
+ NavigationManagerToken,
231
+ StateSerializerToken,
232
+ StateRegistryToken,
240
233
  SlotRegistryToken,
241
- defineRepository,
234
+ ActivatableToken,
235
+ RequestContextToken,
236
+ SlotRegistry,
237
+ logger,
238
+ LoggerToken,
239
+ scopeLogger,
242
240
  defineService,
243
- defineSlot,
244
241
  defineViewModel,
245
- logger,
246
- scopeLogger
242
+ defineRepository,
243
+ defineSlot
247
244
  };