#!/usr/bin/env node const fs = require("fs"); const path = require("path"); const config = require("../ligma.config"); const dsa = require("./dsa"); const src_path = path.join(__dirname, "..", "src"); let day = 1; try { day = +fs.readdirSync(src_path). filter(i => i.includes("day")). sort((a, b) => { return +b.substring(3) - a.substring(3); })[0].substring(3) + 1; if (isNaN(day)) { console.log("day is nan"); day = 1; } } catch (e) { console.log("error", e.message); console.log("day is 1"); day = 1; } const day_name = `day${day}`; const day_path = path.join(src_path, day_name); try { fs.unlinkSync(day_path); } catch (e) { } try { fs.mkdirSync(day_path); } catch (e) { } function generate_method(method) { return `${method.name}(${method.args}): ${method.return || "void"} { }`; } function generate_property(prop) { return `${prop.scope} ${prop.name}: ${prop.type};` } function generate_getter(getter) { return `${getter.name}(): ${getter.return} { return this.${getter.prop_name}; }` } function create_class(name, item) { fs.writeFileSync(path.join(day_path, `${name}.ts`), `export default class ${name} { ${(item.properties || []).map(generate_property).join("\n ")} ${(item.getters || []).map(generate_getter).join("\n ")} constructor() { } ${(item.methods || []).map(generate_method).join("\n ")} }`); } function create_function(name, item) { fs.writeFileSync(path.join(day_path, `${name}.ts`), `export default function ${item.fn}(${item.args}): ${item.return} { }`); } config.dsa.forEach(ds => { const item = dsa[ds]; if (item.type === "class") { create_class(ds, item); } else { create_function(ds, item); } }); const align = require("./align-configs"); align.jest(day_name); align.ts_config(day_name); align.package_json(config, day_path);