'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; }, {}); }