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