44 lines
986 B
JavaScript
44 lines
986 B
JavaScript
const { LITERAL_MARKER } = require("../helpers/constants")
|
|
|
|
const PostProcessorNames = {
|
|
CONVERT_LITERALS: "convert-literals",
|
|
}
|
|
|
|
/* eslint-disable no-unused-vars */
|
|
class Postprocessor {
|
|
constructor(name, fn) {
|
|
this.name = name
|
|
this.fn = fn
|
|
}
|
|
|
|
process(statement) {
|
|
return this.fn(statement)
|
|
}
|
|
}
|
|
|
|
module.exports.processors = [
|
|
new Postprocessor(PostProcessorNames.CONVERT_LITERALS, statement => {
|
|
if (!statement.includes(LITERAL_MARKER)) {
|
|
return statement
|
|
}
|
|
|
|
const components = statement.split("-")
|
|
// pop and shift remove the empty array elements from the first and last dash
|
|
components.pop()
|
|
components.shift()
|
|
const type = components[1]
|
|
const value = components[2]
|
|
switch (type) {
|
|
case "string":
|
|
return value
|
|
case "number":
|
|
return parseFloat(value)
|
|
case "boolean":
|
|
return value === "true"
|
|
case "object":
|
|
return JSON.parse(value)
|
|
}
|
|
return value
|
|
}),
|
|
]
|