art: Updated prettier config
This commit is contained in:
parent
545ebbfee4
commit
13cb9ca5ee
4 changed files with 199 additions and 149 deletions
47
packages/svgtopdf/package-lock.json
generated
47
packages/svgtopdf/package-lock.json
generated
|
@ -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
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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}`)
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue