1
0
Fork 0

art: Updated prettier config

This commit is contained in:
Joost De Cock 2019-08-03 15:53:41 +02:00 committed by Joost De Cock
parent 545ebbfee4
commit 13cb9ca5ee
4 changed files with 199 additions and 149 deletions

View file

@ -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
}
}
},

View file

@ -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"
}

View file

@ -1,76 +1,82 @@
<html>
<head>
<title>Convert your SVG pattern</title>
<link href="https://fonts.googleapis.com/css?family=Domine|Open+Sans+Condensed:300" rel="stylesheet">
<style>
body {
font-family: 'Domine', serif;
font-size: 100%;
max-width: 600px;
margin: 30px auto;
}
h1 {
font-family: 'Open Sans Condensed', sans-serif;
font-size: 3rem;
}
</style>
<title>Convert your SVG pattern</title>
<link
href="https://fonts.googleapis.com/css?family=Domine|Open+Sans+Condensed:300"
rel="stylesheet"
/>
<style>
body {
font-family: 'Domine', serif;
font-size: 100%;
max-width: 600px;
margin: 30px auto;
}
h1 {
font-family: 'Open Sans Condensed', sans-serif;
font-size: 3rem;
}
</style>
</head>
<body>
<p align="center">
<a title="Go to freesewing.org" href="https://freesewing.org/">
<img src="https://freesewing.org/img/logo/black.svg" align="center" width="150px" alt="Freesewing logo"/>
<img
src="https://freesewing.org/img/logo/black.svg"
align="center"
width="150px"
alt="Freesewing logo"
/>
</a>
</p>
<h1>Convert your freesewing pattern</h1>
<form method="POST" action="/" enctype='multipart/form-data'>
<form method="POST" action="/" enctype="multipart/form-data">
<h2>Upload your pattern</h2>
<input type="file" id="svg" name="svg" accept="image/svg+xml">
<input type="file" id="svg" name="svg" accept="image/svg+xml" />
<h2>Choose a file format</h2>
<p>
<input type="radio" name="format" value="ps" id="ps">
<label for='ps'>PostScript (.ps)</label>
<input type="radio" name="format" value="ps" id="ps" />
<label for="ps">PostScript (.ps)</label>
</p>
<p>
<input type="radio" name="format" value="pdf" checked id="pdf">
<label for='pdf'>Portable Document Format (.pdf)</label>
<input type="radio" name="format" value="pdf" checked id="pdf" />
<label for="pdf">Portable Document Format (.pdf)</label>
</p>
<h2>Choose a paper size</h2>
<p>
<input type="radio" name="size" value="full" id="full" checked>
<label for='full'>Full size (do not tile)</label>
<input type="radio" name="size" value="full" id="full" checked />
<label for="full">Full size (do not tile)</label>
</p>
<p>
<input type="radio" name="size" value="a4" id="a4">
<label for='a4'>A4</label>
<input type="radio" name="size" value="a4" id="a4" />
<label for="a4">A4</label>
</p>
<p>
<input type="radio" name="size" value="a3" id="a3">
<label for='a3'>A3</label>
<input type="radio" name="size" value="a3" id="a3" />
<label for="a3">A3</label>
</p>
<p>
<input type="radio" name="size" value="a2" id="a2">
<label for='a2'>A2</label>
<input type="radio" name="size" value="a2" id="a2" />
<label for="a2">A2</label>
</p>
<p>
<input type="radio" name="size" value="a1" id="a1">
<label for='a1'>A1</label>
<input type="radio" name="size" value="a1" id="a1" />
<label for="a1">A1</label>
</p>
<p>
<input type="radio" name="size" value="a0" id="a0">
<label for='a0'>A0</label>
<input type="radio" name="size" value="a0" id="a0" />
<label for="a0">A0</label>
</p>
<p>
<input type="radio" name="size" value="letter" id="letter">
<label for='letter'>Letter</label>
<input type="radio" name="size" value="letter" id="letter" />
<label for="letter">Letter</label>
</p>
<p>
<input type="radio" name="size" value="tabloid" id="tabloid">
<label for='tabloid'>Tabloid</label>
<input type="radio" name="size" value="tabloid" id="tabloid" />
<label for="tabloid">Tabloid</label>
</p>
<h2>We'll do the rest</h2>
<input type="submit" value="Convert my pattern">
<input type="submit" value="Convert my pattern" />
</form>
</body>
</html>
</html>

View file

@ -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}`)
})