@foxford/den 2.0.0 → 2.1.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.d.cts +1 -1
- package/adapter.d.ts +1 -1
- package/{define-repository-DZg34Tb3.d.ts → define-repository-Ca62_YCy.d.ts} +1 -1
- package/{define-repository-OpMj-Q9O.d.cts → define-repository-MDEWHqM7.d.cts} +1 -1
- package/{define-slot-RfgqKa6n.d.cts → define-slot-BKvArA02.d.cts} +1 -1
- package/{define-slot-ESU7FR9O.d.ts → define-slot-Dil8Kr1A.d.ts} +1 -1
- package/define.d.cts +3 -3
- package/define.d.ts +3 -3
- package/index.cjs +1 -24
- package/index.d.cts +6 -27
- package/index.d.ts +6 -27
- package/index.js +0 -23
- package/island/index.cjs +20 -1
- package/island/index.d.cts +43 -5
- package/island/index.d.ts +43 -5
- package/island/index.js +19 -0
- package/package.json +10 -10
- package/{types-Deyolj1-.d.cts → types-COwVwgzE.d.cts} +18 -43
- package/{types-Deyolj1-.d.ts → types-COwVwgzE.d.ts} +18 -43
- package/{view-adapter-CL0vZ-rv.d.ts → view-adapter-CSPKr2xy.d.ts} +14 -2
- package/{view-adapter-vwO-7b1t.d.cts → view-adapter-zbHBVVqR.d.cts} +14 -2
package/adapter.d.cts
CHANGED
package/adapter.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { v as DefineServiceOptions, H as ServiceDefinition, w as DefineViewModelOptions, V as ViewModelDefinition, u as DefineRepositoryOptions, B as RepositoryDefinition } from './types-COwVwgzE.js';
|
|
2
2
|
import { Token } from '@foxford/ioc';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { v as DefineServiceOptions, H as ServiceDefinition, w as DefineViewModelOptions, V as ViewModelDefinition, u as DefineRepositoryOptions, B as RepositoryDefinition } from './types-COwVwgzE.cjs';
|
|
2
2
|
import { Token } from '@foxford/ioc';
|
|
3
3
|
|
|
4
4
|
/**
|
package/define.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { d as defineRepository, a as defineService, b as defineViewModel } from './define-repository-
|
|
2
|
-
export { D as DefineSlotOptions, S as SlotDefinition, d as defineSlot } from './define-slot-
|
|
3
|
-
export {
|
|
1
|
+
export { d as defineRepository, a as defineService, b as defineViewModel } from './define-repository-MDEWHqM7.cjs';
|
|
2
|
+
export { D as DefineSlotOptions, S as SlotDefinition, d as defineSlot } from './define-slot-BKvArA02.cjs';
|
|
3
|
+
export { u as DefineRepositoryOptions, v as DefineServiceOptions, w as DefineViewModelOptions, x as Definition, B as RepositoryDefinition, H as ServiceDefinition, I as SlotEntry, J as SlotRegistry, K as SlotRegistryToken, V as ViewModelDefinition } from './types-COwVwgzE.cjs';
|
|
4
4
|
import { Token, Container } from '@foxford/ioc';
|
|
5
5
|
import { HierarchicalLogger } from '@foxford/logger';
|
|
6
6
|
|
package/define.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { d as defineRepository, a as defineService, b as defineViewModel } from './define-repository-
|
|
2
|
-
export { D as DefineSlotOptions, S as SlotDefinition, d as defineSlot } from './define-slot-
|
|
3
|
-
export {
|
|
1
|
+
export { d as defineRepository, a as defineService, b as defineViewModel } from './define-repository-Ca62_YCy.js';
|
|
2
|
+
export { D as DefineSlotOptions, S as SlotDefinition, d as defineSlot } from './define-slot-Dil8Kr1A.js';
|
|
3
|
+
export { u as DefineRepositoryOptions, v as DefineServiceOptions, w as DefineViewModelOptions, x as Definition, B as RepositoryDefinition, H as ServiceDefinition, I as SlotEntry, J as SlotRegistry, K as SlotRegistryToken, V as ViewModelDefinition } from './types-COwVwgzE.js';
|
|
4
4
|
import { Token, Container } from '@foxford/ioc';
|
|
5
5
|
import { HierarchicalLogger } from '@foxford/logger';
|
|
6
6
|
|
package/index.cjs
CHANGED
|
@@ -589,28 +589,6 @@ function defineGuard(token, options) {
|
|
|
589
589
|
};
|
|
590
590
|
}
|
|
591
591
|
|
|
592
|
-
// src/define-host.ts
|
|
593
|
-
function defineHost(token, options = {}) {
|
|
594
|
-
var _a, _b, _c;
|
|
595
|
-
const eager = (_a = options.eager) != null ? _a : [];
|
|
596
|
-
const lazy = (_b = options.lazy) != null ? _b : [];
|
|
597
|
-
const guards = (_c = options.guards) != null ? _c : [];
|
|
598
|
-
const config = { eager, guards, lazy };
|
|
599
|
-
return {
|
|
600
|
-
__meta: { eager, guards, lazy, requires: [] },
|
|
601
|
-
__type: "host",
|
|
602
|
-
/**
|
|
603
|
-
* Регистрирует HostConfig как value в IoC-контейнере.
|
|
604
|
-
* Позволяет runtime получать конфигурацию приложения через контейнер.
|
|
605
|
-
* @param container - Контейнер для регистрации
|
|
606
|
-
*/
|
|
607
|
-
register(container) {
|
|
608
|
-
container.bind(token).toValue(config);
|
|
609
|
-
},
|
|
610
|
-
token
|
|
611
|
-
};
|
|
612
|
-
}
|
|
613
|
-
|
|
614
592
|
// src/define-extension.ts
|
|
615
593
|
|
|
616
594
|
function defineExtension(token, options = {}) {
|
|
@@ -739,5 +717,4 @@ function defineLayer(token, options) {
|
|
|
739
717
|
|
|
740
718
|
|
|
741
719
|
|
|
742
|
-
|
|
743
|
-
exports.ActivatableToken = _chunk5DJZZML5cjs.ActivatableToken; exports.ContainerManagerImpl = ContainerManagerImpl; exports.ContainerManagerToken = _chunk5DJZZML5cjs.ContainerManagerToken; exports.GuardRunnerImpl = GuardRunnerImpl; exports.GuardRunnerToken = _chunk5DJZZML5cjs.GuardRunnerToken; exports.NavigationManagerImpl = NavigationManagerImpl; exports.NavigationManagerToken = _chunk5DJZZML5cjs.NavigationManagerToken; exports.RequestContextToken = _chunk5DJZZML5cjs.RequestContextToken; exports.SlotRegistry = _chunk5DJZZML5cjs.SlotRegistry; exports.SlotRegistryToken = _chunk5DJZZML5cjs.SlotRegistryToken; exports.StateCache = StateCache; exports.StateRegistry = StateRegistry; exports.StateRegistryToken = _chunk5DJZZML5cjs.StateRegistryToken; exports.StateSerializerImpl = StateSerializerImpl; exports.StateSerializerToken = _chunk5DJZZML5cjs.StateSerializerToken; exports.ViewLayerToken = _chunkLJE7K7VDcjs.ViewLayerToken; exports.createCore = createCore; exports.defaultGlobalResolver = defaultGlobalResolver; exports.defineActionGuard = defineActionGuard; exports.defineExtension = defineExtension; exports.defineGuard = defineGuard; exports.defineHost = defineHost; exports.defineLayer = defineLayer; exports.defineLayout = defineLayout; exports.defineRepository = _chunk5DJZZML5cjs.defineRepository; exports.defineService = _chunk5DJZZML5cjs.defineService; exports.defineSlot = _chunk5DJZZML5cjs.defineSlot; exports.defineViewModel = _chunk5DJZZML5cjs.defineViewModel;
|
|
720
|
+
exports.ActivatableToken = _chunk5DJZZML5cjs.ActivatableToken; exports.ContainerManagerImpl = ContainerManagerImpl; exports.ContainerManagerToken = _chunk5DJZZML5cjs.ContainerManagerToken; exports.GuardRunnerImpl = GuardRunnerImpl; exports.GuardRunnerToken = _chunk5DJZZML5cjs.GuardRunnerToken; exports.NavigationManagerImpl = NavigationManagerImpl; exports.NavigationManagerToken = _chunk5DJZZML5cjs.NavigationManagerToken; exports.RequestContextToken = _chunk5DJZZML5cjs.RequestContextToken; exports.SlotRegistry = _chunk5DJZZML5cjs.SlotRegistry; exports.SlotRegistryToken = _chunk5DJZZML5cjs.SlotRegistryToken; exports.StateCache = StateCache; exports.StateRegistry = StateRegistry; exports.StateRegistryToken = _chunk5DJZZML5cjs.StateRegistryToken; exports.StateSerializerImpl = StateSerializerImpl; exports.StateSerializerToken = _chunk5DJZZML5cjs.StateSerializerToken; exports.ViewLayerToken = _chunkLJE7K7VDcjs.ViewLayerToken; exports.createCore = createCore; exports.defaultGlobalResolver = defaultGlobalResolver; exports.defineActionGuard = defineActionGuard; exports.defineExtension = defineExtension; exports.defineGuard = defineGuard; exports.defineLayer = defineLayer; exports.defineLayout = defineLayout; exports.defineRepository = _chunk5DJZZML5cjs.defineRepository; exports.defineService = _chunk5DJZZML5cjs.defineService; exports.defineSlot = _chunk5DJZZML5cjs.defineSlot; exports.defineViewModel = _chunk5DJZZML5cjs.defineViewModel;
|
package/index.d.cts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { C as Core, a as ContainerManager, R as RequestContext, G as GuardRunner, b as Guard, c as GuardResult, N as NavigationManager, d as NavigationEntry, e as NavigationInterceptor, D as Disposable, L as LeaveGuardResult, S as StateSerializer, f as DefineGuardOptions, g as GuardDefinition,
|
|
2
|
-
export {
|
|
1
|
+
import { C as Core, a as ContainerManager, R as RequestContext, G as GuardRunner, b as Guard, c as GuardResult, N as NavigationManager, d as NavigationEntry, e as NavigationInterceptor, D as Disposable, L as LeaveGuardResult, S as StateSerializer, f as DefineGuardOptions, g as GuardDefinition, E as ExtensionConfig, h as DefineExtensionOptions, i as ExtensionDefinition, A as ActionGuard, j as DefineActionGuardOptions, k as ActionGuardDefinition, l as LayoutConfig, m as DefineLayoutOptions, n as LayoutDefinition, o as LayerConfig, p as DefineLayerOptions, q as LayerDefinition } from './types-COwVwgzE.cjs';
|
|
2
|
+
export { r as Activatable, s as ActivatableToken, t as ContainerManagerToken, u as DefineRepositoryOptions, v as DefineServiceOptions, w as DefineViewModelOptions, x as Definition, y as GuardRunnerToken, z as NavigationManagerToken, B as RepositoryDefinition, F as RequestContextToken, H as ServiceDefinition, I as SlotEntry, J as SlotRegistry, K as SlotRegistryToken, M as StateCache, O as StateParticipant, P as StateRegistry, Q as StateRegistryToken, T as StateSerializerToken, V as ViewModelDefinition } from './types-COwVwgzE.cjs';
|
|
3
3
|
import { Container, Token } from '@foxford/ioc';
|
|
4
4
|
import { DefinitionResolver } from './adapter.cjs';
|
|
5
|
-
export { d as defineRepository, a as defineService, b as defineViewModel } from './define-repository-
|
|
6
|
-
export { D as DefineSlotOptions, S as SlotDefinition, d as defineSlot } from './define-slot-
|
|
7
|
-
export { V as ViewAdapter, a as ViewLayerDefinition, b as ViewLayerToken } from './view-adapter-
|
|
5
|
+
export { d as defineRepository, a as defineService, b as defineViewModel } from './define-repository-MDEWHqM7.cjs';
|
|
6
|
+
export { D as DefineSlotOptions, S as SlotDefinition, d as defineSlot } from './define-slot-BKvArA02.cjs';
|
|
7
|
+
export { V as ViewAdapter, a as ViewLayerDefinition, b as ViewLayerToken } from './view-adapter-zbHBVVqR.cjs';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Опции для создания Core Runtime.
|
|
@@ -270,27 +270,6 @@ declare const defaultGlobalResolver: DefinitionResolver;
|
|
|
270
270
|
*/
|
|
271
271
|
declare function defineGuard<Deps extends readonly Token<unknown>[] = readonly []>(token: Token<Guard>, options: DefineGuardOptions<Deps>): GuardDefinition;
|
|
272
272
|
|
|
273
|
-
/**
|
|
274
|
-
* Определяет конфигурацию приложения с декларативным списком сервисов и guards.
|
|
275
|
-
* Заменяет ручной вызов setupContainer() — декларирует, какие сервисы запускаются
|
|
276
|
-
* при старте (eager), какие — лениво (lazy), и какие guards применяются глобально.
|
|
277
|
-
* Регистрирует HostConfig-значение в IoC-контейнере.
|
|
278
|
-
*
|
|
279
|
-
* @param token - Токен для регистрации HostConfig в IoC
|
|
280
|
-
* @param options - Опции: eager, lazy, guards
|
|
281
|
-
* @returns HostDefinition с методом register(container)
|
|
282
|
-
*
|
|
283
|
-
* @example
|
|
284
|
-
* // app/app.ts
|
|
285
|
-
* export const app = defineHost(AppToken, {
|
|
286
|
-
* eager: [AuthServiceToken, NotificationServiceToken],
|
|
287
|
-
* lazy: [CartServiceToken],
|
|
288
|
-
* guards: [GlobalAuthGuardToken],
|
|
289
|
-
* })
|
|
290
|
-
* app.register(appContainer)
|
|
291
|
-
*/
|
|
292
|
-
declare function defineHost(token: Token<HostConfig>, options?: DefineHostOptions): HostDefinition;
|
|
293
|
-
|
|
294
273
|
/**
|
|
295
274
|
* Определяет app-scope расширение с lifecycle-хуками activate/deactivate.
|
|
296
275
|
* Extension — модуль с собственным lifecycle, живущий в скоупе приложения
|
|
@@ -384,4 +363,4 @@ declare function defineLayout(token: Token<LayoutConfig>, options?: DefineLayout
|
|
|
384
363
|
*/
|
|
385
364
|
declare function defineLayer(token: Token<LayerConfig>, options: DefineLayerOptions): LayerDefinition;
|
|
386
365
|
|
|
387
|
-
export { ActionGuard, ActionGuardDefinition, ContainerManager, ContainerManagerImpl, Core, type CreateCoreOptions, DefineActionGuardOptions, DefineExtensionOptions, DefineGuardOptions,
|
|
366
|
+
export { ActionGuard, ActionGuardDefinition, ContainerManager, ContainerManagerImpl, Core, type CreateCoreOptions, DefineActionGuardOptions, DefineExtensionOptions, DefineGuardOptions, DefineLayerOptions, DefineLayoutOptions, Disposable, ExtensionConfig, ExtensionDefinition, Guard, GuardDefinition, GuardResult, GuardRunner, GuardRunnerImpl, LayerConfig, LayerDefinition, LayoutConfig, LayoutDefinition, LeaveGuardResult, NavigationEntry, NavigationInterceptor, NavigationManager, NavigationManagerImpl, RequestContext, StateSerializer, StateSerializerImpl, createCore, defaultGlobalResolver, defineActionGuard, defineExtension, defineGuard, defineLayer, defineLayout };
|
package/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { C as Core, a as ContainerManager, R as RequestContext, G as GuardRunner, b as Guard, c as GuardResult, N as NavigationManager, d as NavigationEntry, e as NavigationInterceptor, D as Disposable, L as LeaveGuardResult, S as StateSerializer, f as DefineGuardOptions, g as GuardDefinition,
|
|
2
|
-
export {
|
|
1
|
+
import { C as Core, a as ContainerManager, R as RequestContext, G as GuardRunner, b as Guard, c as GuardResult, N as NavigationManager, d as NavigationEntry, e as NavigationInterceptor, D as Disposable, L as LeaveGuardResult, S as StateSerializer, f as DefineGuardOptions, g as GuardDefinition, E as ExtensionConfig, h as DefineExtensionOptions, i as ExtensionDefinition, A as ActionGuard, j as DefineActionGuardOptions, k as ActionGuardDefinition, l as LayoutConfig, m as DefineLayoutOptions, n as LayoutDefinition, o as LayerConfig, p as DefineLayerOptions, q as LayerDefinition } from './types-COwVwgzE.js';
|
|
2
|
+
export { r as Activatable, s as ActivatableToken, t as ContainerManagerToken, u as DefineRepositoryOptions, v as DefineServiceOptions, w as DefineViewModelOptions, x as Definition, y as GuardRunnerToken, z as NavigationManagerToken, B as RepositoryDefinition, F as RequestContextToken, H as ServiceDefinition, I as SlotEntry, J as SlotRegistry, K as SlotRegistryToken, M as StateCache, O as StateParticipant, P as StateRegistry, Q as StateRegistryToken, T as StateSerializerToken, V as ViewModelDefinition } from './types-COwVwgzE.js';
|
|
3
3
|
import { Container, Token } from '@foxford/ioc';
|
|
4
4
|
import { DefinitionResolver } from './adapter.js';
|
|
5
|
-
export { d as defineRepository, a as defineService, b as defineViewModel } from './define-repository-
|
|
6
|
-
export { D as DefineSlotOptions, S as SlotDefinition, d as defineSlot } from './define-slot-
|
|
7
|
-
export { V as ViewAdapter, a as ViewLayerDefinition, b as ViewLayerToken } from './view-adapter-
|
|
5
|
+
export { d as defineRepository, a as defineService, b as defineViewModel } from './define-repository-Ca62_YCy.js';
|
|
6
|
+
export { D as DefineSlotOptions, S as SlotDefinition, d as defineSlot } from './define-slot-Dil8Kr1A.js';
|
|
7
|
+
export { V as ViewAdapter, a as ViewLayerDefinition, b as ViewLayerToken } from './view-adapter-CSPKr2xy.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Опции для создания Core Runtime.
|
|
@@ -270,27 +270,6 @@ declare const defaultGlobalResolver: DefinitionResolver;
|
|
|
270
270
|
*/
|
|
271
271
|
declare function defineGuard<Deps extends readonly Token<unknown>[] = readonly []>(token: Token<Guard>, options: DefineGuardOptions<Deps>): GuardDefinition;
|
|
272
272
|
|
|
273
|
-
/**
|
|
274
|
-
* Определяет конфигурацию приложения с декларативным списком сервисов и guards.
|
|
275
|
-
* Заменяет ручной вызов setupContainer() — декларирует, какие сервисы запускаются
|
|
276
|
-
* при старте (eager), какие — лениво (lazy), и какие guards применяются глобально.
|
|
277
|
-
* Регистрирует HostConfig-значение в IoC-контейнере.
|
|
278
|
-
*
|
|
279
|
-
* @param token - Токен для регистрации HostConfig в IoC
|
|
280
|
-
* @param options - Опции: eager, lazy, guards
|
|
281
|
-
* @returns HostDefinition с методом register(container)
|
|
282
|
-
*
|
|
283
|
-
* @example
|
|
284
|
-
* // app/app.ts
|
|
285
|
-
* export const app = defineHost(AppToken, {
|
|
286
|
-
* eager: [AuthServiceToken, NotificationServiceToken],
|
|
287
|
-
* lazy: [CartServiceToken],
|
|
288
|
-
* guards: [GlobalAuthGuardToken],
|
|
289
|
-
* })
|
|
290
|
-
* app.register(appContainer)
|
|
291
|
-
*/
|
|
292
|
-
declare function defineHost(token: Token<HostConfig>, options?: DefineHostOptions): HostDefinition;
|
|
293
|
-
|
|
294
273
|
/**
|
|
295
274
|
* Определяет app-scope расширение с lifecycle-хуками activate/deactivate.
|
|
296
275
|
* Extension — модуль с собственным lifecycle, живущий в скоупе приложения
|
|
@@ -384,4 +363,4 @@ declare function defineLayout(token: Token<LayoutConfig>, options?: DefineLayout
|
|
|
384
363
|
*/
|
|
385
364
|
declare function defineLayer(token: Token<LayerConfig>, options: DefineLayerOptions): LayerDefinition;
|
|
386
365
|
|
|
387
|
-
export { ActionGuard, ActionGuardDefinition, ContainerManager, ContainerManagerImpl, Core, type CreateCoreOptions, DefineActionGuardOptions, DefineExtensionOptions, DefineGuardOptions,
|
|
366
|
+
export { ActionGuard, ActionGuardDefinition, ContainerManager, ContainerManagerImpl, Core, type CreateCoreOptions, DefineActionGuardOptions, DefineExtensionOptions, DefineGuardOptions, DefineLayerOptions, DefineLayoutOptions, Disposable, ExtensionConfig, ExtensionDefinition, Guard, GuardDefinition, GuardResult, GuardRunner, GuardRunnerImpl, LayerConfig, LayerDefinition, LayoutConfig, LayoutDefinition, LeaveGuardResult, NavigationEntry, NavigationInterceptor, NavigationManager, NavigationManagerImpl, RequestContext, StateSerializer, StateSerializerImpl, createCore, defaultGlobalResolver, defineActionGuard, defineExtension, defineGuard, defineLayer, defineLayout };
|
package/index.js
CHANGED
|
@@ -589,28 +589,6 @@ function defineGuard(token, options) {
|
|
|
589
589
|
};
|
|
590
590
|
}
|
|
591
591
|
|
|
592
|
-
// src/define-host.ts
|
|
593
|
-
function defineHost(token, options = {}) {
|
|
594
|
-
var _a, _b, _c;
|
|
595
|
-
const eager = (_a = options.eager) != null ? _a : [];
|
|
596
|
-
const lazy = (_b = options.lazy) != null ? _b : [];
|
|
597
|
-
const guards = (_c = options.guards) != null ? _c : [];
|
|
598
|
-
const config = { eager, guards, lazy };
|
|
599
|
-
return {
|
|
600
|
-
__meta: { eager, guards, lazy, requires: [] },
|
|
601
|
-
__type: "host",
|
|
602
|
-
/**
|
|
603
|
-
* Регистрирует HostConfig как value в IoC-контейнере.
|
|
604
|
-
* Позволяет runtime получать конфигурацию приложения через контейнер.
|
|
605
|
-
* @param container - Контейнер для регистрации
|
|
606
|
-
*/
|
|
607
|
-
register(container) {
|
|
608
|
-
container.bind(token).toValue(config);
|
|
609
|
-
},
|
|
610
|
-
token
|
|
611
|
-
};
|
|
612
|
-
}
|
|
613
|
-
|
|
614
592
|
// src/define-extension.ts
|
|
615
593
|
import { inject as inject2, Lifecycle as Lifecycle2 } from "@foxford/ioc";
|
|
616
594
|
function defineExtension(token, options = {}) {
|
|
@@ -733,7 +711,6 @@ export {
|
|
|
733
711
|
defineActionGuard,
|
|
734
712
|
defineExtension,
|
|
735
713
|
defineGuard,
|
|
736
|
-
defineHost,
|
|
737
714
|
defineLayer,
|
|
738
715
|
defineLayout,
|
|
739
716
|
defineRepository,
|
package/island/index.cjs
CHANGED
|
@@ -76,6 +76,18 @@ function activateIslandViewModels(container, descriptor) {
|
|
|
76
76
|
void ((_b = instance.activate) == null ? void 0 : _b.call(instance));
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
+
function resolveEagerUnits(container, descriptor) {
|
|
80
|
+
var _a;
|
|
81
|
+
for (const token of (_a = descriptor.eager) != null ? _a : []) {
|
|
82
|
+
const instance = container.resolve(token);
|
|
83
|
+
_chunkA6ZPAM6Zcjs.unitLogger.call(void 0, container, token.description).debug("eager: \u0435\u0434\u0438\u043D\u0438\u0446\u0430 \u043F\u043E\u0434\u043D\u044F\u0442\u0430 \u043F\u0440\u0438 \u043C\u043E\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438");
|
|
84
|
+
if (instance instanceof Promise) {
|
|
85
|
+
instance.catch(
|
|
86
|
+
(error) => _chunkA6ZPAM6Zcjs.unitLogger.call(void 0, container, token.description).error("eager: \u0435\u0434\u0438\u043D\u0438\u0446\u0430 \u043D\u0435 \u043F\u043E\u0434\u043D\u044F\u043B\u0430\u0441\u044C", error)
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
79
91
|
|
|
80
92
|
// src/island/slot-address.ts
|
|
81
93
|
function slotAddress(app, slot) {
|
|
@@ -122,6 +134,13 @@ function describeIsland(descriptor, denState) {
|
|
|
122
134
|
};
|
|
123
135
|
}
|
|
124
136
|
|
|
137
|
+
// src/island/routes.ts
|
|
138
|
+
function normalizeRoutes(routes = []) {
|
|
139
|
+
return routes.map((route) => typeof route === "string" ? { source: route } : route);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
125
144
|
|
|
126
145
|
|
|
127
146
|
|
|
@@ -134,4 +153,4 @@ function describeIsland(descriptor, denState) {
|
|
|
134
153
|
|
|
135
154
|
|
|
136
155
|
|
|
137
|
-
exports.ViewLayerToken = _chunkLJE7K7VDcjs.ViewLayerToken; exports.activateIslandViewModels = activateIslandViewModels; exports.createIslandContainer = createIslandContainer; exports.describeIsland = describeIsland; exports.getAppContainer = getAppContainer; exports.getIslandsSnapshot = getIslandsSnapshot; exports.hydrateIslandState = hydrateIslandState; exports.registerIsland = registerIsland; exports.resolveViewAdapter = _chunkLJE7K7VDcjs.resolveViewAdapter; exports.slotAddress = slotAddress; exports.subscribeIslands = subscribeIslands; exports.viewAdapterOf = _chunkLJE7K7VDcjs.viewAdapterOf;
|
|
156
|
+
exports.ViewLayerToken = _chunkLJE7K7VDcjs.ViewLayerToken; exports.activateIslandViewModels = activateIslandViewModels; exports.createIslandContainer = createIslandContainer; exports.describeIsland = describeIsland; exports.getAppContainer = getAppContainer; exports.getIslandsSnapshot = getIslandsSnapshot; exports.hydrateIslandState = hydrateIslandState; exports.normalizeRoutes = normalizeRoutes; exports.registerIsland = registerIsland; exports.resolveEagerUnits = resolveEagerUnits; exports.resolveViewAdapter = _chunkLJE7K7VDcjs.resolveViewAdapter; exports.slotAddress = slotAddress; exports.subscribeIslands = subscribeIslands; exports.viewAdapterOf = _chunkLJE7K7VDcjs.viewAdapterOf;
|
package/island/index.d.cts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { I as IslandDescriptor } from '../view-adapter-
|
|
2
|
-
export { V as ViewAdapter, a as ViewLayerDefinition, b as ViewLayerToken, r as resolveViewAdapter, v as viewAdapterOf } from '../view-adapter-
|
|
1
|
+
import { I as IslandDescriptor } from '../view-adapter-zbHBVVqR.cjs';
|
|
2
|
+
export { V as ViewAdapter, a as ViewLayerDefinition, b as ViewLayerToken, r as resolveViewAdapter, v as viewAdapterOf } from '../view-adapter-zbHBVVqR.cjs';
|
|
3
3
|
import { Container } from '@foxford/ioc';
|
|
4
|
-
import '../
|
|
5
|
-
import '../
|
|
4
|
+
import { g as GuardDefinition } from '../types-COwVwgzE.cjs';
|
|
5
|
+
import '../define-slot-BKvArA02.cjs';
|
|
6
6
|
|
|
7
7
|
/** Опции сборки контейнера острова. */
|
|
8
8
|
interface CreateIslandContainerOptions {
|
|
@@ -50,6 +50,20 @@ declare function hydrateIslandState(container: Container, descriptor: IslandDesc
|
|
|
50
50
|
* @param descriptor - Дескриптор острова
|
|
51
51
|
*/
|
|
52
52
|
declare function activateIslandViewModels(container: Container, descriptor: IslandDescriptor): void;
|
|
53
|
+
/**
|
|
54
|
+
* Поднимает единицы, объявленные `eager`, — те, что обязаны жить с загрузки, а не с первого
|
|
55
|
+
* резолва.
|
|
56
|
+
*
|
|
57
|
+
* Отдельным шагом, а не внутри сборки контейнера: контейнер строится и на сервере (в vike —
|
|
58
|
+
* прямо в `renderToString`), а сервер живёт один рендер, и поднимать там WS-подписку или
|
|
59
|
+
* прогрев кэша незачем — открытый сокет на каждый рендер это не «eager», это утечка. Зовёт
|
|
60
|
+
* адаптер в точке монтирования, которой на сервере просто нет; серверный прогрев у приложения
|
|
61
|
+
* называется `load`.
|
|
62
|
+
*
|
|
63
|
+
* @param container - Контейнер острова
|
|
64
|
+
* @param descriptor - Дескриптор острова
|
|
65
|
+
*/
|
|
66
|
+
declare function resolveEagerUnits(container: Container, descriptor: IslandDescriptor): void;
|
|
53
67
|
|
|
54
68
|
/** Запись живого острова: имя + фактический состав его контейнера. */
|
|
55
69
|
interface IslandRecord {
|
|
@@ -108,6 +122,30 @@ declare function getAppContainer(): Container;
|
|
|
108
122
|
*/
|
|
109
123
|
declare function slotAddress(app: string, slot: string): string;
|
|
110
124
|
|
|
125
|
+
/** Маршрут с политикой доступа. */
|
|
126
|
+
interface RouteDeclaration {
|
|
127
|
+
/** Regex-источник адреса (`'^/cabinet/billing'`, `'.*'`). */
|
|
128
|
+
source: string;
|
|
129
|
+
/**
|
|
130
|
+
* Guard-ы этого маршрута — поверх guard-ов приложения и хоста. Пусто — маршрут открыт
|
|
131
|
+
* настолько, насколько открыто само приложение.
|
|
132
|
+
*/
|
|
133
|
+
guards?: ReadonlyArray<GuardDefinition>;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Заявка на адрес: голая строка — публичный маршрут, объект — маршрут со своей политикой.
|
|
137
|
+
* Обе формы лежат в одном массиве, и порядок значим так же, как раньше: хост раздаёт путь
|
|
138
|
+
* первому заявившему, поэтому частные записи ставятся выше общих.
|
|
139
|
+
*/
|
|
140
|
+
type AppRoute = string | RouteDeclaration;
|
|
141
|
+
/**
|
|
142
|
+
* Приводит заявки к одной форме — чтобы хост и dev-инструменты не разбирали union каждый сам.
|
|
143
|
+
*
|
|
144
|
+
* @param routes - Заявки приложения (строки и/или записи)
|
|
145
|
+
* @returns Записи маршрутов в порядке объявления
|
|
146
|
+
*/
|
|
147
|
+
declare function normalizeRoutes(routes?: ReadonlyArray<AppRoute>): RouteDeclaration[];
|
|
148
|
+
|
|
111
149
|
/** Что приложение отдало серверным рендером. */
|
|
112
150
|
interface ServerRenderResult {
|
|
113
151
|
/** Разметка дерева — результат переданного рендера. */
|
|
@@ -155,4 +193,4 @@ type RenderTree<Tree = unknown> = (tree: Tree) => string;
|
|
|
155
193
|
*/
|
|
156
194
|
type ServerRender<Tree = unknown> = (tree: Tree, render: RenderTree<Tree>) => ServerRenderResult;
|
|
157
195
|
|
|
158
|
-
export { type CreateIslandContainerOptions, IslandDescriptor, type IslandRecord, type RenderTree, type ServerRender, type ServerRenderResult, activateIslandViewModels, createIslandContainer, describeIsland, getAppContainer, getIslandsSnapshot, hydrateIslandState, registerIsland, slotAddress, subscribeIslands };
|
|
196
|
+
export { type AppRoute, type CreateIslandContainerOptions, IslandDescriptor, type IslandRecord, type RenderTree, type RouteDeclaration, type ServerRender, type ServerRenderResult, activateIslandViewModels, createIslandContainer, describeIsland, getAppContainer, getIslandsSnapshot, hydrateIslandState, normalizeRoutes, registerIsland, resolveEagerUnits, slotAddress, subscribeIslands };
|
package/island/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { I as IslandDescriptor } from '../view-adapter-
|
|
2
|
-
export { V as ViewAdapter, a as ViewLayerDefinition, b as ViewLayerToken, r as resolveViewAdapter, v as viewAdapterOf } from '../view-adapter-
|
|
1
|
+
import { I as IslandDescriptor } from '../view-adapter-CSPKr2xy.js';
|
|
2
|
+
export { V as ViewAdapter, a as ViewLayerDefinition, b as ViewLayerToken, r as resolveViewAdapter, v as viewAdapterOf } from '../view-adapter-CSPKr2xy.js';
|
|
3
3
|
import { Container } from '@foxford/ioc';
|
|
4
|
-
import '../
|
|
5
|
-
import '../
|
|
4
|
+
import { g as GuardDefinition } from '../types-COwVwgzE.js';
|
|
5
|
+
import '../define-slot-Dil8Kr1A.js';
|
|
6
6
|
|
|
7
7
|
/** Опции сборки контейнера острова. */
|
|
8
8
|
interface CreateIslandContainerOptions {
|
|
@@ -50,6 +50,20 @@ declare function hydrateIslandState(container: Container, descriptor: IslandDesc
|
|
|
50
50
|
* @param descriptor - Дескриптор острова
|
|
51
51
|
*/
|
|
52
52
|
declare function activateIslandViewModels(container: Container, descriptor: IslandDescriptor): void;
|
|
53
|
+
/**
|
|
54
|
+
* Поднимает единицы, объявленные `eager`, — те, что обязаны жить с загрузки, а не с первого
|
|
55
|
+
* резолва.
|
|
56
|
+
*
|
|
57
|
+
* Отдельным шагом, а не внутри сборки контейнера: контейнер строится и на сервере (в vike —
|
|
58
|
+
* прямо в `renderToString`), а сервер живёт один рендер, и поднимать там WS-подписку или
|
|
59
|
+
* прогрев кэша незачем — открытый сокет на каждый рендер это не «eager», это утечка. Зовёт
|
|
60
|
+
* адаптер в точке монтирования, которой на сервере просто нет; серверный прогрев у приложения
|
|
61
|
+
* называется `load`.
|
|
62
|
+
*
|
|
63
|
+
* @param container - Контейнер острова
|
|
64
|
+
* @param descriptor - Дескриптор острова
|
|
65
|
+
*/
|
|
66
|
+
declare function resolveEagerUnits(container: Container, descriptor: IslandDescriptor): void;
|
|
53
67
|
|
|
54
68
|
/** Запись живого острова: имя + фактический состав его контейнера. */
|
|
55
69
|
interface IslandRecord {
|
|
@@ -108,6 +122,30 @@ declare function getAppContainer(): Container;
|
|
|
108
122
|
*/
|
|
109
123
|
declare function slotAddress(app: string, slot: string): string;
|
|
110
124
|
|
|
125
|
+
/** Маршрут с политикой доступа. */
|
|
126
|
+
interface RouteDeclaration {
|
|
127
|
+
/** Regex-источник адреса (`'^/cabinet/billing'`, `'.*'`). */
|
|
128
|
+
source: string;
|
|
129
|
+
/**
|
|
130
|
+
* Guard-ы этого маршрута — поверх guard-ов приложения и хоста. Пусто — маршрут открыт
|
|
131
|
+
* настолько, насколько открыто само приложение.
|
|
132
|
+
*/
|
|
133
|
+
guards?: ReadonlyArray<GuardDefinition>;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Заявка на адрес: голая строка — публичный маршрут, объект — маршрут со своей политикой.
|
|
137
|
+
* Обе формы лежат в одном массиве, и порядок значим так же, как раньше: хост раздаёт путь
|
|
138
|
+
* первому заявившему, поэтому частные записи ставятся выше общих.
|
|
139
|
+
*/
|
|
140
|
+
type AppRoute = string | RouteDeclaration;
|
|
141
|
+
/**
|
|
142
|
+
* Приводит заявки к одной форме — чтобы хост и dev-инструменты не разбирали union каждый сам.
|
|
143
|
+
*
|
|
144
|
+
* @param routes - Заявки приложения (строки и/или записи)
|
|
145
|
+
* @returns Записи маршрутов в порядке объявления
|
|
146
|
+
*/
|
|
147
|
+
declare function normalizeRoutes(routes?: ReadonlyArray<AppRoute>): RouteDeclaration[];
|
|
148
|
+
|
|
111
149
|
/** Что приложение отдало серверным рендером. */
|
|
112
150
|
interface ServerRenderResult {
|
|
113
151
|
/** Разметка дерева — результат переданного рендера. */
|
|
@@ -155,4 +193,4 @@ type RenderTree<Tree = unknown> = (tree: Tree) => string;
|
|
|
155
193
|
*/
|
|
156
194
|
type ServerRender<Tree = unknown> = (tree: Tree, render: RenderTree<Tree>) => ServerRenderResult;
|
|
157
195
|
|
|
158
|
-
export { type CreateIslandContainerOptions, IslandDescriptor, type IslandRecord, type RenderTree, type ServerRender, type ServerRenderResult, activateIslandViewModels, createIslandContainer, describeIsland, getAppContainer, getIslandsSnapshot, hydrateIslandState, registerIsland, slotAddress, subscribeIslands };
|
|
196
|
+
export { type AppRoute, type CreateIslandContainerOptions, IslandDescriptor, type IslandRecord, type RenderTree, type RouteDeclaration, type ServerRender, type ServerRenderResult, activateIslandViewModels, createIslandContainer, describeIsland, getAppContainer, getIslandsSnapshot, hydrateIslandState, normalizeRoutes, registerIsland, resolveEagerUnits, slotAddress, subscribeIslands };
|
package/island/index.js
CHANGED
|
@@ -76,6 +76,18 @@ function activateIslandViewModels(container, descriptor) {
|
|
|
76
76
|
void ((_b = instance.activate) == null ? void 0 : _b.call(instance));
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
+
function resolveEagerUnits(container, descriptor) {
|
|
80
|
+
var _a;
|
|
81
|
+
for (const token of (_a = descriptor.eager) != null ? _a : []) {
|
|
82
|
+
const instance = container.resolve(token);
|
|
83
|
+
unitLogger(container, token.description).debug("eager: \u0435\u0434\u0438\u043D\u0438\u0446\u0430 \u043F\u043E\u0434\u043D\u044F\u0442\u0430 \u043F\u0440\u0438 \u043C\u043E\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438");
|
|
84
|
+
if (instance instanceof Promise) {
|
|
85
|
+
instance.catch(
|
|
86
|
+
(error) => unitLogger(container, token.description).error("eager: \u0435\u0434\u0438\u043D\u0438\u0446\u0430 \u043D\u0435 \u043F\u043E\u0434\u043D\u044F\u043B\u0430\u0441\u044C", error)
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
79
91
|
|
|
80
92
|
// src/island/slot-address.ts
|
|
81
93
|
function slotAddress(app, slot) {
|
|
@@ -121,6 +133,11 @@ function describeIsland(descriptor, denState) {
|
|
|
121
133
|
viewModels: ((_b = descriptor.viewModels) != null ? _b : []).map((vm) => vm.token.description)
|
|
122
134
|
};
|
|
123
135
|
}
|
|
136
|
+
|
|
137
|
+
// src/island/routes.ts
|
|
138
|
+
function normalizeRoutes(routes = []) {
|
|
139
|
+
return routes.map((route) => typeof route === "string" ? { source: route } : route);
|
|
140
|
+
}
|
|
124
141
|
export {
|
|
125
142
|
ViewLayerToken,
|
|
126
143
|
activateIslandViewModels,
|
|
@@ -129,7 +146,9 @@ export {
|
|
|
129
146
|
getAppContainer,
|
|
130
147
|
getIslandsSnapshot,
|
|
131
148
|
hydrateIslandState,
|
|
149
|
+
normalizeRoutes,
|
|
132
150
|
registerIsland,
|
|
151
|
+
resolveEagerUnits,
|
|
133
152
|
resolveViewAdapter,
|
|
134
153
|
slotAddress,
|
|
135
154
|
subscribeIslands,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foxford/den",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Den — декларативный метафреймворк Foxford (core runtime)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"foxford",
|
|
@@ -63,10 +63,10 @@
|
|
|
63
63
|
"chunk-WBHHHICS.js",
|
|
64
64
|
"chunk-WRQC6BVJ.js",
|
|
65
65
|
"chunk-XHYR3SGG.cjs",
|
|
66
|
-
"define-repository-
|
|
67
|
-
"define-repository-
|
|
68
|
-
"define-slot-
|
|
69
|
-
"define-slot-
|
|
66
|
+
"define-repository-Ca62_YCy.d.ts",
|
|
67
|
+
"define-repository-MDEWHqM7.d.cts",
|
|
68
|
+
"define-slot-BKvArA02.d.cts",
|
|
69
|
+
"define-slot-Dil8Kr1A.d.ts",
|
|
70
70
|
"define.cjs",
|
|
71
71
|
"define.d.cts",
|
|
72
72
|
"define.d.ts",
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
"index.js",
|
|
78
78
|
"island",
|
|
79
79
|
"package.json",
|
|
80
|
-
"types-
|
|
81
|
-
"types-
|
|
82
|
-
"view-adapter-
|
|
83
|
-
"view-adapter-
|
|
80
|
+
"types-COwVwgzE.d.cts",
|
|
81
|
+
"types-COwVwgzE.d.ts",
|
|
82
|
+
"view-adapter-CSPKr2xy.d.ts",
|
|
83
|
+
"view-adapter-zbHBVVqR.d.cts"
|
|
84
84
|
],
|
|
85
|
-
"sha": "
|
|
85
|
+
"sha": "d6b3073",
|
|
86
86
|
"scripts": {}
|
|
87
87
|
}
|
|
@@ -169,36 +169,6 @@ interface DefineGuardOptions<Deps extends readonly Token<unknown>[] = readonly [
|
|
|
169
169
|
*/
|
|
170
170
|
check?: (params: Record<string, string>) => GuardResult | Promise<GuardResult>;
|
|
171
171
|
}
|
|
172
|
-
/**
|
|
173
|
-
* Конфигурация приложения, регистрируемая в IoC-контейнере.
|
|
174
|
-
*/
|
|
175
|
-
interface HostConfig {
|
|
176
|
-
/** Сервисы, инициализируемые немедленно при старте */
|
|
177
|
-
readonly eager: readonly Token<unknown>[];
|
|
178
|
-
/** Сервисы, инициализируемые лениво (по требованию) */
|
|
179
|
-
readonly lazy: readonly Token<unknown>[];
|
|
180
|
-
/** Глобальные guards, применяемые ко всем страницам */
|
|
181
|
-
readonly guards: readonly Token<Guard>[];
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* HostDefinition — результат вызова defineHost.
|
|
185
|
-
* Декларирует конфигурацию приложения: eager/lazy сервисы, глобальные guards.
|
|
186
|
-
*/
|
|
187
|
-
interface HostDefinition extends Definition<HostConfig> {
|
|
188
|
-
/** Дискриминатор типа */
|
|
189
|
-
readonly __type: 'host';
|
|
190
|
-
/** Метаданные определения */
|
|
191
|
-
readonly __meta: {
|
|
192
|
-
/** Приложение не имеет requires-зависимостей */
|
|
193
|
-
readonly requires: readonly [];
|
|
194
|
-
/** Eager-сервисы */
|
|
195
|
-
readonly eager: readonly Token<unknown>[];
|
|
196
|
-
/** Lazy-сервисы */
|
|
197
|
-
readonly lazy: readonly Token<unknown>[];
|
|
198
|
-
/** Глобальные guards */
|
|
199
|
-
readonly guards: readonly Token<Guard>[];
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
172
|
/**
|
|
203
173
|
* RepositoryDefinition — результат вызова defineRepository.
|
|
204
174
|
* Описывает репозиторий уровня данных с IoC-биндингом.
|
|
@@ -220,15 +190,6 @@ interface RepositoryDefinition<T, Deps extends readonly Token<unknown>[]> extend
|
|
|
220
190
|
readonly scope: 'app' | 'request';
|
|
221
191
|
};
|
|
222
192
|
}
|
|
223
|
-
/** Опции для defineHost */
|
|
224
|
-
interface DefineHostOptions {
|
|
225
|
-
/** Сервисы, инициализируемые немедленно при старте приложения */
|
|
226
|
-
readonly eager?: readonly Token<unknown>[];
|
|
227
|
-
/** Сервисы, инициализируемые лениво (по требованию) */
|
|
228
|
-
readonly lazy?: readonly Token<unknown>[];
|
|
229
|
-
/** Глобальные guards, применяемые ко всем страницам */
|
|
230
|
-
readonly guards?: readonly Token<Guard>[];
|
|
231
|
-
}
|
|
232
193
|
/**
|
|
233
194
|
* Опции для defineRepository
|
|
234
195
|
* @template Deps - Кортеж токенов зависимостей
|
|
@@ -527,14 +488,28 @@ interface RequestContext {
|
|
|
527
488
|
}
|
|
528
489
|
/**
|
|
529
490
|
* Результат проверки guard.
|
|
530
|
-
*
|
|
531
|
-
* - `{ allowed:
|
|
491
|
+
*
|
|
492
|
+
* - `{ allowed: true }` — доступ разрешён;
|
|
493
|
+
* - `{ allowed: false, redirect }` — запрещён, увести по адресу;
|
|
494
|
+
* - `{ allowed: false }` — запрещён, и вести некуда: хост отвечает отказом (403).
|
|
495
|
+
*
|
|
496
|
+
* `redirect` необязателен именно ради второго случая: «нельзя, но формы входа для этого нет»
|
|
497
|
+
* иначе типом не выражалось, и приходилось выдумывать адрес.
|
|
498
|
+
*
|
|
499
|
+
* `escalate` касается только приложений, ВСТРОЕННЫХ в чужое место: по умолчанию отказ убирает
|
|
500
|
+
* из дерева их одних, а страница живёт. Поднять отказ до всей страницы может понадобиться —
|
|
501
|
+
* скажем, сессия протухла, и показывать соседей смысла нет, — но это исключение, поэтому
|
|
502
|
+
* заявляется явно. У владельца адреса флаг ничего не меняет: его отказ и так отказ странице.
|
|
503
|
+
* Последнее слово за хостом: он владеет документом и решает, чем отвечать.
|
|
532
504
|
*/
|
|
533
505
|
type GuardResult = {
|
|
534
506
|
allowed: true;
|
|
535
507
|
} | {
|
|
536
508
|
allowed: false;
|
|
537
|
-
|
|
509
|
+
/** Куда увести. Нет — хост отвечает отказом сам (403). */
|
|
510
|
+
redirect?: string;
|
|
511
|
+
/** Поднять отказ встроенного приложения до всей страницы. */
|
|
512
|
+
escalate?: boolean;
|
|
538
513
|
};
|
|
539
514
|
/**
|
|
540
515
|
* Guard — функция проверки доступа к странице.
|
|
@@ -799,4 +774,4 @@ declare const ActivatableToken: Token<Activatable>;
|
|
|
799
774
|
*/
|
|
800
775
|
declare const RequestContextToken: Token<RequestContext>;
|
|
801
776
|
|
|
802
|
-
export { type ActionGuard as A,
|
|
777
|
+
export { type ActionGuard as A, type RepositoryDefinition as B, type Core as C, type Disposable as D, type ExtensionConfig as E, RequestContextToken as F, type GuardRunner as G, type ServiceDefinition as H, type SlotEntry as I, SlotRegistry as J, SlotRegistryToken as K, type LeaveGuardResult as L, StateCache as M, type NavigationManager as N, type StateParticipant as O, StateRegistry as P, StateRegistryToken as Q, type RequestContext as R, type StateSerializer as S, StateSerializerToken as T, type ViewModelDefinition as V, type ContainerManager as a, type Guard as b, type GuardResult as c, type NavigationEntry as d, type NavigationInterceptor as e, type DefineGuardOptions as f, type GuardDefinition as g, type DefineExtensionOptions as h, type ExtensionDefinition as i, type DefineActionGuardOptions as j, type ActionGuardDefinition as k, type LayoutConfig as l, type DefineLayoutOptions as m, type LayoutDefinition as n, type LayerConfig as o, type DefineLayerOptions as p, type LayerDefinition as q, type Activatable as r, ActivatableToken as s, ContainerManagerToken as t, type DefineRepositoryOptions as u, type DefineServiceOptions as v, type DefineViewModelOptions as w, type Definition as x, GuardRunnerToken as y, NavigationManagerToken as z };
|
|
@@ -169,36 +169,6 @@ interface DefineGuardOptions<Deps extends readonly Token<unknown>[] = readonly [
|
|
|
169
169
|
*/
|
|
170
170
|
check?: (params: Record<string, string>) => GuardResult | Promise<GuardResult>;
|
|
171
171
|
}
|
|
172
|
-
/**
|
|
173
|
-
* Конфигурация приложения, регистрируемая в IoC-контейнере.
|
|
174
|
-
*/
|
|
175
|
-
interface HostConfig {
|
|
176
|
-
/** Сервисы, инициализируемые немедленно при старте */
|
|
177
|
-
readonly eager: readonly Token<unknown>[];
|
|
178
|
-
/** Сервисы, инициализируемые лениво (по требованию) */
|
|
179
|
-
readonly lazy: readonly Token<unknown>[];
|
|
180
|
-
/** Глобальные guards, применяемые ко всем страницам */
|
|
181
|
-
readonly guards: readonly Token<Guard>[];
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* HostDefinition — результат вызова defineHost.
|
|
185
|
-
* Декларирует конфигурацию приложения: eager/lazy сервисы, глобальные guards.
|
|
186
|
-
*/
|
|
187
|
-
interface HostDefinition extends Definition<HostConfig> {
|
|
188
|
-
/** Дискриминатор типа */
|
|
189
|
-
readonly __type: 'host';
|
|
190
|
-
/** Метаданные определения */
|
|
191
|
-
readonly __meta: {
|
|
192
|
-
/** Приложение не имеет requires-зависимостей */
|
|
193
|
-
readonly requires: readonly [];
|
|
194
|
-
/** Eager-сервисы */
|
|
195
|
-
readonly eager: readonly Token<unknown>[];
|
|
196
|
-
/** Lazy-сервисы */
|
|
197
|
-
readonly lazy: readonly Token<unknown>[];
|
|
198
|
-
/** Глобальные guards */
|
|
199
|
-
readonly guards: readonly Token<Guard>[];
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
172
|
/**
|
|
203
173
|
* RepositoryDefinition — результат вызова defineRepository.
|
|
204
174
|
* Описывает репозиторий уровня данных с IoC-биндингом.
|
|
@@ -220,15 +190,6 @@ interface RepositoryDefinition<T, Deps extends readonly Token<unknown>[]> extend
|
|
|
220
190
|
readonly scope: 'app' | 'request';
|
|
221
191
|
};
|
|
222
192
|
}
|
|
223
|
-
/** Опции для defineHost */
|
|
224
|
-
interface DefineHostOptions {
|
|
225
|
-
/** Сервисы, инициализируемые немедленно при старте приложения */
|
|
226
|
-
readonly eager?: readonly Token<unknown>[];
|
|
227
|
-
/** Сервисы, инициализируемые лениво (по требованию) */
|
|
228
|
-
readonly lazy?: readonly Token<unknown>[];
|
|
229
|
-
/** Глобальные guards, применяемые ко всем страницам */
|
|
230
|
-
readonly guards?: readonly Token<Guard>[];
|
|
231
|
-
}
|
|
232
193
|
/**
|
|
233
194
|
* Опции для defineRepository
|
|
234
195
|
* @template Deps - Кортеж токенов зависимостей
|
|
@@ -527,14 +488,28 @@ interface RequestContext {
|
|
|
527
488
|
}
|
|
528
489
|
/**
|
|
529
490
|
* Результат проверки guard.
|
|
530
|
-
*
|
|
531
|
-
* - `{ allowed:
|
|
491
|
+
*
|
|
492
|
+
* - `{ allowed: true }` — доступ разрешён;
|
|
493
|
+
* - `{ allowed: false, redirect }` — запрещён, увести по адресу;
|
|
494
|
+
* - `{ allowed: false }` — запрещён, и вести некуда: хост отвечает отказом (403).
|
|
495
|
+
*
|
|
496
|
+
* `redirect` необязателен именно ради второго случая: «нельзя, но формы входа для этого нет»
|
|
497
|
+
* иначе типом не выражалось, и приходилось выдумывать адрес.
|
|
498
|
+
*
|
|
499
|
+
* `escalate` касается только приложений, ВСТРОЕННЫХ в чужое место: по умолчанию отказ убирает
|
|
500
|
+
* из дерева их одних, а страница живёт. Поднять отказ до всей страницы может понадобиться —
|
|
501
|
+
* скажем, сессия протухла, и показывать соседей смысла нет, — но это исключение, поэтому
|
|
502
|
+
* заявляется явно. У владельца адреса флаг ничего не меняет: его отказ и так отказ странице.
|
|
503
|
+
* Последнее слово за хостом: он владеет документом и решает, чем отвечать.
|
|
532
504
|
*/
|
|
533
505
|
type GuardResult = {
|
|
534
506
|
allowed: true;
|
|
535
507
|
} | {
|
|
536
508
|
allowed: false;
|
|
537
|
-
|
|
509
|
+
/** Куда увести. Нет — хост отвечает отказом сам (403). */
|
|
510
|
+
redirect?: string;
|
|
511
|
+
/** Поднять отказ встроенного приложения до всей страницы. */
|
|
512
|
+
escalate?: boolean;
|
|
538
513
|
};
|
|
539
514
|
/**
|
|
540
515
|
* Guard — функция проверки доступа к странице.
|
|
@@ -799,4 +774,4 @@ declare const ActivatableToken: Token<Activatable>;
|
|
|
799
774
|
*/
|
|
800
775
|
declare const RequestContextToken: Token<RequestContext>;
|
|
801
776
|
|
|
802
|
-
export { type ActionGuard as A,
|
|
777
|
+
export { type ActionGuard as A, type RepositoryDefinition as B, type Core as C, type Disposable as D, type ExtensionConfig as E, RequestContextToken as F, type GuardRunner as G, type ServiceDefinition as H, type SlotEntry as I, SlotRegistry as J, SlotRegistryToken as K, type LeaveGuardResult as L, StateCache as M, type NavigationManager as N, type StateParticipant as O, StateRegistry as P, StateRegistryToken as Q, type RequestContext as R, type StateSerializer as S, StateSerializerToken as T, type ViewModelDefinition as V, type ContainerManager as a, type Guard as b, type GuardResult as c, type NavigationEntry as d, type NavigationInterceptor as e, type DefineGuardOptions as f, type GuardDefinition as g, type DefineExtensionOptions as h, type ExtensionDefinition as i, type DefineActionGuardOptions as j, type ActionGuardDefinition as k, type LayoutConfig as l, type DefineLayoutOptions as m, type LayoutDefinition as n, type LayerConfig as o, type DefineLayerOptions as p, type LayerDefinition as q, type Activatable as r, ActivatableToken as s, ContainerManagerToken as t, type DefineRepositoryOptions as u, type DefineServiceOptions as v, type DefineViewModelOptions as w, type Definition as x, GuardRunnerToken as y, NavigationManagerToken as z };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as SlotDefinition } from './define-slot-
|
|
2
|
-
import {
|
|
1
|
+
import { S as SlotDefinition } from './define-slot-Dil8Kr1A.js';
|
|
2
|
+
import { q as LayerDefinition, x as Definition, o as LayerConfig } from './types-COwVwgzE.js';
|
|
3
3
|
import { Token, Container } from '@foxford/ioc';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -45,6 +45,18 @@ interface IslandDescriptor {
|
|
|
45
45
|
* ездит через denState.
|
|
46
46
|
*/
|
|
47
47
|
viewModels?: ReadonlyArray<Definition<unknown>>;
|
|
48
|
+
/**
|
|
49
|
+
* Единицы, которые обязаны жить с загрузки, а не с первого резолва.
|
|
50
|
+
*
|
|
51
|
+
* Регистрация ленива по природе: не спросили — не создали. Обычно это то, что нужно, но
|
|
52
|
+
* сервису, который сам на что-то подписывается или греет кэш, ждать первого потребителя
|
|
53
|
+
* незачем. Токены — из тех же `units`.
|
|
54
|
+
*
|
|
55
|
+
* Поднимаются при МОНТИРОВАНИИ острова, а не при сборке контейнера: контейнер строится и на
|
|
56
|
+
* сервере, а сервер живёт один рендер — открытая там WS-подписка это не «eager», а утечка.
|
|
57
|
+
* Серверный прогрев у приложения называется `load`.
|
|
58
|
+
*/
|
|
59
|
+
eager?: ReadonlyArray<Token<unknown>>;
|
|
48
60
|
/**
|
|
49
61
|
* Места расширения приложения: ключ — локальное имя слота, значение — `defineSlot`.
|
|
50
62
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as SlotDefinition } from './define-slot-
|
|
2
|
-
import {
|
|
1
|
+
import { S as SlotDefinition } from './define-slot-BKvArA02.cjs';
|
|
2
|
+
import { q as LayerDefinition, x as Definition, o as LayerConfig } from './types-COwVwgzE.cjs';
|
|
3
3
|
import { Token, Container } from '@foxford/ioc';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -45,6 +45,18 @@ interface IslandDescriptor {
|
|
|
45
45
|
* ездит через denState.
|
|
46
46
|
*/
|
|
47
47
|
viewModels?: ReadonlyArray<Definition<unknown>>;
|
|
48
|
+
/**
|
|
49
|
+
* Единицы, которые обязаны жить с загрузки, а не с первого резолва.
|
|
50
|
+
*
|
|
51
|
+
* Регистрация ленива по природе: не спросили — не создали. Обычно это то, что нужно, но
|
|
52
|
+
* сервису, который сам на что-то подписывается или греет кэш, ждать первого потребителя
|
|
53
|
+
* незачем. Токены — из тех же `units`.
|
|
54
|
+
*
|
|
55
|
+
* Поднимаются при МОНТИРОВАНИИ острова, а не при сборке контейнера: контейнер строится и на
|
|
56
|
+
* сервере, а сервер живёт один рендер — открытая там WS-подписка это не «eager», а утечка.
|
|
57
|
+
* Серверный прогрев у приложения называется `load`.
|
|
58
|
+
*/
|
|
59
|
+
eager?: ReadonlyArray<Token<unknown>>;
|
|
48
60
|
/**
|
|
49
61
|
* Места расширения приложения: ключ — локальное имя слота, значение — `defineSlot`.
|
|
50
62
|
*
|