unhead 0.6.2 → 0.6.3

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/dist/index.cjs CHANGED
@@ -2,14 +2,6 @@
2
2
 
3
3
  const hookable = require('hookable');
4
4
 
5
- const HasElementTags = [
6
- "base",
7
- "meta",
8
- "link",
9
- "style",
10
- "script",
11
- "noscript"
12
- ];
13
5
  const ValidHeadTags = [
14
6
  "title",
15
7
  "titleTemplate",
@@ -413,11 +405,21 @@ const ProvideTagHashPlugin = () => {
413
405
  hooks: {
414
406
  "tag:normalise": (ctx) => {
415
407
  const { tag, entry } = ctx;
416
- if (!HasElementTags.includes(tag.tag))
408
+ const isDynamic = typeof tag.props._dynamic !== "undefined";
409
+ if (!HasElementTags.includes(tag.tag) || !tag.key)
417
410
  return;
418
- const isBrowser = IsBrowser || getActiveHead()?.resolvedOptions?.document;
419
- if (!isBrowser && entry._m === "server" && tag.key)
420
- tag.props["data-h-key"] = tag._d;
411
+ tag._hash = hashCode(JSON.stringify({ tag: tag.tag, key: tag.key }));
412
+ if (IsBrowser || getActiveHead()?.resolvedOptions?.document)
413
+ return;
414
+ if (entry._m === "server" || isDynamic) {
415
+ tag.props[`data-h-${tag._hash}`] = "";
416
+ }
417
+ },
418
+ "tags:resolve": (ctx) => {
419
+ ctx.tags = ctx.tags.map((t) => {
420
+ delete t.props._dynamic;
421
+ return t;
422
+ });
421
423
  }
422
424
  }
423
425
  });
