@unhead/dom 0.2.5 → 0.2.6

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 ADDED
@@ -0,0 +1,12 @@
1
+ # @unhead/dom
2
+
3
+ ## Install
4
+
5
+ ```bash
6
+ # yarn add @unhead/dom
7
+ npm install @unhead/dom
8
+ ```
9
+
10
+ ## Documentation
11
+
12
+ See the [@unhead/dom](https://unhead.harlanzw.com/guide/getting-started/how-it-works#unheaddom) for how this works.
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
- await head.hooks.callHook("dom:beforeRender", { head, tags, document: dom });
50
- for (const tag of tags) {
51
- const renderCtx = { tag, document: dom, head };
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(delayedFn, head, options = {}) {
107
+ async function debouncedRenderDOMHead(head, options = {}) {
103
108
  function doDomUpdate() {
104
109
  exports.domUpdatePromise = null;
105
110
  return renderDOMHead(head, options);
106
111
  }
107
- return exports.domUpdatePromise = exports.domUpdatePromise || new Promise((resolve) => delayedFn(() => resolve(doDomUpdate())));
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 { HeadClient } from '@unhead/schema';
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 HeadClient<any>>(head: T, options?: RenderDomHeadOptions): Promise<void>;
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 HeadClient<any>>(delayedFn: (fn: () => void) => void, head: T, options?: RenderDomHeadOptions): Promise<void>;
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
- await head.hooks.callHook("dom:beforeRender", { head, tags, document: dom });
48
- for (const tag of tags) {
49
- const renderCtx = { tag, document: dom, head };
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(delayedFn, head, options = {}) {
105
+ async function debouncedRenderDOMHead(head, options = {}) {
101
106
  function doDomUpdate() {
102
107
  domUpdatePromise = null;
103
108
  return renderDOMHead(head, options);
104
109
  }
105
- return domUpdatePromise = domUpdatePromise || new Promise((resolve) => delayedFn(() => resolve(doDomUpdate())));
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.5",
4
+ "version": "0.2.6",
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.5"
33
+ "@unhead/schema": "0.2.6"
34
34
  },
35
35
  "devDependencies": {
36
36
  "zhead": "1.0.0-beta.10"