@unhead/vue 0.6.5 → 0.6.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.
@@ -61,7 +61,8 @@ async function renderDOMHead(head, options = {}) {
61
61
  const tagRenderId = tag._d || tag._p;
62
62
  const markSideEffect = (key, fn) => {
63
63
  key = `${tagRenderId}:${key}`;
64
- entry._sde[key] = fn;
64
+ if (entry)
65
+ entry._sde[key] = fn;
65
66
  delete staleSideEffects[key];
66
67
  };
67
68
  const setAttrs = ($el, sideEffects = true) => {
@@ -140,7 +141,7 @@ async function renderDOMHead(head, options = {}) {
140
141
  return $newEl;
141
142
  };
142
143
  for (const tag of await head.resolveTags()) {
143
- const entry = head.headEntries().find((e) => e._i === Number(tag._e));
144
+ const entry = head.headEntries().find((e) => e._i === tag._e);
144
145
  const renderCtx = { $el: null, shouldRender: true, tag, entry, queuedSideEffects: staleSideEffects };
145
146
  await head.hooks.callHook("dom:beforeRenderTag", renderCtx);
146
147
  if (!renderCtx.shouldRender)
@@ -59,7 +59,8 @@ async function renderDOMHead(head, options = {}) {
59
59
  const tagRenderId = tag._d || tag._p;
60
60
  const markSideEffect = (key, fn) => {
61
61
  key = `${tagRenderId}:${key}`;
62
- entry._sde[key] = fn;
62
+ if (entry)
63
+ entry._sde[key] = fn;
63
64
  delete staleSideEffects[key];
64
65
  };
65
66
  const setAttrs = ($el, sideEffects = true) => {
@@ -138,7 +139,7 @@ async function renderDOMHead(head, options = {}) {
138
139
  return $newEl;
139
140
  };
140
141
  for (const tag of await head.resolveTags()) {
141
- const entry = head.headEntries().find((e) => e._i === Number(tag._e));
142
+ const entry = head.headEntries().find((e) => e._i === tag._e);
142
143
  const renderCtx = { $el: null, shouldRender: true, tag, entry, queuedSideEffects: staleSideEffects };
143
144
  await head.hooks.callHook("dom:beforeRenderTag", renderCtx);
144
145
  if (!renderCtx.shouldRender)
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- const vue = require('vue');
4
3
  const hookable = require('hookable');
4
+ const vue = require('vue');
5
5
 
6
6
  const ValidHeadTags = [
7
7
  "title",
@@ -351,10 +351,12 @@ const EventHandlersPlugin = () => {
351
351
  const handler = value;
352
352
  $el.setAttribute(eventDedupeKey, "");
353
353
  $eventListenerTarget.addEventListener(eventName, handler);
354
- ctx.entry._sde[sdeKey] = () => {
355
- $eventListenerTarget.removeEventListener(eventName, handler);
356
- $el.removeAttribute(eventDedupeKey);
357
- };
354
+ if (ctx.entry) {
355
+ ctx.entry._sde[sdeKey] = () => {
356
+ $eventListenerTarget.removeEventListener(eventName, handler);
357
+ $el.removeAttribute(eventDedupeKey);
358
+ };
359
+ }
358
360
  });
359
361
  if (ctx.tag._delayedSrc) {
360
362
  $el.setAttribute("src", ctx.tag._delayedSrc);
@@ -398,7 +400,26 @@ function normaliseEntryTags(e) {
398
400
  });
399
401
  }
400
402
 
403
+ const CorePlugins = () => [
404
+ DedupesTagsPlugin(),
405
+ SortTagsPlugin(),
406
+ TitleTemplatePlugin(),
407
+ ProvideTagHashPlugin(),
408
+ EventHandlersPlugin(),
409
+ DeprecatedTagAttrPlugin()
410
+ ];
411
+ const DOMPlugins = (options = {}) => [
412
+ PatchDomOnEntryUpdatesPlugin({ document: options?.document, delayFn: options?.domDelayFn })
413
+ ];
401
414
  function createHead$1(options = {}) {
415
+ const head = createHeadCore({
416
+ ...options,
417
+ plugins: [...DOMPlugins(options), ...options?.plugins || []]
418
+ });
419
+ setActiveHead(head);
420
+ return head;
421
+ }
422
+ function createHeadCore(options = {}) {
402
423
  let entries = [];
403
424
  let _sde = {};
404
425
  let _eid = 0;
@@ -406,13 +427,7 @@ function createHead$1(options = {}) {
406
427
  if (options?.hooks)
407
428
  hooks.addHooks(options.hooks);
408
429
  options.plugins = [
409
- DeprecatedTagAttrPlugin(),
410
- DedupesTagsPlugin(),
411
- SortTagsPlugin(),
412
- TitleTemplatePlugin(),
413
- EventHandlersPlugin(),
414
- ProvideTagHashPlugin(),
415
- PatchDomOnEntryUpdatesPlugin({ document: options?.document, delayFn: options?.domDelayFn }),
430
+ ...CorePlugins(),
416
431
  ...options?.plugins || []
417
432
  ];
418
433
  options.plugins.forEach((p) => p.hooks && hooks.addHooks(p.hooks));
@@ -482,7 +497,6 @@ function createHead$1(options = {}) {
482
497
  }
483
498
  };
484
499
  head.hooks.callHook("init", head);
485
- setActiveHead(head);
486
500
  return head;
487
501
  }
488
502
 
@@ -495,6 +509,7 @@ const composableNames = [
495
509
  "useTagBase",
496
510
  "useTagMeta",
497
511
  "useTagMetaFlat",
512
+ "useSeoMeta",
498
513
  "useTagLink",
499
514
  "useTagScript",
500
515
  "useTagStyle",
@@ -554,14 +569,13 @@ function injectHead() {
554
569
  return vue.getCurrentInstance() && vue.inject(headSymbol) || getActiveHead();
555
570
  }
556
571
  function createHead(options = {}) {
557
- const plugins = [
558
- VueReactiveUseHeadPlugin(),
559
- ...options?.plugins || []
560
- ];
561
572
  const head = createHead$1({
562
573
  ...options,
563
574
  domDelayFn: (fn) => setTimeout(() => vue.nextTick(() => fn()), 10),
564
- plugins
575
+ plugins: [
576
+ VueReactiveUseHeadPlugin(),
577
+ ...options?.plugins || []
578
+ ]
565
579
  });
566
580
  const vuePlugin = {
567
581
  install(app) {
@@ -819,6 +833,7 @@ const useTagMetaFlat = (meta) => {
819
833
  });
820
834
  return useHead({ meta: input });
821
835
  };
836
+ const useSeoMeta = useTagMetaFlat;
822
837
  const useTagLink = (link) => useHead({ link: asArray(link) });
823
838
  const useTagScript = (script) => useHead({ script: asArray(script) });
824
839
  const useTagStyle = (style) => useHead({ style: asArray(style) });
@@ -842,6 +857,7 @@ exports.VueHeadMixin = VueHeadMixin;
842
857
  exports.VueReactiveUseHeadPlugin = VueReactiveUseHeadPlugin;
843
858
  exports.asArray = asArray;
844
859
  exports.createHead = createHead;
860
+ exports.createHeadCore = createHeadCore;
845
861
  exports.headSymbol = headSymbol;
846
862
  exports.injectHead = injectHead;
847
863
  exports.resolveUnrefHeadInput = resolveUnrefHeadInput;
@@ -849,6 +865,7 @@ exports.unheadVueComposablesImports = unheadVueComposablesImports;
849
865
  exports.useBodyAttrs = useBodyAttrs;
850
866
  exports.useHead = useHead;
851
867
  exports.useHtmlAttrs = useHtmlAttrs;
868
+ exports.useSeoMeta = useSeoMeta;
852
869
  exports.useServerBodyAttrs = useServerBodyAttrs;
853
870
  exports.useServerHead = useServerHead;
854
871
  exports.useServerHtmlAttrs = useServerHtmlAttrs;
package/dist/index.d.ts CHANGED
@@ -1,8 +1,16 @@
1
1
  import * as _unhead_schema from '@unhead/schema';
2
- import { Title as Title$1, TitleTemplate as TitleTemplate$1, EntryAugmentation, Base as Base$1, Link as Link$1, Meta as Meta$1, Style as Style$1, Script as Script$1, Noscript as Noscript$1, DataKeys, SchemaAugmentations, DefinedValueOrEmptyObject, MergeHead, BaseHtmlAttr, MaybeArray, BaseBodyAttr, Unhead, CreateHeadOptions, HeadEntryOptions, MetaFlatInput, ActiveHeadEntry } from '@unhead/schema';
2
+ import { Head, CreateHeadOptions, Unhead, Title as Title$1, TitleTemplate as TitleTemplate$1, EntryAugmentation, Base as Base$1, Link as Link$1, Meta as Meta$1, Style as Style$1, Script as Script$1, Noscript as Noscript$1, DataKeys, SchemaAugmentations, DefinedValueOrEmptyObject, MergeHead, BaseHtmlAttr, MaybeArray, BaseBodyAttr, HeadEntryOptions, MetaFlatInput, ActiveHeadEntry } from '@unhead/schema';
3
3
  export { ActiveHeadEntry, Head, HeadEntryOptions, HeadTag, MergeHead, Unhead } from '@unhead/schema';
4
4
  import { ComputedRef, Ref, Plugin } from 'vue';
5
5
 
6
+ /**
7
+ * Creates a core instance of unhead. Does not provide a global ctx for composables to work
8
+ * and does not register DOM plugins.
9
+ *
10
+ * @param options
11
+ */
12
+ declare function createHeadCore<T extends {} = Head>(options?: CreateHeadOptions): Unhead<T>;
13
+
6
14
  declare type MaybeReadonlyRef<T> = (() => T) | ComputedRef<T>;
7
15
  declare type MaybeComputedRef<T> = T | MaybeReadonlyRef<T> | Ref<T>;
8
16
  declare type MaybeComputedRefEntries<T> = MaybeComputedRef<T> | {
@@ -138,6 +146,7 @@ declare const useTagTitle: (title: ReactiveHead['title']) => void | ActiveHeadEn
138
146
  declare const useTitleTemplate: (titleTemplate: ReactiveHead['titleTemplate']) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
139
147
  declare const useTagMeta: (meta: Arrayable<Meta>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
140
148
  declare const useTagMetaFlat: (meta: MaybeComputedRefEntries<MetaFlatInput>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
149
+ declare const useSeoMeta: (meta: MaybeComputedRefEntries<MetaFlatInput>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
141
150
  declare const useTagLink: (link: Arrayable<Link>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
142
151
  declare const useTagScript: (script: Arrayable<Script>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
143
152
  declare const useTagStyle: (style: Arrayable<Style>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
@@ -151,4 +160,4 @@ declare const unheadVueComposablesImports: {
151
160
  imports: string[];
152
161
  }[];
153
162
 
154
- export { Arrayable, Base, BodyAttributes, HtmlAttributes, Link, MaybeComputedRef, MaybeComputedRefEntries, MaybeReadonlyRef, Meta, Noscript, ReactiveHead, Script, Style, Title, TitleTemplate, UseHeadInput, Vue2ProvideUnheadPlugin, VueHeadClient, VueHeadMixin, VueReactiveUseHeadPlugin, asArray, createHead, headSymbol, injectHead, resolveUnrefHeadInput, unheadVueComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };
163
+ export { Arrayable, Base, BodyAttributes, HtmlAttributes, Link, MaybeComputedRef, MaybeComputedRefEntries, MaybeReadonlyRef, Meta, Noscript, ReactiveHead, Script, Style, Title, TitleTemplate, UseHeadInput, Vue2ProvideUnheadPlugin, VueHeadClient, VueHeadMixin, VueReactiveUseHeadPlugin, asArray, createHead, createHeadCore, headSymbol, injectHead, resolveUnrefHeadInput, unheadVueComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useSeoMeta, 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,5 +1,5 @@
1
- import { unref, isRef, version, getCurrentInstance, inject, nextTick, ref, watchEffect, watch, onBeforeUnmount } from 'vue';
2
1
  import { createHooks } from 'hookable';
2
+ import { unref, isRef, version, getCurrentInstance, inject, nextTick, ref, watchEffect, watch, onBeforeUnmount } from 'vue';
3
3
 
4
4
  const ValidHeadTags = [
5
5
  "title",
@@ -349,10 +349,12 @@ const EventHandlersPlugin = () => {
349
349
  const handler = value;
350
350
  $el.setAttribute(eventDedupeKey, "");
351
351
  $eventListenerTarget.addEventListener(eventName, handler);
352
- ctx.entry._sde[sdeKey] = () => {
353
- $eventListenerTarget.removeEventListener(eventName, handler);
354
- $el.removeAttribute(eventDedupeKey);
355
- };
352
+ if (ctx.entry) {
353
+ ctx.entry._sde[sdeKey] = () => {
354
+ $eventListenerTarget.removeEventListener(eventName, handler);
355
+ $el.removeAttribute(eventDedupeKey);
356
+ };
357
+ }
356
358
  });
357
359
  if (ctx.tag._delayedSrc) {
358
360
  $el.setAttribute("src", ctx.tag._delayedSrc);
@@ -396,7 +398,26 @@ function normaliseEntryTags(e) {
396
398
  });
397
399
  }
398
400
 
401
+ const CorePlugins = () => [
402
+ DedupesTagsPlugin(),
403
+ SortTagsPlugin(),
404
+ TitleTemplatePlugin(),
405
+ ProvideTagHashPlugin(),
406
+ EventHandlersPlugin(),
407
+ DeprecatedTagAttrPlugin()
408
+ ];
409
+ const DOMPlugins = (options = {}) => [
410
+ PatchDomOnEntryUpdatesPlugin({ document: options?.document, delayFn: options?.domDelayFn })
411
+ ];
399
412
  function createHead$1(options = {}) {
413
+ const head = createHeadCore({
414
+ ...options,
415
+ plugins: [...DOMPlugins(options), ...options?.plugins || []]
416
+ });
417
+ setActiveHead(head);
418
+ return head;
419
+ }
420
+ function createHeadCore(options = {}) {
400
421
  let entries = [];
401
422
  let _sde = {};
402
423
  let _eid = 0;
@@ -404,13 +425,7 @@ function createHead$1(options = {}) {
404
425
  if (options?.hooks)
405
426
  hooks.addHooks(options.hooks);
406
427
  options.plugins = [
407
- DeprecatedTagAttrPlugin(),
408
- DedupesTagsPlugin(),
409
- SortTagsPlugin(),
410
- TitleTemplatePlugin(),
411
- EventHandlersPlugin(),
412
- ProvideTagHashPlugin(),
413
- PatchDomOnEntryUpdatesPlugin({ document: options?.document, delayFn: options?.domDelayFn }),
428
+ ...CorePlugins(),
414
429
  ...options?.plugins || []
415
430
  ];
416
431
  options.plugins.forEach((p) => p.hooks && hooks.addHooks(p.hooks));
@@ -480,7 +495,6 @@ function createHead$1(options = {}) {
480
495
  }
481
496
  };
482
497
  head.hooks.callHook("init", head);
483
- setActiveHead(head);
484
498
  return head;
485
499
  }
486
500
 
@@ -493,6 +507,7 @@ const composableNames = [
493
507
  "useTagBase",
494
508
  "useTagMeta",
495
509
  "useTagMetaFlat",
510
+ "useSeoMeta",
496
511
  "useTagLink",
497
512
  "useTagScript",
498
513
  "useTagStyle",
@@ -552,14 +567,13 @@ function injectHead() {
552
567
  return getCurrentInstance() && inject(headSymbol) || getActiveHead();
553
568
  }
554
569
  function createHead(options = {}) {
555
- const plugins = [
556
- VueReactiveUseHeadPlugin(),
557
- ...options?.plugins || []
558
- ];
559
570
  const head = createHead$1({
560
571
  ...options,
561
572
  domDelayFn: (fn) => setTimeout(() => nextTick(() => fn()), 10),
562
- plugins
573
+ plugins: [
574
+ VueReactiveUseHeadPlugin(),
575
+ ...options?.plugins || []
576
+ ]
563
577
  });
564
578
  const vuePlugin = {
565
579
  install(app) {
@@ -817,6 +831,7 @@ const useTagMetaFlat = (meta) => {
817
831
  });
818
832
  return useHead({ meta: input });
819
833
  };
834
+ const useSeoMeta = useTagMetaFlat;
820
835
  const useTagLink = (link) => useHead({ link: asArray(link) });
821
836
  const useTagScript = (script) => useHead({ script: asArray(script) });
822
837
  const useTagStyle = (style) => useHead({ style: asArray(style) });
@@ -835,4 +850,4 @@ const unheadVueComposablesImports = [
835
850
  }
836
851
  ];
837
852
 
838
- export { Vue2ProvideUnheadPlugin, VueHeadMixin, VueReactiveUseHeadPlugin, asArray, createHead, headSymbol, injectHead, resolveUnrefHeadInput, unheadVueComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };
853
+ export { Vue2ProvideUnheadPlugin, VueHeadMixin, VueReactiveUseHeadPlugin, asArray, createHead, createHeadCore, headSymbol, injectHead, resolveUnrefHeadInput, unheadVueComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useSeoMeta, 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/vue",
3
3
  "type": "module",
4
- "version": "0.6.5",
4
+ "version": "0.6.6",
5
5
  "packageManager": "pnpm@7.14.0",
6
6
  "author": "Harlan Wilton <harlan@harlanzw.com>",
7
7
  "license": "MIT",
@@ -33,11 +33,11 @@
33
33
  "vue": ">=2.7 || >=3"
34
34
  },
35
35
  "dependencies": {
36
- "@unhead/schema": "0.6.5",
36
+ "@unhead/schema": "0.6.6",
37
37
  "hookable": "^5.4.1"
38
38
  },
39
39
  "devDependencies": {
40
- "unhead": "0.6.5",
40
+ "unhead": "0.6.6",
41
41
  "vue": "^3.2.45"
42
42
  },
43
43
  "scripts": {