From 571c69325392dfc228d6acf1588f6a4b10cfc7d6 Mon Sep 17 00:00:00 2001 From: Leo B Date: Mon, 21 Aug 2023 17:24:54 +0200 Subject: [PATCH] Upgrade to Ergogen v4 (#25) * Upgrade to Ergogen v4 and its new positioning / offset rules * Make Samoklava a "bundle" that includes all of its custom footprints --- Makefile | 2 +- config.yaml | 408 ++++++ footprints/reset_button.js | 43 + footprints/slider_threeway.js | 55 + footprints/text.js | 22 + footprints/trrs_tight.js | 103 ++ package-lock.json | 2375 +++++++++++++-------------------- package.json | 12 +- samoklava.yaml | 444 ------ 9 files changed, 1580 insertions(+), 1884 deletions(-) create mode 100644 config.yaml create mode 100644 footprints/reset_button.js create mode 100644 footprints/slider_threeway.js create mode 100644 footprints/text.js create mode 100644 footprints/trrs_tight.js delete mode 100644 samoklava.yaml diff --git a/Makefile b/Makefile index 3de5e02..15344e6 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ setup: npm install # outputs from -output/pcbs/board.kicad_pcb output/pcbs/top_plate.kicad_pcb output/pcbs/bottom_plate.kicad_pcb &: samoklava.yaml +output/pcbs/board.kicad_pcb output/pcbs/top_plate.kicad_pcb output/pcbs/bottom_plate.kicad_pcb &: config.yaml npm run gen output/pcbs/%.dsn: output/pcbs/%.kicad_pcb diff --git a/config.yaml b/config.yaml new file mode 100644 index 0000000..d6af23d --- /dev/null +++ b/config.yaml @@ -0,0 +1,408 @@ +meta: + engine: 4.0.4 + name: samoklava + version: 0.3 + author: soundmonnster + url: https://github.com/soundmonster/samoklava +units: + kx: cx + ky: cy + px: 2 + py: 2 +points: + key: + footprints: + choc_hotswap: + type: choc + params: + hotswap: true + reverse: true + keycaps: true + nets: + from: =colrow + to: =column_net + diode: + type: diode + nets: + from: =colrow + to: =row_net + anchor: + shift: [0, -5] + zones: + matrix: + key.padding: ky + columns: + pinky: + key: + stagger: 0 ky + spread: kx + column_net: col_pinky + ring: + key: + stagger: 0.7 ky + spread: kx + column_net: col_ring + middle: + key: + stagger: 0.2 ky + spread: kx + column_net: col_middle + index: + key: + stagger: -0.2 ky + spread: kx + column_net: col_index + inner: + key: + stagger: -0.1 ky + spread: kx + column_net: col_inner + rows: + bottom: + row_net: row_bottom + home: + row_net: row_home + top: + row_net: row_top + thumbfan: + anchor: + ref: matrix_inner_bottom + shift: [-0.5 kx, -1 ky] + columns: + near: + key: + spread: kx + splay: -15 + origin: [-0.5 kx, -0.5 ky] + column_net: col_middle + home: + key: + spread: kx + splay: -15 + origin: [-0.5 kx, -0.5 ky] + column_net: col_index + far: + key: + spread: kx + splay: -15 + origin: [-0.5 kx, -0.5 ky] + column_net: col_inner + rows: + thumb: + row_net: row_thumb +outlines: + # board dimensions according to JLCPCB: 122.28 mm x 101.05 mm + raw: + - what: rectangle + where: true + asym: source + size: [kx + px, ky + py] + corner: px + thumbfan_glue: + - what: polygon + points: + - ref: matrix_inner_bottom + shift: [0.5 kx + 0.5px, -0.5 ky + 0.5 py] + - ref: thumbfan_far_thumb + shift: [0.5 kx - 0.5px, 0.5 ky + 0.5 py] + - ref: thumbfan_far_thumb + shift: [0.5 kx - 0.5px, -0.5 ky - 0.5 py] + - ref: thumbfan_near_thumb + shift: [-0.5 kx + 0.5 px, -0.5 ky - 0.5 py] + - ref: matrix_pinky_bottom + shift: [0.5 kx - 0.5 py, -0.5 ky - 0.5 py] + - ref: matrix_pinky_home + - ref: matrix_inner_home + patch_outer: + - what: polygon + points: + - ref: matrix_ring_top + - ref: matrix_ring_bottom + - ref: matrix_pinky_bottom + shift: [-0.5 (kx + px), 0] + - ref: matrix_pinky_top + shift: [-0.5 (kx + px), 0] + patch_inner: + - what: polygon + points: + - ref: matrix_inner_top + shift: [0.5 (kx + px), 0] + - ref: matrix_inner_bottom + shift: [0.5 (kx + px), 0] + - ref: matrix_index_bottom + - ref: matrix_index_top + controller_area: + - what: rectangle + where: + - ref: matrix_inner_top + # re-tranalte to new anchor position + shift: [32/2 + 0 kx, 76.5/2 - 4.05 ky] + size: [32, 76.5] + corner: px + switches: + - what: rectangle + where: true + asym: source + size: 14 + keycaps: + - what: rectangle + where: true + asym: source + size: [kx, ky] + corner: 1 + keywell: + - "raw" + - "+patch_inner" + - "+patch_outer" + - "+thumbfan_glue" + base_outline: + - "keywell" + - "+controller_area" + screw_holes: + top_left: + what: circle + where: + - ref: matrix_ring_home + shift: [-0.5 kx, 0 ky] + radius: 1.05 + bottom_left: + what: circle + where: + - ref: matrix_pinky_bottom + shift: [0.5 kx, 0] + radius: 1.05 + top_right: + what: circle + where: + - ref: matrix_inner_top + shift: [-0.5 kx, 0] + radius: 1.05 + palm: + what: circle + where: + - ref: matrix_index_bottom + shift: [0, -1.06 ky] + radius: 1.05 + thumb: + what: circle + where: + - ref: thumbfan_far_thumb + shift: [-0.55 kx, 0] + radius: 1.05 + mounting_holes: + $extends: outlines.screw_holes + top_left: + radius: 2.05 + bottom_left: + radius: 2.05 + top_right: + radius: 2.05 + palm: + radius: 2.05 + thumb: + radius: 2.05 + bottom_outline: + - "base_outline" + # TODO use footprints with pad + via reinforcement as mounting holes + - "-screw_holes" + plate: + - "keywell" + - "-switches" + - "-screw_holes" + pcb: + - "base_outline" + # TODO use footprints with pad + via reinforcement as mounting holes + - "-mounting_holes" +pcbs: + top_plate: + outlines: + edge: + outline: plate + layer: Edge.Cuts + footprints: + jlc_order_number: + what: text + where: + ref: + - matrix_ring_home + shift: [-0.25 kx, 0.5 ky] + params: + text: "JLCJLCJLCJLC" + justify: left + bottom_plate: + outlines: + edge: + outline: bottom_outline + layer: Edge.Cuts + board: + outlines: + edge: + outline: pcb + layer: Edge.Cuts + footprints: + choc_hotswap: + what: choc + where: + - /matrix_.*/ + - /thumbfan_.*/ + params: + hotswap: true + reverse: true + keycaps: true + from: "{{colrow}}" + to: "{{column_net}}" + diode: + what: diode + where: + - /matrix_.*/ + - /thumbfan_.*/ + adjust.shift: [0, -5] + params: + from: "{{colrow}}" + to: "{{row_net}}" + mcu_l: + what: promicro + where: + ref: + - matrix_inner_top + shift: [20, -11] + rotate: 270 + params: + orientation: up + P4: row_top + P5: row_home + P6: row_bottom + P7: row_thumb + P14: col_inner + P15: col_index + P18: col_middle + P19: col_ring + P20: col_pinky + mcu_r: + what: promicro + where: + ref: + - matrix_inner_top + shift: [22.5, -12.25] + rotate: 270 + params: + orientation: down + pad_plus: + what: pad + where: + ref: + - matrix_inner_top + shift: [23, -6] + rotate: 0 + params: + front: true + back: true + width: 1.5 + height: 1.5 + text: "B+" + net: Bplus + pad_minus: + what: pad + where: + ref: + - matrix_inner_top + shift: [23, -3] + rotate: 0 + params: + front: true + back: true + width: 1.5 + height: 1.5 + text: "B-" + net: GND + trrs: + what: trrs_tight + where: + ref: + - matrix_inner_bottom + shift: [32, -15] + rotate: 270 + params: + reverse: true + symmetric: false + # The naming of the nets on this footprint is different from the Corne schematics. + A: "" + B: VCC + C: GND + D: P0 + jumper_l: + what: jumper + where: + ref: + - matrix_inner_bottom + shift: [23.5, 0] + rotate: 270 + params: + side: B + from: Bplus + to: RAW + jumper_r: + what: jumper + where: + ref: + - matrix_inner_bottom + shift: [23.5, 0] + rotate: 270 + params: + side: F + from: Bplus + to: RAW + slider_l: + what: slider_threeway + where: + ref: + - matrix_inner_bottom + shift: [30, 0] + rotate: 270 + params: + side: F + from: RAW + left: Bplus + right: '' + slider_r: + what: slider_threeway + where: + ref: + - matrix_inner_bottom + shift: [30, 0] + rotate: 270 + params: + side: B + from: RAW + left: '' + right: Bplus + reset: + what: reset_button + where: + ref: + - matrix_inner_bottom + shift: [17, 0] + rotate: 270 + params: + from: GND + to: RST + info_l: + what: text + where: + ref: + - matrix_pinky_bottom + shift: [0.75 kx, 0] + params: + text: "samoklava v0.3\\nby soundmonster" + justify: left + info_r: + what: text + where: + ref: + - matrix_pinky_bottom + shift: [0.75 kx, 0] + params: + layer: B.SilkS + text: "samoklava v0.3\\nby soundmonster" + justify: right mirror + diff --git a/footprints/reset_button.js b/footprints/reset_button.js new file mode 100644 index 0000000..e19eb39 --- /dev/null +++ b/footprints/reset_button.js @@ -0,0 +1,43 @@ +module.exports = { + params: { + designator: 'B', // for Button + from: undefined, + to: undefined + }, + body: p => { + // this footprint goes to both sides by default so it ignores the layer setting + return ` + (module kbd:ResetSW (layer F.Cu) (tedit 5B9559E6) (tstamp 61905781) + + (descr "Two pin through hole Tactile Switch, the same as on the Corne") + (tags "Tactile Switch") + + ${p.at /* parametric position */} + ${'' /* footprint reference */} + (fp_text reference "${p.ref}" (at 0 2.55) (layer F.SilkS) ${p.ref_hide} (effects (font (size 1 1) (thickness 0.15)))) + (fp_text value "" (at 0 -2.55) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15)))) + + ${'' /* outline */} + (fp_text user RESET (at 0 0 ${p.rot}) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15)))) + (fp_text user RESET (at 0.127 0 ${p.rot}) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror))) + + (fp_line (start 3 1.5) (end 3 1.75) (layer B.SilkS) (width 0.15)) + (fp_line (start 3 1.75) (end -3 1.75) (layer B.SilkS) (width 0.15)) + (fp_line (start -3 1.75) (end -3 1.5) (layer B.SilkS) (width 0.15)) + (fp_line (start -3 -1.5) (end -3 -1.75) (layer B.SilkS) (width 0.15)) + (fp_line (start -3 -1.75) (end 3 -1.75) (layer B.SilkS) (width 0.15)) + (fp_line (start 3 -1.75) (end 3 -1.5) (layer B.SilkS) (width 0.15)) + (fp_line (start -3 1.75) (end 3 1.75) (layer F.SilkS) (width 0.15)) + (fp_line (start 3 1.75) (end 3 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -3 1.75) (end -3 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -3 -1.75) (end -3 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -3 -1.75) (end 3 -1.75) (layer F.SilkS) (width 0.15)) + (fp_line (start 3 -1.75) (end 3 -1.5) (layer F.SilkS) (width 0.15)) + + ${'' /* pins */} + (pad 2 thru_hole circle (at -3.25 0 ${p.rot}) (size 2 2) (drill 1.3) (layers *.Cu *.Mask F.SilkS) ${p.from.str}) + (pad 1 thru_hole circle (at 3.25 0 ${p.rot}) (size 2 2) (drill 1.3) (layers *.Cu *.Mask F.SilkS) ${p.to.str}) + ) + ` + } +} diff --git a/footprints/slider_threeway.js b/footprints/slider_threeway.js new file mode 100644 index 0000000..9043bf4 --- /dev/null +++ b/footprints/slider_threeway.js @@ -0,0 +1,55 @@ +module.exports = { + params: { + designator: 'T', // for Toggle + side: 'F', + from: undefined, + left: undefined, + right: undefined + }, + body: p => { + + const left = p.side == 'F' ? '-' : '' + const right = p.side == 'F' ? '' : '-' + + return ` + + (module E73:SPDT_C128955 (layer F.Cu) (tstamp 5BF2CC3C) + + ${p.at /* parametric position */} + + ${'' /* footprint reference */} + (fp_text reference "${p.ref}" (at 0 0) (layer F.SilkS) ${p.ref_hide} (effects (font (size 1.27 1.27) (thickness 0.15)))) + (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15)))) + + ${'' /* outline */} + (fp_line (start 1.95 -1.35) (end -1.95 -1.35) (layer ${p.side}.SilkS) (width 0.15)) + (fp_line (start 0 -1.35) (end -3.3 -1.35) (layer ${p.side}.SilkS) (width 0.15)) + (fp_line (start -3.3 -1.35) (end -3.3 1.5) (layer ${p.side}.SilkS) (width 0.15)) + (fp_line (start -3.3 1.5) (end 3.3 1.5) (layer ${p.side}.SilkS) (width 0.15)) + (fp_line (start 3.3 1.5) (end 3.3 -1.35) (layer ${p.side}.SilkS) (width 0.15)) + (fp_line (start 0 -1.35) (end 3.3 -1.35) (layer ${p.side}.SilkS) (width 0.15)) + + ${'' /* extra indicator for the slider */} + (fp_line (start -1.95 -3.85) (end 1.95 -3.85) (layer Dwgs.User) (width 0.15)) + (fp_line (start 1.95 -3.85) (end 1.95 -1.35) (layer Dwgs.User) (width 0.15)) + (fp_line (start -1.95 -1.35) (end -1.95 -3.85) (layer Dwgs.User) (width 0.15)) + + ${'' /* bottom cutouts */} + (pad "" np_thru_hole circle (at 1.5 0) (size 1 1) (drill 0.9) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -1.5 0) (size 1 1) (drill 0.9) (layers *.Cu *.Mask)) + + ${'' /* pins */} + (pad 1 smd rect (at ${right}2.25 2.075 ${p.rot}) (size 0.9 1.25) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.right.str}) + (pad 2 smd rect (at ${left}0.75 2.075 ${p.rot}) (size 0.9 1.25) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.from.str}) + (pad 3 smd rect (at ${left}2.25 2.075 ${p.rot}) (size 0.9 1.25) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.left.str}) + + ${'' /* side mounts */} + (pad "" smd rect (at 3.7 -1.1 ${p.rot}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)) + (pad "" smd rect (at 3.7 1.1 ${p.rot}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)) + (pad "" smd rect (at -3.7 1.1 ${p.rot}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)) + (pad "" smd rect (at -3.7 -1.1 ${p.rot}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)) + ) + + ` + } +} diff --git a/footprints/text.js b/footprints/text.js new file mode 100644 index 0000000..2194fce --- /dev/null +++ b/footprints/text.js @@ -0,0 +1,22 @@ +module.exports = { + params: { + layer: "F.SilkS", + text: "", + h_size: 1, + v_size: 1, + thickness: 0.15, + justify: "", + }, + body: (p) => { + let justify = ""; + if (p.justify != "") { + justify = `(justify ${p.justify})`; + } + + return ` + (gr_text "${p.text}" ${p.at} (layer ${p.layer}) + (effects (font (size ${p.h_size} ${p.v_size}) (thickness ${p.thickness})) ${justify}) + ) + `; + }, +}; diff --git a/footprints/trrs_tight.js b/footprints/trrs_tight.js new file mode 100644 index 0000000..f7eb3d6 --- /dev/null +++ b/footprints/trrs_tight.js @@ -0,0 +1,103 @@ +// TRRS-PJ-320A-dual +// +// Normal footprint: +// _________________ +// | (2) (3) (4)| +// | | +// | (1) | +// |________________| +// +// Reverse footprint: +// _________________ +// | (2) (3) (4)| +// | (1) | +// | (1) | +// |___(2)___(3)_(4)| +// +// Reverse & symmetric footprint: +// _________________ +// | (1|2) (3) (4)| +// | | +// |_(1|2)___(3)_(4)| +// +// Nets +// A: corresponds to pin 1 +// B: corresponds to pin 2 +// C: corresponds to pin 3 +// D: corresponds to pin 4 +// Params +// reverse: default is false +// if true, will flip the footprint such that the pcb can be reversible +// symmetric: default is false +// if true, will only work if reverse is also true +// this will cause the footprint to be symmetrical on each half +// pins 1 and 2 must be identical if symmetric is true, as they will overlap + +module.exports = { + params: { + designator: 'TRRS', + reverse: false, + symmetric: false, + A: undefined, + B: undefined, + C: undefined, + D: undefined + }, + body: p => { + const standard = ` + (module TRRS-PJ-320A-dual (layer F.Cu) (tedit 5970F8E5) + + ${p.at /* parametric position */} + + ${'' /* footprint reference */} + (fp_text reference "${p.ref}" (at 0 14.2) (layer Dwgs.User) (effects (font (size 1 1) (thickness 0.15)))) + (fp_text value TRRS-PJ-320A-dual (at 0 -5.6) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15)))) + + ${''/* corner marks */} + (fp_line (start 0.5 -2) (end -5.1 -2) (layer Dwgs.User) (width 0.15)) + (fp_line (start -5.1 0) (end -5.1 -2) (layer Dwgs.User) (width 0.15)) + (fp_line (start 0.5 0) (end 0.5 -2) (layer Dwgs.User) (width 0.15)) + (fp_line (start -5.35 0) (end -5.35 12.1) (layer Dwgs.User) (width 0.15)) + (fp_line (start 0.75 0) (end 0.75 12.1) (layer Dwgs.User) (width 0.15)) + (fp_line (start 0.75 12.1) (end -5.35 12.1) (layer Dwgs.User) (width 0.15)) + (fp_line (start 0.75 0) (end -5.35 0) (layer Dwgs.User) (width 0.15)) + + ` + function stabilizers(def_pos) { + return ` + (pad "" np_thru_hole circle (at ${def_pos} 8.6) (size 1.2 1.2) (drill 1.2) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at ${def_pos} 1.6) (size 1.2 1.2) (drill 1.2) (layers *.Cu *.Mask)) + ` + } + function pins(def_neg, def_pos) { + return ` + (pad 1 thru_hole oval (at ${def_neg} 11.3 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.A.str}) + (pad 2 thru_hole oval (at ${def_pos} 10.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.B.str}) + (pad 3 thru_hole oval (at ${def_pos} 6.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.C.str}) + (pad 4 thru_hole oval (at ${def_pos} 3.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.D.str}) + ` + } + if(p.reverse & p.symmetric) { + return ` + ${standard} + ${stabilizers('-2.3')} + ${pins('0', '-4.6')} + ${pins('-4.6', '0')}) + ` + } else if(p.reverse) { + return ` + ${standard} + ${stabilizers('-2.3')} + ${stabilizers('0')} + ${pins('-2.3', '2.3')} + ${pins('0', '-4.6')}) + ` + } else { + return ` + ${standard} + ${stabilizers('-2.3')} + ${pins('-4.6', '0')}) + ` + } + } +} diff --git a/package-lock.json b/package-lock.json index 58a3073..c93fd26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1437 +1,946 @@ { - "name": "samoklava", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "dependencies": { - "ergogen": "github:soundmonster/ergogen#samoklava" - } - }, - "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@danmarshall/jscad-typings": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@danmarshall/jscad-typings/-/jscad-typings-1.0.0.tgz", - "integrity": "sha512-MGGIGDItK2UQSsz7yTrXErQXDAFXR3UPxyQ7WZ5RHOwnv60CBXjmkJlXYMYPkSvo+7fUuQL2/ODcvECtc/fi9g==" - }, - "node_modules/@jscad/csg": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jscad/csg/-/csg-0.3.6.tgz", - "integrity": "sha512-GoUXhTwO0L+Cxba8VfFFLGm+ECd0xZKoIAPpeUYsDiCVsIZ6XK+3GLgBgn5waeumQNh+H6WsHjMMRKXBrDBreA==", - "deprecated": "See @jscad/modeling" - }, - "node_modules/@jscad/dxf-serializer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@jscad/dxf-serializer/-/dxf-serializer-0.0.4.tgz", - "integrity": "sha512-/d3192aL8WAWX7KU5MRc61y7n9ZIzPik/F+d+rCtb7uxMmhzt7j5mcno4CDwSrfeIrzK8U+8Pyrdq13QkHOaLA==" - }, - "node_modules/@jscad/gcode-deserializer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@jscad/gcode-deserializer/-/gcode-deserializer-0.0.4.tgz", - "integrity": "sha512-RielAllRKm2oz+lG0On0aOeB2+qI7/lbzc/kQPzcBeObnqyuJKyHMVeFHDQ18o9Zjyrkv4g2QA6FDcVTbrmr0Q==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." - }, - "node_modules/@jscad/io": { - "version": "0.3.7", - "resolved": "git+ssh://git@github.com/ergogen/oldjscadio.git#692cf142062208b0097b2d4852c30d6cc51eea8d", - "license": "MIT", - "dependencies": { - "@jscad/dxf-serializer": "^0.0.4", - "@jscad/gcode-deserializer": "^0.0.4", - "@jscad/io-utils": "^0.1.2", - "@jscad/json-deserializer": "^0.0.4", - "@jscad/json-serializer": "^0.0.5", - "@jscad/obj-deserializer": "^0.0.4", - "@jscad/stl-deserializer": "^0.1.2", - "@jscad/stl-serializer": "^0.0.6", - "@jscad/svg-deserializer": "^0.2.3", - "@jscad/svg-serializer": "^0.0.4" - } - }, - "node_modules/@jscad/io-utils": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@jscad/io-utils/-/io-utils-0.1.3.tgz", - "integrity": "sha512-aCVUZovewI4njtEJ1fvjhasqd8EHIzQaPb88MtFWf/ff1NdGOu/vRH3yGG8vu0NZektGEDCKp028g2nTBL7aFg==" - }, - "node_modules/@jscad/json-deserializer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@jscad/json-deserializer/-/json-deserializer-0.0.4.tgz", - "integrity": "sha512-Z0lm1kTrJzA6Irv+TQmX4q2MWl97rLU2H9LDdC5y9utsO1J47Krllta2DJECWj7KfYcbf/je3kRZ2CQ7dHvaBA==", - "dependencies": { - "@jscad/csg": "0.3.6" - } - }, - "node_modules/@jscad/json-serializer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@jscad/json-serializer/-/json-serializer-0.0.5.tgz", - "integrity": "sha512-xQCBwjyRuEXolIRiCIZEf7k/FDERFTzyt1amY12u4ZWULY4QWU4d4fY5KaSkaZkBdkXE/leh0AylR0Q6mUwBKA==", - "dependencies": { - "@jscad/csg": "0.3.6", - "@jscad/io-utils": "^0.1.2" - } - }, - "node_modules/@jscad/obj-deserializer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@jscad/obj-deserializer/-/obj-deserializer-0.0.4.tgz", - "integrity": "sha512-uD57ahy1DfW9siy/nbwA4hAO5nE/gt/ZJoTbUfso3DnfwwqUbM42lw/AYAcFYw8Ab2U2GybDulKTPT3lr+eJdA==" - }, - "node_modules/@jscad/openjscad": { - "version": "1.6.1", - "resolved": "git+ssh://git@github.com/ergogen/oldjscad.git#040637f3d8d4da0ad0a9ffdfe1a33a791c8008f4", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@jscad/csg": "0.3.6", - "@jscad/io": "github:ergogen/oldjscadio", - "@jscad/openscad-openjscad-translator": "0.0.10", - "@jscad/scad-api": "^0.5.1", - "astring": "^1.0.2", - "brace": "0.10.0", - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "most-gestures": "^0.3.0", - "webworkify": "^1.4.0" - }, - "bin": { - "openjscad": "src/cli/cli.js" - } - }, - "node_modules/@jscad/openscad-openjscad-translator": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@jscad/openscad-openjscad-translator/-/openscad-openjscad-translator-0.0.10.tgz", - "integrity": "sha512-gw4iD8qVDm7Qb0PFYuwP4yYMU90wOQ0992WBLwqQSaLdKET0c2UlVJUu1jM5GUzxVEyJwm2ZbS1/c+JwOdTc6Q==", - "deprecated": "See @jscad/scad-deserializer", - "dependencies": { - "lodash": "^4.17.4", - "sylvester": "github:kaosat-dev/node-sylvester" - } - }, - "node_modules/@jscad/scad-api": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@jscad/scad-api/-/scad-api-0.5.1.tgz", - "integrity": "sha512-1BlfqcAf0xIicbaKU1bCOxHh0+aHJ7fBRY6r+7/e+0uMrfoqHoULGqkAZCwnftt0cPj5uAP8JSlyOinHKaFIJw==", - "deprecated": "See @jscad/modeling", - "dependencies": { - "@jscad/csg": "0.3.7" - } - }, - "node_modules/@jscad/scad-api/node_modules/@jscad/csg": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@jscad/csg/-/csg-0.3.7.tgz", - "integrity": "sha512-CuqKgXEZDH1FzbwQTdMWQ0FiEGi+LrP32tP6nW6rdWEEBjL6w19F3OrShD7SP8mK9IcqiuhgN9JcbWaiBswWlQ==", - "deprecated": "See @jscad/modeling" - }, - "node_modules/@jscad/stl-deserializer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@jscad/stl-deserializer/-/stl-deserializer-0.1.2.tgz", - "integrity": "sha512-2HpFv0G0TfV1v2psHvnx/PAOZ7iYmqp0REnOT/pQ9T5LRkdHrI1uvgzT4VHp9lOdK6vD5jO9uwRyj8dFWQhLYw==", - "dependencies": { - "@jscad/csg": "0.3.6", - "@jscad/io-utils": "^0.1.2" - } - }, - "node_modules/@jscad/stl-serializer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@jscad/stl-serializer/-/stl-serializer-0.0.6.tgz", - "integrity": "sha512-yf47E+rCtE3sdoMIIVeOGmB/gaQzrgN2JhFsYa4pEVcbh7RnUJauegFyacbGIEAxAYC8Ck7f5DU0mc/JbIjFhQ==", - "dependencies": { - "@jscad/io-utils": "^0.1.2" - } - }, - "node_modules/@jscad/svg-deserializer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@jscad/svg-deserializer/-/svg-deserializer-0.2.3.tgz", - "integrity": "sha512-i/LVaOCKkn5CdncoQFUhq9HPZOd9diupknlDBRmllLiuP2zzZLowz7a3mxF1hkVkwOx45WD02JPPkKUSBzz6tQ==", - "dependencies": { - "@jscad/csg": "0.3.6", - "sax": "1.2.4" - } - }, - "node_modules/@jscad/svg-serializer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@jscad/svg-serializer/-/svg-serializer-0.0.4.tgz", - "integrity": "sha512-vXyxOVpVmlO7oeshbtCVwU42Mqz350o4/r0ToP9XtG2gv7F/e9GcpCaM9XIgyeeu8cQQGTcbfjGb1t9MFlPrOg==", - "dependencies": { - "@jscad/csg": "0.3.6" - } - }, - "node_modules/@most/multicast": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@most/multicast/-/multicast-1.3.0.tgz", - "integrity": "sha512-DWH8AShgp5bXn+auGzf5tzPxvpmEvQJd0CNsApOci1LDF4eAEcnw4HQOr2Jaa+L92NbDYFKBSXxll+i7r1ikvw==", - "dependencies": { - "@most/prelude": "^1.4.0" - }, - "peerDependencies": { - "most": "^1.0.1" - } - }, - "node_modules/@most/prelude": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@most/prelude/-/prelude-1.8.0.tgz", - "integrity": "sha512-t1CcURpZzfmBA6fEWwqmCqeNzWAj1w2WqEmCk/2yXMe/p8Ut000wFmVKMy8A1Rl9VVxZEZ5nBHd/pU0dR4bv/w==" - }, - "node_modules/@types/bezier-js": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/bezier-js/-/bezier-js-0.0.6.tgz", - "integrity": "sha512-kXsAlt8e8N6zt9R6LcMYWB1HkBw3q2g+M9BdI/UE+s4agIONuIscQaRCoInH22+Jas3rw8yLUehL2InaZjyNSA==" - }, - "node_modules/@types/node": { - "version": "7.10.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.14.tgz", - "integrity": "sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA==" - }, - "node_modules/@types/opentype.js": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@types/opentype.js/-/opentype.js-0.7.2.tgz", - "integrity": "sha512-Riz6WyBUBEFs7YqSsJya3SbDHJZ6BmMkY7bzNoue6rtwj+RNilLc+mgOX/eJ0Y0asq16FSU6DatBeOg8ZMy2UQ==" - }, - "node_modules/@types/pdfkit": { - "version": "0.7.36", - "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.7.36.tgz", - "integrity": "sha512-9eRA6MuW+n78yU3HhoIrDxjyAX2++B5MpLDYqHOnaRTquCw+5sYXT+QN8E1eSaxvNUwlRfU3tOm4UzTeGWmBqg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/astring": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.3.tgz", - "integrity": "sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==", - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/bezier-js": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.6.1.tgz", - "integrity": "sha512-jelZM33eNzcZ9snJ/5HqJLw3IzXvA8RFcBjkdOB8SDYyOvW8Y2tTosojAiBTnD1MhbHoWUYNbxUXxBl61TxbRg==" - }, - "node_modules/brace": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/brace/-/brace-0.10.0.tgz", - "integrity": "sha512-C0nbmcNIY2nRtA3hY5NNmZuNZDs4X676WHf+xiFw0NXUQIdSCkIgZHkztqtSOmC0BGjvBR2DNO9USiZMY+Qx6w==", - "dependencies": { - "w3c-blob": "0.0.1" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/complex.js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", - "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/decimal.js": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", - "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==" - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/ergogen": { - "version": "3.1.0", - "resolved": "git+ssh://git@github.com/soundmonster/ergogen.git#7946fbe9b8e7b82e0259da5cbfda1a0de7dc1b57", - "license": "MIT", - "dependencies": { - "@jscad/openjscad": "github:ergogen/oldjscad", - "fs-extra": "^10.0.0", - "js-yaml": "^3.14.0", - "kle-serial": "github:ergogen/kle-serial#ergogen", - "makerjs": "github:ergogen/maker.js#ergogen", - "mathjs": "^10.0.0", - "semver": "^7.3.5", - "yargs": "^17.3.0" - }, - "bin": { - "ergogen": "src/cli.js" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-latex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" - }, - "node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/graham_scan": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/graham_scan/-/graham_scan-1.0.4.tgz", - "integrity": "sha512-jL+zq9xTYXxsDIf+qy9aaudRXx/X4sqrOlbFkg1ElqCznhYAQ/wXv8cifgzRvzFopStDeIvny5sIu6jgSjnRww==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kdbush": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-2.0.1.tgz", - "integrity": "sha512-9KqSdmWCkBIisFIGclT0FRagKhI7IVbMyUjsxCFG0Ly1Dg6whlxJ7b9lrq8ifk3X/fGeJzok1R75LQfZTfA5zQ==" - }, - "node_modules/kle-serial": { - "name": "@ijprest/kle-serial", - "version": "0.15.1", - "resolved": "git+ssh://git@github.com/ergogen/kle-serial.git#61f29f317d87bbfed0b0b7e646e1b91d4384ac02", - "license": "MIT", - "dependencies": { - "json5": "^2.1.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/makerjs": { - "version": "0.17.0", - "resolved": "git+ssh://git@github.com/ergogen/maker.js.git#a0ca32948845efe8ad5c9ca454f1285926853138", - "license": "Apache-2.0", - "dependencies": { - "@danmarshall/jscad-typings": "^1.0.0", - "@types/bezier-js": "^0.0.6", - "@types/node": "^7.0.5", - "@types/opentype.js": "^0.7.0", - "@types/pdfkit": "^0.7.34", - "bezier-js": "^2.1.0", - "clone": "^1.0.2", - "graham_scan": "^1.0.4", - "kdbush": "^2.0.1" - } - }, - "node_modules/mathjs": { - "version": "10.6.4", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.6.4.tgz", - "integrity": "sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA==", - "dependencies": { - "@babel/runtime": "^7.18.6", - "complex.js": "^2.1.1", - "decimal.js": "^10.3.1", - "escape-latex": "^1.2.0", - "fraction.js": "^4.2.0", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^2.1.0" - }, - "bin": { - "mathjs": "bin/cli.js" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/most": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/most/-/most-1.9.0.tgz", - "integrity": "sha512-M7yHMcMGaclzEL6eg8Yh8PlAsaWfL/oSThF4+ZuWKM5CKXcbzmLh+qESwgZFzMKHJ+iVJwb28yFvDEOobI653w==", - "dependencies": { - "@most/multicast": "^1.2.5", - "@most/prelude": "^1.4.0", - "globalthis": "^1.0.1", - "symbol-observable": "^2.0.3" - } - }, - "node_modules/most-gestures": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/most-gestures/-/most-gestures-0.3.0.tgz", - "integrity": "sha512-v57B+eOZ5XVDRUyN8KHcVpeuert8qW6xdVCBfld0mglBJb6Jf3U5hualvTlBODGsai1v5O9jxengsQCq3Lxdkg==", - "dependencies": { - "most": "^1.7.2" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sylvester": { - "name": "@kaosat-dev/sylvester", - "version": "0.0.21", - "resolved": "git+ssh://git@github.com/kaosat-dev/node-sylvester.git#ce74d23a2092ae02a56b840ef70f5d61c54df409", - "license": "MIT", - "engines": { - "node": ">=0.2.6" - } - }, - "node_modules/symbol-observable": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", - "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "node_modules/typed-function": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.1.0.tgz", - "integrity": "sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/w3c-blob": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/w3c-blob/-/w3c-blob-0.0.1.tgz", - "integrity": "sha512-fKfmCyRd0A/tSLt0zPR2716jAkoysa4+2nA2ip6ytr6fs1I9Tml2aXb28w8ljUjUutT23Zn7Vyc2GQM5w3rtWA==" - }, - "node_modules/webworkify": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/webworkify/-/webworkify-1.5.0.tgz", - "integrity": "sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - } + "name": "samoklava", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "ergogen": "github:ergogen/ergogen#v4.0.4" + } }, - "dependencies": { - "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@danmarshall/jscad-typings": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@danmarshall/jscad-typings/-/jscad-typings-1.0.0.tgz", - "integrity": "sha512-MGGIGDItK2UQSsz7yTrXErQXDAFXR3UPxyQ7WZ5RHOwnv60CBXjmkJlXYMYPkSvo+7fUuQL2/ODcvECtc/fi9g==" - }, - "@jscad/csg": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jscad/csg/-/csg-0.3.6.tgz", - "integrity": "sha512-GoUXhTwO0L+Cxba8VfFFLGm+ECd0xZKoIAPpeUYsDiCVsIZ6XK+3GLgBgn5waeumQNh+H6WsHjMMRKXBrDBreA==" - }, - "@jscad/dxf-serializer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@jscad/dxf-serializer/-/dxf-serializer-0.0.4.tgz", - "integrity": "sha512-/d3192aL8WAWX7KU5MRc61y7n9ZIzPik/F+d+rCtb7uxMmhzt7j5mcno4CDwSrfeIrzK8U+8Pyrdq13QkHOaLA==" - }, - "@jscad/gcode-deserializer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@jscad/gcode-deserializer/-/gcode-deserializer-0.0.4.tgz", - "integrity": "sha512-RielAllRKm2oz+lG0On0aOeB2+qI7/lbzc/kQPzcBeObnqyuJKyHMVeFHDQ18o9Zjyrkv4g2QA6FDcVTbrmr0Q==" - }, - "@jscad/io": { - "version": "git+ssh://git@github.com/ergogen/oldjscadio.git#692cf142062208b0097b2d4852c30d6cc51eea8d", - "from": "@jscad/io@github:ergogen/oldjscadio", - "requires": { - "@jscad/dxf-serializer": "^0.0.4", - "@jscad/gcode-deserializer": "^0.0.4", - "@jscad/io-utils": "^0.1.2", - "@jscad/json-deserializer": "^0.0.4", - "@jscad/json-serializer": "^0.0.5", - "@jscad/obj-deserializer": "^0.0.4", - "@jscad/stl-deserializer": "^0.1.2", - "@jscad/stl-serializer": "^0.0.6", - "@jscad/svg-deserializer": "^0.2.3", - "@jscad/svg-serializer": "^0.0.4" - } - }, - "@jscad/io-utils": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@jscad/io-utils/-/io-utils-0.1.3.tgz", - "integrity": "sha512-aCVUZovewI4njtEJ1fvjhasqd8EHIzQaPb88MtFWf/ff1NdGOu/vRH3yGG8vu0NZektGEDCKp028g2nTBL7aFg==" - }, - "@jscad/json-deserializer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@jscad/json-deserializer/-/json-deserializer-0.0.4.tgz", - "integrity": "sha512-Z0lm1kTrJzA6Irv+TQmX4q2MWl97rLU2H9LDdC5y9utsO1J47Krllta2DJECWj7KfYcbf/je3kRZ2CQ7dHvaBA==", - "requires": { - "@jscad/csg": "0.3.6" - } - }, - "@jscad/json-serializer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@jscad/json-serializer/-/json-serializer-0.0.5.tgz", - "integrity": "sha512-xQCBwjyRuEXolIRiCIZEf7k/FDERFTzyt1amY12u4ZWULY4QWU4d4fY5KaSkaZkBdkXE/leh0AylR0Q6mUwBKA==", - "requires": { - "@jscad/csg": "0.3.6", - "@jscad/io-utils": "^0.1.2" - } - }, - "@jscad/obj-deserializer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@jscad/obj-deserializer/-/obj-deserializer-0.0.4.tgz", - "integrity": "sha512-uD57ahy1DfW9siy/nbwA4hAO5nE/gt/ZJoTbUfso3DnfwwqUbM42lw/AYAcFYw8Ab2U2GybDulKTPT3lr+eJdA==" - }, - "@jscad/openjscad": { - "version": "git+ssh://git@github.com/ergogen/oldjscad.git#040637f3d8d4da0ad0a9ffdfe1a33a791c8008f4", - "from": "@jscad/openjscad@github:ergogen/oldjscad", - "requires": { - "@jscad/csg": "0.3.6", - "@jscad/io": "github:ergogen/oldjscadio", - "@jscad/openscad-openjscad-translator": "0.0.10", - "@jscad/scad-api": "^0.5.1", - "astring": "^1.0.2", - "brace": "0.10.0", - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "most-gestures": "^0.3.0", - "webworkify": "^1.4.0" - } - }, - "@jscad/openscad-openjscad-translator": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@jscad/openscad-openjscad-translator/-/openscad-openjscad-translator-0.0.10.tgz", - "integrity": "sha512-gw4iD8qVDm7Qb0PFYuwP4yYMU90wOQ0992WBLwqQSaLdKET0c2UlVJUu1jM5GUzxVEyJwm2ZbS1/c+JwOdTc6Q==", - "requires": { - "lodash": "^4.17.4", - "sylvester": "github:kaosat-dev/node-sylvester" - } - }, - "@jscad/scad-api": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@jscad/scad-api/-/scad-api-0.5.1.tgz", - "integrity": "sha512-1BlfqcAf0xIicbaKU1bCOxHh0+aHJ7fBRY6r+7/e+0uMrfoqHoULGqkAZCwnftt0cPj5uAP8JSlyOinHKaFIJw==", - "requires": { - "@jscad/csg": "0.3.7" - }, - "dependencies": { - "@jscad/csg": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@jscad/csg/-/csg-0.3.7.tgz", - "integrity": "sha512-CuqKgXEZDH1FzbwQTdMWQ0FiEGi+LrP32tP6nW6rdWEEBjL6w19F3OrShD7SP8mK9IcqiuhgN9JcbWaiBswWlQ==" - } - } - }, - "@jscad/stl-deserializer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@jscad/stl-deserializer/-/stl-deserializer-0.1.2.tgz", - "integrity": "sha512-2HpFv0G0TfV1v2psHvnx/PAOZ7iYmqp0REnOT/pQ9T5LRkdHrI1uvgzT4VHp9lOdK6vD5jO9uwRyj8dFWQhLYw==", - "requires": { - "@jscad/csg": "0.3.6", - "@jscad/io-utils": "^0.1.2" - } - }, - "@jscad/stl-serializer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@jscad/stl-serializer/-/stl-serializer-0.0.6.tgz", - "integrity": "sha512-yf47E+rCtE3sdoMIIVeOGmB/gaQzrgN2JhFsYa4pEVcbh7RnUJauegFyacbGIEAxAYC8Ck7f5DU0mc/JbIjFhQ==", - "requires": { - "@jscad/io-utils": "^0.1.2" - } - }, - "@jscad/svg-deserializer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@jscad/svg-deserializer/-/svg-deserializer-0.2.3.tgz", - "integrity": "sha512-i/LVaOCKkn5CdncoQFUhq9HPZOd9diupknlDBRmllLiuP2zzZLowz7a3mxF1hkVkwOx45WD02JPPkKUSBzz6tQ==", - "requires": { - "@jscad/csg": "0.3.6", - "sax": "1.2.4" - } - }, - "@jscad/svg-serializer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@jscad/svg-serializer/-/svg-serializer-0.0.4.tgz", - "integrity": "sha512-vXyxOVpVmlO7oeshbtCVwU42Mqz350o4/r0ToP9XtG2gv7F/e9GcpCaM9XIgyeeu8cQQGTcbfjGb1t9MFlPrOg==", - "requires": { - "@jscad/csg": "0.3.6" - } - }, - "@most/multicast": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@most/multicast/-/multicast-1.3.0.tgz", - "integrity": "sha512-DWH8AShgp5bXn+auGzf5tzPxvpmEvQJd0CNsApOci1LDF4eAEcnw4HQOr2Jaa+L92NbDYFKBSXxll+i7r1ikvw==", - "requires": { - "@most/prelude": "^1.4.0" - } - }, - "@most/prelude": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@most/prelude/-/prelude-1.8.0.tgz", - "integrity": "sha512-t1CcURpZzfmBA6fEWwqmCqeNzWAj1w2WqEmCk/2yXMe/p8Ut000wFmVKMy8A1Rl9VVxZEZ5nBHd/pU0dR4bv/w==" - }, - "@types/bezier-js": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/bezier-js/-/bezier-js-0.0.6.tgz", - "integrity": "sha512-kXsAlt8e8N6zt9R6LcMYWB1HkBw3q2g+M9BdI/UE+s4agIONuIscQaRCoInH22+Jas3rw8yLUehL2InaZjyNSA==" - }, - "@types/node": { - "version": "7.10.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.14.tgz", - "integrity": "sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA==" - }, - "@types/opentype.js": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@types/opentype.js/-/opentype.js-0.7.2.tgz", - "integrity": "sha512-Riz6WyBUBEFs7YqSsJya3SbDHJZ6BmMkY7bzNoue6rtwj+RNilLc+mgOX/eJ0Y0asq16FSU6DatBeOg8ZMy2UQ==" - }, - "@types/pdfkit": { - "version": "0.7.36", - "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.7.36.tgz", - "integrity": "sha512-9eRA6MuW+n78yU3HhoIrDxjyAX2++B5MpLDYqHOnaRTquCw+5sYXT+QN8E1eSaxvNUwlRfU3tOm4UzTeGWmBqg==", - "requires": { - "@types/node": "*" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "astring": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.3.tgz", - "integrity": "sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==" - }, - "bezier-js": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.6.1.tgz", - "integrity": "sha512-jelZM33eNzcZ9snJ/5HqJLw3IzXvA8RFcBjkdOB8SDYyOvW8Y2tTosojAiBTnD1MhbHoWUYNbxUXxBl61TxbRg==" - }, - "brace": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/brace/-/brace-0.10.0.tgz", - "integrity": "sha512-C0nbmcNIY2nRtA3hY5NNmZuNZDs4X676WHf+xiFw0NXUQIdSCkIgZHkztqtSOmC0BGjvBR2DNO9USiZMY+Qx6w==", - "requires": { - "w3c-blob": "0.0.1" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "complex.js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", - "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==" - }, - "decimal.js": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", - "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==" - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "ergogen": { - "version": "git+ssh://git@github.com/soundmonster/ergogen.git#7946fbe9b8e7b82e0259da5cbfda1a0de7dc1b57", - "from": "ergogen@github:soundmonster/ergogen#samoklava", - "requires": { - "@jscad/openjscad": "github:ergogen/oldjscad", - "fs-extra": "^10.0.0", - "js-yaml": "^3.14.0", - "kle-serial": "github:ergogen/kle-serial#ergogen", - "makerjs": "github:ergogen/maker.js#ergogen", - "mathjs": "^10.0.0", - "semver": "^7.3.5", - "yargs": "^17.3.0" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-latex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "requires": { - "define-properties": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "graham_scan": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/graham_scan/-/graham_scan-1.0.4.tgz", - "integrity": "sha512-jL+zq9xTYXxsDIf+qy9aaudRXx/X4sqrOlbFkg1ElqCznhYAQ/wXv8cifgzRvzFopStDeIvny5sIu6jgSjnRww==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } - } - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "kdbush": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-2.0.1.tgz", - "integrity": "sha512-9KqSdmWCkBIisFIGclT0FRagKhI7IVbMyUjsxCFG0Ly1Dg6whlxJ7b9lrq8ifk3X/fGeJzok1R75LQfZTfA5zQ==" - }, - "kle-serial": { - "version": "git+ssh://git@github.com/ergogen/kle-serial.git#61f29f317d87bbfed0b0b7e646e1b91d4384ac02", - "from": "kle-serial@github:ergogen/kle-serial#ergogen", - "requires": { - "json5": "^2.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "makerjs": { - "version": "git+ssh://git@github.com/ergogen/maker.js.git#a0ca32948845efe8ad5c9ca454f1285926853138", - "from": "makerjs@github:ergogen/maker.js#ergogen", - "requires": { - "@danmarshall/jscad-typings": "^1.0.0", - "@types/bezier-js": "^0.0.6", - "@types/node": "^7.0.5", - "@types/opentype.js": "^0.7.0", - "@types/pdfkit": "^0.7.34", - "bezier-js": "^2.1.0", - "clone": "^1.0.2", - "graham_scan": "^1.0.4", - "kdbush": "^2.0.1" - } - }, - "mathjs": { - "version": "10.6.4", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.6.4.tgz", - "integrity": "sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA==", - "requires": { - "@babel/runtime": "^7.18.6", - "complex.js": "^2.1.1", - "decimal.js": "^10.3.1", - "escape-latex": "^1.2.0", - "fraction.js": "^4.2.0", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^2.1.0" - } - }, - "most": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/most/-/most-1.9.0.tgz", - "integrity": "sha512-M7yHMcMGaclzEL6eg8Yh8PlAsaWfL/oSThF4+ZuWKM5CKXcbzmLh+qESwgZFzMKHJ+iVJwb28yFvDEOobI653w==", - "requires": { - "@most/multicast": "^1.2.5", - "@most/prelude": "^1.4.0", - "globalthis": "^1.0.1", - "symbol-observable": "^2.0.3" - } - }, - "most-gestures": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/most-gestures/-/most-gestures-0.3.0.tgz", - "integrity": "sha512-v57B+eOZ5XVDRUyN8KHcVpeuert8qW6xdVCBfld0mglBJb6Jf3U5hualvTlBODGsai1v5O9jxengsQCq3Lxdkg==", - "requires": { - "most": "^1.7.2" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "sylvester": { - "version": "git+ssh://git@github.com/kaosat-dev/node-sylvester.git#ce74d23a2092ae02a56b840ef70f5d61c54df409", - "from": "sylvester@github:kaosat-dev/node-sylvester" - }, - "symbol-observable": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", - "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==" - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "typed-function": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.1.0.tgz", - "integrity": "sha512-bctQIOqx2iVbWGDGPWwIm18QScpu2XRmkC19D8rQGFsjKSgteq/o1hTZvIG/wuDq8fanpBDrLkLq+aEN/6y5XQ==" - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "w3c-blob": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/w3c-blob/-/w3c-blob-0.0.1.tgz", - "integrity": "sha512-fKfmCyRd0A/tSLt0zPR2716jAkoysa4+2nA2ip6ytr6fs1I9Tml2aXb28w8ljUjUutT23Zn7Vyc2GQM5w3rtWA==" - }, - "webworkify": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/webworkify/-/webworkify-1.5.0.tgz", - "integrity": "sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } + "node_modules/@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@danmarshall/jscad-typings": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@danmarshall/jscad-typings/-/jscad-typings-1.0.0.tgz", + "integrity": "sha512-MGGIGDItK2UQSsz7yTrXErQXDAFXR3UPxyQ7WZ5RHOwnv60CBXjmkJlXYMYPkSvo+7fUuQL2/ODcvECtc/fi9g==" + }, + "node_modules/@types/bezier-js": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/bezier-js/-/bezier-js-0.0.6.tgz", + "integrity": "sha512-kXsAlt8e8N6zt9R6LcMYWB1HkBw3q2g+M9BdI/UE+s4agIONuIscQaRCoInH22+Jas3rw8yLUehL2InaZjyNSA==" + }, + "node_modules/@types/node": { + "version": "7.10.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.14.tgz", + "integrity": "sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA==" + }, + "node_modules/@types/opentype.js": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@types/opentype.js/-/opentype.js-0.7.2.tgz", + "integrity": "sha512-Riz6WyBUBEFs7YqSsJya3SbDHJZ6BmMkY7bzNoue6rtwj+RNilLc+mgOX/eJ0Y0asq16FSU6DatBeOg8ZMy2UQ==" + }, + "node_modules/@types/pdfkit": { + "version": "0.7.36", + "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.7.36.tgz", + "integrity": "sha512-9eRA6MuW+n78yU3HhoIrDxjyAX2++B5MpLDYqHOnaRTquCw+5sYXT+QN8E1eSaxvNUwlRfU3tOm4UzTeGWmBqg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/bezier-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.6.1.tgz", + "integrity": "sha512-jelZM33eNzcZ9snJ/5HqJLw3IzXvA8RFcBjkdOB8SDYyOvW8Y2tTosojAiBTnD1MhbHoWUYNbxUXxBl61TxbRg==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/complex.js": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", + "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ergogen": { + "version": "4.0.4", + "resolved": "git+ssh://git@github.com/ergogen/ergogen.git#14cd4991820ca605f573b3d45b7147e83ac46b56", + "license": "MIT", + "dependencies": { + "fs-extra": "^11.1.0", + "js-yaml": "^3.14.1", + "jszip": "^3.10.1", + "kle-serial": "github:ergogen/kle-serial#ergogen", + "makerjs": "github:ergogen/maker.js#ergogen", + "mathjs": "^11.5.0", + "yargs": "^17.6.2" + }, + "bin": { + "ergogen": "src/cli.js" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graham_scan": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/graham_scan/-/graham_scan-1.0.4.tgz", + "integrity": "sha512-jL+zq9xTYXxsDIf+qy9aaudRXx/X4sqrOlbFkg1ElqCznhYAQ/wXv8cifgzRvzFopStDeIvny5sIu6jgSjnRww==" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/kdbush": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-2.0.1.tgz", + "integrity": "sha512-9KqSdmWCkBIisFIGclT0FRagKhI7IVbMyUjsxCFG0Ly1Dg6whlxJ7b9lrq8ifk3X/fGeJzok1R75LQfZTfA5zQ==" + }, + "node_modules/kle-serial": { + "name": "@ijprest/kle-serial", + "version": "0.15.1", + "resolved": "git+ssh://git@github.com/ergogen/kle-serial.git#61f29f317d87bbfed0b0b7e646e1b91d4384ac02", + "license": "MIT", + "dependencies": { + "json5": "^2.1.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/makerjs": { + "version": "0.17.0", + "resolved": "git+ssh://git@github.com/ergogen/maker.js.git#a0ca32948845efe8ad5c9ca454f1285926853138", + "license": "Apache-2.0", + "dependencies": { + "@danmarshall/jscad-typings": "^1.0.0", + "@types/bezier-js": "^0.0.6", + "@types/node": "^7.0.5", + "@types/opentype.js": "^0.7.0", + "@types/pdfkit": "^0.7.34", + "bezier-js": "^2.1.0", + "clone": "^1.0.2", + "graham_scan": "^1.0.4", + "kdbush": "^2.0.1" + } + }, + "node_modules/mathjs": { + "version": "11.9.1", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.9.1.tgz", + "integrity": "sha512-VdB9ELZ6Dwda13j5d1eCBETmPO8m9qIJETUdfZmTA9cPnXUiIk7UuoAmvxFqtfAe32XYuRugAec2Ndv0/RfRhg==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "^4.2.0", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.0" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/typed-function": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", + "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@danmarshall/jscad-typings": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@danmarshall/jscad-typings/-/jscad-typings-1.0.0.tgz", + "integrity": "sha512-MGGIGDItK2UQSsz7yTrXErQXDAFXR3UPxyQ7WZ5RHOwnv60CBXjmkJlXYMYPkSvo+7fUuQL2/ODcvECtc/fi9g==" + }, + "@types/bezier-js": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/bezier-js/-/bezier-js-0.0.6.tgz", + "integrity": "sha512-kXsAlt8e8N6zt9R6LcMYWB1HkBw3q2g+M9BdI/UE+s4agIONuIscQaRCoInH22+Jas3rw8yLUehL2InaZjyNSA==" + }, + "@types/node": { + "version": "7.10.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.14.tgz", + "integrity": "sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA==" + }, + "@types/opentype.js": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@types/opentype.js/-/opentype.js-0.7.2.tgz", + "integrity": "sha512-Riz6WyBUBEFs7YqSsJya3SbDHJZ6BmMkY7bzNoue6rtwj+RNilLc+mgOX/eJ0Y0asq16FSU6DatBeOg8ZMy2UQ==" + }, + "@types/pdfkit": { + "version": "0.7.36", + "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.7.36.tgz", + "integrity": "sha512-9eRA6MuW+n78yU3HhoIrDxjyAX2++B5MpLDYqHOnaRTquCw+5sYXT+QN8E1eSaxvNUwlRfU3tOm4UzTeGWmBqg==", + "requires": { + "@types/node": "*" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "bezier-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.6.1.tgz", + "integrity": "sha512-jelZM33eNzcZ9snJ/5HqJLw3IzXvA8RFcBjkdOB8SDYyOvW8Y2tTosojAiBTnD1MhbHoWUYNbxUXxBl61TxbRg==" + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "complex.js": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", + "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "ergogen": { + "version": "git+ssh://git@github.com/ergogen/ergogen.git#14cd4991820ca605f573b3d45b7147e83ac46b56", + "from": "ergogen@github:ergogen/ergogen#v4.0.4", + "requires": { + "fs-extra": "^11.1.0", + "js-yaml": "^3.14.1", + "jszip": "^3.10.1", + "kle-serial": "github:ergogen/kle-serial#ergogen", + "makerjs": "github:ergogen/maker.js#ergogen", + "mathjs": "^11.5.0", + "yargs": "^17.6.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "graham_scan": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/graham_scan/-/graham_scan-1.0.4.tgz", + "integrity": "sha512-jL+zq9xTYXxsDIf+qy9aaudRXx/X4sqrOlbFkg1ElqCznhYAQ/wXv8cifgzRvzFopStDeIvny5sIu6jgSjnRww==" + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "kdbush": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-2.0.1.tgz", + "integrity": "sha512-9KqSdmWCkBIisFIGclT0FRagKhI7IVbMyUjsxCFG0Ly1Dg6whlxJ7b9lrq8ifk3X/fGeJzok1R75LQfZTfA5zQ==" + }, + "kle-serial": { + "version": "git+ssh://git@github.com/ergogen/kle-serial.git#61f29f317d87bbfed0b0b7e646e1b91d4384ac02", + "from": "kle-serial@github:ergogen/kle-serial#ergogen", + "requires": { + "json5": "^2.1.0" + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, + "makerjs": { + "version": "git+ssh://git@github.com/ergogen/maker.js.git#a0ca32948845efe8ad5c9ca454f1285926853138", + "from": "makerjs@github:ergogen/maker.js#ergogen", + "requires": { + "@danmarshall/jscad-typings": "^1.0.0", + "@types/bezier-js": "^0.0.6", + "@types/node": "^7.0.5", + "@types/opentype.js": "^0.7.0", + "@types/pdfkit": "^0.7.34", + "bezier-js": "^2.1.0", + "clone": "^1.0.2", + "graham_scan": "^1.0.4", + "kdbush": "^2.0.1" + } + }, + "mathjs": { + "version": "11.9.1", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.9.1.tgz", + "integrity": "sha512-VdB9ELZ6Dwda13j5d1eCBETmPO8m9qIJETUdfZmTA9cPnXUiIk7UuoAmvxFqtfAe32XYuRugAec2Ndv0/RfRhg==", + "requires": { + "@babel/runtime": "^7.22.6", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "^4.2.0", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.0" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "typed-function": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz", + "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==" + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } } diff --git a/package.json b/package.json index 95e3dc3..ca95729 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "scripts": { - "gen": "ergogen samoklava.yaml" - }, - "dependencies": { - "ergogen": "github:soundmonster/ergogen#samoklava" - } + "scripts": { + "gen": "ergogen -d ." + }, + "dependencies": { + "ergogen": "github:ergogen/ergogen#v4.0.4" + } } diff --git a/samoklava.yaml b/samoklava.yaml deleted file mode 100644 index ec7ac0c..0000000 --- a/samoklava.yaml +++ /dev/null @@ -1,444 +0,0 @@ -units: - kx: cx - ky: cy - px: 2 - py: 2 -points: - key: - footprints: - choc_hotswap: - type: choc - params: - hotswap: true - reverse: true - keycaps: true - nets: - # from: P1 - # to: P2 - from: =colrow - to: =column_net - diode: - type: diode - nets: - # from: P3 - # to: P4 - from: =colrow - to: =row_net - anchor: - shift: [0, -5] - zones: - matrix: - # anchor: - # rotate: 5 - key.padding: ky - columns: - pinky: - stagger: 0 ky - spread: kx - key: - column_net: P20 - ring: - stagger: 0.7 ky - spread: kx - key: - column_net: P19 - middle: - stagger: 0.2 ky - spread: kx - key: - column_net: P18 - index: - stagger: -0.2 ky - spread: kx - key: - column_net: P15 - inner: - stagger: -0.1 ky - spread: kx - key: - column_net: P14 - rows: - bottom: - row_net: P6 - home: - row_net: P5 - top: - row_net: P4 - thumbfan: - anchor: - ref: matrix_inner_bottom - shift: [-1.5 kx, -1 ky] - columns: - near: - spread: kx - rotate: -15 - origin: [-0.5 kx, -0.5 ky] - key: - column_net: P18 - home: - spread: kx - rotate: -15 - origin: [-0.5 kx, -0.5 ky] - key: - column_net: P15 - far: - spread: kx - rotate: -15 - origin: [-0.5 kx, -0.5 ky] - key: - column_net: P14 - rows: - thumb: - row_net: P7 -outlines: - # board dimensions according to JLCPCB: 122.28 mm x 101.05 mm - exports: - raw: - - type: keys - side: left - size: [kx + px, ky + py] - corner: px - thumbfan_glue: - - type: polygon - points: - - ref: matrix_inner_bottom - shift: [0.5 kx + 0.5px, -0.5 ky + 0.5 py] - - ref: thumbfan_far_thumb - shift: [0.5 kx - 0.5px, 0.5 ky + 0.5 py] - - ref: thumbfan_far_thumb - shift: [0.5 kx - 0.5px, -0.5 ky - 0.5 py] - - ref: thumbfan_near_thumb - shift: [-0.5 kx + 0.5 px, -0.5 ky - 0.5 py] - - ref: matrix_pinky_bottom - shift: [0.5 kx - 0.5 py, -0.5 ky - 0.5 py] - - ref: matrix_pinky_home - - ref: matrix_inner_home - patch_outer: - - type: polygon - points: - - ref: matrix_ring_top - - ref: matrix_ring_bottom - - ref: matrix_pinky_bottom - shift: [-0.5 (kx + px), 0] - - ref: matrix_pinky_top - shift: [-0.5 (kx + px), 0] - patch_inner: - - type: polygon - points: - - ref: matrix_inner_top - shift: [0.5 (kx + px), 0] - - ref: matrix_inner_bottom - shift: [0.5 (kx + px), 0] - - ref: matrix_index_bottom - - ref: matrix_index_top - controller_area: - main: - type: rectangle - anchor: - ref: - - matrix_inner_top - shift: [0 kx, -4.05 ky] - size: [32, 76.5] - corner: px - switches: - main: - type: keys - side: left - size: 14 - bound: false - keycaps: - main: - type: keys - side: left - size: [kx, ky] - bound: false - corner: 1 - keywell: - main: - type: outline - name: raw - patch_inner: - type: outline - name: patch_inner - operation: add - patch_outer: - type: outline - name: patch_outer - operation: add - thumbfan_glue: - type: outline - name: thumbfan_glue - operation: add - base_outline: - main: - type: outline - name: keywell - controller: - type: outline - name: controller_area - operation: add - screw_holes: - top_left: - type: circle - anchor: - - ref: matrix_ring_home - shift: [-0.5 kx, 0 ky] - radius: 1.05 - bottom_left: - type: circle - anchor: - - ref: matrix_pinky_bottom - shift: [0.5 kx, 0] - radius: 1.05 - top_right: - type: circle - anchor: - - ref: matrix_inner_top - shift: [-0.5 kx, 0] - radius: 1.05 - palm: - type: circle - anchor: - - ref: matrix_index_bottom - shift: [0, -1.06 ky] - radius: 1.05 - thumb: - type: circle - anchor: - - ref: thumbfan_far_thumb - shift: [-0.55 kx, 0] - radius: 1.05 - mounting_holes: - $extends: outlines.exports.screw_holes - top_left: - radius: 2.05 - bottom_left: - radius: 2.05 - top_right: - radius: 2.05 - palm: - radius: 2.05 - thumb: - radius: 2.05 - bottom_outline: - main: - type: outline - name: base_outline - screw_holes: - type: outline - # TODO use footprints with pad + via reinforcement as mounting holes - name: screw_holes - operation: subtract - plate: - main: - type: outline - name: keywell - switches: - type: outline - name: switches - operation: subtract - mounting_holes: - type: outline - # TODO use footprints with pad + via reinforcement as mounting holes - name: screw_holes - operation: subtract - pcb: - main: - type: outline - name: base_outline - mounting_holes: - type: outline - # TODO use plated through hole footprints as mounting holes - name: mounting_holes - operation: subtract -pcbs: - top_plate: - include_keys: false - outlines: - edge: - outline: plate - layer: Edge.Cuts - footprints: - jlc_order_number: - type: text - anchor: - ref: - - matrix_ring_home - shift: [-0.25 kx, 0.5 ky] - params: - text: "JLCJLCJLCJLC" - justify: left - bottom_plate: - include_keys: false - outlines: - edge: - outline: bottom_outline - layer: Edge.Cuts - board: - outlines: - edge: - outline: pcb - layer: Edge.Cuts - footprints: - mcu_l: - type: promicro - params: - orientation: up - anchor: - ref: - - matrix_inner_top - shift: [20, -11] - rotate: 270 - mcu_r: - type: promicro - params: - orientation: down - anchor: - ref: - - matrix_inner_top - shift: [22.5, -12.25] - rotate: 270 - pad_plus: - type: pad - anchor: - ref: - - matrix_inner_top - shift: [23, -6] - rotate: 0 - params: - front: true - back: true - width: 1.5 - height: 1.5 - text: "B+" - nets: - net: Bplus - pad_minus: - type: pad - anchor: - ref: - - matrix_inner_top - shift: [23, -3] - rotate: 0 - params: - front: true - back: true - width: 1.5 - height: 1.5 - text: "B-" - nets: - net: GND - trrs_l: - type: trrs - anchor: - ref: - - matrix_inner_bottom - shift: [32, -15] - rotate: 270 - params: - reverse: false - symmetric: false - # The naming of the nets on this footprint is different from the Corne schematics. - nets: - A: "" - B: VCC - C: GND - D: P0 - trrs_r: - type: trrs - anchor: - ref: - - matrix_inner_bottom - shift: [32, -13] - rotate: 270 - params: - reverse: true - symmetric: false - # The naming of the nets on this footprint is different from the Corne schematics. - nets: - A: "" - B: VCC - C: GND - D: P0 - jumper_l: - type: jumper - anchor: - ref: - - matrix_inner_bottom - shift: [23.5, 0] - rotate: 270 - params: - side: B - nets: - from: Bplus - to: RAW - jumper_r: - type: jumper - anchor: - ref: - - matrix_inner_bottom - shift: [23.5, 0] - rotate: 270 - params: - side: F - nets: - from: Bplus - to: RAW - slider_l: - type: slider - anchor: - ref: - - matrix_inner_bottom - shift: [30, 0] - rotate: 270 - params: - side: F - nets: - from: RAW - left: Bplus - right: '' - slider_r: - type: slider - anchor: - ref: - - matrix_inner_bottom - shift: [30, 0] - rotate: 270 - params: - side: B - nets: - from: RAW - left: '' - right: Bplus - reset: - type: button - anchor: - ref: - - matrix_inner_bottom - shift: [17, 0] - rotate: 270 - params: - variant: 2_pin_th - nets: - from: GND - to: RST - info_l: - type: text - anchor: - ref: - - matrix_pinky_bottom - shift: [0.75 kx, 0] - params: - text: "samoklava v0.1\\nby soundmonster" - justify: left - info_r: - type: text - anchor: - ref: - - matrix_pinky_bottom - shift: [0.75 kx, 0] - params: - layer: B.SilkS - text: "samoklava v0.1\\nby soundmonster" - justify: right mirror -