diff --git a/package-lock.json b/package-lock.json index bd3190e..83c4c33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -316,9 +316,9 @@ "dev": true }, "ava": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/ava/-/ava-0.22.0.tgz", - "integrity": "sha512-dYxvVDL9CeIcgaQ/FojaBVaL/rnIsXdgPVliDOMe1O5nSsIZEsPYDIzmZ1KnO/cuxeQx1PQbtW6qziiEwQZusg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/ava/-/ava-0.23.0.tgz", + "integrity": "sha512-ZsVwO8UENDoZHlYQOEBv6oSGuUiZ8AFqaa+OhTv/McwC+4Y2V9skip5uYwN3egT9I9c+mKzLWA9lXUv7D6g8ZA==", "dev": true, "requires": { "@ava/babel-preset-stage-4": "1.1.0", @@ -336,7 +336,7 @@ "babel-core": "6.26.0", "bluebird": "3.5.1", "caching-transform": "1.0.1", - "chalk": "2.1.0", + "chalk": "2.3.0", "chokidar": "1.7.0", "clean-stack": "1.3.0", "clean-yaml-object": "0.1.0", @@ -350,7 +350,7 @@ "convert-source-map": "1.5.0", "core-assert": "0.2.1", "currently-unhandled": "0.4.1", - "debug": "2.6.9", + "debug": "3.1.0", "dot-prop": "4.2.0", "empower-core": "0.6.2", "equal-length": "1.0.1", @@ -387,7 +387,7 @@ "package-hash": "2.0.0", "pkg-conf": "2.0.0", "plur": "2.1.2", - "pretty-ms": "2.1.0", + "pretty-ms": "3.1.0", "require-precompiled": "0.1.0", "resolve-cwd": "2.0.0", "safe-buffer": "5.1.1", @@ -396,11 +396,11 @@ "stack-utils": "1.0.1", "strip-ansi": "4.0.0", "strip-bom-buf": "1.0.0", - "supports-color": "4.4.0", + "supports-color": "4.5.0", "time-require": "0.1.2", "trim-off-newlines": "1.0.1", "unique-temp-dir": "1.0.0", - "update-notifier": "2.2.0" + "update-notifier": "2.3.0" }, "dependencies": { "ansi-regex": { @@ -419,14 +419,33 @@ } }, "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "dev": true, "requires": { "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" + "supports-color": "4.5.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "pretty-ms": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-3.1.0.tgz", + "integrity": "sha1-6crJx2v27lL+lC3ZxsQhMVOxKIE=", + "dev": true, + "requires": { + "parse-ms": "1.0.1", + "plur": "2.1.2" } }, "strip-ansi": { @@ -439,13 +458,30 @@ } }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { "has-flag": "2.0.0" } + }, + "update-notifier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", + "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", + "dev": true, + "requires": { + "boxen": "1.2.1", + "chalk": "2.3.0", + "configstore": "3.1.1", + "import-lazy": "2.1.0", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + } } } }, @@ -1757,9 +1793,9 @@ "dev": true }, "codecov": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-2.3.0.tgz", - "integrity": "sha1-rSWixuBELRN0DZ1N27mj4nFDMPQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.0.tgz", + "integrity": "sha1-wnO4xPEpRXI+jcnSWAPYk0Pl8o4=", "dev": true, "requires": { "argv": "0.0.2", @@ -2070,9 +2106,9 @@ "dev": true }, "deepmerge": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", - "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.0.1.tgz", + "integrity": "sha512-VIPwiMJqJ13ZQfaCsIFnp5Me9tnjURiaIFxfz7EH0Ci0dTSQpZtSLrqOicXqEd/z2r+z+Klk9GzmnRsgpgbOsQ==" }, "del": { "version": "2.2.2", @@ -2377,9 +2413,9 @@ "dev": true }, "eslint-config-xo-space": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/eslint-config-xo-space/-/eslint-config-xo-space-0.16.0.tgz", - "integrity": "sha1-UkGorfqv7FOm8iNtpfnWpBxf+E0=", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/eslint-config-xo-space/-/eslint-config-xo-space-0.17.0.tgz", + "integrity": "sha512-A0pcBjcyv0dbbLsUl7Dz5lOZCNnNrOgEDsijlnMvZ5aCdp0AixhfO7c3k++X6wKY6bw1h02uvajINi7EZsmt1Q==", "dev": true, "requires": { "eslint-config-xo": "0.18.2" @@ -2713,9 +2749,9 @@ } }, "flow-bin": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.56.0.tgz", - "integrity": "sha1-zkMJIgOjRLqb9jwMq+ldlRRfbK0=", + "version": "0.57.3", + "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.57.3.tgz", + "integrity": "sha512-bbB7KLR1bLS0CvHSsKseOGFF6iI2N9ocL14EQv8Hng28ZksD0gNRzR2JopqA3WGrQYJukDU1W4ZuKoBaRuElFA==", "dev": true }, "flow-remove-types": { @@ -3662,6 +3698,15 @@ } } }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -3673,15 +3718,6 @@ "strip-ansi": "3.0.1" } }, - "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", @@ -3919,6 +3955,15 @@ "is-glob": "2.0.1" } }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "1.3.4" + } + }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", @@ -4435,6 +4480,16 @@ "is-extglob": "1.0.0" } }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "0.1.1", + "is-path-inside": "1.0.0" + } + }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -7676,25 +7731,6 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, - "pretty-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz", - "integrity": "sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw=", - "dev": true, - "requires": { - "is-finite": "1.0.2", - "parse-ms": "1.0.1", - "plur": "1.0.0" - }, - "dependencies": { - "plur": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz", - "integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=", - "dev": true - } - } - }, "private": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", @@ -8574,6 +8610,15 @@ "duplexer": "0.1.1" } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, "string-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", @@ -8606,15 +8651,6 @@ } } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", diff --git a/src/utils/head.js b/src/utils/head.js index ab3be0e..b5dc52c 100644 --- a/src/utils/head.js +++ b/src/utils/head.js @@ -33,7 +33,9 @@ class HeadUtil { } if (vueObject.head && vueObject.head.meta) { for (let metaItem of vueObject.head.meta) { - if (metaItem.name) { + if (metaItem.value) { + this.metaTags += `\n`; + } else if (metaItem.name) { this.metaTags += `\n`; } else if (metaItem.property) { this.metaTags += `\n`; @@ -41,6 +43,8 @@ class HeadUtil { const charset = metaItem.charset || 'utf-8'; const async = metaItem.async ? ' async=true' : ''; this.metaTags += `\n`; + } else if (metaItem.charset) { + this.metaTags += `\n`; } else if (metaItem.style) { const type = metaItem.type || 'text/css'; const rel = 'stylesheet'; @@ -51,7 +55,10 @@ class HeadUtil { const type = metaItem.type ? `type="${metaItem.type}" ` : ''; const href = metaItem.href ? `href="${metaItem.href}" ` : ''; const sizes = metaItem.sizes ? `sizes="${metaItem.sizes}" ` : ''; - this.metaTags += `\n`; + const itemprop = metaItem.itemprop ? `itemprop="${metaItem.itemprop}" ` : ''; + const hreflang = metaItem.hreflang ? `hreflang="${metaItem.hreflang}" ` : ''; + const crossorigin = metaItem.crossorigin ? `crossorigin="${metaItem.crossorigin}"` : ''; + this.metaTags += `\n`; } else if (metaItem.srcContents) { this.metaTags += `${metaItem.srcContents}\n`; } diff --git a/tests/example/app.js b/tests/example/app.js index 0d30e25..a60df45 100644 --- a/tests/example/app.js +++ b/tests/example/app.js @@ -31,6 +31,20 @@ const options = { }, { name: 'viewport', content: 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' + }, + { + rel: 'preconnect', + href: 'http://www.example.com', + itemprop: 'url', + hreflang: 'en', + crossorigin: 'anonymous' + }, + { + name: 'google', + value: 'notranslate' + }, + { + charset: 'UTF-8' } ] } diff --git a/tests/index.js b/tests/index.js index 2f3f9b2..55070d7 100644 --- a/tests/index.js +++ b/tests/index.js @@ -66,4 +66,4 @@ test('renders App object with custom layout', t => { .catch(error => { t.fail(error.stack); }); -}); \ No newline at end of file +}); diff --git a/tests/utils/head.js b/tests/utils/head.js index 11edbbf..4c6e73e 100644 --- a/tests/utils/head.js +++ b/tests/utils/head.js @@ -49,6 +49,20 @@ const newHead = { }, { srcContents: '' + }, + { + rel: 'preconnect', + href: 'http://www.example.com', + itemprop: 'url', + hreflang: 'en', + crossorigin: 'anonymous' + }, + { + name: 'google', + value: 'notranslate' + }, + { + charset: 'UTF-8' } ], structuredData: { @@ -60,7 +74,7 @@ const newHead = { const newMetaString = new HeadUtils(newHead).toString(); //New Tests -const newStringIsCorrect = '\nIt was a Pleasure\n\n\n\n\n\n\n\n\n\n\n\n\n' +const newStringIsCorrect = '\nIt was a Pleasure\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' const newHasTitle = newMetaString.includes('It was a Pleasure'); const newHasMetaName = newMetaString.includes(``); const newHasMetaProperty = newMetaString.includes(``); @@ -68,6 +82,9 @@ const newHasScript = newMetaString.includes(``); const newHasSrcContents = newMetaString.includes(``); +const newHasLinkWithAttrs = newMetaString.includes(``); +const newHasMetaValue = newMetaString.includes(``); +const newHasMetaCharset = newMetaString.includes(``); test('Head is correct', t => { t.is(newMetaString, newStringIsCorrect); @@ -100,3 +117,15 @@ test('Head has Structured Data', t => { test('Head has srcContents', t => { t.is(newHasSrcContents, true); }); + +test('Head has link with rel, href, itemprop, hreflang & crossorigin attributes', t => { + t.is(newHasLinkWithAttrs, true); +}); + +test('Head has meta value section', t => { + t.is(newHasMetaValue, true); +}); + +test('Head has meta charset section', t => { + t.is(newHasMetaCharset, true); +});