diff --git a/packages/svgtopdf/package-lock.json b/packages/svgtopdf/package-lock.json index c56cb7561f0..140af7ead25 100644 --- a/packages/svgtopdf/package-lock.json +++ b/packages/svgtopdf/package-lock.json @@ -4,6 +4,12 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@freesewing/prettier-config": { + "version": "2.0.0-beta.37", + "resolved": "https://registry.npmjs.org/@freesewing/prettier-config/-/prettier-config-2.0.0-beta.37.tgz", + "integrity": "sha512-JISpjXqT/EkSDSzd1asQkBDQPbrVuqPEsy8aafICLoP0WV4R2YcTYCX9YuoE+87lKsFP3X7oKW27nkJ/84P2Aw==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -2275,7 +2281,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -2296,12 +2303,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2316,17 +2325,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -2443,7 +2455,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -2455,6 +2468,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2469,6 +2483,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2476,12 +2491,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -2500,6 +2517,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2580,7 +2598,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -2592,6 +2611,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -2677,7 +2697,8 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -2713,6 +2734,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2732,6 +2754,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2775,12 +2798,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, diff --git a/packages/svgtopdf/package.json b/packages/svgtopdf/package.json index 31099ede65d..fb6aee89fb7 100644 --- a/packages/svgtopdf/package.json +++ b/packages/svgtopdf/package.json @@ -11,7 +11,7 @@ "major": "npm version major -m ':bookmark: v%s' && npm run build", "test": "echo \"Error: no test specified\" && exit 1", "clean": "rimraf dist", - "pretty": "npx prettier --write \"src/*.js\"", + "prettier": "npx prettier --write 'src/**'", "lint": "eslint --fix \"src/*.js\"", "dev": "backpack", "build": "backpack build" @@ -26,6 +26,7 @@ "url": "https://github.com/freesewing/svg2pdf/issues" }, "homepage": "https://github.com/freesewing/svg2pdf#readme", + "prettier": "@freesewing/prettier-config", "husky": { "hooks": { "pre-commit": "lint-staged" @@ -46,6 +47,7 @@ "shell-exec": "1.0.2" }, "devDependencies": { + "@freesewing/prettier-config": "2.0.0-beta.37", "backpack-core": "0.7.0", "nodemon": "1.18.6" } diff --git a/packages/svgtopdf/src/form.html b/packages/svgtopdf/src/form.html index 81f2c5be143..79218d920bb 100644 --- a/packages/svgtopdf/src/form.html +++ b/packages/svgtopdf/src/form.html @@ -1,76 +1,82 @@ - Convert your SVG pattern - - + Convert your SVG pattern + +

- Freesewing logo + Freesewing logo

Convert your freesewing pattern

-
+

Upload your pattern

- +

Choose a file format

- - + +

- - + +

Choose a paper size

- - + +

- - + +

- - + +

- - + +

- - + +

- - + +

- - + +

- - + +

We'll do the rest