@@ -504,6 +506,20 @@ const EventHandlersPlugin = () => {
504
506
  function asArray(value) {
505
507
  return Array.isArray(value) ? value : [value];
506
508
  }
509
+ function hashCode(s) {
510
+ let h = 9;
511
+ for (let i = 0; i < s.length; )
512
+ h = Math.imul(h ^ s.charCodeAt(i++), 9 ** 9);
513
+ return ((h ^ h >>> 9) + 65536).toString(16).substring(1, 8).toLowerCase();
514
+ }
515
+ const HasElementTags = [
516
+ "base",
517
+ "meta",
518
+ "link",
519
+ "style",
520
+ "script",
521
+ "noscript"
522
+ ];
507
523
 
508
524
  exports.activeHead = void 0;
509
525
  const setActiveHead = (head) => exports.activeHead = head;
@@ -576,11 +592,6 @@ function createHead(options = {}) {
576
592
  const triggerUpdateHook = () => hooks.callHook("entries:updated", head);
577
593
  const head = {
578
594
  resolvedOptions: options,
579
- _popSideEffectQueue() {
580
- const sde = { ..._sde };
581
- _sde = {};
582
- return sde;
583
- },
584
595
  headEntries() {
585
596
  return entries;
586
597
  },
@@ -635,6 +646,12 @@ function createHead(options = {}) {
635
646
  }
636
647
  await hooks.callHook("tags:resolve", resolveCtx);
637
648
  return resolveCtx.tags;
649
+ },
650
+ _elMap: {},
651
+ _popSideEffectQueue() {
652
+ const sde = { ..._sde };
653
+ _sde = {};
654
+ return sde;
638
655
  }
639
656
  };
640
657
  head.hooks.callHook("init", head);
@@ -685,6 +702,7 @@ const unheadComposablesImports = [
685
702
  exports.DedupesTagsPlugin = DedupesTagsPlugin;
686
703
  exports.DeprecatedTagAttrPlugin = DeprecatedTagAttrPlugin;
687
704
  exports.EventHandlersPlugin = EventHandlersPlugin;
705
+ exports.HasElementTags = HasElementTags;
688
706
  exports.PatchDomOnEntryUpdatesPlugin = PatchDomOnEntryUpdatesPlugin;
689
707
  exports.ProvideTagHashPlugin = ProvideTagHashPlugin;
690
708
  exports.SortTagsPlugin = SortTagsPlugin;
@@ -694,6 +712,7 @@ exports.composableNames = composableNames;
694
712
  exports.createHead = createHead;
695
713
  exports.defineHeadPlugin = defineHeadPlugin;
696
714
  exports.getActiveHead = getActiveHead;
715
+ exports.hashCode = hashCode;
697
716
  exports.normaliseEntryTags = normaliseEntryTags;
698
717
  exports.setActiveHead = setActiveHead;
699
718
  exports.unheadComposablesImports = unheadComposablesImports;
package/dist/index.d.ts CHANGED
@@ -29,6 +29,8 @@ declare const EventHandlersPlugin: () => _unhead_schema.HeadPlugin;
29
29
 
30
30
  declare type Arrayable<T> = T | Array<T>;
31
31
  declare function asArray<T>(value: Arrayable<T>): T[];
32
+ declare function hashCode(s: string): string;
33
+ declare const HasElementTags: string[];
32
34
 
33
35
  declare function useHead<T extends Head>(input: T, options?: HeadEntryOptions): ActiveHeadEntry<T> | void;
34
36
  declare const useTagTitle: (title: Title) => ActiveHeadEntry<any> | void;
@@ -72,4 +74,4 @@ declare const unheadComposablesImports: {
72
74
  imports: string[];
73
75
  }[];
74
76
 
75
- export { Arrayable, DedupesTagsPlugin, DedupesTagsPluginOptions, DeprecatedTagAttrPlugin, EventHandlersPlugin, PatchDomOnEntryUpdatesPlugin, ProvideTagHashPlugin, SortTagsPlugin, TitleTemplatePlugin, activeHead, asArray, composableNames, createHead, defineHeadPlugin, getActiveHead, normaliseEntryTags, setActiveHead, unheadComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };
77
+ export { Arrayable, DedupesTagsPlugin, DedupesTagsPluginOptions, DeprecatedTagAttrPlugin, EventHandlersPlugin, HasElementTags, PatchDomOnEntryUpdatesPlugin, ProvideTagHashPlugin, SortTagsPlugin, TitleTemplatePlugin, activeHead, asArray, composableNames, createHead, defineHeadPlugin, getActiveHead, hashCode, normaliseEntryTags, setActiveHead, unheadComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };
package/dist/index.mjs CHANGED
@@ -1,13 +1,5 @@
1
1
  import { createHooks } from 'hookable';
2
2
 
3
- const HasElementTags = [
4
- "base",
5
- "meta",
6
- "link",
7
- "style",
8
- "script",
9
- "noscript"
10
- ];
11
3
  const ValidHeadTags = [
12
4
  "title",
13
5
  "titleTemplate",
@@ -411,11 +403,21 @@ const ProvideTagHashPlugin = () => {
411
403
  hooks: {
412
404
  "tag:normalise": (ctx) => {
413
405
  const { tag, entry } = ctx;
414
- if (!HasElementTags.includes(tag.tag))
406
+ const isDynamic = typeof tag.props._dynamic !== "undefined";
407
+ if (!HasElementTags.includes(tag.tag) || !tag.key)
415
408
  return;
416
- const isBrowser = IsBrowser || getActiveHead()?.resolvedOptions?.document;
417
- if (!isBrowser && entry._m === "server" && tag.key)
418
- tag.props["data-h-key"] = tag._d;
409
+ tag._hash = hashCode(JSON.stringify({ tag: tag.tag, key: tag.key }));
410
+ if (IsBrowser || getActiveHead()?.resolvedOptions?.document)
411
+ return;
412
+ if (entry._m === "server" || isDynamic) {
413
+ tag.props[`data-h-${tag._hash}`] = "";
414
+ }
415
+ },
416
+ "tags:resolve": (ctx) => {
417
+ ctx.tags = ctx.tags.map((t) => {
418
+ delete t.props._dynamic;
419
+ return t;
420
+ });
419
421
  }
420
422
  }
421
423
  });
@@ -502,6 +504,20 @@ const EventHandlersPlugin = () => {
502
504
  function asArray(value) {
503
505
  return Array.isArray(value) ? value : [value];
504
506
  }
507
+ function hashCode(s) {
508
+ let h = 9;
509
+ for (let i = 0; i < s.length; )
510
+ h = Math.imul(h ^ s.charCodeAt(i++), 9 ** 9);
511
+ return ((h ^ h >>> 9) + 65536).toString(16).substring(1, 8).toLowerCase();
512
+ }
513
+ const HasElementTags = [
514
+ "base",
515
+ "meta",
516
+ "link",
517
+ "style",
518
+ "script",
519
+ "noscript"
520
+ ];
505
521
 
506
522
  let activeHead;
507
523
  const setActiveHead = (head) => activeHead = head;
@@ -574,11 +590,6 @@ function createHead(options = {}) {
574
590
  const triggerUpdateHook = () => hooks.callHook("entries:updated", head);
575
591
  const head = {
576
592
  resolvedOptions: options,
577
- _popSideEffectQueue() {
578
- const sde = { ..._sde };
579
- _sde = {};
580
- return sde;
581
- },
582
593
  headEntries() {
583
594
  return entries;
584
595
  },
@@ -633,6 +644,12 @@ function createHead(options = {}) {
633
644
  }
634
645
  await hooks.callHook("tags:resolve", resolveCtx);
635
646
  return resolveCtx.tags;
647
+ },
648
+ _elMap: {},
649
+ _popSideEffectQueue() {
650
+ const sde = { ..._sde };
651
+ _sde = {};
652
+ return sde;
636
653
  }
637
654
  };
638
655
  head.hooks.callHook("init", head);
@@ -680,4 +697,4 @@ const unheadComposablesImports = [
680
697
  }
681
698
  ];
682
699
 
683
- export { DedupesTagsPlugin, DeprecatedTagAttrPlugin, EventHandlersPlugin, PatchDomOnEntryUpdatesPlugin, ProvideTagHashPlugin, SortTagsPlugin, TitleTemplatePlugin, activeHead, asArray, composableNames, createHead, defineHeadPlugin, getActiveHead, normaliseEntryTags, setActiveHead, unheadComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };
700
+ export { DedupesTagsPlugin, DeprecatedTagAttrPlugin, EventHandlersPlugin, HasElementTags, PatchDomOnEntryUpdatesPlugin, ProvideTagHashPlugin, SortTagsPlugin, TitleTemplatePlugin, activeHead, asArray, composableNames, createHead, defineHeadPlugin, getActiveHead, hashCode, normaliseEntryTags, setActiveHead, unheadComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "unhead",
3
3
  "type": "module",
4
- "version": "0.6.2",
4
+ "version": "0.6.3",
5
5
  "packageManager": "pnpm@7.14.0",
6
6
  "author": "Harlan Wilton <harlan@harlanzw.com>",
7
7
  "license": "MIT",
@@ -30,8 +30,8 @@
30
30
  "dist"
31
31
  ],
32
32
  "dependencies": {
33
- "@unhead/dom": "0.6.2",
34
- "@unhead/schema": "0.6.2",
33
+ "@unhead/dom": "0.6.3",
34
+ "@unhead/schema": "0.6.3",
35
35
  "hookable": "^5.4.1"
36
36
  },
37
37
  "devDependencies": {