diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2018-01-08 18:37:29 +0900 |
---|---|---|
committer | Shin'ya Ueoka <ueokande@i-beam.org> | 2018-01-08 18:37:29 +0900 |
commit | 3dbdcdba074f020f88bd4d1f5554d49549973ccd (patch) | |
tree | d37b794cc09169dcfe139c9ebc1f38f5b4c05fe8 /src | |
parent | 5c449df9b6f084d4e71627b1434154ebd7c30bc6 (diff) |
property parser
Diffstat (limited to 'src')
-rw-r--r-- | src/shared/commands/properties.js | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/shared/commands/properties.js b/src/shared/commands/properties.js new file mode 100644 index 0000000..8a3213d --- /dev/null +++ b/src/shared/commands/properties.js @@ -0,0 +1,31 @@ +const mustNumber = (v) => { + let num = Number(v); + if (isNaN(num)) { + throw new Error('Not number: ' + v); + } + return num; +}; + +const parseProperty = (word, types) => { + let [key, value] = word.split('='); + if (!value) { + 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 { parseProperty }; |