@foxford/den 1.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/README.mdx ADDED
@@ -0,0 +1,9 @@
1
+ ---
2
+ title: Den
3
+ ---
4
+
5
+ # @foxford/den
6
+
7
+ Den — декларативный метафреймворк Foxford (core runtime).
8
+
9
+ Содержит core runtime: define* API, lifecycle, container orchestration, NavigationManager.
package/adapter.cjs ADDED
@@ -0,0 +1,43 @@
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);
19
+
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
+ });
package/adapter.d.cts ADDED
@@ -0,0 +1,73 @@
1
+ export { R as RequestContext } from './types-B4Arep3V.cjs';
2
+ import { Token } from '@foxford/ioc';
3
+
4
+ /**
5
+ * Протокол денстейта — сериализованное состояние участников контейнера для SSR.
6
+ *
7
+ * Plain object, ключ записи = `token.description` (см. `StateSerializer`). Протокол
8
+ * ИДЕНТИЧЕН между Vike- и Next-адаптерами, поэтому состояние обменивается между
9
+ * ядром и любым хостом без конвертации.
10
+ */
11
+ type DenState = Record<string, unknown>;
12
+ /**
13
+ * Инжектируемая стратегия резолва `define*`-дескриптора во view.
14
+ *
15
+ * Дескриптор (`defineViewModel` и т.п.) сам НЕ знает, откуда брать инстанс —
16
+ * стратегию ставит активный адаптер через `installResolver()`. Возврат — union
17
+ * `T | Promise<T>`, чтобы покрыть оба хоста одним контрактом:
18
+ *
19
+ * - **Vike** — async/global: резолвит из глобального контейнера с подъёмом по
20
+ * parent-chain; при промахе (page-scope VM ещё не зарегистрирован) отдаёт
21
+ * pending `Promise`, а view рендерит `null`.
22
+ * - **Next** — sync/island: резолвит из контейнера ТЕКУЩЕГО острова через
23
+ * React-контекст (сам резолвер — хук). Всегда возвращает `T` синхронно —
24
+ * это допустимое подмножество union.
25
+ */
26
+ type DefinitionResolver = <T>(token: Token<T>) => T | Promise<T>;
27
+ /**
28
+ * Владелец клиентской навигации (честная граница — навигация per-host).
29
+ *
30
+ * - `'den-owned'` — навигацией владеет ядро (SPA-движок `NavigationManager`),
31
+ * хост лишь исполняет переход. Режим Vike.
32
+ * - `'host-owned'` — навигацией владеет хост (роутер Next); ядро в клиент
33
+ * `NavigationManager` не тянет. Режим Next.
34
+ */
35
+ type NavigationOwnership = 'den-owned' | 'host-owned';
36
+ /**
37
+ * Порт host-адаптера.
38
+ *
39
+ * Формализует ДВА пункта, которые у адаптера уникальны и обязаны быть объявлены
40
+ * явно. Всё остальное расшаривается напрямую через `Core` (контейнеры,
41
+ * guards, `stateSerializer`) и не требует переабстракции в порту:
42
+ *
43
+ * - `navigation` — кто владеет клиентской навигацией (см. `NavigationOwnership`).
44
+ * - `installResolver()` — как резолвить `define*` во view (см. `DefinitionResolver`).
45
+ *
46
+ * Драйвинг (порядок и момент вызова менеджеров ядра) по природе host-специфичен
47
+ * (Vike — через хуки, Next — через RSC + island-mount) и НЕ входит в порт.
48
+ */
49
+ interface HostAdapter {
50
+ /** Владелец клиентской навигации. */
51
+ readonly navigation: NavigationOwnership;
52
+ /**
53
+ * Устанавливает стратегию резолва `define*` во view через `installResolver()`.
54
+ * Вызывается один раз при инициализации адаптера.
55
+ */
56
+ installResolver(): void;
57
+ }
58
+ /**
59
+ * Устанавливает стратегию резолва `define*`. Вызывает активный адаптер при
60
+ * инициализации. Единственный механизм резолва — общего «дефолта» нет,
61
+ * чтобы адаптеры не перезаписывали стратегии друг друга.
62
+ * @param resolver - Стратегия резолва (см. `DefinitionResolver`)
63
+ */
64
+ declare function installResolver(resolver: DefinitionResolver): void;
65
+ /**
66
+ * Резолвит `define*`-дескриптор через стратегию активного адаптера.
67
+ * Вызывается из `.resolve()`/`.use()` дескриптора во view.
68
+ * @param token - Токен резолвимой сущности
69
+ * @throws Если адаптер не вызвал `installResolver()`
70
+ */
71
+ declare function resolveDefinition<T>(token: Token<T>): T | Promise<T>;
72
+
73
+ export { type DefinitionResolver, type DenState, type HostAdapter, type NavigationOwnership, installResolver, resolveDefinition };
package/adapter.d.ts ADDED
@@ -0,0 +1,73 @@
1
+ export { R as RequestContext } from './types-B4Arep3V.js';
2
+ import { Token } from '@foxford/ioc';
3
+
4
+ /**
5
+ * Протокол денстейта — сериализованное состояние участников контейнера для SSR.
6
+ *
7
+ * Plain object, ключ записи = `token.description` (см. `StateSerializer`). Протокол
8
+ * ИДЕНТИЧЕН между Vike- и Next-адаптерами, поэтому состояние обменивается между
9
+ * ядром и любым хостом без конвертации.
10
+ */
11
+ type DenState = Record<string, unknown>;
12
+ /**
13
+ * Инжектируемая стратегия резолва `define*`-дескриптора во view.
14
+ *
15
+ * Дескриптор (`defineViewModel` и т.п.) сам НЕ знает, откуда брать инстанс —
16
+ * стратегию ставит активный адаптер через `installResolver()`. Возврат — union
17
+ * `T | Promise<T>`, чтобы покрыть оба хоста одним контрактом:
18
+ *
19
+ * - **Vike** — async/global: резолвит из глобального контейнера с подъёмом по
20
+ * parent-chain; при промахе (page-scope VM ещё не зарегистрирован) отдаёт
21
+ * pending `Promise`, а view рендерит `null`.
22
+ * - **Next** — sync/island: резолвит из контейнера ТЕКУЩЕГО острова через
23
+ * React-контекст (сам резолвер — хук). Всегда возвращает `T` синхронно —
24
+ * это допустимое подмножество union.
25
+ */
26
+ type DefinitionResolver = <T>(token: Token<T>) => T | Promise<T>;
27
+ /**
28
+ * Владелец клиентской навигации (честная граница — навигация per-host).
29
+ *
30
+ * - `'den-owned'` — навигацией владеет ядро (SPA-движок `NavigationManager`),
31
+ * хост лишь исполняет переход. Режим Vike.
32
+ * - `'host-owned'` — навигацией владеет хост (роутер Next); ядро в клиент
33
+ * `NavigationManager` не тянет. Режим Next.
34
+ */
35
+ type NavigationOwnership = 'den-owned' | 'host-owned';
36
+ /**
37
+ * Порт host-адаптера.
38
+ *
39
+ * Формализует ДВА пункта, которые у адаптера уникальны и обязаны быть объявлены
40
+ * явно. Всё остальное расшаривается напрямую через `Core` (контейнеры,
41
+ * guards, `stateSerializer`) и не требует переабстракции в порту:
42
+ *
43
+ * - `navigation` — кто владеет клиентской навигацией (см. `NavigationOwnership`).
44
+ * - `installResolver()` — как резолвить `define*` во view (см. `DefinitionResolver`).
45
+ *
46
+ * Драйвинг (порядок и момент вызова менеджеров ядра) по природе host-специфичен
47
+ * (Vike — через хуки, Next — через RSC + island-mount) и НЕ входит в порт.
48
+ */
49
+ interface HostAdapter {
50
+ /** Владелец клиентской навигации. */
51
+ readonly navigation: NavigationOwnership;
52
+ /**
53
+ * Устанавливает стратегию резолва `define*` во view через `installResolver()`.
54
+ * Вызывается один раз при инициализации адаптера.
55
+ */
56
+ installResolver(): void;
57
+ }
58
+ /**
59
+ * Устанавливает стратегию резолва `define*`. Вызывает активный адаптер при
60
+ * инициализации. Единственный механизм резолва — общего «дефолта» нет,
61
+ * чтобы адаптеры не перезаписывали стратегии друг друга.
62
+ * @param resolver - Стратегия резолва (см. `DefinitionResolver`)
63
+ */
64
+ declare function installResolver(resolver: DefinitionResolver): void;
65
+ /**
66
+ * Резолвит `define*`-дескриптор через стратегию активного адаптера.
67
+ * Вызывается из `.resolve()`/`.use()` дескриптора во view.
68
+ * @param token - Токен резолвимой сущности
69
+ * @throws Если адаптер не вызвал `installResolver()`
70
+ */
71
+ declare function resolveDefinition<T>(token: Token<T>): T | Promise<T>;
72
+
73
+ export { type DefinitionResolver, type DenState, type HostAdapter, type NavigationOwnership, installResolver, resolveDefinition };
package/adapter.mjs ADDED
@@ -0,0 +1,17 @@
1
+ // 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
+ export {
15
+ installResolver,
16
+ resolveDefinition
17
+ };