From 44e7a2e14e65ba585b40e445059ac513f3a48765 Mon Sep 17 00:00:00 2001 From: salomonelli Date: Fri, 9 Jun 2017 22:26:23 +0200 Subject: [PATCH] ADD export script --- node/app.js | 82 +++++++++++++++++++++++++----------------- package.json | 6 ++++ pdf/left-right.pdf | Bin 436255 -> 436255 bytes pdf/material-blue.pdf | Bin 72784 -> 72784 bytes pdf/material-dark.pdf | Bin 75654 -> 75654 bytes pdf/oblique.pdf | Bin 55742 -> 55742 bytes pdf/side-bar.pdf | Bin 51129 -> 51129 bytes pdf/template.pdf | Bin 920 -> 920 bytes 8 files changed, 55 insertions(+), 33 deletions(-) diff --git a/node/app.js b/node/app.js index 5038f20..9dec8b9 100755 --- a/node/app.js +++ b/node/app.js @@ -1,26 +1,55 @@ +/* eslint-disable */ const fs = require('fs'); const path = require('path'); const exec = require('child_process').exec; +const Rx = require('rxjs/Rx'); +const http = require('http'); -/** - * converts resumes to pdf - * @return {Promise} - */ -const convert = () => { +const fetchResponse = () => { + return new Promise((res, rej) => { + try { + const req = http.request('http://localhost:8080/#/', response => res(response.statusCode)); + req.on('error', (err) => rej(err)); + req.end(); + } catch (err) { + rej(err); + } + }); +}; + +const waitForServerReachable = () => { + return Rx.Observable + .interval(1000) + .mergeMap(async() => { + try { + const statusCode = await fetchResponse(); + if (statusCode === 200) return true; + } catch (err) {} + return false; + }) + .filter(ok => !!ok); +}; + +const timedOut = timeout => { + return new Promise(res => { + setTimeout(res, timeout); + }); +}; + +const convert = async() => { + await waitForServerReachable().first().toPromise(); + console.log('Connected to server ...'); + console.log('Exporting ...'); try { const directories = getResumesFromDirectories(); const scripts = directories.map(resume => electroshotScript(resume.path)); - execBash(scripts.join(' && ')); + await execBash(scripts.join(' && ')); } catch (err) { throw new Error(err); } + console.log('Finished exports.'); }; -/** - * generates electroshot command for screenshoting resume - * @param {string} resume resume name in URL - * @return {string} electroshot command - */ const electroshotScript = resume => { const dir = path.join(__dirname, '../pdf'); return 'electroshot localhost:8080/#/resume/' + resume + @@ -28,39 +57,26 @@ const electroshotScript = resume => { ' --filename "' + resume + '.pdf" --pdf-background'; }; -/** - * gets resumes names and paths from directories - * @return {Object[]} array with resumes object {path: '', name: ''} - */ const getResumesFromDirectories = () => { const directories = getDirectories(); return directories - .filter(dir => dir.includes('resume-') && dir !== 'resume-XX') - .map(dir => { - let name = dir.replace('resume-', ''); - let fileName = dir.replace('.vue', ''); - return { - path: fileName.replace('resume-', ''), - name: name.replace('-', ' ') - }; - }); + .filter(dir => dir.includes('resume-') && dir !== 'resume-XX') + .map(dir => { + let name = dir.replace('resume-', ''); + let fileName = dir.replace('.vue', ''); + return { + path: fileName.replace('resume-', ''), + name: name.replace('-', ' ') + }; + }); }; -/** - * gets directories starting with 'resume-' - * @return {[]} - */ const getDirectories = () => { const srcpath = path.join(__dirname, '../src/components'); return fs.readdirSync(srcpath) .filter(file => file.includes('resume-')); }; -/** - * executes command - * @param {string} script e.g. 'echo "Hello World"' - * @return {Promise} - */ const execBash = script => { return new Promise((resolve, reject) => { exec(script, diff --git a/package.json b/package.json index b619128..cc14192 100755 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "dev": "node build/dev-server.js", "start": "node build/dev-server.js", "pdf": "node node/app.js", + "export": "concurrently \"npm run dev\" \"npm run pdf\" --success first --kill-others --raw", "test": "cross-env BABEL_ENV=test karma start test/karma.conf.js --single-run", "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs" }, @@ -58,6 +59,7 @@ "file-loader": "^0.11.1", "friendly-errors-webpack-plugin": "^1.1.3", "html-webpack-plugin": "^2.28.0", + "http": "0.0.0", "http-proxy-middleware": "^0.17.3", "inject-loader": "^3.0.0", "karma": "^1.4.1", @@ -80,13 +82,17 @@ "phantomjs-prebuilt": "^2.1.14", "postcss": "^6.0.1", "postcss-cssnext": "^2.11.0", + "request": "^2.81.0", "request-promise": "^4.2.1", "rimraf": "^2.6.0", + "rx": "^4.1.0", + "rxjs": "^5.4.0", "selenium-server": "^3.0.1", "semver": "^5.3.0", "shelljs": "^0.7.6", "sinon": "^2.1.0", "sinon-chai": "^2.8.0", + "url-exists": "^1.0.3", "url-loader": "^0.5.8", "vue-loader": "^11.3.4", "vue-style-loader": "^2.0.5", diff --git a/pdf/left-right.pdf b/pdf/left-right.pdf index 0d8dd5e681408afdf1453ec194e2e147b319c2e0..cea58ef8eb2bca1d1b15bfd234f98420b6bb4031 100644 GIT binary patch delta 73 zcmbP#L2CX5sR?mfmPQ7KriP~41_tUtq{*f4o1fy6Sdyxs;bH}pGB+?YfGTP1XzgHZ V?Omh9u_J9 diff --git a/pdf/material-blue.pdf b/pdf/material-blue.pdf index 6d0c896211206e10966871d1a656b79dd4438f11..e26e2a920c3fba51b22646cd1b98bc22d01a8e85 100644 GIT binary patch delta 58 zcmcbxgXO{wmI-lMmPQ7KriSL)1_tUtq{*f4o1fy6Sdyxs;bH}pGB+?YfGTP1*xJE( GLK*<~I}nTj delta 58 zcmcbxgXO{wmI-lMW<~}^CZ@*P1_tUtq{*f4o1fy6Sdyxs;bLWEU}$b&W&l;v*s-;P H@q{!0_J|OM diff --git a/pdf/material-dark.pdf b/pdf/material-dark.pdf index 39de711aaf57c0157ab171bea200567c869af2fb..a180f3c2cadb31b13d2086fb759cf5af7f4dd5f9 100755 GIT binary patch delta 58 zcmZoW&(e0DWkQ^mrICT5siB3ofq^;@X>#fN=BKzMmZU0ZxL5(D%ni&8ph_A$wstW7 GQv(3uG!SV3 delta 58 zcmZoW&(e0DWkQ^mnUR5!iK&^kfq^;@X>#fN=BKzMmZU0ZxL6q(7@8ZH89#fN=BKzMmZU0ZxL5(D%ni&8AWAm28yyD# DoaheJ delta 54 zcmdnl&%Cprc|x3~nUR5!seysEfq^;@X>#fN=BKzMmZU0ZxL6q(7@8ZH89HFrVxFnXODrmS^0j10h%nYDPHg*Uw0{~$w B49Wli delta 53 zcmbQiK7)NioR*o9fsv_!k+y+>IuL1c>HFrVxFnXODrmS^85tOw8<-hDm2B(~U