@inglorious/web 6.4.0 → 6.4.1
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/package.json +6 -6
- package/src/mount.js +32 -28
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inglorious/web",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.1",
|
|
4
4
|
"description": "A new web framework that leverages the power of the Inglorious Store combined with the performance and simplicity of lit-html.",
|
|
5
5
|
"author": "Matteo Antony Mistretta <antony.mistretta@gmail.com> (https://ingloriouscoderz.it)",
|
|
6
6
|
"contributors": [
|
|
@@ -104,17 +104,17 @@
|
|
|
104
104
|
},
|
|
105
105
|
"sideEffects": false,
|
|
106
106
|
"dependencies": {
|
|
107
|
+
"@inglorious/utils": "3.8.0",
|
|
107
108
|
"@lit-labs/ssr-client": "^1.1.8",
|
|
108
|
-
"lit-html": "^3.3.1"
|
|
109
|
-
"@inglorious/utils": "3.8.0"
|
|
109
|
+
"lit-html": "^3.3.1"
|
|
110
110
|
},
|
|
111
111
|
"peerDependencies": {
|
|
112
|
-
"@inglorious/store": "11.0.
|
|
112
|
+
"@inglorious/store": "11.0.1"
|
|
113
113
|
},
|
|
114
114
|
"devDependencies": {
|
|
115
|
+
"@inglorious/eslint-config": "1.1.2",
|
|
115
116
|
"prettier": "^3.6.2",
|
|
116
|
-
"vitest": "^4.0.15"
|
|
117
|
-
"@inglorious/eslint-config": "1.1.2"
|
|
117
|
+
"vitest": "^4.0.15"
|
|
118
118
|
},
|
|
119
119
|
"engines": {
|
|
120
120
|
"node": ">= 22"
|
package/src/mount.js
CHANGED
|
@@ -5,32 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
import { html, render } from "lit-html"
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* Root-level error boundary. Unlike the per-entity `withErrorBoundary`
|
|
10
|
-
* decorator (which isolates a single failing type's render), this catches
|
|
11
|
-
* errors thrown by the *root* render function itself — before any entity is
|
|
12
|
-
* reached (e.g. a missing router entity), or by an unguarded child.
|
|
13
|
-
*
|
|
14
|
-
* Without it, a throwing root render takes down the whole app: on the initial
|
|
15
|
-
* pass it aborts the mount, and inside the store subscription it throws out of
|
|
16
|
-
* the notify loop on every subsequent update, freezing the UI. Catching it
|
|
17
|
-
* keeps the subscription alive so one bad tick can't kill the app.
|
|
18
|
-
*
|
|
19
|
-
* @param {(api: Api) => TemplateResult | null} renderFn
|
|
20
|
-
* @param {Api} api
|
|
21
|
-
* @param {(error: unknown, api: Api) => void} onError
|
|
22
|
-
* @param {((error: unknown, api: Api) => TemplateResult | null) | undefined} fallback
|
|
23
|
-
* @returns {{ ok: true, template: TemplateResult | null } | { ok: false, fallback: TemplateResult | null }}
|
|
24
|
-
*/
|
|
25
|
-
function renderRoot(renderFn, api, onError, fallback) {
|
|
26
|
-
try {
|
|
27
|
-
return { ok: true, template: renderFn(api) }
|
|
28
|
-
} catch (error) {
|
|
29
|
-
onError(error, api)
|
|
30
|
-
return { ok: false, fallback: fallback ? fallback(error, api) : null }
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
8
|
/**
|
|
35
9
|
* Mounts a lit-html template to the DOM and subscribes to a store for re-rendering.
|
|
36
10
|
* @param {Store} store - The application state store.
|
|
@@ -44,12 +18,16 @@ function renderRoot(renderFn, api, onError, fallback) {
|
|
|
44
18
|
* @returns {() => void} An unsubscribe function
|
|
45
19
|
*/
|
|
46
20
|
export async function mount(store, renderFn, element, options = {}) {
|
|
47
|
-
const {
|
|
21
|
+
const {
|
|
22
|
+
onError = defaultOnError,
|
|
23
|
+
fallback,
|
|
24
|
+
hydrate: allowHydrate = true,
|
|
25
|
+
} = options
|
|
48
26
|
|
|
49
27
|
const api = { ...store._api }
|
|
50
28
|
api.render = createRender(api)
|
|
51
29
|
|
|
52
|
-
const shouldHydrate = element.hasChildNodes()
|
|
30
|
+
const shouldHydrate = allowHydrate && element.hasChildNodes()
|
|
53
31
|
|
|
54
32
|
// If we need to hydrate, load the heavy lifting only now
|
|
55
33
|
if (shouldHydrate) {
|
|
@@ -78,6 +56,32 @@ export async function mount(store, renderFn, element, options = {}) {
|
|
|
78
56
|
return unsubscribe
|
|
79
57
|
}
|
|
80
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Root-level error boundary. Unlike the per-entity `withErrorBoundary`
|
|
61
|
+
* decorator (which isolates a single failing type's render), this catches
|
|
62
|
+
* errors thrown by the *root* render function itself — before any entity is
|
|
63
|
+
* reached (e.g. a missing router entity), or by an unguarded child.
|
|
64
|
+
*
|
|
65
|
+
* Without it, a throwing root render takes down the whole app: on the initial
|
|
66
|
+
* pass it aborts the mount, and inside the store subscription it throws out of
|
|
67
|
+
* the notify loop on every subsequent update, freezing the UI. Catching it
|
|
68
|
+
* keeps the subscription alive so one bad tick can't kill the app.
|
|
69
|
+
*
|
|
70
|
+
* @param {(api: Api) => TemplateResult | null} renderFn
|
|
71
|
+
* @param {Api} api
|
|
72
|
+
* @param {(error: unknown, api: Api) => void} onError
|
|
73
|
+
* @param {((error: unknown, api: Api) => TemplateResult | null) | undefined} fallback
|
|
74
|
+
* @returns {{ ok: true, template: TemplateResult | null } | { ok: false, fallback: TemplateResult | null }}
|
|
75
|
+
*/
|
|
76
|
+
function renderRoot(renderFn, api, onError, fallback) {
|
|
77
|
+
try {
|
|
78
|
+
return { ok: true, template: renderFn(api) }
|
|
79
|
+
} catch (error) {
|
|
80
|
+
onError(error, api)
|
|
81
|
+
return { ok: false, fallback: fallback ? fallback(error, api) : null }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
81
85
|
/**
|
|
82
86
|
* Default root-error handler: log without taking the app down.
|
|
83
87
|
* @param {unknown} error - The error thrown by the root render function.
|