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 0d8dd5e..cea58ef 100644 Binary files a/pdf/left-right.pdf and b/pdf/left-right.pdf differ diff --git a/pdf/material-blue.pdf b/pdf/material-blue.pdf index 6d0c896..e26e2a9 100644 Binary files a/pdf/material-blue.pdf and b/pdf/material-blue.pdf differ diff --git a/pdf/material-dark.pdf b/pdf/material-dark.pdf index 39de711..a180f3c 100755 Binary files a/pdf/material-dark.pdf and b/pdf/material-dark.pdf differ diff --git a/pdf/oblique.pdf b/pdf/oblique.pdf index c658bbd..cad94c2 100644 Binary files a/pdf/oblique.pdf and b/pdf/oblique.pdf differ diff --git a/pdf/side-bar.pdf b/pdf/side-bar.pdf index f4c38be..7b422be 100644 Binary files a/pdf/side-bar.pdf and b/pdf/side-bar.pdf differ diff --git a/pdf/template.pdf b/pdf/template.pdf index 21ca13d..e58b13a 100644 Binary files a/pdf/template.pdf and b/pdf/template.pdf differ