Socket
Socket
Sign inDemoInstall

@bbob/parser

Package Overview
Dependencies
Maintainers
1
Versions
53
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bbob/parser - npm Package Compare versions

Comparing version 1.3.2 to 2.0.0

144

dist/index.js

@@ -295,10 +295,10 @@ (function (global, factory) {

this.type = String(type);
this.value = String(value);
this.line = Number(line);
this.row = Number(row);
this[TOKEN_TYPE_ID] = String(type);
this[TOKEN_VALUE_ID] = String(value);
this[TOKEN_LINE_ID] = Number(line);
this[TOKEN_COLUMN_ID] = Number(row);
}
Token.prototype.isEmpty = function isEmpty() {
return !!this.type;
return !!this[TOKEN_TYPE_ID];
};

@@ -361,16 +361,4 @@

var RESERVED_CHARS = [char_10, char_9, char_7, char_14, char_8, char_5, char_6, char_2];
var NOT_CHAR_TOKENS = [char_9, char_8, char_5, char_2];
var WHITESPACES = [char_8, char_5];
var EM = '!';
var isCharReserved = function isCharReserved(char$$1) {
return RESERVED_CHARS.indexOf(char$$1) >= 0;
};
var isWhiteSpace = function isWhiteSpace(char$$1) {
return WHITESPACES.indexOf(char$$1) >= 0;
};
var isCharToken = function isCharToken(char$$1) {
return NOT_CHAR_TOKENS.indexOf(char$$1) === -1;
};
var createCharGrabber = function createCharGrabber(source) {

@@ -442,2 +430,23 @@ var idx = 0;

var tokens = new Array(Math.floor(buffer.length));
var openTag = options.openTag || char_9;
var closeTag = options.closeTag || char_10;
var RESERVED_CHARS = [closeTag, openTag, char_7, char_14, char_8, char_5, char_6, char_2, EM];
var NOT_CHAR_TOKENS = [openTag, char_8, char_5, char_2];
var WHITESPACES = [char_8, char_5];
var SPECIAL_CHARS = [char_6, char_8, char_5];
var isCharReserved = function isCharReserved(char$$1) {
return RESERVED_CHARS.indexOf(char$$1) >= 0;
};
var isWhiteSpace = function isWhiteSpace(char$$1) {
return WHITESPACES.indexOf(char$$1) >= 0;
};
var isCharToken = function isCharToken(char$$1) {
return NOT_CHAR_TOKENS.indexOf(char$$1) === -1;
};
var isSpecialChar = function isSpecialChar(char$$1) {
return SPECIAL_CHARS.indexOf(char$$1) >= 0;
};
var emitToken = function emitToken(token) {

@@ -454,24 +463,32 @@ if (options.onToken) {

var tagName = null;
var skipSpaces = false;
var skipSpecialChars = false;
var attrTokens = [];
var attrCharGrabber = createCharGrabber(str);
var validAttr = function validAttr(val) {
var isEQ = val === char_6;
var isWS = isWhiteSpace(val);
var isPrevSLASH = attrCharGrabber.getPrev() === char_11;
if (tagName === null) {
return !(isEQ || isWS || attrCharGrabber.isLast());
var validAttr = function validAttr(char$$1) {
var isEQ = char$$1 === char_6;
var isWS = isWhiteSpace(char$$1);
var prevChar = attrCharGrabber.getPrev();
var nextChar = attrCharGrabber.getNext();
var isPrevSLASH = prevChar === char_14;
var isTagNameEmpty = tagName === null;
if (isTagNameEmpty) {
return (isEQ || isWS || attrCharGrabber.isLast()) === false;
}
if (skipSpaces && isWS) {
if (skipSpecialChars && isSpecialChar(char$$1)) {
return true;
}
if (val === char_7 && !isPrevSLASH) {
skipSpaces = !skipSpaces;
if (char$$1 === char_7 && !isPrevSLASH) {
skipSpecialChars = !skipSpecialChars;
if (!skipSpecialChars && !(nextChar === char_6 || isWhiteSpace(nextChar))) {
return false;
}
}
return !(isEQ || isWS);
return (isEQ || isWS) === false;
};

@@ -481,2 +498,3 @@

var attrStr = attrCharGrabber.grabWhile(validAttr);
var currChar = attrCharGrabber.getCurr();

@@ -486,3 +504,3 @@ // first string before space is a tag name

tagName = attrStr;
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) {
} else if (isWhiteSpace(currChar) || currChar === char_7 || !attrCharGrabber.hasNext()) {
var escaped = unquote(trimChar(attrStr, char_7));

@@ -504,9 +522,9 @@ attrTokens.push(createToken(TYPE_ATTR_VALUE, escaped, row, col));

var grabber = createCharGrabber(buffer);
var bufferGrabber = createCharGrabber(buffer);
var next = function next() {
var char$$1 = grabber.getCurr();
var char$$1 = bufferGrabber.getCurr();
if (char$$1 === char_2) {
grabber.skip();
bufferGrabber.skip();
col = 0;

@@ -517,7 +535,7 @@ row++;

} else if (isWhiteSpace(char$$1)) {
var str = grabber.grabWhile(isWhiteSpace);
var str = bufferGrabber.grabWhile(isWhiteSpace);
emitToken(createToken(TYPE_SPACE, str, row, col));
} else if (char$$1 === char_9) {
var nextChar = grabber.getNext();
grabber.skip(); // skip [
} else if (char$$1 === openTag) {
var nextChar = bufferGrabber.getNext();
bufferGrabber.skip(); // skip [

@@ -527,6 +545,6 @@ if (isCharReserved(nextChar)) {

} else {
var _str = grabber.grabWhile(function (val) {
return val !== char_10;
var _str = bufferGrabber.grabWhile(function (val) {
return val !== closeTag;
});
grabber.skip(); // skip ]
bufferGrabber.skip(); // skip ]

@@ -542,8 +560,8 @@ if (!(_str.indexOf(char_6) > 0) || _str[0] === char_11) {

}
} else if (char$$1 === char_10) {
grabber.skip();
} else if (char$$1 === closeTag) {
bufferGrabber.skip();
emitToken(createToken(TYPE_WORD, char$$1, row, col));
} else if (isCharToken(char$$1)) {
var _str2 = grabber.grabWhile(isCharToken);
var _str2 = bufferGrabber.grabWhile(isCharToken);

@@ -555,3 +573,3 @@ emitToken(createToken(TYPE_WORD, _str2, row, col));

var tokenize = function tokenize() {
while (grabber.hasNext()) {
while (bufferGrabber.hasNext()) {
next();

@@ -566,3 +584,3 @@ }

var isTokenNested = function isTokenNested(token) {
var value = char_9 + char_11 + token.getValue();
var value = openTag + char_11 + token.getValue();
return buffer.indexOf(value) > -1;

@@ -604,6 +622,2 @@ };

var createTokenizer = function createTokenizer(input, onToken) {
return createLexer(input, { onToken: onToken });
};
/**

@@ -622,3 +636,3 @@ * @private

*/
var getTagNode = function getTagNode() {
var getLastTagNode = function getLastTagNode() {
return tagNodes.length ? tagNodes[tagNodes.length - 1] : null;

@@ -649,3 +663,3 @@ };

var getTagNodeAttrName = function getTagNodeAttrName() {
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag;
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : null;
};

@@ -682,2 +696,3 @@

var nestedNode = nestedNodes[nestedNodes.length - 1];
return nestedNode.content;

@@ -718,5 +733,5 @@ }

if (isTagNested(token)) {
nestedNodes.push(getTagNode());
nestedNodes.push(getLastTagNode());
} else {
appendNode(getTagNode());
appendNode(getLastTagNode());
clearTagNode();

@@ -743,2 +758,3 @@ }

var column = token.getColumn();
options.onError({

@@ -776,3 +792,3 @@ message: 'Inconsistent tag \'' + tag + '\' on line ' + line + ' and column ' + column,

var handleTagNode = function handleTagNode(token) {
var tagNode = getTagNode();
var tagNode = getLastTagNode();

@@ -782,6 +798,13 @@ if (tagNode) {

createTagNodeAttrName(token);
tagNode.attr(getTagNodeAttrName(), null);
tagNode.attr(getTagNodeAttrName(), '');
} else if (token.isAttrValue()) {
tagNode.attr(getTagNodeAttrName(), token.getValue());
clearTagNodeAttrName();
var attrName = getTagNodeAttrName();
var attrValue = token.getValue();
if (attrName) {
tagNode.attr(getTagNodeAttrName(), attrValue);
clearTagNodeAttrName();
} else {
tagNode.attr(attrValue, attrValue);
}
} else if (token.isText()) {

@@ -812,3 +835,8 @@ tagNode.append(token.getValue());

options = opts;
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken);
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createLexer)(input, {
onToken: parseToken,
onlyAllowTags: options.onlyAllowTags,
openTag: options.openTag,
closeTag: options.closeTag
});

@@ -815,0 +843,0 @@ nodes = [];

@@ -295,10 +295,10 @@ (function (global, factory) {

this.type = String(type);
this.value = String(value);
this.line = Number(line);
this.row = Number(row);
this[TOKEN_TYPE_ID] = String(type);
this[TOKEN_VALUE_ID] = String(value);
this[TOKEN_LINE_ID] = Number(line);
this[TOKEN_COLUMN_ID] = Number(row);
}
Token.prototype.isEmpty = function isEmpty() {
return !!this.type;
return !!this[TOKEN_TYPE_ID];
};

@@ -361,16 +361,4 @@

var RESERVED_CHARS = [char_10, char_9, char_7, char_14, char_8, char_5, char_6, char_2];
var NOT_CHAR_TOKENS = [char_9, char_8, char_5, char_2];
var WHITESPACES = [char_8, char_5];
var EM = '!';
var isCharReserved = function isCharReserved(char$$1) {
return RESERVED_CHARS.indexOf(char$$1) >= 0;
};
var isWhiteSpace = function isWhiteSpace(char$$1) {
return WHITESPACES.indexOf(char$$1) >= 0;
};
var isCharToken = function isCharToken(char$$1) {
return NOT_CHAR_TOKENS.indexOf(char$$1) === -1;
};
var createCharGrabber = function createCharGrabber(source) {

@@ -442,2 +430,23 @@ var idx = 0;

var tokens = new Array(Math.floor(buffer.length));
var openTag = options.openTag || char_9;
var closeTag = options.closeTag || char_10;
var RESERVED_CHARS = [closeTag, openTag, char_7, char_14, char_8, char_5, char_6, char_2, EM];
var NOT_CHAR_TOKENS = [openTag, char_8, char_5, char_2];
var WHITESPACES = [char_8, char_5];
var SPECIAL_CHARS = [char_6, char_8, char_5];
var isCharReserved = function isCharReserved(char$$1) {
return RESERVED_CHARS.indexOf(char$$1) >= 0;
};
var isWhiteSpace = function isWhiteSpace(char$$1) {
return WHITESPACES.indexOf(char$$1) >= 0;
};
var isCharToken = function isCharToken(char$$1) {
return NOT_CHAR_TOKENS.indexOf(char$$1) === -1;
};
var isSpecialChar = function isSpecialChar(char$$1) {
return SPECIAL_CHARS.indexOf(char$$1) >= 0;
};
var emitToken = function emitToken(token) {

@@ -454,24 +463,32 @@ if (options.onToken) {

var tagName = null;
var skipSpaces = false;
var skipSpecialChars = false;
var attrTokens = [];
var attrCharGrabber = createCharGrabber(str);
var validAttr = function validAttr(val) {
var isEQ = val === char_6;
var isWS = isWhiteSpace(val);
var isPrevSLASH = attrCharGrabber.getPrev() === char_11;
if (tagName === null) {
return !(isEQ || isWS || attrCharGrabber.isLast());
var validAttr = function validAttr(char$$1) {
var isEQ = char$$1 === char_6;
var isWS = isWhiteSpace(char$$1);
var prevChar = attrCharGrabber.getPrev();
var nextChar = attrCharGrabber.getNext();
var isPrevSLASH = prevChar === char_14;
var isTagNameEmpty = tagName === null;
if (isTagNameEmpty) {
return (isEQ || isWS || attrCharGrabber.isLast()) === false;
}
if (skipSpaces && isWS) {
if (skipSpecialChars && isSpecialChar(char$$1)) {
return true;
}
if (val === char_7 && !isPrevSLASH) {
skipSpaces = !skipSpaces;
if (char$$1 === char_7 && !isPrevSLASH) {
skipSpecialChars = !skipSpecialChars;
if (!skipSpecialChars && !(nextChar === char_6 || isWhiteSpace(nextChar))) {
return false;
}
}
return !(isEQ || isWS);
return (isEQ || isWS) === false;
};

@@ -481,2 +498,3 @@

var attrStr = attrCharGrabber.grabWhile(validAttr);
var currChar = attrCharGrabber.getCurr();

@@ -486,3 +504,3 @@ // first string before space is a tag name

tagName = attrStr;
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) {
} else if (isWhiteSpace(currChar) || currChar === char_7 || !attrCharGrabber.hasNext()) {
var escaped = unquote(trimChar(attrStr, char_7));

@@ -504,9 +522,9 @@ attrTokens.push(createToken(TYPE_ATTR_VALUE, escaped, row, col));

var grabber = createCharGrabber(buffer);
var bufferGrabber = createCharGrabber(buffer);
var next = function next() {
var char$$1 = grabber.getCurr();
var char$$1 = bufferGrabber.getCurr();
if (char$$1 === char_2) {
grabber.skip();
bufferGrabber.skip();
col = 0;

@@ -517,7 +535,7 @@ row++;

} else if (isWhiteSpace(char$$1)) {
var str = grabber.grabWhile(isWhiteSpace);
var str = bufferGrabber.grabWhile(isWhiteSpace);
emitToken(createToken(TYPE_SPACE, str, row, col));
} else if (char$$1 === char_9) {
var nextChar = grabber.getNext();
grabber.skip(); // skip [
} else if (char$$1 === openTag) {
var nextChar = bufferGrabber.getNext();
bufferGrabber.skip(); // skip [

@@ -527,6 +545,6 @@ if (isCharReserved(nextChar)) {

} else {
var _str = grabber.grabWhile(function (val) {
return val !== char_10;
var _str = bufferGrabber.grabWhile(function (val) {
return val !== closeTag;
});
grabber.skip(); // skip ]
bufferGrabber.skip(); // skip ]

@@ -542,8 +560,8 @@ if (!(_str.indexOf(char_6) > 0) || _str[0] === char_11) {

}
} else if (char$$1 === char_10) {
grabber.skip();
} else if (char$$1 === closeTag) {
bufferGrabber.skip();
emitToken(createToken(TYPE_WORD, char$$1, row, col));
} else if (isCharToken(char$$1)) {
var _str2 = grabber.grabWhile(isCharToken);
var _str2 = bufferGrabber.grabWhile(isCharToken);

@@ -555,3 +573,3 @@ emitToken(createToken(TYPE_WORD, _str2, row, col));

var tokenize = function tokenize() {
while (grabber.hasNext()) {
while (bufferGrabber.hasNext()) {
next();

@@ -566,3 +584,3 @@ }

var isTokenNested = function isTokenNested(token) {
var value = char_9 + char_11 + token.getValue();
var value = openTag + char_11 + token.getValue();
return buffer.indexOf(value) > -1;

@@ -604,6 +622,2 @@ };

var createTokenizer = function createTokenizer(input, onToken) {
return createLexer(input, { onToken: onToken });
};
/**

@@ -622,3 +636,3 @@ * @private

*/
var getTagNode = function getTagNode() {
var getLastTagNode = function getLastTagNode() {
return tagNodes.length ? tagNodes[tagNodes.length - 1] : null;

@@ -649,3 +663,3 @@ };

var getTagNodeAttrName = function getTagNodeAttrName() {
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag;
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : null;
};

@@ -682,2 +696,3 @@

var nestedNode = nestedNodes[nestedNodes.length - 1];
return nestedNode.content;

@@ -718,5 +733,5 @@ }

if (isTagNested(token)) {
nestedNodes.push(getTagNode());
nestedNodes.push(getLastTagNode());
} else {
appendNode(getTagNode());
appendNode(getLastTagNode());
clearTagNode();

@@ -743,2 +758,3 @@ }

var column = token.getColumn();
options.onError({

@@ -776,3 +792,3 @@ message: 'Inconsistent tag \'' + tag + '\' on line ' + line + ' and column ' + column,

var handleTagNode = function handleTagNode(token) {
var tagNode = getTagNode();
var tagNode = getLastTagNode();

@@ -782,6 +798,13 @@ if (tagNode) {

createTagNodeAttrName(token);
tagNode.attr(getTagNodeAttrName(), null);
tagNode.attr(getTagNodeAttrName(), '');
} else if (token.isAttrValue()) {
tagNode.attr(getTagNodeAttrName(), token.getValue());
clearTagNodeAttrName();
var attrName = getTagNodeAttrName();
var attrValue = token.getValue();
if (attrName) {
tagNode.attr(getTagNodeAttrName(), attrValue);
clearTagNodeAttrName();
} else {
tagNode.attr(attrValue, attrValue);
}
} else if (token.isText()) {

@@ -812,3 +835,8 @@ tagNode.append(token.getValue());

options = opts;
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken);
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createLexer)(input, {
onToken: parseToken,
onlyAllowTags: options.onlyAllowTags,
openTag: options.openTag,
closeTag: options.closeTag
});

@@ -815,0 +843,0 @@ nodes = [];

@@ -6,16 +6,4 @@ /* eslint-disable no-plusplus,no-param-reassign */

var RESERVED_CHARS = [CLOSE_BRAKET, OPEN_BRAKET, QUOTEMARK, BACKSLASH, SPACE, TAB, EQ, N];
var NOT_CHAR_TOKENS = [OPEN_BRAKET, SPACE, TAB, N];
var WHITESPACES = [SPACE, TAB];
var EM = '!';
var isCharReserved = function isCharReserved(char) {
return RESERVED_CHARS.indexOf(char) >= 0;
};
var isWhiteSpace = function isWhiteSpace(char) {
return WHITESPACES.indexOf(char) >= 0;
};
var isCharToken = function isCharToken(char) {
return NOT_CHAR_TOKENS.indexOf(char) === -1;
};
var createCharGrabber = function createCharGrabber(source) {

@@ -87,2 +75,23 @@ var idx = 0;

var tokens = new Array(Math.floor(buffer.length));
var openTag = options.openTag || OPEN_BRAKET;
var closeTag = options.closeTag || CLOSE_BRAKET;
var RESERVED_CHARS = [closeTag, openTag, QUOTEMARK, BACKSLASH, SPACE, TAB, EQ, N, EM];
var NOT_CHAR_TOKENS = [openTag, SPACE, TAB, N];
var WHITESPACES = [SPACE, TAB];
var SPECIAL_CHARS = [EQ, SPACE, TAB];
var isCharReserved = function isCharReserved(char) {
return RESERVED_CHARS.indexOf(char) >= 0;
};
var isWhiteSpace = function isWhiteSpace(char) {
return WHITESPACES.indexOf(char) >= 0;
};
var isCharToken = function isCharToken(char) {
return NOT_CHAR_TOKENS.indexOf(char) === -1;
};
var isSpecialChar = function isSpecialChar(char) {
return SPECIAL_CHARS.indexOf(char) >= 0;
};
var emitToken = function emitToken(token) {

@@ -99,24 +108,32 @@ if (options.onToken) {

var tagName = null;
var skipSpaces = false;
var skipSpecialChars = false;
var attrTokens = [];
var attrCharGrabber = createCharGrabber(str);
var validAttr = function validAttr(val) {
var isEQ = val === EQ;
var isWS = isWhiteSpace(val);
var isPrevSLASH = attrCharGrabber.getPrev() === SLASH;
if (tagName === null) {
return !(isEQ || isWS || attrCharGrabber.isLast());
var validAttr = function validAttr(char) {
var isEQ = char === EQ;
var isWS = isWhiteSpace(char);
var prevChar = attrCharGrabber.getPrev();
var nextChar = attrCharGrabber.getNext();
var isPrevSLASH = prevChar === BACKSLASH;
var isTagNameEmpty = tagName === null;
if (isTagNameEmpty) {
return (isEQ || isWS || attrCharGrabber.isLast()) === false;
}
if (skipSpaces && isWS) {
if (skipSpecialChars && isSpecialChar(char)) {
return true;
}
if (val === QUOTEMARK && !isPrevSLASH) {
skipSpaces = !skipSpaces;
if (char === QUOTEMARK && !isPrevSLASH) {
skipSpecialChars = !skipSpecialChars;
if (!skipSpecialChars && !(nextChar === EQ || isWhiteSpace(nextChar))) {
return false;
}
}
return !(isEQ || isWS);
return (isEQ || isWS) === false;
};

@@ -126,2 +143,3 @@

var attrStr = attrCharGrabber.grabWhile(validAttr);
var currChar = attrCharGrabber.getCurr();

@@ -131,3 +149,3 @@ // first string before space is a tag name

tagName = attrStr;
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) {
} else if (isWhiteSpace(currChar) || currChar === QUOTEMARK || !attrCharGrabber.hasNext()) {
var escaped = unquote(trimChar(attrStr, QUOTEMARK));

@@ -149,9 +167,9 @@ attrTokens.push(createToken(TYPE_ATTR_VALUE, escaped, row, col));

var grabber = createCharGrabber(buffer);
var bufferGrabber = createCharGrabber(buffer);
var next = function next() {
var char = grabber.getCurr();
var char = bufferGrabber.getCurr();
if (char === N) {
grabber.skip();
bufferGrabber.skip();
col = 0;

@@ -162,7 +180,7 @@ row++;

} else if (isWhiteSpace(char)) {
var str = grabber.grabWhile(isWhiteSpace);
var str = bufferGrabber.grabWhile(isWhiteSpace);
emitToken(createToken(TYPE_SPACE, str, row, col));
} else if (char === OPEN_BRAKET) {
var nextChar = grabber.getNext();
grabber.skip(); // skip [
} else if (char === openTag) {
var nextChar = bufferGrabber.getNext();
bufferGrabber.skip(); // skip [

@@ -172,6 +190,6 @@ if (isCharReserved(nextChar)) {

} else {
var _str = grabber.grabWhile(function (val) {
return val !== CLOSE_BRAKET;
var _str = bufferGrabber.grabWhile(function (val) {
return val !== closeTag;
});
grabber.skip(); // skip ]
bufferGrabber.skip(); // skip ]

@@ -187,8 +205,8 @@ if (!(_str.indexOf(EQ) > 0) || _str[0] === SLASH) {

}
} else if (char === CLOSE_BRAKET) {
grabber.skip();
} else if (char === closeTag) {
bufferGrabber.skip();
emitToken(createToken(TYPE_WORD, char, row, col));
} else if (isCharToken(char)) {
var _str2 = grabber.grabWhile(isCharToken);
var _str2 = bufferGrabber.grabWhile(isCharToken);

@@ -200,3 +218,3 @@ emitToken(createToken(TYPE_WORD, _str2, row, col));

var tokenize = function tokenize() {
while (grabber.hasNext()) {
while (bufferGrabber.hasNext()) {
next();

@@ -211,3 +229,3 @@ }

var isTokenNested = function isTokenNested(token) {
var value = OPEN_BRAKET + SLASH + token.getValue();
var value = openTag + SLASH + token.getValue();
return buffer.indexOf(value) > -1;

@@ -214,0 +232,0 @@ };

@@ -31,6 +31,2 @@ import TagNode from '@bbob/plugin-helper/lib/TagNode';

var createTokenizer = function createTokenizer(input, onToken) {
return createLexer(input, { onToken: onToken });
};
/**

@@ -49,3 +45,3 @@ * @private

*/
var getTagNode = function getTagNode() {
var getLastTagNode = function getLastTagNode() {
return tagNodes.length ? tagNodes[tagNodes.length - 1] : null;

@@ -76,3 +72,3 @@ };

var getTagNodeAttrName = function getTagNodeAttrName() {
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag;
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : null;
};

@@ -109,2 +105,3 @@

var nestedNode = nestedNodes[nestedNodes.length - 1];
return nestedNode.content;

@@ -145,5 +142,5 @@ }

if (isTagNested(token)) {
nestedNodes.push(getTagNode());
nestedNodes.push(getLastTagNode());
} else {
appendNode(getTagNode());
appendNode(getLastTagNode());
clearTagNode();

@@ -170,2 +167,3 @@ }

var column = token.getColumn();
options.onError({

@@ -203,3 +201,3 @@ message: 'Inconsistent tag \'' + tag + '\' on line ' + line + ' and column ' + column,

var handleTagNode = function handleTagNode(token) {
var tagNode = getTagNode();
var tagNode = getLastTagNode();

@@ -209,6 +207,13 @@ if (tagNode) {

createTagNodeAttrName(token);
tagNode.attr(getTagNodeAttrName(), null);
tagNode.attr(getTagNodeAttrName(), '');
} else if (token.isAttrValue()) {
tagNode.attr(getTagNodeAttrName(), token.getValue());
clearTagNodeAttrName();
var attrName = getTagNodeAttrName();
var attrValue = token.getValue();
if (attrName) {
tagNode.attr(getTagNodeAttrName(), attrValue);
clearTagNodeAttrName();
} else {
tagNode.attr(attrValue, attrValue);
}
} else if (token.isText()) {

@@ -239,3 +244,8 @@ tagNode.append(token.getValue());

options = opts;
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken);
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createLexer)(input, {
onToken: parseToken,
onlyAllowTags: options.onlyAllowTags,
openTag: options.openTag,
closeTag: options.closeTag
});

@@ -242,0 +252,0 @@ nodes = [];

@@ -71,10 +71,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

this.type = String(type);
this.value = String(value);
this.line = Number(line);
this.row = Number(row);
this[TOKEN_TYPE_ID] = String(type);
this[TOKEN_VALUE_ID] = String(value);
this[TOKEN_LINE_ID] = Number(line);
this[TOKEN_COLUMN_ID] = Number(row);
}
Token.prototype.isEmpty = function isEmpty() {
return !!this.type;
return !!this[TOKEN_TYPE_ID];
};

@@ -81,0 +81,0 @@

@@ -11,16 +11,4 @@ 'use strict';

/* eslint-disable no-plusplus,no-param-reassign */
var RESERVED_CHARS = [_char.CLOSE_BRAKET, _char.OPEN_BRAKET, _char.QUOTEMARK, _char.BACKSLASH, _char.SPACE, _char.TAB, _char.EQ, _char.N];
var NOT_CHAR_TOKENS = [_char.OPEN_BRAKET, _char.SPACE, _char.TAB, _char.N];
var WHITESPACES = [_char.SPACE, _char.TAB];
var EM = '!';
var isCharReserved = function isCharReserved(char) {
return RESERVED_CHARS.indexOf(char) >= 0;
};
var isWhiteSpace = function isWhiteSpace(char) {
return WHITESPACES.indexOf(char) >= 0;
};
var isCharToken = function isCharToken(char) {
return NOT_CHAR_TOKENS.indexOf(char) === -1;
};
var createCharGrabber = function createCharGrabber(source) {

@@ -92,2 +80,23 @@ var idx = 0;

var tokens = new Array(Math.floor(buffer.length));
var openTag = options.openTag || _char.OPEN_BRAKET;
var closeTag = options.closeTag || _char.CLOSE_BRAKET;
var RESERVED_CHARS = [closeTag, openTag, _char.QUOTEMARK, _char.BACKSLASH, _char.SPACE, _char.TAB, _char.EQ, _char.N, EM];
var NOT_CHAR_TOKENS = [openTag, _char.SPACE, _char.TAB, _char.N];
var WHITESPACES = [_char.SPACE, _char.TAB];
var SPECIAL_CHARS = [_char.EQ, _char.SPACE, _char.TAB];
var isCharReserved = function isCharReserved(char) {
return RESERVED_CHARS.indexOf(char) >= 0;
};
var isWhiteSpace = function isWhiteSpace(char) {
return WHITESPACES.indexOf(char) >= 0;
};
var isCharToken = function isCharToken(char) {
return NOT_CHAR_TOKENS.indexOf(char) === -1;
};
var isSpecialChar = function isSpecialChar(char) {
return SPECIAL_CHARS.indexOf(char) >= 0;
};
var emitToken = function emitToken(token) {

@@ -104,24 +113,32 @@ if (options.onToken) {

var tagName = null;
var skipSpaces = false;
var skipSpecialChars = false;
var attrTokens = [];
var attrCharGrabber = createCharGrabber(str);
var validAttr = function validAttr(val) {
var isEQ = val === _char.EQ;
var isWS = isWhiteSpace(val);
var isPrevSLASH = attrCharGrabber.getPrev() === _char.SLASH;
if (tagName === null) {
return !(isEQ || isWS || attrCharGrabber.isLast());
var validAttr = function validAttr(char) {
var isEQ = char === _char.EQ;
var isWS = isWhiteSpace(char);
var prevChar = attrCharGrabber.getPrev();
var nextChar = attrCharGrabber.getNext();
var isPrevSLASH = prevChar === _char.BACKSLASH;
var isTagNameEmpty = tagName === null;
if (isTagNameEmpty) {
return (isEQ || isWS || attrCharGrabber.isLast()) === false;
}
if (skipSpaces && isWS) {
if (skipSpecialChars && isSpecialChar(char)) {
return true;
}
if (val === _char.QUOTEMARK && !isPrevSLASH) {
skipSpaces = !skipSpaces;
if (char === _char.QUOTEMARK && !isPrevSLASH) {
skipSpecialChars = !skipSpecialChars;
if (!skipSpecialChars && !(nextChar === _char.EQ || isWhiteSpace(nextChar))) {
return false;
}
}
return !(isEQ || isWS);
return (isEQ || isWS) === false;
};

@@ -131,2 +148,3 @@

var attrStr = attrCharGrabber.grabWhile(validAttr);
var currChar = attrCharGrabber.getCurr();

@@ -136,3 +154,3 @@ // first string before space is a tag name

tagName = attrStr;
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) {
} else if (isWhiteSpace(currChar) || currChar === _char.QUOTEMARK || !attrCharGrabber.hasNext()) {
var escaped = unquote(trimChar(attrStr, _char.QUOTEMARK));

@@ -154,9 +172,9 @@ attrTokens.push(createToken(_Token.TYPE_ATTR_VALUE, escaped, row, col));

var grabber = createCharGrabber(buffer);
var bufferGrabber = createCharGrabber(buffer);
var next = function next() {
var char = grabber.getCurr();
var char = bufferGrabber.getCurr();
if (char === _char.N) {
grabber.skip();
bufferGrabber.skip();
col = 0;

@@ -167,7 +185,7 @@ row++;

} else if (isWhiteSpace(char)) {
var str = grabber.grabWhile(isWhiteSpace);
var str = bufferGrabber.grabWhile(isWhiteSpace);
emitToken(createToken(_Token.TYPE_SPACE, str, row, col));
} else if (char === _char.OPEN_BRAKET) {
var nextChar = grabber.getNext();
grabber.skip(); // skip [
} else if (char === openTag) {
var nextChar = bufferGrabber.getNext();
bufferGrabber.skip(); // skip [

@@ -177,6 +195,6 @@ if (isCharReserved(nextChar)) {

} else {
var _str = grabber.grabWhile(function (val) {
return val !== _char.CLOSE_BRAKET;
var _str = bufferGrabber.grabWhile(function (val) {
return val !== closeTag;
});
grabber.skip(); // skip ]
bufferGrabber.skip(); // skip ]

@@ -192,8 +210,8 @@ if (!(_str.indexOf(_char.EQ) > 0) || _str[0] === _char.SLASH) {

}
} else if (char === _char.CLOSE_BRAKET) {
grabber.skip();
} else if (char === closeTag) {
bufferGrabber.skip();
emitToken(createToken(_Token.TYPE_WORD, char, row, col));
} else if (isCharToken(char)) {
var _str2 = grabber.grabWhile(isCharToken);
var _str2 = bufferGrabber.grabWhile(isCharToken);

@@ -205,3 +223,3 @@ emitToken(createToken(_Token.TYPE_WORD, _str2, row, col));

var tokenize = function tokenize() {
while (grabber.hasNext()) {
while (bufferGrabber.hasNext()) {
next();

@@ -216,3 +234,3 @@ }

var isTokenNested = function isTokenNested(token) {
var value = _char.OPEN_BRAKET + _char.SLASH + token.getValue();
var value = openTag + _char.SLASH + token.getValue();
return buffer.indexOf(value) > -1;

@@ -219,0 +237,0 @@ };

@@ -41,6 +41,2 @@ 'use strict';

var createTokenizer = function createTokenizer(input, onToken) {
return (0, _lexer.createLexer)(input, { onToken: onToken });
};
/**

@@ -59,3 +55,3 @@ * @private

*/
var getTagNode = function getTagNode() {
var getLastTagNode = function getLastTagNode() {
return tagNodes.length ? tagNodes[tagNodes.length - 1] : null;

@@ -86,3 +82,3 @@ };

var getTagNodeAttrName = function getTagNodeAttrName() {
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag;
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : null;
};

@@ -119,2 +115,3 @@

var nestedNode = nestedNodes[nestedNodes.length - 1];
return nestedNode.content;

@@ -155,5 +152,5 @@ }

if (isTagNested(token)) {
nestedNodes.push(getTagNode());
nestedNodes.push(getLastTagNode());
} else {
appendNode(getTagNode());
appendNode(getLastTagNode());
clearTagNode();

@@ -180,2 +177,3 @@ }

var column = token.getColumn();
options.onError({

@@ -213,3 +211,3 @@ message: 'Inconsistent tag \'' + tag + '\' on line ' + line + ' and column ' + column,

var handleTagNode = function handleTagNode(token) {
var tagNode = getTagNode();
var tagNode = getLastTagNode();

@@ -219,6 +217,13 @@ if (tagNode) {

createTagNodeAttrName(token);
tagNode.attr(getTagNodeAttrName(), null);
tagNode.attr(getTagNodeAttrName(), '');
} else if (token.isAttrValue()) {
tagNode.attr(getTagNodeAttrName(), token.getValue());
clearTagNodeAttrName();
var attrName = getTagNodeAttrName();
var attrValue = token.getValue();
if (attrName) {
tagNode.attr(getTagNodeAttrName(), attrValue);
clearTagNodeAttrName();
} else {
tagNode.attr(attrValue, attrValue);
}
} else if (token.isText()) {

@@ -249,3 +254,8 @@ tagNode.append(token.getValue());

options = opts;
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken);
tokenizer = (opts.createTokenizer ? opts.createTokenizer : _lexer.createLexer)(input, {
onToken: parseToken,
onlyAllowTags: options.onlyAllowTags,
openTag: options.openTag,
closeTag: options.closeTag
});

@@ -252,0 +262,0 @@ nodes = [];

@@ -76,10 +76,10 @@ 'use strict';

this.type = String(type);
this.value = String(value);
this.line = Number(line);
this.row = Number(row);
this[TOKEN_TYPE_ID] = String(type);
this[TOKEN_VALUE_ID] = String(value);
this[TOKEN_LINE_ID] = Number(line);
this[TOKEN_COLUMN_ID] = Number(row);
}
Token.prototype.isEmpty = function isEmpty() {
return !!this.type;
return !!this[TOKEN_TYPE_ID];
};

@@ -86,0 +86,0 @@

{
"name": "@bbob/parser",
"version": "1.3.2",
"version": "2.0.0",
"description": "Just parses BBcode to AST array",

@@ -16,3 +16,3 @@ "keywords": [

"dependencies": {
"@bbob/plugin-helper": "1.x"
"@bbob/plugin-helper": "^2.0.0"
},

@@ -19,0 +19,0 @@ "main": "lib/index.js",

@@ -16,10 +16,4 @@ /* eslint-disable no-plusplus,no-param-reassign */

const RESERVED_CHARS = [CLOSE_BRAKET, OPEN_BRAKET, QUOTEMARK, BACKSLASH, SPACE, TAB, EQ, N];
const NOT_CHAR_TOKENS = [OPEN_BRAKET, SPACE, TAB, N];
const WHITESPACES = [SPACE, TAB];
const EM = '!';
const isCharReserved = char => (RESERVED_CHARS.indexOf(char) >= 0);
const isWhiteSpace = char => (WHITESPACES.indexOf(char) >= 0);
const isCharToken = char => (NOT_CHAR_TOKENS.indexOf(char) === -1);
const createCharGrabber = (source) => {

@@ -73,2 +67,15 @@ let idx = 0;

const tokens = new Array(Math.floor(buffer.length));
const openTag = options.openTag || OPEN_BRAKET;
const closeTag = options.closeTag || CLOSE_BRAKET;
const RESERVED_CHARS = [closeTag, openTag, QUOTEMARK, BACKSLASH, SPACE, TAB, EQ, N, EM];
const NOT_CHAR_TOKENS = [openTag, SPACE, TAB, N];
const WHITESPACES = [SPACE, TAB];
const SPECIAL_CHARS = [EQ, SPACE, TAB];
const isCharReserved = char => (RESERVED_CHARS.indexOf(char) >= 0);
const isWhiteSpace = char => (WHITESPACES.indexOf(char) >= 0);
const isCharToken = char => (NOT_CHAR_TOKENS.indexOf(char) === -1);
const isSpecialChar = char => (SPECIAL_CHARS.indexOf(char) >= 0);
const emitToken = (token) => {

@@ -85,24 +92,32 @@ if (options.onToken) {

let tagName = null;
let skipSpaces = false;
let skipSpecialChars = false;
const attrTokens = [];
const attrCharGrabber = createCharGrabber(str);
const validAttr = (val) => {
const isEQ = val === EQ;
const isWS = isWhiteSpace(val);
const isPrevSLASH = attrCharGrabber.getPrev() === SLASH;
if (tagName === null) {
return !(isEQ || isWS || attrCharGrabber.isLast());
const validAttr = (char) => {
const isEQ = char === EQ;
const isWS = isWhiteSpace(char);
const prevChar = attrCharGrabber.getPrev();
const nextChar = attrCharGrabber.getNext();
const isPrevSLASH = prevChar === BACKSLASH;
const isTagNameEmpty = tagName === null;
if (isTagNameEmpty) {
return (isEQ || isWS || attrCharGrabber.isLast()) === false;
}
if (skipSpaces && isWS) {
if (skipSpecialChars && isSpecialChar(char)) {
return true;
}
if (val === QUOTEMARK && !isPrevSLASH) {
skipSpaces = !skipSpaces;
if (char === QUOTEMARK && !isPrevSLASH) {
skipSpecialChars = !skipSpecialChars;
if (!skipSpecialChars && !(nextChar === EQ || isWhiteSpace(nextChar))) {
return false;
}
}
return !(isEQ || isWS);
return (isEQ || isWS) === false;
};

@@ -112,2 +127,3 @@

const attrStr = attrCharGrabber.grabWhile(validAttr);
const currChar = attrCharGrabber.getCurr();

@@ -117,3 +133,3 @@ // first string before space is a tag name

tagName = attrStr;
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) {
} else if (isWhiteSpace(currChar) || currChar === QUOTEMARK || !attrCharGrabber.hasNext()) {
const escaped = unquote(trimChar(attrStr, QUOTEMARK));

@@ -135,9 +151,9 @@ attrTokens.push(createToken(TYPE_ATTR_VALUE, escaped, row, col));

const grabber = createCharGrabber(buffer);
const bufferGrabber = createCharGrabber(buffer);
const next = () => {
const char = grabber.getCurr();
const char = bufferGrabber.getCurr();
if (char === N) {
grabber.skip();
bufferGrabber.skip();
col = 0;

@@ -148,7 +164,7 @@ row++;

} else if (isWhiteSpace(char)) {
const str = grabber.grabWhile(isWhiteSpace);
const str = bufferGrabber.grabWhile(isWhiteSpace);
emitToken(createToken(TYPE_SPACE, str, row, col));
} else if (char === OPEN_BRAKET) {
const nextChar = grabber.getNext();
grabber.skip(); // skip [
} else if (char === openTag) {
const nextChar = bufferGrabber.getNext();
bufferGrabber.skip(); // skip [

@@ -158,4 +174,4 @@ if (isCharReserved(nextChar)) {

} else {
const str = grabber.grabWhile(val => val !== CLOSE_BRAKET);
grabber.skip(); // skip ]
const str = bufferGrabber.grabWhile(val => val !== closeTag);
bufferGrabber.skip(); // skip ]

@@ -171,8 +187,8 @@ if (!(str.indexOf(EQ) > 0) || str[0] === SLASH) {

}
} else if (char === CLOSE_BRAKET) {
grabber.skip();
} else if (char === closeTag) {
bufferGrabber.skip();
emitToken(createToken(TYPE_WORD, char, row, col));
} else if (isCharToken(char)) {
const str = grabber.grabWhile(isCharToken);
const str = bufferGrabber.grabWhile(isCharToken);

@@ -184,3 +200,3 @@ emitToken(createToken(TYPE_WORD, str, row, col));

const tokenize = () => {
while (grabber.hasNext()) {
while (bufferGrabber.hasNext()) {
next();

@@ -195,3 +211,3 @@ }

const isTokenNested = (token) => {
const value = OPEN_BRAKET + SLASH + token.getValue();
const value = openTag + SLASH + token.getValue();
return buffer.indexOf(value) > -1;

@@ -198,0 +214,0 @@ };

@@ -31,4 +31,2 @@ import TagNode from '@bbob/plugin-helper/lib/TagNode';

const createTokenizer = (input, onToken) => createLexer(input, { onToken });
/**

@@ -45,3 +43,3 @@ * @private

*/
const getTagNode = () => (tagNodes.length ? tagNodes[tagNodes.length - 1] : null);
const getLastTagNode = () => (tagNodes.length ? tagNodes[tagNodes.length - 1] : null);

@@ -66,3 +64,3 @@ /**

const getTagNodeAttrName = () =>
(tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag);
(tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : null);

@@ -98,2 +96,3 @@ /**

const nestedNode = nestedNodes[nestedNodes.length - 1];
return nestedNode.content;

@@ -134,5 +133,5 @@ }

if (isTagNested(token)) {
nestedNodes.push(getTagNode());
nestedNodes.push(getLastTagNode());
} else {
appendNode(getTagNode());
appendNode(getLastTagNode());
clearTagNode();

@@ -159,2 +158,3 @@ }

const column = token.getColumn();
options.onError({

@@ -192,3 +192,3 @@ message: `Inconsistent tag '${tag}' on line ${line} and column ${column}`,

const handleTagNode = (token) => {
const tagNode = getTagNode();
const tagNode = getLastTagNode();

@@ -198,6 +198,13 @@ if (tagNode) {

createTagNodeAttrName(token);
tagNode.attr(getTagNodeAttrName(), null);
tagNode.attr(getTagNodeAttrName(), '');
} else if (token.isAttrValue()) {
tagNode.attr(getTagNodeAttrName(), token.getValue());
clearTagNodeAttrName();
const attrName = getTagNodeAttrName();
const attrValue = token.getValue();
if (attrName) {
tagNode.attr(getTagNodeAttrName(), attrValue);
clearTagNodeAttrName();
} else {
tagNode.attr(attrValue, attrValue);
}
} else if (token.isText()) {

@@ -226,3 +233,8 @@ tagNode.append(token.getValue());

options = opts;
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken);
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createLexer)(input, {
onToken: parseToken,
onlyAllowTags: options.onlyAllowTags,
openTag: options.openTag,
closeTag: options.closeTag,
});

@@ -229,0 +241,0 @@ nodes = [];

@@ -56,10 +56,10 @@ import {

constructor(type, value, line, row) {
this.type = String(type);
this.value = String(value);
this.line = Number(line);
this.row = Number(row);
this[TOKEN_TYPE_ID] = String(type);
this[TOKEN_VALUE_ID] = String(value);
this[TOKEN_LINE_ID] = Number(line);
this[TOKEN_COLUMN_ID] = Number(row);
}
isEmpty() {
return !!this.type;
return !!this[TOKEN_TYPE_ID];
}

@@ -66,0 +66,0 @@

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