From b43b71998a216c097600b727dcd96256f5ed75e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1n=20D=C3=A9nes?= Date: Fri, 16 Jul 2021 13:18:50 +0200 Subject: [PATCH] Auto-debug when output would be empty --- src/ergogen.js | 124 ++++++++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 57 deletions(-) diff --git a/src/ergogen.js b/src/ergogen.js index 3030696..2cfeacb 100644 --- a/src/ergogen.js +++ b/src/ergogen.js @@ -7,64 +7,74 @@ const outlines_lib = require('./outlines') const cases_lib = require('./cases') const pcbs_lib = require('./pcbs') +const process = async (raw, debug=false, logger=()=>{}) => { + + let empty = true + let [config, format] = io.interpret(raw, logger) + logger('Interpreting format: ' + format) + + logger('Preprocessing input...') + config = prepare.unnest(config) + config = prepare.inherit(config) + const results = {} + if (debug) { + results.raw = raw + results.canonical = u.deepcopy(config) + } + + logger('Calculating variables...') + const units = units_lib.parse(config) + if (debug) { + results.units = units + } + + + logger('Parsing points...') + if (!config.points) { + throw new Error('Input does not contain any points!') + } + const points = points_lib.parse(config.points, units) + if (debug) { + results.points = points + results.demo = io.twodee(points_lib.visualize(points), debug) + } + + logger('Generating outlines...') + const outlines = outlines_lib.parse(config.outlines || {}, points, units) + results.outlines = {} + for (const [name, outline] of Object.entries(outlines)) { + if (!debug && name.startsWith('_')) continue + results.outlines[name] = io.twodee(outline, debug) + empty = false + } + + logger('Extruding cases...') + const cases = cases_lib.parse(config.cases || {}, outlines, units) + results.cases = {} + for (const [case_name, case_script] of Object.entries(cases)) { + if (!debug && case_name.startsWith('_')) continue + results.cases[case_name] = await io.threedee(case_script, debug) + empty = false + } + + logger('Scaffolding PCBs...') + const pcbs = pcbs_lib.parse(config.pcbs || {}, points, outlines, units) + results.pcbs = {} + for (const [pcb_name, pcb_text] of Object.entries(pcbs)) { + if (!debug && pcb_name.startsWith('_')) continue + results.pcbs[pcb_name] = pcb_text + empty = false + } + + if (!debug && empty) { + logger('Output would be empty, rerunning in debug mode...') + return process(raw, true, () => {}) + } + return results +} + module.exports = { version: '__ergogen_version', - process: async (raw, debug=false, logger=()=>{}) => { - - let [config, format] = io.interpret(raw, logger) - logger('Interpreting format: ' + format) - - logger('Preprocessing input...') - config = prepare.unnest(config) - config = prepare.inherit(config) - const results = {} - if (debug) { - results.raw = raw - results.canonical = u.deepcopy(config) - } - - logger('Calculating variables...') - const units = units_lib.parse(config) - if (debug) { - results.units = units - } - - - logger('Parsing points...') - if (!config.points) { - throw new Error('Input does not contain any points!') - } - const points = points_lib.parse(config.points, units) - if (debug) { - results.points = points - results.demo = io.twodee(points_lib.visualize(points), debug) - } - - logger('Generating outlines...') - const outlines = outlines_lib.parse(config.outlines || {}, points, units) - results.outlines = {} - for (const [name, outline] of Object.entries(outlines)) { - if (!debug && name.startsWith('_')) continue - results.outlines[name] = io.twodee(outline, debug) - } - - logger('Extruding cases...') - const cases = cases_lib.parse(config.cases || {}, outlines, units) - results.cases = {} - for (const [case_name, case_script] of Object.entries(cases)) { - if (!debug && case_name.startsWith('_')) continue - results.cases[case_name] = await io.threedee(case_script, debug) - } - - logger('Scaffolding PCBs...') - const pcbs = pcbs_lib.parse(config.pcbs || {}, points, outlines, units) - results.pcbs = {} - for (const [pcb_name, pcb_text] of Object.entries(pcbs)) { - if (!debug && pcb_name.startsWith('_')) continue - results.pcbs[pcb_name] = pcb_text - } - - return results - }, + process, inject_footprint: pcbs_lib.inject_footprint } \ No newline at end of file