diff options
Diffstat (limited to 'src/background/usecases/parsers.js')
| -rw-r--r-- | src/background/usecases/parsers.js | 31 | 
1 files changed, 31 insertions, 0 deletions
| diff --git a/src/background/usecases/parsers.js b/src/background/usecases/parsers.js new file mode 100644 index 0000000..43c8177 --- /dev/null +++ b/src/background/usecases/parsers.js @@ -0,0 +1,31 @@ +const mustNumber = (v) => { +  let num = Number(v); +  if (isNaN(num)) { +    throw new Error('Not number: ' + v); +  } +  return num; +}; + +const parseSetOption = (word, types) => { +  let [key, value] = word.split('='); +  if (value === undefined) { +    value = !key.startsWith('no'); +    key = value ? key : key.slice(2); +  } +  let type = types[key]; +  if (!type) { +    throw new Error('Unknown property: ' + key); +  } +  if (type === 'boolean' && typeof value !== 'boolean' || +       type !== 'boolean' && typeof value === 'boolean') { +    throw new Error('Invalid argument: ' + word); +  } + +  switch (type) { +  case 'string': return [key, value]; +  case 'number': return [key, mustNumber(value)]; +  case 'boolean': return [key, value]; +  } +}; + +export { parseSetOption }; | 
