diff --git a/CHANGELOG.md b/CHANGELOG.md index a328b0c..8a6834b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [3.0.0-alpha.8](https://github.com/nuxt/vue-meta/compare/v3.0.0-alpha.7...v3.0.0-alpha.8) (2021-06-06) + + +### Features + +* add plugin for options api support ([0745f16](https://github.com/nuxt/vue-meta/commit/0745f1668388c85d9a4eb50a26a350f8278b490c)) + + +### Bug Fixes + +* remove unsupported meta types from v2 ([1bf1184](https://github.com/nuxt/vue-meta/commit/1bf1184c6e1ffe488c17b75ac54b7711d84f8fd9)) + ## [3.0.0-alpha.7](https://github.com/nuxt/vue-meta/compare/v3.0.0-alpha.6...v3.0.0-alpha.7) (2021-05-23) diff --git a/dist/vue-meta.cjs.js b/dist/vue-meta.cjs.js index 7fda686..d60325d 100644 --- a/dist/vue-meta.cjs.js +++ b/dist/vue-meta.cjs.js @@ -1,5 +1,5 @@ /** - * vue-meta v3.0.0-alpha.7 + * vue-meta v3.0.0-alpha.8 * (c) 2021 * - Pim (@pimlie) * - All the amazing contributors @@ -799,9 +799,12 @@ function addVnode(isSSR, teleports, to, vnodes) { } const createMetaManager = (isSSR = false, config, resolver) => MetaManager.create(isSSR, config || defaultConfig, resolver || defaultResolver); class MetaManager { + isSSR = false; + config; + target; + resolver; + ssrCleanedUp = false; constructor(isSSR, config, target, resolver) { - this.isSSR = false; - this.ssrCleanedUp = false; this.isSSR = isSSR; this.config = config; this.target = target; @@ -809,6 +812,19 @@ class MetaManager { this.resolver = resolver; } } + static create = (isSSR, config, resolver) => { + const resolve = (options, contexts, active, key, pathSegments) => { + if (isFunction(resolver)) { + return resolver(options, contexts, active, key, pathSegments); + } + return resolver.resolve(options, contexts, active, key, pathSegments); + }; + const active = vue.reactive({}); + const mergedObject = createMergedObject(resolve, active); + // TODO: validate resolver + const manager = new MetaManager(isSSR, config, mergedObject, resolver); + return manager; + }; install(app) { app.component('Metainfo', Metainfo); app.config.globalProperties.$metaManager = this; @@ -932,25 +948,37 @@ class MetaManager { return vue.h(vue.Teleport, { to }, teleport); }); } -} -MetaManager.create = (isSSR, config, resolver) => { - const resolve = (options, contexts, active, key, pathSegments) => { - if (isFunction(resolver)) { - return resolver(options, contexts, active, key, pathSegments); +} + +const defaultOptions = { + keyName: 'metaInfo' +}; +const createMixin = options => ({ + created() { + const instance = vue.getCurrentInstance(); + if (!instance?.type || !(options.keyName in instance.type)) { + return; } - return resolver.resolve(options, contexts, active, key, pathSegments); - }; - const active = vue.reactive({}); - const mergedObject = createMergedObject(resolve, active); - // TODO: validate resolver - const manager = new MetaManager(isSSR, config, mergedObject, resolver); - return manager; + const metaInfo = instance.type[options.keyName]; + if (isFunction(metaInfo)) { + const computedMetaInfo = vue.computed(metaInfo); + useMeta(computedMetaInfo); + } + else { + useMeta(metaInfo); + } + } +}); +const install = (app, _options = {}) => { + const options = Object.assign({}, defaultOptions, _options); + app.mixin(createMixin(options)); }; exports.createMetaManager = createMetaManager; exports.deepestResolver = defaultResolver; exports.defaultConfig = defaultConfig; exports.getCurrentManager = getCurrentManager; +exports.plugin = install; exports.resolveOption = resolveOption; exports.useActiveMeta = useActiveMeta; exports.useMeta = useMeta; diff --git a/dist/vue-meta.cjs.prod.js b/dist/vue-meta.cjs.prod.js index 970ad99..567d3c8 100644 --- a/dist/vue-meta.cjs.prod.js +++ b/dist/vue-meta.cjs.prod.js @@ -1,5 +1,5 @@ /** - * vue-meta v3.0.0-alpha.7 + * vue-meta v3.0.0-alpha.8 * (c) 2021 * - Pim (@pimlie) * - All the amazing contributors @@ -779,9 +779,12 @@ function addVnode(isSSR, teleports, to, vnodes) { } const createMetaManager = (isSSR = false, config, resolver) => MetaManager.create(isSSR, config || defaultConfig, resolver || defaultResolver); class MetaManager { + isSSR = false; + config; + target; + resolver; + ssrCleanedUp = false; constructor(isSSR, config, target, resolver) { - this.isSSR = false; - this.ssrCleanedUp = false; this.isSSR = isSSR; this.config = config; this.target = target; @@ -789,6 +792,19 @@ class MetaManager { this.resolver = resolver; } } + static create = (isSSR, config, resolver) => { + const resolve = (options, contexts, active, key, pathSegments) => { + if (isFunction(resolver)) { + return resolver(options, contexts, active, key, pathSegments); + } + return resolver.resolve(options, contexts, active, key, pathSegments); + }; + const active = vue.reactive({}); + const mergedObject = createMergedObject(resolve, active); + // TODO: validate resolver + const manager = new MetaManager(isSSR, config, mergedObject, resolver); + return manager; + }; install(app) { app.component('Metainfo', Metainfo); app.config.globalProperties.$metaManager = this; @@ -912,25 +928,37 @@ class MetaManager { return vue.h(vue.Teleport, { to }, teleport); }); } -} -MetaManager.create = (isSSR, config, resolver) => { - const resolve = (options, contexts, active, key, pathSegments) => { - if (isFunction(resolver)) { - return resolver(options, contexts, active, key, pathSegments); +} + +const defaultOptions = { + keyName: 'metaInfo' +}; +const createMixin = options => ({ + created() { + const instance = vue.getCurrentInstance(); + if (!instance?.type || !(options.keyName in instance.type)) { + return; } - return resolver.resolve(options, contexts, active, key, pathSegments); - }; - const active = vue.reactive({}); - const mergedObject = createMergedObject(resolve, active); - // TODO: validate resolver - const manager = new MetaManager(isSSR, config, mergedObject, resolver); - return manager; + const metaInfo = instance.type[options.keyName]; + if (isFunction(metaInfo)) { + const computedMetaInfo = vue.computed(metaInfo); + useMeta(computedMetaInfo); + } + else { + useMeta(metaInfo); + } + } +}); +const install = (app, _options = {}) => { + const options = Object.assign({}, defaultOptions, _options); + app.mixin(createMixin(options)); }; exports.createMetaManager = createMetaManager; exports.deepestResolver = defaultResolver; exports.defaultConfig = defaultConfig; exports.getCurrentManager = getCurrentManager; +exports.plugin = install; exports.resolveOption = resolveOption; exports.useActiveMeta = useActiveMeta; exports.useMeta = useMeta; diff --git a/dist/vue-meta.d.ts b/dist/vue-meta.d.ts index 78e813e..d16d51f 100644 --- a/dist/vue-meta.d.ts +++ b/dist/vue-meta.d.ts @@ -1,5 +1,5 @@ /** - * vue-meta v3.0.0-alpha.7 + * vue-meta v3.0.0-alpha.8 * (c) 2021 * - Pim (@pimlie) * - All the amazing contributors @@ -64,6 +64,110 @@ declare class MetaManager { }): VNode[]; } +interface AttributeProperty { + [key: string]: string | string[]; +} +interface MetaDataProperty { + vmid?: string; + once?: boolean; + skip?: boolean; + body?: boolean; + pbody?: boolean; + [key: string]: any; +} +interface MetaPropertyCharset extends MetaDataProperty { + charset: string; +} +interface MetaPropertyEquiv extends MetaDataProperty { + httpEquiv: string; + content: string; +} +interface MetaPropertyTrueEquiv extends MetaDataProperty { + 'http-equiv': string; + content: string; +} +interface MetaPropertyName extends MetaDataProperty { + name: string; + content: string; +} +interface MetaPropertyMicrodata extends MetaDataProperty { + itemprop: string; + content: string; +} +interface MetaPropertyProperty extends MetaDataProperty { + property: string; + content: string; +} +interface LinkPropertyBase extends MetaDataProperty { + rel: string; + crossOrigin?: string | null; + media?: string; + nonce?: string; + referrerPolicy?: string; + rev?: string; + type?: string; +} +interface LinkPropertyHref extends LinkPropertyBase { + href?: string; + hreflang?: string; + callback?: void; +} +interface LinkPropertyHrefCallback extends LinkPropertyBase { + vmid: string; + href?: string; + hreflang?: string; +} +interface StyleProperty extends MetaDataProperty { + cssText: string; + media?: string; + nonce?: string; + type?: string; +} +interface ScriptPropertyBase extends MetaDataProperty { + type?: string; + charset?: string; + async?: boolean; + defer?: boolean; + crossOrigin?: string; + nonce?: string; +} +interface ScriptPropertyText extends ScriptPropertyBase { + innerHTML: string; +} +interface ScriptPropertySrc extends ScriptPropertyBase { + src: string; + callback?: void; +} +interface ScriptPropertySrcCallback extends ScriptPropertyBase { + vmid: string; +} +declare type JsonVal = string | number | boolean | JsonObj | JsonObj[] | null; +interface JsonObj { + [key: string]: JsonVal | JsonVal[]; +} +interface ScriptPropertyJson extends ScriptPropertyBase { + json: JsonObj; +} +interface NoScriptProperty extends MetaDataProperty { + innerHTML: string; +} +interface ComponentMetaInfo { + title?: string; + htmlAttrs?: AttributeProperty; + headAttrs?: AttributeProperty; + bodyAttrs?: AttributeProperty; + base?: { + target: string; + href: string; + }; + meta?: (MetaPropertyCharset | MetaPropertyEquiv | MetaPropertyTrueEquiv | MetaPropertyName | MetaPropertyMicrodata | MetaPropertyProperty)[]; + link?: (LinkPropertyBase | LinkPropertyHref | LinkPropertyHrefCallback)[]; + style?: StyleProperty[]; + script?: (ScriptPropertyText | ScriptPropertySrc | ScriptPropertySrcCallback | ScriptPropertyJson)[]; + noscript?: NoScriptProperty[]; +} +declare type ComponentOptionsMetaInfo = ComponentMetaInfo | (() => ComponentMetaInfo); + declare type MetaConfigSectionKey = 'tag' | 'to' | 'keyAttribute' | 'valueAttribute' | 'nameless' | 'group' | 'namespaced' | 'namespacedAttribute' | 'attributesFor'; interface MetaConfigSectionTag { tag?: string; @@ -191,6 +295,9 @@ declare module '@vue/runtime-core' { $metaManager: MetaManager; $metaGuards: MetaGuards; } + interface ComponentCustomOptions { + metaInfo?: ComponentOptionsMetaInfo; + } } declare const setup: MetaResolveSetup; @@ -207,6 +314,11 @@ declare namespace deepest_d { declare const defaultConfig: MetaConfig; +declare type PluginOptions = { + keyName: string; +}; +declare const install: (app: App, _options?: Partial) => void; + interface ResolveOptionPredicament { (currentValue: T | undefined, context: U): T; } @@ -216,4 +328,4 @@ declare function getCurrentManager(vm?: ComponentInternalInstance): MetaManager declare function useMeta(source: MetaSource, manager?: MetaManager): MetaProxy; declare function useActiveMeta(): MetaActive; -export { ExcludesFalsy, MetaActive, MetaConfig, MetaConfigSection, MetaConfigSectionAttribute, MetaConfigSectionGroup, MetaConfigSectionKey, MetaConfigSectionTag, MetaGroupConfig, MetaGuardRemoved, MetaGuards, MetaProxy, MetaRenderContext, MetaRendered, MetaRenderedNode, MetaResolveContext, MetaResolveSetup, MetaResolver, MetaResolverSetup, MetaSource, MetaSourceProxy, MetaTagConfig, MetaTagConfigKey, MetaTagName, MetaTagsConfig, MetaTeleports, Modify, SlotScopeProperties, TODO, Truthy, createMetaManager, deepest_d as deepestResolver, defaultConfig, getCurrentManager, resolveOption, useActiveMeta, useMeta }; +export { ExcludesFalsy, MetaActive, MetaConfig, MetaConfigSection, MetaConfigSectionAttribute, MetaConfigSectionGroup, MetaConfigSectionKey, MetaConfigSectionTag, MetaGroupConfig, MetaGuardRemoved, MetaGuards, MetaProxy, MetaRenderContext, MetaRendered, MetaRenderedNode, MetaResolveContext, MetaResolveSetup, MetaResolver, MetaResolverSetup, MetaSource, MetaSourceProxy, MetaTagConfig, MetaTagConfigKey, MetaTagName, MetaTagsConfig, MetaTeleports, Modify, SlotScopeProperties, TODO, Truthy, createMetaManager, deepest_d as deepestResolver, defaultConfig, getCurrentManager, install as plugin, resolveOption, useActiveMeta, useMeta }; diff --git a/dist/vue-meta.esm-browser.js b/dist/vue-meta.esm-browser.js index 1899820..c829af7 100644 --- a/dist/vue-meta.esm-browser.js +++ b/dist/vue-meta.esm-browser.js @@ -1,12 +1,12 @@ /** - * vue-meta v3.0.0-alpha.7 + * vue-meta v3.0.0-alpha.8 * (c) 2021 * - Pim (@pimlie) * - All the amazing contributors * @license MIT */ -import { markRaw, h, getCurrentInstance, isProxy, watch, inject, defineComponent, onUnmounted, Teleport, reactive, Comment } from 'vue'; +import { markRaw, h, getCurrentInstance, isProxy, watch, inject, defineComponent, reactive, onUnmounted, Teleport, Comment, computed } from 'vue'; const resolveOption = (predicament, initialValue) => (options, contexts) => { let resolvedIndex = -1; @@ -795,9 +795,12 @@ function addVnode(isSSR, teleports, to, vnodes) { } const createMetaManager = (isSSR = false, config, resolver) => MetaManager.create(isSSR, config || defaultConfig, resolver || defaultResolver); class MetaManager { + isSSR = false; + config; + target; + resolver; + ssrCleanedUp = false; constructor(isSSR, config, target, resolver) { - this.isSSR = false; - this.ssrCleanedUp = false; this.isSSR = isSSR; this.config = config; this.target = target; @@ -805,6 +808,19 @@ class MetaManager { this.resolver = resolver; } } + static create = (isSSR, config, resolver) => { + const resolve = (options, contexts, active, key, pathSegments) => { + if (isFunction(resolver)) { + return resolver(options, contexts, active, key, pathSegments); + } + return resolver.resolve(options, contexts, active, key, pathSegments); + }; + const active = reactive({}); + const mergedObject = createMergedObject(resolve, active); + // TODO: validate resolver + const manager = new MetaManager(isSSR, config, mergedObject, resolver); + return manager; + }; install(app) { app.component('Metainfo', Metainfo); app.config.globalProperties.$metaManager = this; @@ -928,19 +944,30 @@ class MetaManager { return h(Teleport, { to }, teleport); }); } -} -MetaManager.create = (isSSR, config, resolver) => { - const resolve = (options, contexts, active, key, pathSegments) => { - if (isFunction(resolver)) { - return resolver(options, contexts, active, key, pathSegments); +} + +const defaultOptions = { + keyName: 'metaInfo' +}; +const createMixin = options => ({ + created() { + const instance = getCurrentInstance(); + if (!instance?.type || !(options.keyName in instance.type)) { + return; } - return resolver.resolve(options, contexts, active, key, pathSegments); - }; - const active = reactive({}); - const mergedObject = createMergedObject(resolve, active); - // TODO: validate resolver - const manager = new MetaManager(isSSR, config, mergedObject, resolver); - return manager; + const metaInfo = instance.type[options.keyName]; + if (isFunction(metaInfo)) { + const computedMetaInfo = computed(metaInfo); + useMeta(computedMetaInfo); + } + else { + useMeta(metaInfo); + } + } +}); +const install = (app, _options = {}) => { + const options = Object.assign({}, defaultOptions, _options); + app.mixin(createMixin(options)); }; -export { createMetaManager, defaultResolver as deepestResolver, defaultConfig, getCurrentManager, resolveOption, useActiveMeta, useMeta }; +export { createMetaManager, defaultResolver as deepestResolver, defaultConfig, getCurrentManager, install as plugin, resolveOption, useActiveMeta, useMeta }; diff --git a/dist/vue-meta.esm-browser.min.js b/dist/vue-meta.esm-browser.min.js index 3dd35be..baef48f 100644 --- a/dist/vue-meta.esm-browser.min.js +++ b/dist/vue-meta.esm-browser.min.js @@ -1,8 +1,8 @@ /** - * vue-meta v3.0.0-alpha.7 + * vue-meta v3.0.0-alpha.8 * (c) 2021 * - Pim (@pimlie) * - All the amazing contributors * @license MIT */ -import{markRaw as t,h as e,getCurrentInstance as o,isProxy as r,watch as n,inject as s,defineComponent as i,onUnmounted as c,Teleport as a,reactive as u,Comment as l}from"vue";const f=(t,e)=>(o,r)=>{let n=-1;if(r.reduce(((e,o,r)=>{const s=t(e,o);return s!==e?(n=r,s):e}),e),n>-1)return o[n]},d=f(((t,e)=>{const{depth:o}=e;return!t||o>t?o:t}));var p=Object.freeze({__proto__:null,setup:t=>{let e=0;if(t.vm){let{vm:o}=t;do{o.parent&&(e++,o=o.parent)}while(o&&o.parent&&o!==o.root)}t.depth=e},resolve:d});const m={body:{tag:"script",to:"body"},base:{valueAttribute:"href"},charset:{tag:"meta",nameless:!0,valueAttribute:"charset"},description:{tag:"meta"},og:{group:!0,namespacedAttribute:!0,tag:"meta",keyAttribute:"property"},twitter:{group:!0,namespacedAttribute:!0,tag:"meta"},htmlAttrs:{attributesFor:"html"},headAttrs:{attributesFor:"head"},bodyAttrs:{attributesFor:"body"}},h={title:{attributes:!1},base:{contentAsAttribute:!0,attributes:["href","target"]},meta:{contentAsAttribute:!0,keyAttribute:"name",attributes:["content","name","http-equiv","charset"]},link:{contentAsAttribute:!0,attributes:["href","crossorigin","rel","media","integrity","hreflang","type","referrerpolicy","sizes","imagesrcset","imagesizes","as","color"]},style:{attributes:["media"]},script:{attributes:["src","type","nomodule","async","defer","crossorigin","integrity","referrerpolicy"]},noscript:{attributes:!1}};Object.freeze({}),Object.freeze([]);const b=Array.isArray,g=t=>"function"==typeof t,y=t=>"string"==typeof t,v=t=>null!==t&&"object"==typeof t,S=Object.prototype.toString,A=t=>"[object Object]"===S.call(t),k=Symbol("kIsProxy"),R=Symbol("kProxySources"),j=Symbol("kProxyTarget"),w=Symbol("kResolveContext");function x(t){if(b(t))return t.map(x);if(v(t)){const e={};for(const o in t)e[o]="context"===o?t[o]:x(t[o]);return e}return t}const N=(t,e,o)=>{const r=[];for(const n of t)n&&e in n&&(r.push(n[e]),o&&o(n));return r},$=(t,e=[],o,r)=>{if(!o&&!r&&(({active:o,sources:r}=t),e.length))for(let t=0;tt[n])).filter(Boolean)}if(!o||!r)return;const n=((t,...e)=>{const o=t?Object.keys(t):[];if(e)for(const t of e)if(t&&v(t))for(const e in t)o.includes(e)||o.push(e);return o})(...r),s=Object.keys(o);for(const t of s)n.includes(t)||delete o[t];for(const s of n){let n=!1;for(let t=0;ti.push(t[w])));let a=t.resolve(c,i,o[s],s,e);A(a)&&(a=x(a)),o[s]=a}},O=(e,o,r,n=[])=>{const s=P(e,r,n),i=t(new Proxy(o,s));return!n.length&&e.sources&&e.sources.push(i),i},P=(t,e,o=[])=>({get:(r,n,s)=>{if(n===k)return!0;if(n===R)return t.sources;if(n===j)return r;if(n===w)return e;let i=Reflect.get(r,n,s);if(!v(i))return i;if(!i[k]){const s=[...o,n];i=O(t,i,e,s),Reflect.set(r,n,i)}return i},set:(e,r,n)=>{const s=Reflect.set(e,r,n);if(s){const i=b(e);let c,a=!1,{sources:u,active:l}=t,f=0;for(const t of o){if(u=N(u,t),i&&f===o.length-1){c=t;break}b(l)&&(a=!0),l=l[t],f++}if(a)return $(t),s;if(A(n))return $(t,o),s;let d,p=[];i?(d=u,p=u.map((t=>t[w]))):d=N(u,r,(t=>p.push(t[w])));let m=t.resolve(d,p,l,r,o);A(m)&&(m=x(m)),i&&c?l[c]=m:l[r]=m}return s},deleteProperty:(e,r)=>{const n=Reflect.deleteProperty(e,r);if(n){const n=b(e);let s,i=t.sources,c=t.active,a=0;for(const t of o){if(i=i.map((e=>e&&e[t])),n&&a===o.length-1){s=t;break}c=c[t],a++}if(i.some((t=>t&&r in t))){let e,a=[];n?(e=i,a=i.map((t=>t[w]))):e=N(i,r,(t=>a.push(t[w])));let u=t.resolve(e,a,c,r,o);A(u)&&(u=x(u)),n&&s?c[s]=u:c[r]=u}else delete c[r]}return n}}),C={};function M(t,o,r,n){return"attributesFor"in n?function(t,o,r,n){const{attributesFor:s}=n;if(!s||!r)return;if(t.isSSR)return{to:"",vnode:e(`ssr-${s}`,r)};if(!C[s]){const[t,e]=Array.from(document.querySelectorAll(s));if(!t)return void console.error("Could not find element for selector",s,", won't render attributes");e&&console.warn("Found multiple elements for selector",s),C[s]={el:t,attrs:[]}}const{el:i,attrs:c}=C[s];for(const e in r){let n=E(t,`${o}(${e})`,r[e],r);b(n)&&(n=n.join(",")),i.setAttribute(e,n||""),c.includes(e)||c.push(e)}const a=c.filter((t=>!r[t]));for(const t of a)i.removeAttribute(t)}(t,o,r,n):"group"in n?function(t,e,o,r){if(b(o))return console.warn("Specifying an array for group properties isnt supported"),[];return Object.keys(o).map((n=>{const s={group:e,data:o};if(r.namespaced)s.tagNamespace=!0===r.namespaced?e:r.namespaced;else if(r.namespacedAttribute){const t=!0===r.namespacedAttribute?e:r.namespacedAttribute;s.fullName=`${t}:${n}`,s.slotName=`${t}(${n})`}return F(t,e,o[n],r,s)})).filter(Boolean).flat()}(t,o,r,n):F(t,o,r,n)}function F(t,o,r,n={},s){const i=["content","json","rawContent"],c=t=>function(t,e){for(const o of t){const t=h[o];if(o&&t)return t[e]}}([a,n.tag],t);if(b(r))return r.map((e=>F(t,o,e,n,s))).filter(Boolean).flat();const{tag:a=n.tag||o}=r;let u="",l=!1,f=!1;if(y(r))u=r;else if(r.children&&b(r.children))l=!0,u=r.children.map((e=>{const r=F(t,o,e,n,s);return b(r)?r.map((({vnode:t})=>t)):r&&r.vnode}));else{let t=0;for(const e of i){if(!u&&r[e]){u=1===t?JSON.stringify(r[e]):r[e],f=t>1;break}t++}}const d=s&&s.fullName||o,p=s&&s.slotName||o;let{attrs:m}=r;if(m||"object"!=typeof r)m||(m={});else{m={...r},delete m.tag,delete m.children,delete m.to;for(const t of i)delete m[t]}if(l)u=E(t,p,u,r);else{const e=!!c("contentAsAttribute");let{valueAttribute:o}=n;if(!o&&e){const[t]=c("attributes");o=y(e)?e:t}if(o){const{nameless:e}=n;if(!e){const t=n.keyAttribute||c("keyAttribute");t&&(m[t]=d)}m[o]=E(t,p,m[o]||u,s),u=""}else u=E(t,p,u,r)}const g=s&&s.tagNamespace?`${s.tagNamespace}:${a}`:a;if("title"===g&&!t.isSSR)return void(document.title=u);f&&u&&(m.innerHTML=u);const v=e(g,m,u||void 0);return{to:r.to,vnode:v}}function E({metainfo:t,slots:e},o,r,n){const s=e&&e[o];if(!s||!g(s))return r;const i={content:r,metainfo:t};if(n&&n.group){const{group:t,data:e}=n;i[t]=e}const c=s(i);if(c&&c.length){const{children:t}=c[0];return t?t.toString():""}return r}const U="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,z=(t=>U?Symbol("[vue-meta]: "+t):"[vue-meta]: "+t)("meta_active");function _(t,e,o){for(const r in e)r in o?v(t[r])?_(t[r],e[r],o[r]):e[r]!==o[r]&&(t[r]=e[r]):t[r]=e[r];for(const r in o)e&&r in e||delete t[r]}function L(t){if(t||(t=o()||void 0),t)return t.appContext.config.globalProperties.$metaManager}function q(t,e){const s=o()||void 0;if(!e&&s&&(e=L(s)),!e)throw new Error("No manager or current instance");r(t)&&(n(t,((t,e)=>{_(i.meta,t,e)})),t=t.value);const i=e.addMeta(t,s);return i}function B(){return s(z)}const T=i({name:"Metainfo",inheritAttrs:!1,setup:(t,{slots:e})=>()=>{const t=L();if(t)return t.render({slots:e})}});function I(t,e,o,r){const n=b(r)?r:[r];t?o.endsWith("Attrs")||n.forEach((t=>{t.props||(t.props={}),t.props["data-vm-ssr"]=!0})):n.forEach(((t,e)=>{t.type===l&&n.splice(e,1)})),e[o]||(e[o]=[]),e[o].push(...n)}const D=(t=!1,e,o)=>H.create(t,e||m,o||p);class H{constructor(t,e,o,r){this.isSSR=!1,this.ssrCleanedUp=!1,this.isSSR=t,this.config=e,this.target=o,r&&"setup"in r&&g(r.setup)&&(this.resolver=r)}install(t){t.component("Metainfo",T),t.config.globalProperties.$metaManager=this,t.provide(z,this.target.context.active)}addMeta(t,e){e||(e=o()||void 0);const r={removed:[]},n={vm:e},{resolver:s}=this;s&&s.setup&&s.setup(n);const i=this.target.addSource(t,n,!0),a=t=>this.unmount(!!t,i,r,e);return e&&c(a),{meta:i,onRemoved:t=>r.removed.push(t),unmount:a}}unmount(t,e,o,r){if(r){const{$el:n}=r.proxy;if(n&&n.offsetParent){let r=new MutationObserver((s=>{for(const{removedNodes:i}of s)i&&i.forEach((s=>{s===n&&r&&(r.disconnect(),r=void 0,this.reallyUnmount(t,e,o))}))}));return void r.observe(n.parentNode,{childList:!0})}}this.reallyUnmount(t,e,o)}async reallyUnmount(t,e,o){this.target.delSource(e),!t&&o&&await Promise.all(o.removed.map((t=>t())))}render({slots:t}={}){const o=this.target.context.active,{isSSR:r}=this;if(!r&&!this.ssrCleanedUp){this.ssrCleanedUp=!0;const t=()=>{const t=document.querySelectorAll("[data-vm-ssr]");t&&t.length&&t.forEach((t=>t.parentNode&&t.parentNode.removeChild(t)))};"loading"===document.readyState?window.addEventListener("DOMContentLoaded",t,{once:!0}):t()}const n={};for(const e in o){const s=this.config[e]||{};let i=M({isSSR:r,metainfo:o,slots:t},e,o[e],s);if(!i)continue;b(i)||(i=[i]);let c="base"!==e&&o[e].to;!c&&"to"in s&&(c=s.to),!c&&"attributesFor"in s&&(c=e);for(const{to:t,vnode:e}of i)I(this.isSSR,n,t||c||"head",e)}if(t)for(const e in t){const r="default"===e?"head":e;if("head"!==r&&"body"!==r)continue;const s=t[e];g(s)&&I(this.isSSR,n,r,s({metainfo:o}))}return Object.keys(n).map((t=>e(a,{to:t},n[t])))}}H.create=(t,e,o)=>{const r=((t,e)=>{const o=[],r={active:e,resolve:t,sources:o},n=()=>$(r);return{context:r,compute:n,addSource:(t,e,o=!1)=>{const s=O(r,t,e||{});return o&&n(),s},delSource:(t,e=!0)=>{const r=o.findIndex((e=>e===t||e[j]===t));return r>-1&&(o.splice(r,1),e&&n(),!0)}}})(((t,e,r,n,s)=>g(o)?o(t,e,r,n,s):o.resolve(t,e,r,n,s)),u({}));return new H(t,e,r,o)};export{D as createMetaManager,p as deepestResolver,m as defaultConfig,L as getCurrentManager,f as resolveOption,B as useActiveMeta,q as useMeta}; +import{markRaw as t,h as e,getCurrentInstance as o,isProxy as r,watch as n,inject as s,defineComponent as i,reactive as c,onUnmounted as a,Teleport as u,Comment as l,computed as f}from"vue";const d=(t,e)=>(o,r)=>{let n=-1;if(r.reduce(((e,o,r)=>{const s=t(e,o);return s!==e?(n=r,s):e}),e),n>-1)return o[n]},p=d(((t,e)=>{const{depth:o}=e;return!t||o>t?o:t}));var m=Object.freeze({__proto__:null,setup:t=>{let e=0;if(t.vm){let{vm:o}=t;do{o.parent&&(e++,o=o.parent)}while(o&&o.parent&&o!==o.root)}t.depth=e},resolve:p});const b={body:{tag:"script",to:"body"},base:{valueAttribute:"href"},charset:{tag:"meta",nameless:!0,valueAttribute:"charset"},description:{tag:"meta"},og:{group:!0,namespacedAttribute:!0,tag:"meta",keyAttribute:"property"},twitter:{group:!0,namespacedAttribute:!0,tag:"meta"},htmlAttrs:{attributesFor:"html"},headAttrs:{attributesFor:"head"},bodyAttrs:{attributesFor:"body"}},h={title:{attributes:!1},base:{contentAsAttribute:!0,attributes:["href","target"]},meta:{contentAsAttribute:!0,keyAttribute:"name",attributes:["content","name","http-equiv","charset"]},link:{contentAsAttribute:!0,attributes:["href","crossorigin","rel","media","integrity","hreflang","type","referrerpolicy","sizes","imagesrcset","imagesizes","as","color"]},style:{attributes:["media"]},script:{attributes:["src","type","nomodule","async","defer","crossorigin","integrity","referrerpolicy"]},noscript:{attributes:!1}};Object.freeze({}),Object.freeze([]);const g=Array.isArray,y=t=>"function"==typeof t,v=t=>"string"==typeof t,S=t=>null!==t&&"object"==typeof t,A=Object.prototype.toString,k=t=>"[object Object]"===A.call(t),N=Symbol("kIsProxy"),j=Symbol("kProxySources"),R=Symbol("kProxyTarget"),w=Symbol("kResolveContext");function x(t){if(g(t))return t.map(x);if(S(t)){const e={};for(const o in t)e[o]="context"===o?t[o]:x(t[o]);return e}return t}const O=(t,e,o)=>{const r=[];for(const n of t)n&&e in n&&(r.push(n[e]),o&&o(n));return r},$=(t,e=[],o,r)=>{if(!o&&!r&&(({active:o,sources:r}=t),e.length))for(let t=0;tt[n])).filter(Boolean)}if(!o||!r)return;const n=((t,...e)=>{const o=t?Object.keys(t):[];if(e)for(const t of e)if(t&&S(t))for(const e in t)o.includes(e)||o.push(e);return o})(...r),s=Object.keys(o);for(const t of s)n.includes(t)||delete o[t];for(const s of n){let n=!1;for(let t=0;ti.push(t[w])));let a=t.resolve(c,i,o[s],s,e);k(a)&&(a=x(a)),o[s]=a}},P=(e,o,r,n=[])=>{const s=C(e,r,n),i=t(new Proxy(o,s));return!n.length&&e.sources&&e.sources.push(i),i},C=(t,e,o=[])=>({get:(r,n,s)=>{if(n===N)return!0;if(n===j)return t.sources;if(n===R)return r;if(n===w)return e;let i=Reflect.get(r,n,s);if(!S(i))return i;if(!i[N]){const s=[...o,n];i=P(t,i,e,s),Reflect.set(r,n,i)}return i},set:(e,r,n)=>{const s=Reflect.set(e,r,n);if(s){const i=g(e);let c,a=!1,{sources:u,active:l}=t,f=0;for(const t of o){if(u=O(u,t),i&&f===o.length-1){c=t;break}g(l)&&(a=!0),l=l[t],f++}if(a)return $(t),s;if(k(n))return $(t,o),s;let d,p=[];i?(d=u,p=u.map((t=>t[w]))):d=O(u,r,(t=>p.push(t[w])));let m=t.resolve(d,p,l,r,o);k(m)&&(m=x(m)),i&&c?l[c]=m:l[r]=m}return s},deleteProperty:(e,r)=>{const n=Reflect.deleteProperty(e,r);if(n){const n=g(e);let s,i=t.sources,c=t.active,a=0;for(const t of o){if(i=i.map((e=>e&&e[t])),n&&a===o.length-1){s=t;break}c=c[t],a++}if(i.some((t=>t&&r in t))){let e,a=[];n?(e=i,a=i.map((t=>t[w]))):e=O(i,r,(t=>a.push(t[w])));let u=t.resolve(e,a,c,r,o);k(u)&&(u=x(u)),n&&s?c[s]=u:c[r]=u}else delete c[r]}return n}}),M={};function F(t,o,r,n){return"attributesFor"in n?function(t,o,r,n){const{attributesFor:s}=n;if(!s||!r)return;if(t.isSSR)return{to:"",vnode:e(`ssr-${s}`,r)};if(!M[s]){const[t,e]=Array.from(document.querySelectorAll(s));if(!t)return void console.error("Could not find element for selector",s,", won't render attributes");e&&console.warn("Found multiple elements for selector",s),M[s]={el:t,attrs:[]}}const{el:i,attrs:c}=M[s];for(const e in r){let n=U(t,`${o}(${e})`,r[e],r);g(n)&&(n=n.join(",")),i.setAttribute(e,n||""),c.includes(e)||c.push(e)}const a=c.filter((t=>!r[t]));for(const t of a)i.removeAttribute(t)}(t,o,r,n):"group"in n?function(t,e,o,r){if(g(o))return console.warn("Specifying an array for group properties isnt supported"),[];return Object.keys(o).map((n=>{const s={group:e,data:o};if(r.namespaced)s.tagNamespace=!0===r.namespaced?e:r.namespaced;else if(r.namespacedAttribute){const t=!0===r.namespacedAttribute?e:r.namespacedAttribute;s.fullName=`${t}:${n}`,s.slotName=`${t}(${n})`}return E(t,e,o[n],r,s)})).filter(Boolean).flat()}(t,o,r,n):E(t,o,r,n)}function E(t,o,r,n={},s){const i=["content","json","rawContent"],c=t=>function(t,e){for(const o of t){const t=h[o];if(o&&t)return t[e]}}([a,n.tag],t);if(g(r))return r.map((e=>E(t,o,e,n,s))).filter(Boolean).flat();const{tag:a=n.tag||o}=r;let u="",l=!1,f=!1;if(v(r))u=r;else if(r.children&&g(r.children))l=!0,u=r.children.map((e=>{const r=E(t,o,e,n,s);return g(r)?r.map((({vnode:t})=>t)):r&&r.vnode}));else{let t=0;for(const e of i){if(!u&&r[e]){u=1===t?JSON.stringify(r[e]):r[e],f=t>1;break}t++}}const d=s&&s.fullName||o,p=s&&s.slotName||o;let{attrs:m}=r;if(m||"object"!=typeof r)m||(m={});else{m={...r},delete m.tag,delete m.children,delete m.to;for(const t of i)delete m[t]}if(l)u=U(t,p,u,r);else{const e=!!c("contentAsAttribute");let{valueAttribute:o}=n;if(!o&&e){const[t]=c("attributes");o=v(e)?e:t}if(o){const{nameless:e}=n;if(!e){const t=n.keyAttribute||c("keyAttribute");t&&(m[t]=d)}m[o]=U(t,p,m[o]||u,s),u=""}else u=U(t,p,u,r)}const b=s&&s.tagNamespace?`${s.tagNamespace}:${a}`:a;if("title"===b&&!t.isSSR)return void(document.title=u);f&&u&&(m.innerHTML=u);const y=e(b,m,u||void 0);return{to:r.to,vnode:y}}function U({metainfo:t,slots:e},o,r,n){const s=e&&e[o];if(!s||!y(s))return r;const i={content:r,metainfo:t};if(n&&n.group){const{group:t,data:e}=n;i[t]=e}const c=s(i);if(c&&c.length){const{children:t}=c[0];return t?t.toString():""}return r}const z="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,_=(t=>z?Symbol("[vue-meta]: "+t):"[vue-meta]: "+t)("meta_active");function L(t,e,o){for(const r in e)r in o?S(t[r])?L(t[r],e[r],o[r]):e[r]!==o[r]&&(t[r]=e[r]):t[r]=e[r];for(const r in o)e&&r in e||delete t[r]}function q(t){if(t||(t=o()||void 0),t)return t.appContext.config.globalProperties.$metaManager}function B(t,e){const s=o()||void 0;if(!e&&s&&(e=q(s)),!e)throw new Error("No manager or current instance");r(t)&&(n(t,((t,e)=>{L(i.meta,t,e)})),t=t.value);const i=e.addMeta(t,s);return i}function I(){return s(_)}const T=i({name:"Metainfo",inheritAttrs:!1,setup:(t,{slots:e})=>()=>{const t=q();if(t)return t.render({slots:e})}});function D(t,e,o,r){const n=g(r)?r:[r];t?o.endsWith("Attrs")||n.forEach((t=>{t.props||(t.props={}),t.props["data-vm-ssr"]=!0})):n.forEach(((t,e)=>{t.type===l&&n.splice(e,1)})),e[o]||(e[o]=[]),e[o].push(...n)}const H=(t=!1,e,o)=>J.create(t,e||b,o||m);class J{isSSR=!1;config;target;resolver;ssrCleanedUp=!1;constructor(t,e,o,r){this.isSSR=t,this.config=e,this.target=o,r&&"setup"in r&&y(r.setup)&&(this.resolver=r)}static create=(t,e,o)=>{const r=((t,e)=>{const o=[],r={active:e,resolve:t,sources:o},n=()=>$(r);return{context:r,compute:n,addSource:(t,e,o=!1)=>{const s=P(r,t,e||{});return o&&n(),s},delSource:(t,e=!0)=>{const r=o.findIndex((e=>e===t||e[R]===t));return r>-1&&(o.splice(r,1),e&&n(),!0)}}})(((t,e,r,n,s)=>y(o)?o(t,e,r,n,s):o.resolve(t,e,r,n,s)),c({}));return new J(t,e,r,o)};install(t){t.component("Metainfo",T),t.config.globalProperties.$metaManager=this,t.provide(_,this.target.context.active)}addMeta(t,e){e||(e=o()||void 0);const r={removed:[]},n={vm:e},{resolver:s}=this;s&&s.setup&&s.setup(n);const i=this.target.addSource(t,n,!0),c=t=>this.unmount(!!t,i,r,e);return e&&a(c),{meta:i,onRemoved:t=>r.removed.push(t),unmount:c}}unmount(t,e,o,r){if(r){const{$el:n}=r.proxy;if(n&&n.offsetParent){let r=new MutationObserver((s=>{for(const{removedNodes:i}of s)i&&i.forEach((s=>{s===n&&r&&(r.disconnect(),r=void 0,this.reallyUnmount(t,e,o))}))}));return void r.observe(n.parentNode,{childList:!0})}}this.reallyUnmount(t,e,o)}async reallyUnmount(t,e,o){this.target.delSource(e),!t&&o&&await Promise.all(o.removed.map((t=>t())))}render({slots:t}={}){const o=this.target.context.active,{isSSR:r}=this;if(!r&&!this.ssrCleanedUp){this.ssrCleanedUp=!0;const t=()=>{const t=document.querySelectorAll("[data-vm-ssr]");t&&t.length&&t.forEach((t=>t.parentNode&&t.parentNode.removeChild(t)))};"loading"===document.readyState?window.addEventListener("DOMContentLoaded",t,{once:!0}):t()}const n={};for(const e in o){const s=this.config[e]||{};let i=F({isSSR:r,metainfo:o,slots:t},e,o[e],s);if(!i)continue;g(i)||(i=[i]);let c="base"!==e&&o[e].to;!c&&"to"in s&&(c=s.to),!c&&"attributesFor"in s&&(c=e);for(const{to:t,vnode:e}of i)D(this.isSSR,n,t||c||"head",e)}if(t)for(const e in t){const r="default"===e?"head":e;if("head"!==r&&"body"!==r)continue;const s=t[e];y(s)&&D(this.isSSR,n,r,s({metainfo:o}))}return Object.keys(n).map((t=>e(u,{to:t},n[t])))}}const W={keyName:"metaInfo"},G=(t,e={})=>{const r=Object.assign({},W,e);t.mixin((t=>({created(){const e=o();if(!e?.type||!(t.keyName in e.type))return;const r=e.type[t.keyName];y(r)?B(f(r)):B(r)}}))(r))};export{H as createMetaManager,m as deepestResolver,b as defaultConfig,q as getCurrentManager,G as plugin,d as resolveOption,I as useActiveMeta,B as useMeta}; diff --git a/dist/vue-meta.esm-bundler.js b/dist/vue-meta.esm-bundler.js index 62354d4..bddb024 100644 --- a/dist/vue-meta.esm-bundler.js +++ b/dist/vue-meta.esm-bundler.js @@ -1,12 +1,12 @@ /** - * vue-meta v3.0.0-alpha.7 + * vue-meta v3.0.0-alpha.8 * (c) 2021 * - Pim (@pimlie) * - All the amazing contributors * @license MIT */ -import { markRaw, h, getCurrentInstance, isProxy, watch, inject, defineComponent, onUnmounted, Teleport, reactive, Comment } from 'vue'; +import { markRaw, h, getCurrentInstance, isProxy, watch, inject, defineComponent, reactive, onUnmounted, Teleport, Comment, computed } from 'vue'; const resolveOption = (predicament, initialValue) => (options, contexts) => { let resolvedIndex = -1; @@ -795,9 +795,12 @@ function addVnode(isSSR, teleports, to, vnodes) { } const createMetaManager = (isSSR = false, config, resolver) => MetaManager.create(isSSR, config || defaultConfig, resolver || defaultResolver); class MetaManager { + isSSR = false; + config; + target; + resolver; + ssrCleanedUp = false; constructor(isSSR, config, target, resolver) { - this.isSSR = false; - this.ssrCleanedUp = false; this.isSSR = isSSR; this.config = config; this.target = target; @@ -805,6 +808,19 @@ class MetaManager { this.resolver = resolver; } } + static create = (isSSR, config, resolver) => { + const resolve = (options, contexts, active, key, pathSegments) => { + if (isFunction(resolver)) { + return resolver(options, contexts, active, key, pathSegments); + } + return resolver.resolve(options, contexts, active, key, pathSegments); + }; + const active = reactive({}); + const mergedObject = createMergedObject(resolve, active); + // TODO: validate resolver + const manager = new MetaManager(isSSR, config, mergedObject, resolver); + return manager; + }; install(app) { app.component('Metainfo', Metainfo); app.config.globalProperties.$metaManager = this; @@ -928,19 +944,30 @@ class MetaManager { return h(Teleport, { to }, teleport); }); } -} -MetaManager.create = (isSSR, config, resolver) => { - const resolve = (options, contexts, active, key, pathSegments) => { - if (isFunction(resolver)) { - return resolver(options, contexts, active, key, pathSegments); +} + +const defaultOptions = { + keyName: 'metaInfo' +}; +const createMixin = options => ({ + created() { + const instance = getCurrentInstance(); + if (!instance?.type || !(options.keyName in instance.type)) { + return; } - return resolver.resolve(options, contexts, active, key, pathSegments); - }; - const active = reactive({}); - const mergedObject = createMergedObject(resolve, active); - // TODO: validate resolver - const manager = new MetaManager(isSSR, config, mergedObject, resolver); - return manager; + const metaInfo = instance.type[options.keyName]; + if (isFunction(metaInfo)) { + const computedMetaInfo = computed(metaInfo); + useMeta(computedMetaInfo); + } + else { + useMeta(metaInfo); + } + } +}); +const install = (app, _options = {}) => { + const options = Object.assign({}, defaultOptions, _options); + app.mixin(createMixin(options)); }; -export { createMetaManager, defaultResolver as deepestResolver, defaultConfig, getCurrentManager, resolveOption, useActiveMeta, useMeta }; +export { createMetaManager, defaultResolver as deepestResolver, defaultConfig, getCurrentManager, install as plugin, resolveOption, useActiveMeta, useMeta }; diff --git a/dist/vue-meta.global.js b/dist/vue-meta.global.js index 7b892b7..5e3be92 100644 --- a/dist/vue-meta.global.js +++ b/dist/vue-meta.global.js @@ -1,5 +1,5 @@ /** - * vue-meta v3.0.0-alpha.7 + * vue-meta v3.0.0-alpha.8 * (c) 2021 * - Pim (@pimlie) * - All the amazing contributors @@ -796,9 +796,12 @@ var VueMeta = (function (exports, vue) { } const createMetaManager = (isSSR = false, config, resolver) => MetaManager.create(isSSR, config || defaultConfig, resolver || defaultResolver); class MetaManager { + isSSR = false; + config; + target; + resolver; + ssrCleanedUp = false; constructor(isSSR, config, target, resolver) { - this.isSSR = false; - this.ssrCleanedUp = false; this.isSSR = isSSR; this.config = config; this.target = target; @@ -806,6 +809,19 @@ var VueMeta = (function (exports, vue) { this.resolver = resolver; } } + static create = (isSSR, config, resolver) => { + const resolve = (options, contexts, active, key, pathSegments) => { + if (isFunction(resolver)) { + return resolver(options, contexts, active, key, pathSegments); + } + return resolver.resolve(options, contexts, active, key, pathSegments); + }; + const active = vue.reactive({}); + const mergedObject = createMergedObject(resolve, active); + // TODO: validate resolver + const manager = new MetaManager(isSSR, config, mergedObject, resolver); + return manager; + }; install(app) { app.component('Metainfo', Metainfo); app.config.globalProperties.$metaManager = this; @@ -929,25 +945,37 @@ var VueMeta = (function (exports, vue) { return vue.h(vue.Teleport, { to }, teleport); }); } - } - MetaManager.create = (isSSR, config, resolver) => { - const resolve = (options, contexts, active, key, pathSegments) => { - if (isFunction(resolver)) { - return resolver(options, contexts, active, key, pathSegments); + } + + const defaultOptions = { + keyName: 'metaInfo' + }; + const createMixin = options => ({ + created() { + const instance = vue.getCurrentInstance(); + if (!instance?.type || !(options.keyName in instance.type)) { + return; } - return resolver.resolve(options, contexts, active, key, pathSegments); - }; - const active = vue.reactive({}); - const mergedObject = createMergedObject(resolve, active); - // TODO: validate resolver - const manager = new MetaManager(isSSR, config, mergedObject, resolver); - return manager; + const metaInfo = instance.type[options.keyName]; + if (isFunction(metaInfo)) { + const computedMetaInfo = vue.computed(metaInfo); + useMeta(computedMetaInfo); + } + else { + useMeta(metaInfo); + } + } + }); + const install = (app, _options = {}) => { + const options = Object.assign({}, defaultOptions, _options); + app.mixin(createMixin(options)); }; exports.createMetaManager = createMetaManager; exports.deepestResolver = defaultResolver; exports.defaultConfig = defaultConfig; exports.getCurrentManager = getCurrentManager; + exports.plugin = install; exports.resolveOption = resolveOption; exports.useActiveMeta = useActiveMeta; exports.useMeta = useMeta; diff --git a/dist/vue-meta.global.min.js b/dist/vue-meta.global.min.js index e020dd9..6f37b1a 100644 --- a/dist/vue-meta.global.min.js +++ b/dist/vue-meta.global.min.js @@ -1,8 +1,8 @@ /** - * vue-meta v3.0.0-alpha.7 + * vue-meta v3.0.0-alpha.8 * (c) 2021 * - Pim (@pimlie) * - All the amazing contributors * @license MIT */ -var VueMeta=function(t,e){"use strict";const r=(t,e)=>(r,o)=>{let n=-1;if(o.reduce(((e,r,o)=>{const s=t(e,r);return s!==e?(n=o,s):e}),e),n>-1)return r[n]},o=r(((t,e)=>{const{depth:r}=e;return!t||r>t?r:t}));var n=Object.freeze({__proto__:null,setup:t=>{let e=0;if(t.vm){let{vm:r}=t;do{r.parent&&(e++,r=r.parent)}while(r&&r.parent&&r!==r.root)}t.depth=e},resolve:o});const s={body:{tag:"script",to:"body"},base:{valueAttribute:"href"},charset:{tag:"meta",nameless:!0,valueAttribute:"charset"},description:{tag:"meta"},og:{group:!0,namespacedAttribute:!0,tag:"meta",keyAttribute:"property"},twitter:{group:!0,namespacedAttribute:!0,tag:"meta"},htmlAttrs:{attributesFor:"html"},headAttrs:{attributesFor:"head"},bodyAttrs:{attributesFor:"body"}},i={title:{attributes:!1},base:{contentAsAttribute:!0,attributes:["href","target"]},meta:{contentAsAttribute:!0,keyAttribute:"name",attributes:["content","name","http-equiv","charset"]},link:{contentAsAttribute:!0,attributes:["href","crossorigin","rel","media","integrity","hreflang","type","referrerpolicy","sizes","imagesrcset","imagesizes","as","color"]},style:{attributes:["media"]},script:{attributes:["src","type","nomodule","async","defer","crossorigin","integrity","referrerpolicy"]},noscript:{attributes:!1}};Object.freeze({}),Object.freeze([]);const c=Array.isArray,a=t=>"function"==typeof t,u=t=>"string"==typeof t,l=t=>null!==t&&"object"==typeof t,f=Object.prototype.toString,d=t=>"[object Object]"===f.call(t),p=Symbol("kIsProxy"),m=Symbol("kProxySources"),h=Symbol("kProxyTarget"),b=Symbol("kResolveContext");function g(t){if(c(t))return t.map(g);if(l(t)){const e={};for(const r in t)e[r]="context"===r?t[r]:g(t[r]);return e}return t}const v=(t,e,r)=>{const o=[];for(const n of t)n&&e in n&&(o.push(n[e]),r&&r(n));return o},y=(t,e=[],r,o)=>{if(!r&&!o&&(({active:r,sources:o}=t),e.length))for(let t=0;tt[n])).filter(Boolean)}if(!r||!o)return;const n=((t,...e)=>{const r=t?Object.keys(t):[];if(e)for(const t of e)if(t&&l(t))for(const e in t)r.includes(e)||r.push(e);return r})(...o),s=Object.keys(r);for(const t of s)n.includes(t)||delete r[t];for(const s of n){let n=!1;for(let t=0;ti.push(t[b])));let u=t.resolve(a,i,r[s],s,e);d(u)&&(u=g(u)),r[s]=u}},S=(t,r,o,n=[])=>{const s=A(t,o,n),i=e.markRaw(new Proxy(r,s));return!n.length&&t.sources&&t.sources.push(i),i},A=(t,e,r=[])=>({get:(o,n,s)=>{if(n===p)return!0;if(n===m)return t.sources;if(n===h)return o;if(n===b)return e;let i=Reflect.get(o,n,s);if(!l(i))return i;if(!i[p]){const s=[...r,n];i=S(t,i,e,s),Reflect.set(o,n,i)}return i},set:(e,o,n)=>{const s=Reflect.set(e,o,n);if(s){const i=c(e);let a,u=!1,{sources:l,active:f}=t,p=0;for(const t of r){if(l=v(l,t),i&&p===r.length-1){a=t;break}c(f)&&(u=!0),f=f[t],p++}if(u)return y(t),s;if(d(n))return y(t,r),s;let m,h=[];i?(m=l,h=l.map((t=>t[b]))):m=v(l,o,(t=>h.push(t[b])));let S=t.resolve(m,h,f,o,r);d(S)&&(S=g(S)),i&&a?f[a]=S:f[o]=S}return s},deleteProperty:(e,o)=>{const n=Reflect.deleteProperty(e,o);if(n){const n=c(e);let s,i=t.sources,a=t.active,u=0;for(const t of r){if(i=i.map((e=>e&&e[t])),n&&u===r.length-1){s=t;break}a=a[t],u++}if(i.some((t=>t&&o in t))){let e,c=[];n?(e=i,c=i.map((t=>t[b]))):e=v(i,o,(t=>c.push(t[b])));let u=t.resolve(e,c,a,o,r);d(u)&&(u=g(u)),n&&s?a[s]=u:a[o]=u}else delete a[o]}return n}}),k={};function j(t,r,o,n){return"attributesFor"in n?function(t,r,o,n){const{attributesFor:s}=n;if(!s||!o)return;if(t.isSSR)return{to:"",vnode:e.h(`ssr-${s}`,o)};if(!k[s]){const[t,e]=Array.from(document.querySelectorAll(s));if(!t)return void console.error("Could not find element for selector",s,", won't render attributes");e&&console.warn("Found multiple elements for selector",s),k[s]={el:t,attrs:[]}}const{el:i,attrs:a}=k[s];for(const e in o){let n=C(t,`${r}(${e})`,o[e],o);c(n)&&(n=n.join(",")),i.setAttribute(e,n||""),a.includes(e)||a.push(e)}const u=a.filter((t=>!o[t]));for(const t of u)i.removeAttribute(t)}(t,r,o,n):"group"in n?function(t,e,r,o){if(c(r))return console.warn("Specifying an array for group properties isnt supported"),[];return Object.keys(r).map((n=>{const s={group:e,data:r};if(o.namespaced)s.tagNamespace=!0===o.namespaced?e:o.namespaced;else if(o.namespacedAttribute){const t=!0===o.namespacedAttribute?e:o.namespacedAttribute;s.fullName=`${t}:${n}`,s.slotName=`${t}(${n})`}return w(t,e,r[n],o,s)})).filter(Boolean).flat()}(t,r,o,n):w(t,r,o,n)}function w(t,r,o,n={},s){const a=["content","json","rawContent"],l=t=>function(t,e){for(const r of t){const t=i[r];if(r&&t)return t[e]}}([f,n.tag],t);if(c(o))return o.map((e=>w(t,r,e,n,s))).filter(Boolean).flat();const{tag:f=n.tag||r}=o;let d="",p=!1,m=!1;if(u(o))d=o;else if(o.children&&c(o.children))p=!0,d=o.children.map((e=>{const o=w(t,r,e,n,s);return c(o)?o.map((({vnode:t})=>t)):o&&o.vnode}));else{let t=0;for(const e of a){if(!d&&o[e]){d=1===t?JSON.stringify(o[e]):o[e],m=t>1;break}t++}}const h=s&&s.fullName||r,b=s&&s.slotName||r;let{attrs:g}=o;if(g||"object"!=typeof o)g||(g={});else{g={...o},delete g.tag,delete g.children,delete g.to;for(const t of a)delete g[t]}if(p)d=C(t,b,d,o);else{const e=!!l("contentAsAttribute");let{valueAttribute:r}=n;if(!r&&e){const[t]=l("attributes");r=u(e)?e:t}if(r){const{nameless:e}=n;if(!e){const t=n.keyAttribute||l("keyAttribute");t&&(g[t]=h)}g[r]=C(t,b,g[r]||d,s),d=""}else d=C(t,b,d,o)}const v=s&&s.tagNamespace?`${s.tagNamespace}:${f}`:f;if("title"===v&&!t.isSSR)return void(document.title=d);m&&d&&(g.innerHTML=d);const y=e.h(v,g,d||void 0);return{to:o.to,vnode:y}}function C({metainfo:t,slots:e},r,o,n){const s=e&&e[r];if(!s||!a(s))return o;const i={content:o,metainfo:t};if(n&&n.group){const{group:t,data:e}=n;i[t]=e}const c=s(i);if(c&&c.length){const{children:t}=c[0];return t?t.toString():""}return o}const M="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,R=(t=>M?Symbol("[vue-meta]: "+t):"[vue-meta]: "+t)("meta_active");function O(t,e,r){for(const o in e)o in r?l(t[o])?O(t[o],e[o],r[o]):e[o]!==r[o]&&(t[o]=e[o]):t[o]=e[o];for(const o in r)e&&o in e||delete t[o]}function x(t){if(t||(t=e.getCurrentInstance()||void 0),t)return t.appContext.config.globalProperties.$metaManager}const N=e.defineComponent({name:"Metainfo",inheritAttrs:!1,setup:(t,{slots:e})=>()=>{const t=x();if(t)return t.render({slots:e})}}),$="data-vm-ssr";function P(t,r,o,n){const s=c(n)?n:[n];t?o.endsWith("Attrs")||s.forEach((t=>{t.props||(t.props={}),t.props[$]=!0})):s.forEach(((t,r)=>{t.type===e.Comment&&s.splice(r,1)})),r[o]||(r[o]=[]),r[o].push(...s)}class F{constructor(t,e,r,o){this.isSSR=!1,this.ssrCleanedUp=!1,this.isSSR=t,this.config=e,this.target=r,o&&"setup"in o&&a(o.setup)&&(this.resolver=o)}install(t){t.component("Metainfo",N),t.config.globalProperties.$metaManager=this,t.provide(R,this.target.context.active)}addMeta(t,r){r||(r=e.getCurrentInstance()||void 0);const o={removed:[]},n={vm:r},{resolver:s}=this;s&&s.setup&&s.setup(n);const i=this.target.addSource(t,n,!0),c=t=>this.unmount(!!t,i,o,r);return r&&e.onUnmounted(c),{meta:i,onRemoved:t=>o.removed.push(t),unmount:c}}unmount(t,e,r,o){if(o){const{$el:n}=o.proxy;if(n&&n.offsetParent){let o=new MutationObserver((s=>{for(const{removedNodes:i}of s)i&&i.forEach((s=>{s===n&&o&&(o.disconnect(),o=void 0,this.reallyUnmount(t,e,r))}))}));return void o.observe(n.parentNode,{childList:!0})}}this.reallyUnmount(t,e,r)}async reallyUnmount(t,e,r){this.target.delSource(e),!t&&r&&await Promise.all(r.removed.map((t=>t())))}render({slots:t}={}){const r=this.target.context.active,{isSSR:o}=this;if(!o&&!this.ssrCleanedUp){this.ssrCleanedUp=!0;const t=()=>{const t=document.querySelectorAll("[data-vm-ssr]");t&&t.length&&t.forEach((t=>t.parentNode&&t.parentNode.removeChild(t)))};"loading"===document.readyState?window.addEventListener("DOMContentLoaded",t,{once:!0}):t()}const n={};for(const e in r){const s=this.config[e]||{};let i=j({isSSR:o,metainfo:r,slots:t},e,r[e],s);if(!i)continue;c(i)||(i=[i]);let a="base"!==e&&r[e].to;!a&&"to"in s&&(a=s.to),!a&&"attributesFor"in s&&(a=e);for(const{to:t,vnode:e}of i)P(this.isSSR,n,t||a||"head",e)}if(t)for(const e in t){const o="default"===e?"head":e;if("head"!==o&&"body"!==o)continue;const s=t[e];a(s)&&P(this.isSSR,n,o,s({metainfo:r}))}return Object.keys(n).map((t=>e.h(e.Teleport,{to:t},n[t])))}}return F.create=(t,r,o)=>{const n=((t,e)=>{const r=[],o={active:e,resolve:t,sources:r},n=()=>y(o);return{context:o,compute:n,addSource:(t,e,r=!1)=>{const s=S(o,t,e||{});return r&&n(),s},delSource:(t,e=!0)=>{const o=r.findIndex((e=>e===t||e[h]===t));return o>-1&&(r.splice(o,1),e&&n(),!0)}}})(((t,e,r,n,s)=>a(o)?o(t,e,r,n,s):o.resolve(t,e,r,n,s)),e.reactive({}));return new F(t,r,n,o)},t.createMetaManager=(t=!1,e,r)=>F.create(t,e||s,r||n),t.deepestResolver=n,t.defaultConfig=s,t.getCurrentManager=x,t.resolveOption=r,t.useActiveMeta=function(){return e.inject(R)},t.useMeta=function(t,r){const o=e.getCurrentInstance()||void 0;if(!r&&o&&(r=x(o)),!r)throw new Error("No manager or current instance");e.isProxy(t)&&(e.watch(t,((t,e)=>{O(n.meta,t,e)})),t=t.value);const n=r.addMeta(t,o);return n},Object.defineProperty(t,"__esModule",{value:!0}),t}({},Vue); +var VueMeta=function(t,e){"use strict";const r=(t,e)=>(r,n)=>{let o=-1;if(n.reduce(((e,r,n)=>{const s=t(e,r);return s!==e?(o=n,s):e}),e),o>-1)return r[o]},n=r(((t,e)=>{const{depth:r}=e;return!t||r>t?r:t}));var o=Object.freeze({__proto__:null,setup:t=>{let e=0;if(t.vm){let{vm:r}=t;do{r.parent&&(e++,r=r.parent)}while(r&&r.parent&&r!==r.root)}t.depth=e},resolve:n});const s={body:{tag:"script",to:"body"},base:{valueAttribute:"href"},charset:{tag:"meta",nameless:!0,valueAttribute:"charset"},description:{tag:"meta"},og:{group:!0,namespacedAttribute:!0,tag:"meta",keyAttribute:"property"},twitter:{group:!0,namespacedAttribute:!0,tag:"meta"},htmlAttrs:{attributesFor:"html"},headAttrs:{attributesFor:"head"},bodyAttrs:{attributesFor:"body"}},i={title:{attributes:!1},base:{contentAsAttribute:!0,attributes:["href","target"]},meta:{contentAsAttribute:!0,keyAttribute:"name",attributes:["content","name","http-equiv","charset"]},link:{contentAsAttribute:!0,attributes:["href","crossorigin","rel","media","integrity","hreflang","type","referrerpolicy","sizes","imagesrcset","imagesizes","as","color"]},style:{attributes:["media"]},script:{attributes:["src","type","nomodule","async","defer","crossorigin","integrity","referrerpolicy"]},noscript:{attributes:!1}};Object.freeze({}),Object.freeze([]);const c=Array.isArray,a=t=>"function"==typeof t,u=t=>"string"==typeof t,l=t=>null!==t&&"object"==typeof t,f=Object.prototype.toString,d=t=>"[object Object]"===f.call(t),p=Symbol("kIsProxy"),m=Symbol("kProxySources"),g=Symbol("kProxyTarget"),h=Symbol("kResolveContext");function b(t){if(c(t))return t.map(b);if(l(t)){const e={};for(const r in t)e[r]="context"===r?t[r]:b(t[r]);return e}return t}const y=(t,e,r)=>{const n=[];for(const o of t)o&&e in o&&(n.push(o[e]),r&&r(o));return n},v=(t,e=[],r,n)=>{if(!r&&!n&&(({active:r,sources:n}=t),e.length))for(let t=0;tt[o])).filter(Boolean)}if(!r||!n)return;const o=((t,...e)=>{const r=t?Object.keys(t):[];if(e)for(const t of e)if(t&&l(t))for(const e in t)r.includes(e)||r.push(e);return r})(...n),s=Object.keys(r);for(const t of s)o.includes(t)||delete r[t];for(const s of o){let o=!1;for(let t=0;ti.push(t[h])));let u=t.resolve(a,i,r[s],s,e);d(u)&&(u=b(u)),r[s]=u}},S=(t,r,n,o=[])=>{const s=A(t,n,o),i=e.markRaw(new Proxy(r,s));return!o.length&&t.sources&&t.sources.push(i),i},A=(t,e,r=[])=>({get:(n,o,s)=>{if(o===p)return!0;if(o===m)return t.sources;if(o===g)return n;if(o===h)return e;let i=Reflect.get(n,o,s);if(!l(i))return i;if(!i[p]){const s=[...r,o];i=S(t,i,e,s),Reflect.set(n,o,i)}return i},set:(e,n,o)=>{const s=Reflect.set(e,n,o);if(s){const i=c(e);let a,u=!1,{sources:l,active:f}=t,p=0;for(const t of r){if(l=y(l,t),i&&p===r.length-1){a=t;break}c(f)&&(u=!0),f=f[t],p++}if(u)return v(t),s;if(d(o))return v(t,r),s;let m,g=[];i?(m=l,g=l.map((t=>t[h]))):m=y(l,n,(t=>g.push(t[h])));let S=t.resolve(m,g,f,n,r);d(S)&&(S=b(S)),i&&a?f[a]=S:f[n]=S}return s},deleteProperty:(e,n)=>{const o=Reflect.deleteProperty(e,n);if(o){const o=c(e);let s,i=t.sources,a=t.active,u=0;for(const t of r){if(i=i.map((e=>e&&e[t])),o&&u===r.length-1){s=t;break}a=a[t],u++}if(i.some((t=>t&&n in t))){let e,c=[];o?(e=i,c=i.map((t=>t[h]))):e=y(i,n,(t=>c.push(t[h])));let u=t.resolve(e,c,a,n,r);d(u)&&(u=b(u)),o&&s?a[s]=u:a[n]=u}else delete a[n]}return o}}),k={};function j(t,r,n,o){return"attributesFor"in o?function(t,r,n,o){const{attributesFor:s}=o;if(!s||!n)return;if(t.isSSR)return{to:"",vnode:e.h(`ssr-${s}`,n)};if(!k[s]){const[t,e]=Array.from(document.querySelectorAll(s));if(!t)return void console.error("Could not find element for selector",s,", won't render attributes");e&&console.warn("Found multiple elements for selector",s),k[s]={el:t,attrs:[]}}const{el:i,attrs:a}=k[s];for(const e in n){let o=w(t,`${r}(${e})`,n[e],n);c(o)&&(o=o.join(",")),i.setAttribute(e,o||""),a.includes(e)||a.push(e)}const u=a.filter((t=>!n[t]));for(const t of u)i.removeAttribute(t)}(t,r,n,o):"group"in o?function(t,e,r,n){if(c(r))return console.warn("Specifying an array for group properties isnt supported"),[];return Object.keys(r).map((o=>{const s={group:e,data:r};if(n.namespaced)s.tagNamespace=!0===n.namespaced?e:n.namespaced;else if(n.namespacedAttribute){const t=!0===n.namespacedAttribute?e:n.namespacedAttribute;s.fullName=`${t}:${o}`,s.slotName=`${t}(${o})`}return C(t,e,r[o],n,s)})).filter(Boolean).flat()}(t,r,n,o):C(t,r,n,o)}function C(t,r,n,o={},s){const a=["content","json","rawContent"],l=t=>function(t,e){for(const r of t){const t=i[r];if(r&&t)return t[e]}}([f,o.tag],t);if(c(n))return n.map((e=>C(t,r,e,o,s))).filter(Boolean).flat();const{tag:f=o.tag||r}=n;let d="",p=!1,m=!1;if(u(n))d=n;else if(n.children&&c(n.children))p=!0,d=n.children.map((e=>{const n=C(t,r,e,o,s);return c(n)?n.map((({vnode:t})=>t)):n&&n.vnode}));else{let t=0;for(const e of a){if(!d&&n[e]){d=1===t?JSON.stringify(n[e]):n[e],m=t>1;break}t++}}const g=s&&s.fullName||r,h=s&&s.slotName||r;let{attrs:b}=n;if(b||"object"!=typeof n)b||(b={});else{b={...n},delete b.tag,delete b.children,delete b.to;for(const t of a)delete b[t]}if(p)d=w(t,h,d,n);else{const e=!!l("contentAsAttribute");let{valueAttribute:r}=o;if(!r&&e){const[t]=l("attributes");r=u(e)?e:t}if(r){const{nameless:e}=o;if(!e){const t=o.keyAttribute||l("keyAttribute");t&&(b[t]=g)}b[r]=w(t,h,b[r]||d,s),d=""}else d=w(t,h,d,n)}const y=s&&s.tagNamespace?`${s.tagNamespace}:${f}`:f;if("title"===y&&!t.isSSR)return void(document.title=d);m&&d&&(b.innerHTML=d);const v=e.h(y,b,d||void 0);return{to:n.to,vnode:v}}function w({metainfo:t,slots:e},r,n,o){const s=e&&e[r];if(!s||!a(s))return n;const i={content:n,metainfo:t};if(o&&o.group){const{group:t,data:e}=o;i[t]=e}const c=s(i);if(c&&c.length){const{children:t}=c[0];return t?t.toString():""}return n}const M="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,N=(t=>M?Symbol("[vue-meta]: "+t):"[vue-meta]: "+t)("meta_active");function R(t,e,r){for(const n in e)n in r?l(t[n])?R(t[n],e[n],r[n]):e[n]!==r[n]&&(t[n]=e[n]):t[n]=e[n];for(const n in r)e&&n in e||delete t[n]}function O(t){if(t||(t=e.getCurrentInstance()||void 0),t)return t.appContext.config.globalProperties.$metaManager}function x(t,r){const n=e.getCurrentInstance()||void 0;if(!r&&n&&(r=O(n)),!r)throw new Error("No manager or current instance");e.isProxy(t)&&(e.watch(t,((t,e)=>{R(o.meta,t,e)})),t=t.value);const o=r.addMeta(t,n);return o}const $=e.defineComponent({name:"Metainfo",inheritAttrs:!1,setup:(t,{slots:e})=>()=>{const t=O();if(t)return t.render({slots:e})}}),P="data-vm-ssr";function F(t,r,n,o){const s=c(o)?o:[o];t?n.endsWith("Attrs")||s.forEach((t=>{t.props||(t.props={}),t.props[P]=!0})):s.forEach(((t,r)=>{t.type===e.Comment&&s.splice(r,1)})),r[n]||(r[n]=[]),r[n].push(...s)}class I{isSSR=!1;config;target;resolver;ssrCleanedUp=!1;constructor(t,e,r,n){this.isSSR=t,this.config=e,this.target=r,n&&"setup"in n&&a(n.setup)&&(this.resolver=n)}static create=(t,r,n)=>{const o=((t,e)=>{const r=[],n={active:e,resolve:t,sources:r},o=()=>v(n);return{context:n,compute:o,addSource:(t,e,r=!1)=>{const s=S(n,t,e||{});return r&&o(),s},delSource:(t,e=!0)=>{const n=r.findIndex((e=>e===t||e[g]===t));return n>-1&&(r.splice(n,1),e&&o(),!0)}}})(((t,e,r,o,s)=>a(n)?n(t,e,r,o,s):n.resolve(t,e,r,o,s)),e.reactive({}));return new I(t,r,o,n)};install(t){t.component("Metainfo",$),t.config.globalProperties.$metaManager=this,t.provide(N,this.target.context.active)}addMeta(t,r){r||(r=e.getCurrentInstance()||void 0);const n={removed:[]},o={vm:r},{resolver:s}=this;s&&s.setup&&s.setup(o);const i=this.target.addSource(t,o,!0),c=t=>this.unmount(!!t,i,n,r);return r&&e.onUnmounted(c),{meta:i,onRemoved:t=>n.removed.push(t),unmount:c}}unmount(t,e,r,n){if(n){const{$el:o}=n.proxy;if(o&&o.offsetParent){let n=new MutationObserver((s=>{for(const{removedNodes:i}of s)i&&i.forEach((s=>{s===o&&n&&(n.disconnect(),n=void 0,this.reallyUnmount(t,e,r))}))}));return void n.observe(o.parentNode,{childList:!0})}}this.reallyUnmount(t,e,r)}async reallyUnmount(t,e,r){this.target.delSource(e),!t&&r&&await Promise.all(r.removed.map((t=>t())))}render({slots:t}={}){const r=this.target.context.active,{isSSR:n}=this;if(!n&&!this.ssrCleanedUp){this.ssrCleanedUp=!0;const t=()=>{const t=document.querySelectorAll("[data-vm-ssr]");t&&t.length&&t.forEach((t=>t.parentNode&&t.parentNode.removeChild(t)))};"loading"===document.readyState?window.addEventListener("DOMContentLoaded",t,{once:!0}):t()}const o={};for(const e in r){const s=this.config[e]||{};let i=j({isSSR:n,metainfo:r,slots:t},e,r[e],s);if(!i)continue;c(i)||(i=[i]);let a="base"!==e&&r[e].to;!a&&"to"in s&&(a=s.to),!a&&"attributesFor"in s&&(a=e);for(const{to:t,vnode:e}of i)F(this.isSSR,o,t||a||"head",e)}if(t)for(const e in t){const n="default"===e?"head":e;if("head"!==n&&"body"!==n)continue;const s=t[e];a(s)&&F(this.isSSR,o,n,s({metainfo:r}))}return Object.keys(o).map((t=>e.h(e.Teleport,{to:t},o[t])))}}const U={keyName:"metaInfo"};return t.createMetaManager=(t=!1,e,r)=>I.create(t,e||s,r||o),t.deepestResolver=o,t.defaultConfig=s,t.getCurrentManager=O,t.plugin=(t,r={})=>{const n=Object.assign({},U,r);t.mixin((t=>({created(){const r=e.getCurrentInstance();if(!r?.type||!(t.keyName in r.type))return;const n=r.type[t.keyName];a(n)?x(e.computed(n)):x(n)}}))(n))},t.resolveOption=r,t.useActiveMeta=function(){return e.inject(N)},t.useMeta=x,Object.defineProperty(t,"__esModule",{value:!0}),t}({},Vue); diff --git a/package.json b/package.json index 43e7999..70bd4eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue-meta", - "version": "3.0.0-alpha.7", + "version": "3.0.0-alpha.8", "description": "Manage HTML metadata in Vue.js components with SSR support", "main": "dist/vue-meta.cjs.js", "browser": "dist/vue-meta.esm-browser.min.js",