From 4a77ba7af32f9763a28e1667bc9e2f3db87e4f6e Mon Sep 17 00:00:00 2001 From: Alex Chaffee Date: Mon, 26 Mar 2018 14:20:54 -0400 Subject: [PATCH] feat(seed): add dasherized titles to unpacked filenames --- repack.js | 4 +--- unpack.js | 21 ++++++++++++++++++--- unpackedChallenge.js | 4 ++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/repack.js b/repack.js index 149d66697d..e8106437ae 100644 --- a/repack.js +++ b/repack.js @@ -3,10 +3,8 @@ import fs from 'fs-extra'; import path from 'path'; import {UnpackedChallenge, ChallengeFile} from './unpackedChallenge'; -const jsdiff = require('diff'); - // Repack all challenges from all -// seed/unpacked/00-foo/bar/000-id.html files +// seed/unpacked/00-foo/bar/000-xxx-id.html files // into // seed/challenges/00-foo/bar.json files diff --git a/unpack.js b/unpack.js index 6307b19fa1..4f3e460ff8 100644 --- a/unpack.js +++ b/unpack.js @@ -15,9 +15,10 @@ import {UnpackedChallenge, ChallengeFile} from './unpackedChallenge'; // todo: figure out embedded images etc. served from elsewhere in the project // todo: prettier/clearer CSS +let unpackedDir = path.join(__dirname, 'unpacked'); + // bundle up the test-running JS function createUnpackedBundle() { - let unpackedDir = path.join(__dirname, 'unpacked'); fs.mkdirp(unpackedDir, (err) => { if (err && err.code !== 'EEXIST') { console.log(err); @@ -44,20 +45,34 @@ function createUnpackedBundle() { let currentlyUnpackingDir = null; +async function cleanUnpackedDir(unpackedChallengeBlockDir) { + let promiseToDelete = function(filePath) { + filePath = path.join(unpackedChallengeBlockDir, filePath); + return new Promise(() => fs.unlink(filePath)); + }; + let promises = fs.readdirSync(unpackedChallengeBlockDir) + .filter(filePath => (/\.html$/i).test(filePath)) + .map(promiseToDelete); + await Promise.all(promises); +} + function unpackChallengeBlock(challengeBlock) { let challengeBlockPath = path.parse(challengeBlock.fileName); let unpackedChallengeBlockDir = path.join( - __dirname, - 'unpacked', + unpackedDir, challengeBlockPath.dir, challengeBlockPath.name ); + fs.mkdirp(unpackedChallengeBlockDir, (err) => { if (err && err.code !== 'EEXIST') { console.log(err); throw err; } + // remove existing unpacked files + cleanUnpackedDir(unpackedChallengeBlockDir); + if (currentlyUnpackingDir !== challengeBlockPath.dir) { currentlyUnpackingDir = challengeBlockPath.dir; console.log(`Unpacking into ${currentlyUnpackingDir}:`); diff --git a/unpackedChallenge.js b/unpackedChallenge.js index 79a594d51d..28931dcbb8 100644 --- a/unpackedChallenge.js +++ b/unpackedChallenge.js @@ -2,6 +2,7 @@ import fs from 'fs-extra'; import path from 'path'; import _ from 'lodash'; +import { dasherize } from '../common/utils'; const jsonLinePrefix = '//--JSON:'; const paragraphBreak = ''; @@ -28,7 +29,6 @@ class ChallengeFile { }); } - readChunks() { // todo: make this work async // todo: make sure it works with encodings @@ -142,7 +142,7 @@ class UnpackedChallenge { // eslint-disable-next-line no-nested-ternary let prefix = ((this.index < 10) ? '00' : (this.index < 100) ? '0' : '') + this.index; - return `${prefix}-${this.challenge.id}`; + return `${prefix}-${dasherize(this.challenge.title)}-${this.challenge.id}`; } expandedDescription() {