Initial commit
This commit is contained in:
parent
dba9e0ea0d
commit
bec6b26269
4
.gitignore
vendored
4
.gitignore
vendored
@ -102,3 +102,7 @@ dist
|
|||||||
|
|
||||||
# TernJS port file
|
# TernJS port file
|
||||||
.tern-port
|
.tern-port
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
gerber/
|
||||||
|
hello.txt
|
32
index.js
Normal file
32
index.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const pcbStackup = require('pcb-stackup');
|
||||||
|
|
||||||
|
async function writeSVG(filepath, data) {
|
||||||
|
try {
|
||||||
|
await fs.promises.writeFile(filepath, data, { flag: 'w' });
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`Error writing file: ${e.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileNames = [
|
||||||
|
'./gerber/default/copper_bottom.gbr',
|
||||||
|
'./gerber/default/copper_top.gbr',
|
||||||
|
'./gerber/default/drill_1_16.xln',
|
||||||
|
'./gerber/default/silkscreen_bottom.gbr',
|
||||||
|
'./gerber/default/silkscreen_top.gbr',
|
||||||
|
'./gerber/default/soldermask_bottom.gbr',
|
||||||
|
'./gerber/default/soldermask_top.gbr',
|
||||||
|
'./gerber/default/solderpaste_top.gbr',
|
||||||
|
'./gerber/default/solderpaste_bottom.gbr',
|
||||||
|
'./gerber/default/profile.gbr',
|
||||||
|
]
|
||||||
|
|
||||||
|
const layers = fileNames.map(filename => ({
|
||||||
|
filename,
|
||||||
|
gerber: fs.createReadStream(filename),
|
||||||
|
}));
|
||||||
|
|
||||||
|
pcbStackup(layers).then(stackup => {
|
||||||
|
writeSVG('./gerber/pcb.svg', stackup.top.svg);
|
||||||
|
});
|
221
package-lock.json
generated
Normal file
221
package-lock.json
generated
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
{
|
||||||
|
"name": "npe_gerber",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"requires": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@tracespace/xml-id": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tracespace/xml-id/-/xml-id-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-bEAqLh8sxNHHVOErgQrF4cj/PlmaayrTTIWT3uKQKnFk8KlubUQeW+Ip6W9sa+J/bUii927qD0HE5sFxsPo/IQ=="
|
||||||
|
},
|
||||||
|
"@types/node": {
|
||||||
|
"version": "13.13.40",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.40.tgz",
|
||||||
|
"integrity": "sha512-eKaRo87lu1yAXrzEJl0zcJxfUMDT5/mZalFyOkT44rnQps41eS2pfWzbaulSPpQLFNy29bFqn+Y5lOTL8ATlEQ=="
|
||||||
|
},
|
||||||
|
"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=="
|
||||||
|
},
|
||||||
|
"color-string": {
|
||||||
|
"version": "1.5.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz",
|
||||||
|
"integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==",
|
||||||
|
"requires": {
|
||||||
|
"color-name": "^1.0.0",
|
||||||
|
"simple-swizzle": "^0.2.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"escape-html": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
|
||||||
|
},
|
||||||
|
"gerber-parser": {
|
||||||
|
"version": "4.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/gerber-parser/-/gerber-parser-4.2.4.tgz",
|
||||||
|
"integrity": "sha512-Dn+nM+URswnKc1uOihOnmkbLqjiftPO3rYbBCFSz2WFFVOxDt7/nNNzX7U3OPoAoCYGrHbKsgLERj3YERaDLtA==",
|
||||||
|
"requires": {
|
||||||
|
"@types/node": "^13.1.6",
|
||||||
|
"inherits": "^2.0.4",
|
||||||
|
"lodash.isfinite": "^3.3.2",
|
||||||
|
"lodash.padend": "^4.6.1",
|
||||||
|
"lodash.padstart": "^4.6.1",
|
||||||
|
"readable-stream": "^3.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gerber-plotter": {
|
||||||
|
"version": "4.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/gerber-plotter/-/gerber-plotter-4.2.5.tgz",
|
||||||
|
"integrity": "sha512-8zU9sambodzYTzCC3p3hlar3QdGC9uwC+rDCkxKhVf7rlL2lo6S7c46Q2hyNI2SpuY3WAE8EGCXHMP+MMo+2Ew==",
|
||||||
|
"requires": {
|
||||||
|
"@types/node": "^13.1.6",
|
||||||
|
"inherits": "^2.0.4",
|
||||||
|
"lodash.fill": "^3.4.0",
|
||||||
|
"lodash.isfinite": "^3.3.2",
|
||||||
|
"lodash.isfunction": "^3.0.9",
|
||||||
|
"readable-stream": "^3.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gerber-to-svg": {
|
||||||
|
"version": "4.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/gerber-to-svg/-/gerber-to-svg-4.2.5.tgz",
|
||||||
|
"integrity": "sha512-1yR/j3bVZ/j0SKjvc+xYFrnYfccmH1jAh1oe4dw31eCOsNLYG43Sun6mOOYz5ylN95pStRRo7yU0T76wtgY74A==",
|
||||||
|
"requires": {
|
||||||
|
"@tracespace/xml-id": "^4.0.0",
|
||||||
|
"@types/node": "^13.1.6",
|
||||||
|
"escape-html": "^1.0.3",
|
||||||
|
"gerber-parser": "^4.2.4",
|
||||||
|
"gerber-plotter": "^4.2.5",
|
||||||
|
"inherits": "^2.0.4",
|
||||||
|
"lodash.isfinite": "^3.3.2",
|
||||||
|
"readable-stream": "^3.4.0",
|
||||||
|
"xml-element-string": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inherits": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||||
|
},
|
||||||
|
"is-arrayish": {
|
||||||
|
"version": "0.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
|
||||||
|
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
|
||||||
|
},
|
||||||
|
"lodash.fill": {
|
||||||
|
"version": "3.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.fill/-/lodash.fill-3.4.0.tgz",
|
||||||
|
"integrity": "sha1-o8dK5kDQU63w3CB5+HIHiOi/74U="
|
||||||
|
},
|
||||||
|
"lodash.isfinite": {
|
||||||
|
"version": "3.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
|
||||||
|
"integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M="
|
||||||
|
},
|
||||||
|
"lodash.isfunction": {
|
||||||
|
"version": "3.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
|
||||||
|
"integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw=="
|
||||||
|
},
|
||||||
|
"lodash.padend": {
|
||||||
|
"version": "4.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
|
||||||
|
"integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4="
|
||||||
|
},
|
||||||
|
"lodash.padstart": {
|
||||||
|
"version": "4.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz",
|
||||||
|
"integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs="
|
||||||
|
},
|
||||||
|
"node-stream-zip": {
|
||||||
|
"version": "1.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.12.0.tgz",
|
||||||
|
"integrity": "sha512-HZ3XehqShTFj9gHauRJ3Bri9eiCTOII7/crtXzURtT14NdnOFs9Ia5E82W7z3izVBNx760tqwddxrBJVG52Y1Q=="
|
||||||
|
},
|
||||||
|
"pcb-stackup": {
|
||||||
|
"version": "4.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/pcb-stackup/-/pcb-stackup-4.2.5.tgz",
|
||||||
|
"integrity": "sha512-js/8fAjinLgyK9znctFKwidbDohMCJlhzLID44PU3WSkd2e9zC62YIomNF0/MJXwoE5VtEymAnTXZzzIwT39OA==",
|
||||||
|
"requires": {
|
||||||
|
"@tracespace/xml-id": "^4.0.0",
|
||||||
|
"@types/node": "^13.1.6",
|
||||||
|
"gerber-to-svg": "^4.2.5",
|
||||||
|
"pcb-stackup-core": "^4.2.5",
|
||||||
|
"run-parallel": "^1.1.9",
|
||||||
|
"run-waterfall": "^1.1.6",
|
||||||
|
"whats-that-gerber": "^4.2.2",
|
||||||
|
"xtend": "^4.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pcb-stackup-core": {
|
||||||
|
"version": "4.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/pcb-stackup-core/-/pcb-stackup-core-4.2.5.tgz",
|
||||||
|
"integrity": "sha512-iXx3khjlgh+mE7ucW8EFKFHLZmAsGViOdcYW0J6nV25Xxsyp/NMMiGuEbIpCt6nRmkScM5WZ0ROdGTnTrmAtKA==",
|
||||||
|
"requires": {
|
||||||
|
"@tracespace/xml-id": "^4.0.0",
|
||||||
|
"@types/node": "^13.1.6",
|
||||||
|
"color-string": "^1.5.3",
|
||||||
|
"gerber-to-svg": "^4.2.5",
|
||||||
|
"viewbox": "^1.0.0",
|
||||||
|
"whats-that-gerber": "^4.2.2",
|
||||||
|
"xml-element-string": "^1.0.0",
|
||||||
|
"xtend": "^4.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||||
|
"requires": {
|
||||||
|
"inherits": "^2.0.3",
|
||||||
|
"string_decoder": "^1.1.1",
|
||||||
|
"util-deprecate": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"run-parallel": {
|
||||||
|
"version": "1.1.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz",
|
||||||
|
"integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw=="
|
||||||
|
},
|
||||||
|
"run-waterfall": {
|
||||||
|
"version": "1.1.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/run-waterfall/-/run-waterfall-1.1.7.tgz",
|
||||||
|
"integrity": "sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ=="
|
||||||
|
},
|
||||||
|
"safe-buffer": {
|
||||||
|
"version": "5.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
|
||||||
|
},
|
||||||
|
"simple-swizzle": {
|
||||||
|
"version": "0.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
|
||||||
|
"integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
|
||||||
|
"requires": {
|
||||||
|
"is-arrayish": "^0.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
||||||
|
"requires": {
|
||||||
|
"safe-buffer": "~5.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"util-deprecate": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||||
|
},
|
||||||
|
"viewbox": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/viewbox/-/viewbox-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-eWDGEGvx1+yiG4lLagZlvjaNgso="
|
||||||
|
},
|
||||||
|
"whats-that-gerber": {
|
||||||
|
"version": "4.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/whats-that-gerber/-/whats-that-gerber-4.2.2.tgz",
|
||||||
|
"integrity": "sha512-2agpMEj0a0SYYdvxlRJHMEiTbu25qgri5Le6Q1acKjU1s567J6hK6henR0a7I1XWNFxsALk5hl45xR1ZJFukFQ==",
|
||||||
|
"requires": {
|
||||||
|
"xtend": "^4.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"xml-element-string": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/xml-element-string/-/xml-element-string-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-g8XWM1Jl8nCZJEwzrgyT1Ke6DIw=",
|
||||||
|
"requires": {
|
||||||
|
"escape-html": "^1.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"xtend": {
|
||||||
|
"version": "4.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||||
|
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
23
package.json
Normal file
23
package.json
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"name": "npe_gerber",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Create a PCB image from gerber files",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/nplayfair/npe_gerber.git"
|
||||||
|
},
|
||||||
|
"author": "nplayfair",
|
||||||
|
"license": "ISC",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/nplayfair/npe_gerber/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/nplayfair/npe_gerber#readme",
|
||||||
|
"dependencies": {
|
||||||
|
"node-stream-zip": "^1.12.0",
|
||||||
|
"pcb-stackup": "^4.2.5"
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user