- +
- - - + diff --git a/packages/svgtopdf/src/index.js b/packages/svgtopdf/src/index.js index da74de76337..7ee93f0ea77 100644 --- a/packages/svgtopdf/src/index.js +++ b/packages/svgtopdf/src/index.js @@ -1,123 +1,140 @@ -import express from "express"; -import cors from "cors"; -import bodyParser from "body-parser"; -import path from "path"; -import fs from "fs"; -import formidable from "formidable"; -import shellExec from "shell-exec"; +import express from 'express' +import cors from 'cors' +import bodyParser from 'body-parser' +import path from 'path' +import fs from 'fs' +import formidable from 'formidable' +import shellExec from 'shell-exec' -const app = express(); -app.use(cors()); -app.use(bodyParser.json()); -const port = process.env.PORT || 4000; -const formats = ['pdf','ps']; -const sizes = ['full', 'a4','a3','a2','a1','a0','letter','tabloid']; +const app = express() +app.use(cors()) +app.use(bodyParser.json()) +const port = process.env.PORT || 4000 +const formats = ['pdf', 'ps'] +const sizes = ['full', 'a4', 'a3', 'a2', 'a1', 'a0', 'letter', 'tabloid'] -app.get("/", async (req, res) => res.sendFile(path.resolve(__dirname+'/form.html'))); -app.post("/", async (req, res) => { - let form = new formidable.IncomingForm(); +app.get('/', async (req, res) => res.sendFile(path.resolve(__dirname + '/form.html'))) +app.post('/', async (req, res) => { + let form = new formidable.IncomingForm() form.parse(req, (err, fields, files) => { - if(err || typeof files.svg === "undefined" || + if ( + err || + typeof files.svg === 'undefined' || formats.indexOf(fields.format) === -1 || sizes.indexOf(fields.size) === -1 - ) return res.sendFile(path.resolve(__dirname+'/form.html')); - let upload = files.svg.path; - let cmd; - if(fields.size === "full") { // Do not tile - let target = `/tmp/pattern.${fields.format}`; - cmd = `/usr/bin/inkscape --export-${fields.format}=${target} ${upload}`; + ) + return res.sendFile(path.resolve(__dirname + '/form.html')) + let upload = files.svg.path + let cmd + if (fields.size === 'full') { + // Do not tile + let target = `/tmp/pattern.${fields.format}` + cmd = `/usr/bin/inkscape --export-${fields.format}=${target} ${upload}` shellExec(cmd).then(() => { - return res.sendFile(target); - }); - } else { // Do tile - let untiled = "/tmp/untiled.ps"; - let tiled = "/tmp/tiled.ps"; - cmd = `/usr/bin/inkscape --export-ps=${untiled} ${upload}`; + return res.sendFile(target) + }) + } else { + // Do tile + let untiled = '/tmp/untiled.ps' + let tiled = '/tmp/tiled.ps' + cmd = `/usr/bin/inkscape --export-ps=${untiled} ${upload}` shellExec(cmd).then(() => { - cmd = `/usr/local/bin/tile -a -m${fields.size} -s1 -t"On-demand tiler" ${untiled} > ${tiled}`; + cmd = `/usr/local/bin/tile -a -m${ + fields.size + } -s1 -t"On-demand tiler" ${untiled} > ${tiled}` shellExec(cmd).then(() => { - if(fields.format === "ps") return res.sendFile(tiled); - cmd = `/usr/bin/ps2pdf14 ${tiled} ${tiled}.pdf`; + if (fields.format === 'ps') return res.sendFile(tiled) + cmd = `/usr/bin/ps2pdf14 ${tiled} ${tiled}.pdf` shellExec(cmd).then(() => { - return res.sendFile(tiled+'.pdf'); - }); - }); - }); + return res.sendFile(tiled + '.pdf') + }) + }) + }) } - }); -}); + }) +}) -app.post("/api", async (req, res) => { - if( - typeof req.body.svg === "undefined" || - typeof req.body.format === "undefined" || - typeof req.body.size === "undefined" || +app.post('/api', async (req, res) => { + if ( + typeof req.body.svg === 'undefined' || + typeof req.body.format === 'undefined' || + typeof req.body.size === 'undefined' || formats.indexOf(req.body.format) === -1 || sizes.indexOf(req.body.size) === -1 ) - return res.sendStatus(400); - let storage = "/fs/storage/tmp/"; - let dir = createTempDir(storage); - let svg = storage+dir+"/draft.svg"; - let cmd = ""; + return res.sendStatus(400) + let storage = '/fs/storage/tmp/' + let dir = createTempDir(storage) + let svg = storage + dir + '/draft.svg' + let cmd = '' // Save svg to disk fs.writeFile(svg, req.body.svg, err => { - if(err) { - console.log(err); - return res.sendStatus(500); - } - let target = storage+dir+"/pattern-"+req.body.size; - if(req.body.size === "full") { // Do not tile - if (req.body.format === "ps") { - target += ".ps"; - cmd = "/usr/bin/inkscape --export-ps="+target+" "+svg; - shellExec(cmd).then(() => { - return res.send({link: process.env.TILER_DOWNLOAD+"/tmp/"+dir+"/pattern-full.ps"}); - }); + if (err) { + console.log(err) + return res.sendStatus(500) + } + let target = storage + dir + '/pattern-' + req.body.size + if (req.body.size === 'full') { + // Do not tile + if (req.body.format === 'ps') { + target += '.ps' + cmd = '/usr/bin/inkscape --export-ps=' + target + ' ' + svg + shellExec(cmd).then(() => { + return res.send({ link: process.env.TILER_DOWNLOAD + '/tmp/' + dir + '/pattern-full.ps' }) + }) } else { - target += ".pdf"; - cmd = "/usr/bin/inkscape --export-pdf="+target+" "+svg; - shellExec(cmd).then(() => { - return res.send({link: process.env.TILER_DOWNLOAD+"/tmp/"+dir+"/pattern-full.pdf"}); - }); + target += '.pdf' + cmd = '/usr/bin/inkscape --export-pdf=' + target + ' ' + svg + shellExec(cmd).then(() => { + return res.send({ + link: process.env.TILER_DOWNLOAD + '/tmp/' + dir + '/pattern-full.pdf' + }) + }) } - } else { // Do tile - target += ".pdf"; - let untiled = storage+dir+"/untiled.ps"; - let tiled = storage+dir+"/tiled.ps"; - cmd = `/usr/bin/inkscape --export-ps=${untiled} ${svg}`; - shellExec(cmd).then(() => { - cmd = `/usr/local/bin/tile -a -m${req.body.size} -s1 -t"freesewing.org" ${untiled} > ${tiled}`; - console.log('tile cmd', cmd); - shellExec(cmd).then(() => { - cmd = `/usr/bin/ps2pdf14 ${tiled} ${target}`; - shellExec(cmd).then(() => { - return res.send({link: process.env.TILER_DOWNLOAD+"/tmp/"+dir+"/pattern-"+req.body.size+".pdf"}); - }); - }); - }); - } - }); -}); + } else { + // Do tile + target += '.pdf' + let untiled = storage + dir + '/untiled.ps' + let tiled = storage + dir + '/tiled.ps' + cmd = `/usr/bin/inkscape --export-ps=${untiled} ${svg}` + shellExec(cmd).then(() => { + cmd = `/usr/local/bin/tile -a -m${ + req.body.size + } -s1 -t"freesewing.org" ${untiled} > ${tiled}` + console.log('tile cmd', cmd) + shellExec(cmd).then(() => { + cmd = `/usr/bin/ps2pdf14 ${tiled} ${target}` + shellExec(cmd).then(() => { + return res.send({ + link: + process.env.TILER_DOWNLOAD + '/tmp/' + dir + '/pattern-' + req.body.size + '.pdf' + }) + }) + }) + }) + } + }) +}) +const createTempDir = folder => { + let dir = newDir() + let path = folder + dir + fs.mkdirSync(path, { recursive: true }, err => { + if (err) console.log('mkdirFailed', err) + }) -const createTempDir = (folder) => { - let dir = newDir(); - let path = folder+dir; - fs.mkdirSync(path, {recursive: true}, (err) => { - if(err) console.log("mkdirFailed", err); - }); - - return dir; + return dir } const newDir = (length = 10) => { - let dir = ""; - let possible = "abcdefghijklmnopqrstuvwxyz"; + let dir = '' + let possible = 'abcdefghijklmnopqrstuvwxyz' for (let i = 0; i < length; i++) - dir += possible.charAt(Math.floor(Math.random() * possible.length)); + dir += possible.charAt(Math.floor(Math.random() * possible.length)) - return dir; + return dir } -app.listen(port, err => { console.log(`> listening on port ${port}`) }); +app.listen(port, err => { + console.log(`> listening on port ${port}`) +})