@unhead/dom 0.2.5 → 0.2.7
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.md +12 -0
- package/dist/index.cjs +11 -5
- package/dist/index.d.ts +5 -3
- package/dist/index.mjs +11 -5
- package/package.json +2 -2
package/README.md
ADDED
package/dist/index.cjs
CHANGED
|
@@ -46,10 +46,15 @@ function setAttributesWithSideEffects(head, $el, entry, tag) {
|
|
|
46
46
|
async function renderDOMHead(head, options = {}) {
|
|
47
47
|
const dom = options.document || window.document;
|
|
48
48
|
const tags = await head.resolveTags();
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
const context = { shouldRender: true, tags };
|
|
50
|
+
await head.hooks.callHook("dom:beforeRender", context);
|
|
51
|
+
if (!context.shouldRender)
|
|
52
|
+
return;
|
|
53
|
+
for (const tag of context.tags) {
|
|
54
|
+
const renderCtx = { shouldRender: true, tag };
|
|
52
55
|
await head.hooks.callHook("dom:renderTag", renderCtx);
|
|
56
|
+
if (!renderCtx.shouldRender)
|
|
57
|
+
return;
|
|
53
58
|
const entry = head.headEntries().find((e) => e._i === Number(tag._e));
|
|
54
59
|
if (tag.tag === "title" && tag.children) {
|
|
55
60
|
dom.title = tag.children;
|
|
@@ -99,12 +104,13 @@ async function renderDOMHead(head, options = {}) {
|
|
|
99
104
|
head._flushQueuedSideEffects();
|
|
100
105
|
}
|
|
101
106
|
exports.domUpdatePromise = null;
|
|
102
|
-
async function debouncedRenderDOMHead(
|
|
107
|
+
async function debouncedRenderDOMHead(head, options = {}) {
|
|
103
108
|
function doDomUpdate() {
|
|
104
109
|
exports.domUpdatePromise = null;
|
|
105
110
|
return renderDOMHead(head, options);
|
|
106
111
|
}
|
|
107
|
-
|
|
112
|
+
const delayFn = options.delayFn || ((fn) => setTimeout(fn, 25));
|
|
113
|
+
return exports.domUpdatePromise = exports.domUpdatePromise || new Promise((resolve) => delayFn(() => resolve(doDomUpdate())));
|
|
108
114
|
}
|
|
109
115
|
|
|
110
116
|
exports.debouncedRenderDOMHead = debouncedRenderDOMHead;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Unhead } from '@unhead/schema';
|
|
2
2
|
|
|
3
3
|
interface RenderDomHeadOptions {
|
|
4
4
|
/**
|
|
@@ -9,7 +9,7 @@ interface RenderDomHeadOptions {
|
|
|
9
9
|
/**
|
|
10
10
|
* Render the head tags to the DOM.
|
|
11
11
|
*/
|
|
12
|
-
declare function renderDOMHead<T extends
|
|
12
|
+
declare function renderDOMHead<T extends Unhead<any>>(head: T, options?: RenderDomHeadOptions): Promise<void>;
|
|
13
13
|
/**
|
|
14
14
|
* Global instance of the dom update promise. Used for debounding head updates.
|
|
15
15
|
*/
|
|
@@ -17,6 +17,8 @@ declare let domUpdatePromise: Promise<void> | null;
|
|
|
17
17
|
/**
|
|
18
18
|
* Queue a debounced update of the DOM head.
|
|
19
19
|
*/
|
|
20
|
-
declare function debouncedRenderDOMHead<T extends
|
|
20
|
+
declare function debouncedRenderDOMHead<T extends Unhead<any>>(head: T, options?: RenderDomHeadOptions & {
|
|
21
|
+
delayFn?: (fn: () => void) => void;
|
|
22
|
+
}): Promise<void>;
|
|
21
23
|
|
|
22
24
|
export { RenderDomHeadOptions, debouncedRenderDOMHead, domUpdatePromise, renderDOMHead };
|
package/dist/index.mjs
CHANGED
|
@@ -44,10 +44,15 @@ function setAttributesWithSideEffects(head, $el, entry, tag) {
|
|
|
44
44
|
async function renderDOMHead(head, options = {}) {
|
|
45
45
|
const dom = options.document || window.document;
|
|
46
46
|
const tags = await head.resolveTags();
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
const context = { shouldRender: true, tags };
|
|
48
|
+
await head.hooks.callHook("dom:beforeRender", context);
|
|
49
|
+
if (!context.shouldRender)
|
|
50
|
+
return;
|
|
51
|
+
for (const tag of context.tags) {
|
|
52
|
+
const renderCtx = { shouldRender: true, tag };
|
|
50
53
|
await head.hooks.callHook("dom:renderTag", renderCtx);
|
|
54
|
+
if (!renderCtx.shouldRender)
|
|
55
|
+
return;
|
|
51
56
|
const entry = head.headEntries().find((e) => e._i === Number(tag._e));
|
|
52
57
|
if (tag.tag === "title" && tag.children) {
|
|
53
58
|
dom.title = tag.children;
|
|
@@ -97,12 +102,13 @@ async function renderDOMHead(head, options = {}) {
|
|
|
97
102
|
head._flushQueuedSideEffects();
|
|
98
103
|
}
|
|
99
104
|
let domUpdatePromise = null;
|
|
100
|
-
async function debouncedRenderDOMHead(
|
|
105
|
+
async function debouncedRenderDOMHead(head, options = {}) {
|
|
101
106
|
function doDomUpdate() {
|
|
102
107
|
domUpdatePromise = null;
|
|
103
108
|
return renderDOMHead(head, options);
|
|
104
109
|
}
|
|
105
|
-
|
|
110
|
+
const delayFn = options.delayFn || ((fn) => setTimeout(fn, 25));
|
|
111
|
+
return domUpdatePromise = domUpdatePromise || new Promise((resolve) => delayFn(() => resolve(doDomUpdate())));
|
|
106
112
|
}
|
|
107
113
|
|
|
108
114
|
export { debouncedRenderDOMHead, domUpdatePromise, renderDOMHead };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unhead/dom",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.7",
|
|
5
5
|
"packageManager": "pnpm@7.14.0",
|
|
6
6
|
"author": "Harlan Wilton <harlan@harlanzw.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"dist"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@unhead/schema": "0.2.
|
|
33
|
+
"@unhead/schema": "0.2.7"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"zhead": "1.0.0-beta.10"
|