aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dist/index.js16
-rw-r--r--src/index.js14
2 files changed, 22 insertions, 8 deletions
diff --git a/dist/index.js b/dist/index.js
index ab96cab..804591b 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1,7 +1,9 @@
'use strict'; // A valid output which means nothing has been parsed.
// Used as error return / invalid output
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -21,7 +23,7 @@ function parse(value, indexNext, userConfig) {
var stopOnBrace = false;
var errorDetected = false;
- var config = _objectSpread({}, defaultConfig, userConfig); // Make defaultValue a function if it isn't
+ var config = _objectSpread({}, defaultConfig, {}, userConfig); // Make defaultValue a function if it isn't
if (typeof config.defaultValue !== 'function') {
@@ -173,12 +175,12 @@ function parse(value, indexNext, userConfig) {
break;
case 'class':
- if (!prop.class) {
- prop.class = [];
+ if (!prop["class"]) {
+ prop["class"] = [];
}
- if (prop.class.indexOf(labelFirst) < 0) {
- prop.class.push(labelFirst);
+ if (prop["class"].indexOf(labelFirst) < 0) {
+ prop["class"].push(labelFirst);
}
break;
@@ -201,7 +203,7 @@ function parse(value, indexNext, userConfig) {
idSetByKey = true;
}
} else if (labelFirst === 'class' && Boolean(labelSecond)) {
- prop.class.push(labelSecond);
+ prop["class"].push(labelSecond);
}
break;
diff --git a/src/index.js b/src/index.js
index 3983260..b78947c 100644
--- a/src/index.js
+++ b/src/index.js
@@ -11,8 +11,8 @@ const defaultConfig = {
defaultValue: () => undefined, // Its a function
};
-// Main function
function parse(value, indexNext, userConfig) {
+// Main function
let letsEat = '';
let stopOnBrace = false;
let errorDetected = false;
@@ -52,8 +52,10 @@ function parse(value, indexNext, userConfig) {
if (stopOnBrace && value[indexNext] !== '}') {
errorDetected = true;
}
+
return true;
}
+
return value[indexNext] === '}' && stopOnBrace;
};
@@ -73,6 +75,7 @@ function parse(value, indexNext, userConfig) {
return shouldStop();
};
+
const eatUntil = chars => {
eaten = '';
@@ -111,6 +114,7 @@ function parse(value, indexNext, userConfig) {
eaten += value.charAt(indexNext);
indexNext++;
}
+
// If we encounter an EOL, there is an error
// We are waiting for a quote
if (value[indexNext] === '\n' || value[indexNext] === '\r' || indexNext >= value.length) {
@@ -145,6 +149,7 @@ function parse(value, indexNext, userConfig) {
if (value.charAt(indexNext) !== q) {
return nothingHappend;
}
+
if (eatOne(q)) {
return -1;
}
@@ -160,6 +165,7 @@ function parse(value, indexNext, userConfig) {
} else {
prop.id = prop.id || labelFirst;
}
+
break;
case 'class':
if (!prop.class) {
@@ -175,6 +181,7 @@ function parse(value, indexNext, userConfig) {
if (!labelFirst) {
return nothingHappend;
}
+
if (!(labelFirst in prop)) {
if (labelSecond === undefined) { // Here, we have an attribute without value
// so it's user defined
@@ -182,15 +189,18 @@ function parse(value, indexNext, userConfig) {
} else {
prop[labelFirst] = labelFirst === 'class' ? [labelSecond] : labelSecond;
}
+
if (labelFirst === 'id') {
idSetByKey = true;
}
} else if (labelFirst === 'class' && Boolean(labelSecond)) {
prop.class.push(labelSecond);
}
+
break;
default:
}
+
type = undefined;
labelFirst = '';
labelSecond = undefined;
@@ -231,6 +241,7 @@ function parse(value, indexNext, userConfig) {
if (eatUntil('=\t\b\v  ') || !labelFirst) {
break;
}
+
if (value.charAt(indexNext) === '=' && type === 'key') { // Set labelSecond
if (eatOne('=')) {
break;
@@ -258,6 +269,7 @@ function parse(value, indexNext, userConfig) {
// Add the parsed attribute to the output prop with the ad hoc type
addAttribute();
}
+
addAttribute();
if (stopOnBrace) {
if (indexNext < value.length && value[indexNext] === '}') {