Skip to content

Commit

Permalink
replace leading, trailing, empty whitespace with white list
Browse files Browse the repository at this point in the history
values(\n,\t, ,\r)
  • Loading branch information
siva-sundar committed Oct 27, 2017
1 parent 642bbcd commit 5989383
Showing 1 changed file with 16 additions and 21 deletions.
37 changes: 16 additions & 21 deletions utils/helpers.js
Original file line number Diff line number Diff line change
@@ -1,43 +1,38 @@
/* eslint-env node */
'use strict';

// below are the encoded values of ' ', '\n' and '\t' to avoid collapsing multiple   into a single whitespace.
const matchHorizontalTABAndNewLineBegin = /^(%20|%09|%0A)+/;
const matchHorizontalTABAndNewLineEnd = /(%20|%09|%0A)+$/;
const WHITESPACE = /^(%20|%09|%0A)+$/;
const leadingWhiteSpace = /^[ \t\r\n]+/;
const trailingWhiteSpace = /[ \t\r\n]+$/;
const WHITESPACE = /^[ \t\r\n]+$/;

const isWhitespaceTextNode = function(node) {
return node && node.type === 'TextNode' && WHITESPACE.test(encodeURIComponent(node.chars));
};
function isWhitespaceTextNode(node) {
return node && node.type === 'TextNode' && WHITESPACE.test(node.chars);
}

const hasLeadingOrTrailingWhiteSpace = function(chars) {
chars = encodeURIComponent(chars);
return matchHorizontalTABAndNewLineBegin.test(chars) || matchHorizontalTABAndNewLineEnd.test(chars);
};
function hasLeadingOrTrailingWhiteSpace(chars) {
return leadingWhiteSpace.test(chars) || trailingWhiteSpace.test(chars);
}

const stripWhiteSpace = function(chars) {
function stripWhiteSpace(chars) {
/*
Replacing multiple ' '(leading/trailing), '\n' and '\t' into a single whitespace.
Replacing multiple ' ', '\n' and '\t'(leading/trailing) into a single whitespace.
*/
chars = encodeURIComponent(chars || '');
chars = chars.replace(matchHorizontalTABAndNewLineBegin, ' ')
.replace(matchHorizontalTABAndNewLineEnd, ' ');
return decodeURIComponent(chars);
};
chars = chars || '';
return chars.replace(leadingWhiteSpace, ' ').replace(trailingWhiteSpace, ' ');
}

const stripNoMinifyBlocks = function(nodes) {
function stripNoMinifyBlocks(nodes) {
return nodes.map(node => {
if (node.type === 'BlockStatement' && node.path.original === 'no-minify') {
return node.program.body;
}
return node;
}).reduce((a, b) => a.concat(b), []);
};
}

module.exports = {
stripWhiteSpace,
isWhitespaceTextNode,
WHITESPACE,
stripNoMinifyBlocks,
hasLeadingOrTrailingWhiteSpace
};

0 comments on commit 5989383

Please sign in to comment.