diff --git a/package-lock.json b/package-lock.json index b657589..7b12b9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7574,9 +7574,9 @@ } }, "mocha": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", - "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.0.tgz", + "integrity": "sha512-ukB2dF+u4aeJjc6IGtPNnJXfeby5d4ZqySlIBT0OEyva/DrMjVm5HkQxKnHDLKEfEQBsEnwTg9HHhtPHJdTd8w==", "dev": true, "requires": { "browser-stdout": "1.3.0", diff --git a/package.json b/package.json index 6d21fb8..41417b4 100644 --- a/package.json +++ b/package.json @@ -96,6 +96,7 @@ ], "license": "MIT", "main": "lib/vue-meta.js", + "typings": "types/index.d.ts", "nyc": { "exclude": [ "test/**/*.js" diff --git a/types/index.d.ts b/types/index.d.ts new file mode 100644 index 0000000..afc7fa0 --- /dev/null +++ b/types/index.d.ts @@ -0,0 +1,62 @@ +import Vue, { ComponentOptions } from 'vue' +import { PluginFunction } from 'vue/types/plugin'; + +import './vue'; + +/** + * Installation function + * + * @param {Vue} Vue - the Vue constructor. + * @param {{ + * keyName: string, // the component option name that vue-meta looks for meta info on. + * attribute: string, // the attribute name vue-meta adds to the tags it observes + * ssrAttribute: string, // the attribute name that lets vue-meta know that meta info has already been server-rendered + * tagIDKeyName: string // the property name that vue-meta uses to determine whether to overwrite or append a tag + * }} options + */ +declare const Meta: PluginFunction<{ + keyName: string, // the component option name that vue-meta looks for meta info on. + attribute: string, // the attribute name vue-meta adds to the tags it observes + ssrAttribute: string, // the attribute name that lets vue-meta know that meta info has already been server-rendered + tagIDKeyName: string // the property name that vue-meta uses to determine whether to overwrite or append a tag +}>; + +export default Meta; + +export interface MetaInfo { + title?: string + titleTemplate?: string | ((titleChunk: string) => string) + htmlAttrs?: { [key: string]: string } + bodyAttrs?: { [key: string]: string } + base?: { target: string, href: string } + + meta?: { + vmid?: string, + charset?: string, + content?: string, + 'http-equiv'?: 'content-security-policy' | 'refresh', + name?: 'application-name' + | 'author' + | 'description' + | 'generator' + | 'keywords' + | 'referrer' + | 'creator' + | 'googlebot' + | 'publisher' + | 'robots' + | 'slurp' + | 'viewport', + [key: string]: any + }[] + + link?: { rel: string, href: string, [key: string]: any }[] + style?: { cssText: string, type: string, [key: string]: any }[] + script?: { innerHTML: string, type: string, [key: string]: any }[] + noscript?: { innerHTML: string, [key: string]: any }[] + + __dangerouslyDisableSanitizers?: string[] + __dangerouslyDisableSanitizersByTagID?: string[] + + changed?: (newInfo: T, addedTags: HTMLElement[], removedTags: HTMLElement[]) => void +} diff --git a/types/vue.d.ts b/types/vue.d.ts new file mode 100644 index 0000000..d05cb5e --- /dev/null +++ b/types/vue.d.ts @@ -0,0 +1,18 @@ +/** + * Augment the typings of Vue.js + */ + +import Vue, { ComponentOptions } from "vue"; +import { MetaInfo } from './index'; + +declare module "vue/types/options" { + interface ComponentOptions { + metaInfo?: MetaInfo | (() => MetaInfo); + } +} + +declare module "vue/types/vue" { + interface Vue { + metaInfo?: MetaInfo | (() => MetaInfo); + } +}