From 3c12f5a18525905d8cfeeb0ee450c35465d12542 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Mon, 16 Sep 2019 12:24:28 +0300 Subject: [PATCH] refactor: remove lodash dependencies & general housekeeping --- .../services/actions/service-provider.test.ts | 12 +- .../services/cache/service-provider.test.ts | 16 +- .../services/events/service-provider.test.ts | 12 +- .../filesystem/service-provider.test.ts | 12 +- .../services/mixins/service-provider.test.ts | 14 +- .../services/queue/service-provider.test.ts | 12 +- .../schedule/service-provider.test.ts | 12 +- .../validation/service-provider.test.ts | 12 +- .../unit/core-kernel/utils/capped-set.test.ts | 31 - .../utils/delegate-calculator.test.ts | 52 +- .../utils/has-some-property.test.ts | 20 - __tests__/unit/core-kernel/utils/is.test.ts | 137 -- .../core-kernel/utils/key-value-pair.test.ts | 54 - .../unit/core-kernel/utils/nsect.test.ts | 138 -- .../utils/ordered-capped-map.test.ts | 190 --- package.json | 1 - packages/core-api/package.json | 11 +- packages/core-blockchain/package.json | 9 +- packages/core-blockchain/src/blockchain.ts | 13 +- .../src/processor/block-processor.ts | 8 +- packages/core-blockchain/src/state-machine.ts | 7 +- packages/core-database-postgres/package.json | 10 +- .../src/postgres-connection.ts | 3 +- .../src/repositories/transactions.ts | 5 +- .../src/state-builder.ts | 4 +- packages/core-database/package.json | 12 +- packages/core-database/src/block-state.ts | 16 +- .../core-database/src/database-service.ts | 11 +- packages/core-forger/package.json | 6 - packages/core-forger/src/manager.ts | 29 +- packages/core-jest-matchers/package.json | 11 +- packages/core-jest-matchers/src/api/block.ts | 4 +- packages/core-jest-matchers/src/api/peer.ts | 4 +- .../core-jest-matchers/src/api/transaction.ts | 4 +- .../src/blockchain/execute-on-entry.ts | 7 +- .../core-jest-matchers/src/models/delegate.ts | 4 +- .../src/models/transaction.ts | 4 +- .../core-jest-matchers/src/models/wallet.ts | 4 +- packages/core-kernel/package.json | 35 +- .../src/bootstrap/app/register-base-paths.ts | 2 +- .../app/register-base-service-providers.ts | 4 +- packages/core-kernel/src/helpers/index.ts | 1 - .../src/providers/plugin-configuration.ts | 5 +- .../src/providers/plugin-manifest.ts | 3 +- .../services/attributes/attribute-index.ts | 6 +- .../src/services/attributes/index.ts | 3 + .../src/services/config/drivers/local.ts | 3 +- .../src/services/config/repository.ts | 9 +- packages/core-kernel/src/services/index.ts | 3 +- .../src/services/log/drivers/pino.ts | 2 +- .../core-kernel/src/services/mixins/mixins.ts | 2 + packages/core-kernel/src/utils/capped-set.ts | 23 - .../src/utils/has-some-property.ts | 1 - packages/core-kernel/src/utils/index.ts | 22 +- packages/core-kernel/src/utils/is.ts | 74 -- .../core-kernel/src/utils/key-value-pair.ts | 97 -- packages/core-kernel/src/utils/nsect.ts | 120 -- .../src/utils/ordered-capped-map.ts | 68 - packages/core-p2p/package.json | 27 - packages/core-p2p/src/network-monitor.ts | 53 +- .../src/socket-server/payload-processor.ts | 5 +- .../src/socket-server/versions/peer.ts | 5 +- packages/core-p2p/src/utils/check-dns.ts | 5 +- packages/core-p2p/src/utils/check-ntp.ts | 14 +- packages/core-snapshots/package.json | 6 +- packages/core-snapshots/src/manager.ts | 3 +- .../core-snapshots/src/transport/index.ts | 5 +- packages/core-state/package.json | 8 +- packages/core-state/src/service-provider.ts | 4 +- .../core-state/src/wallets/wallet-state.ts | 5 +- packages/core-state/src/wallets/wallet.ts | 57 +- packages/core-transaction-pool/package.json | 14 +- .../core-transaction-pool/src/connection.ts | 39 +- .../core-transaction-pool/src/dynamic-fee.ts | 4 +- .../core-transaction-pool/src/processor.ts | 21 +- .../src/wallet-repository.ts | 19 +- packages/core-transactions/package.json | 3 +- .../src/handlers/handler-registry.ts | 24 +- .../core-transactions/src/handlers/index.ts | 3 +- packages/core-transactions/src/index.ts | 2 + .../core-transactions/src/service-provider.ts | 24 + packages/core/bin/config/testnet/app.js | 7 +- packages/core/package.json | 3 - .../src/hooks/command_not_found/suggest.ts | 4 +- packages/crypto/package.json | 10 - yarn.lock | 1159 ++++++----------- 86 files changed, 774 insertions(+), 2153 deletions(-) delete mode 100644 __tests__/unit/core-kernel/utils/capped-set.test.ts delete mode 100644 __tests__/unit/core-kernel/utils/has-some-property.test.ts delete mode 100644 __tests__/unit/core-kernel/utils/is.test.ts delete mode 100644 __tests__/unit/core-kernel/utils/key-value-pair.test.ts delete mode 100644 __tests__/unit/core-kernel/utils/nsect.test.ts delete mode 100644 __tests__/unit/core-kernel/utils/ordered-capped-map.test.ts delete mode 100644 packages/core-kernel/src/helpers/index.ts create mode 100644 packages/core-kernel/src/services/attributes/index.ts delete mode 100644 packages/core-kernel/src/utils/capped-set.ts delete mode 100644 packages/core-kernel/src/utils/has-some-property.ts delete mode 100644 packages/core-kernel/src/utils/is.ts delete mode 100644 packages/core-kernel/src/utils/key-value-pair.ts delete mode 100644 packages/core-kernel/src/utils/nsect.ts delete mode 100644 packages/core-kernel/src/utils/ordered-capped-map.ts create mode 100644 packages/core-transactions/src/service-provider.ts diff --git a/__tests__/unit/core-kernel/services/actions/service-provider.test.ts b/__tests__/unit/core-kernel/services/actions/service-provider.test.ts index 49677c5307..855ab60a6a 100644 --- a/__tests__/unit/core-kernel/services/actions/service-provider.test.ts +++ b/__tests__/unit/core-kernel/services/actions/service-provider.test.ts @@ -1,21 +1,13 @@ import "jest-extended"; import { Application } from "@packages/core-kernel/src/application"; -import { Container, interfaces, Identifiers } from "@packages/core-kernel/src/ioc"; +import { Container, Identifiers } from "@packages/core-kernel/src/ioc"; import { ServiceProvider } from "@packages/core-kernel/src/services/actions"; import { Actions } from "@packages/core-kernel/src/services/actions/actions"; let app: Application; -let container: interfaces.Container; -beforeEach(() => { - container = new Container(); - container.snapshot(); - - app = new Application(container); -}); - -afterEach(() => container.restore()); +beforeEach(() => (app = new Application(new Container()))); describe("ActionsServiceProvider", () => { it(".register", async () => { diff --git a/__tests__/unit/core-kernel/services/cache/service-provider.test.ts b/__tests__/unit/core-kernel/services/cache/service-provider.test.ts index fd5aaf7d0c..62b7a30062 100644 --- a/__tests__/unit/core-kernel/services/cache/service-provider.test.ts +++ b/__tests__/unit/core-kernel/services/cache/service-provider.test.ts @@ -1,27 +1,23 @@ import "jest-extended"; import { Application } from "@packages/core-kernel/src/application"; -import { Container, interfaces, Identifiers } from "@packages/core-kernel/src/ioc"; +import { Container, Identifiers } from "@packages/core-kernel/src/ioc"; import { ServiceProvider } from "@packages/core-kernel/src/services/cache"; import { MemoryCacheStore } from "@packages/core-kernel/src/services/cache/drivers/memory"; let app: Application; -let container: interfaces.Container; -beforeEach(() => { - container = new Container(); - container.snapshot(); - - app = new Application(container); -}); - -afterEach(() => container.restore()); +beforeEach(() => (app = new Application(new Container()))); describe("CacheServiceProvider", () => { it(".register", async () => { + expect(app.isBound(Identifiers.CacheManager)).toBeFalse(); + expect(app.isBound(Identifiers.CacheService)).toBeFalse(); + await app.resolve(ServiceProvider).register(); expect(app.isBound(Identifiers.CacheManager)).toBeTrue(); + expect(app.isBound(Identifiers.CacheService)).toBeTrue(); expect(app.get(Identifiers.CacheService)).toBeInstanceOf(MemoryCacheStore); }); }); diff --git a/__tests__/unit/core-kernel/services/events/service-provider.test.ts b/__tests__/unit/core-kernel/services/events/service-provider.test.ts index db8703128f..11525b709c 100644 --- a/__tests__/unit/core-kernel/services/events/service-provider.test.ts +++ b/__tests__/unit/core-kernel/services/events/service-provider.test.ts @@ -1,21 +1,13 @@ import "jest-extended"; import { Application } from "@packages/core-kernel/src/application"; -import { Container, interfaces, Identifiers } from "@packages/core-kernel/src/ioc"; +import { Container, Identifiers } from "@packages/core-kernel/src/ioc"; import { ServiceProvider } from "@packages/core-kernel/src/services/events"; import { MemoryEventDispatcher } from "@packages/core-kernel/src/services/events/drivers/memory"; let app: Application; -let container: interfaces.Container; -beforeEach(() => { - container = new Container(); - container.snapshot(); - - app = new Application(container); -}); - -afterEach(() => container.restore()); +beforeEach(() => (app = new Application(new Container()))); describe("EventDispatcherServiceProvider", () => { it(".register", async () => { diff --git a/__tests__/unit/core-kernel/services/filesystem/service-provider.test.ts b/__tests__/unit/core-kernel/services/filesystem/service-provider.test.ts index 4cd7902545..1f9384032c 100644 --- a/__tests__/unit/core-kernel/services/filesystem/service-provider.test.ts +++ b/__tests__/unit/core-kernel/services/filesystem/service-provider.test.ts @@ -1,21 +1,13 @@ import "jest-extended"; import { Application } from "@packages/core-kernel/src/application"; -import { Container, interfaces, Identifiers } from "@packages/core-kernel/src/ioc"; +import { Container, Identifiers } from "@packages/core-kernel/src/ioc"; import { ServiceProvider } from "@packages/core-kernel/src/services/filesystem"; import { LocalFilesystem } from "@packages/core-kernel/src/services/filesystem/drivers/local"; let app: Application; -let container: interfaces.Container; -beforeEach(() => { - container = new Container(); - container.snapshot(); - - app = new Application(container); -}); - -afterEach(() => container.restore()); +beforeEach(() => (app = new Application(new Container()))); describe("FilesystemServiceProvider", () => { it(".register", async () => { diff --git a/__tests__/unit/core-kernel/services/mixins/service-provider.test.ts b/__tests__/unit/core-kernel/services/mixins/service-provider.test.ts index 09016e59b2..619790b7e3 100644 --- a/__tests__/unit/core-kernel/services/mixins/service-provider.test.ts +++ b/__tests__/unit/core-kernel/services/mixins/service-provider.test.ts @@ -1,20 +1,13 @@ import "jest-extended"; import { Application } from "@packages/core-kernel/src/application"; -import { Container, interfaces, Identifiers } from "@packages/core-kernel/src/ioc"; +import { Container, Identifiers } from "@packages/core-kernel/src/ioc"; import { ServiceProvider } from "@packages/core-kernel/src/services/mixins"; +import { MixinService } from "@packages/core-kernel/src/services/mixins/mixins"; let app: Application; -let container: interfaces.Container; -beforeEach(() => { - container = new Container(); - container.snapshot(); - - app = new Application(container); -}); - -afterEach(() => container.restore()); +beforeEach(() => (app = new Application(new Container()))); describe("MixinServiceProvider", () => { it(".register", async () => { @@ -23,5 +16,6 @@ describe("MixinServiceProvider", () => { await app.resolve(ServiceProvider).register(); expect(app.isBound(Identifiers.MixinService)).toBeTrue(); + expect(app.get(Identifiers.MixinService)).toBeInstanceOf(MixinService); }); }); diff --git a/__tests__/unit/core-kernel/services/queue/service-provider.test.ts b/__tests__/unit/core-kernel/services/queue/service-provider.test.ts index d72772c4b1..de2fe36058 100644 --- a/__tests__/unit/core-kernel/services/queue/service-provider.test.ts +++ b/__tests__/unit/core-kernel/services/queue/service-provider.test.ts @@ -1,21 +1,13 @@ import "jest-extended"; import { Application } from "@packages/core-kernel/src/application"; -import { Container, interfaces, Identifiers } from "@packages/core-kernel/src/ioc"; +import { Container, Identifiers } from "@packages/core-kernel/src/ioc"; import { ServiceProvider } from "@packages/core-kernel/src/services/queue"; import { MemoryQueue } from "@packages/core-kernel/src/services/queue/drivers/memory"; let app: Application; -let container: interfaces.Container; -beforeEach(() => { - container = new Container(); - container.snapshot(); - - app = new Application(container); -}); - -afterEach(() => container.restore()); +beforeEach(() => (app = new Application(new Container()))); describe("QueueServiceProvider", () => { it(".register", async () => { diff --git a/__tests__/unit/core-kernel/services/schedule/service-provider.test.ts b/__tests__/unit/core-kernel/services/schedule/service-provider.test.ts index f8069a6536..ded44d3069 100644 --- a/__tests__/unit/core-kernel/services/schedule/service-provider.test.ts +++ b/__tests__/unit/core-kernel/services/schedule/service-provider.test.ts @@ -1,21 +1,13 @@ import "jest-extended"; import { Application } from "@packages/core-kernel/src/application"; -import { Container, interfaces, Identifiers } from "@packages/core-kernel/src/ioc"; +import { Container, Identifiers } from "@packages/core-kernel/src/ioc"; import { ServiceProvider } from "@packages/core-kernel/src/services/schedule"; import { Schedule } from "@packages/core-kernel/src/services/schedule/schedule"; let app: Application; -let container: interfaces.Container; -beforeEach(() => { - container = new Container(); - container.snapshot(); - - app = new Application(container); -}); - -afterEach(() => container.restore()); +beforeEach(() => (app = new Application(new Container()))); describe("LogServiceProvider", () => { it(".register", async () => { diff --git a/__tests__/unit/core-kernel/services/validation/service-provider.test.ts b/__tests__/unit/core-kernel/services/validation/service-provider.test.ts index aeca5b2dab..c310d96f91 100644 --- a/__tests__/unit/core-kernel/services/validation/service-provider.test.ts +++ b/__tests__/unit/core-kernel/services/validation/service-provider.test.ts @@ -1,21 +1,13 @@ import "jest-extended"; import { Application } from "@packages/core-kernel/src/application"; -import { Container, interfaces, Identifiers } from "@packages/core-kernel/src/ioc"; +import { Container, Identifiers } from "@packages/core-kernel/src/ioc"; import { ServiceProvider } from "@packages/core-kernel/src/services/validation"; import { JoiValidator } from "@packages/core-kernel/src/services/validation/drivers/joi"; let app: Application; -let container: interfaces.Container; -beforeEach(() => { - container = new Container(); - container.snapshot(); - - app = new Application(container); -}); - -afterEach(() => container.restore()); +beforeEach(() => (app = new Application(new Container()))); describe("ValidationServiceProvider", () => { it(".register", async () => { diff --git a/__tests__/unit/core-kernel/utils/capped-set.test.ts b/__tests__/unit/core-kernel/utils/capped-set.test.ts deleted file mode 100644 index a389a959bf..0000000000 --- a/__tests__/unit/core-kernel/utils/capped-set.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -import "jest-extended"; - -import { CappedSet } from "@packages/core-kernel/src/utils/capped-set"; - -describe("CappedSet", () => { - it("basic", () => { - const cappedSet = new CappedSet(); - - cappedSet.add(20); - - expect(cappedSet.has(20)).toBeTrue(); - expect(cappedSet.has(21)).toBeFalse(); - }); - - it("overflow", () => { - const maxSize = 10; - const cappedSet = new CappedSet(maxSize); - - for (let i = 0; i < 15; i++) { - cappedSet.add(i); - } - - for (let i = 0; i < 5; i++) { - expect(cappedSet.has(i)).toBeFalse(); - } - - for (let i = 5; i < 15; i++) { - expect(cappedSet.has(i)).toBeTrue(); - } - }); -}); diff --git a/__tests__/unit/core-kernel/utils/delegate-calculator.test.ts b/__tests__/unit/core-kernel/utils/delegate-calculator.test.ts index 0e00870e65..9feccd5d98 100644 --- a/__tests__/unit/core-kernel/utils/delegate-calculator.test.ts +++ b/__tests__/unit/core-kernel/utils/delegate-calculator.test.ts @@ -1,19 +1,30 @@ import "jest-extended"; -import { Wallets } from "@arkecosystem/core-state"; +import { app } from "@arkecosystem/core-kernel"; +import { Identifiers } from "@packages/core-kernel/src/ioc"; +import { AttributeService } from "@packages/core-kernel/src/services/attributes"; +import { Wallet } from "@packages/core-state/src/wallets"; import { Managers, Utils } from "@arkecosystem/crypto"; import { calculateApproval, calculateForgedTotal } from "@packages/core-kernel/src/utils/delegate-calculator"; -let delegate: Wallets.Wallet; -let attributes; +beforeAll(() => { + // @fixme: we modify the real app instance instead of using a container and snapshot. + // There are some context issues that result in "core-state" resolving a different container + // then we initially specify in the test so those bindings would not be available. -beforeEach(() => { - attributes = { - producedBlocks: 0, - }; + app.bind(Identifiers.AttributeService) + .to(AttributeService) + .inSingletonScope(); - delegate = new Wallets.Wallet("D61xc3yoBQDitwjqUspMPx1ooET6r1XLt7"); - delegate.setAttribute("delegate", attributes); + app.get(Identifiers.AttributeService).set("wallet"); + + app.get(Identifiers.AttributeService) + .get("wallet") + .bind("delegate"); + + app.get(Identifiers.AttributeService) + .get("wallet") + .bind("delegate.voteBalance"); Managers.configManager.set("genesisBlock.totalAmount", 1000000 * 1e8); }); @@ -21,13 +32,23 @@ beforeEach(() => { describe("Delegate Calculator", () => { describe("calculateApproval", () => { it("should calculate correctly with a height", () => { - attributes.voteBalance = Utils.BigNumber.make(10000 * 1e8); + const delegate = new Wallet("D61xc3yoBQDitwjqUspMPx1ooET6r1XLt7"); + + delegate.setAttribute("delegate", { + producedBlocks: 0, + voteBalance: Utils.BigNumber.make(10000 * 1e8), + }); expect(calculateApproval(delegate, 1)).toBe(1); }); it("should calculate correctly with 2 decimals", () => { - attributes.voteBalance = Utils.BigNumber.make(16500 * 1e8); + const delegate = new Wallet("D61xc3yoBQDitwjqUspMPx1ooET6r1XLt7"); + + delegate.setAttribute("delegate", { + producedBlocks: 0, + voteBalance: Utils.BigNumber.make(16500 * 1e8), + }); expect(calculateApproval(delegate, 1)).toBe(1.65); }); @@ -35,8 +56,13 @@ describe("Delegate Calculator", () => { describe("calculateForgedTotal", () => { it("should calculate correctly", () => { - attributes.forgedFees = Utils.BigNumber.make(10); - attributes.forgedRewards = Utils.BigNumber.make(100); + const delegate = new Wallet("D61xc3yoBQDitwjqUspMPx1ooET6r1XLt7"); + + delegate.setAttribute("delegate", { + producedBlocks: 0, + forgedFees: Utils.BigNumber.make(10), + forgedRewards: Utils.BigNumber.make(100), + }); expect(calculateForgedTotal(delegate)).toBe("110"); }); diff --git a/__tests__/unit/core-kernel/utils/has-some-property.test.ts b/__tests__/unit/core-kernel/utils/has-some-property.test.ts deleted file mode 100644 index 7e9a663d4f..0000000000 --- a/__tests__/unit/core-kernel/utils/has-some-property.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import "jest-extended"; - -import { hasSomeProperty } from "@packages/core-kernel/src/utils/has-some-property"; - -let object; -beforeEach(() => (object = { property: undefined })); - -describe("hasSomeProperty", () => { - it("should return true if the object has a given property", () => { - expect(hasSomeProperty(object, ["property"])).toBeTrue(); - }); - - it("should return true if the object has any of the given properties", () => { - expect(hasSomeProperty(object, ["not-present", "property"])).toBeTrue(); - }); - - it("should return false if the object doesn't have a given property", () => { - expect(hasSomeProperty(object, ["not-present"])).toBeFalse(); - }); -}); diff --git a/__tests__/unit/core-kernel/utils/is.test.ts b/__tests__/unit/core-kernel/utils/is.test.ts deleted file mode 100644 index 42370e5a5e..0000000000 --- a/__tests__/unit/core-kernel/utils/is.test.ts +++ /dev/null @@ -1,137 +0,0 @@ -import "jest-extended"; -import { - isUndefined, - isNil, - isEmpty, - isObject, - isFunction, - isString, - isConstructor, - isSymbol, - isArrayOfType, - isNumberArray, - isStringArray, - isBooleanArray, -} from "@packages/core-kernel/src/utils/is"; - -describe(".isUndefined", () => { - it("should pass", () => { - expect(isUndefined(undefined)).toBeTrue(); - }); - - it("should fail", () => { - expect(isUndefined("undefined")).toBeFalse(); - }); -}); - -describe(".isNil", () => { - it("should pass", () => { - expect(isNil(undefined)).toBeTrue(); - expect(isNil(null)).toBeTrue(); - }); - - it("should fail", () => { - expect(isNil("undefined")).toBeFalse(); - expect(isNil("null")).toBeFalse(); - }); -}); - -describe(".isEmpty", () => { - it("should pass", () => { - expect(isEmpty([])).toBeTrue(); - }); - - it("should fail", () => { - expect(isEmpty([1])).toBeFalse(); - }); -}); - -describe(".isObject", () => { - it("should pass", () => { - expect(isObject({ key: "value" })).toBeTrue(); - }); - - it("should fail", () => { - expect(isObject(1)).toBeFalse(); - }); -}); - -describe(".isFunction", () => { - it("should pass", () => { - expect(isFunction(new Function())).toBeTrue(); - }); - - it("should fail", () => { - expect(isFunction([])).toBeFalse(); - }); -}); - -describe(".isString", () => { - it("should pass", () => { - expect(isString("string")).toBeTrue(); - }); - - it("should fail", () => { - expect(isString(1)).toBeFalse(); - }); -}); - -describe(".isConstructor", () => { - it("should pass", () => { - expect(isConstructor(Date)).toBeTrue(); - }); - - it("should fail", () => { - expect(isConstructor([])).toBeFalse(); - }); -}); - -describe(".isSymbol", () => { - it("should pass", () => { - expect(isSymbol(Symbol.for("string"))).toBeTrue(); - }); - - it("should fail", () => { - expect(isSymbol("string")).toBeFalse(); - }); -}); - -describe(".isArrayOfType", () => { - it("should pass", () => { - expect(isArrayOfType([1], "number")).toBeTrue(); - }); - - it("should fail", () => { - expect(isArrayOfType(["string"], "number")).toBeFalse(); - }); -}); - -describe(".isNumberArray", () => { - it("should pass", () => { - expect(isNumberArray([1])).toBeTrue(); - }); - - it("should fail", () => { - expect(isNumberArray(["string"])).toBeFalse(); - }); -}); - -describe(".isStringArray", () => { - it("should pass", () => { - expect(isStringArray(["string"])).toBeTrue(); - }); - - it("should fail", () => { - expect(isStringArray([1])).toBeFalse(); - }); -}); - -describe(".isBooleanArray", () => { - it("should pass", () => { - expect(isBooleanArray([true])).toBeTrue(); - }); - - it("should fail", () => { - expect(isBooleanArray([1])).toBeFalse(); - }); -}); diff --git a/__tests__/unit/core-kernel/utils/key-value-pair.test.ts b/__tests__/unit/core-kernel/utils/key-value-pair.test.ts deleted file mode 100644 index c7cb0d05e1..0000000000 --- a/__tests__/unit/core-kernel/utils/key-value-pair.test.ts +++ /dev/null @@ -1,54 +0,0 @@ -import "jest-extended"; -import { KeyValuePair } from "@packages/core-kernel/src/utils/key-value-pair"; - -let kv: KeyValuePair; -beforeEach(() => (kv = new KeyValuePair())); - -describe("KeyValuePair", () => { - it("should return all items", () => { - kv.set("key", "value"); - - expect(kv.all()).toEqual({ key: "value" }); - }); - - it("should return all items as entries", () => { - kv.set("key", "value"); - - expect(kv.entries()).toEqual([["key", "value"]]); - }); - - it("should return all items as keys", () => { - kv.set("key", "value"); - - expect(kv.keys()).toEqual(["key"]); - }); - - it("should return all items as values", () => { - kv.set("key", "value"); - - expect(kv.values()).toEqual(["value"]); - }); - - it("should set, get and unset a value", () => { - kv.set("key", "value"); - - expect(kv.has("key")).toBeTrue(); - expect(kv.get("key")).toBe("value"); - - kv.unset("key"); - - expect(kv.has("key")).toBeFalse(); - }); - - it("should merge the given object", () => { - kv.set("key", "value"); - - expect(kv.has("key")).toBeTrue(); - expect(kv.get("key")).toBe("value"); - - kv.merge({ anotherKey: "value" }); - - expect(kv.has("anotherKey")).toBeTrue(); - expect(kv.get("anotherKey")).toBe("value"); - }); -}); diff --git a/__tests__/unit/core-kernel/utils/nsect.test.ts b/__tests__/unit/core-kernel/utils/nsect.test.ts deleted file mode 100644 index 1878f6fab7..0000000000 --- a/__tests__/unit/core-kernel/utils/nsect.test.ts +++ /dev/null @@ -1,138 +0,0 @@ -import "jest-extended"; - -import { NSect } from "@packages/core-kernel/src/utils/nsect"; - -let data: number[]; -let nAry: number; -let numberOfProbeCalls: number; -let searchCondition: (element: number) => boolean; - -async function probe(indexesToProbe: number[]): Promise { - numberOfProbeCalls++; - - // We must return the biggest index whose element satisfies the condition. So we probe - // from the biggest to the smallest and the first one that satisfies the condition is - // the one we report. - for (let i = indexesToProbe.length - 1; i >= 0; i--) { - const indexToProbe: number = indexesToProbe[i]; - - if (searchCondition(data[indexToProbe])) { - return indexToProbe; - } - } - - return undefined; -} - -beforeAll(() => { - data = []; - for (let i = 0; i < 1000; i++) { - data[i] = i * 10; - } -}); - -describe("N-section (binary search)", () => { - nAry = 2; - - const nSect = new NSect(nAry, probe); - - it("arbitrary", async () => { - numberOfProbeCalls = 0; - }); - it("lucky case", async () => { - numberOfProbeCalls = 0; - searchCondition = element => element <= 5000; - expect(data[await nSect.find(0, data.length - 1)]).toBe(5000); - expect(numberOfProbeCalls).toBe(2); - }); - - it("worst case", async () => { - numberOfProbeCalls = 0; - searchCondition = element => element <= 3560; - expect(data[await nSect.find(0, data.length - 1)]).toBe(3560); - expect(numberOfProbeCalls).toBe(9); - }); - - it("search in a sub-range", async () => { - numberOfProbeCalls = 0; - searchCondition = element => element <= 4000; - expect(data[await nSect.find(350, 500)]).toBe(4000); - expect(numberOfProbeCalls).toBe(6); - }); - - it("nonexistent", async () => { - numberOfProbeCalls = 0; - searchCondition = element => false; - expect(await nSect.find(0, data.length - 1)).toBe(undefined); - expect(numberOfProbeCalls).toBe(1); - }); - - it("biggest one", async () => { - numberOfProbeCalls = 0; - searchCondition = element => true; - expect(data[await nSect.find(0, data.length - 1)]).toBe(9990); - expect(numberOfProbeCalls).toBe(1); - }); -}); - -describe("N-section (8-ary search)", () => { - nAry = 8; - - const nSect = new NSect(nAry, probe); - - it("arbitrary", async () => { - numberOfProbeCalls = 0; - searchCondition = element => element <= 5678; - expect(data[await nSect.find(0, data.length - 1)]).toBe(5670); - expect(numberOfProbeCalls).toBe(4); - }); - - it("lucky case", async () => { - numberOfProbeCalls = 0; - searchCondition = element => element <= 5000; - expect(data[await nSect.find(0, data.length - 1)]).toBe(5000); - expect(numberOfProbeCalls).toBe(2); - }); - - it("worst case", async () => { - numberOfProbeCalls = 0; - searchCondition = element => element <= 3560; - expect(data[await nSect.find(0, data.length - 1)]).toBe(3560); - expect(numberOfProbeCalls).toBe(4); - }); - - it("search in a sub-range", async () => { - numberOfProbeCalls = 0; - searchCondition = element => element <= 4000; - expect(data[await nSect.find(350, 500)]).toBe(4000); - expect(numberOfProbeCalls).toBe(3); - }); - - it("search in a narrow range", async () => { - numberOfProbeCalls = 0; - searchCondition = element => element <= 4000; - expect(data[await nSect.find(398, 402)]).toBe(4000); - expect(numberOfProbeCalls).toBe(1); - }); - - it("search in a range with length 9", async () => { - numberOfProbeCalls = 0; - searchCondition = element => element <= 4000; - expect(data[await nSect.find(398, 407)]).toBe(4000); - expect(numberOfProbeCalls).toBe(1); - }); - - it("nonexistent", async () => { - numberOfProbeCalls = 0; - searchCondition = element => false; - expect(await nSect.find(0, data.length - 1)).toBe(undefined); - expect(numberOfProbeCalls).toBe(1); - }); - - it("biggest one", async () => { - numberOfProbeCalls = 0; - searchCondition = element => true; - expect(data[await nSect.find(0, data.length - 1)]).toBe(9990); - expect(numberOfProbeCalls).toBe(1); - }); -}); diff --git a/__tests__/unit/core-kernel/utils/ordered-capped-map.test.ts b/__tests__/unit/core-kernel/utils/ordered-capped-map.test.ts deleted file mode 100644 index 73df8bf114..0000000000 --- a/__tests__/unit/core-kernel/utils/ordered-capped-map.test.ts +++ /dev/null @@ -1,190 +0,0 @@ -import "jest-extended"; - -import { OrderedCappedMap } from "@packages/core-kernel/src/utils/ordered-capped-map"; - -describe("Ordered Capped Map", () => { - it("should set and get an entry", () => { - const store = new OrderedCappedMap(100); - store.set("foo", 1); - store.set("bar", 2); - - expect(store.get("foo")).toBe(1); - expect(store.count()).toBe(2); - }); - - it("should get an entry", () => { - const store = new OrderedCappedMap(2); - store.set("1", 1); - store.set("2", 2); - - expect(store.get("1")).toBe(1); - expect(store.get("3")).toBeUndefined(); - - store.set("3", 3); - - expect(store.has("1")).toBeFalse(); - expect(store.has("2")).toBeTrue(); - expect(store.has("3")).toBeTrue(); - }); - - it("should set entries and remove ones that exceed the maximum size", () => { - const store = new OrderedCappedMap(2); - store.set("foo", 1); - store.set("bar", 2); - - expect(store.get("foo")).toBe(1); - expect(store.get("bar")).toBe(2); - - store.set("baz", 3); - store.set("faz", 4); - - expect(store.has("foo")).toBeFalse(); - expect(store.has("bar")).toBeFalse(); - expect(store.has("baz")).toBeTrue(); - expect(store.has("faz")).toBeTrue(); - expect(store.count()).toBe(2); - }); - - it("should update an entry", () => { - const store = new OrderedCappedMap(100); - store.set("foo", 1); - - expect(store.get("foo")).toBe(1); - - store.set("foo", 2); - - expect(store.get("foo")).toBe(2); - expect(store.count()).toBe(1); - }); - - it("should return if an entry exists", () => { - const store = new OrderedCappedMap(100); - store.set("1", 1); - - expect(store.has("1")).toBeTrue(); - }); - - it("should remove the specified entrys", () => { - const store = new OrderedCappedMap(100); - store.set("1", 1); - store.set("2", 2); - - expect(store.delete("1")).toBeTrue(); - expect(store.has("1")).toBeFalse(); - expect(store.has("2")).toBeTrue(); - expect(store.delete("1")).toBeFalse(); - expect(store.count()).toBe(1); - }); - - it("should remove the specified entrys", () => { - const store = new OrderedCappedMap(2); - store.set("1", 1); - store.set("2", 2); - - expect(store.count()).toBe(2); - expect(store.delete("1")).toBeTrue(); - expect(store.has("1")).toBeFalse(); - expect(store.has("2")).toBeTrue(); - - store.delete("2"); - - expect(store.count()).toBe(0); - }); - - it("should remove all entrys", () => { - const store = new OrderedCappedMap(3); - store.set("1", 1); - store.set("2", 2); - store.set("3", 3); - - expect(store.count()).toBe(3); - - store.clear(); - - expect(store.count()).toBe(0); - }); - - it("should return the first value", () => { - const store = new OrderedCappedMap(2); - store.set("1", 1); - store.set("2", 2); - - expect(store.first()).toBe(1); - }); - - it("should return the last value", () => { - const store = new OrderedCappedMap(2); - store.set("1", 1); - store.set("2", 2); - - expect(store.last()).toBe(2); - }); - - it("should return the keys", () => { - const store = new OrderedCappedMap(3); - store.set("1", 1); - store.set("2", 2); - store.set("3", 3); - - expect(store.keys()).toEqual(["1", "2", "3"]); - }); - - it("should return the values", () => { - const store = new OrderedCappedMap(3); - store.set("1", 1); - store.set("2", 2); - store.set("3", 3); - - expect(store.values()).toEqual([1, 2, 3]); - }); - - it("should return the entry count", () => { - const store = new OrderedCappedMap(100); - store.set("1", 1); - store.set("2", 2); - - expect(store.count()).toBe(2); - - store.delete("1"); - - expect(store.count()).toBe(1); - - store.set("3", 3); - - expect(store.count()).toBe(2); - }); - - it("should resize the map", () => { - const store = new OrderedCappedMap(3); - store.set("1", 1); - store.set("2", 2); - store.set("3", 3); - - expect(store.count()).toBe(3); - - store.resize(4); - store.set("1", 1); - store.set("2", 2); - store.set("3", 3); - store.set("4", 4); - store.set("5", 5); - - expect(store.count()).toBe(4); - expect(store.has("1")).toBeFalse(); - expect(store.has("2")).toBeTrue(); - expect(store.has("3")).toBeTrue(); - expect(store.has("4")).toBeTrue(); - expect(store.has("5")).toBeTrue(); - - expect(store.count()).toBe(4); - - store.resize(2); - - expect(store.count()).toBe(2); - expect(store.has("1")).toBeFalse(); - expect(store.has("2")).toBeFalse(); - expect(store.has("3")).toBeFalse(); - expect(store.has("4")).toBeTrue(); - expect(store.has("5")).toBeTrue(); - }); -}); diff --git a/package.json b/package.json index e808b1531a..9fa093cebb 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,6 @@ "@types/nock": "^10.0.3", "@types/node": "^12.7.4", "@types/prettier": "^1.18.2", - "@types/pretty-ms": "^5.0.1", "@types/prompts": "^2.4.0", "@types/rimraf": "^2.0.2", "@types/uuid": "^3.4.5", diff --git a/packages/core-api/package.json b/packages/core-api/package.json index 38211bdb24..0838f8e2b9 100644 --- a/packages/core-api/package.json +++ b/packages/core-api/package.json @@ -25,29 +25,20 @@ "@arkecosystem/core-kernel": "^3.0.0-next.0", "@arkecosystem/core-transaction-pool": "^3.0.0-next.0", "@arkecosystem/crypto": "^3.0.0-next.0", - "@arkecosystem/utils": "^0.3.0", + "@arkecosystem/utils": "^0.4.0", "@hapi/boom": "^7.4.3", "@hapi/hapi": "^18.3.2", "@hapi/joi": "^15.1.1", "ajv": "^6.10.2", - "dayjs": "^1.8.16", "hapi-pagination": "https://github.com/faustbrian/hapi-pagination#f4991348ca779b68b8e7139cfcbc601e6d496612", "hapi-rate-limit": "^4.0.1", "ip": "^1.1.5", - "lodash.groupby": "^4.6.0", - "lodash.orderby": "^4.6.0", - "lodash.partition": "^4.6.0", - "lodash.snakecase": "^4.1.1", "semver": "^6.3.0" }, "devDependencies": { "@types/hapi__boom": "^7.4.1", "@types/hapi__joi": "^15.0.3", "@types/ip": "^1.1.0", - "@types/lodash.groupby": "^4.6.6", - "@types/lodash.orderby": "^4.6.6", - "@types/lodash.partition": "^4.6.6", - "@types/lodash.snakecase": "^4.1.6", "@types/semver": "^6.0.1" }, "engines": { diff --git a/packages/core-blockchain/package.json b/packages/core-blockchain/package.json index db08327bff..90c74f0df2 100644 --- a/packages/core-blockchain/package.json +++ b/packages/core-blockchain/package.json @@ -30,18 +30,11 @@ "@arkecosystem/crypto": "^3.0.0-next.0", "async": "^3.1.0", "delay": "^4.3.0", - "immutable": "^4.0.0-rc.12", - "lodash.get": "^4.4.2", - "pluralize": "^8.0.0", "pretty-ms": "^5.0.0", "xstate": "^4.6.7" }, "devDependencies": { - "@arkecosystem/core-p2p": "^3.0.0-next.0", - "@types/async": "^3.0.1", - "@types/lodash.get": "^4.4.6", - "@types/pluralize": "^0.0.29", - "@types/pretty-ms": "^5.0.1" + "@types/async": "^3.0.1" }, "engines": { "node": ">=10.x" diff --git a/packages/core-blockchain/src/blockchain.ts b/packages/core-blockchain/src/blockchain.ts index 06fc324707..64928ed9b5 100644 --- a/packages/core-blockchain/src/blockchain.ts +++ b/packages/core-blockchain/src/blockchain.ts @@ -2,7 +2,6 @@ import { app, Container, Contracts, Enums, Utils } from "@arkecosystem/core-kern import { Blocks, Crypto, Interfaces, Managers } from "@arkecosystem/crypto"; import async from "async"; import delay from "delay"; -import pluralize from "pluralize"; import { BlockProcessor, BlockProcessorResult } from "./processor"; import { stateMachine } from "./state-machine"; @@ -314,7 +313,9 @@ export class Blockchain implements Contracts.Blockchain.Blockchain { } const resetHeight: number = lastBlock.data.height - nblocks; - app.log.info(`Removing ${pluralize("block", nblocks, true)}. Reset to height ${resetHeight.toLocaleString()}`); + app.log.info( + `Removing ${Utils.pluralize("block", nblocks, true)}. Reset to height ${resetHeight.toLocaleString()}`, + ); this.state.lastDownloadedBlock = lastBlock.data; @@ -335,7 +336,7 @@ export class Blockchain implements Contracts.Blockchain.Blockchain { const blocks: Interfaces.IBlockData[] = await this.database.getTopBlocks(count); app.log.info( - `Removing ${pluralize( + `Removing ${Utils.pluralize( "block", blocks.length, true, @@ -387,7 +388,11 @@ export class Blockchain implements Contracts.Blockchain.Blockchain { const deleteRoundsAfter: number = Utils.roundCalculator.calculateRound(lastHeight).round; app.log.info( - `Reverting ${pluralize("block", acceptedBlocks.length, true)} back to last height: ${lastHeight}`, + `Reverting ${Utils.pluralize( + "block", + acceptedBlocks.length, + true, + )} back to last height: ${lastHeight}`, ); for (const block of acceptedBlocks.reverse()) { diff --git a/packages/core-blockchain/src/processor/block-processor.ts b/packages/core-blockchain/src/processor/block-processor.ts index e3f7ed990a..178ab063bd 100644 --- a/packages/core-blockchain/src/processor/block-processor.ts +++ b/packages/core-blockchain/src/processor/block-processor.ts @@ -59,10 +59,10 @@ export class BlockProcessor { private async verifyBlock(block: Interfaces.IBlock): Promise { if (block.verification.containsMultiSignatures) { for (const transaction of block.transactions) { - const handler: Handlers.TransactionHandler = Handlers.Registry.get( - transaction.type, - transaction.typeGroup, - ); + const handler: Handlers.TransactionHandler = app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup); + await handler.verify(transaction, this.blockchain.database.walletRepository); } diff --git a/packages/core-blockchain/src/state-machine.ts b/packages/core-blockchain/src/state-machine.ts index 8a1b0344c3..5dc54d90d3 100644 --- a/packages/core-blockchain/src/state-machine.ts +++ b/packages/core-blockchain/src/state-machine.ts @@ -1,6 +1,5 @@ import { app, Container, Contracts, Utils as AppUtils } from "@arkecosystem/core-kernel"; import { Blocks, Interfaces, Managers, Utils } from "@arkecosystem/crypto"; -import pluralize from "pluralize"; import { Blockchain } from "./blockchain"; import { blockchainMachine } from "./machines/blockchain"; @@ -213,10 +212,10 @@ blockchainMachine.actionMap = (blockchain: Blockchain) => ({ if (chained) { logger.info( - `Downloaded ${blocks.length} new ${pluralize( + `Downloaded ${blocks.length} new ${AppUtils.pluralize( "block", blocks.length, - )} accounting for a total of ${pluralize( + )} accounting for a total of ${AppUtils.pluralize( "transaction", blocks.reduce((sum, b) => sum + b.numberOfTransactions, 0), true, @@ -269,7 +268,7 @@ blockchainMachine.actionMap = (blockchain: Blockchain) => ({ await blockchain.removeBlocks(stateStorage.numberOfBlocksToRollback || random); stateStorage.numberOfBlocksToRollback = undefined; - logger.info(`Removed ${pluralize("block", random, true)}`); + logger.info(`Removed ${AppUtils.pluralize("block", random, true)}`); await blockchain.transactionPool.buildWallets(); await blockchain.p2p.getMonitor().refreshPeersAfterFork(); diff --git a/packages/core-database-postgres/package.json b/packages/core-database-postgres/package.json index 98ea6b06fd..e3ef916d87 100644 --- a/packages/core-database-postgres/package.json +++ b/packages/core-database-postgres/package.json @@ -27,21 +27,15 @@ "@arkecosystem/core-state": "^3.0.0-next.0", "@arkecosystem/core-transactions": "^3.0.0-next.0", "@arkecosystem/crypto": "^3.0.0-next.0", - "@arkecosystem/utils": "^0.3.0", + "@arkecosystem/utils": "^0.4.0", "bluebird": "^3.5.5", - "cpy-cli": "^2.0.0", "dayjs": "^1.8.15", - "lodash.chunk": "^4.2.0", - "lodash.partition": "^4.6.0", "pg-promise": "^8.7.4", - "pluralize": "^8.0.0", "sql": "^0.78.0" }, "devDependencies": { "@types/bluebird": "^3.5.27", - "@types/lodash.chunk": "^4.2.6", - "@types/lodash.partition": "^4.6.6", - "@types/pluralize": "^0.0.29" + "cpy-cli": "^2.0.0" }, "engines": { "node": ">=10.x" diff --git a/packages/core-database-postgres/src/postgres-connection.ts b/packages/core-database-postgres/src/postgres-connection.ts index f42539dffd..c5bd3d6fde 100644 --- a/packages/core-database-postgres/src/postgres-connection.ts +++ b/packages/core-database-postgres/src/postgres-connection.ts @@ -1,6 +1,5 @@ import { app, Container, Contracts, Utils } from "@arkecosystem/core-kernel"; import { Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; -import chunk from "lodash.chunk"; import path from "path"; import pgPromise, { IMain } from "pg-promise"; @@ -236,7 +235,7 @@ export class PostgresConnection implements Contracts.Database.Connection { serialized: Buffer; id: string; }> - > = chunk(all, 20000); + > = Utils.chunk(all, 20000); for (const chunk of chunks) { await this.db.task(task => { diff --git a/packages/core-database-postgres/src/repositories/transactions.ts b/packages/core-database-postgres/src/repositories/transactions.ts index bdfc3cffa0..88254a7e43 100644 --- a/packages/core-database-postgres/src/repositories/transactions.ts +++ b/packages/core-database-postgres/src/repositories/transactions.ts @@ -1,7 +1,6 @@ -import { app, Container, Contracts } from "@arkecosystem/core-kernel"; +import { app, Container, Contracts, Utils as AppUtils } from "@arkecosystem/core-kernel"; import { Crypto, Enums, Interfaces, Utils } from "@arkecosystem/crypto"; import dayjs from "dayjs"; -import partition from "lodash.partition"; import { Transaction } from "../models"; import { queries } from "../queries"; @@ -26,7 +25,7 @@ export class TransactionsRepository extends Repository implements Contracts.Data // 'search' doesn't support custom-op 'ownerId' like 'findAll' can const ops = params.filter(value => value.operator !== Contracts.Database.SearchOperator.OP_CUSTOM); - const [participants, rest] = partition(ops, op => + const [participants, rest] = AppUtils.partition(ops, op => ["sender_public_key", "recipient_id"].includes(this.propToColumnName(op.field)), ); diff --git a/packages/core-database-postgres/src/state-builder.ts b/packages/core-database-postgres/src/state-builder.ts index 6b05d6e9b7..8f8a6c6f23 100644 --- a/packages/core-database-postgres/src/state-builder.ts +++ b/packages/core-database-postgres/src/state-builder.ts @@ -15,7 +15,9 @@ export class StateBuilder { ) {} public async run(): Promise { - const transactionHandlers: Handlers.TransactionHandler[] = await Handlers.Registry.getActivatedTransactions(); + const transactionHandlers: Handlers.TransactionHandler[] = await app + .get("transactionHandlerRegistry") + .getActivatedTransactions(); const steps = transactionHandlers.length + 3; this.logger.info(`State Generation - Step 1 of ${steps}: Block Rewards`); diff --git a/packages/core-database/package.json b/packages/core-database/package.json index 3a04db1000..a92d10f77d 100644 --- a/packages/core-database/package.json +++ b/packages/core-database/package.json @@ -27,19 +27,13 @@ "@arkecosystem/core-state": "^3.0.0-next.0", "@arkecosystem/core-transactions": "^3.0.0-next.0", "@arkecosystem/crypto": "^3.0.0-next.0", - "@arkecosystem/utils": "^0.3.0", + "@arkecosystem/utils": "^0.4.0", "lodash.clonedeep": "^4.5.0", - "lodash.compact": "^3.0.1", - "lodash.snakecase": "^4.1.1", - "lodash.uniq": "^4.5.0", - "pluralize": "^8.0.0" + "lodash.snakecase": "^4.1.1" }, "devDependencies": { "@types/lodash.clonedeep": "^4.5.6", - "@types/lodash.compact": "^3.0.6", - "@types/lodash.snakecase": "^4.1.6", - "@types/lodash.uniq": "^4.5.6", - "@types/pluralize": "^0.0.29" + "@types/lodash.snakecase": "^4.1.6" }, "engines": { "node": ">=10.x" diff --git a/packages/core-database/src/block-state.ts b/packages/core-database/src/block-state.ts index 14fd217b3a..d54da0e139 100644 --- a/packages/core-database/src/block-state.ts +++ b/packages/core-database/src/block-state.ts @@ -1,4 +1,4 @@ -import { app, Contracts, Container } from "@arkecosystem/core-kernel"; +import { app, Container, Contracts } from "@arkecosystem/core-kernel"; import { Wallets } from "@arkecosystem/core-state"; import { Handlers, Interfaces as TransactionInterfaces } from "@arkecosystem/core-transactions"; import { Enums, Identities, Interfaces, Utils } from "@arkecosystem/crypto"; @@ -107,10 +107,9 @@ export class BlockState { } public async applyTransaction(transaction: Interfaces.ITransaction): Promise { - const transactionHandler: Handlers.TransactionHandler = Handlers.Registry.get( - transaction.type, - transaction.typeGroup, - ); + const transactionHandler: Handlers.TransactionHandler = app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup); let lockWallet: Contracts.State.Wallet; let lockTransaction: Interfaces.ITransactionData; @@ -131,10 +130,9 @@ export class BlockState { public async revertTransaction(transaction: Interfaces.ITransaction): Promise { const { data } = transaction; - const transactionHandler: TransactionInterfaces.TransactionHandler = Handlers.Registry.get( - transaction.type, - transaction.typeGroup, - ); + const transactionHandler: TransactionInterfaces.TransactionHandler = app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup); const sender: Contracts.State.Wallet = this.walletRepository.findByPublicKey(data.senderPublicKey); const recipient: Contracts.State.Wallet = this.walletRepository.findByAddress(data.recipientId); diff --git a/packages/core-database/src/database-service.ts b/packages/core-database/src/database-service.ts index decdbaa6f2..1f40e54635 100644 --- a/packages/core-database/src/database-service.ts +++ b/packages/core-database/src/database-service.ts @@ -560,10 +560,9 @@ export class DatabaseService implements Contracts.Database.DatabaseService { const senderId: string = Identities.Address.fromPublicKey(transaction.data.senderPublicKey); const sender: Contracts.State.Wallet = this.walletRepository.findByAddress(senderId); - const transactionHandler: Handlers.TransactionHandler = Handlers.Registry.get( - transaction.type, - transaction.typeGroup, - ); + const transactionHandler: Handlers.TransactionHandler = app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup); if (!sender.publicKey) { sender.publicKey = transaction.data.senderPublicKey; @@ -730,7 +729,9 @@ export class DatabaseService implements Contracts.Database.DatabaseService { private emitTransactionEvents(transaction: Interfaces.ITransaction): void { this.emitter.dispatch(Enums.Events.State.TransactionApplied, transaction.data); - Handlers.Registry.get(transaction.type, transaction.typeGroup).emitEvents(transaction, this.emitter); + app.get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup) + .emitEvents(transaction, this.emitter); } private registerListeners(): void { diff --git a/packages/core-forger/package.json b/packages/core-forger/package.json index 8328545676..c1c8360b2a 100644 --- a/packages/core-forger/package.json +++ b/packages/core-forger/package.json @@ -27,20 +27,14 @@ "@arkecosystem/core-state": "^3.0.0-next.0", "@arkecosystem/crypto": "^3.0.0-next.0", "delay": "^4.3.0", - "lodash.isempty": "^4.4.0", - "lodash.uniq": "^4.5.0", "node-forge": "^0.8.5", "otplib": "^11.0.1", - "pluralize": "^8.0.0", "socketcluster-client": "^14.2.2", "wif": "^2.0.6" }, "devDependencies": { - "@types/lodash.isempty": "^4.4.6", - "@types/lodash.uniq": "^4.5.6", "@types/node-forge": "^0.8.4", "@types/otplib": "^7.0.0", - "@types/pluralize": "^0.0.29", "@types/socketcluster-client": "^13.0.3", "@types/wif": "^2.0.1" }, diff --git a/packages/core-forger/src/manager.ts b/packages/core-forger/src/manager.ts index c800a6d115..3fdf03dbe8 100644 --- a/packages/core-forger/src/manager.ts +++ b/packages/core-forger/src/manager.ts @@ -1,10 +1,7 @@ -import { app, Contracts, Enums } from "@arkecosystem/core-kernel"; +import { app, Contracts, Enums, Utils as AppUtils } from "@arkecosystem/core-kernel"; import { NetworkStateStatus } from "@arkecosystem/core-p2p"; import { Wallets } from "@arkecosystem/core-state"; import { Blocks, Crypto, Interfaces, Managers, Transactions, Types } from "@arkecosystem/crypto"; -import isEmpty from "lodash.isempty"; -import uniq from "lodash.uniq"; -import pluralize from "pluralize"; import { Client } from "./client"; import { Delegate } from "./delegate"; @@ -34,7 +31,7 @@ export class ForgerManager { return; } - this.secrets = uniq(this.secrets.map(secret => secret.trim())); + this.secrets = AppUtils.uniq(this.secrets.map(secret => secret.trim())); this.delegates = this.secrets.map(passphrase => new Delegate(passphrase, this.network, password)); if (bip38) { @@ -117,7 +114,7 @@ export class ForgerManager { } else { this.logger.error(error.stack); - if (!isEmpty(this.round)) { + if (!AppUtils.isEmpty(this.round)) { this.logger.info( `Round: ${this.round.current.toLocaleString()}, height: ${this.round.lastBlock.height.toLocaleString()}`, ); @@ -184,7 +181,7 @@ export class ForgerManager { public async getTransactionsForForging(): Promise { const response: Contracts.P2P.ForgingTransactions = await this.client.getTransactions(); - if (isEmpty(response)) { + if (AppUtils.isEmpty(response)) { this.logger.error("Could not get unconfirmed transactions from transaction pool."); return []; @@ -195,7 +192,7 @@ export class ForgerManager { ); this.logger.debug( - `Received ${pluralize("transaction", transactions.length, true)} from the pool containing ${ + `Received ${AppUtils.pluralize("transaction", transactions.length, true)} from the pool containing ${ response.poolSize }`, ); @@ -221,7 +218,11 @@ export class ForgerManager { }> = networkState.getOverHeightBlockHeaders(); if (overHeightBlockHeaders.length > 0) { this.logger.info( - `Detected ${pluralize("distinct overheight block header", overHeightBlockHeaders.length, true)}.`, + `Detected ${AppUtils.pluralize( + "distinct overheight block header", + overHeightBlockHeaders.length, + true, + )}.`, ); for (const overHeightBlockHeader of overHeightBlockHeaders) { @@ -278,7 +279,7 @@ export class ForgerManager { if (activeDelegates.length > 0) { this.logger.info( - `Loaded ${pluralize("active delegate", activeDelegates.length, true)}: ${activeDelegates + `Loaded ${AppUtils.pluralize("active delegate", activeDelegates.length, true)}: ${activeDelegates .map(({ publicKey }) => `${this.usernames[publicKey]} (${publicKey})`) .join(", ")}`, ); @@ -290,9 +291,11 @@ export class ForgerManager { .map(delegate => delegate.publicKey); this.logger.info( - `Loaded ${pluralize("inactive delegate", inactiveDelegates.length, true)}: ${inactiveDelegates.join( - ", ", - )}`, + `Loaded ${AppUtils.pluralize( + "inactive delegate", + inactiveDelegates.length, + true, + )}: ${inactiveDelegates.join(", ")}`, ); } diff --git a/packages/core-jest-matchers/package.json b/packages/core-jest-matchers/package.json index 9bfc45f3f6..456ea87e77 100644 --- a/packages/core-jest-matchers/package.json +++ b/packages/core-jest-matchers/package.json @@ -23,22 +23,15 @@ "dependencies": { "@arkecosystem/core-kernel": "^3.0.0-next.0", "@arkecosystem/crypto": "^3.0.0-next.0", - "@arkecosystem/utils": "^0.3.0", + "@arkecosystem/utils": "^0.4.0", "bip39": "^3.0.2", "got": "^9.6.0", "jest-extended": "^0.11.2", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "lodash.sortby": "^4.7.0", - "superheroes": "^3.0.0", "xstate": "^4.6.7" }, "devDependencies": { "@types/bip39": "^2.4.2", - "@types/got": "^9.6.1", - "@types/lodash.get": "^4.4.6", - "@types/lodash.isequal": "^4.5.5", - "@types/lodash.sortby": "^4.7.6" + "@types/got": "^9.6.1" }, "engines": { "node": ">=10.x" diff --git a/packages/core-jest-matchers/src/api/block.ts b/packages/core-jest-matchers/src/api/block.ts index beab9658db..af1c9a79e9 100644 --- a/packages/core-jest-matchers/src/api/block.ts +++ b/packages/core-jest-matchers/src/api/block.ts @@ -1,5 +1,5 @@ +import { Utils } from "@arkecosystem/core-kernel"; import { sortBy } from "@arkecosystem/utils"; -import isEqual from "lodash.isequal"; export {}; @@ -33,7 +33,7 @@ const isValidBlock = block => { ]); const actualKeys = Object.keys(block).filter(key => allowedKeys.includes(key)); - return isEqual(sortBy(actualKeys), allowedKeys); + return Utils.isEqual(sortBy(actualKeys), allowedKeys); }; expect.extend({ diff --git a/packages/core-jest-matchers/src/api/peer.ts b/packages/core-jest-matchers/src/api/peer.ts index c068a04390..09dc2feb64 100644 --- a/packages/core-jest-matchers/src/api/peer.ts +++ b/packages/core-jest-matchers/src/api/peer.ts @@ -1,5 +1,5 @@ +import { Utils } from "@arkecosystem/core-kernel"; import { sortBy } from "@arkecosystem/utils"; -import isEqual from "lodash.isequal"; export {}; @@ -16,7 +16,7 @@ const isValidPeer = peer => { const allowedKeys = sortBy(["ip", "port"]); const actualKeys = Object.keys(peer).filter(key => allowedKeys.includes(key)); - return isEqual(sortBy(actualKeys), allowedKeys); + return Utils.isEqual(sortBy(actualKeys), allowedKeys); }; expect.extend({ diff --git a/packages/core-jest-matchers/src/api/transaction.ts b/packages/core-jest-matchers/src/api/transaction.ts index 6fa930fcb6..a6038bd0de 100644 --- a/packages/core-jest-matchers/src/api/transaction.ts +++ b/packages/core-jest-matchers/src/api/transaction.ts @@ -1,5 +1,5 @@ +import { Utils } from "@arkecosystem/core-kernel"; import { sortBy } from "@arkecosystem/utils"; -import isEqual from "lodash.isequal"; export {}; @@ -31,7 +31,7 @@ expect.extend({ return { message: () => `Expected ${JSON.stringify(actual)} to be a valid transaction`, - pass: isEqual(sortBy(actualKeys), allowedKeys), + pass: Utils.isEqual(sortBy(actualKeys), allowedKeys), }; }, }); diff --git a/packages/core-jest-matchers/src/blockchain/execute-on-entry.ts b/packages/core-jest-matchers/src/blockchain/execute-on-entry.ts index a9573f0cc2..31ac91802c 100644 --- a/packages/core-jest-matchers/src/blockchain/execute-on-entry.ts +++ b/packages/core-jest-matchers/src/blockchain/execute-on-entry.ts @@ -1,5 +1,4 @@ -import get from "lodash.get"; -import isEqual from "lodash.isequal"; +import { Utils } from "@arkecosystem/core-kernel"; export {}; @@ -21,7 +20,7 @@ expect.extend({ path = `${slugs[0]}.states.${slugs[1]}`; } - const state = get(machine.states, path); + const state: any = Utils.get(machine.states, path); const actions = transition.actions.map(action => `"${action}"`).join(", "); @@ -32,7 +31,7 @@ expect.extend({ `Expected machine to ${this.isNot ? "not " : ""} call actions ${actions} on state "${ transition.state }"`, - pass: isEqual(state.onEntry.map(action => action.type), transition.actions), + pass: Utils.isEqual(state.onEntry.map(action => action.type), transition.actions), }; }, }); diff --git a/packages/core-jest-matchers/src/models/delegate.ts b/packages/core-jest-matchers/src/models/delegate.ts index 3b73b45463..aad63f1782 100644 --- a/packages/core-jest-matchers/src/models/delegate.ts +++ b/packages/core-jest-matchers/src/models/delegate.ts @@ -1,5 +1,5 @@ +import { Utils } from "@arkecosystem/core-kernel"; import { sortBy } from "@arkecosystem/utils"; -import isEqual from "lodash.isequal"; export {}; @@ -15,7 +15,7 @@ expect.extend({ toBeDelegate: actual => { return { message: () => "Expected value to be a valid delegate", - pass: isEqual(sortBy(Object.keys(actual)), ["address", "publicKey", "username"]), + pass: Utils.isEqual(sortBy(Object.keys(actual)), ["address", "publicKey", "username"]), }; }, }); diff --git a/packages/core-jest-matchers/src/models/transaction.ts b/packages/core-jest-matchers/src/models/transaction.ts index cc6932d176..38be2f1638 100644 --- a/packages/core-jest-matchers/src/models/transaction.ts +++ b/packages/core-jest-matchers/src/models/transaction.ts @@ -1,5 +1,5 @@ +import { Utils } from "@arkecosystem/core-kernel"; import { sortBy } from "@arkecosystem/utils"; -import isEqual from "lodash.isequal"; export {}; @@ -19,7 +19,7 @@ expect.extend({ return { message: () => "Expected value to be a valid transaction", - pass: isEqual(sortBy(actualKeys), allowedKeys), + pass: Utils.isEqual(sortBy(actualKeys), allowedKeys), }; }, }); diff --git a/packages/core-jest-matchers/src/models/wallet.ts b/packages/core-jest-matchers/src/models/wallet.ts index 5160c85ba5..eec6a4111f 100644 --- a/packages/core-jest-matchers/src/models/wallet.ts +++ b/packages/core-jest-matchers/src/models/wallet.ts @@ -1,5 +1,5 @@ +import { Utils } from "@arkecosystem/core-kernel"; import { sortBy } from "@arkecosystem/utils"; -import isEqual from "lodash.isequal"; export {}; @@ -15,7 +15,7 @@ expect.extend({ toBeWallet: actual => { return { message: () => "Expected value to be a valid wallet", - pass: isEqual(sortBy(Object.keys(actual)), ["address", "publicKey"]), + pass: Utils.isEqual(sortBy(Object.keys(actual)), ["address", "publicKey"]), }; }, }); diff --git a/packages/core-kernel/package.json b/packages/core-kernel/package.json index f933039a91..c74988c407 100644 --- a/packages/core-kernel/package.json +++ b/packages/core-kernel/package.json @@ -22,10 +22,11 @@ }, "dependencies": { "@arkecosystem/crypto": "^3.0.0-next.0", - "@hapi/joi": "^16.0.0-preview", + "@arkecosystem/utils": "^0.4.0", + "@hapi/joi": "^16.0.1", "chalk": "^2.4.2", "cosmiconfig": "^5.2.1", - "cron": "^1.7.1", + "cron": "^1.7.2", "dayjs": "^1.8.16", "delay": "^4.3.0", "env-paths": "^2.2.0", @@ -33,53 +34,45 @@ "expand-home-dir": "^0.0.3", "fast-json-parse": "^1.0.3", "fs-extra": "^8.1.0", - "get-value": "^3.0.1", "got": "^9.6.0", - "has-value": "^2.0.2", "hoek": "^6.1.3", "immutable": "^4.0.0-rc.12", "inversify": "^5.0.1", "joi": "^14.3.1", "log-process-errors": "^5.0.2", - "micromatch": "^4.0.2", "nanomatch": "^1.2.13", "nsfw": "^1.2.5", "p-queue": "^6.1.1", - "pino": "^5.13.2", + "pino": "^5.13.3", "pino-pretty": "^3.2.1", + "pluralize": "^8.0.0", "pump": "^3.0.0", "readable-stream": "^3.4.0", "reflect-metadata": "^0.1.13", "rotating-file-stream": "^1.4.3", "semver": "^6.3.0", - "set-value": "^3.0.1", "split2": "^3.1.1", "strman": "^2.0.1", - "type-fest": "^0.7.1", - "union-value": "^2.0.1", - "unset-value": "^1.0.0" - }, - "publishConfig": { - "access": "public" - }, - "engines": { - "node": ">=10.x" + "type-fest": "^0.7.1" }, "devDependencies": { "@types/cosmiconfig": "^5.0.3", "@types/cron": "^1.7.1", "@types/fs-extra": "^8.0.0", - "@types/get-value": "^3.0.1", "@types/got": "^9.6.7", - "@types/hapi__joi": "^15.0.4", "@types/hoek": "^4.1.3", "@types/log-process-errors": "^4.1.0", - "@types/micromatch": "^3.1.0", "@types/pino": "^5.20.0", + "@types/pluralize": "^0.0.29", "@types/pump": "^1.1.0", "@types/readable-stream": "^2.3.4", - "@types/semver": "^6.0.1", - "@types/set-value": "^2.0.0", + "@types/semver": "^6.0.2", "@types/split2": "^2.1.6" + }, + "publishConfig": { + "access": "public" + }, + "engines": { + "node": ">=10.x" } } diff --git a/packages/core-kernel/src/bootstrap/app/register-base-paths.ts b/packages/core-kernel/src/bootstrap/app/register-base-paths.ts index 0bea3dacef..c0cce0fcde 100644 --- a/packages/core-kernel/src/bootstrap/app/register-base-paths.ts +++ b/packages/core-kernel/src/bootstrap/app/register-base-paths.ts @@ -1,9 +1,9 @@ +import { set } from "@arkecosystem/utils"; import envPaths from "env-paths"; import expandHomeDir from "expand-home-dir"; import { ensureDirSync } from "fs-extra"; import camelCase from "lodash/camelCase"; import { resolve } from "path"; -import set from "set-value"; import { Application } from "../../contracts/kernel"; import { Identifiers, inject, injectable } from "../../ioc"; diff --git a/packages/core-kernel/src/bootstrap/app/register-base-service-providers.ts b/packages/core-kernel/src/bootstrap/app/register-base-service-providers.ts index 171ca2f44f..17165f95e1 100644 --- a/packages/core-kernel/src/bootstrap/app/register-base-service-providers.ts +++ b/packages/core-kernel/src/bootstrap/app/register-base-service-providers.ts @@ -1,6 +1,6 @@ import { Application } from "../../contracts/kernel"; import { Identifiers, inject, injectable } from "../../ioc"; -import { Actions, Cache, Filesystem, Log, Queue, Schedule, Validation } from "../../services"; +import { Actions, Attributes, Cache, Filesystem, Log, Queue, Schedule, Validation } from "../../services"; import { Bootstrapper } from "../interfaces"; /** @@ -28,6 +28,8 @@ export class RegisterBaseServiceProviders implements Bootstrapper { public async bootstrap(): Promise { await this.app.resolve(Actions.ServiceProvider).register(); + await this.app.resolve(Attributes.ServiceProvider).register(); + await this.app.resolve(Log.ServiceProvider).register(); await this.app.resolve(Filesystem.ServiceProvider).register(); diff --git a/packages/core-kernel/src/helpers/index.ts b/packages/core-kernel/src/helpers/index.ts deleted file mode 100644 index 8337712ea5..0000000000 --- a/packages/core-kernel/src/helpers/index.ts +++ /dev/null @@ -1 +0,0 @@ -// diff --git a/packages/core-kernel/src/providers/plugin-configuration.ts b/packages/core-kernel/src/providers/plugin-configuration.ts index 826f4a0dfa..fc2efe194b 100644 --- a/packages/core-kernel/src/providers/plugin-configuration.ts +++ b/packages/core-kernel/src/providers/plugin-configuration.ts @@ -1,7 +1,4 @@ -import get from "get-value"; -import has from "has-value"; -import set from "set-value"; -import unset from "unset-value"; +import { get, has, set, unset } from "@arkecosystem/utils"; import { Identifiers, inject, injectable } from "../ioc"; import { ConfigRepository } from "../services/config"; diff --git a/packages/core-kernel/src/providers/plugin-manifest.ts b/packages/core-kernel/src/providers/plugin-manifest.ts index 2992042d4e..6b778e3661 100644 --- a/packages/core-kernel/src/providers/plugin-manifest.ts +++ b/packages/core-kernel/src/providers/plugin-manifest.ts @@ -1,5 +1,4 @@ -import get from "get-value"; -import has from "has-value"; +import { get, has } from "@arkecosystem/utils"; import { injectable } from "../ioc"; import { PackageJson } from "../types"; diff --git a/packages/core-kernel/src/services/attributes/attribute-index.ts b/packages/core-kernel/src/services/attributes/attribute-index.ts index f163a8d27b..e4ff015cfe 100644 --- a/packages/core-kernel/src/services/attributes/attribute-index.ts +++ b/packages/core-kernel/src/services/attributes/attribute-index.ts @@ -1,8 +1,6 @@ +import { get, has, set, unset } from "@arkecosystem/utils"; import { strict } from "assert"; -import get from "get-value"; -import has from "has-value"; -import set from "set-value"; -import unset from "unset-value"; + import { Primitive } from "../../types"; export class AttributeIndex { diff --git a/packages/core-kernel/src/services/attributes/index.ts b/packages/core-kernel/src/services/attributes/index.ts new file mode 100644 index 0000000000..57f982471a --- /dev/null +++ b/packages/core-kernel/src/services/attributes/index.ts @@ -0,0 +1,3 @@ +export * from "./attribute-index"; +export * from "./attribute-service"; +export * from "./service-provider"; diff --git a/packages/core-kernel/src/services/config/drivers/local.ts b/packages/core-kernel/src/services/config/drivers/local.ts index c47d4eb98d..80b02572ff 100644 --- a/packages/core-kernel/src/services/config/drivers/local.ts +++ b/packages/core-kernel/src/services/config/drivers/local.ts @@ -1,7 +1,6 @@ +import { get, set } from "@arkecosystem/utils"; import cosmiconfig from "cosmiconfig"; import { parseFileSync } from "envfile"; -import get from "get-value"; -import set from "set-value"; import { Application } from "../../../contracts/kernel"; import { ConfigLoader } from "../../../contracts/kernel/config"; diff --git a/packages/core-kernel/src/services/config/repository.ts b/packages/core-kernel/src/services/config/repository.ts index 9ae780ba48..def17b8b83 100644 --- a/packages/core-kernel/src/services/config/repository.ts +++ b/packages/core-kernel/src/services/config/repository.ts @@ -1,7 +1,4 @@ -import get from "get-value"; -import has from "has-value"; -import set from "set-value"; -import unset from "unset-value"; +import { get, has, set, unset } from "@arkecosystem/utils"; import { JsonObject } from "../../types"; @@ -76,7 +73,9 @@ export class ConfigRepository { * @memberof ConfigRepository */ public unset(key: string): boolean { - return unset(this.items, key); + unset(this.items, key); + + return this.has(key); } /** diff --git a/packages/core-kernel/src/services/index.ts b/packages/core-kernel/src/services/index.ts index 5ffbb1e5a3..77eabe85c9 100644 --- a/packages/core-kernel/src/services/index.ts +++ b/packages/core-kernel/src/services/index.ts @@ -1,4 +1,5 @@ import * as Actions from "./actions"; +import * as Attributes from "./attributes"; import * as Cache from "./cache"; import * as Config from "./config"; import * as Events from "./events"; @@ -8,4 +9,4 @@ import * as Queue from "./queue"; import * as Schedule from "./schedule"; import * as Validation from "./validation"; -export { Actions, Cache, Config, Events, Filesystem, Log, Queue, Schedule, Validation }; +export { Actions, Attributes, Cache, Config, Events, Filesystem, Log, Queue, Schedule, Validation }; diff --git a/packages/core-kernel/src/services/log/drivers/pino.ts b/packages/core-kernel/src/services/log/drivers/pino.ts index 1ffe469e9c..36fb7bf190 100644 --- a/packages/core-kernel/src/services/log/drivers/pino.ts +++ b/packages/core-kernel/src/services/log/drivers/pino.ts @@ -1,6 +1,5 @@ import chalk, { Chalk } from "chalk"; import { WriteStream } from "fs"; -import isEmpty from "lodash.isempty"; import pino, { PrettyOptions } from "pino"; import PinoPretty from "pino-pretty"; import pump from "pump"; @@ -13,6 +12,7 @@ import { inspect } from "util"; import { Application } from "../../../contracts/kernel"; import { Logger } from "../../../contracts/kernel/log"; import { Identifiers, inject, injectable } from "../../../ioc"; +import { isEmpty } from "../../../utils"; import { ConfigRepository } from "../../config"; @injectable() diff --git a/packages/core-kernel/src/services/mixins/mixins.ts b/packages/core-kernel/src/services/mixins/mixins.ts index b79a0726eb..7ec9807f05 100644 --- a/packages/core-kernel/src/services/mixins/mixins.ts +++ b/packages/core-kernel/src/services/mixins/mixins.ts @@ -1,5 +1,7 @@ +import { injectable } from "../../ioc"; import { Constructor } from "../../types/container"; +@injectable() export class MixinService { /** * @private diff --git a/packages/core-kernel/src/utils/capped-set.ts b/packages/core-kernel/src/utils/capped-set.ts deleted file mode 100644 index 86e1964c6b..0000000000 --- a/packages/core-kernel/src/utils/capped-set.ts +++ /dev/null @@ -1,23 +0,0 @@ -// A Set that is capped in size and acts like a FIFO. -export class CappedSet { - private readonly data: Set = new Set(); - private maxSize: number; - - constructor(maxSize = 16384) { - this.maxSize = maxSize; - } - - public add(newElement: T): void { - if (this.data.size >= this.maxSize) { - const oldest: T = this.data.values().next().value; - - this.data.delete(oldest); - } - - this.data.add(newElement); - } - - public has(element: T): boolean { - return this.data.has(element); - } -} diff --git a/packages/core-kernel/src/utils/has-some-property.ts b/packages/core-kernel/src/utils/has-some-property.ts deleted file mode 100644 index be6efc2e5f..0000000000 --- a/packages/core-kernel/src/utils/has-some-property.ts +++ /dev/null @@ -1 +0,0 @@ -export const hasSomeProperty = (object, props): boolean => props.some(prop => object.hasOwnProperty(prop)); diff --git a/packages/core-kernel/src/utils/index.ts b/packages/core-kernel/src/utils/index.ts index 7382389193..b320ea2904 100644 --- a/packages/core-kernel/src/utils/index.ts +++ b/packages/core-kernel/src/utils/index.ts @@ -1,32 +1,18 @@ -export * from "./is"; -export * from "./key-value-pair"; +import pluralize from "pluralize"; -import { CappedSet } from "./capped-set"; import { calculateApproval, calculateForgedTotal } from "./delegate-calculator"; import { formatTimestamp } from "./format-timestamp"; -import { hasSomeProperty } from "./has-some-property"; import { httpie, HttpieResponse } from "./httpie"; import { isBlockChained } from "./is-block-chained"; import { isWhitelisted } from "./is-whitelisted"; -import { NSect } from "./nsect"; -import { OrderedCappedMap } from "./ordered-capped-map"; import { calculateRound, isNewRound } from "./round-calculator"; import { calculate } from "./supply-calculator"; import * as Plugins from "./transform-plugins"; +export * from "@arkecosystem/utils"; + export const delegateCalculator = { calculateApproval, calculateForgedTotal }; export const roundCalculator = { calculateRound, isNewRound }; export const supplyCalculator = { calculate }; -export { - CappedSet, - formatTimestamp, - hasSomeProperty, - httpie, - HttpieResponse, - isBlockChained, - isWhitelisted, - NSect, - OrderedCappedMap, - Plugins, -}; +export { formatTimestamp, httpie, HttpieResponse, isBlockChained, isWhitelisted, Plugins, pluralize }; diff --git a/packages/core-kernel/src/utils/is.ts b/packages/core-kernel/src/utils/is.ts deleted file mode 100644 index b2a4d417b1..0000000000 --- a/packages/core-kernel/src/utils/is.ts +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @param {unknown} obj - * @returns {value is undefined} - */ -export const isUndefined = (value: unknown): value is undefined => typeof value === "undefined"; - -/** - * @param {unknown} obj - * @returns {(value is null | undefined)} - */ -export const isNil = (value: unknown): value is null | undefined => isUndefined(value) || value === null; - -/** - * @param {*} value - * @returns {boolean} - */ -export const isEmpty = (value: any): boolean => !(value && value.length > 0); - -/** - * @param {unknown} value - * @returns {value is object} - */ -export const isObject = (value: unknown): value is object => !isNil(value) && typeof value === "object"; - -/** - * @param {unknown} value - * @returns {boolean} - */ -export const isFunction = (value: unknown): boolean => typeof value === "function"; - -/** - * @param {unknown} value - * @returns {value is string} - */ -export const isString = (value: unknown): value is string => typeof value === "string"; - -/** - * @param {*} value - * @returns {boolean} - */ -export const isConstructor = (value: any): boolean => !!value.prototype && !!value.prototype.constructor.name; - -/** - * @param {unknown} value - * @returns {value is symbol} - */ -export const isSymbol = (value: unknown): value is symbol => typeof value === "symbol"; - -/** - * @template T - * @param {unknown} value - * @param {string} type - * @returns {value is T[]} - */ -export const isArrayOfType = (value: unknown, type: string): value is T[] => - Array.isArray(value) && value.every(element => typeof element === type); - -/** - * @param {unknown} value - * @returns {value is number[]} - */ -export const isNumberArray = (value: unknown): value is number[] => isArrayOfType(value, "number"); - -/** - * @param {unknown} value - * @returns {value is string[]} - */ -export const isStringArray = (value: unknown): value is string[] => isArrayOfType(value, "string"); - -/** - * @param {unknown} value - * @returns {value is boolean[]} - */ -export const isBooleanArray = (value: unknown): value is boolean[] => isArrayOfType(value, "boolean"); diff --git a/packages/core-kernel/src/utils/key-value-pair.ts b/packages/core-kernel/src/utils/key-value-pair.ts deleted file mode 100644 index 75dedbe09e..0000000000 --- a/packages/core-kernel/src/utils/key-value-pair.ts +++ /dev/null @@ -1,97 +0,0 @@ -import get from "get-value"; -import has from "has-value"; -import set from "set-value"; -import unset from "unset-value"; - -/** - * A Key-Value pair store with support for dot notation keys. - * - * @export - * @class KeyValuePair - * @template TValue - */ -export class KeyValuePair { - /** - * @private - * @type {Record} - * @memberof KeyValuePair - */ - private items: Record = {}; - - /** - * @returns {Record} - * @memberof KeyValuePair - */ - public all(): Record { - return this.items; - } - - /** - * @returns {[string, TValue][]} - * @memberof KeyValuePair - */ - public entries(): [string, TValue][] { - return Object.entries(this.items); - } - - /** - * @returns {string[]} - * @memberof KeyValuePair - */ - public keys(): string[] { - return Object.keys(this.items); - } - - /** - * @returns {TValue[]} - * @memberof KeyValuePair - */ - public values(): TValue[] { - return Object.values(this.items); - } - - /** - * @param {string} key - * @param {TValue} [defaultValue] - * @returns {TValue} - * @memberof KeyValuePair - */ - public get(key: string, defaultValue?: TValue): TValue { - return get(this.items, key, defaultValue); - } - - /** - * @param {string} key - * @param {TValue} value - * @memberof KeyValuePair - */ - public set(key: string, value: TValue): void { - return set(this.items, key, value); - } - - /** - * @param {string} key - * @returns {TValue} - * @memberof KeyValuePair - */ - public has(key: string): TValue { - return has(this.items, key); - } - - /** - * @param {string} key - * @returns {TValue} - * @memberof KeyValuePair - */ - public unset(key: string): TValue { - return unset(this.items, key); - } - - /** - * @param {Record} items - * @memberof KeyValuePair - */ - public merge(items: Record): void { - this.items = { ...this.items, ...items }; - } -} diff --git a/packages/core-kernel/src/utils/nsect.ts b/packages/core-kernel/src/utils/nsect.ts deleted file mode 100644 index 554e7e3079..0000000000 --- a/packages/core-kernel/src/utils/nsect.ts +++ /dev/null @@ -1,120 +0,0 @@ -import assert from "assert"; - -type ProbeCallback = (indexesToProbe: number[]) => Promise; - -/** - * Perform an N-ary (e.g. binary search for N=2) on a given sorted sequence of elements. - * It would find the first (lowest) element that matches according to a provided probe function. - */ -export class NSect { - /** - * Constructor. - * @param {Number} nAry type of search to perform. - * @param {Function} probe a probe callback function, it will be passed an array - * of indexes, in ascending order, always with length nAry + 1 and it should return one of those - * indexes, the last (highest) that matches the search criteria. For the algorithm to work the - * sequence must be sorted - all elements that are lower than some must match and all elements - * higher than that one must not match. This probe function will be called logA(sequence length) - * times, where A, the base of the logarithm is equal to nAry. - */ - constructor(private readonly nAry: number, private readonly probe: ProbeCallback) {} - - /** - * Find the first (lowest) element satisfying a condition as defined by the probe function - * in a range [low, high]. - * @param {Number} low lowest interval boundary (inclusive) - * @param {Number} high highest interval boundary (inclusive) - * @return {Number} the index of the first (lowest) element that satisfies the condition - */ - public async find(low: number, high: number): Promise { - let highestMatching: number; - - for (;;) { - const indexesToProbe: number[] = this.calcProbes(low, high); - - const temp: number = await this.probe(indexesToProbe); - - if (temp === undefined) { - break; - } - - highestMatching = temp; - - if (low + this.nAry >= high) { - // The range is narrowed so much that we probed every element in the range. - // No need to narrow further - highestMatching contains the definitive result. - break; - } - - // If we probed for elements at heights, for example: 1000, 1100, 1200, 1300 - // and the probe returned that the highest matching is at: - // A. 1300 (the highest we probed for), then we end the search and highestMatching - // contains the definitive result. One of the two happened: - // a. this is the first iteration of the loop and all elements in the sequence match, or - // b. this is the 2+ iteration and on the previous iteration the probe returned - // that 1301 is not a match (otherwise we wouldn't be probing [1000, 1300]). - // B. 1100 (anything other than the highest), then this implies that the element - // at 1200 is not a match. So in the next iteration we probe for elements between - // 1101 and 1199. - - // Case A. - if (highestMatching === indexesToProbe[indexesToProbe.length - 1]) { - break; - } - - // Case B. From the example above, we have: - // highestMatching = 1100 - // indexesToProbe[0] = 1000, is a match - // indexesToProbe[1] = 1100, is a match - // indexesToProbe[2] = 1200, is not a match - // indexesToProbe[3] = 1300, is not a match - // we will get indexOfHighestMatching = 1, and for the next iteration: - // low = 1100 + 1 = 1101 - // high = indexesToProbe[1 + 1] - 1 = indexesToProbe[2] - 1 = 1200 - 1 = 1199 - const indexOfHighestMatching: number = indexesToProbe.indexOf(highestMatching); - assert.notStrictEqual(indexOfHighestMatching, -1); - assert(indexOfHighestMatching < indexesToProbe.length - 1); - - if (indexesToProbe[indexOfHighestMatching] + 1 === indexesToProbe[indexOfHighestMatching + 1]) { - // In a narrow range, it may happen that: - // highestMatching = 1100 - // indexesToProbe[0] = 1099, is a match - // indexesToProbe[1] = 1100, is a match - // indexesToProbe[2] = 1101, is not a match - // indexesToProbe[3] = 1103, is not a match - // indexOfHighestMatching = 1 - // Then we know highestMatching is the definitive result because the probe - // declared that the data at index 1100 matches and the data at index 1101 - // does not match. - break; - } - - low = highestMatching + 1; - high = indexesToProbe[indexOfHighestMatching + 1] - 1; - } - - return highestMatching; - } - - /** - * Given an interval [low, high], split it in `nAry` intervals and return those intervals' - * boundaries. - * For example (assuming `nAry` is 8): - * [1, 81] -> [1, 11, 21, 31, 41, 51, 61, 71, 81] - * @param {Number} low lower boundary of the interval to split - * @param {Number} high higher boundary of the interval to split - * @return {Array} intervals' boundaries - */ - private calcProbes(low: number, high: number): number[] { - assert(low <= high, `${low} <= ${high}`); - const diff: number = high - low; - const p: Set = new Set(); - - for (let i = 0; i < this.nAry + 1; i++) { - const h: number = low + Math.round((diff * i) / this.nAry); - p.add(h); - } - - return Array.from(p); - } -} diff --git a/packages/core-kernel/src/utils/ordered-capped-map.ts b/packages/core-kernel/src/utils/ordered-capped-map.ts deleted file mode 100644 index 8545e52d94..0000000000 --- a/packages/core-kernel/src/utils/ordered-capped-map.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { OrderedMap } from "immutable"; - -export class OrderedCappedMap { - protected store: OrderedMap = OrderedMap(); - private maxSize: number; - - constructor(maxSize: number) { - this.resize(maxSize); - } - - public get(key: K): V { - return this.store.get(key); - } - - public set(key: K, value: V): void { - if (this.store.size >= this.maxSize) { - this.store = this.store.delete(this.store.keyOf(this.first())); - } - - this.store = this.store.set(key, value); - } - - public has(key: K): boolean { - return this.store.has(key); - } - - public delete(key: K): boolean { - if (!this.store.has(key)) { - return false; - } - - this.store = this.store.delete(key); - - return !this.store.has(key); - } - - public clear(): void { - this.store = this.store.clear(); - } - - public resize(maxSize: number): void { - this.maxSize = maxSize; - - if (this.store.size > this.maxSize) { - this.store = this.store.takeLast(this.maxSize); - } - } - - public first(): V { - return this.store.first() as V; - } - - public last(): V { - return this.store.last() as V; - } - - public keys(): K[] { - return this.store.keySeq().toArray(); - } - - public values(): V[] { - return this.store.valueSeq().toArray(); - } - - public count(): number { - return this.store.size; - } -} diff --git a/packages/core-p2p/package.json b/packages/core-p2p/package.json index cb5e63ab57..8a42a57084 100644 --- a/packages/core-p2p/package.json +++ b/packages/core-p2p/package.json @@ -27,28 +27,15 @@ "@arkecosystem/core-kernel": "^3.0.0-next.0", "@arkecosystem/core-transaction-pool": "^3.0.0-next.0", "@arkecosystem/crypto": "^3.0.0-next.0", - "@hapi/boom": "^7.4.3", "@hapi/sntp": "^3.1.2", "ajv": "^6.10.2", "better-sqlite3": "^5.4.2", "dayjs": "^1.8.16", "delay": "^4.3.0", "fs-extra": "^8.1.0", - "hapi-rate-limit": "^4.0.1", "ip": "^1.1.5", "ipaddr.js": "^1.9.1", - "lodash.chunk": "^4.2.0", - "lodash.flatten": "^4.4.0", - "lodash.get": "^4.4.2", - "lodash.groupby": "^4.6.0", - "lodash.head": "^4.0.1", - "lodash.sample": "^4.2.1", - "lodash.set": "^4.3.2", - "lodash.shuffle": "^4.2.0", - "lodash.sumby": "^4.6.0", - "lodash.take": "^4.1.1", "nanomatch": "^1.2.13", - "pluralize": "^8.0.0", "pretty-ms": "^5.0.0", "rate-limiter-flexible": "^1.1.1", "scc-broker-client": "^6.1.0", @@ -59,22 +46,8 @@ "devDependencies": { "@types/better-sqlite3": "^5.4.0", "@types/fs-extra": "^8.0.0", - "@types/hapi__boom": "^7.4.1", "@types/hapi__sntp": "^3.1.0", "@types/ip": "^1.1.0", - "@types/lodash.chunk": "^4.2.6", - "@types/lodash.flatten": "^4.4.6", - "@types/lodash.get": "^4.4.6", - "@types/lodash.groupby": "^4.6.6", - "@types/lodash.head": "^4.0.6", - "@types/lodash.sample": "^4.2.6", - "@types/lodash.set": "^4.3.6", - "@types/lodash.shuffle": "^4.2.6", - "@types/lodash.sumby": "^4.6.6", - "@types/lodash.take": "^4.1.6", - "@types/micromatch": "^3.1.0", - "@types/pluralize": "^0.0.29", - "@types/pretty-ms": "^5.0.1", "@types/scc-broker-client": "^6.1.0", "@types/semver": "^6.0.1", "@types/socketcluster": "^14.0.2", diff --git a/packages/core-p2p/src/network-monitor.ts b/packages/core-p2p/src/network-monitor.ts index 2184d54f8c..a76df48c17 100644 --- a/packages/core-p2p/src/network-monitor.ts +++ b/packages/core-p2p/src/network-monitor.ts @@ -1,11 +1,6 @@ -import { app, Container, Contracts, Enums } from "@arkecosystem/core-kernel"; +import { app, Container, Contracts, Enums, Utils } from "@arkecosystem/core-kernel"; import { Interfaces } from "@arkecosystem/crypto"; import delay from "delay"; -import groupBy from "lodash.groupby"; -import sample from "lodash.sample"; -import shuffle from "lodash.shuffle"; -import take from "lodash.take"; -import pluralize from "pluralize"; import prettyMs from "pretty-ms"; import SocketCluster from "socketcluster"; @@ -72,8 +67,8 @@ export class NetworkMonitor implements Contracts.P2P.NetworkMonitor { } else { await this.updateNetworkStatus(true); - for (const [version, peers] of Object.entries(groupBy(this.storage.getPeers(), "version"))) { - this.logger.info(`Discovered ${pluralize("peer", peers.length, true)} with v${version}.`); + for (const [version, peers] of Object.entries(Utils.groupBy(this.storage.getPeers(), "version"))) { + this.logger.info(`Discovered ${Utils.pluralize("peer", peers.length, true)} with v${version}.`); } } @@ -131,7 +126,7 @@ export class NetworkMonitor implements Contracts.P2P.NetworkMonitor { const pingDelay = fast ? 1500 : app.get("p2p.options").verifyTimeout; if (peerCount) { - peers = shuffle(peers).slice(0, peerCount); + peers = Utils.shuffle(peers).slice(0, peerCount); max = Math.min(peers.length, peerCount); } @@ -161,7 +156,7 @@ export class NetworkMonitor implements Contracts.P2P.NetworkMonitor { for (const key of Object.keys(peerErrors)) { const peerCount = peerErrors[key].length; - this.logger.debug(`Removed ${peerCount} ${pluralize("peers", peerCount)} because of "${key}"`); + this.logger.debug(`Removed ${peerCount} ${Utils.pluralize("peers", peerCount)} because of "${key}"`); } if (this.initializing) { @@ -175,7 +170,7 @@ export class NetworkMonitor implements Contracts.P2P.NetworkMonitor { const ownPeers: Contracts.P2P.Peer[] = this.storage.getPeers(); const theirPeers: Contracts.P2P.Peer[] = Object.values( (await Promise.all( - shuffle(this.storage.getPeers()) + Utils.shuffle(this.storage.getPeers()) .slice(0, 8) .map(async (peer: Contracts.P2P.Peer) => { try { @@ -188,9 +183,9 @@ export class NetworkMonitor implements Contracts.P2P.NetworkMonitor { }), )) .map(peers => - shuffle(peers) + Utils.shuffle(peers) .slice(0, maxPeersPerPeer) - .reduce((acc, curr) => ({ ...acc, ...{ [curr.ip]: curr } }), {}), + .reduce((acc, curr: Contracts.P2P.Peer) => ({ ...acc, ...{ [curr.ip]: curr } }), {}), ) .reduce((acc, curr) => ({ ...acc, ...curr }), {}), ); @@ -252,9 +247,9 @@ export class NetworkMonitor implements Contracts.P2P.NetworkMonitor { return { forked: false }; } - const groupedByCommonHeight = groupBy(allPeers, "verification.highestCommonHeight"); + const groupedByCommonHeight = Utils.groupBy(allPeers, "verification.highestCommonHeight"); - const groupedByLength = groupBy(Object.values(groupedByCommonHeight), "length"); + const groupedByLength = Utils.groupBy(Object.values(groupedByCommonHeight), "length"); // Sort by longest // @ts-ignore @@ -293,7 +288,7 @@ export class NetworkMonitor implements Contracts.P2P.NetworkMonitor { if (!networkHeight || networkHeight <= fromBlockHeight) { // networkHeight is what we believe network height is, so even if it is <= our height, we download blocks - return this.communicator.downloadBlocks(sample(peersFiltered), fromBlockHeight); + return this.communicator.downloadBlocks(Utils.sample(peersFiltered), fromBlockHeight); } const chunkSize = 400; @@ -301,11 +296,15 @@ export class NetworkMonitor implements Contracts.P2P.NetworkMonitor { const chunksToDownload: number = Math.min(chunksMissingToSync, peersFiltered.length, maxParallelDownloads); return (await Promise.all( - shuffle(peersFiltered) + Utils.shuffle(peersFiltered) .slice(0, chunksToDownload) .map(async (peer: Contracts.P2P.Peer, index) => { const height: number = fromBlockHeight + chunkSize * index; - const peersToTry: Contracts.P2P.Peer[] = [peer, sample(peersFiltered), sample(peersFiltered)]; // 2 "fallback" peers to download from if 1st one failed + const peersToTry: Contracts.P2P.Peer[] = [ + peer, + Utils.sample(peersFiltered), + Utils.sample(peersFiltered), + ]; // 2 "fallback" peers to download from if 1st one failed let blocks: Interfaces.IBlockData[]; for (const peerToDownloadFrom of peersToTry) { @@ -358,25 +357,29 @@ export class NetworkMonitor implements Contracts.P2P.NetworkMonitor { broadcastQuota = (maxHop - blockPing.count) / maxHop; } - peers = broadcastQuota <= 0 ? [] : shuffle(peers).slice(0, Math.ceil(broadcastQuota * peers.length)); + peers = broadcastQuota <= 0 ? [] : Utils.shuffle(peers).slice(0, Math.ceil(broadcastQuota * peers.length)); // select a portion of our peers according to quota calculated before } this.logger.info( - `Broadcasting block ${block.data.height.toLocaleString()} to ${pluralize("peer", peers.length, true)}`, + `Broadcasting block ${block.data.height.toLocaleString()} to ${Utils.pluralize( + "peer", + peers.length, + true, + )}`, ); await Promise.all(peers.map(peer => this.communicator.postBlock(peer, block.toJson()))); } public async broadcastTransactions(transactions: Interfaces.ITransaction[]): Promise { - const peers: Contracts.P2P.Peer[] = take( - shuffle(this.storage.getPeers()), + const peers: Contracts.P2P.Peer[] = Utils.take( + Utils.shuffle(this.storage.getPeers()), app.get("p2p.options").maxPeersBroadcast, ); this.logger.debug( - `Broadcasting ${pluralize("transaction", transactions.length, true)} to ${pluralize( + `Broadcasting ${Utils.pluralize("transaction", transactions.length, true)} to ${Utils.pluralize( "peer", peers.length, true, @@ -395,10 +398,10 @@ export class NetworkMonitor implements Contracts.P2P.NetworkMonitor { private async pingPeerPorts(initialRun?: boolean): Promise { let peers = this.storage.getPeers(); if (!initialRun) { - peers = shuffle(peers).slice(0, Math.floor(peers.length / 2)); + peers = Utils.shuffle(peers).slice(0, Math.floor(peers.length / 2)); } - this.logger.debug(`Checking ports of ${pluralize("peer", peers.length, true)}.`); + this.logger.debug(`Checking ports of ${Utils.pluralize("peer", peers.length, true)}.`); Promise.all( peers.map(async peer => { diff --git a/packages/core-p2p/src/socket-server/payload-processor.ts b/packages/core-p2p/src/socket-server/payload-processor.ts index ab7c124ea1..680d7b8e7b 100644 --- a/packages/core-p2p/src/socket-server/payload-processor.ts +++ b/packages/core-p2p/src/socket-server/payload-processor.ts @@ -1,8 +1,7 @@ -import { app } from "@arkecosystem/core-kernel"; +import { app, Utils } from "@arkecosystem/core-kernel"; import sqlite3 from "better-sqlite3"; import delay from "delay"; import { ensureFileSync, existsSync, unlinkSync } from "fs-extra"; -import pluralize from "pluralize"; import SocketCluster from "socketcluster"; import { getHeaders } from "./utils/get-headers"; @@ -70,7 +69,7 @@ class PayloadProcessor { saveToDB(this.payloadOverflowQueue); } catch (error) { app.log.warning( - `Discarding ${pluralize( + `Discarding ${Utils.pluralize( "transaction payload", overflowQueueSize, true, diff --git a/packages/core-p2p/src/socket-server/versions/peer.ts b/packages/core-p2p/src/socket-server/versions/peer.ts index b0355004d6..feb0db97a8 100644 --- a/packages/core-p2p/src/socket-server/versions/peer.ts +++ b/packages/core-p2p/src/socket-server/versions/peer.ts @@ -1,6 +1,5 @@ import { app, Container, Contracts, Utils } from "@arkecosystem/core-kernel"; import { Crypto, Interfaces } from "@arkecosystem/crypto"; -import pluralize from "pluralize"; import { MissingCommonBlockError } from "../../errors"; import { PeerPingResponse } from "../../interfaces"; @@ -75,7 +74,7 @@ export const postBlock = async ({ req }): Promise => { } app.log.info( - `Received new block at height ${block.height.toLocaleString()} with ${pluralize( + `Received new block at height ${block.height.toLocaleString()} with ${Utils.pluralize( "transaction", block.numberOfTransactions, true, @@ -127,7 +126,7 @@ export const getBlocks = async ({ req }): Promise { - hosts = shuffle(hosts); + hosts = Utils.shuffle(hosts); const lookupService = util.promisify(dns.lookupService); diff --git a/packages/core-p2p/src/utils/check-ntp.ts b/packages/core-p2p/src/utils/check-ntp.ts index c408541b03..a60f5c8378 100644 --- a/packages/core-p2p/src/utils/check-ntp.ts +++ b/packages/core-p2p/src/utils/check-ntp.ts @@ -1,12 +1,14 @@ -import { app } from "@arkecosystem/core-kernel"; -import Sntp from "@hapi/sntp"; -import shuffle from "lodash.shuffle"; +import { app, Utils } from "@arkecosystem/core-kernel"; +import Sntp, { TimeOptions } from "@hapi/sntp"; -export const checkNTP = (hosts, timeout = 1000): any => { +export const checkNTP = (hosts: string[], timeout: number = 1000): Promise<{ time: TimeOptions; host: string }> => { return new Promise(async (resolve, reject) => { - for (const host of shuffle(hosts)) { + for (const host of Utils.shuffle(hosts)) { try { - const time: Sntp.TimeOptions = await Sntp.time({ host, timeout }); + const time: Sntp.TimeOptions = await Sntp.time({ + host, + timeout, + }); return resolve({ time, host }); } catch (err) { diff --git a/packages/core-snapshots/package.json b/packages/core-snapshots/package.json index ae6cf62f3c..86f155e04d 100644 --- a/packages/core-snapshots/package.json +++ b/packages/core-snapshots/package.json @@ -25,21 +25,17 @@ "@arkecosystem/core-database-postgres": "^3.0.0-next.0", "@arkecosystem/crypto": "^3.0.0-next.0", "JSONStream": "^1.3.5", - "cpy-cli": "^2.0.0", "fs-extra": "^8.1.0", - "lodash.pick": "^4.4.0", "msgpack-lite": "^0.1.26", "pg-promise": "^8.7.4", "pg-query-stream": "^2.0.0", - "pluralize": "^8.0.0", "xcase": "^2.0.1" }, "devDependencies": { "@types/fs-extra": "^8.0.0", - "@types/lodash.pick": "^4.4.6", "@types/msgpack-lite": "^0.1.6", "@types/pg-query-stream": "^1.0.2", - "@types/pluralize": "^0.0.29" + "cpy-cli": "^2.0.0" }, "engines": { "node": ">=10.x" diff --git a/packages/core-snapshots/src/manager.ts b/packages/core-snapshots/src/manager.ts index b4f6a73473..f2bb99a357 100644 --- a/packages/core-snapshots/src/manager.ts +++ b/packages/core-snapshots/src/manager.ts @@ -1,6 +1,5 @@ import { PostgresConnection } from "@arkecosystem/core-database-postgres"; import { app, Utils } from "@arkecosystem/core-kernel"; -import pick from "lodash.pick"; const logger = app.log; import { Database, database } from "./db"; @@ -119,7 +118,7 @@ export class SnapshotManager { } private async init(options, exportAction = false) { - const params: any = pick(options, [ + const params: any = Utils.pick(options, [ "truncate", "blocks", "verifySignatures", diff --git a/packages/core-snapshots/src/transport/index.ts b/packages/core-snapshots/src/transport/index.ts index 927d7ecdd8..ae5387cfef 100644 --- a/packages/core-snapshots/src/transport/index.ts +++ b/packages/core-snapshots/src/transport/index.ts @@ -1,9 +1,8 @@ -import { app, Container, Contracts } from "@arkecosystem/core-kernel"; +import { app, Container, Contracts, Utils } from "@arkecosystem/core-kernel"; import { Managers } from "@arkecosystem/crypto"; import fs from "fs-extra"; import msgpack from "msgpack-lite"; import QueryStream from "pg-query-stream"; -import pluralize from "pluralize"; import zlib from "zlib"; import JSONStream from "JSONStream"; @@ -152,7 +151,7 @@ export const backupTransactionsToJSON = async (snapFileName, query, database) => try { const data = await database.db.stream(qs, s => s.pipe(JSONStream.stringify()).pipe(snapshotWriteStream)); logger.info( - `${pluralize( + `${Utils.pluralize( "transaction", data.processed, true, diff --git a/packages/core-state/package.json b/packages/core-state/package.json index 97b2815f9b..3a0f6bfb44 100644 --- a/packages/core-state/package.json +++ b/packages/core-state/package.json @@ -25,15 +25,11 @@ "@arkecosystem/core-kernel": "^3.0.0-next.0", "@arkecosystem/core-transactions": "^3.0.0-next.0", "@arkecosystem/crypto": "^3.0.0-next.0", - "dottie": "^2.0.1", "immutable": "^4.0.0-rc.12", - "lodash.clonedeep": "^4.5.0", - "pluralize": "^8.0.0" + "lodash.clonedeep": "^4.5.0" }, "devDependencies": { - "@types/dottie": "^2.0.3", - "@types/lodash.clonedeep": "^4.5.6", - "@types/pluralize": "^0.0.29" + "@types/lodash.clonedeep": "^4.5.6" }, "engines": { "node": ">=10.x" diff --git a/packages/core-state/src/service-provider.ts b/packages/core-state/src/service-provider.ts index ef61a13db7..c280d39fdf 100644 --- a/packages/core-state/src/service-provider.ts +++ b/packages/core-state/src/service-provider.ts @@ -1,4 +1,4 @@ -import { Container, Providers } from "@arkecosystem/core-kernel"; +import { Container, Providers, Services } from "@arkecosystem/core-kernel"; import { StateService } from "./service"; import { BlockStore } from "./stores/blocks"; @@ -7,6 +7,8 @@ import { TransactionStore } from "./stores/transactions"; export class ServiceProvider extends Providers.ServiceProvider { public async register(): Promise { + this.app.get(Container.Identifiers.AttributeService).set("wallet"); + this.app.bind(Container.Identifiers.StateService).toConstantValue( new StateService({ blocks: new BlockStore(1000), diff --git a/packages/core-state/src/wallets/wallet-state.ts b/packages/core-state/src/wallets/wallet-state.ts index 5326d54539..9a95f92fd4 100644 --- a/packages/core-state/src/wallets/wallet-state.ts +++ b/packages/core-state/src/wallets/wallet-state.ts @@ -1,6 +1,5 @@ -import { app, Contracts, Container } from "@arkecosystem/core-kernel"; +import { app, Container, Contracts, Utils as AppUtils } from "@arkecosystem/core-kernel"; import { Utils } from "@arkecosystem/crypto"; -import pluralize from "pluralize"; // @todo: ioc @Container.injectable() @@ -24,7 +23,7 @@ export class WalletState { ); } - app.log.debug(`Loaded ${delegates.length} active ${pluralize("delegate", delegates.length)}`); + app.log.debug(`Loaded ${delegates.length} active ${AppUtils.pluralize("delegate", delegates.length)}`); return delegates; } diff --git a/packages/core-state/src/wallets/wallet.ts b/packages/core-state/src/wallets/wallet.ts index ac6eadddbb..362f3efe63 100644 --- a/packages/core-state/src/wallets/wallet.ts +++ b/packages/core-state/src/wallets/wallet.ts @@ -1,8 +1,6 @@ -import { Contracts } from "@arkecosystem/core-kernel"; -import { Errors, Handlers } from "@arkecosystem/core-transactions"; +import { app, Container, Contracts, Services } from "@arkecosystem/core-kernel"; +import { Errors } from "@arkecosystem/core-transactions"; import { Crypto, Enums, Identities, Interfaces, Transactions, Utils } from "@arkecosystem/crypto"; -import assert from "assert"; -import dottie from "dottie"; export class Wallet implements Contracts.State.Wallet { public address: string; @@ -10,38 +8,38 @@ export class Wallet implements Contracts.State.Wallet { public balance: Utils.BigNumber; public nonce: Utils.BigNumber; - private readonly attributes: Record; - - constructor(address: string) { + public constructor(address: string) { this.address = address; this.balance = Utils.BigNumber.ZERO; this.nonce = Utils.BigNumber.ZERO; - - this.attributes = {}; } - // @todo: move this into an AttributesRegistry - public hasAttribute(key: string): boolean { - this.assertKnownAttribute(key); - return dottie.exists(this.attributes, key); + public getAttribute(key: string, defaultValue?: T): T { + return app + .get(Container.Identifiers.AttributeService) + .get("wallet") + .get(this.address, key, defaultValue); } - // @todo: move this into an AttributesRegistry - public getAttribute(key: string, defaultValue?: T): T { - this.assertKnownAttribute(key); - return dottie.get(this.attributes, key, defaultValue); + public setAttribute(key: string, value: T): boolean { + return app + .get(Container.Identifiers.AttributeService) + .get("wallet") + .set(this.address, key, value); } - // @todo: move this into an AttributesRegistry - public setAttribute(key: string, value: T): void { - this.assertKnownAttribute(key); - dottie.set(this.attributes, key, value); + public forgetAttribute(key: string): boolean { + return app + .get(Container.Identifiers.AttributeService) + .get("wallet") + .forget(this.address, key); } - // @todo: move this into an AttributesRegistry - public forgetAttribute(key: string): void { - this.assertKnownAttribute(key); - this.setAttribute(key, undefined); + public hasAttribute(key: string): boolean { + return app + .get(Container.Identifiers.AttributeService) + .get("wallet") + .has(this.address, key); } public isDelegate(): boolean { @@ -61,7 +59,10 @@ export class Wallet implements Contracts.State.Wallet { } public canBePurged(): boolean { - const hasAttributes = Object.keys(this.attributes).length > 0; + const hasAttributes: boolean = + Object.keys( + app.get(Container.Identifiers.AttributeService).get("wallet"), + ).length > 0; const lockedBalance = this.getAttribute("htlc.lockedBalance", Utils.BigNumber.ZERO); return this.balance.isZero() && lockedBalance.isZero() && !hasAttributes; @@ -242,8 +243,4 @@ export class Wallet implements Contracts.State.Wallet { public toString(): string { return `${this.address} (${Utils.formatSatoshi(this.balance)})`; } - - private assertKnownAttribute(key: string): void { - assert(Handlers.Registry.isKnownWalletAttribute(key), `Tried to access unknown attribute: ${key}`); - } } diff --git a/packages/core-transaction-pool/package.json b/packages/core-transaction-pool/package.json index 6d298d76f4..4f00e2107d 100644 --- a/packages/core-transaction-pool/package.json +++ b/packages/core-transaction-pool/package.json @@ -32,24 +32,14 @@ "@arkecosystem/crypto": "^3.0.0-next.0", "@types/better-sqlite3": "^5.4.0", "@types/fs-extra": "^8.0.0", - "@types/pluralize": "^0.0.29", "better-sqlite3": "^5.4.0", - "dayjs": "^1.8.15", - "delay": "^4.3.0", "fs-extra": "^8.1.0", - "lodash.clonedeep": "^4.5.0", - "pluralize": "^8.0.0" + "lodash.clonedeep": "^4.5.0" }, "devDependencies": { "@types/better-sqlite3": "^5.4.0", - "@types/bip39": "^2.4.2", "@types/fs-extra": "^8.0.0", - "@types/lodash.clonedeep": "^4.5.6", - "@types/pluralize": "^0.0.29", - "@types/random-seed": "^0.3.3", - "bip39": "^3.0.2", - "lodash.clonedeep": "^4.5.0", - "random-seed": "^0.3.0" + "@types/lodash.clonedeep": "^4.5.6" }, "engines": { "node": ">=10.x" diff --git a/packages/core-transaction-pool/src/connection.ts b/packages/core-transaction-pool/src/connection.ts index 58e671d40d..1180f05db9 100644 --- a/packages/core-transaction-pool/src/connection.ts +++ b/packages/core-transaction-pool/src/connection.ts @@ -3,7 +3,7 @@ import { Wallets } from "@arkecosystem/core-state"; import { Handlers } from "@arkecosystem/core-transactions"; import { Enums, Interfaces, Transactions, Utils } from "@arkecosystem/crypto"; import { strictEqual } from "assert"; -import clonedeep from "lodash.clonedeep"; +import cloneDeep from "lodash.clonedeep"; import { TransactionsProcessed } from "./interfaces"; import { Memory } from "./memory"; @@ -205,10 +205,9 @@ export class Connection implements Contracts.TransactionPool.Connection { const { data }: Interfaces.ITransaction = transaction; const exists: boolean = await this.has(data.id); const senderPublicKey: string = data.senderPublicKey; - const transactionHandler: Handlers.TransactionHandler = Handlers.Registry.get( - transaction.type, - transaction.typeGroup, - ); + const transactionHandler: Handlers.TransactionHandler = app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup); const senderWallet: Contracts.State.Wallet = this.walletRepository.hasByPublicKey(senderPublicKey) ? this.walletRepository.findByPublicKey(senderPublicKey) @@ -291,10 +290,9 @@ export class Connection implements Contracts.TransactionPool.Connection { // TODO: rework error handling try { - const transactionHandler: Handlers.TransactionHandler = Handlers.Registry.get( - transaction.type, - transaction.typeGroup, - ); + const transactionHandler: Handlers.TransactionHandler = app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup); await transactionHandler.throwIfCannotBeApplied( transaction, senderWallet, @@ -434,10 +432,10 @@ export class Connection implements Contracts.TransactionPool.Connection { try { await this.walletRepository.throwIfCannotBeApplied(transaction); - await Handlers.Registry.get(transaction.type, transaction.typeGroup).applyToSender( - transaction, - this.walletRepository, - ); + await app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup) + .applyToSender(transaction, this.walletRepository); } catch (error) { this.logger.error(error.message); @@ -483,10 +481,9 @@ export class Connection implements Contracts.TransactionPool.Connection { const { sender, recipient } = this.getSenderAndRecipient(transaction, localWalletRepository); - const handler: Handlers.TransactionHandler = Handlers.Registry.get( - transaction.type, - transaction.typeGroup, - ); + const handler: Handlers.TransactionHandler = app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup); await handler.throwIfCannotBeApplied(transaction, sender, databaseWalletRepository); await handler.applyToSender(transaction, localWalletRepository); @@ -520,7 +517,7 @@ export class Connection implements Contracts.TransactionPool.Connection { if (localWalletRepository.hasByPublicKey(senderPublicKey)) { sender = localWalletRepository.findByPublicKey(senderPublicKey); } else { - sender = clonedeep(databaseWalletRepository.findByPublicKey(senderPublicKey)); + sender = cloneDeep(databaseWalletRepository.findByPublicKey(senderPublicKey)); localWalletRepository.reindex(sender); } @@ -528,13 +525,13 @@ export class Connection implements Contracts.TransactionPool.Connection { if (transaction.type === Enums.TransactionType.Vote) { const vote = transaction.data.asset.votes[0].slice(1); if (!localWalletRepository.hasByPublicKey(vote)) { - localWalletRepository.reindex(clonedeep(databaseWalletRepository.findByPublicKey(vote))); + localWalletRepository.reindex(cloneDeep(databaseWalletRepository.findByPublicKey(vote))); } } else if (transaction.type === Enums.TransactionType.HtlcClaim) { const lockId = transaction.data.asset.claim.lockTransactionId; if (!localWalletRepository.hasByIndex(Contracts.State.WalletIndexes.Locks, lockId)) { localWalletRepository.reindex( - clonedeep(databaseWalletRepository.findByIndex(Contracts.State.WalletIndexes.Locks, lockId)), + cloneDeep(databaseWalletRepository.findByIndex(Contracts.State.WalletIndexes.Locks, lockId)), ); } } @@ -543,7 +540,7 @@ export class Connection implements Contracts.TransactionPool.Connection { if (localWalletRepository.hasByAddress(recipientId)) { recipient = localWalletRepository.findByAddress(recipientId); } else { - recipient = clonedeep(databaseWalletRepository.findByAddress(recipientId)); + recipient = cloneDeep(databaseWalletRepository.findByAddress(recipientId)); localWalletRepository.reindex(recipient); } } diff --git a/packages/core-transaction-pool/src/dynamic-fee.ts b/packages/core-transaction-pool/src/dynamic-fee.ts index d0a870ef19..337ca8102d 100644 --- a/packages/core-transaction-pool/src/dynamic-fee.ts +++ b/packages/core-transaction-pool/src/dynamic-fee.ts @@ -15,7 +15,9 @@ export const dynamicFeeMatcher = (transaction: Interfaces.ITransaction): Dynamic let enterPool: boolean; if (dynamicFees.enabled) { - const handler: Handlers.TransactionHandler = Handlers.Registry.get(transaction.type, transaction.typeGroup); + const handler: Handlers.TransactionHandler = app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup); const addonBytes: number = app.get("transactionPool.options").dynamicFees.addonBytes[transaction.key]; const minFeeBroadcast: Utils.BigNumber = handler.dynamicFee( transaction, diff --git a/packages/core-transaction-pool/src/processor.ts b/packages/core-transaction-pool/src/processor.ts index b688379f48..1212e086c0 100644 --- a/packages/core-transaction-pool/src/processor.ts +++ b/packages/core-transaction-pool/src/processor.ts @@ -1,7 +1,6 @@ -import { app, Container, Contracts } from "@arkecosystem/core-kernel"; +import { app, Container, Contracts, Utils } from "@arkecosystem/core-kernel"; import { Errors, Handlers } from "@arkecosystem/core-transactions"; import { Crypto, Enums, Errors as CryptoErrors, Interfaces, Managers, Transactions } from "@arkecosystem/crypto"; -import pluralize from "pluralize"; import { dynamicFeeMatcher } from "./dynamic-fee"; import { DynamicFeeMatch, TransactionsCached, TransactionsProcessed } from "./interfaces"; @@ -124,10 +123,9 @@ export class Processor implements Contracts.TransactionPool.Processor { const transactionInstance: Interfaces.ITransaction = Transactions.TransactionFactory.fromData( transaction, ); - const handler: Handlers.TransactionHandler = Handlers.Registry.get( - transactionInstance.type, - transactionInstance.typeGroup, - ); + const handler: Handlers.TransactionHandler = app + .get("transactionHandlerRegistry") + .get(transactionInstance.type, transactionInstance.typeGroup); if (await handler.verify(transactionInstance, this.pool.walletRepository)) { try { await this.walletRepository.throwIfCannotBeApplied(transactionInstance); @@ -211,11 +209,10 @@ export class Processor implements Contracts.TransactionPool.Processor { try { // @todo: this leaks private members, refactor this - return Handlers.Registry.get(transaction.type, transaction.typeGroup).canEnterTransactionPool( - transaction, - this.pool, - this, - ); + return app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup) + .canEnterTransactionPool(transaction, this.pool, this); } catch (error) { if (error instanceof Errors.InvalidTransactionTypeError) { this.pushError( @@ -250,6 +247,6 @@ export class Processor implements Contracts.TransactionPool.Processor { .map(prop => `${prop}: ${this[prop] instanceof Array ? this[prop].length : this[prop].size}`) .join(" "); - app.log.info(`Received ${pluralize("transaction", this.transactions.length, true)} (${stats}).`); + app.log.info(`Received ${Utils.pluralize("transaction", this.transactions.length, true)} (${stats}).`); } } diff --git a/packages/core-transaction-pool/src/wallet-repository.ts b/packages/core-transaction-pool/src/wallet-repository.ts index 64aa8c623c..a2da25b9d6 100644 --- a/packages/core-transaction-pool/src/wallet-repository.ts +++ b/packages/core-transaction-pool/src/wallet-repository.ts @@ -1,8 +1,7 @@ import { app, Container, Contracts } from "@arkecosystem/core-kernel"; import { Wallets } from "@arkecosystem/core-state"; -import { Handlers } from "@arkecosystem/core-transactions"; import { Identities, Interfaces } from "@arkecosystem/crypto"; -import clonedeep from "lodash.clonedeep"; +import cloneDeep from "lodash.clonedeep"; export class WalletRepository extends Wallets.WalletRepository { private readonly databaseService: Contracts.Database.DatabaseService = app.get( @@ -11,7 +10,7 @@ export class WalletRepository extends Wallets.WalletRepository { public findByAddress(address: string): Contracts.State.Wallet { if (address && !this.hasByAddress(address)) { - this.reindex(clonedeep(this.databaseService.walletRepository.findByAddress(address))); + this.reindex(cloneDeep(this.databaseService.walletRepository.findByAddress(address))); } return this.findByIndex(Contracts.State.WalletIndexes.Addresses, address); @@ -40,14 +39,16 @@ export class WalletRepository extends Wallets.WalletRepository { const sender: Contracts.State.Wallet = this.findByPublicKey(senderPublicKey); - return Handlers.Registry.get(transaction.type, transaction.typeGroup).throwIfCannotBeApplied( - transaction, - sender, - this.databaseService.walletRepository, - ); + return app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup) + .throwIfCannotBeApplied(transaction, sender, this.databaseService.walletRepository); } public async revertTransactionForSender(transaction: Interfaces.ITransaction): Promise { - return Handlers.Registry.get(transaction.type, transaction.typeGroup).revertForSender(transaction, this); + return app + .get("transactionHandlerRegistry") + .get(transaction.type, transaction.typeGroup) + .revertForSender(transaction, this); } } diff --git a/packages/core-transactions/package.json b/packages/core-transactions/package.json index d850d67b71..08935d8468 100644 --- a/packages/core-transactions/package.json +++ b/packages/core-transactions/package.json @@ -21,8 +21,7 @@ }, "dependencies": { "@arkecosystem/core-kernel": "^3.0.0-next.0", - "@arkecosystem/crypto": "^3.0.0-next.0", - "bs58check": "^2.1.2" + "@arkecosystem/crypto": "^3.0.0-next.0" }, "engines": { "node": ">=10.x" diff --git a/packages/core-transactions/src/handlers/handler-registry.ts b/packages/core-transactions/src/handlers/handler-registry.ts index 2450336928..6fece8d925 100644 --- a/packages/core-transactions/src/handlers/handler-registry.ts +++ b/packages/core-transactions/src/handlers/handler-registry.ts @@ -1,5 +1,5 @@ +import { app, Container, Services } from "@arkecosystem/core-kernel"; import { Enums, Errors, Transactions } from "@arkecosystem/crypto"; -import assert from "assert"; import { InvalidTransactionTypeError } from "../errors"; import { DelegateRegistrationTransactionHandler } from "./delegate-registration"; @@ -15,15 +15,18 @@ import { TransactionHandler, TransactionHandlerConstructor } from "./transaction import { TransferTransactionHandler } from "./transfer"; import { VoteTransactionHandler } from "./vote"; +@Container.injectable() export class TransactionHandlerRegistry { private readonly registeredTransactionHandlers: Map< Transactions.InternalTransactionType, TransactionHandler > = new Map(); - private readonly knownWalletAttributes: Map = new Map(); + private readonly attributes: Services.Attributes.AttributeIndex = app + .get(Container.Identifiers.AttributeService) + .get("wallet"); - constructor() { + public constructor() { this.registerTransactionHandler(TransferTransactionHandler); this.registerTransactionHandler(SecondSignatureTransactionHandler); this.registerTransactionHandler(DelegateRegistrationTransactionHandler); @@ -82,10 +85,8 @@ export class TransactionHandlerRegistry { Transactions.TransactionRegistry.registerTransactionType(transactionConstructor); } - const walletAttributes: ReadonlyArray = service.walletAttributes(); - for (const attribute of walletAttributes) { - assert(!this.knownWalletAttributes.has(attribute), `Wallet attribute is already known: ${attribute}`); - this.knownWalletAttributes.set(attribute, true); + for (const attribute of service.walletAttributes()) { + this.attributes.bind(attribute); } this.registeredTransactionHandlers.set(internalType, service); @@ -108,9 +109,8 @@ export class TransactionHandlerRegistry { throw new InvalidTransactionTypeError(internalType.toString()); } - const walletAttributes: ReadonlyArray = service.walletAttributes(); - for (const attribute of walletAttributes) { - this.knownWalletAttributes.delete(attribute); + for (const attribute of service.walletAttributes()) { + this.attributes.unbind(attribute); } Transactions.TransactionRegistry.deregisterTransactionType(transactionConstructor); @@ -118,8 +118,6 @@ export class TransactionHandlerRegistry { } public isKnownWalletAttribute(attribute: string): boolean { - return this.knownWalletAttributes.has(attribute); + return this.attributes.isBound(attribute); } } - -export const transactionHandlerRegistry = new TransactionHandlerRegistry(); diff --git a/packages/core-transactions/src/handlers/index.ts b/packages/core-transactions/src/handlers/index.ts index fe1b907bcb..96627ca42b 100644 --- a/packages/core-transactions/src/handlers/index.ts +++ b/packages/core-transactions/src/handlers/index.ts @@ -1,4 +1,3 @@ -import { transactionHandlerRegistry as Registry } from "./handler-registry"; import { TransactionHandler } from "./transaction"; -export { Registry, TransactionHandler }; +export { TransactionHandler }; diff --git a/packages/core-transactions/src/index.ts b/packages/core-transactions/src/index.ts index 15f17bca92..a73e7b763d 100644 --- a/packages/core-transactions/src/index.ts +++ b/packages/core-transactions/src/index.ts @@ -1,3 +1,5 @@ +export * from "./service-provider"; + import * as Errors from "./errors"; import * as Handlers from "./handlers"; import * as Interfaces from "./interfaces"; diff --git a/packages/core-transactions/src/service-provider.ts b/packages/core-transactions/src/service-provider.ts new file mode 100644 index 0000000000..2e3d9e8f95 --- /dev/null +++ b/packages/core-transactions/src/service-provider.ts @@ -0,0 +1,24 @@ +import { Providers } from "@arkecosystem/core-kernel"; + +import { TransactionHandlerRegistry } from "./handlers/handler-registry"; + +export class ServiceProvider extends Providers.ServiceProvider { + /** + * @returns {Promise} + * @memberof ServiceProvider + */ + public async register(): Promise { + this.app + .bind("transactionHandlerRegistry") + .to(TransactionHandlerRegistry) + .inSingletonScope(); + } + + /** + * @returns {Promise} + * @memberof ServiceProvider + */ + public async required(): Promise { + return true; + } +} diff --git a/packages/core/bin/config/testnet/app.js b/packages/core/bin/config/testnet/app.js index 6bb7cfe7a1..85f65e3468 100644 --- a/packages/core/bin/config/testnet/app.js +++ b/packages/core/bin/config/testnet/app.js @@ -1,7 +1,9 @@ module.exports = { flags: {}, services: {}, - plugins: [ + plugins: [{ + package: "@arkecosystem/core-transactions", + }, { package: "@arkecosystem/core-state", }, @@ -14,8 +16,7 @@ module.exports = { connection: { host: process.env.CORE_DB_HOST || "localhost", port: process.env.CORE_DB_PORT || 5432, - database: - process.env.CORE_DB_DATABASE || `${process.env.CORE_TOKEN}_${process.env.CORE_NETWORK_NAME}`, + database: process.env.CORE_DB_DATABASE || `${process.env.CORE_TOKEN}_${process.env.CORE_NETWORK_NAME}`, user: process.env.CORE_DB_USERNAME || process.env.CORE_TOKEN, password: process.env.CORE_DB_PASSWORD || "password", }, diff --git a/packages/core/package.json b/packages/core/package.json index a7261b6afc..b284348072 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -80,7 +80,6 @@ "fs-extra": "^8.1.0", "latest-version": "^5.1.0", "listr": "^0.14.3", - "lodash.minby": "^4.6.0", "ngrok": "^3.2.5", "nodejs-tail": "^1.1.0", "pretty-bytes": "^5.3.0", @@ -100,10 +99,8 @@ "@types/got": "^9.6.7", "@types/latest-version": "^4.0.1", "@types/listr": "^0.14.2", - "@types/lodash.minby": "^4.6.6", "@types/log-symbols": "^3.0.0", "@types/pretty-bytes": "^5.2.0", - "@types/pretty-ms": "^5.0.1", "@types/prompts": "^2.4.0", "@types/semver": "^6.0.1", "@types/wif": "^2.0.1" diff --git a/packages/core/src/hooks/command_not_found/suggest.ts b/packages/core/src/hooks/command_not_found/suggest.ts index 4a8d7cc69f..92355971f5 100644 --- a/packages/core/src/hooks/command_not_found/suggest.ts +++ b/packages/core/src/hooks/command_not_found/suggest.ts @@ -1,15 +1,15 @@ // Based on https://github.com/oclif/plugin-not-found/blob/master/src/index.ts +import { Utils } from "@arkecosystem/core-kernel"; import { Hook } from "@oclif/config"; import Chalk from "chalk"; import Levenshtein from "fast-levenshtein"; -import minBy from "lodash.minby"; import prompts from "prompts"; import { abort } from "../../common/cli"; const closest = (commandIDs: string[], cmd: string) => { - return minBy(commandIDs, c => Levenshtein.get(cmd, c))!; + return Utils.minBy(commandIDs, c => Levenshtein.get(cmd, c))!; }; export const init: Hook<"init"> = async function({ id, config }) { diff --git a/packages/crypto/package.json b/packages/crypto/package.json index 47ac0bc31b..e72e87bfb2 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -28,7 +28,6 @@ "prepublishOnly": "yarn build" }, "dependencies": { - "@hapi/joi": "^15.1.0", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "bcrypto": "^4.1.0", @@ -43,11 +42,6 @@ "deepmerge": "^4.0.0", "lodash.get": "^4.4.2", "lodash.set": "^4.3.2", - "lodash.sumby": "^4.6.0", - "node-forge": "^0.8.5", - "otplib": "^11.0.1", - "pluralize": "^8.0.0", - "tiny-glob": "^0.2.6", "wif": "^2.0.6" }, "devDependencies": { @@ -58,10 +52,6 @@ "@types/hapi__joi": "^15.0.2", "@types/lodash.get": "^4.4.6", "@types/lodash.set": "^4.3.6", - "@types/lodash.sumby": "^4.6.6", - "@types/node-forge": "^0.8.4", - "@types/otplib": "^7.0.0", - "@types/pluralize": "^0.0.29", "@types/wif": "^2.0.1", "rollup": "^1.17.0", "rollup-plugin-commonjs": "^10.0.1", diff --git a/yarn.lock b/yarn.lock index 6072c58c7c..069f482066 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,17 +2,18 @@ # yarn lockfile v1 -"@arkecosystem/utils@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@arkecosystem/utils/-/utils-0.3.0.tgz#f0d6040ab0134ee7db046ab8246cb17b2c5b9867" - integrity sha512-FNHihowzUItP8qQC8m8I2/XFogffjynbhIlQaAAvAQHep3QDfPL4Rr92iGdCDzpPpP166GlorkHD7344PfgxzA== +"@arkecosystem/utils@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@arkecosystem/utils/-/utils-0.4.0.tgz#1ddd86d0de7f198477d43d21eed256d71fd922cf" + integrity sha512-tcSVKIDQ+T26Y29pA/QgjUsoTsg1ljo4J8NzON/Gyg16J3lidPCgqiyn4l6+ylZcnlFIjz57X7P+QJ2AyFi9JQ== dependencies: - "@flatten/array" "^1.1.7" - dottie "^2.0.1" - fast-safe-stringify "^2.0.6" - fast-sort "^1.5.4" + "@flatten/array" "^1.1.8" + dot-prop "^5.1.0" + fast-safe-stringify "^2.0.7" + fast-sort "^1.5.6" fast.js "^0.1.1" - hyperid "^2.0.1" + immutable "^4.0.0-rc.12" + rfdc "^1.1.4" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": version "7.5.5" @@ -22,17 +23,17 @@ "@babel/highlight" "^7.0.0" "@babel/core@^7.1.0", "@babel/core@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" - integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48" + integrity sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helpers" "^7.5.5" - "@babel/parser" "^7.5.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/generator" "^7.6.0" + "@babel/helpers" "^7.6.0" + "@babel/parser" "^7.6.0" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.0" + "@babel/types" "^7.6.0" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" @@ -41,12 +42,12 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" - integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== +"@babel/generator@^7.4.0", "@babel/generator@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56" + integrity sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.6.0" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -207,14 +208,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.2.0" -"@babel/helpers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e" - integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g== +"@babel/helpers@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.0.tgz#21961d16c6a3c3ab597325c34c465c0887d31c6e" + integrity sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ== dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.0" + "@babel/types" "^7.6.0" "@babel/highlight@^7.0.0": version "7.5.0" @@ -225,10 +226,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.3.1", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" - integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== +"@babel/parser@^7.1.0", "@babel/parser@^7.3.1", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" + integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" @@ -338,10 +339,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz#a35f395e5402822f10d2119f6f8e045e3639a2ce" - integrity sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg== +"@babel/plugin-transform-block-scoping@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.0.tgz#c49e21228c4bbd4068a35667e6d951c75439b1dc" + integrity sha512-tIt4E23+kw6TgL/edACZwP1OUKrjOTyMrFMLoT5IOFrfMRabCgekjqFd5o6PaAMildBu46oFkekIdMuGkkPEpA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" @@ -367,10 +368,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a" - integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ== +"@babel/plugin-transform-destructuring@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" + integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -436,10 +437,10 @@ "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74" - integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ== +"@babel/plugin-transform-modules-commonjs@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" + integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== dependencies: "@babel/helper-module-transforms" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" @@ -463,12 +464,12 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" - integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.0.tgz#1e6e663097813bb4f53d42df0750cf28ad3bb3f1" + integrity sha512-jem7uytlmrRl3iCAuQyw8BpB4c4LWvSpvIeXKpMb+7j84lkx4m4mYr5ErAcmN5KM7B6BqrAvRGjBIbbzqCczew== dependencies: - regexp-tree "^0.1.6" + regexp-tree "^0.1.13" "@babel/plugin-transform-new-target@^7.4.4": version "7.4.4" @@ -562,9 +563,9 @@ regexpu-core "^4.5.4" "@babel/preset-env@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a" - integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A== + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.0.tgz#aae4141c506100bb2bfaa4ac2a5c12b395619e50" + integrity sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -582,10 +583,10 @@ "@babel/plugin-transform-arrow-functions" "^7.2.0" "@babel/plugin-transform-async-to-generator" "^7.5.0" "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.5.5" + "@babel/plugin-transform-block-scoping" "^7.6.0" "@babel/plugin-transform-classes" "^7.5.5" "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.5.0" + "@babel/plugin-transform-destructuring" "^7.6.0" "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/plugin-transform-duplicate-keys" "^7.5.0" "@babel/plugin-transform-exponentiation-operator" "^7.2.0" @@ -594,10 +595,10 @@ "@babel/plugin-transform-literals" "^7.2.0" "@babel/plugin-transform-member-expression-literals" "^7.2.0" "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.5.0" + "@babel/plugin-transform-modules-commonjs" "^7.6.0" "@babel/plugin-transform-modules-systemjs" "^7.5.0" "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.0" "@babel/plugin-transform-new-target" "^7.4.4" "@babel/plugin-transform-object-super" "^7.5.5" "@babel/plugin-transform-parameters" "^7.4.4" @@ -610,41 +611,41 @@ "@babel/plugin-transform-template-literals" "^7.4.4" "@babel/plugin-transform-typeof-symbol" "^7.2.0" "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.5.5" + "@babel/types" "^7.6.0" browserslist "^4.6.0" core-js-compat "^3.1.1" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== +"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" + integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.2.3", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" - integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.2.3", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516" + integrity sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" + "@babel/generator" "^7.6.0" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" - integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" + integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== dependencies: esutils "^2.0.2" lodash "^4.17.13" @@ -751,7 +752,7 @@ dependencies: benchmark "^2.1.4" -"@flatten/array@^1.1.7": +"@flatten/array@^1.1.8": version "1.1.8" resolved "https://registry.yarnpkg.com/@flatten/array/-/array-1.1.8.tgz#5cce316da119d7851ae51e08adb1af714b7f05b9" integrity sha512-6zP/OIuGkE+p7jdS0VwyqHoCjK0cuCsO+StkBEV1eHQ40m/A6o2+NnRB6G9h+OnYV4C4o8mZakWY56QUrsM6fA== @@ -765,9 +766,9 @@ "@hapi/hoek" "8.x.x" "@hapi/address@2.x.x": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.0.0.tgz#9f05469c88cb2fd3dcd624776b54ee95c312126a" - integrity sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.1.tgz#61395b5ed94c4cb19c2dc4c85969cff3d40d583f" + integrity sha512-DYuHzu978pP1XW1GD3HGvLnAFjbQTIgc2+V153FGkbS2pgo9haigCdwBnUDrbhaOkgiJlbZvoEqDrcxSLHpiWA== "@hapi/ammo@3.x.x": version "3.1.1" @@ -820,13 +821,13 @@ "@hapi/hoek" "8.x.x" "@hapi/catbox@10.x.x": - version "10.2.2" - resolved "https://registry.yarnpkg.com/@hapi/catbox/-/catbox-10.2.2.tgz#e5c7da6718f5ab5f3a0beefbf352983a3b988626" - integrity sha512-a4KejaKqDOMdwo/PIYoAaObVMmkfkG3RS85kPqNTTURjWnIV1+rrZ938f6RCz5EbrroKbuNC0bcvAt7lAD5LNg== + version "10.2.3" + resolved "https://registry.yarnpkg.com/@hapi/catbox/-/catbox-10.2.3.tgz#2df51ab943d7613df3718fa2bfd981dd9558cec5" + integrity sha512-kN9hXO4NYyOHW09CXiuj5qW1syc/0XeVOBsNNk0Tz89wWNQE5h21WF+VsfAw3uFR8swn/Wj3YEVBnWqo82m/JQ== dependencies: "@hapi/boom" "7.x.x" "@hapi/hoek" "8.x.x" - "@hapi/joi" "15.x.x" + "@hapi/joi" "16.x.x" "@hapi/podium" "3.x.x" "@hapi/content@4.x.x": @@ -848,10 +849,15 @@ resolved "https://registry.yarnpkg.com/@hapi/file/-/file-1.0.0.tgz#c91c39fd04db8bed5af82d2e032e7a4e65555b38" integrity sha512-Bsfp/+1Gyf70eGtnIgmScvrH8sSypO3TcK3Zf0QdHnzn/ACnAkI6KLtGACmNRPEzzIy+W7aJX5E+1fc9GwIABQ== +"@hapi/formula@1.x.x": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@hapi/formula/-/formula-1.2.0.tgz#994649c7fea1a90b91a0a1e6d983523f680e10cd" + integrity sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA== + "@hapi/hapi@^18.3.2": - version "18.3.2" - resolved "https://registry.yarnpkg.com/@hapi/hapi/-/hapi-18.3.2.tgz#c625cf6473e51cea54cd50163112c4aaa547169b" - integrity sha512-UJogSyMPe4VFfzjQW5v2ixLvTLZLSfPs1XV/DRnAl2znzsGCaNJI+tgNxjM9lszOjEEkMfxLgoXZadk9exnIxw== + version "18.4.0" + resolved "https://registry.yarnpkg.com/@hapi/hapi/-/hapi-18.4.0.tgz#607c33e31741bacba107011e2e24eaf431d8cc7a" + integrity sha512-uk9zqknRLcNVQKgrPURm85DqkdroWP8eDRekh/IPoKvC4VjdZSn6EH2eUriOwyud/CldeBS3HDIJ/PtRj3VxDQ== dependencies: "@hapi/accept" "3.x.x" "@hapi/ammo" "3.x.x" @@ -873,23 +879,18 @@ "@hapi/topo" "3.x.x" "@hapi/heavy@6.x.x": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@hapi/heavy/-/heavy-6.2.1.tgz#4f10877707b6c8a6ad1e9dbb6a3d13c24b3a3a29" - integrity sha512-uaEyC4AtGCGKt/LLBbdDQxJP1bFAbxiot6n/fwa4kyo6w8ULpXXCh8FxLlJ5mC06lqbAxQv45JyozIB6P4Dsig== + version "6.2.2" + resolved "https://registry.yarnpkg.com/@hapi/heavy/-/heavy-6.2.2.tgz#d42a282c62d5bb6332e497d8ce9ba52f1609f3e6" + integrity sha512-PY1dCCO6dsze7RlafIRhTaGeyTgVe49A/lSkxbhKGjQ7x46o/OFf7hLiRqTCDh3atcEKf6362EaB3+kTUbCsVA== dependencies: "@hapi/boom" "7.x.x" "@hapi/hoek" "8.x.x" - "@hapi/joi" "15.x.x" - -"@hapi/hoek@7.x.x": - version "7.2.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-7.2.1.tgz#14c4a1ae8795472c2d5e27ee61fd7bed1b8de226" - integrity sha512-X6YzLoU+VvZwUNe0VFJV/r4IiFHf61/6VItdnKjlay+YS/5qoczO3u/7wyTj2NtaOZHlFJBndNkfZ2Ag2XxCsg== + "@hapi/joi" "16.x.x" "@hapi/hoek@8.x.x": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.2.1.tgz#924af04cbb22e17359c620d2a9c946e63f58eb77" - integrity sha512-JPiBy+oSmsq3St7XlipfN5pNA6bDJ1kpa73PrK/zR29CVClDVqy04AanM/M/qx5bSF+I61DdCfAvRrujau+zRg== + version "8.2.4" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.2.4.tgz#684a14f4ca35d46f44abc87dfc696e5e4fe8a020" + integrity sha512-Ze5SDNt325yZvNO7s5C4fXDscjJ6dcqLFXJQ/M7dZRQCewuDj2iDUuBi6jLQt+APbW9RjjVEvLr35FXuOEqjow== "@hapi/iron@5.x.x": version "5.1.1" @@ -901,7 +902,7 @@ "@hapi/cryptiles" "4.x.x" "@hapi/hoek" "8.x.x" -"@hapi/joi@15.x.x", "@hapi/joi@^15.0.3", "@hapi/joi@^15.1.0", "@hapi/joi@^15.1.1": +"@hapi/joi@15.x.x", "@hapi/joi@^15.1.0", "@hapi/joi@^15.1.1": version "15.1.1" resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== @@ -911,22 +912,17 @@ "@hapi/hoek" "8.x.x" "@hapi/topo" "3.x.x" -"@hapi/joi@^16.0.0-preview": - version "16.0.0-rc2" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-16.0.0-rc2.tgz#7a31a185c282530a48864e2681967c7f6b2ef8c7" - integrity sha512-lrErR1oaXT/ugFLfoQkqEytJuLvXG0aRXV83qVfPjVbgyQBG0HnSG7tSIiB+OlkJYDHngE29cqNOq/hcski6hQ== +"@hapi/joi@16.x.x", "@hapi/joi@^16.0.0", "@hapi/joi@^16.0.1": + version "16.0.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-16.0.1.tgz#37c78878db0bc04c35996515e0aa186c0e2b5398" + integrity sha512-5TdjUnNAaK7+lWZ2HRXtgOnxe4VBoJLoX0XOrfkmw+2n4/VJ6wwOJMoD7u/F9alLsP31kOWDbnQhtS0WAKwD4Q== dependencies: "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "7.x.x" - "@hapi/marker" "1.x.x" + "@hapi/formula" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/pinpoint" "1.x.x" "@hapi/topo" "3.x.x" -"@hapi/marker@1.x.x": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@hapi/marker/-/marker-1.0.0.tgz#65b0b2b01d1be06304886ce9b4b77b1bfb21a769" - integrity sha512-JOfdekTXnJexfE8PyhZFyHvHjt81rBFSAbTIRAhF2vv/2Y1JzoKsGqxH/GpZJoF7aEfYok8JVcAHmSz1gkBieA== - "@hapi/mimos@4.x.x": version "4.1.1" resolved "https://registry.yarnpkg.com/@hapi/mimos/-/mimos-4.1.1.tgz#4dab8ed5c64df0603c204c725963a5faa4687e8a" @@ -954,21 +950,26 @@ "@hapi/hoek" "8.x.x" "@hapi/nigel" "3.x.x" +"@hapi/pinpoint@1.x.x": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@hapi/pinpoint/-/pinpoint-1.0.2.tgz#025b7a36dbbf4d35bf1acd071c26b20ef41e0d13" + integrity sha512-dtXC/WkZBfC5vxscazuiJ6iq4j9oNx1SHknmIr8hofarpKUZKmlUVYVIhNVzIEgK5Wrc4GMHL5lZtt1uS2flmQ== + "@hapi/podium@3.x.x": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@hapi/podium/-/podium-3.4.1.tgz#05ae4cba21ddc78bd4d026c720ed05d8b4e9474e" - integrity sha512-WbwYr5nK+GIrCdgEbN8R7Mh7z+j9AgntOLQ/YQdeLtBp+uScVmW9FoycKdNS5uweO74xwICr28Ob0DU74a2zmg== + version "3.4.2" + resolved "https://registry.yarnpkg.com/@hapi/podium/-/podium-3.4.2.tgz#3d3a2cb6aabbe46f98658151295d42030442bddc" + integrity sha512-g9zlAkRL2uDlnEo64xzEhFLblf4fdL5Z6evAO0wJhdxEvokI/+6ryv7k6uhND481LiLzQz8qTtPYMuhH1hichw== dependencies: "@hapi/hoek" "8.x.x" - "@hapi/joi" "15.x.x" + "@hapi/joi" "16.x.x" "@hapi/shot@4.x.x": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@hapi/shot/-/shot-4.1.1.tgz#7b5ca71f63a159a0b28a487cd293f35b04164439" - integrity sha512-TrsqCyaq24XcdvD0bSi26hjwyQQy5q/nzpasbPNgPLoGnxW3sCWE7ws3ba6dd6Atb8TEh9QBD7mBQDCrMMz2Ig== + version "4.1.2" + resolved "https://registry.yarnpkg.com/@hapi/shot/-/shot-4.1.2.tgz#69f999956041fe468701a89a413175a521dabed5" + integrity sha512-6LeHLjvsq/bQ0R+fhEyr7mqExRGguNTrxFZf5DyKe3CK6pNabiGgYO4JVFaRrLZ3JyuhkS0fo8iiRE2Ql2oA/A== dependencies: "@hapi/hoek" "8.x.x" - "@hapi/joi" "15.x.x" + "@hapi/joi" "16.x.x" "@hapi/sntp@^3.1.2": version "3.1.2" @@ -989,9 +990,9 @@ "@hapi/hoek" "8.x.x" "@hapi/statehood@6.x.x": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@hapi/statehood/-/statehood-6.1.1.tgz#64e9787163c57201c120b2381ba1982722ad0d8a" - integrity sha512-tMfS6B8QdrqTaKRUhHv6Ur7oPK6kcEZcnnvBK4IuaPZA9ma5UsyprTXkzbiB0V+0E56dMg3RabO1SABeZkzy6g== + version "6.1.2" + resolved "https://registry.yarnpkg.com/@hapi/statehood/-/statehood-6.1.2.tgz#6dda508b5da99a28a3ed295c3cac795cf6c12a02" + integrity sha512-pYXw1x6npz/UfmtcpUhuMvdK5kuOGTKcJNfLqdNptzietK2UZH5RzNJSlv5bDHeSmordFM3kGItcuQWX2lj2nQ== dependencies: "@hapi/boom" "7.x.x" "@hapi/bounce" "1.x.x" @@ -999,12 +1000,12 @@ "@hapi/cryptiles" "4.x.x" "@hapi/hoek" "8.x.x" "@hapi/iron" "5.x.x" - "@hapi/joi" "15.x.x" + "@hapi/joi" "16.x.x" "@hapi/subtext@6.x.x": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@hapi/subtext/-/subtext-6.1.1.tgz#3b63b4175a7bd06cd0d21f13912c7d81de90e6d2" - integrity sha512-Y7NjKFRPwlzKRw5IdwRou42hR4IBQZolT+/DlvfSr/CBjGyu38n5+9LKfNKzqB/0AVEk+xynCijsx1o1UVWX8A== + version "6.1.2" + resolved "https://registry.yarnpkg.com/@hapi/subtext/-/subtext-6.1.2.tgz#87754f0c25b4e2676575a3686541e5b555b0c717" + integrity sha512-G1kqD1E2QdxpvpL26WieIyo3z0qCa/sAGSa2TJI/PYPWCR9rL0rqFvhWY774xPZ4uK1PV3TIaJcx8AruAvxclg== dependencies: "@hapi/boom" "7.x.x" "@hapi/bourne" "1.x.x" @@ -1912,9 +1913,9 @@ tslib "^1" "@oclif/command@^1.4.31", "@oclif/command@^1.5.1", "@oclif/command@^1.5.12", "@oclif/command@^1.5.13", "@oclif/command@^1.5.18", "@oclif/command@^1.5.3", "@oclif/command@^1.5.4": - version "1.5.18" - resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.5.18.tgz#57125b501fafa155ad280bf8dc9f36a911c44f11" - integrity sha512-sfLb5UUCwyQ0w9LyQ1/3DUuD/RWnPZk6uvcK5P7pqD65WgRJaOPCqzuNZyb56kPsj6FftRp1UudApNKd7U0KBQ== + version "1.5.19" + resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.5.19.tgz#13f472450eb83bd6c6871a164c03eadb5e1a07ed" + integrity sha512-6+iaCMh/JXJaB2QWikqvGE9//wLEVYYwZd5sud8aLoLKog1Q75naZh2vlGVtg5Mq/NqpqGQvdIjJb3Bm+64AUQ== dependencies: "@oclif/config" "^1" "@oclif/errors" "^1.2.2" @@ -1976,9 +1977,9 @@ tslib "^1.9.3" "@oclif/plugin-autocomplete@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.1.3.tgz#c0dfb09aba9ed8c5149db5f7ac1f3d2d6917c0fc" - integrity sha512-gObSl+GOwhTuzJJh1vKocsTVAU/VX1V1MNnM+evb4c2z33KZeWiM+DanxXvM7JGDSKKaSE55Q2CXsAQnIuDi2w== + version "0.1.4" + resolved "https://registry.yarnpkg.com/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.1.4.tgz#ae993f196ca0085a63e3141814eaf9dc6c178418" + integrity sha512-ZyxJyL6jSt9Df68Smeu14xhZZwELE9IB5twhie1/56rt62nG6TJB4CZhaMqRk+33MDfU3JyWxNbIDMNMESlGqg== dependencies: "@oclif/command" "^1.4.31" "@oclif/config" "^1.6.22" @@ -2049,14 +2050,12 @@ integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw== "@octokit/endpoint@^5.1.0": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.3.2.tgz#2deda2d869cac9ba7f370287d55667be2a808d4b" - integrity sha512-gRjteEM9I6f4D8vtwU2iGUTn9RX/AJ0SVXiqBUEuYEWVGGAVjSXdT0oNmghH5lvQNWs8mwt6ZaultuG6yXivNw== + version "5.3.5" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.3.5.tgz#2822c3b01107806dbdce3863b6205e3eff4289ed" + integrity sha512-f8KqzIrnzPLiezDsZZPB+K8v8YSv6aKFl7eOu59O46lmlW4HagWl1U6NWl6LmT8d1w7NsKBI3paVtzcnRGO1gw== dependencies: - deepmerge "4.0.0" is-plain-object "^3.0.0" - universal-user-agent "^3.0.0" - url-template "^2.0.8" + universal-user-agent "^4.0.0" "@octokit/plugin-enterprise-rest@^3.6.1": version "3.6.2" @@ -2072,9 +2071,9 @@ once "^1.4.0" "@octokit/request@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.0.2.tgz#59a920451f24811c016ddc507adcc41aafb2dca5" - integrity sha512-z1BQr43g4kOL4ZrIVBMHwi68Yg9VbkRUyuAgqCp1rU3vbYa69+2gIld/+gHclw15bJWQnhqqyEb7h5a5EqgZ0A== + version "5.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.1.0.tgz#5609dcc7b5323e529f29d535214383d9eaf0c05c" + integrity sha512-I15T9PwjFs4tbWyhtFU2Kq7WDPidYMvRB7spmxoQRZfxSmiqullG+Nz+KbSmpkfnlvHwTr1e31R5WReFRKMXjg== dependencies: "@octokit/endpoint" "^5.1.0" "@octokit/request-error" "^1.0.1" @@ -2082,12 +2081,12 @@ is-plain-object "^3.0.0" node-fetch "^2.3.0" once "^1.4.0" - universal-user-agent "^3.0.0" + universal-user-agent "^4.0.0" "@octokit/rest@^16.28.4": - version "16.28.7" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.28.7.tgz#a2c2db5b318da84144beba82d19c1a9dbdb1a1fa" - integrity sha512-cznFSLEhh22XD3XeqJw51OLSfyL2fcFKUO+v2Ep9MTAFfFLS1cK1Zwd1yEgQJmJoDnj4/vv3+fGGZweG+xsbIA== + version "16.28.9" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.28.9.tgz#ac8c5f3ff305e9e0a0989a5245e4286f057a95d7" + integrity sha512-IKGnX+Tvzt7XHhs8f4ajqxyJvYAMNX5nWfoJm4CQj8LZToMiaJgutf5KxxpxoC3y5w7JTJpW5rnWnF4TsIvCLA== dependencies: "@octokit/request" "^5.0.0" "@octokit/request-error" "^1.0.2" @@ -2100,8 +2099,7 @@ lodash.uniq "^4.5.0" octokit-pagination-methods "^1.1.0" once "^1.4.0" - universal-user-agent "^3.0.0" - url-template "^2.0.8" + universal-user-agent "^4.0.0" "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" @@ -2200,18 +2198,7 @@ resolved "https://registry.yarnpkg.com/@types/async/-/async-3.0.1.tgz#eb33247ffc23d904f9069a292c260c6324cb652c" integrity sha512-fBq+1+btw/4CPGCpp3B05vUsslyikLUSUoZmFEjjHrUEPOisIVxUzGJFg1k43iWq9y0lC2UDqWAlg5ynUCwwSA== -"@types/babel__core@^7.1.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f" - integrity sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__core@^7.1.3": +"@types/babel__core@^7.1.0", "@types/babel__core@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA== @@ -2270,11 +2257,6 @@ resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.27.tgz#61eb4d75dc6bfbce51cf49ee9bbebe941b2cb5d0" integrity sha512-6BmYWSBea18+tSjjSC3QIyV93ZKAeNWGM7R6aYt1ryTZXrlHF+QLV0G2yV0viEGVyRkyQsWfMoJ0k/YghBX5sQ== -"@types/braces@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" - integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw== - "@types/buffer-xor@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/buffer-xor/-/buffer-xor-2.0.0.tgz#15738051e0720b68120cd2cc3f204aa4dc16bab1" @@ -2346,11 +2328,6 @@ resolved "https://registry.yarnpkg.com/@types/depcheck/-/depcheck-0.8.0.tgz#5c33f80c4d4ce6aa576c9ac09d326084d5c0884d" integrity sha512-kpGVvWeWWhfZ8SPW+OWYmLfrHVCZtIcOzKaGJHUk4WcheY6UgxUb5xU+3aVymZEvQ7z9MuWmzaKibF8YwxR0Xg== -"@types/dottie@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/dottie/-/dottie-2.0.3.tgz#71725fceafe2df8f1e07d6bb7436524af530b376" - integrity sha512-XtN0M6lKMCYiDLnLXB4FSbEr5vgrpNEA24jhjnvhqobIYYDqyahTJrDblLqJ8bz1eG+Vm6BE0yqtsr88prEjww== - "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" @@ -2431,13 +2408,6 @@ integrity sha512-x/ZK824GomII7Yoei/nMoB46NQcSfGe0iVpZK3uUivxIAfUUSzRvu8RQO7ZkKapIgzgshHZc+GR+z/BQ8l2VLg== "@types/hapi__joi@*", "@types/hapi__joi@^15.0.2", "@types/hapi__joi@^15.0.3": - version "15.0.3" - resolved "https://registry.yarnpkg.com/@types/hapi__joi/-/hapi__joi-15.0.3.tgz#eeeca99e3829636975bf39532d6e8279409c78f2" - integrity sha512-kncvQstpAQSjQ+J+tL2oYerjOEepv+yJHKM/JD/NmFZyDcy3rYOBcMJhdHRDjBxuSZu3ipGECszhgtmug9VSuw== - dependencies: - "@types/hapi__joi" "*" - -"@types/hapi__joi@^15.0.4": version "15.0.4" resolved "https://registry.yarnpkg.com/@types/hapi__joi/-/hapi__joi-15.0.4.tgz#49e2e1e6da15ade0fdd6db4daf94aecb07bb391b" integrity sha512-VSS6zc7AIOdHVXmqKaGNPYl8eGrMvWi0R5pt3evJL3UdxO8XS28/XAkBXNyLQoymHxhMd4bF3o1U9mZkWDeN8w== @@ -2530,13 +2500,6 @@ "@types/node" "*" rxjs "^6.5.1" -"@types/lodash.chunk@^4.2.6": - version "4.2.6" - resolved "https://registry.yarnpkg.com/@types/lodash.chunk/-/lodash.chunk-4.2.6.tgz#9d35f05360b0298715d7f3d9efb34dd4f77e5d2a" - integrity sha512-SPlusB7jxXyGcTXYcUdWr7WmhArO/rmTq54VN88iKMxGUhyg79I4Q8n4riGn3kjaTjOJrVlHhxgX/d7woak5BQ== - dependencies: - "@types/lodash" "*" - "@types/lodash.clonedeep@^4.5.6": version "4.5.6" resolved "https://registry.yarnpkg.com/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz#3b6c40a0affe0799a2ce823b440a6cf33571d32b" @@ -2544,20 +2507,6 @@ dependencies: "@types/lodash" "*" -"@types/lodash.compact@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@types/lodash.compact/-/lodash.compact-3.0.6.tgz#a4c356372f51fb39ff48eb4f014a19f39f674ab5" - integrity sha512-0pDKTX4alTyxH85Y5Al4YzS8oriqBQykADW6zLAHkZwNBMPXFIhdE2ctg0Z2GVcZsABxo5CI/J3vmHrFkdQBfA== - dependencies: - "@types/lodash" "*" - -"@types/lodash.flatten@^4.4.6": - version "4.4.6" - resolved "https://registry.yarnpkg.com/@types/lodash.flatten/-/lodash.flatten-4.4.6.tgz#b74c3267c87e44e603137d4621e8a9396b6551f5" - integrity sha512-omCBl4M8EJSmf2DZqh4/zwjgXQpzC7YO/PXTcG8rI9r7xun8CohrHeNx8HZRkqWc61uJfIaZop9MwJEXPVssHw== - dependencies: - "@types/lodash" "*" - "@types/lodash.get@^4.4.6": version "4.4.6" resolved "https://registry.yarnpkg.com/@types/lodash.get/-/lodash.get-4.4.6.tgz#0c7ac56243dae0f9f09ab6f75b29471e2e777240" @@ -2565,69 +2514,6 @@ dependencies: "@types/lodash" "*" -"@types/lodash.groupby@^4.6.6": - version "4.6.6" - resolved "https://registry.yarnpkg.com/@types/lodash.groupby/-/lodash.groupby-4.6.6.tgz#4d9b61a4d8b0d83d384975cabfed4c1769d6792e" - integrity sha512-kwg3T7Ia63KtDNoQQR8hKrLHCAgrH4I44l5uEMuA6JCbj7DiSccaV4tNV1vbjtAOpX990SolVthJCmBVtRVRgw== - dependencies: - "@types/lodash" "*" - -"@types/lodash.head@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/lodash.head/-/lodash.head-4.0.6.tgz#5c793cfc420799174541412f24c0b0dc69652de5" - integrity sha512-WrbllVqxpgpEnLPNooU9q3h9vFVYUzS4sMDp0UpEnguIHFxdAA161UMnaJ92ccGSc87e901EHFwXbuNysdSaQg== - dependencies: - "@types/lodash" "*" - -"@types/lodash.isempty@^4.4.6": - version "4.4.6" - resolved "https://registry.yarnpkg.com/@types/lodash.isempty/-/lodash.isempty-4.4.6.tgz#48a5576985727d9b85d59a60199d6b11ac756a3e" - integrity sha512-AauKrFlA4z3Usog5HLGDupKzkCP7h5KXGlfAcRGUfvTmL7guVuEzDSNI6lYJ7syO7J2RE2F47179pSLr26UHIw== - dependencies: - "@types/lodash" "*" - -"@types/lodash.isequal@^4.5.5": - version "4.5.5" - resolved "https://registry.yarnpkg.com/@types/lodash.isequal/-/lodash.isequal-4.5.5.tgz#4fed1b1b00bef79e305de0352d797e9bb816c8ff" - integrity sha512-4IKbinG7MGP131wRfceK6W4E/Qt3qssEFLF30LnJbjYiSfHGGRU/Io8YxXrZX109ir+iDETC8hw8QsDijukUVg== - dependencies: - "@types/lodash" "*" - -"@types/lodash.minby@^4.6.6": - version "4.6.6" - resolved "https://registry.yarnpkg.com/@types/lodash.minby/-/lodash.minby-4.6.6.tgz#0b86e232d8c2e4e159aa906f4d36d691d8de1b9c" - integrity sha512-lSvOQp80I6FUK7rOFdXXjDy8UBRWuczSOo9kOGHZFaTW1OQrS0+sS5rQPG6Gex9AHIuXDvELMNoNzD6Oz6WWyA== - dependencies: - "@types/lodash" "*" - -"@types/lodash.orderby@^4.6.6": - version "4.6.6" - resolved "https://registry.yarnpkg.com/@types/lodash.orderby/-/lodash.orderby-4.6.6.tgz#126543bb597477dc9b27d748b5822244f577915c" - integrity sha512-wQzu6xK+bSwhu45OeMI7fjywiIZiiaBzJB8W3fwnF1SJXHoOXRLutrSnVmq4yHPOM036qsy8lx9wHQcAbXNjJw== - dependencies: - "@types/lodash" "*" - -"@types/lodash.partition@^4.6.6": - version "4.6.6" - resolved "https://registry.yarnpkg.com/@types/lodash.partition/-/lodash.partition-4.6.6.tgz#fdc23c9809b64b1d2e2f07faef045c035f0cd2c7" - integrity sha512-s8ZNNFWhBgTKI4uNxVrTs3Aa7UQoi7Fesw55bfpBBMCLda+uSuwDyuax8ka9aBy8Ccsjp2SiS034DkSZa+CzVA== - dependencies: - "@types/lodash" "*" - -"@types/lodash.pick@^4.4.6": - version "4.4.6" - resolved "https://registry.yarnpkg.com/@types/lodash.pick/-/lodash.pick-4.4.6.tgz#ae4e8f109e982786313bb6aac4b1a73aefa6e9be" - integrity sha512-u8bzA16qQ+8dY280z3aK7PoWb3fzX5ATJ0rJB6F+uqchOX2VYF02Aqa+8aYiHiHgPzQiITqCgeimlyKFy4OA6g== - dependencies: - "@types/lodash" "*" - -"@types/lodash.sample@^4.2.6": - version "4.2.6" - resolved "https://registry.yarnpkg.com/@types/lodash.sample/-/lodash.sample-4.2.6.tgz#ec7f6a6dbd0401c4a1e5f5b3c85fa5a85a42a84a" - integrity sha512-hxBvsUjPcW1O8mC9TiBE4m8TwvLuUU+zW8J6GI1M6WmPg8J87mXGt7zavpJ/9Znb+0rVsSB3VNAjCFaJ9YUJKg== - dependencies: - "@types/lodash" "*" - "@types/lodash.set@^4.3.6": version "4.3.6" resolved "https://registry.yarnpkg.com/@types/lodash.set/-/lodash.set-4.3.6.tgz#33e635c2323f855359225df6a5c8c6f1f1908264" @@ -2635,13 +2521,6 @@ dependencies: "@types/lodash" "*" -"@types/lodash.shuffle@^4.2.6": - version "4.2.6" - resolved "https://registry.yarnpkg.com/@types/lodash.shuffle/-/lodash.shuffle-4.2.6.tgz#191b0fc66699214558352123811d1657d9ed8930" - integrity sha512-ucI9VswlV9jOZiIh43Nd0tJ4Z8pfXy3PbQ9cB6Re1gPds8gLbOdmB0l3UkVI2crZjnQB95bhyNZVEDH8DgglYA== - dependencies: - "@types/lodash" "*" - "@types/lodash.snakecase@^4.1.6": version "4.1.6" resolved "https://registry.yarnpkg.com/@types/lodash.snakecase/-/lodash.snakecase-4.1.6.tgz#85f2b68f67b36c39875f26484b3a78b158ebf060" @@ -2649,34 +2528,6 @@ dependencies: "@types/lodash" "*" -"@types/lodash.sortby@^4.7.6": - version "4.7.6" - resolved "https://registry.yarnpkg.com/@types/lodash.sortby/-/lodash.sortby-4.7.6.tgz#eed689835f274b553db4ae16a4a23f58b79618a1" - integrity sha512-EnvAOmKvEg7gdYpYrS6+fVFPw5dL9rBnJi3vcKI7wqWQcLJVF/KRXK9dH29HjGNVvFUj0s9prRP3J8jEGnGKDw== - dependencies: - "@types/lodash" "*" - -"@types/lodash.sumby@^4.6.6": - version "4.6.6" - resolved "https://registry.yarnpkg.com/@types/lodash.sumby/-/lodash.sumby-4.6.6.tgz#25f9aba30bc9fd8203e43ebb3a3b6460f5f9b4b4" - integrity sha512-C7P2OuGcbCHxQ7dfEHNWfdQUhziwosJ8X6TzDZqIUVWamqFxUZX32JhoWZ/L5Z/lZX3HLTlQs1E5MtG0l9C9cA== - dependencies: - "@types/lodash" "*" - -"@types/lodash.take@^4.1.6": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/lodash.take/-/lodash.take-4.1.6.tgz#15f4911344d23647d660eceeee8e2c2679291bf5" - integrity sha512-KFENlBE7Dh81ndKQJf7jzwfRN5cDZIyxjn1MKubmu/MkcZtJaL8zh7szLFU6AuhxZL5PPS/wPeSfCwV+1G8pIA== - dependencies: - "@types/lodash" "*" - -"@types/lodash.uniq@^4.5.6": - version "4.5.6" - resolved "https://registry.yarnpkg.com/@types/lodash.uniq/-/lodash.uniq-4.5.6.tgz#adb052f6c7eeb38b920c13166e7a972dd960b4c5" - integrity sha512-XHNMXBtiwsWZstZMyxOYjr0e8YYWv0RgPlzIHblTuwBBiWo2MzWVaTBihtBpslb5BglgAWIeBv69qt1+RTRW1A== - dependencies: - "@types/lodash" "*" - "@types/lodash@*": version "4.14.138" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.138.tgz#34f52640d7358230308344e579c15b378d91989e" @@ -2699,13 +2550,6 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q== -"@types/micromatch@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/micromatch/-/micromatch-3.1.0.tgz#514c8a3d24b2680a9b838eeb80e6d7d724545433" - integrity sha512-06uA9V7v68RTOzA3ky1Oi0HmCPa+YJ050vM+sTECwkxnHUQnO17TAcNCGX400QT6bldUiPb7ux5oKy0j8ccEDw== - dependencies: - "@types/braces" "*" - "@types/minimatch@*", "@types/minimatch@3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -2732,10 +2576,10 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^12.7.2": - version "12.7.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.3.tgz#27b3f40addaf2f580459fdb405222685542f907a" - integrity sha512-3SiLAIBkDWDg6vFo0+5YJyHPWU9uwu40Qe+v+0MH8wRKYBimHvvAOyk3EzMrD/TrIlLYfXrqDqrg913PynrMJQ== +"@types/node@*", "@types/node@^12.7.4", "@types/node@^12.7.5": + version "12.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.5.tgz#e19436e7f8e9b4601005d73673b6dc4784ffcc2f" + integrity sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w== "@types/node@10.12.18": version "10.12.18" @@ -2747,20 +2591,15 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== -"@types/node@^12.7.4": - version "12.7.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04" - integrity sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ== - "@types/node@^6.14.4": version "6.14.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.14.7.tgz#2173f79d7a61d97d3aad2feeaac7ac69a3df39af" integrity sha512-YbPXbaynBTe0pVExPhL76TsWnxSPeFAvImIsmylpBWn/yfw+lHy+Q68aawvZHsgskT44ZAoeE67GM5f+Brekew== "@types/node@^8.0.7", "@types/node@^8.10.50": - version "8.10.53" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.53.tgz#5fa08eef810b08b2c03073e360b54f7bad899db1" - integrity sha512-aOmXdv1a1/vYUn1OT1CED8ftbkmmYbKhKGSyMDeJiidLvKRKvZUQOdXwG/wcNY7T1Qb0XTlVdiYjIq00U7pLrQ== + version "8.10.54" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.54.tgz#1c88eb253ac1210f1a5876953fb70f7cc4928402" + integrity sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -2773,9 +2612,9 @@ integrity sha512-OZFn1eVNRGpaCfVZhTCIeSlHfxXM1oe1qtu9w07hWfH4nHiDo+tI6b6pIrOCNKQN9gYOP2M4Q43YvkT1R50deA== "@types/pg-query-stream@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/pg-query-stream/-/pg-query-stream-1.0.2.tgz#88ba9d7634d12e2a2a9ab31829970b3bdcc9d9ca" - integrity sha512-aZKYcd3p5xRQ97tD5AkeWD+ZIY9HobFUsPeuGNSdZZnVAi20Bh0nTyUZkEGh3vPJA1TNmCAG94Ou9vv8i0blww== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/pg-query-stream/-/pg-query-stream-1.0.3.tgz#3b858d4a0f66fbb73e6927ea53ef5bf375f88f85" + integrity sha512-39/vyj0pyaaUyqjvA4siTZV9eqqM8+OkI+bd66BSpPc+8BxHP5CCCh8z+N04Td4xqeyX10+YJQIYCtLHo0ywjA== dependencies: "@types/node" "*" "@types/pg" "*" @@ -2788,9 +2627,9 @@ moment ">=2.14.0" "@types/pg@*": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@types/pg/-/pg-7.11.0.tgz#11dddc4d54f9b3a8c6dc7e6a6e58a71a033db9ad" - integrity sha512-wXduaNIDQp7w9ediwIRAH+FpdgtOlOwFVlYe9DtBPDczxcHgfb0blLNR7yYVNUMhspC0xOLykOvMDHavbO0Sxg== + version "7.11.1" + resolved "https://registry.yarnpkg.com/@types/pg/-/pg-7.11.1.tgz#3b0b53e8be0fd44579f1cdbd27b64a67a7434e03" + integrity sha512-ayO8XV0xuJV3cEY4wySyD/7MA1HL75UpvJ5JAme00kNWA5pddlGtN4BRG97xgGe2NHgwxN8AkdjTQUEDypM8Uw== dependencies: "@types/node" "*" "@types/pg-types" "*" @@ -2820,13 +2659,6 @@ dependencies: pretty-bytes "*" -"@types/pretty-ms@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/pretty-ms/-/pretty-ms-5.0.1.tgz#f2f0d7be58caf8613d149053d446e0282ae11ff3" - integrity sha512-FFR4uj0p47Yq6JCrOt7DCaiUJIw7t9Vh7wwt3bF6qq99QRqjSH/doEGZsIIgZqhDmwjBObVBkrn0ICm1pY+mPg== - dependencies: - pretty-ms "*" - "@types/prompts@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/prompts/-/prompts-2.4.0.tgz#b4b8fdb70a635ad6b6b34e05545f8417f639a9c9" @@ -2839,11 +2671,6 @@ dependencies: "@types/node" "*" -"@types/random-seed@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@types/random-seed/-/random-seed-0.3.3.tgz#7741f7b0a4513198a9396ce4ad25832f799a6727" - integrity sha512-kHsCbIRHNXJo6EN5W8EA5b4i1hdT6jaZke5crBPLUcLqaLdZ0QBq8QVMbafHzhjFF83Cl9qlee2dChD18d/kPg== - "@types/readable-stream@^2.3.4": version "2.3.4" resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.4.tgz#993d7cab73f392766716c5f18376d078ccbe2cbe" @@ -2853,9 +2680,9 @@ safe-buffer "*" "@types/request@^2.48.2": - version "2.48.2" - resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.2.tgz#936374cbe1179d7ed529fc02543deb4597450fed" - integrity sha512-gP+PSFXAXMrd5PcD7SqHeUjdGshAI8vKQ3+AvpQr3ht9iQea+59LOKvKITcQI+Lg+1EIkDP6AFSBUJPWG8GDyA== + version "2.48.3" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.3.tgz#970b8ed2317568c390361d29c555a95e74bd6135" + integrity sha512-3Wo2jNYwqgXcIz/rrq18AdOZUQB8cQ34CXZo+LUwPJNpvRAL86+Kc2wwI8mqpz9Cr1V+enIox5v+WZhy/p3h8w== dependencies: "@types/caseless" "*" "@types/node" "*" @@ -2942,10 +2769,10 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" integrity sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ== -"@types/semver@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.0.1.tgz#a984b405c702fa5a7ec6abc56b37f2ba35ef5af6" - integrity sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg== +"@types/semver@^6.0.1", "@types/semver@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.0.2.tgz#5e8b09f0e4af53034b1d0fb9977a277847836205" + integrity sha512-G1Ggy7/9Nsa1Jt2yiBR2riEuyK2DFNnqow6R7cromXPMNynackRY1vqFTLz/gwnef1LHokbXThcPhqMRjUbkpQ== "@types/set-value@^2.0.0": version "2.0.0" @@ -3031,9 +2858,9 @@ "@types/node" "*" "@types/yargs-parser@*": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.0.0.tgz#453743c5bbf9f1bed61d959baab5b06be029b2d0" - integrity sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw== + version "13.1.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" + integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== "@types/yargs@^13.0.0": version "13.0.2" @@ -3043,24 +2870,24 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.1.0.tgz#4bcd978d88419ea971613675f2620dde39920d69" - integrity sha512-3i/dLPwxaVfCsaLu3HkB8CAA1Uw3McAegrTs+VBJ0BrGRKW7nUwSqRfHfCS7sw7zSbf62q3v0v6pOS8MyaYItg== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.2.0.tgz#cba8caa6ad8df544c46bca674125a31af8c9ac2f" + integrity sha512-rOodtI+IvaO8USa6ValYOrdWm9eQBgqwsY+B0PPiB+aSiK6p6Z4l9jLn/jI3z3WM4mkABAhKIqvGIBl0AFRaLQ== dependencies: - "@typescript-eslint/experimental-utils" "2.1.0" - eslint-utils "^1.4.0" + "@typescript-eslint/experimental-utils" "2.2.0" + eslint-utils "^1.4.2" functional-red-black-tree "^1.0.1" regexpp "^2.0.1" - tsutils "^3.14.0" + tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.1.0.tgz#0837229f0e75a32db0db9bf662ad0eface914453" - integrity sha512-ZJGLYXa4nxjNzomaEk1qts38B/vludg2LOM7dRc7SppEKsMPTS1swaTKS/pom+x4d/luJGoG00BDIss7PR1NQA== +"@typescript-eslint/experimental-utils@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.2.0.tgz#31d855fbc425168ecf56960c777aacfcca391cff" + integrity sha512-IMhbewFs27Frd/ICHBRfIcsUCK213B8MsEUqvKFK14SDPjPR5JF6jgOGPlroybFTrGWpMvN5tMZdXAf+xcmxsA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.1.0" - eslint-scope "^4.0.0" + "@typescript-eslint/typescript-estree" "2.2.0" + eslint-scope "^5.0.0" "@typescript-eslint/experimental-utils@^1.13.0": version "1.13.0" @@ -3072,14 +2899,14 @@ eslint-scope "^4.0.0" "@typescript-eslint/parser@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.1.0.tgz#ca62b26fa6a5a34ecdec4a000f22baf103791830" - integrity sha512-0+hzirRJoqE1T4lSSvCfKD+kWjIpDWfbGBiisK5CENcr+22pPkHB2sfV1giON+UxHV4A08SSrQonZk7X2zIQdw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.2.0.tgz#3cd758ed85ae9be06667beb61bbdf8060f274fb7" + integrity sha512-0mf893kj9L65O5sA7wP6EoYvTybefuRFavUNhT7w9kjhkdZodoViwVS+k3D+ZxKhvtL7xGtP/y/cNMJX9S8W4A== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.1.0" - "@typescript-eslint/typescript-estree" "2.1.0" - eslint-visitor-keys "^1.0.0" + "@typescript-eslint/experimental-utils" "2.2.0" + "@typescript-eslint/typescript-estree" "2.2.0" + eslint-visitor-keys "^1.1.0" "@typescript-eslint/typescript-estree@1.13.0": version "1.13.0" @@ -3089,15 +2916,15 @@ lodash.unescape "4.0.1" semver "5.5.0" -"@typescript-eslint/typescript-estree@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.1.0.tgz#88e676cc9760516711f6fe43958adc31b93de8e5" - integrity sha512-482ErJJ7QYghBh+KA9G+Fwcuk/PLTy+9NBMz8S+6UFrUUnVvHRNAL7I70kdws2te0FBYEZW7pkDaXoT+y8UARw== +"@typescript-eslint/typescript-estree@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.2.0.tgz#1e2aad5ed573f9f7a8e3261eb79404264c4fc57f" + integrity sha512-9/6x23A3HwWWRjEQbuR24on5XIfVmV96cDpGR9671eJv1ebFKHj2sGVVAwkAVXR2UNuhY1NeKS2QMv5P8kQb2Q== dependencies: glob "^7.1.4" is-glob "^4.0.1" lodash.unescape "4.0.1" - semver "^6.2.0" + semver "^6.3.0" "@typeskrift/foreman@^0.2.1": version "0.2.1" @@ -3147,9 +2974,9 @@ accept@3.x.x: hoek "6.x.x" acorn-globals@^4.1.0: - version "4.3.3" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.3.tgz#a86f75b69680b8780d30edd21eee4e0ea170c05e" - integrity sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ== + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" @@ -3631,9 +3458,9 @@ balanced-match@^1.0.0: integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base-x@^3.0.2: - version "3.0.6" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.6.tgz#de047ec95f5f7b99ae63d830a2a894c96538b2cd" - integrity sha512-4PaF8u2+AlViJxRVjurkLTxpp7CaFRD/jo5rPT9ONnKxyhQ8f59yzamEvq7EkriG56yn5On4ONyaG75HLqr46w== + version "3.0.7" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.7.tgz#1c5a7fafe8f66b4114063e8da102799d4e7c408f" + integrity sha512-zAKJGuQPihXW22fkrfOclUUZXM2g92z5GzlSMHxhO6r6Qj+Nm0ccaGNBzDZojzwOMkpjAv4J0fOv1U4go+a4iw== dependencies: safe-buffer "^5.0.1" @@ -3691,9 +3518,9 @@ benchmark@^2.1.4: platform "^1.3.3" better-sqlite3@^5.4.0, better-sqlite3@^5.4.2: - version "5.4.2" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-5.4.2.tgz#8eaa7bc5e66c67a4665d45969363cfedbec7ccc1" - integrity sha512-BtRGasolxvhCwgsak876fBZiXMn0YNOfvy9RYXT0RO3G8RkL9z45qXTuavuMXUL6bx4cxdxP1k4pC0xOfVKwvg== + version "5.4.3" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-5.4.3.tgz#2cb843ce14c56de9e9c0ca6b89844b7d4b5794b8" + integrity sha512-fPp+8f363qQIhuhLyjI4bu657J/FfMtgiiHKfaTsj3RWDkHlWC1yT7c6kHZDnBxzQVoAINuzg553qKmZ4F1rEw== dependencies: integer "^2.1.0" tar "^4.4.10" @@ -3881,13 +3708,13 @@ browserify-aes@^1.2.0: safe-buffer "^5.0.1" browserslist@^4.6.0, browserslist@^4.6.6: - version "4.6.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.6.tgz#6e4bf467cde520bc9dbdf3747dafa03531cec453" - integrity sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA== + version "4.7.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" + integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== dependencies: - caniuse-lite "^1.0.30000984" - electron-to-chromium "^1.3.191" - node-releases "^1.1.25" + caniuse-lite "^1.0.30000989" + electron-to-chromium "^1.3.247" + node-releases "^1.1.29" bs-logger@0.x: version "0.2.6" @@ -3903,7 +3730,7 @@ bs58@^4.0.0: dependencies: base-x "^3.0.2" -bs58check@<3.0.0, bs58check@^2.1.1, bs58check@^2.1.2: +bs58check@<3.0.0, bs58check@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== @@ -3966,9 +3793,9 @@ buffer-xor@^2.0.2: safe-buffer "^5.1.1" buffer@^5.2.1: - version "5.4.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.2.tgz#2012872776206182480eccb2c0fba5f672a2efef" - integrity sha512-iy9koArjAFCzGnx3ZvNA6Z0clIbbFgbdWQ0mKD3hO0krOrZh8UgA6qMKcZvwLJxS+D6iVR76+5/pV56yMNYTag== + version "5.4.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115" + integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -4146,7 +3973,7 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30000984: +caniuse-lite@^1.0.30000989: version "1.0.30000989" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== @@ -4571,10 +4398,10 @@ commander@^2.20.0, commander@~2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== -commander@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.0.tgz#0641ea00838c7a964627f04cddc336a2deddd60a" - integrity sha512-pl3QrGOBa9RZaslQiqnnKX2J068wcQw7j9AIaBQ9/JEp5RY6je4jKTImg0Bd+rpoONSe7GUFSgkxLeo17m3Pow== +commander@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.1.tgz#4595aec3530525e671fb6f85fb173df8ff8bf57a" + integrity sha512-UNgvDd+csKdc9GD4zjtkHKQbT8Aspt2jCBqNSPp53vAS0L1tS9sXB2TCEOPHJ7kt9bN/niWkYj8T3RQSoMXdSQ== commondir@^1.0.1: version "1.0.1" @@ -4867,10 +4694,10 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cron@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/cron/-/cron-1.7.1.tgz#e85ee9df794d1bc6579896ee382053c3ce33778f" - integrity sha512-gmMB/pJcqUVs/NklR1sCGlNYM7TizEw+1gebz20BMc/8bTm/r7QUp3ZPSPlG8Z5XRlvb7qhjEjq/+bdIfUCL2A== +cron@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/cron/-/cron-1.7.2.tgz#2ea1f35c138a07edac2ac5af5084ed6fee5723db" + integrity sha512-+SaJ2OfeRvfQqwXQ2kgr0Y5pzBR/lijf5OpnnaruwWnmI799JfWr2jN2ItOV9s3A/+TFOt6mxvKzQq5F0Jp6VQ== dependencies: moment-timezone "^0.5.x" @@ -4932,10 +4759,10 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= dargs@^4.0.1: version "4.1.0" @@ -5087,7 +4914,7 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@4.0.0, deepmerge@^4.0.0: +deepmerge@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09" integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww== @@ -5104,7 +4931,7 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e" integrity sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw== -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -5325,6 +5152,13 @@ dot-prop@^4.1.0, dot-prop@^4.2.0: dependencies: is-obj "^1.0.0" +dot-prop@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.1.0.tgz#bdd8c986a77b83e3fca524e53786df916cabbd8a" + integrity sha512-n1oC6NBF+KM9oVXtjmen4Yo7HyAVWV2UUl50dCYJdw2924K6dX9bf9TTTWaKtYlRn0FEtxG27KS80ayVLixxJA== + dependencies: + is-obj "^2.0.0" + dotnet-deps-parser@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/dotnet-deps-parser/-/dotnet-deps-parser-4.5.0.tgz#53ef53a058dec156fcdf9008b880ecc9675ddde0" @@ -5336,11 +5170,6 @@ dotnet-deps-parser@4.5.0: tslib "^1.9.3" xml2js "0.4.19" -dottie@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.1.tgz#697ad9d72004db7574d21f892466a3c285893659" - integrity sha512-ch5OQgvGDK2u8pSZeSYAQaV/lczImd7pMJ7BcEPXmnFVjy4yJIzP6CsODJUTH8mg1tyH1Z2abOiuJO3DjZ/GBw== - duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -5389,18 +5218,18 @@ editions@^1.1.1: resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" integrity sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg== -editions@^2.1.0, editions@^2.1.2, editions@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/editions/-/editions-2.1.3.tgz#727ccf3ec2c7b12dcc652c71000f16c4824d6f7d" - integrity sha512-xDZyVm0A4nLgMNWVVLJvcwMjI80ShiH/27RyLiCnW1L273TcJIA25C4pwJ33AWV01OX6UriP35Xu+lH4S7HWQw== +editions@^2.1.0, editions@^2.1.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/editions/-/editions-2.2.0.tgz#dacd0c2a9441ebef592bba316a6264febb337f35" + integrity sha512-RYg3iEA2BDLCNVe8PUkD+ox5vAKxB9XS/mAhx1bdxGCF0CpX077C0pyTA9t5D6idCYA3avl5/XDHKPsHFrygfw== dependencies: - errlop "^1.1.1" - semver "^5.6.0" + errlop "^1.1.2" + semver "^6.3.0" -electron-to-chromium@^1.3.191: - version "1.3.245" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.245.tgz#1829c45165853c37f74e9f6736546917f78a03d4" - integrity sha512-W1Tjm8VhabzYmiqLUD/sT/KTKkvZ8QpSkbTfLELBrFdnrolfkCgcbxFE3NXAxL5xedWXF74wWn0j6oVrgBdemw== +electron-to-chromium@^1.3.247: + version "1.3.260" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.260.tgz#ffd686b4810bab0e1a428e7af5f08c21fe7c1fa2" + integrity sha512-wGt+OivF1C1MPwaSv3LJ96ebNbLAWlx3HndivDDWqwIVSQxmhL17Y/YmwUdEMtS/bPyommELt47Dct0/VZNQBQ== elegant-spinner@^1.0.1: version "1.0.1" @@ -5408,9 +5237,9 @@ elegant-spinner@^1.0.1: integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= elliptic@^6.4.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" - integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg== + version "6.5.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" + integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -5479,12 +5308,12 @@ err-code@^1.0.0: resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= -errlop@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/errlop/-/errlop-1.1.1.tgz#d9ae4c76c3e64956c5d79e6e035d6343bfd62250" - integrity sha512-WX7QjiPHhsny7/PQvrhS5VMizXXKoKCS3udaBp8gjlARdbn+XmK300eKBAAN0hGyRaTCtRpOaxK+xFVPUJ3zkw== +errlop@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/errlop/-/errlop-1.1.2.tgz#a99a48f37aa264d614e342ffdbbaa49eec9220e0" + integrity sha512-djkRp+urJ+SmqDBd7F6LUgm4Be1TTYBxia2bhjNdFBuBDQtJDHExD2VbxR6eyst3h1TZy3qPRCdqb6FBoFttTA== dependencies: - editions "^2.1.2" + editions "^2.1.3" error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" @@ -5494,16 +5323,20 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.5.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== + version "1.14.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" + integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== dependencies: es-to-primitive "^1.2.0" function-bind "^1.1.1" has "^1.0.3" + has-symbols "^1.0.0" is-callable "^1.1.4" is-regex "^1.0.4" - object-keys "^1.0.12" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.0.0" + string.prototype.trimright "^2.0.0" es-to-primitive@^1.2.0: version "1.2.0" @@ -5544,9 +5377,9 @@ escodegen@1.x.x, escodegen@^1.9.1: source-map "~0.6.1" eslint-config-prettier@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.2.0.tgz#80e0b8714e3f6868c4ac2a25fbf39c02e73527a7" - integrity sha512-VLsgK/D+S/FEsda7Um1+N8FThec6LqE3vhcMyp8mlmto97y3fGf3DX7byJexGuOb1QY0Z/zz222U5t+xSfcZDQ== + version "6.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.3.0.tgz#e73b48e59dc49d950843f3eb96d519e2248286a3" + integrity sha512-EWaGjlDAZRzVFveh2Jsglcere2KK5CJBhkNSa1xs3KfMUGdRiT7lG089eqPdvlzWHpAqaekubOsOMu8W8Yk71A== dependencies: get-stdin "^6.0.0" @@ -5587,7 +5420,7 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.4.0, eslint-utils@^1.4.2: +eslint-utils@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== @@ -5600,9 +5433,9 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== eslint@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.3.0.tgz#1f1a902f67bfd4c354e7288b81e40654d927eb6a" - integrity sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow== + version "6.4.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.4.0.tgz#5aa9227c3fbe921982b2eda94ba0d7fae858611a" + integrity sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -5938,12 +5771,12 @@ fast-redact@^1.4.4: resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-1.5.0.tgz#302892f566750c4f5eec7b830bfc9bc473484034" integrity sha512-Afo61CgUjkzdvOKDHn08qnZ0kwck38AOGcMlvSGzvJbIab6soAP5rdoQayecGCDsD69AiF9vJBXyq31eoEO2tQ== -fast-safe-stringify@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz#04b26106cc56681f51a044cfc0d76cf0008ac2c2" - integrity sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg== +fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== -fast-sort@^1.5.4: +fast-sort@^1.5.6: version "1.5.6" resolved "https://registry.yarnpkg.com/fast-sort/-/fast-sort-1.5.6.tgz#fe5dbe919f2f2333d1823808d6d1e7c3b8c562cc" integrity sha512-/UihlqTK3c6uie43pn5+tciRncoUBgMFXcxrqqmeZrBTmTQM+TeZ4YW2sZlTyzMICg4skHBTbMlK3OvEIy11ew== @@ -6359,13 +6192,6 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -get-value@^3.0.0, get-value@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-3.0.1.tgz#5efd2a157f1d6a516d7524e124ac52d0a39ef5a8" - integrity sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA== - dependencies: - isobject "^3.0.1" - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -6473,11 +6299,6 @@ globals@^11.1.0, globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globalyzer@^0.1.0: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f" - integrity sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA== - globby@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" @@ -6517,11 +6338,6 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" -globrex@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - got@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" @@ -6574,9 +6390,9 @@ growly@^1.3.0: integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= handlebars@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" - integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== + version "4.2.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.0.tgz#57ce8d2175b9bbb3d8b3cf3e4217b1aec8ddcb2e" + integrity sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -6594,12 +6410,12 @@ handlebars@^4.1.2: joi "^13.0.2" hapi-rate-limit@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/hapi-rate-limit/-/hapi-rate-limit-4.0.1.tgz#20dc1f9e076fd777b9cb158a014435c025e9f728" - integrity sha512-WpIzIoZGQVVaIrynvsg2mjbwWVTPhW+wLOeL5CY0LclyNVnMFeHJL8Zmoxk2BUGht7O66vMJSyZ121fWbM7pfA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/hapi-rate-limit/-/hapi-rate-limit-4.0.2.tgz#972edec221a61cb9ed3ee5fe958fe9d75bb7637d" + integrity sha512-z2PNmXtLdN086IFsK77vPiZe05EORtDjlo7I/PGk/MGtAskuw2WKMNeYel0XGScQXcF2LwV/us69L4jMpDAC7Q== dependencies: "@hapi/boom" "^7.4.2" - "@hapi/joi" "^15.0.3" + "@hapi/joi" "^16.0.0" hapi@^17.1.1: version "17.8.5" @@ -6688,14 +6504,6 @@ has-value@^1.0.0: has-values "^1.0.0" isobject "^3.0.0" -has-value@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-2.0.2.tgz#d0f12e8780ba8e90e66ad1a21c707fdb67c25658" - integrity sha512-ybKOlcRsK2MqrM3Hmz/lQxXHZ6ejzSPzpNabKB45jb5qDgJvKPa3SdapTsTLwEb9WltgWpOmNax7i+DzNOk4TA== - dependencies: - get-value "^3.0.0" - has-values "^2.0.1" - has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" @@ -6709,13 +6517,6 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has-values@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-2.0.1.tgz#3876200ff86d8a8546a9264a952c17d5fc17579d" - integrity sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w== - dependencies: - kind-of "^6.0.2" - has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" @@ -6876,14 +6677,6 @@ husky@^3.0.5: run-node "^1.0.0" slash "^3.0.0" -hyperid@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hyperid/-/hyperid-2.0.2.tgz#f56d898f810f0b737c81475803ea4b63515a92d5" - integrity sha512-D4krJfLyXZTZZibL5CEUJzyL001ah1TOK+5wlsra9eMnb0RtMZcBRkblxVRDwzB9VIm9PKXJ4zZtAisFCKuuKQ== - dependencies: - uuid "^3.3.2" - uuid-parse "^1.0.0" - hyperlinker@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" @@ -6907,9 +6700,9 @@ iferr@^0.1.5: integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + version "3.0.2" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b" + integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw== dependencies: minimatch "^3.0.4" @@ -7311,6 +7104,11 @@ is-obj@^1.0.0, is-obj@^1.0.1: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + is-observable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" @@ -7403,9 +7201,9 @@ is-regexp@^1.0.0: integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-ssh@^1.3.0: version "1.3.1" @@ -8454,11 +8252,6 @@ lodash.assignin@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= -lodash.chunk@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" - integrity sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw= - lodash.clone@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" @@ -8469,11 +8262,6 @@ lodash.clonedeep@4.5.0, lodash.clonedeep@^4.3.0, lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.compact@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash.compact/-/lodash.compact-3.0.1.tgz#540ce3837745975807471e16b4a2ba21e7256ca5" - integrity sha1-VAzjg3dFl1gHRx4WtKK6IeclbKU= - lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" @@ -8484,16 +8272,6 @@ lodash.get@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= -lodash.groupby@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" - integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= - -lodash.head@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.head/-/lodash.head-4.0.1.tgz#e2aa322d3ec40cd6aae186082977d993b354ed9c" - integrity sha1-4qoyLT7EDNaq4YYIKXfZk7NU7Zw= - lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -8504,16 +8282,6 @@ lodash.isboolean@^3.0.3: resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= -lodash.isempty@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" - integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4= - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - lodash.isfunction@^3.0.8, lodash.isfunction@~3.0.8: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" @@ -8549,46 +8317,21 @@ lodash.isundefined@^3.0.1: resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48" integrity sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g= -lodash.minby@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.minby/-/lodash.minby-4.6.0.tgz#8b105765ae973954ae944a8029999b8080bdf8c4" - integrity sha1-ixBXZa6XOVSulEqAKZmbgIC9+MQ= +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= -lodash.orderby@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.orderby/-/lodash.orderby-4.6.0.tgz#e697f04ce5d78522f54d9338b32b81a3393e4eb3" - integrity sha1-5pfwTOXXhSL1TZM4syuBozk+TrM= - -lodash.partition@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.partition/-/lodash.partition-4.6.0.tgz#a38e46b73469e0420b0da1212e66d414be364ba4" - integrity sha1-o45GtzRp4EILDaEhLmbUFL42S6Q= - -lodash.pick@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= - -lodash.sample@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.sample/-/lodash.sample-4.2.1.tgz#5e4291b0c753fa1abeb0aab8fb29df1b66f07f6d" - integrity sha1-XkKRsMdT+hq+sKq4+ynfG2bwf20= - lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= -lodash.shuffle@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.shuffle/-/lodash.shuffle-4.2.0.tgz#145b5053cf875f6f5c2a33f48b6e9948c6ec7b4b" - integrity sha1-FFtQU8+HX29cKjP0i26ZSMbse0s= - lodash.snakecase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" @@ -8599,16 +8342,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.sumby@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.sumby/-/lodash.sumby-4.6.0.tgz#7d87737ddb216da2f7e5e7cd2dd9c403a7887346" - integrity sha1-fYdzfdshbaL35efNLdnEA6eIc0Y= - -lodash.take@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.take/-/lodash.take-4.1.1.tgz#0b4146dcb7a70c6153495187fc10b12b71fefadf" - integrity sha1-C0FG3LenDGFTSVGH/BCxK3H++t8= - lodash.template@^4.0.2, lodash.template@^4.4.0, lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -8929,9 +8662,9 @@ merge-stream@^2.0.0: integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.4.tgz#c9269589e6885a60cf80605d9522d4b67ca646e3" - integrity sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A== + version "1.3.0" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== micro-memoize@^2.1.1: version "2.1.2" @@ -8965,11 +8698,16 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" -mime-db@1.40.0, mime-db@1.x.x: +mime-db@1.40.0: version "1.40.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== +mime-db@1.x.x: + version "1.41.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.41.0.tgz#9110408e1f6aa1b34aef51f2c9df3caddf46b6a0" + integrity sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw== + mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.24" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" @@ -9046,17 +8784,17 @@ minimist@~0.0.1: integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass@^2.2.1, minipass@^2.3.5: - version "2.5.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.0.tgz#dddb1d001976978158a05badfcbef4a771612857" - integrity sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q== + version "2.6.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.6.0.tgz#80a68c8a43257b7f744ce09733f6a9c6eef9f731" + integrity sha512-OuNZ0OHrrI+jswzmgivYBZ+fAAGHZA4293d5q0z631/I9QSw3yumKB92njxHIHiB1eAdGRsE+3CcOPkoEyV5FQ== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + version "1.2.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.2.tgz#6f0ccc82fa53e1bf2ff145f220d2da9fa6e3a166" + integrity sha512-hR3At21uSrsjjDTWrbu0IMLTpnkpv8IIMFDFaoz43Tmu4LkmAXfH44vNNzpTnf+OAQQCHrb91y/wc2J4x5XgSQ== dependencies: minipass "^2.2.1" @@ -9325,9 +9063,9 @@ no-case@^2.2.0: lower-case "^1.1.1" nock@^11.3.1: - version "11.3.1" - resolved "https://registry.yarnpkg.com/nock/-/nock-11.3.1.tgz#3bafe0820a60f0900b948d31ab92b38ea6917b06" - integrity sha512-fsFRKNoH6R6hQuaasbAS5vmy4ujVaqKOb/9NCFP0TkhwbH1e5bPN8bn37FCIF9/0ZhayBrClUmSbN6Rm61+WSg== + version "11.3.4" + resolved "https://registry.yarnpkg.com/nock/-/nock-11.3.4.tgz#b3d8fde986da8f8484f4b8958e270fbb91250430" + integrity sha512-Mqjk3DeOkuji8eYaveUku+vMswxzVyhrKAz1J9jE86IsEHQg4136Z/PHz81lcjyz9F3yrJXu56Gb/S+LFUOZVg== dependencies: chai "^4.1.2" debug "^4.1.0" @@ -9417,10 +9155,10 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.25: - version "1.1.28" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.28.tgz#503c3c70d0e4732b84e7aaa2925fbdde10482d4a" - integrity sha512-AQw4emh6iSXnCpDiFe0phYcThiccmkNWMZnFZ+lDJjAP8J0m2fVd59duvUUyuTirQOhIAajTFkzG6FHCLBO59g== +node-releases@^1.1.29: + version "1.1.30" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.30.tgz#35eebf129c63baeb6d8ddeda3c35b05abfd37f7f" + integrity sha512-BHcr1g6NeUH12IL+X3Flvs4IOnl1TL0JczUhEZjDE+FXXPQcVCNr8NEPb01zqGxzhTpdyJL5GXemaCW7aw6Khw== dependencies: semver "^5.3.0" @@ -9498,14 +9236,14 @@ npm-bundled@^1.0.1: integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== npm-check-updates@^3.1.21: - version "3.1.21" - resolved "https://registry.yarnpkg.com/npm-check-updates/-/npm-check-updates-3.1.21.tgz#3aa7bff3569784fce12b190d152d1dc632d2e37c" - integrity sha512-t7KygdHZ1cF2jS6kcOPiUg6s53Sq5jcOqHnddOe92qW7Xd4mh9AUT52OYYQ0YfAiP7VIdZ5379/G/atG6J0WDA== + version "3.1.23" + resolved "https://registry.yarnpkg.com/npm-check-updates/-/npm-check-updates-3.1.23.tgz#9f2885665b1c7327d909558bdc65913927a7de12" + integrity sha512-Z2dkMdNgue6OPkQDPcAK62Qrwv+G1PaEmKrDrrSAiSP7pRD3u30xOVy1nLukS1XrJ2/zF8XTVxFe9/ubcvlcPQ== dependencies: chalk "^2.4.2" cint "^8.2.1" cli-table "^0.3.1" - commander "^3.0.0" + commander "^3.0.1" fast-diff "^1.2.0" find-up "4.1.0" get-stdin "^7.0.0" @@ -9513,7 +9251,7 @@ npm-check-updates@^3.1.21: libnpmconfig "^1.2.1" lodash "^4.17.15" node-alias "^1.0.4" - pacote "^9.5.4" + pacote "^9.5.8" progress "^2.0.3" prompts "^2.2.1" rc-config-loader "^2.0.4" @@ -9556,18 +9294,18 @@ npm-packlist@^1.1.12, npm-packlist@^1.1.6, npm-packlist@^1.4.4: npm-bundled "^1.0.1" npm-pick-manifest@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.1.tgz#19c350ffbe42e0c3c054dcd50dd5760556a98bd8" - integrity sha512-QsJY1LuN6vuGg2BDnteeWGYODOYWZZwbW/YyCKHK4tt9uE+k2d70eg+Kr1CSLbX157Nu8UtY/Afdv884RnJSrQ== + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== dependencies: figgy-pudding "^3.5.1" npm-package-arg "^6.0.0" semver "^5.4.1" npm-registry-fetch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#5ef75845b605855c7964472542c25da172af8677" - integrity sha512-Jllq35Jag8dtv0M17ue74XtdQTyqKzuAYGiX9mAjOhkmNjib3bBUgK6mUY61+AHnXeSRobQkpY3/xIOS/omptw== + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.1.tgz#4ec0964dce6f29d253801a47cd381a7d6ad13a5e" + integrity sha512-1ZQ+yjnxc698R5h9Yje9CASapzAZr7aYDkJDdERg9xg2hOEY0vRJwskOaJAXq8N/eLavzvW4g564YAfq6zMn/A== dependencies: JSONStream "^1.3.4" bluebird "^3.5.1" @@ -9575,6 +9313,7 @@ npm-registry-fetch@^4.0.0: lru-cache "^5.1.1" make-fetch-happen "^5.0.0" npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" npm-run-path@^2.0.0: version "2.0.2" @@ -9644,7 +9383,12 @@ object-hash@^1.3.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== -object-keys@^1.0.11, object-keys@^1.0.12: +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -9772,7 +9516,7 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-name@^3.0.0: +os-name@^3.0.0, os-name@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== @@ -9985,7 +9729,7 @@ packet-reader@1.0.0: resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== -pacote@^9.5.4: +pacote@^9.5.8: version "9.5.8" resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.8.tgz#23480efdc4fa74515855c9ecf39cf64078f99786" integrity sha512-0Tl8Oi/K0Lo4MZmH0/6IsT3gpGf9eEAznLXEQPKgPq7FscnbUOyopnVpwXlnQdIbCUaojWy1Wd7VMyqfVsRrIw== @@ -10026,11 +9770,11 @@ pako@~1.0.2: integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: - cyclist "~0.2.2" + cyclist "^1.0.1" inherits "^2.0.3" readable-stream "^2.1.5" @@ -10345,13 +10089,13 @@ pino-std-serializers@^2.3.0: resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-2.4.2.tgz#cb5e3e58c358b26f88969d7e619ae54bdfcc1ae1" integrity sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ== -pino@^5.13.2: - version "5.13.2" - resolved "https://registry.yarnpkg.com/pino/-/pino-5.13.2.tgz#773416c9764634276e7b2ae021357679ff7b5634" - integrity sha512-WwOSCy36/gWhinsqWqAnuwIi2WtcH+jvoyeLm3bjUALIrzWIst0AovQjK4jVvSN2l64KFPfi3gd2fjsTovjdLQ== +pino@^5.13.3: + version "5.13.3" + resolved "https://registry.yarnpkg.com/pino/-/pino-5.13.3.tgz#26cd6f69b4bd03d6408af28eddcd9313687f143d" + integrity sha512-FL12DKlPwBlbhztlUz6kseR03PRR8nD+wvLdN/Sji9UiBYYfSjX+k8ocU7/NwW55JdFRONTn3iACoelXnMFVVQ== dependencies: fast-redact "^1.4.4" - fast-safe-stringify "^2.0.6" + fast-safe-stringify "^2.0.7" flatstr "^1.0.9" pino-std-serializers "^2.3.0" quick-format-unescaped "^3.0.2" @@ -10485,7 +10229,7 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -pretty-ms@*, pretty-ms@^5.0.0: +pretty-ms@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-5.0.0.tgz#6133a8f55804b208e4728f6aa7bf01085e951e24" integrity sha512-94VRYjL9k33RzfKiGokPBPpsmloBYSf5Ri+Pq19zlsEcUKFob+admeXr5eFDRuPjFmEOcjJvPGdillYOJyvZ7Q== @@ -10589,9 +10333,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.3.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd" - integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag== + version "1.4.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" + integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== pump@^2.0.0: version "2.0.1" @@ -10672,13 +10416,6 @@ quick-lru@^1.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= -random-seed@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/random-seed/-/random-seed-0.3.0.tgz#d945f2e1f38f49e8d58913431b8bf6bb937556cd" - integrity sha1-2UXy4fOPSejViRNDG4v2u5N1Vs0= - dependencies: - json-stringify-safe "^5.0.1" - randombytes@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -10950,10 +10687,10 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.6: - version "0.1.12" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.12.tgz#28eaaa6e66eeb3527c15108a3ff740d9e574e420" - integrity sha512-TsXZ8+cv2uxMEkLfgwO0E068gsNMLfuYwMMhiUxf0Kw2Vcgzq93vgl6wIlIYuPmfMqMjfQ9zAporiozqCnwLuQ== +regexp-tree@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.13.tgz#5b19ab9377edc68bc3679256840bb29afc158d7f" + integrity sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw== regexpp@^2.0.1: version "2.0.1" @@ -10961,9 +10698,9 @@ regexpp@^2.0.1: integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== regexpu-core@^4.5.4: - version "4.5.5" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.5.tgz#aaffe61c2af58269b3e516b61a73790376326411" - integrity sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ== + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.1.0" @@ -11183,6 +10920,11 @@ reusify@^1.0.0: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" + integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug== + rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -11242,9 +10984,9 @@ rollup-plugin-node-resolve@^5.2.0: rollup-pluginutils "^2.8.1" rollup-plugin-terser@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.1.tgz#e9d2545ec8d467f96ba99b9216d2285aad8d5b66" - integrity sha512-McIMCDEY8EU6Y839C09UopeRR56wXHGdvKKjlfiZG/GrP6wvZQ62u2ko/Xh1MNH2M9WDL+obAAHySljIZYCuPQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.2.tgz#3e41256205cb75f196fc70d4634227d1002c255c" + integrity sha512-sWKBCOS+vUkRtHtEiJPAf+WnBqk/C402fBD9AVHxSIXMqjsY7MnYWKYEUqGixtr0c8+1DjzUEPlNgOYQPVrS1g== dependencies: "@babel/code-frame" "^7.0.0" jest-worker "^24.6.0" @@ -11253,19 +10995,19 @@ rollup-plugin-terser@^5.1.1: terser "^4.1.0" rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" - integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== dependencies: estree-walker "^0.6.1" rollup@^1.17.0: - version "1.20.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.20.3.tgz#6243f6c118ca05f56b2d9433112400cd834a1eb8" - integrity sha512-/OMCkY0c6E8tleeVm4vQVDz24CkVgvueK3r8zTYu2AQNpjrcaPwO9hE+pWj5LTFrvvkaxt4MYIp2zha4y0lRvg== + version "1.21.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.21.3.tgz#2d957e04b230b06a85b8c617bf594f92c37c4d5d" + integrity sha512-43CgeUtHhfiqBOUd0uJo5NEOg2FuheF3SqGN8BqgvnqB4xM2TbfPdudeSdllDcMKpagHb//qtpaAADBurT4GzA== dependencies: "@types/estree" "0.0.39" - "@types/node" "^12.7.2" + "@types/node" "^12.7.5" acorn "^7.0.0" rotating-file-stream@^1.4.3: @@ -11310,9 +11052,9 @@ rxjs@^5.5.2: symbol-observable "1.0.1" rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== dependencies: tslib "^1.9.0" @@ -11479,9 +11221,9 @@ semver@~5.3.0: integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= serialize-javascript@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.0.tgz#5b77019d7c3b85fe91b33ae424c53dcbfb6618bd" - integrity sha512-UkGlcYMtw4d9w7YfCtJFgdRTps8N4L0A48R+SmcGL57ki1+yHwJXnalk5bjgrw+ljv6SfzjzPjhohod2qllg/Q== + version "1.9.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" + integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -11503,13 +11245,6 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -set-value@^3.0.0, set-value@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-3.0.1.tgz#52c82af7653ba69eb1db92e81f5cdb32739b9e95" - integrity sha512-w6n3GUPYAWQj4ZyHWzD7K2FnFXHx9OTwJYbWg+6nXjG8sCLfs9DGv+KlqglKIIJx+ks7MlFuwFW2RBPb+8V+xg== - dependencies: - is-plain-object "^2.0.4" - setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" @@ -11857,9 +11592,9 @@ snyk-try-require@1.3.1, snyk-try-require@^1.1.1, snyk-try-require@^1.3.1: then-fs "^2.0.0" snyk@^1.224.0: - version "1.224.0" - resolved "https://registry.yarnpkg.com/snyk/-/snyk-1.224.0.tgz#db1f11453b7e6189e0e842251360b97be78acddf" - integrity sha512-M3aNiCXP0A8UB4OCMDnlfRwo90W4dzZp8RNfMv+P0DX8AKSSZjiQN/QYpZs4/vPTnJFsl25ey/p3MV/djmS2Ig== + version "1.227.0" + resolved "https://registry.yarnpkg.com/snyk/-/snyk-1.227.0.tgz#3d217de65638303a7c06185bde637036fbb2be3b" + integrity sha512-ejfq2FIca+b/zu4hkJwFUob1Emn+s9wXYw5VHJSS6BjiniNi6dIa24AARG3BWiVsN/3NvzCYAkcqhYGaJ6xyVw== dependencies: "@snyk/dep-graph" "1.12.0" "@snyk/gemfile" "1.2.0" @@ -11905,23 +11640,7 @@ snyk@^1.224.0: uuid "^3.3.2" wrap-ansi "^5.1.0" -socketcluster-client@^14.2.1, socketcluster-client@^14.2.2: - version "14.3.0" - resolved "https://registry.yarnpkg.com/socketcluster-client/-/socketcluster-client-14.3.0.tgz#de56e90b76f226ff691ec137f1e748d7365124b9" - integrity sha512-ppamWR5N7fa9Lb4+ffOhMA8VMJfaSBWcD3cWCwAQ0wbg5c61LsTrK2rOPEnQ/uuhQzvLkgibEFiHWsUGRWkfNg== - dependencies: - buffer "^5.2.1" - clone "2.1.1" - component-emitter "1.2.1" - linked-list "0.1.0" - querystring "0.2.0" - sc-channel "^1.2.0" - sc-errors "^1.4.1" - sc-formatter "^3.0.1" - uuid "3.2.1" - ws "7.1.0" - -socketcluster-client@^14.3.1: +socketcluster-client@^14.2.1, socketcluster-client@^14.2.2, socketcluster-client@^14.3.1: version "14.3.1" resolved "https://registry.yarnpkg.com/socketcluster-client/-/socketcluster-client-14.3.1.tgz#bfc3591c0cad2668e7b3512a102f3844f5f2e84d" integrity sha512-Sd/T0K/9UlqTfz+HUuFq90dshA5OBJPQbdkRzGtcKIOm52fkdsBTt0FYpiuzzxv5VrU7PWpRm6KIfNXyPwlLpw== @@ -12247,6 +11966,22 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string.prototype.trimleft@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -12371,13 +12106,6 @@ subtext@6.x.x: pez "4.x.x" wreck "14.x.x" -superheroes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/superheroes/-/superheroes-3.0.0.tgz#5a94fa6a7db87a95dd57ba1a5acd5e1daabad941" - integrity sha512-XXXzeKHMnf0rmZItYkGU803JlqYpoxvxzKFoe6k8C4bolcKfLZH716Rm4DyNJhxPTurbzDEB/QC7TXGsoei+ew== - dependencies: - unique-random-array "^2.0.0" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -12518,9 +12246,9 @@ term-size@^1.2.0: execa "^0.7.0" terser@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.2.1.tgz#1052cfe17576c66e7bc70fcc7119f22b155bdac1" - integrity sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A== + version "4.3.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.1.tgz#09820bcb3398299c4b48d9a86aefc65127d0ed65" + integrity sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -12607,14 +12335,6 @@ timed-out@^4.0.0: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= -tiny-glob@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.6.tgz#9e056e169d9788fe8a734dfa1ff02e9b92ed7eda" - integrity sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw== - dependencies: - globalyzer "^0.1.0" - globrex "^0.1.1" - tiny-secp256k1@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.3.tgz#e93b1e1bf62e9bd1ad3ab24af27ff6127ce0e077" @@ -12770,14 +12490,15 @@ trim-right@^1.0.1: integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= ts-jest@^24.0.2: - version "24.0.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.0.2.tgz#8dde6cece97c31c03e80e474c749753ffd27194d" - integrity sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw== + version "24.1.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.1.0.tgz#2eaa813271a2987b7e6c3fefbda196301c131734" + integrity sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ== dependencies: bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" json5 "2.x" + lodash.memoize "4.x" make-error "1.x" mkdirp "0.x" resolve "1.x" @@ -12794,7 +12515,7 @@ tslib@^1, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tsutils@^3.14.0: +tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== @@ -12897,9 +12618,9 @@ typescript@3.5.x: integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== typescript@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.2.tgz#105b0f1934119dde543ac8eb71af3a91009efe54" - integrity sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw== + version "3.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da" + integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw== typesync@^0.6.1: version "0.6.1" @@ -12970,14 +12691,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -union-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-2.0.1.tgz#4e1ab0f99ab52c52a53e14d8039b5130fef682b8" - integrity sha512-NmcRHHhUy1qWmp6yYWsaURV2qwfS24TmTtO9S9x0L41wCNNVBQFD3toOzO0cd8SsNrFhbw/O0iYO5uffXGYocw== - dependencies: - get-value "^3.0.1" - set-value "^3.0.0" - unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -12985,18 +12698,6 @@ unique-filename@^1.1.1: dependencies: unique-slug "^2.0.0" -unique-random-array@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-random-array/-/unique-random-array-2.0.0.tgz#9e639b1a9dc141e97350a6fc6f17da4b0717b1ad" - integrity sha512-xR87O95fZ7hljw84J8r1YDXrvffPLWN513BNOP4Bv0KcgG5dyEUrHwsvP7mVAOKg4Y80uqRbpUk0GKr8il70qg== - dependencies: - unique-random "^2.1.0" - -unique-random@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unique-random/-/unique-random-2.1.0.tgz#7a8413da5176d028567168b57125ac5c0cec5c25" - integrity sha512-iQ1ZgWac3b8YxGThecQFRQiqgk6xFERRwHZIWeVVsqlbmgCRl0PY13R4mUkodNgctmg5b5odG1nyW/IbOxQTqg== - unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" @@ -13011,12 +12712,12 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" -universal-user-agent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-3.0.0.tgz#4cc88d68097bffd7ac42e3b7c903e7481424b4b9" - integrity sha512-T3siHThqoj5X0benA5H0qcDnrKGXzU8TKoX15x/tQHw1hQBvIEBHjxQ2klizYsqBOO/Q+WuxoQUihadeeqDnoA== +universal-user-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.0.tgz#27da2ec87e32769619f68a14996465ea1cb9df16" + integrity sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA== dependencies: - os-name "^3.0.0" + os-name "^3.1.0" universalify@^0.1.0: version "0.1.2" @@ -13042,9 +12743,9 @@ unzip-response@^2.0.1: integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= upath@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" - integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== update-notifier@^2.5.0: version "2.5.0" @@ -13111,11 +12812,6 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" -url-template@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" - integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= - urlgrey@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" @@ -13138,7 +12834,7 @@ util-promisify@^2.1.0: dependencies: object.getownpropertydescriptors "^2.0.3" -util.promisify@^1.0.0: +util.promisify@^1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== @@ -13146,11 +12842,6 @@ util.promisify@^1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -uuid-parse@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/uuid-parse/-/uuid-parse-1.1.0.tgz#7061c5a1384ae0e1f943c538094597e1b5f3a65b" - integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== - uuid@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" @@ -13487,7 +13178,7 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xml2js@0.4.19, xml2js@^0.4.17: +xml2js@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== @@ -13495,6 +13186,20 @@ xml2js@0.4.19, xml2js@^0.4.17: sax ">=0.6.0" xmlbuilder "~9.0.1" +xml2js@^0.4.17: + version "0.4.22" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02" + integrity sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw== + dependencies: + sax ">=0.6.0" + util.promisify "~1.0.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlbuilder@~9.0.1: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"