From 14699159d4638e755619d1c65f5d8cb28d30650f Mon Sep 17 00:00:00 2001 From: kyranjamie Date: Mon, 11 Jan 2021 21:07:14 +0100 Subject: [PATCH] fix: windows install issues chore(release): 4.0.0-beta.18 [skip ci] * linux icons ([6622e80](https://github.com/blockstack/stacks-wallet/commit/6622e80f4e3d32c6696f71de2ca54b59053e70dc)) * show error step on Ledger error, closes [#296](https://github.com/blockstack/stacks-wallet/issues/296) ([a2fca81](https://github.com/blockstack/stacks-wallet/commit/a2fca8128ddb16efba720c5d2a0febb81ebb2d6e)) * windows install issues ([73ea00a](https://github.com/blockstack/stacks-wallet/commit/73ea00a32dc70bf5b4d937809eb62794bdc7c435)) --- .github/workflows/debug-build.yml | 4 +-- .github/workflows/publish-version.yml | 6 ++-- CHANGELOG.md | 9 ++++++ app/app-dev.html | 1 - app/app.html | 1 - app/components/beta-notice.tsx | 6 ++-- .../transaction-list-error.tsx | 2 +- app/components/title-bar/title-bar.tsx | 2 +- app/constants/index.ts | 4 +-- app/crypto/key-generation.spec.ts | 1 - app/index.tsx | 2 +- app/main.dev.ts | 21 +++++++++----- app/main/get-user-data-path.ts | 14 ++++++++++ app/package.json | 5 ++-- app/pages/home/home.tsx | 1 - app/preload.ts | 4 ++- app/store/configureStore.ts | 2 +- app/types/index.ts | 14 ++++++++++ app/utils/stacking.ts | 1 - configs/webpack.config.base.js | 18 ++++++++++-- configs/webpack.config.main.prod.babel.js | 19 +++++-------- configs/webpack.config.renderer.dev.babel.js | 22 --------------- configs/webpack.config.renderer.prod.babel.js | 2 +- electron-builder.js | 28 ++++++++----------- jest.config.js | 1 + package.json | 7 +++-- yarn.lock | 9 +++++- 27 files changed, 118 insertions(+), 88 deletions(-) create mode 100644 app/main/get-user-data-path.ts diff --git a/.github/workflows/debug-build.yml b/.github/workflows/debug-build.yml index c1cb6e47b..25800b4c9 100644 --- a/.github/workflows/debug-build.yml +++ b/.github/workflows/debug-build.yml @@ -39,7 +39,7 @@ jobs: - os: windows-latest NPM_COMMAND: win - UPLOAD_ASSETS: release/**/*.msi + UPLOAD_ASSETS: release/**/*.exe CSC_LINK_SECRET_NAME: CODE_SIGNING_CERTIFICATE_WINDOWS CSC_KEY_PASSWORD_SECRET_NAME: CODE_SIGNING_PASSWORD_WINDOWS @@ -56,7 +56,7 @@ jobs: id: cache-node-modules with: path: '**/node_modules' - key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} + key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-${{ hashFiles('**/package.json') }} - name: Variables id: vars diff --git a/.github/workflows/publish-version.yml b/.github/workflows/publish-version.yml index 6a75b960e..71eb7f2fb 100644 --- a/.github/workflows/publish-version.yml +++ b/.github/workflows/publish-version.yml @@ -31,7 +31,7 @@ jobs: - os: windows-latest NPM_COMMAND: win - UPLOAD_ASSETS: release/**/*.msi + UPLOAD_ASSETS: release/**/*.exe CSC_LINK_SECRET_NAME: CODE_SIGNING_CERTIFICATE_WINDOWS CSC_KEY_PASSWORD_SECRET_NAME: CODE_SIGNING_PASSWORD_WINDOWS @@ -144,11 +144,11 @@ jobs: max-parallel: 2 matrix: stx_network: [testnet, mainnet] - ext: [dmg, msi, deb, rpm] + ext: [dmg, exe, deb, rpm] include: - ext: dmg os: mac - - ext: msi + - ext: exe os: win - ext: rpm os: linux diff --git a/CHANGELOG.md b/CHANGELOG.md index 2865019a8..cce4aee58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# [4.0.0-beta.18](https://github.com/blockstack/stacks-wallet/compare/v4.0.0-beta.17...v4.0.0-beta.18) (2021-01-11) + + +### Bug Fixes + +* linux icons ([6622e80](https://github.com/blockstack/stacks-wallet/commit/6622e80f4e3d32c6696f71de2ca54b59053e70dc)) +* show error step on Ledger error, closes [#296](https://github.com/blockstack/stacks-wallet/issues/296) ([a2fca81](https://github.com/blockstack/stacks-wallet/commit/a2fca8128ddb16efba720c5d2a0febb81ebb2d6e)) +* windows install issues ([73ea00a](https://github.com/blockstack/stacks-wallet/commit/73ea00a32dc70bf5b4d937809eb62794bdc7c435)) + # [4.0.0-beta.17](https://github.com/blockstack/stacks-wallet/compare/v4.0.0-beta.16...v4.0.0-beta.17) (2021-01-11) diff --git a/app/app-dev.html b/app/app-dev.html index 4e31c5a4a..cb9b1f509 100644 --- a/app/app-dev.html +++ b/app/app-dev.html @@ -2,7 +2,6 @@ - Stacks Wallet diff --git a/app/app.html b/app/app.html index b7c58c072..c0a5d9b91 100644 --- a/app/app.html +++ b/app/app.html @@ -2,7 +2,6 @@ - Stacks Wallet = ({ node, erro {usingPbcHostedNode && ( <> - Unable to connect to the Blockstack PBC hosted node. + Unable to connect to the Hiro Systems PBC hosted node.
void openExternalLink(STATUS_PAGE_URL)}> Check the status page diff --git a/app/components/title-bar/title-bar.tsx b/app/components/title-bar/title-bar.tsx index a2423f747..80ff52227 100644 --- a/app/components/title-bar/title-bar.tsx +++ b/app/components/title-bar/title-bar.tsx @@ -36,7 +36,7 @@ export const TitleBar: FC = () => { const content = ( diff --git a/app/constants/index.ts b/app/constants/index.ts index 65ea9ba87..69cd71d7e 100644 --- a/app/constants/index.ts +++ b/app/constants/index.ts @@ -2,9 +2,9 @@ import packageJson from '../../package.json'; type Environments = 'development' | 'testing' | 'production'; -export const NETWORK = process.env.STX_NETWORK as 'mainnet' | 'testnet'; +export const NETWORK = CONFIG.STX_NETWORK; -export const ENV = (process.env.NODE_ENV ?? 'production') as Environments; +export const ENV = (CONFIG.NODE_ENV ?? 'production') as Environments; export const MNEMONIC_ENTROPY = 256; diff --git a/app/crypto/key-generation.spec.ts b/app/crypto/key-generation.spec.ts index 0ca954934..aca29308e 100644 --- a/app/crypto/key-generation.spec.ts +++ b/app/crypto/key-generation.spec.ts @@ -15,7 +15,6 @@ describe(deriveKey.name, () => { const pass = 'f255cadb0af84854819c63f26c53e1a9'; const { derivedKeyHash } = await deriveKey({ salt, pass }); const hash = Buffer.from(derivedKeyHash).toString('hex'); - console.log(hash); expect(hash).toEqual( 'd941c6ec3f04fa67c68b497169986588436b1697aa6b3a93218152658e5c494d2e3da9ea93522f0e4cb14b414b57b463' ); diff --git a/app/index.tsx b/app/index.tsx index 264e01c53..9e6d94fbe 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -7,7 +7,7 @@ import { configureStore, history } from './store/configureStore'; const { store, persistor } = configureStore(); -const AppContainer = process.env.PLAIN_HMR ? Fragment : ReactHotAppContainer; +const AppContainer = CONFIG.PLAIN_HMR ? Fragment : ReactHotAppContainer; document.addEventListener('DOMContentLoaded', () => { // eslint-disable-next-line @typescript-eslint/no-var-requires diff --git a/app/main.dev.ts b/app/main.dev.ts index 42a9a988c..f11d73876 100644 --- a/app/main.dev.ts +++ b/app/main.dev.ts @@ -18,15 +18,16 @@ import 'regenerator-runtime/runtime'; import path from 'path'; import { app, BrowserWindow, clipboard, ipcMain, Menu, session } from 'electron'; import { autoUpdater } from 'electron-updater'; +import Store from 'electron-store'; import log from 'electron-log'; import windowState from 'electron-window-state'; import contextMenu from 'electron-context-menu'; -import Store from 'electron-store'; import MenuBuilder from './menu'; import { deriveKey } from './crypto/key-generation'; import { NETWORK } from './constants/index'; import { validateConfig } from './main/validate-config'; +import { getUserDataPath } from './main/get-user-data-path'; // CSP enabled in production mode, don't warn in development delete process.env.ELECTRON_ENABLE_SECURITY_WARNINGS; @@ -54,6 +55,9 @@ if (process.env.NODE_ENV === 'development' || process.env.DEBUG_PROD === 'true') require('electron-debug')(); } +app.setPath('userData', getUserDataPath(app)); +app.setPath('logs', path.join(getUserDataPath(app), 'logs')); + const installExtensions = () => { const installer = require('electron-devtools-installer'); const forceDownload = !!process.env.UPGRADE_EXTENSIONS; @@ -69,6 +73,10 @@ const createWindow = async () => { await installExtensions(); } + // https://github.com/electron/electron/issues/22995 + session.defaultSession.setSpellCheckerDictionaryDownloadURL('https://00.00/'); + session.fromPartition('some-partition').setSpellCheckerDictionaryDownloadURL('https://00.00/'); + const mainWindowState = windowState({ defaultWidth: 1024, defaultHeight: 728, @@ -88,8 +96,10 @@ const createWindow = async () => { frame: process.platform !== 'darwin', titleBarStyle: process.platform === 'darwin' ? 'hidden' : 'default', icon: iconPath, + title: `Stacks Wallet` + (NETWORK === 'testnet' ? ' Testnet' : ''), webPreferences: { disableBlinkFeatures: 'Auxclick', + spellcheck: false, webSecurity: true, nodeIntegration: false, nodeIntegrationInWorker: false, @@ -148,11 +158,9 @@ const createWindow = async () => { // eslint-disable-next-line new AppUpdater(); - session - .fromPartition('some-partition') - .setPermissionRequestHandler((_webContents, _permission, callback) => { - callback(false); - }); + session.defaultSession.setPermissionRequestHandler((_webContents, _permission, callback) => { + callback(false); + }); }; app.on('web-contents-created', (_event, contents) => { @@ -191,7 +199,6 @@ ipcMain.handle('store-get', (_e, { key }: any) => store.get(key)); ipcMain.handle('store-delete', (_e, { key }: any) => store.delete(key)); // ipcMain.handle('store-getEntireStore', () => store.store); ipcMain.handle('store-clear', () => store.clear()); - ipcMain.on('store-getEntireStore', event => { event.returnValue = store.store; }); diff --git a/app/main/get-user-data-path.ts b/app/main/get-user-data-path.ts new file mode 100644 index 000000000..a7d50787a --- /dev/null +++ b/app/main/get-user-data-path.ts @@ -0,0 +1,14 @@ +import { App } from 'electron'; +import path from 'path'; + +export function getUserDataPath(app: App) { + const appId = 'so.hiro.StacksWallet'; + const appData = app.getPath('appData'); + const network = process.env.STX_NETWORK === 'mainnet' ? '' : 'Testnet'; + if (CONFIG.NODE_ENV === 'development') { + const devName = `${appId}${network}Dev`; + return path.join(appData, devName); + } + const prodName = `${appId}${network}`; + return path.join(appData, prodName); +} diff --git a/app/package.json b/app/package.json index 134dd5be6..95022ce53 100644 --- a/app/package.json +++ b/app/package.json @@ -1,11 +1,10 @@ { - "name": "stacks-wallet", - "version": "4.0.0-beta.8", + "name": "stacks-wallet-inner-package", "description": "Stacks Wallet v4 — Participate in Stacking to earn bitcoin rewards", "main": "./main.prod.js", "author": { "email": "info@blockstack.com", - "name": "Blockstack PBC" + "name": "Hiro Systems PBC" }, "scripts": { "electron-rebuild": "node -r ../internals/scripts/BabelRegister.js ../internals/scripts/ElectronRebuild.js", diff --git a/app/pages/home/home.tsx b/app/pages/home/home.tsx index 1bb38af94..eeea12a45 100644 --- a/app/pages/home/home.tsx +++ b/app/pages/home/home.tsx @@ -50,7 +50,6 @@ import { HomeLayout } from './home-layout'; export const Home: FC = () => { const dispatch = useDispatch(); - const { address, balance, diff --git a/app/preload.ts b/app/preload.ts index baf303dc5..25632e109 100644 --- a/app/preload.ts +++ b/app/preload.ts @@ -17,7 +17,7 @@ if (process.env.NODE_ENV === 'development') { if (process.env.START_HOT) { // Dynamically insert the bundled app script in the renderer process - const port = process.env.PORT || 1212; + const port = 1212; scriptsToLoad.push(`http://localhost:${port}/dist/renderer.dev.js`); } else { scriptsToLoad.push('./dist/renderer.prod.js'); @@ -91,6 +91,8 @@ const walletApi = { }, contextMenu: (menuItems: any) => ipcRenderer.send('context-menu-open', { menuItems }), + + installPath: () => ipcRenderer.sendSync('installPath'), }; declare global { diff --git a/app/store/configureStore.ts b/app/store/configureStore.ts index 10d293874..b3658f0eb 100644 --- a/app/store/configureStore.ts +++ b/app/store/configureStore.ts @@ -2,7 +2,7 @@ import * as configureStoreDev from './configureStore.dev'; import * as configureStoreProd from './configureStore.prod'; const selectedConfigureStore = - process.env.NODE_ENV === 'production' ? configureStoreProd : configureStoreDev; + CONFIG.NODE_ENV === 'production' ? configureStoreProd : configureStoreDev; export const { configureStore } = selectedConfigureStore; diff --git a/app/types/index.ts b/app/types/index.ts index 48583d7dc..923e3fe7d 100644 --- a/app/types/index.ts +++ b/app/types/index.ts @@ -1 +1,15 @@ export type WindowActiveState = 'focused' | 'blurred'; + +declare global { + const CONFIG: { + NODE_ENV: 'development' | 'production'; + DEBUG_PROD: string; + STX_NETWORK: 'testnet' | 'mainnet'; + PLAIN_HMR?: string; + START_HOT: boolean; + PORT?: number; + PULL_REQUEST?: string; + BRANCH_NAME?: string; + SHA?: string; + }; +} diff --git a/app/utils/stacking.ts b/app/utils/stacking.ts index 5c8c1a67d..62fad8d34 100644 --- a/app/utils/stacking.ts +++ b/app/utils/stacking.ts @@ -22,7 +22,6 @@ interface ConvertToPoxAddressBtc { export function convertPoxAddressToBtc(network: 'mainnet' | 'testnet') { return ({ version, hashbytes }: ConvertToPoxAddressBtc) => { const ver = new BN(version).toNumber() as AddressHashMode; - console.log({ ver }); if (ver === AddressHashMode.SerializeP2WPKH || ver === AddressHashMode.SerializeP2WSH) return null; return address.toBase58Check(hashbytes, poxKeyToVersionBytesMap[network][ver]); diff --git a/configs/webpack.config.base.js b/configs/webpack.config.base.js index 8860e0f02..c7ac725a5 100644 --- a/configs/webpack.config.base.js +++ b/configs/webpack.config.base.js @@ -5,6 +5,8 @@ import path from 'path'; import webpack from 'webpack'; import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin'; +import ExtendedDefinePlugin from 'extended-define-webpack-plugin'; + import { dependencies as externals } from '../app/package.json'; // eslint-disable-next-line import/no-default-export @@ -67,9 +69,19 @@ export default { }, plugins: [ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'production', - SHA: '', + new ExtendedDefinePlugin({ + CONFIG: { + NODE_ENV: process.env.NODE_ENV, + PLAIN_HMR: process.env.PLAIN_HMR, + STX_NETWORK: process.env.STX_NETWORK || 'testnet', + DEBUG_PROD: process.env.DEBUG_PROD, + START_HOT: process.env.START_HOT, + PORT: process.env.PORT, + PULL_REQUEST: process.env.PULL_REQUEST, + BRANCH_NAME: process.env.BRANCH_NAME, + SHA: process.env.SHA, + PULL_REQUEST: process.env.PULL_REQUEST, + }, }), ], }; diff --git a/configs/webpack.config.main.prod.babel.js b/configs/webpack.config.main.prod.babel.js index 2dda25a53..e204aeb91 100644 --- a/configs/webpack.config.main.prod.babel.js +++ b/configs/webpack.config.main.prod.babel.js @@ -31,18 +31,12 @@ export default merge(baseConfig, { filename: './app/main.prod.js', }, - // optimization: { - // minimizer: process.env.E2E_BUILD - // ? [] - // : [ - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - // new TerserPlugin({ - // parallel: true, - // sourceMap: true, - // cache: true, - // }), - // ], - // }, + optimization: { + minimizer: [ + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + // new TerserPlugin({}), + ], + }, plugins: [ // eslint-disable-next-line @typescript-eslint/no-unsafe-call @@ -65,6 +59,7 @@ export default merge(baseConfig, { DEBUG_PROD: false, START_MINIMIZED: false, E2E_BUILD: false, + STX_NETWORK: process.env.STX_NETWORK, }), ], diff --git a/configs/webpack.config.renderer.dev.babel.js b/configs/webpack.config.renderer.dev.babel.js index 7fda8d491..7fb5e2efb 100644 --- a/configs/webpack.config.renderer.dev.babel.js +++ b/configs/webpack.config.renderer.dev.babel.js @@ -125,32 +125,10 @@ export default merge(baseConfig, { new webpack.NoEmitOnErrorsPlugin(), - /** - * Create global constants which can be configured at compile time. - * - * Useful for allowing different behaviour between development builds and - * release builds - * - * NODE_ENV should be production so that modules do not perform certain - * development checks - * - * By default, use 'development' as NODE_ENV. This can be overriden with - * 'staging', for example, by changing the ENV variables in the npm scripts - */ - new webpack.EnvironmentPlugin({ - NODE_ENV: 'development', - STX_NETWORK: 'testnet', - SHA: '', - }), - new webpack.LoaderOptionsPlugin({ debug: true, }), - // new webpack.ProvidePlugin({ - // Buffer: ['buffer', 'Buffer'], - // }), - new CopyPlugin({ patterns: [{ from: 'node_modules/argon2-browser/dist/argon2.wasm', to: '.' }], }), diff --git a/configs/webpack.config.renderer.prod.babel.js b/configs/webpack.config.renderer.prod.babel.js index 13a0aa3c8..2e80cfd4e 100644 --- a/configs/webpack.config.renderer.prod.babel.js +++ b/configs/webpack.config.renderer.prod.babel.js @@ -127,7 +127,7 @@ export default merge(baseConfig, { new webpack.EnvironmentPlugin({ NODE_ENV: 'production', DEBUG_PROD: false, - STX_NETWORK: 'testnet', + STX_NETWORK: process.env.STX_NETWORK, E2E_BUILD: false, }), diff --git a/electron-builder.js b/electron-builder.js index d348fb5b0..f2a6ea6aa 100644 --- a/electron-builder.js +++ b/electron-builder.js @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-var-requires */ const deepMerge = require('deepmerge'); +const packageJson = require('./package.json'); const network = process.env.STX_NETWORK || 'testnet'; @@ -35,30 +36,25 @@ const baseConfig = { ], }, win: { - target: ['msi'], + // Don't use `msi` installer issues + target: ['nsis'], + publisherName: 'Hiro Systems PBC', }, mac: { hardenedRuntime: true, category: 'public.app-category.finance', }, linux: { - target: ['deb', 'rpm', 'AppImage'], + target: ['deb', 'rpm'], category: 'Development', }, directories: { buildResources: 'resources', output: 'release', }, - // publish: { - // provider: 'github', - // owner: 'blockstack', - // repo: 'blockstack', - // private: false, - // }, - // protocols: { - // name: 'stacks-wallet', - // schemes: ['stacks-wallet'], - // }, + extraMetadata: { + version: packageJson.version, + }, }; const networkConfigs = { @@ -68,7 +64,6 @@ const networkConfigs = { artifactName: 'stacks-wallet.testnet.${ext}', mac: { icon: 'icon.testnet.icns', - appId: 'so.hiro.StacksWalletTestnet', }, win: { icon: 'icon.testnet.ico', @@ -78,7 +73,8 @@ const networkConfigs = { }, // macos `Application Support` dir name extraMetadata: { - productName: 'StacksWalletTestnet', + name: 'stacks-wallet-testnet', + productName: 'Stacks Wallet Testnet', }, }, mainnet: { @@ -88,7 +84,6 @@ const networkConfigs = { artifactName: 'stacks-wallet.mainnet.${ext}', mac: { icon: 'icon.icns', - appId: 'so.hiro.StacksWallet', }, win: { icon: 'icon.mainnet.ico', @@ -97,7 +92,8 @@ const networkConfigs = { icon: './icons-mainnet', }, extraMetadata: { - productName: 'StacksWallet', + name: 'stacks-wallet', + productName: 'Stacks Wallet', }, }, }; diff --git a/jest.config.js b/jest.config.js index a7e696f26..bde4e0691 100644 --- a/jest.config.js +++ b/jest.config.js @@ -18,6 +18,7 @@ module.exports = { setupFiles: ['./internals/scripts/CheckBuildsExist.js'], globals: { api: true, + CONFIG: true, 'ts-jest': { tsconfig: 'tsconfig.tests.json', diagnostics: { diff --git a/package.json b/package.json index 63274d6e7..4aeca6ea8 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "stacks-wallet", - "version": "4.0.0-beta.17", + "version": "4.0.0-beta.18", "description": "Stacks Wallet 2.0 — Stacking", "prettier": "@stacks/prettier-config", "homepage": "https://www.blockstack.org/testnet-wallet", "author": { "email": "info@blockstack.com", - "name": "Hiro PBC" + "name": "Hiro Systems PBC" }, "scripts": { "build": "concurrently \"yarn build-main\" \"yarn build-renderer\" \"yarn build-preload\" ", @@ -26,7 +26,7 @@ "package-win": "yarn build && electron-builder build --win --x64", "postinstall": "node -r @babel/register internals/scripts/CheckNativeDep.js && electron-builder install-app-deps && yarn build-dll", "start": "cross-env NODE_ENV=production electron ./app/main.prod.js", - "start-main-dev": "cross-env START_HOT=1 NODE_ENV=development electron -r ./internals/scripts/BabelRegister ./app/main.dev.ts", + "start-main-dev": "cross-env START_HOT=1 NODE_ENV=production electron -r ./internals/scripts/BabelRegister ./app/main.dev.ts", "start-renderer-dev": "cross-env NODE_ENV=development webpack-dev-server --config configs/webpack.config.renderer.dev.babel.js", "start-preload-dev": "cross-env NODE_ENV=development webpack --watch --config configs/webpack.config.preload.babel.js", "test": "cross-env NODE_ENV=test BABEL_DISABLE_CACHE=1 jest" @@ -171,6 +171,7 @@ "eslint-plugin-prettier": "3.3.1", "eslint-plugin-react": "7.22.0", "eslint-plugin-react-hooks": "4.2.0", + "extended-define-webpack-plugin": "0.1.3", "fbjs-scripts": "2.0.0", "file-loader": "6.2.0", "husky": "4.3.6", diff --git a/yarn.lock b/yarn.lock index 730543762..291cb8c15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6002,6 +6002,13 @@ extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +extended-define-webpack-plugin@0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/extended-define-webpack-plugin/-/extended-define-webpack-plugin-0.1.3.tgz#9206739676ade0d08b475fe48bc86fc5605b47a3" + integrity sha1-kgZzlnat4NCLR1/ki8hvxWBbR6M= + dependencies: + lodash "^4.15.0" + extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -8457,7 +8464,7 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: +lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==