Auto-debug when output would be empty
This commit is contained in:
parent
bc7578199d
commit
b43b71998a
1 changed files with 67 additions and 57 deletions
124
src/ergogen.js
124
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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue