diff --git a/package.json b/package.json index 6a1dc13875..09e5560416 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,8 @@ "@babel/core": "^7.4.5", "@babel/register": "^7.4.4", "@babel/runtime": "^7.4.5", - "@polkadot/dev": "^0.30.0-beta.8", - "@polkadot/ts": "^0.1.58", + "@polkadot/dev": "^0.30.0-beta.10", + "@polkadot/ts": "^0.1.59", "gh-pages": "^2.0.1" } } diff --git a/packages/api-derive/src/type/HeaderExtended.ts b/packages/api-derive/src/type/HeaderExtended.ts index 3c486bb362..fe42ccb14e 100644 --- a/packages/api-derive/src/type/HeaderExtended.ts +++ b/packages/api-derive/src/type/HeaderExtended.ts @@ -19,28 +19,39 @@ export default class HeaderExtended extends Header { return; } - let item = header.digest.logs.find((log) => log.isConsensus); let slot: u64 | undefined; + const [pitem] = header.digest.logsWith('PreRuntime'); - // extract author from the consensus (substrate 1.0, digest) - if (item) { - const consensus = item.asConsensus; + // extract from the substrate 2.0 PreRuntime digest + if (pitem) { + const preRuntime = pitem.asPreRuntime; - if (consensus.isAura) { - slot = consensus.asAura[0]; + if (preRuntime.engine.isAura) { + slot = preRuntime.slot; } } else { - item = header.digest.logs.find((log) => log.isSealV0); + const [citem] = header.digest.logsWith('Consensus'); - // extract author from the seal (pre substrate 1.0, backwards compat) - if (item) { - slot = item.asSealV0.slot; + // extract author from the consensus (substrate 1.0, digest) + if (citem) { + const consensus = citem.asConsensus; + + if (consensus.engine.isAura) { + slot = consensus.slot; + } + } else { + const [sitem] = header.digest.logsWith('SealV0'); + + // extract author from the seal (pre substrate 1.0, backwards compat) + if (sitem) { + slot = sitem.asSealV0.slot; + } } } // found a slot? Great, extract the validator if (slot) { - this._author = sessionValidators[slot.toNumber() % sessionValidators.length]; + this._author = sessionValidators[slot.modn(sessionValidators.length)]; } } diff --git a/packages/api-derive/test/e2e/promise.spec.ts b/packages/api-derive/test/e2e/promise.spec.ts index 5c8dc87d5e..0ef46dbee8 100644 --- a/packages/api-derive/test/e2e/promise.spec.ts +++ b/packages/api-derive/test/e2e/promise.spec.ts @@ -10,8 +10,8 @@ import ApiPromise from '@polkadot/api/promise/Api'; import testKeyring from '@polkadot/keyring/testing'; import { WsProvider } from '@polkadot/rpc-provider'; -// const WS = 'ws://127.0.0.1:9944/'; -const WS = 'wss://poc3-rpc.polkadot.io/'; +const WS = 'ws://127.0.0.1:9944/'; +// const WS = 'wss://poc3-rpc.polkadot.io/'; describe.skip('derive e2e', () => { let api: ApiPromise; diff --git a/packages/types/src/rpc/Digest.spec.ts b/packages/types/src/rpc/Digest.spec.ts index 93d964b9dc..7bc2e2c19b 100644 --- a/packages/types/src/rpc/Digest.spec.ts +++ b/packages/types/src/rpc/Digest.spec.ts @@ -4,7 +4,7 @@ import json3 from '../json/Header.003.json'; import json4 from '../json/Header.004.0x2e2.json'; -import Digest from './Digest'; +import Digest, { ConsensusEngineId, CID_AURA, CID_BABE, CID_GRPA } from './Digest'; describe('Digest', () => { it('decodes logs with consensus', () => { @@ -34,4 +34,15 @@ describe('Digest', () => { expect(logs.length).toEqual(1); expect(logs[0].type).toEqual('Seal'); }); + + describe('ConsensusId', () => { + it('creates a valid id for aura', () => { + expect(ConsensusEngineId.stringToId('afg1')).toEqual(CID_GRPA); + expect(ConsensusEngineId.stringToId('aura')).toEqual(CID_AURA); + }); + + it('reverses an id to string for babe', () => { + expect(ConsensusEngineId.idToString(CID_BABE)).toEqual('babe'); + }); + }); }); diff --git a/packages/types/src/rpc/Digest.ts b/packages/types/src/rpc/Digest.ts index ff25fed514..8c620bf73d 100644 --- a/packages/types/src/rpc/Digest.ts +++ b/packages/types/src/rpc/Digest.ts @@ -2,7 +2,8 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { assert } from '@polkadot/util'; +import BN from 'bn.js'; +import { assert, bnToBn } from '@polkadot/util'; import Enum from '../codec/Enum'; import Struct from '../codec/Struct'; @@ -15,6 +16,12 @@ import U64 from '../primitive/U64'; import AuthorityId from '../type/AuthorityId'; import Signature from '../type/Signature'; +const CID_AURA = 0x61727561; // 'aura' +const CID_BABE = 0x65626162; // 'babe' +const CID_GRPA = 0x31676661; // 'afg1' + +export { CID_AURA, CID_BABE, CID_GRPA }; + /** * @name AuthoritiesChange * @description @@ -37,6 +44,59 @@ export class ChangesTrieRoot extends Hash { * A 4-byte identifier (actually a [u8; 4]) identifying the engine, e.g. for Aura it would be [b'a', b'u', b'r', b'a'] */ export class ConsensusEngineId extends U32 { + static idToString (input: number | BN): string { + return bnToBn(input) + .toArray('le') + .map((code) => String.fromCharCode(code)) + .join(''); + } + + static stringToId (input: string): number { + return input + .split('') + .reverse() + .reduce((result, char) => (result * 256) + char.charCodeAt(0), 0); + } + + /** + * @description `true` if the engine matches aura + */ + get isAura (): boolean { + return this.eq(CID_AURA); + } + + /** + * @description `true` is the engine matches babe + */ + get isBabe (): boolean { + return this.eq(CID_BABE); + } + + /** + * @description `true` is the engine matches grandpa + */ + get isGrandpa (): boolean { + return this.eq(CID_GRPA); + } + + /** + * @description From the input bytes, decode into an aura-tuple + */ + extractSlot (bytes: Bytes): U64 { + assert(this.isAura, 'Invalid engine for asAura conversion'); + + return new U64( + // no compact prefix, only use the correct number of supplied bytes + bytes.toU8a(true).subarray(0, 8) + ); + } + + /** + * @description Override the default toString to return a 4-byte string + */ + toString (): string { + return ConsensusEngineId.idToString(this); + } } /** @@ -52,13 +112,6 @@ export class Consensus extends Tuple { }, value); } - /** - * @description `true` if the engine matches aura - */ - get isAura (): boolean { - return this.engine.eq(0x61727561); // ['a', 'u', 'r', 'a'] - } - /** * @description The wrapped engine [[ConsensusEngineId]] */ @@ -74,17 +127,10 @@ export class Consensus extends Tuple { } /** - * @description The slot and signature extracted from the raw data (assuming Aura) + * @description The slot extracted from the raw data (fails on non-Aura) */ - get asAura (): [U64, Signature] { - assert(this.isAura, 'Invalid engine for asAura conversion'); - - const raw = this.data.toU8a(true); - - return [ - new U64(raw.subarray(0, 4)), - new Signature(raw.subarray(64)) - ]; + get slot (): U64 { + return this.engine.extractSlot(this.data); } } @@ -178,8 +224,29 @@ export class PreRuntime extends Tuple { get data (): Bytes { return this[1] as Bytes; } + + /** + * @description The slot extracted from the raw data (fails on non-Aura) + */ + get slot (): U64 { + return this.engine.extractSlot(this.data); + } } +// Note the ordering, it aligns with numbers to the Rust implementation +// (current and previous versions are included hjere, e.g. SealV0) +const DigestItemEnumMap = { + Other, // 0 + AuthoritiesChange, // 1 + ChangesTrieRoot, // 2 + SealV0, // 3 + Consensus, // 4 + Seal, // 5 + PreRuntime // 6 +}; + +type DigestItemTypes = keyof typeof DigestItemEnumMap; + /** * @name DigestItem * @description @@ -187,17 +254,7 @@ export class PreRuntime extends Tuple { */ export class DigestItem extends Enum { constructor (value: any) { - // Note the ordering, it aligns with numbers to the Rust implementation - // (current and previous versions) - super({ - Other, // 0 - AuthoritiesChange, // 1 - ChangesTrieRoot, // 2 - SealV0, // 3 - Consensus, // 4 - Seal, // 5 - PreRuntime // 6 - }, value); + super(DigestItemEnumMap, value); } /** @@ -318,6 +375,13 @@ export class DigestItem extends Enum { toJSON (): any { return this.toHex(); } + + /** + * @description Returns the type of engine, we just override here to get the typings correct + */ + get type (): DigestItemTypes { + return super.type as DigestItemTypes; + } } /** @@ -342,14 +406,14 @@ export default class Digest extends Struct { /** * @description The [[DigestItem]] logs, filtered, filter items included. This is useful for derive functionality where only a certain type of log is to be returned. */ - logsWith (...include: Array): Vector { + logsWith (...include: Array): Vector { return this.logs.filter(({ type }) => include.includes(type)) as Vector; } /** * @description The [[DigestItem]] logs, filtered, filter items exluded. This is useful for stripping headers for eg. WASM runtime execution. */ - logsWithout (...exclude: Array): Vector { + logsWithout (...exclude: Array): Vector { return this.logs.filter(({ type }) => !exclude.includes(type)) as Vector; } } diff --git a/yarn.lock b/yarn.lock index 9de4e1091a..f1d61716d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1683,10 +1683,10 @@ universal-user-agent "^2.0.0" url-template "^2.0.8" -"@polkadot/dev@^0.30.0-beta.8": - version "0.30.0-beta.8" - resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.30.0-beta.8.tgz#a70027e9e35eb63ba309abb06f6d68f703a64e4b" - integrity sha512-NPO94R9b9z7CIyZiXOedDPvNCuaJo0+MtKuA6wYWS2s+Lq3DCccfKFPm4/vxQhTGJzmXDKkMyvporo5gPHNC5g== +"@polkadot/dev@^0.30.0-beta.10": + version "0.30.0-beta.10" + resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.30.0-beta.10.tgz#90346cf06a4fcdcac985d4bf7ecf707dbbd84f1d" + integrity sha512-ynX4DyFZME2BiDcYltewPIUpegHhhgHxC+qJSAXTkappB+3/ItFBH2T9hFWTHo3/d+DenSRBfXf0HjEdEWYQgQ== dependencies: "@babel/cli" "^7.4.4" "@babel/core" "^7.4.5" @@ -1718,7 +1718,7 @@ typedoc-plugin-markdown "^1.2.1" typedoc-plugin-no-inherit "^1.1.8" typescript "^3.5.1" - vuepress "^1.0.0-alpha.47" + vuepress "^1.0.0-beta.2" "@polkadot/keyring@^0.92.1": version "0.92.1" @@ -1731,10 +1731,12 @@ "@types/bs58" "^4.0.0" bs58 "^4.0.1" -"@polkadot/ts@^0.1.58": - version "0.1.58" - resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.1.58.tgz#bd8883d590fc5be27e1db75c5c629e6bc8c4ce5c" - integrity sha512-+veSrr59SefA43RX034eef1T8qhO15Ye0BQ1+3FxjuFBnlCVmzj6iKGuzCtp4kGp3uFeotQ3m/2xMA+akSwq4Q== +"@polkadot/ts@^0.1.59": + version "0.1.59" + resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.1.59.tgz#e7418db78ad50291a46d61a3ab34ab465c0c3bf0" + integrity sha512-+kiST4RjeuyMWu2HdqIA6Ph2AifjGvlQ5bLDe9mfuApH07h8fgtzu+xVE4FZvMkLtjyKD+FSbB/oVplq2R1WEw== + dependencies: + "@types/chrome" "^0.0.86" "@polkadot/util-crypto@^0.92.1": version "0.92.1" @@ -1835,6 +1837,13 @@ dependencies: "@types/base-x" "*" +"@types/chrome@^0.0.86": + version "0.0.86" + resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.86.tgz#1026ef8e76db4fde1859cae858d73236fe670d69" + integrity sha512-7ehebPf/5IR64SYdD2Vig0q0oUCNbWMQ29kASlNJaHVVtA5/J/DnrxnYVPCID70o7LgHdYsav6I4/XdqAxjTLQ== + dependencies: + "@types/filesystem" "*" + "@types/deasync@^0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@types/deasync/-/deasync-0.1.0.tgz#b2bd6c3fcde3cf67b8be4c2f70136ba8f157b45a" @@ -1845,6 +1854,18 @@ resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== +"@types/filesystem@*": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.29.tgz#ee3748eb5be140dcf980c3bd35f11aec5f7a3748" + integrity sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw== + dependencies: + "@types/filewriter" "*" + +"@types/filewriter@*": + version "0.0.28" + resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.28.tgz#c054e8af4d9dd75db4e63abc76f885168714d4b3" + integrity sha1-wFTor02d11205jq8dviFFocU1LM= + "@types/fs-extra@^5.0.3": version "5.1.0" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.1.0.tgz#2a325ef97901504a3828718c390d34b8426a10a1" @@ -2180,18 +2201,18 @@ source-map "~0.6.1" vue-template-es2015-compiler "^1.9.0" -"@vuepress/core@^1.0.0-alpha.48": - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/@vuepress/core/-/core-1.0.0-alpha.48.tgz#1015318396e29a7690a21f4dada43f7957fea6f0" - integrity sha512-vGYudGsRNtA9ErKOQFSv9OzUGFG4R/ypemruT99bHqdVJ89bmJyil5hOF5tesT9kPrQV+lM9QPl4yH5Q7KOYmQ== +"@vuepress/core@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vuepress/core/-/core-1.0.0-beta.2.tgz#587b02ab23c1a45239477f7e38151dc8bee314fb" + integrity sha512-gJGOcZPCMkFLzM+jwuBC3SXGU1tqYdausjAS5d0oddAYogJWOJgDugY8f0bjRM2+LmpF445vPpOQjReWv+v2KA== dependencies: "@babel/core" "^7.0.0" "@vue/babel-preset-app" "^3.1.1" - "@vuepress/markdown" "^1.0.0-alpha.48" - "@vuepress/markdown-loader" "^1.0.0-alpha.48" - "@vuepress/plugin-last-updated" "^1.0.0-alpha.48" - "@vuepress/plugin-register-components" "^1.0.0-alpha.48" - "@vuepress/shared-utils" "^1.0.0-alpha.48" + "@vuepress/markdown" "^1.0.0-beta.2" + "@vuepress/markdown-loader" "^1.0.0-beta.2" + "@vuepress/plugin-last-updated" "^1.0.0-beta.2" + "@vuepress/plugin-register-components" "^1.0.0-beta.2" + "@vuepress/shared-utils" "^1.0.0-beta.2" autoprefixer "^9.5.1" babel-loader "^8.0.4" cache-loader "^3.0.0" @@ -2219,25 +2240,25 @@ vuepress-plugin-container "^2.0.0" webpack "^4.8.1" webpack-chain "^4.6.0" - webpack-dev-server "^3.1.14" + webpack-dev-server "^3.5.1" webpack-merge "^4.1.2" webpackbar "3.2.0" -"@vuepress/markdown-loader@^1.0.0-alpha.48": - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/@vuepress/markdown-loader/-/markdown-loader-1.0.0-alpha.48.tgz#21861f51586b20e7d6da6c8ca09417ddc92b5237" - integrity sha512-wIwB6pAgwz1Z5b+YKLZqTTq24bT4SQ1Q5CLC1za8Tv710kciYKET+ltqZSExQ9+ZnTzaGFJX2hvCFbJA4dKMvw== +"@vuepress/markdown-loader@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vuepress/markdown-loader/-/markdown-loader-1.0.0-beta.2.tgz#6a28a39cbd725cb74405b378261a2c3d5c5b0edb" + integrity sha512-O0LEql5DHPcnSmnpymcLTv1NlR+RREEYpfo6g7C6GSfJl1phGR78srF+4j7AklWJgZxpDXHmvnQpsTWs9TpUQA== dependencies: - "@vuepress/markdown" "^1.0.0-alpha.48" + "@vuepress/markdown" "^1.0.0-beta.2" loader-utils "^1.1.0" lru-cache "^5.1.1" -"@vuepress/markdown@^1.0.0-alpha.48": - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/@vuepress/markdown/-/markdown-1.0.0-alpha.48.tgz#b049fcd52aaa18896dce95cea71c0d9ac4bd6b8d" - integrity sha512-OT+mAjTp1BwlZhRd316VHN6dSoNPkBkWaCfuKDlVzOu5/HfoMpG1P8OJzhRpZO0w0I52HXe0nL0GFHybwOBxaA== +"@vuepress/markdown@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vuepress/markdown/-/markdown-1.0.0-beta.2.tgz#a78ccd9c13f876c2aee3d317baf431f4f396d2e2" + integrity sha512-bNNmPvuNtTLpywMGHlpy72I5Bw5sXnSToKJjGtCHI08+72Pn/KuHDnWcmWLIEGiZba8jmg6L9byo5u7njVncjA== dependencies: - "@vuepress/shared-utils" "^1.0.0-alpha.48" + "@vuepress/shared-utils" "^1.0.0-beta.2" markdown-it "^8.4.1" markdown-it-anchor "^5.0.2" markdown-it-chain "^1.3.0" @@ -2245,43 +2266,43 @@ markdown-it-table-of-contents "^0.4.0" prismjs "^1.13.0" -"@vuepress/plugin-active-header-links@^1.0.0-alpha.48": - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.0.0-alpha.48.tgz#f30772d4a83f12ade91019a62ac5ce3864f19d2c" - integrity sha512-wgSxa45JhY/Lkt2YJPPmmqH4dDFBtw0A3mhpUL78mvBi77MM7lkB4dFxZ0PTOoc4zKuOqB0gLhtwclcjG3haVw== +"@vuepress/plugin-active-header-links@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.0.0-beta.2.tgz#607d6aca029df009a9572a14bc5b1544a8e5c21f" + integrity sha512-4fDbOBqtuzKyr7Pj8/K3SixjMwJykJOp9XMqAa2wNQbRnYIRZwj+pHghZgyB4rw6eCQTcXk4OJklOnb6TljvfA== dependencies: lodash.throttle "^4.1.1" -"@vuepress/plugin-last-updated@^1.0.0-alpha.48": - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-last-updated/-/plugin-last-updated-1.0.0-alpha.48.tgz#dd9f5fdb2f4994f71bd47ae4dd4ca4885d346347" - integrity sha512-qJFEov3ff789Z+ZQeJ7mX++QYDykhfktq8jCum6ilrJhV5ni1TMvhYYCGlcDu3Z86VGmt0O4TmAUf9JYzV9wXQ== +"@vuepress/plugin-last-updated@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-last-updated/-/plugin-last-updated-1.0.0-beta.2.tgz#eff76a30cbf98190814d23aecef9c8ca408cd1de" + integrity sha512-7P13jy7g4LC9AGhwG1AXY6CZiRfr7nvLkiQGKHXo4KHejpoyv0c1kYwWINi9GWoCgDMeQeCiFiWursaAUybRGw== dependencies: cross-spawn "^6.0.5" -"@vuepress/plugin-nprogress@^1.0.0-alpha.48": - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-nprogress/-/plugin-nprogress-1.0.0-alpha.48.tgz#b0f8459d518b8f8b1fdd58b9e8e3aa195bb94604" - integrity sha512-18F1TToseOpukH8auniVI5rW1i8pUw6hCFj7RurUM2whgt9y4rF8qDVuZeBAhs3/cTmdvxZwpP+W1GyL+EXMiw== +"@vuepress/plugin-nprogress@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-nprogress/-/plugin-nprogress-1.0.0-beta.2.tgz#2a18b8a1e6323ee2166420f629023dbec5fe1b5b" + integrity sha512-1DX+4R0iwtpwDbXpT+FGZ1FfAnaWXLLvuryYuGQQXpWgkMduppbprGtsQLXcEUbmzfQteOpIwVbmxZOQ8a5jiQ== dependencies: nprogress "^0.2.0" -"@vuepress/plugin-register-components@^1.0.0-alpha.48": - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-register-components/-/plugin-register-components-1.0.0-alpha.48.tgz#790a9d3dff8dce6691cac82d5778efa7ac8ca8bb" - integrity sha512-4FwiIdKQ4ZQtWnawxI597ezJr6iIRW8NRbHLZUV0dAIac4W6ktABV/wlBp9bhCL9jZBtnnn2OsMIrVePmamrUg== +"@vuepress/plugin-register-components@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-register-components/-/plugin-register-components-1.0.0-beta.2.tgz#e8df9c74775465b1a41de9ba270497e7411a24de" + integrity sha512-f5L75EkTDaM0KR8Rj+iSrwDHZM6873psHiABB6rupUra+HZ3cQLKm9iQ40Lg/8y/rE0vx0CGRHen2x60FdccQg== dependencies: - "@vuepress/shared-utils" "^1.0.0-alpha.48" + "@vuepress/shared-utils" "^1.0.0-beta.2" -"@vuepress/plugin-search@^1.0.0-alpha.48": - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-search/-/plugin-search-1.0.0-alpha.48.tgz#d373de4cb0f86a28cc83a026e19189de0b9e6461" - integrity sha512-pgaY4RPTbF/1vxLg2iZoHtzQZmybMvhDfmQcca1fOZp52cm23ZB+1uQaHYMVUAwbQJoaoGssUh4aQDaAT/GI5g== +"@vuepress/plugin-search@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vuepress/plugin-search/-/plugin-search-1.0.0-beta.2.tgz#6689234ba68da00845cbcc4512e1bf2d31916b11" + integrity sha512-l39ANikYzl5lvuLmCEy5UBrPZ1DtzitNCdf+O9lGvSUdRibL4fYclo6DIpRnyeIt4MYDRxVJ0C02Qv/9hD57Cw== -"@vuepress/shared-utils@^1.0.0-alpha.48": - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/@vuepress/shared-utils/-/shared-utils-1.0.0-alpha.48.tgz#c00edb82c58c2079be65149d917b8a4048041f60" - integrity sha512-nu30m2u9tNa5Owk24KOL/rf3kOgRxRYhksEWiAjtDsBynYB/6AkEt2ZGCu27kMgNxPCNc8XVm/6XNSRfGvbt7g== +"@vuepress/shared-utils@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vuepress/shared-utils/-/shared-utils-1.0.0-beta.2.tgz#9b14c2d62292c83250e0ca3619ef536a0bb4c034" + integrity sha512-1vxGXLrii1jb4nDH+cH8QYxC3kRJ7zTTkiVh6cPpLW5EjHUK4p6muSXJXZtrJU2dDcyRUS0VWtzoursHThwGqw== dependencies: chalk "^2.3.2" diacritics "^1.3.0" @@ -2293,14 +2314,14 @@ semver "^6.0.0" upath "^1.1.0" -"@vuepress/theme-default@^1.0.0-alpha.48": - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/@vuepress/theme-default/-/theme-default-1.0.0-alpha.48.tgz#6b140293422e97a2a53d69e610017c4f6cd3ab9a" - integrity sha512-FdC/2pOI46qT28EJ4zIlLD2EvltBX/Y6HZDoZvF+NxGi0kJX7s17/+z2yb+sVh5pQukp5avxCSwnAPoN4ZFRfw== +"@vuepress/theme-default@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@vuepress/theme-default/-/theme-default-1.0.0-beta.2.tgz#de778d90740363eb9ba52174c930c4f385dec6ae" + integrity sha512-Zit7yUDGl4cLhm/SxDW5Z11czJUrh9m70+BXyncn8GFlPfm7KTLEJkPeXNfelHfCMr0pyJ1aPxWG1tu/fAeTKQ== dependencies: - "@vuepress/plugin-active-header-links" "^1.0.0-alpha.48" - "@vuepress/plugin-nprogress" "^1.0.0-alpha.48" - "@vuepress/plugin-search" "^1.0.0-alpha.48" + "@vuepress/plugin-active-header-links" "^1.0.0-beta.2" + "@vuepress/plugin-nprogress" "^1.0.0-beta.2" + "@vuepress/plugin-search" "^1.0.0-beta.2" docsearch.js "^2.5.2" stylus "^0.54.5" stylus-loader "^3.0.2" @@ -5079,7 +5100,7 @@ expect@^24.8.0: jest-message-util "^24.8.0" jest-regex-util "^24.3.0" -express@^4.17.0: +express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -7493,7 +7514,7 @@ log-driver@^1.2.7: resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== -loglevel@^1.6.1: +loglevel@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.2.tgz#668c77948a03dbd22502a3513ace1f62a80cc372" integrity sha512-Jt2MHrCNdtIe1W6co3tF5KXGRkzF+TYffiQstfXa04mrss9IKXzAAXYWak8LbZseAQY03sH2GzMCMU0ZOUc9bg== @@ -10193,7 +10214,7 @@ selfsigned@^1.10.4: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^6.0.0, semver@^6.1.0: +semver@^6.0.0, semver@^6.1.0, semver@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== @@ -11652,13 +11673,13 @@ vuepress-plugin-container@^2.0.0: dependencies: markdown-it-container "^2.0.0" -vuepress@^1.0.0-alpha.47: - version "1.0.0-alpha.48" - resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-1.0.0-alpha.48.tgz#485b908c246297d4210999d7a010105447a6c3f0" - integrity sha512-rvEh4xS1Jp7/dC1YsT0VRmn+cP2BLn4KXSKKt9LFnUPgDwi80zARaSIN0NrpaADPQqKb2OxUY1fNV9ectzZ+QA== +vuepress@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-1.0.0-beta.2.tgz#3cc6f5de8ebfbeb5d60296903b9f1eaf10628f1f" + integrity sha512-U0qoLY3kfvow1kvpev8OndqXNDRg0g0YrwSA99BUa6Raf0RBxWQySD1U26klZiRS5AACi9wyvdC1hqKjUsQcBg== dependencies: - "@vuepress/core" "^1.0.0-alpha.48" - "@vuepress/theme-default" "^1.0.0-alpha.48" + "@vuepress/core" "^1.0.0-beta.2" + "@vuepress/theme-default" "^1.0.0-beta.2" cac "^6.3.9" envinfo "^7.2.0" @@ -11722,10 +11743,10 @@ webpack-dev-middleware@^3.7.0: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@^3.1.14: - version "3.4.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.4.1.tgz#a5fd8dec95dec410098e7d9a037ff9405395d51a" - integrity sha512-CRqZQX2ryMtrg0r3TXQPpNh76eM1HD3Wmu6zDBxIKi/d2y+4aa28Ia8weNT0bfgWpY6Vs3Oq/K8+DjfbR+tWYw== +webpack-dev-server@^3.5.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.6.0.tgz#7f675f69bf0999e5f489d1e2532182cfdf55706c" + integrity sha512-49CWhocbMzjNW2Dzo3ETnxtzifcKGx4Pa3Hx+sl0hBU5/t7zJTkOvMP1sCnu9/qGNDYW1PKCuszYQn5r2g5Sww== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -11734,19 +11755,19 @@ webpack-dev-server@^3.1.14: connect-history-api-fallback "^1.6.0" debug "^4.1.1" del "^4.1.1" - express "^4.17.0" + express "^4.17.1" html-entities "^1.2.1" http-proxy-middleware "^0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" killable "^1.0.1" - loglevel "^1.6.1" + loglevel "^1.6.2" opn "^5.5.0" portfinder "^1.0.20" schema-utils "^1.0.0" selfsigned "^1.10.4" - semver "^6.0.0" + semver "^6.1.1" serve-index "^1.9.1" sockjs "0.3.19" sockjs-client "1.3.0"