Socket
Socket
Sign inDemoInstall

mjml-parser-xml

Package Overview
Dependencies
Maintainers
1
Versions
67
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mjml-parser-xml - npm Package Compare versions

Comparing version 4.0.0-alpha.2 to 4.0.0-alpha.3

21

lib/helpers/parseAttributes.js

@@ -8,3 +8,4 @@ 'use strict';

exports.decodeAttributes = decodeAttributes;
var regexAttributes = new RegExp('([^\\s]*="|\')([^"|\']*)("|\')', 'g');
var regexTag = /<([^>])*>/gmi;
var regexAttributes = /([^\s]*="|')([^"|']*)("|')/gmi;

@@ -19,7 +20,9 @@ function parseAttributes(input) {

return input.replace(regexAttributes, function (match, beforeAttr, attrVal, afterAttr) {
var newAttrVal = attrVal.replace(/.*&([^a]|$).*/g, replaceAttrVal);
newAttrVal = encodeURIComponent(attrVal);
return input.replace(regexTag, function (match) {
return match.replace(regexAttributes, function (m, beforeAttr, attrVal, afterAttr) {
var newAttrVal = attrVal.replace(/.*&([^a]|$).*/g, replaceAttrVal);
newAttrVal = encodeURIComponent(attrVal);
return '' + beforeAttr + newAttrVal + afterAttr;
return '' + beforeAttr + newAttrVal + afterAttr;
});
});

@@ -29,7 +32,9 @@ }

function decodeAttributes(input) {
return input.replace(regexAttributes, function (match, beforeAttr, attrVal, afterAttr) {
var newAttrVal = decodeURIComponent(attrVal);
return input.replace(regexTag, function (match) {
return match.replace(regexAttributes, function (match, beforeAttr, attrVal, afterAttr) {
var newAttrVal = decodeURIComponent(attrVal);
return '' + beforeAttr + newAttrVal + afterAttr;
return '' + beforeAttr + newAttrVal + afterAttr;
});
});
}

@@ -8,5 +8,5 @@ 'use strict';

var _lodash = require('lodash');
var _forEach = require('lodash/forEach');
var _lodash2 = _interopRequireDefault(_lodash);
var _forEach2 = _interopRequireDefault(_forEach);

@@ -20,5 +20,5 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

if (node.children) {
_lodash2.default.forEach(node.children, setEmptyAttributes);
(0, _forEach2.default)(node.children, setEmptyAttributes);
}
}
module.exports = exports['default'];

@@ -9,8 +9,4 @@ 'use strict';

exports.default = parseXML;
exports.default = MJMLParser;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _htmlparser = require('htmlparser2');

@@ -28,2 +24,6 @@

var _find = require('lodash/find');
var _find2 = _interopRequireDefault(_find);
var _mapValues = require('lodash/mapValues');

@@ -33,4 +33,22 @@

var _mjmlCore = require('mjml-core');
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _filter = require('lodash/fp/filter');
var _filter2 = _interopRequireDefault(_filter);
var _map = require('lodash/fp/map');
var _map2 = _interopRequireDefault(_map);
var _flow = require('lodash/fp/flow');
var _flow2 = _interopRequireDefault(_flow);
var _parseAttributes = require('./helpers/parseAttributes');

@@ -58,2 +76,4 @@

function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var indexesForNewLine = function indexesForNewLine(xml) {

@@ -70,18 +90,24 @@ var regex = /\n/gi;

function parseXML(xml) {
function MJMLParser(xml) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var _options$addEmptyAttr = options.addEmptyAttributes,
addEmptyAttributes = _options$addEmptyAttr === undefined ? true : _options$addEmptyAttr,
_options$CDATASection = options.CDATASections,
CDATASections = _options$CDATASection === undefined ? _lodash2.default.chain(_extends({}, _mjmlCore.components.head, _mjmlCore.components.body)).filter(function (component) {
return component.prototype.endingTag;
}).map(function (component) {
return component.getName();
}).value() : _options$CDATASection,
_options$components = options.components,
components = _options$components === undefined ? {} : _options$components,
_options$convertBoole = options.convertBooleans,
convertBooleans = _options$convertBoole === undefined ? true : _options$convertBoole,
_options$keepComments = options.keepComments,
keepComments = _options$keepComments === undefined ? true : _options$keepComments;
keepComments = _options$keepComments === undefined ? true : _options$keepComments,
_options$filePath = options.filePath,
filePath = _options$filePath === undefined ? '.' : _options$filePath;
var CDATASections = (0, _flow2.default)((0, _filter2.default)(function (component) {
return component.endingTag;
}), (0, _map2.default)(function (component) {
return component.getTagName();
}))(_extends({}, components));
var cwd = filePath ? _path2.default.dirname(filePath) : process.cwd();
var safeXml = xml;

@@ -94,5 +120,71 @@

var cur = null;
var inInclude = false;
var findTag = function findTag(tagName, tree) {
return (0, _find2.default)(tree.children, { tagName: tagName });
};
var lineIndexes = indexesForNewLine(safeXml);
var handleInclude = function handleInclude(file, line) {
var partialPath = _path2.default.resolve(cwd, file);
var content = void 0;
try {
content = _fs2.default.readFileSync(partialPath, 'utf8');
} catch (e) {
var newNode = {
line: line,
file: file,
absoluteFilePath: _path2.default.resolve(cwd, filePath),
parent: cur,
tagName: 'mj-raw',
content: '<!-- mj-include fails with file : ' + file + ' at ' + partialPath + ' -->',
children: []
};
cur.children.push(newNode);
cur = newNode;
return;
}
content = content.indexOf('<mjml>') == -1 ? '<mjml><mj-body>' + content + '</mj-body></mjml>' : content;
var partialMjml = parseXML(content, _extends({}, options, { filePath: partialPath }));
var bindToTree = function bindToTree(children) {
var tree = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : cur;
return children.map(function (c) {
return _extends({}, c, { parent: tree });
});
};
if (partialMjml.tagName != 'mjml') {
return;
}
var body = findTag('mj-body', partialMjml);
var head = findTag('mj-head', partialMjml);
if (body) {
cur.children = [].concat(_toConsumableArray(cur.children), _toConsumableArray(bindToTree(body.children)));
}
if (head) {
var curHead = findTag('mj-head', mjml);
if (!curHead) {
mjml.children.push({
file: filePath,
absoluteFilePath: _path2.default.resolve(cwd, filePath),
parent: mjml,
tagName: 'mj-head',
children: []
});
curHead = findTag('mj-head', mjml);
}
curHead.children = [].concat(_toConsumableArray(curHead.children), _toConsumableArray(bindToTree(head.children, curHead)));
}
};
var parser = new _htmlparser2.default.Parser({

@@ -104,2 +196,8 @@ onopentag: function onopentag(name, attrs) {

if (name == 'mj-include') {
inInclude = true;
return handleInclude(decodeURIComponent(attrs.path), line);
}
if (convertBooleans) {

@@ -115,2 +213,4 @@ // "true" and "false" will be converted to bools

var newNode = {
file: filePath,
absoluteFilePath: _path2.default.resolve(cwd, filePath),
line: line,

@@ -132,2 +232,7 @@ parent: cur,

onclosetag: function onclosetag() {
if (inInclude) {
inInclude = false;
return;
}
cur = cur && cur.parent || null;

@@ -134,0 +239,0 @@ },

{
"name": "mjml-parser-xml",
"description": "mjml-parser-xml",
"version": "4.0.0-alpha.2",
"version": "4.0.0-alpha.3",
"main": "lib/index.js",

@@ -21,5 +21,4 @@ "repository": {

"htmlparser2": "^3.9.2",
"lodash": "^4.17.2",
"mjml-core": "^4.0.0-alpha.2"
"lodash": "^4.17.2"
}
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc