From 7271b3465af27d8dd6066115c8c492c1baef7c67 Mon Sep 17 00:00:00 2001 From: Jason Park Date: Tue, 5 Feb 2019 15:47:29 -0500 Subject: [PATCH] Remove dependencies on unpkg.com (#234) --- package-lock.json | 2 +- package.json | 2 +- src/backend/common/util.js | 10 ++++++++++ src/backend/controllers/tracers.js | 3 ++- src/backend/tracers/WorkerBuilder.js | 4 ++++ src/backend/tracers/js/worker.js | 4 ++-- src/frontend/apis/index.js | 2 +- src/frontend/core/renderers/Array2DRenderer/index.jsx | 2 +- 8 files changed, 22 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index ddc1037e..97eb0341 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "algorithm-visualizer", + "name": "@algorithm-visualizer/algorithm-visualizer", "version": "2.0.0", "lockfileVersion": 1, "requires": true, diff --git a/package.json b/package.json index 10738f18..eb0edcc3 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "algorithm-visualizer", + "name": "@algorithm-visualizer/algorithm-visualizer", "version": "2.0.0", "title": "Algorithm Visualizer", "description": "Algorithm Visualizer is an interactive online platform that visualizes algorithms from code.", diff --git a/src/backend/common/util.js b/src/backend/common/util.js index 49b36d32..8c9ddfa0 100644 --- a/src/backend/common/util.js +++ b/src/backend/common/util.js @@ -1,4 +1,5 @@ import Promise from 'bluebird'; +import axios from 'axios'; import child_process from 'child_process'; import path from 'path'; import fs from 'fs-extra'; @@ -32,6 +33,14 @@ const getDescription = files => { return removeMarkdown(descriptionLines.join(' ')); }; +const download = (url, localPath) => axios({ url, method: 'GET', responseType: 'stream' }) + .then(response => new Promise((resolve, reject) => { + const writer = fs.createWriteStream(localPath); + writer.on('finish', resolve); + writer.on('error', reject); + response.data.pipe(writer); + })); + export { execute, createKey, @@ -39,4 +48,5 @@ export { listFiles, listDirectories, getDescription, + download, }; diff --git a/src/backend/controllers/tracers.js b/src/backend/controllers/tracers.js index b15ffc4b..d4304a45 100644 --- a/src/backend/controllers/tracers.js +++ b/src/backend/controllers/tracers.js @@ -73,7 +73,8 @@ Object.keys(builderMap).forEach(lang => { if (builder instanceof ImageBuilder) { router.post(`/${lang}`, trace(lang)); } else if (builder instanceof WorkerBuilder) { - router.get(`/${lang}`, (req, res) => res.sendFile(builder.workerPath)); + router.get(`/${lang}`, (req, res) => res.sendFile(builder.tracerPath)); + router.get(`/${lang}/worker`, (req, res) => res.sendFile(builder.workerPath)); } }); diff --git a/src/backend/tracers/WorkerBuilder.js b/src/backend/tracers/WorkerBuilder.js index 1fe120d1..07369cd0 100644 --- a/src/backend/tracers/WorkerBuilder.js +++ b/src/backend/tracers/WorkerBuilder.js @@ -1,13 +1,17 @@ import path from 'path'; +import { download } from '/common/util'; class WorkerBuilder { constructor() { + this.tracerPath = path.resolve(__dirname, '..', 'public', 'algorithm-visualizer.js'); this.workerPath = path.resolve(__dirname, 'js', 'worker.js'); this.build = this.build.bind(this); } build(release) { + const { tag_name } = release; + return download(`https://github.com/algorithm-visualizer/tracers.js/releases/download/${tag_name}/algorithm-visualizer.js`, this.tracerPath); } } diff --git a/src/backend/tracers/js/worker.js b/src/backend/tracers/js/worker.js index e77b9cec..681d748a 100644 --- a/src/backend/tracers/js/worker.js +++ b/src/backend/tracers/js/worker.js @@ -1,5 +1,5 @@ const process = { env: { ALGORITHM_VISUALIZER: '1' } }; -importScripts('https://unpkg.com/algorithm-visualizer@latest/dist/algorithm-visualizer.js'); +importScripts('/api/tracers/js'); const sandbox = code => { const require = name => ({ 'algorithm-visualizer': AlgorithmVisualizer }[name]); // fake require @@ -7,7 +7,7 @@ const sandbox = code => { }; onmessage = e => { - const lines = e.data.split('\n').map((line, i) => line.replace(/(.+\. *delay *)(\( *\))/g, `$1(${i})`)); + const lines = e.data.split('\n').map((line, i) => line.replace(/(\.\s*delay\s*)\(\s*\)/g, `$1(${i})`)); const code = lines.join('\n'); sandbox(code); postMessage(AlgorithmVisualizer.Tracer.traces); diff --git a/src/frontend/apis/index.js b/src/frontend/apis/index.js index a0dbf62d..f55e348c 100644 --- a/src/frontend/apis/index.js +++ b/src/frontend/apis/index.js @@ -79,7 +79,7 @@ const TracerApi = { }]), json: ({ code }) => new Promise(resolve => resolve(JSON.parse(code))), js: ({ code }, params, cancelToken) => new Promise((resolve, reject) => { - const worker = new Worker('/api/tracers/js'); + const worker = new Worker('/api/tracers/js/worker'); if (cancelToken) { cancelToken.promise.then(cancel => { worker.terminate(); diff --git a/src/frontend/core/renderers/Array2DRenderer/index.jsx b/src/frontend/core/renderers/Array2DRenderer/index.jsx index 631e0ac5..9af0cfc6 100644 --- a/src/frontend/core/renderers/Array2DRenderer/index.jsx +++ b/src/frontend/core/renderers/Array2DRenderer/index.jsx @@ -28,7 +28,7 @@ class Array2DRenderer extends Renderer { } { longestRow.map((_, i) => ( - + {i} ))