You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.1 KiB
JavaScript

'use strict';
const luaParser = require("luaparse");
const xtend = require("xtend");
const parseValue = require("./ast/value");
module.exports = function(luaCode) {
let parsedFile = luaParser.parse(luaCode);
let dataRoot = parsedFile.body[0].expression.arguments[0];
let dataItems = parseValue(dataRoot);
return dataItems.filter((item) => {
return item.type === "recipe";
}).map((recipe) => {
let clonedRecipe = xtend(recipe);
delete clonedRecipe.type;
delete clonedRecipe.name;
clonedRecipe.ingredients = clonedRecipe.ingredients.map((item) => {
if (Array.isArray(item)) {
return {
key: item[0],
value: {
type: "item",
amount: item[1]
}
}
} else {
let clonedIngredient = xtend(item);
delete clonedIngredient.name;
return {
key: item.name,
value: clonedIngredient
}
}
}).reduce((allIngredients, ingredient) => {
allIngredients[ingredient.key] = ingredient.value;
return allIngredients;
}, {});
return {
key: recipe.name,
value: clonedRecipe
}
}).reduce((allRecipes, recipe) => {
allRecipes[recipe.key] = recipe.value;
return allRecipes;
}, {});
}