@foxford/den 3.2.5 → 3.3.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 +3 -1
- package/island/index.cjs +18 -1
- package/island/index.d.cts +33 -1
- package/island/index.d.ts +33 -1
- package/island/index.js +17 -0
- package/package.json +2 -2
package/README.mdx
CHANGED
|
@@ -305,7 +305,9 @@ export default defineAppConfig({
|
|
|
305
305
|
| `@foxford/den` | рантайм, `define*`, менеджеры контейнеров и состояния |
|
|
306
306
|
| `@foxford/den/define` | те же `define*` без сайд-эффекта установки резолвера |
|
|
307
307
|
| `@foxford/den/adapter` | шов резолва для адаптеров хостов |
|
|
308
|
-
| `@foxford/den/island` | остров: жизненный цикл, шов `renderApp`, порт `ViewAdapter` |
|
|
308
|
+
| `@foxford/den/island` | остров: жизненный цикл, шов `renderApp`, порт `ViewAdapter`, очередь клиентских падений (`reportIslandError`) |
|
|
309
|
+
|
|
310
|
+
|
|
309
311
|
| `@foxford/den/serve` | сетевой транспорт: `serveApp`, `appPlugin` |
|
|
310
312
|
| `@foxford/den/build` | конфиг приложения и сборка: `defineAppConfig`, `buildApp` |
|
|
311
313
|
| `@foxford/den/bin` | точка входа команды `den` |
|
package/island/index.cjs
CHANGED
|
@@ -23,6 +23,21 @@ require('../chunk-A6ZPAM6Z.cjs');
|
|
|
23
23
|
|
|
24
24
|
var _chunkT5QVCXVBcjs = require('../chunk-T5QVCXVB.cjs');
|
|
25
25
|
|
|
26
|
+
// src/island/errors.ts
|
|
27
|
+
var ISLAND_ERRORS_KEY = "__DEN_ISLAND_ERRORS__";
|
|
28
|
+
function reportIslandError(error, context) {
|
|
29
|
+
var _a;
|
|
30
|
+
if (typeof window === "undefined") {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const w = window;
|
|
34
|
+
const queue = (_a = w[ISLAND_ERRORS_KEY]) != null ? _a : [];
|
|
35
|
+
if (w[ISLAND_ERRORS_KEY] === void 0) {
|
|
36
|
+
w[ISLAND_ERRORS_KEY] = queue;
|
|
37
|
+
}
|
|
38
|
+
queue.push({ context, error });
|
|
39
|
+
}
|
|
40
|
+
|
|
26
41
|
// src/island/navigate.ts
|
|
27
42
|
var NAVIGATE_EVENT = "den:navigate";
|
|
28
43
|
function navigateIsland(node, route) {
|
|
@@ -122,4 +137,6 @@ function describeIsland(descriptor, denState) {
|
|
|
122
137
|
|
|
123
138
|
|
|
124
139
|
|
|
125
|
-
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
exports.DOCUMENT_EVENT = DOCUMENT_EVENT; exports.ISLAND_ERRORS_KEY = ISLAND_ERRORS_KEY; exports.NAVIGATE_EVENT = NAVIGATE_EVENT; exports.ViewLayerToken = _chunkXOJ2VWX4cjs.ViewLayerToken; exports.activateIslandViewModels = _chunkXDM6J4LJcjs.activateIslandViewModels; exports.collectDocumentContribution = _chunkXDM6J4LJcjs.collectDocumentContribution; exports.collectIslandState = _chunkXDM6J4LJcjs.collectIslandState; exports.createIslandContainer = _chunkXDM6J4LJcjs.createIslandContainer; exports.describeIsland = describeIsland; exports.getAppContainer = _chunkXDM6J4LJcjs.getAppContainer; exports.getIslandsSnapshot = getIslandsSnapshot; exports.hydrateIslandState = _chunkXDM6J4LJcjs.hydrateIslandState; exports.isDocumentSource = _chunkXDM6J4LJcjs.isDocumentSource; exports.matchRoute = _chunkXDM6J4LJcjs.matchRoute; exports.navigateIsland = navigateIsland; exports.normalizeRoutes = _chunkXDM6J4LJcjs.normalizeRoutes; exports.onIslandDocument = onIslandDocument; exports.onIslandNavigate = onIslandNavigate; exports.pathPattern = _chunkXDM6J4LJcjs.pathPattern; exports.publishIslandDocument = publishIslandDocument; exports.registerIsland = registerIsland; exports.renderApp = _chunkXDM6J4LJcjs.renderApp; exports.reportIslandError = reportIslandError; exports.resolveEagerUnits = _chunkXDM6J4LJcjs.resolveEagerUnits; exports.resolveViewAdapter = _chunkXOJ2VWX4cjs.resolveViewAdapter; exports.slotAddress = slotAddress; exports.subscribeIslands = subscribeIslands; exports.viewAdapterOf = _chunkXOJ2VWX4cjs.viewAdapterOf;
|
package/island/index.d.cts
CHANGED
|
@@ -69,6 +69,38 @@ interface DocumentSource {
|
|
|
69
69
|
*/
|
|
70
70
|
declare function isDocumentSource(value: unknown): value is DocumentSource;
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Клиентские падения острова между бандлами.
|
|
74
|
+
*
|
|
75
|
+
* Сетевое приложение оживает своим бандлом, хост — своим. У каждого своя копия модулей,
|
|
76
|
+
* module-level очередь в одной не видна в другой. Шина — массив на `window`.
|
|
77
|
+
*
|
|
78
|
+
* Остров кладёт исходное исключение через {@link reportIslandError}. Хост после Sentry.init
|
|
79
|
+
* сам сливает backlog и при необходимости перехватывает `.push` того же массива. Обёртки
|
|
80
|
+
* нет: стек и тип остаются приложению.
|
|
81
|
+
*/
|
|
82
|
+
/** Фаза, на которой остров упал. */
|
|
83
|
+
type IslandErrorPhase = 'render' | 'hydrate' | 'navigate';
|
|
84
|
+
/** Контекст падения острова. */
|
|
85
|
+
interface IslandErrorContext {
|
|
86
|
+
/** Имя приложения из дескриптора. */
|
|
87
|
+
appName: string;
|
|
88
|
+
phase: IslandErrorPhase;
|
|
89
|
+
}
|
|
90
|
+
/** Одна запись очереди: исходное исключение и контекст. */
|
|
91
|
+
interface IslandErrorReport {
|
|
92
|
+
error: unknown;
|
|
93
|
+
context: IslandErrorContext;
|
|
94
|
+
}
|
|
95
|
+
/** Ключ массива на `window` — обязан совпадать у хоста и remote. */
|
|
96
|
+
declare const ISLAND_ERRORS_KEY = "__DEN_ISLAND_ERRORS__";
|
|
97
|
+
/**
|
|
98
|
+
* Кладёт исходное исключение в очередь на `window`.
|
|
99
|
+
*
|
|
100
|
+
* Хост разгребает массив сам (после инициализации наблюдаемости).
|
|
101
|
+
*/
|
|
102
|
+
declare function reportIslandError(error: unknown, context: IslandErrorContext): void;
|
|
103
|
+
|
|
72
104
|
/**
|
|
73
105
|
* Адрес, по которому рендерится остров.
|
|
74
106
|
*
|
|
@@ -324,4 +356,4 @@ declare function getAppContainer(): Container;
|
|
|
324
356
|
*/
|
|
325
357
|
declare function slotAddress(app: string, slot: string): string;
|
|
326
358
|
|
|
327
|
-
export { AppAssets, type CreateIslandContainerOptions, DOCUMENT_EVENT, type DocumentContribution, type DocumentHead, type DocumentSource, IslandDescriptor, type IslandRecord, type IslandRoute, NAVIGATE_EVENT, type RenderAppRequest, type RenderAppResult, activateIslandViewModels, collectDocumentContribution, collectIslandState, createIslandContainer, describeIsland, getAppContainer, getIslandsSnapshot, hydrateIslandState, isDocumentSource, navigateIsland, onIslandDocument, onIslandNavigate, publishIslandDocument, registerIsland, renderApp, resolveEagerUnits, slotAddress, subscribeIslands };
|
|
359
|
+
export { AppAssets, type CreateIslandContainerOptions, DOCUMENT_EVENT, type DocumentContribution, type DocumentHead, type DocumentSource, ISLAND_ERRORS_KEY, IslandDescriptor, type IslandErrorContext, type IslandErrorPhase, type IslandErrorReport, type IslandRecord, type IslandRoute, NAVIGATE_EVENT, type RenderAppRequest, type RenderAppResult, activateIslandViewModels, collectDocumentContribution, collectIslandState, createIslandContainer, describeIsland, getAppContainer, getIslandsSnapshot, hydrateIslandState, isDocumentSource, navigateIsland, onIslandDocument, onIslandNavigate, publishIslandDocument, registerIsland, renderApp, reportIslandError, resolveEagerUnits, slotAddress, subscribeIslands };
|
package/island/index.d.ts
CHANGED
|
@@ -69,6 +69,38 @@ interface DocumentSource {
|
|
|
69
69
|
*/
|
|
70
70
|
declare function isDocumentSource(value: unknown): value is DocumentSource;
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Клиентские падения острова между бандлами.
|
|
74
|
+
*
|
|
75
|
+
* Сетевое приложение оживает своим бандлом, хост — своим. У каждого своя копия модулей,
|
|
76
|
+
* module-level очередь в одной не видна в другой. Шина — массив на `window`.
|
|
77
|
+
*
|
|
78
|
+
* Остров кладёт исходное исключение через {@link reportIslandError}. Хост после Sentry.init
|
|
79
|
+
* сам сливает backlog и при необходимости перехватывает `.push` того же массива. Обёртки
|
|
80
|
+
* нет: стек и тип остаются приложению.
|
|
81
|
+
*/
|
|
82
|
+
/** Фаза, на которой остров упал. */
|
|
83
|
+
type IslandErrorPhase = 'render' | 'hydrate' | 'navigate';
|
|
84
|
+
/** Контекст падения острова. */
|
|
85
|
+
interface IslandErrorContext {
|
|
86
|
+
/** Имя приложения из дескриптора. */
|
|
87
|
+
appName: string;
|
|
88
|
+
phase: IslandErrorPhase;
|
|
89
|
+
}
|
|
90
|
+
/** Одна запись очереди: исходное исключение и контекст. */
|
|
91
|
+
interface IslandErrorReport {
|
|
92
|
+
error: unknown;
|
|
93
|
+
context: IslandErrorContext;
|
|
94
|
+
}
|
|
95
|
+
/** Ключ массива на `window` — обязан совпадать у хоста и remote. */
|
|
96
|
+
declare const ISLAND_ERRORS_KEY = "__DEN_ISLAND_ERRORS__";
|
|
97
|
+
/**
|
|
98
|
+
* Кладёт исходное исключение в очередь на `window`.
|
|
99
|
+
*
|
|
100
|
+
* Хост разгребает массив сам (после инициализации наблюдаемости).
|
|
101
|
+
*/
|
|
102
|
+
declare function reportIslandError(error: unknown, context: IslandErrorContext): void;
|
|
103
|
+
|
|
72
104
|
/**
|
|
73
105
|
* Адрес, по которому рендерится остров.
|
|
74
106
|
*
|
|
@@ -324,4 +356,4 @@ declare function getAppContainer(): Container;
|
|
|
324
356
|
*/
|
|
325
357
|
declare function slotAddress(app: string, slot: string): string;
|
|
326
358
|
|
|
327
|
-
export { AppAssets, type CreateIslandContainerOptions, DOCUMENT_EVENT, type DocumentContribution, type DocumentHead, type DocumentSource, IslandDescriptor, type IslandRecord, type IslandRoute, NAVIGATE_EVENT, type RenderAppRequest, type RenderAppResult, activateIslandViewModels, collectDocumentContribution, collectIslandState, createIslandContainer, describeIsland, getAppContainer, getIslandsSnapshot, hydrateIslandState, isDocumentSource, navigateIsland, onIslandDocument, onIslandNavigate, publishIslandDocument, registerIsland, renderApp, resolveEagerUnits, slotAddress, subscribeIslands };
|
|
359
|
+
export { AppAssets, type CreateIslandContainerOptions, DOCUMENT_EVENT, type DocumentContribution, type DocumentHead, type DocumentSource, ISLAND_ERRORS_KEY, IslandDescriptor, type IslandErrorContext, type IslandErrorPhase, type IslandErrorReport, type IslandRecord, type IslandRoute, NAVIGATE_EVENT, type RenderAppRequest, type RenderAppResult, activateIslandViewModels, collectDocumentContribution, collectIslandState, createIslandContainer, describeIsland, getAppContainer, getIslandsSnapshot, hydrateIslandState, isDocumentSource, navigateIsland, onIslandDocument, onIslandNavigate, publishIslandDocument, registerIsland, renderApp, reportIslandError, resolveEagerUnits, slotAddress, subscribeIslands };
|
package/island/index.js
CHANGED
|
@@ -23,6 +23,21 @@ import {
|
|
|
23
23
|
__spreadValues
|
|
24
24
|
} from "../chunk-6FNC3XMI.js";
|
|
25
25
|
|
|
26
|
+
// src/island/errors.ts
|
|
27
|
+
var ISLAND_ERRORS_KEY = "__DEN_ISLAND_ERRORS__";
|
|
28
|
+
function reportIslandError(error, context) {
|
|
29
|
+
var _a;
|
|
30
|
+
if (typeof window === "undefined") {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const w = window;
|
|
34
|
+
const queue = (_a = w[ISLAND_ERRORS_KEY]) != null ? _a : [];
|
|
35
|
+
if (w[ISLAND_ERRORS_KEY] === void 0) {
|
|
36
|
+
w[ISLAND_ERRORS_KEY] = queue;
|
|
37
|
+
}
|
|
38
|
+
queue.push({ context, error });
|
|
39
|
+
}
|
|
40
|
+
|
|
26
41
|
// src/island/navigate.ts
|
|
27
42
|
var NAVIGATE_EVENT = "den:navigate";
|
|
28
43
|
function navigateIsland(node, route) {
|
|
@@ -97,6 +112,7 @@ function describeIsland(descriptor, denState) {
|
|
|
97
112
|
}
|
|
98
113
|
export {
|
|
99
114
|
DOCUMENT_EVENT,
|
|
115
|
+
ISLAND_ERRORS_KEY,
|
|
100
116
|
NAVIGATE_EVENT,
|
|
101
117
|
ViewLayerToken,
|
|
102
118
|
activateIslandViewModels,
|
|
@@ -117,6 +133,7 @@ export {
|
|
|
117
133
|
publishIslandDocument,
|
|
118
134
|
registerIsland,
|
|
119
135
|
renderApp,
|
|
136
|
+
reportIslandError,
|
|
120
137
|
resolveEagerUnits,
|
|
121
138
|
resolveViewAdapter,
|
|
122
139
|
slotAddress,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foxford/den",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Den — декларативный метафреймворк Foxford (core runtime)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"foxford",
|
|
@@ -134,6 +134,6 @@
|
|
|
134
134
|
"view-adapter-BV62bdhM.d.ts",
|
|
135
135
|
"view-adapter-DF1me25J.d.cts"
|
|
136
136
|
],
|
|
137
|
-
"sha": "
|
|
137
|
+
"sha": "28782dc",
|
|
138
138
|
"scripts": {}
|
|
139
139
|
}
|