Add: meta-parser
This commit is contained in:
parent
a4df641b96
commit
7d75dd8754
46
js/meta-parser.js
Normal file
46
js/meta-parser.js
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
/* global usercssMeta colorConverter */
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-var
|
||||||
|
var metaParser = (() => {
|
||||||
|
const parser = usercssMeta.createParser({
|
||||||
|
validateVar: {
|
||||||
|
select: state => {
|
||||||
|
if (state.value !== null && state.varResult.options.every(o => o.name !== state.value)) {
|
||||||
|
throw new Error('select value mismatch');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
color: state => {
|
||||||
|
if (state.value !== null) {
|
||||||
|
colorConverter.format(colorConverter.parse(state.value), 'rgb');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return {parse, nullifyInvalidVars};
|
||||||
|
|
||||||
|
function parse(text, indexOffset) {
|
||||||
|
try {
|
||||||
|
return parser.parse(text);
|
||||||
|
} catch (err) {
|
||||||
|
if (typeof err.index === 'number') {
|
||||||
|
err.index += indexOffset;
|
||||||
|
}
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function nullifyInvalidVars(vars) {
|
||||||
|
for (const va of Object.values(vars)) {
|
||||||
|
if (va.value === null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
parser.validateVar(va);
|
||||||
|
} catch (err) {
|
||||||
|
va.value = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return vars;
|
||||||
|
}
|
||||||
|
})();
|
Loading…
Reference in New Issue
Block a user