diff --git a/init.js b/init.js index 2c00ba3..fe3f444 100644 --- a/init.js +++ b/init.js @@ -1,5 +1,5 @@ -var escape = require('lodash.escape') +var escape = require('./util/escape') var parseSelector = require('parse-sel') var VOID_ELEMENTS = require('./elements').VOID var CONTAINER_ELEMENTS = require('./elements').CONTAINER diff --git a/modules/attributes.js b/modules/attributes.js index 925f91b..09b6953 100644 --- a/modules/attributes.js +++ b/modules/attributes.js @@ -1,13 +1,12 @@ -var forOwn = require('lodash.forown') -var escape = require('lodash.escape') +var escape = require('../util/escape') // data.attrs module.exports = function attrsModule (vnode, attributes) { var attrs = vnode.data.attrs || {} - forOwn(attrs, function (value, key) { + Object.entries(attrs).forEach(function ([key, value]) { attributes.set(key, escape(value)) }) } diff --git a/modules/class.js b/modules/class.js index 6a6de52..b2fc36e 100644 --- a/modules/class.js +++ b/modules/class.js @@ -1,8 +1,4 @@ -var forOwn = require('lodash.forown') -var remove = require('lodash.remove') -var uniq = require('lodash.uniq') - // data.class module.exports = function classModule (vnode, attributes) { @@ -13,7 +9,7 @@ module.exports = function classModule (vnode, attributes) { var existing = attributes.get('class') existing = existing.length > 0 ? existing.split(' ') : [] - forOwn(classes, function (value, key) { + Object.entries(classes).forEach(function ([key, value]) { if (value) { _add.push(key) } else { @@ -21,9 +17,8 @@ module.exports = function classModule (vnode, attributes) { } }) - values = remove(uniq(existing.concat(_add)), function (value) { - return _remove.indexOf(value) < 0 - }) + values = [...new Set(existing.concat(_add))] + .filter(function (value) { return _remove.indexOf(value) < 0 }) if (values.length) { attributes.set('class', values.join(' ')) diff --git a/modules/dataset.js b/modules/dataset.js index 4671bab..e027974 100644 --- a/modules/dataset.js +++ b/modules/dataset.js @@ -1,13 +1,12 @@ -var forOwn = require('lodash.forown') -var escape = require('lodash.escape') +var escape = require('../util/escape') // data.dataset module.exports = function datasetModule (vnode, attributes) { var dataset = vnode.data.dataset || {} - forOwn(dataset, function (value, key) { + Object.entries(dataset).forEach(function ([key, value]) { attributes.set(`data-${key}`, escape(value)) }) } diff --git a/modules/props.js b/modules/props.js index f970df4..2ab5418 100644 --- a/modules/props.js +++ b/modules/props.js @@ -1,6 +1,5 @@ -var forOwn = require('lodash.forown') -var escape = require('lodash.escape') +var escape = require('../util/escape') // https://developer.mozilla.org/en-US/docs/Web/API/element var omit = [ @@ -71,7 +70,7 @@ var booleanAttributes = [ module.exports = function propsModule (vnode, attributes) { var props = vnode.data.props || {} - forOwn(props, function (value, key) { + Object.entries(props).forEach(function ([key, value]) { if (omit.indexOf(key) > -1) { return } diff --git a/modules/style.js b/modules/style.js index d1bc5ab..1b110c3 100644 --- a/modules/style.js +++ b/modules/style.js @@ -1,7 +1,6 @@ var assign = require('object-assign') -var forOwn = require('lodash.forown') -var escape = require('lodash.escape') +var escape = require('../util/escape') var kebabCase = require('lodash.kebabcase') // data.style @@ -15,7 +14,7 @@ module.exports = function styleModule (vnode, attributes) { assign(style, style.delayed) } - forOwn(style, function (value, key) { + Object.entries(style).forEach(function ([key, value]) { // omit hook objects if (typeof value === 'string' || typeof value === 'number') { var kebabKey = kebabCase(key) diff --git a/package-lock.json b/package-lock.json index 52966d8..f99cc7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,14 +5,11 @@ "requires": true, "packages": { "": { + "name": "snabbdom-to-html", "version": "7.1.0", "license": "MIT", "dependencies": { - "lodash.escape": "^4.0.1", - "lodash.forown": "^4.4.0", "lodash.kebabcase": "^4.1.1", - "lodash.remove": "^4.7.0", - "lodash.uniq": "^4.5.0", "object-assign": "^4.1.0", "parse-sel": "^1.0.0" }, @@ -2435,16 +2432,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=" - }, - "node_modules/lodash.forown": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-4.4.0.tgz", - "integrity": "sha1-hRFc8E9z75ZuztUlEdOJPMRmg68=" - }, "node_modules/lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -2456,16 +2443,6 @@ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, - "node_modules/lodash.remove": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.remove/-/lodash.remove-4.7.0.tgz", - "integrity": "sha1-8x0x58OaBpDVB07A02JxYjNO5iY=" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -6139,16 +6116,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=" - }, - "lodash.forown": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-4.4.0.tgz", - "integrity": "sha1-hRFc8E9z75ZuztUlEdOJPMRmg68=" - }, "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -6160,16 +6127,6 @@ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, - "lodash.remove": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.remove/-/lodash.remove-4.7.0.tgz", - "integrity": "sha1-8x0x58OaBpDVB07A02JxYjNO5iY=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", diff --git a/package.json b/package.json index 04c6e4d..7211212 100644 --- a/package.json +++ b/package.json @@ -26,11 +26,7 @@ }, "homepage": "https://github.com/acstll/snabbdom-to-html#readme", "dependencies": { - "lodash.escape": "^4.0.1", - "lodash.forown": "^4.4.0", "lodash.kebabcase": "^4.1.1", - "lodash.remove": "^4.7.0", - "lodash.uniq": "^4.5.0", "object-assign": "^4.1.0", "parse-sel": "^1.0.0" }, diff --git a/util/escape.js b/util/escape.js new file mode 100644 index 0000000..38d6ec1 --- /dev/null +++ b/util/escape.js @@ -0,0 +1,15 @@ + +var escapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' +} + +var re = new RegExp(`[${Object.keys(escapes).join('')}]`, 'g') + +module.exports = function escape (value) { + return ('' + value).replace(re, function (s) { return escapes[s] }) +}