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