From 493892b735e3acacab615588a398d1714a56b20a Mon Sep 17 00:00:00 2001 From: Don Date: Sun, 22 Oct 2017 01:52:52 -0400 Subject: [PATCH] remove and refactor q and q-io as dependencies --- package.json | 4 +- src/actions/create.js | 98 +++++++++++++------------- src/actions/run.js | 22 +++--- src/actions/setup.js | 137 +++++++++++++++++++++++-------------- src/riko.js | 2 +- src/utils/functions.js | 72 ++++++------------- src/utils/publishScript.js | 2 +- yarn.lock | 85 +++++++++++++---------- 8 files changed, 221 insertions(+), 201 deletions(-) diff --git a/package.json b/package.json index a999421..a85aa58 100644 --- a/package.json +++ b/package.json @@ -78,6 +78,7 @@ "extract-text-webpack-plugin": "^2.1.0", "file-loader": "^0.11.2", "flow-bin": "^0.42.0", + "fs-extra": "^4.0.2", "gulp": "^3.9.1", "gulp-debug": "^3.0.0", "gulp-eslint": "^4.0.0", @@ -99,9 +100,8 @@ "postcss-loader": "^1.0.0", "pug": "^2.0.0-beta5", "pug-loader": "^2.2.1", - "q": "^1.4.1", - "q-io": "^1.13.2", "react-hot-loader": "^3.1.1", + "regex-replace": "^2.1.0", "sass-loader": "^6.0.6", "shelljs": "^0.7.8", "snyk": "^1.41.1", diff --git a/src/actions/create.js b/src/actions/create.js index a6be03d..ba44eb3 100644 --- a/src/actions/create.js +++ b/src/actions/create.js @@ -1,55 +1,49 @@ -import { regexReplaceCustomBoilerplateString, readReplaceAndWriteFilesToNewDirAsync, genericLog } from '../utils/functions'; +import { regexReplaceCustomBoilerplateString, genericLog } from '../utils/functions'; import { cwd } from '../utils/variables'; -import Q from 'q'; -import qfs from 'q-io/fs'; -import fs from 'fs'; - -export default (finalPath, actionType, fileType, fileName) => { - const fullFilePath = `${finalPath}/${fileType}`; - - return qfs.isDirectory(fullFilePath).then((isDirectory) => { - if(isDirectory) { - return qfs.makeDirectory(`${cwd}/${fileName}`) - .then(() => qfs.listTree(fullFilePath)) - .then((files) => { - const deferred = Q.defer(); - const subDirFiles = files.slice(1, files.length); - const dirs = subDirFiles.filter((file) => fs.statSync(file).isDirectory()); - - Q.all(dirs.map((dir) => { - const relativeContentDir = dir.split(fullFilePath)[1]; - const editedRelativeContentDir = regexReplaceCustomBoilerplateString(relativeContentDir, fileName); - return qfs.makeTree(`${cwd}/${fileName + editedRelativeContentDir}`); - })) - .then(() => deferred.resolve(files)) - .catch((err) => { - genericLog(`Error making Directories: >: \n ${err}`, 'red'); - deferred.reject(files); - }); - - return deferred.promise; - }) - .then((files) => { - const subDirFiles = files.filter((file) => !fs.statSync(file).isDirectory()); - return Q.all(subDirFiles.map((file) => { - const relativeContentDir = file.split(fullFilePath)[1]; - return readReplaceAndWriteFilesToNewDirAsync(fileName, file, `${cwd}/${fileName + relativeContentDir}`); - })); - }).catch((err) => { - genericLog(`err: \n ${err}`, 'red'); - }); - } else { - return qfs.read(fullFilePath) - .then((content) => { - const editedContent = regexReplaceCustomBoilerplateString(content, fileName); - return qfs.write(`${cwd}/${fileName}`, editedContent); - }) - .then(() => { - genericLog(`${fileName} created successfully`); - }) - .catch((err) => { - genericLog(`err: \n ${err}`, 'red'); - }); +import fs from 'fs-extra'; +import regexReplace from 'regex-replace'; + +export default async (finalPath, actionType, fileType, fileName) => { + const fullBinFilePath = `${finalPath}/${fileType}`; + + const filePathStats = await fs.stat(fullBinFilePath); + + //handle Directories + if(filePathStats.isDirectory()) { + try { + await fs.copy(fullBinFilePath, `${cwd}/${fileName}`); + } catch (err) { + console.error(`ERROR > error creating directory (${cwd}/${fileName})`, err); + return 1; + } + + try { + await regexReplace('<:rikofilename:>', fileName, `${cwd}/${fileName}`); + } catch (err) { + console.error(`ERROR > error replacing custom filenames in (${cwd}/${fileName})`, err); + return 1; + } + + genericLog(`${fileName} created successfully`); + + } else { //handle files + let customizedFile; + try { + customizedFile = await fs.readFile(fullBinFilePath, 'utf8'); + } catch (err) { + console.error(`ERROR > error reading file (${cwd}/${fileName})`, err); + return 1; + } + + const editedContent = regexReplaceCustomBoilerplateString(customizedFile, fileName); + + try { + await fs.writeFile(`${cwd}/${fileName}`, editedContent); + } catch (err) { + console.error(`ERROR > error writing to file (${cwd}/${fileName})`, err); + return 1; } - }); + + genericLog(`${fileName} created successfully`); + } }; \ No newline at end of file diff --git a/src/actions/run.js b/src/actions/run.js index d903fc3..727437d 100644 --- a/src/actions/run.js +++ b/src/actions/run.js @@ -2,7 +2,7 @@ import { processExitHandler, assignEnvironmentVariablesBasedOnRunCommand, doRunC removeDir, genericLog, getStats, onDevBuildActions, checkForNewPackageVersion, setEntryHelper } from '../utils/functions'; import { cwd, baseDir } from '../utils/variables'; import { getElectronPackagerOptions } from '../utils/webpackConfigUtils'; -import qfs from 'q-io/fs'; +import fs from 'fs-extra'; import os from 'os'; import path from 'path'; import { find } from 'lodash'; @@ -36,11 +36,15 @@ export default async (runCommand) => { switch (runCommand) { case 'electron-server': { - qfs.list(customConfig.output.path).then((files) => { + let electronDistfiles; + + try { + electronDistfiles = await fs.readdir(customConfig.output.path); + switch (os.platform()) { case 'darwin': { //handles open electron app on MAC - const macFile = find(files, (file) => file.match(/\b(darwin)\b/i)); + const macFile = find(electronDistfiles, (file) => file.match(/\b(darwin)\b/i)); if(macFile) { spawn('open', [`-a`, `${cwd}/${path.basename(customConfig.output.path)}/${macFile}/${customConfig.electronPackagerOptions.name}.app`], {stdio: 'inherit'}); @@ -50,15 +54,17 @@ export default async (runCommand) => { break; } + //TODO: add support for more os platforms like: Windows, Linux. default: { break; } } - }) - .catch((err) => { - logElectronRunServerError(); - console.error('ERROR >', err); - }); + + } catch (err) { + logElectronRunServerError(); + console.error(`ERROR > error reading customConfig.output.path (${customConfig.output.path})`, err); + } + break; } case 'react-prod': { diff --git a/src/actions/setup.js b/src/actions/setup.js index eb6fdea..1a281b8 100644 --- a/src/actions/setup.js +++ b/src/actions/setup.js @@ -1,65 +1,98 @@ import { genericLog, folderAlreadyPresent, sortObjByOwnKeys } from '../utils/functions'; import { cwd, baseDir, packageJson } from '../utils/variables'; -import qfs from 'q-io/fs'; +import fs from 'fs-extra'; import spawn from 'cross-spawn'; import gulpLoadPlugins from 'gulp-load-plugins'; const $ = gulpLoadPlugins(); const spawnSync = spawn.sync; -export default (actionType, projectType, projectName) => { +export default async (actionType, projectType, projectName) => { const logSuccess = () => genericLog(`${$.util.colors.blue(projectName)} was setup ${$.util.colors.green('successfully')}`); - return qfs.list(cwd) - .then(files => { - if(folderAlreadyPresent(files, projectName)) { - genericLog(`${$.util.colors.blue(projectName)} folder must not exist during setup. ${$.util.colors.red('terminating...')}`); - throw new Error(`${projectName} folder must not exist during setup.`); - } else { - switch (projectType) { - case 'electron': { - qfs.copyTree(`${baseDir}/bin/_${actionType}/react`, `${cwd}/${projectName}`) - .then(() => qfs.copyTree(`${baseDir}/bin/_${actionType}/${projectType}`, `${cwd}/${projectName}/src`)) - .then(() => qfs.read(`${cwd}/${projectName}/package.json`)) - .then((customPackageJson) => { - //adds electron as devDependencies to package.json - const packageJsonObj = JSON.parse(customPackageJson); - packageJsonObj.devDependencies = Object.assign( - {}, - packageJsonObj.devDependencies, - {electron: packageJson.dependencies.electron} - ); - packageJsonObj.devDependencies = sortObjByOwnKeys(packageJsonObj.devDependencies); - return packageJsonObj; - }) - .then((packageJsonObj) => qfs.write(`${cwd}/${projectName}/package.json`, JSON.stringify(packageJsonObj, null, "\t"))) - .then(() => logSuccess()) - .catch((err) => genericLog(err, 'red')); - break; - } - case 'node-server': - case 'react': { - qfs.copyTree(`${baseDir}/bin/_${actionType}/${projectType}`, `${cwd}/${projectName}`) - .then(() => logSuccess()) - .catch((err) => genericLog(err, 'red')); - break; - } - case 'react-native': { - //run react native shell script - spawnSync('sh', [`${baseDir}/bin/_${actionType}/${projectType}/react-native-install.sh`, projectName], {stdio: 'inherit'}); - - //copy rikoconfig.js file - qfs.makeTree(`${cwd}/${projectName}/src`) - .then(() => qfs.copy(`${baseDir}/bin/_${actionType}/${projectType}/rikoconfig.js`, `${cwd}/${projectName}/src/rikoconfig.js`)) - .then(() => genericLog(`${$.util.colors.blue(`${projectName}`)} folder created ${$.util.colors.green('successfully')}`)) - .catch((err) => genericLog(err, 'red')); - break; - } - default: { - break; - } + let userCWDfiles; + + try { + userCWDfiles = await fs.readdir(cwd); + } catch (err) { + console.error(`ERROR > error reading cwd (${cwd})`, err); + } + + if(folderAlreadyPresent(userCWDfiles, projectName)) { + genericLog(`${$.util.colors.blue(projectName)} folder must not exist during setup. ${$.util.colors.red('terminating...')}`); + throw new Error(`${projectName} folder must not exist during setup.`); + } else { + switch (projectType) { + case 'electron': { + try { + await fs.copy(`${baseDir}/bin/_${actionType}/react`, `${cwd}/${projectName}`); + await fs.copy(`${baseDir}/bin/_${actionType}/${projectType}`, `${cwd}/${projectName}/src`); + } catch (err) { + console.error(`ERROR > error copying files to new project (${projectName})`, err); + } + + let customPackageJson; + try { + customPackageJson = await fs.readJson(`${cwd}/${projectName}/package.json`); + } catch (err) { + console.error('ERROR > error reading package.json', err); } + + //adds electron as devDependencies to package.json + customPackageJson.devDependencies = Object.assign( + {}, + customPackageJson.devDependencies, + {electron: packageJson.dependencies.electron} + ); + + customPackageJson.devDependencies = sortObjByOwnKeys(customPackageJson.devDependencies); + + try { + const jsonFormattingOptions = { spaces: "\t" }; + await fs.writeJson(`${cwd}/${projectName}/package.json`, customPackageJson, jsonFormattingOptions); + } catch (err) { + console.error('ERROR > error writing to package.json', err); + } + + logSuccess(); + + break; + } + case 'node-server': + case 'react': { + try { + await fs.copy(`${baseDir}/bin/_${actionType}/${projectType}`, `${cwd}/${projectName}`); + } catch (err) { + console.error(`ERROR > error copying files to new project (${projectName})`, err); + } + + logSuccess(); + break; + } + case 'react-native': { + //run react native shell script + spawnSync('sh', [`${baseDir}/bin/_${actionType}/${projectType}/react-native-install.sh`, projectName], {stdio: 'inherit'}); + + try { + await fs.ensureDir(`${cwd}/${projectName}/src`); + } catch (err) { + console.error(`ERROR > error creating directory (${cwd}/${projectName}/src)`, err); + } + + //copy bin rikoconfig.js file to user project src directory + try { + await fs.copy(`${baseDir}/bin/_${actionType}/${projectType}/rikoconfig.js`, `${cwd}/${projectName}/src/rikoconfig.js`); + } catch (err) { + console.error(`ERROR > error copying files to new project (${projectName})`, err); + } + + genericLog(`${$.util.colors.blue(`${projectName}`)} folder created ${$.util.colors.green('successfully')}`); + + break; + } + default: { + break; } - }) - .catch((err) => genericLog(err, 'red')); + } + } }; \ No newline at end of file diff --git a/src/riko.js b/src/riko.js index 3cc94a3..25a98da 100644 --- a/src/riko.js +++ b/src/riko.js @@ -11,7 +11,7 @@ program .alias('riko') .usage(' [subcmds...]') .option('-v, --version', 'output the version number', () => { - genericLog(packageJson.version); + console.log(packageJson.version); }); //INITIALIZE diff --git a/src/utils/functions.js b/src/utils/functions.js index 16c7f55..25c5334 100644 --- a/src/utils/functions.js +++ b/src/utils/functions.js @@ -1,10 +1,8 @@ -import fs from 'fs'; +import fs from 'fs-extra'; import { includes, isEmpty, compact, forEach, find, eq, chain, reject, isNil, get, isEqual } from 'lodash'; import immutable, { List, Map } from 'immutable'; import webpack from 'webpack'; import chokidar from 'chokidar'; -import Q from 'q'; -import qfs from 'q-io/fs'; import merge from 'webpack-merge'; import path from 'path'; import updateNotifier from 'update-notifier'; @@ -140,30 +138,8 @@ export const testRequiredTypes = (assert, config, mockConfig) => { export const requiresTemplate = (projectType) => eq(projectType, 'react') || eq(projectType, 'electron'); export const removeDir = (dir) => { - const deferred = Q.defer(); - - qfs.isDirectory(dir).then((exists) => { - if(exists) { - genericLog(`Cleaning ${dir} directory: `); - qfs.removeTree(dir) - .then(() => { - genericLog(`${dir} directory removed...`); - deferred.resolve(); - }) - .catch((err) => { - genericLog(`ERROR removing ${dir}\n ${err}`, 'red'); - deferred.reject(err); - }); - } else { - genericLog(`${dir} directory does not exist...`, 'red'); - deferred.resolve(); - } - }).catch((err) => { - genericLog(`ERROR directory does not exist \n ${err}`, 'red'); - deferred.reject(err); - }); - - return deferred.promise; + genericLog(`Cleaning ${dir} directory: `); + return fs.remove(dir); }; export const pickPluginFromKey = (plugins, key) => chain(plugins).keys().includes(key).value(); @@ -216,16 +192,6 @@ export const readFilesInDirectorySync = (path) => fs.readdirSync(path).filter((f export const regexReplaceCustomBoilerplateString = (content, fileName) => content.replace(/<:rikofilename:>/g, path.basename(fileName.split('.')[0], path.extname(fileName))); -export const readReplaceAndWriteFilesToNewDirAsync = (fileName, sourceFilePath, newFilePath) => { - return qfs.read(sourceFilePath) - .then((content) => { - const editedContent = regexReplaceCustomBoilerplateString(content, fileName); - const editedFilePath = regexReplaceCustomBoilerplateString(newFilePath, fileName); - genericLog(`Creating ${editedFilePath}`); - return qfs.write(editedFilePath, editedContent); - }) -}; - export const getDefaultConfigFromRunCommand = (runCommand) => { if(isNil(runCommand)) { throw new Error (`runCommand is ${runCommand}`); @@ -366,7 +332,7 @@ export const setEntryHelper = (customConfig) => { }).toJS(); }; -export const hotExecuteFlowTests = (customConfig) => { +export const hotExecuteFlowTests = async (customConfig) => { const customTestCommand = customConfig.hotReloadingOptions.hotExecuteFlowTypeCommand; const isValidCommand = isValidPackageJsonScript(customConfig.packageJson, customTestCommand); @@ -375,22 +341,28 @@ export const hotExecuteFlowTests = (customConfig) => { if(isValidCommand || isDefaultFlowTypeHotExecCommand) { genericLog('Executing Flow...'); - return qfs.list(cwd).then((files) => { - if(includes(files, '.flowconfig')) { - const env = Object.create( process.env ); - env.NODE_ENV = 'test'; + let files; + try { + files = await fs.readdir(cwd); + } catch (err) { + genericLog(`ERROR > reading files in ${cwd}`, 'red'); + console.error(err); + } - if(isDefaultFlowTypeHotExecCommand) { - return spawnSync(`${baseDir}/node_modules/.bin/flow`, ['check'], {stdio: 'inherit', env}); - } else { - return spawn('npm', ['run', customTestCommand], {stdio: 'inherit', env}); - } + if(includes(files, '.flowconfig')) { + const env = Object.create( process.env ); + env.NODE_ENV = 'test'; + if(isDefaultFlowTypeHotExecCommand) { + return spawnSync(`${baseDir}/node_modules/.bin/flow`, ['check'], {stdio: 'inherit', env}); } else { - genericLog('no .flowconfig found', 'red'); - return false; + return spawn('npm', ['run', customTestCommand], {stdio: 'inherit', env}); } - }); + + } else { + genericLog('no .flowconfig found', 'red'); + return false; + } } else { genericLog(`Invalid command. Make sure the hot execute flowtype command you're trying to execute lives in your package.json under 'scripts'.`, 'red'); diff --git a/src/utils/publishScript.js b/src/utils/publishScript.js index 04e54aa..5a9274e 100644 --- a/src/utils/publishScript.js +++ b/src/utils/publishScript.js @@ -1,6 +1,6 @@ import { packageJson } from './variables'; import path from 'path'; -import fs from 'fs'; +import fs from 'fs-extra'; const readMePath = path.resolve(__dirname, `../../README.md`); const readMe = fs.readFileSync(readMePath, 'utf8'); diff --git a/yarn.lock b/yarn.lock index ae05cf2..1161618 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1571,12 +1571,6 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -collections@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/collections/-/collections-0.2.2.tgz#1f23026b2ef36f927eecc901e99c5f0d48fa334e" - dependencies: - weak-map "1.0.0" - color-convert@^1.3.0, color-convert@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" @@ -1609,6 +1603,10 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" +colors@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" @@ -3214,6 +3212,14 @@ fs-extra@^2.0.0: graceful-fs "^4.1.2" jsonfile "^2.1.0" +fs-extra@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-readdir-recursive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" @@ -4528,6 +4534,12 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -5128,10 +5140,6 @@ mime@1.3.4, mime@^1.2.11: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mimeparse@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/mimeparse/-/mimeparse-0.1.4.tgz#dafb02752370fd226093ae3152c271af01ac254a" - mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" @@ -5174,7 +5182,7 @@ minimatch@^3.0.4, minimatch@~3.0.2: dependencies: brace-expansion "^1.1.7" -minimatch@~0.2.11: +minimatch@~0.2.11, minimatch@~0.2.9: version "0.2.14" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" dependencies: @@ -5488,6 +5496,13 @@ nodemon@^1.11.0: undefsafe "0.0.3" update-notifier "0.5.0" +nomnom@1.6.x: + version "1.6.2" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" + dependencies: + colors "0.5.x" + underscore "~1.4.4" + "nopt@2 || 3", nopt@3.0.x, nopt@3.x, nopt@^3.0.1: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -6492,18 +6507,7 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -q-io@^1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/q-io/-/q-io-1.13.2.tgz#eea130d481ddb5e1aa1bc5a66855f7391d06f003" - dependencies: - collections "^0.2.0" - mime "^1.2.11" - mimeparse "^0.1.4" - q "^1.0.1" - qs "^1.2.1" - url2 "^0.0.0" - -q@^1.0.1, q@^1.1.2, q@^1.4.1: +q@^1.1.2: version "1.5.0" resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" @@ -6519,10 +6523,6 @@ qs@6.4.0, "qs@>= 0.4.0", qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" -qs@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-1.2.2.tgz#19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88" - qs@~6.3.0: version "6.3.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" @@ -6759,6 +6759,13 @@ regex-cache@^0.4.2: is-equal-shallow "^0.1.3" is-primitive "^2.0.0" +regex-replace@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/regex-replace/-/regex-replace-2.1.0.tgz#c3885a88dadba4f05335c41d9f18c24ae62276ea" + dependencies: + fs-extra "^4.0.2" + replace "^0.3.0" + regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" @@ -6836,6 +6843,14 @@ replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" +replace@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/replace/-/replace-0.3.0.tgz#60081721188658595ab6a794eb7fedcb4c8d39c7" + dependencies: + colors "0.5.x" + minimatch "~0.2.9" + nomnom "1.6.x" + request@2, request@^2.45.0, request@^2.72.0, request@^2.79.0, request@^2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -8077,6 +8092,10 @@ underscore@1.7.x: version "1.7.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" +underscore@~1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" + uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" @@ -8101,6 +8120,10 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" +universalify@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -8181,10 +8204,6 @@ url-parse@^1.1.8: querystringify "~1.0.0" requires-port "1.0.x" -url2@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/url2/-/url2-0.0.0.tgz#4eaabd1d5c3ac90d62ab4485c998422865a04b1a" - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -8323,10 +8342,6 @@ wbuf@^1.1.0, wbuf@^1.4.0: dependencies: minimalistic-assert "^1.0.0" -weak-map@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.0.tgz#b66e56a9df0bd25a76bbf1b514db129080614a37" - webpack-dev-middleware@^1.11.0: version "1.12.0" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz#d34efefb2edda7e1d3b5dbe07289513219651709"