diff --git a/yarn-project/archiver/package.json b/yarn-project/archiver/package.json index 3dba1489b60..66a7c825d9b 100644 --- a/yarn-project/archiver/package.json +++ b/yarn-project/archiver/package.json @@ -58,7 +58,6 @@ "concurrently": "^8.0.1", "jest": "^29.5.0", "jest-mock-extended": "^3.0.4", - "lodash.times": "^4.3.2", "ts-jest": "^29.1.0", "ts-node": "^10.9.1", "typescript": "^5.0.4" diff --git a/yarn-project/archiver/src/archiver/archiver.test.ts b/yarn-project/archiver/src/archiver/archiver.test.ts index c20e2f5bcef..5fb5ef1fbb0 100644 --- a/yarn-project/archiver/src/archiver/archiver.test.ts +++ b/yarn-project/archiver/src/archiver/archiver.test.ts @@ -1,13 +1,13 @@ import { ExtendedContractData, L2Block, L2BlockL2Logs, LogType } from '@aztec/circuit-types'; import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/circuits.js'; import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { times } from '@aztec/foundation/collection'; import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { sleep } from '@aztec/foundation/sleep'; import { ContractDeploymentEmitterAbi, InboxAbi, RollupAbi } from '@aztec/l1-artifacts'; import { MockProxy, mock } from 'jest-mock-extended'; -import times from 'lodash.times'; import { Chain, HttpTransport, Log, PublicClient, Transaction, encodeFunctionData, toHex } from 'viem'; import { Archiver } from './archiver.js'; diff --git a/yarn-project/circuit-types/src/l2_block.ts b/yarn-project/circuit-types/src/l2_block.ts index baa87985282..620659b01f1 100644 --- a/yarn-project/circuit-types/src/l2_block.ts +++ b/yarn-project/circuit-types/src/l2_block.ts @@ -10,13 +10,12 @@ import { STRING_ENCODING, } from '@aztec/circuits.js'; import { makeAppendOnlyTreeSnapshot, makeGlobalVariables, makeHeader } from '@aztec/circuits.js/factories'; +import { times } from '@aztec/foundation/collection'; import { keccak, sha256 } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import times from 'lodash.times'; - import { ContractData } from './contract_data.js'; import { L2Tx } from './l2_tx.js'; import { LogType, TxL2Logs } from './logs/index.js'; diff --git a/yarn-project/circuit-types/src/l2_tx.ts b/yarn-project/circuit-types/src/l2_tx.ts index 293e87f89e4..65588476418 100644 --- a/yarn-project/circuit-types/src/l2_tx.ts +++ b/yarn-project/circuit-types/src/l2_tx.ts @@ -6,11 +6,10 @@ import { MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, Vector, } from '@aztec/circuits.js'; +import { times } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, numToUInt32BE } from '@aztec/foundation/serialize'; -import times from 'lodash.times'; - import { ContractData } from './contract_data.js'; import { PublicDataWrite } from './public_data_write.js'; import { TxHash } from './tx/tx_hash.js'; diff --git a/yarn-project/circuit-types/src/mocks.ts b/yarn-project/circuit-types/src/mocks.ts index c4d9827e852..5dbddd45d59 100644 --- a/yarn-project/circuit-types/src/mocks.ts +++ b/yarn-project/circuit-types/src/mocks.ts @@ -9,11 +9,10 @@ import { } from '@aztec/circuits.js'; import { makePrivateKernelPublicInputsFinal, makePublicCallRequest } from '@aztec/circuits.js/factories'; import { ContractArtifact } from '@aztec/foundation/abi'; +import { times } from '@aztec/foundation/collection'; import { randomBytes } from '@aztec/foundation/crypto'; import { Tuple } from '@aztec/foundation/serialize'; -import times from 'lodash.times'; - import { ExtendedContractData } from './contract_data.js'; import { DeployedContract } from './interfaces/index.js'; import { FunctionL2Logs, Note, TxL2Logs } from './logs/index.js'; diff --git a/yarn-project/circuits.js/package.json b/yarn-project/circuits.js/package.json index 10befd0fe2b..e3f18a3ca83 100644 --- a/yarn-project/circuits.js/package.json +++ b/yarn-project/circuits.js/package.json @@ -43,14 +43,12 @@ "@aztec/foundation": "workspace:^", "eslint": "^8.35.0", "lodash.chunk": "^4.2.0", - "lodash.times": "^4.3.2", "tslib": "^2.4.0" }, "devDependencies": { "@jest/globals": "^29.5.0", "@types/jest": "^29.5.0", "@types/lodash.chunk": "^4.2.7", - "@types/lodash.times": "^4.3.7", "@types/node": "^18.7.23", "jest": "^29.5.0", "prettier": "^2.8.4", diff --git a/yarn-project/circuits.js/src/abis/abis.test.ts b/yarn-project/circuits.js/src/abis/abis.test.ts index 51113d7497f..ab0132ce8b6 100644 --- a/yarn-project/circuits.js/src/abis/abis.test.ts +++ b/yarn-project/circuits.js/src/abis/abis.test.ts @@ -1,4 +1,4 @@ -import times from 'lodash.times'; +import { times } from '@aztec/foundation/collection'; import { AztecAddress, diff --git a/yarn-project/circuits.js/src/structs/aggregation_object.ts b/yarn-project/circuits.js/src/structs/aggregation_object.ts index 798cc126b11..b05d57d43ae 100644 --- a/yarn-project/circuits.js/src/structs/aggregation_object.ts +++ b/yarn-project/circuits.js/src/structs/aggregation_object.ts @@ -1,8 +1,7 @@ +import { times } from '@aztec/foundation/collection'; import { Fq, Fr } from '@aztec/foundation/fields'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import times from 'lodash.times'; - import { UInt32, Vector } from './shared.js'; import { G1AffineElement } from './verification_key.js'; diff --git a/yarn-project/circuits.js/src/structs/verification_key.ts b/yarn-project/circuits.js/src/structs/verification_key.ts index 91e773d843f..1e397cec8ce 100644 --- a/yarn-project/circuits.js/src/structs/verification_key.ts +++ b/yarn-project/circuits.js/src/structs/verification_key.ts @@ -1,7 +1,6 @@ +import { times } from '@aztec/foundation/collection'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import times from 'lodash.times'; - import { Fq } from './index.js'; import { CircuitType } from './shared.js'; diff --git a/yarn-project/end-to-end/package.json b/yarn-project/end-to-end/package.json index bd1e835e57d..a75d100da31 100644 --- a/yarn-project/end-to-end/package.json +++ b/yarn-project/end-to-end/package.json @@ -48,7 +48,6 @@ "@types/koa-static": "^4.0.2", "@types/levelup": "^5.1.2", "@types/lodash.every": "^4.6.7", - "@types/lodash.times": "^4.3.7", "@types/memdown": "^3.0.3", "@types/node": "^18.7.23", "buffer": "^6.0.3", @@ -61,7 +60,6 @@ "lmdb": "^2.9.1", "lodash.compact": "^3.0.1", "lodash.every": "^4.6.0", - "lodash.times": "^4.3.2", "memdown": "^6.1.1", "process": "^0.11.10", "puppeteer": "^21.3.4", diff --git a/yarn-project/end-to-end/src/benchmarks/utils.ts b/yarn-project/end-to-end/src/benchmarks/utils.ts index 780d2561d6c..348932f7b60 100644 --- a/yarn-project/end-to-end/src/benchmarks/utils.ts +++ b/yarn-project/end-to-end/src/benchmarks/utils.ts @@ -10,12 +10,12 @@ import { retryUntil, sleep, } from '@aztec/aztec.js'; +import { times } from '@aztec/foundation/collection'; import { BenchmarkingContract } from '@aztec/noir-contracts/Benchmarking'; import { PXEService, createPXEService } from '@aztec/pxe'; import { mkdirpSync } from 'fs-extra'; import { globSync } from 'glob'; -import times from 'lodash.times'; import { join } from 'path'; import { EndToEndContext, setup } from '../fixtures/utils.js'; diff --git a/yarn-project/end-to-end/src/e2e_block_building.test.ts b/yarn-project/end-to-end/src/e2e_block_building.test.ts index 8cf476f323c..d21b5a4a447 100644 --- a/yarn-project/end-to-end/src/e2e_block_building.test.ts +++ b/yarn-project/end-to-end/src/e2e_block_building.test.ts @@ -12,12 +12,11 @@ import { Wallet, isContractDeployed, } from '@aztec/aztec.js'; +import { times } from '@aztec/foundation/collection'; import { pedersenHash } from '@aztec/foundation/crypto'; import { TestContract, TestContractArtifact } from '@aztec/noir-contracts/Test'; import { TokenContract } from '@aztec/noir-contracts/Token'; -import times from 'lodash.times'; - import { setup } from './fixtures/utils.js'; describe('e2e_block_building', () => { diff --git a/yarn-project/foundation/src/collection/array.test.ts b/yarn-project/foundation/src/collection/array.test.ts new file mode 100644 index 00000000000..d750c129ad8 --- /dev/null +++ b/yarn-project/foundation/src/collection/array.test.ts @@ -0,0 +1,13 @@ +import { times } from './array.js'; + +describe('times', () => { + it('should return an array with the result from all executions', () => { + const result = times(5, i => i * 2); + expect(result).toEqual([0, 2, 4, 6, 8]); + }); + + it('should return an empty array when n is 0', () => { + const result = times(0, i => i * 2); + expect(result).toEqual([]); + }); +}); diff --git a/yarn-project/foundation/src/collection/array.ts b/yarn-project/foundation/src/collection/array.ts index 1e4eb934d4c..d60786489dc 100644 --- a/yarn-project/foundation/src/collection/array.ts +++ b/yarn-project/foundation/src/collection/array.ts @@ -52,3 +52,13 @@ export function isArrayEmpty(arr: T[], isEmpty: (item: T) => boolean): boolea export function arrayNonEmptyLength(arr: T[], isEmpty: (item: T) => boolean): number { return arr.reduce((sum, item) => (isEmpty(item) ? sum : sum + 1), 0); } + +/** + * Executes the given function n times and returns the results in an array. + * @param n - How many times to repeat. + * @param fn - Mapper from index to value. + * @returns The array with the result from all executions. + */ +export function times(n: number, fn: (i: number) => T): T[] { + return [...Array(n).keys()].map(i => fn(i)); +} diff --git a/yarn-project/noir-compiler/package.json b/yarn-project/noir-compiler/package.json index dc90ce3ca62..a184351fea0 100644 --- a/yarn-project/noir-compiler/package.json +++ b/yarn-project/noir-compiler/package.json @@ -53,7 +53,6 @@ "fs-extra": "^11.1.1", "lodash.camelcase": "^4.3.0", "lodash.capitalize": "^4.2.1", - "lodash.times": "^4.3.2", "memfs": "^4.6.0", "pako": "^2.1.0", "semver": "^7.5.4", @@ -66,7 +65,6 @@ "@types/jest": "^29.5.0", "@types/lodash.camelcase": "^4.3.7", "@types/lodash.capitalize": "^4.2.7", - "@types/lodash.times": "^4.3.7", "@types/node": "^18.7.23", "@types/pako": "^2.0.0", "@types/semver": "^7.5.4", diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts b/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts index a3d1a23c5e7..c33c23590c0 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts @@ -7,10 +7,10 @@ import { FunctionType, StructType, } from '@aztec/foundation/abi'; +import { times } from '@aztec/foundation/collection'; import camelCase from 'lodash.camelcase'; import capitalize from 'lodash.capitalize'; -import times from 'lodash.times'; /** * Returns whether this function type corresponds to a private call. diff --git a/yarn-project/p2p/package.json b/yarn-project/p2p/package.json index 6203bc73123..1e4aab4e5ef 100644 --- a/yarn-project/p2p/package.json +++ b/yarn-project/p2p/package.json @@ -49,14 +49,12 @@ "@libp2p/tcp": "^8.0.4", "it-pipe": "^3.0.1", "libp2p": "^0.46.6", - "lodash.times": "^4.3.2", "sha3": "^2.1.4", "tslib": "^2.4.0" }, "devDependencies": { "@jest/globals": "^29.5.0", "@types/jest": "^29.5.0", - "@types/lodash.times": "^4.3.7", "@types/node": "^18.14.6", "jest": "^29.5.0", "jest-mock-extended": "^3.0.4", diff --git a/yarn-project/pxe/package.json b/yarn-project/pxe/package.json index 223b5f7abd4..82bf35b49e6 100644 --- a/yarn-project/pxe/package.json +++ b/yarn-project/pxe/package.json @@ -46,7 +46,6 @@ "koa": "^2.14.2", "koa-router": "^12.0.0", "lodash.omit": "^4.5.0", - "lodash.times": "^4.3.2", "sha3": "^2.1.4", "tslib": "^2.4.0", "viem": "^1.2.5" @@ -55,7 +54,6 @@ "@jest/globals": "^29.5.0", "@types/jest": "^29.5.0", "@types/lodash.omit": "^4.5.7", - "@types/lodash.times": "^4.3.7", "@types/node": "^18.7.23", "jest": "^29.5.0", "jest-mock-extended": "^3.0.3", diff --git a/yarn-project/sequencer-client/package.json b/yarn-project/sequencer-client/package.json index 879838cf052..8c11e1f877f 100644 --- a/yarn-project/sequencer-client/package.json +++ b/yarn-project/sequencer-client/package.json @@ -45,7 +45,6 @@ "@aztec/world-state": "workspace:^", "lodash.chunk": "^4.2.0", "lodash.pick": "^4.4.0", - "lodash.times": "^4.3.2", "tslib": "^2.4.0", "viem": "^1.2.5" }, @@ -55,7 +54,6 @@ "@types/levelup": "^5.1.2", "@types/lodash.chunk": "^4.2.7", "@types/lodash.pick": "^4.4.7", - "@types/lodash.times": "^4.3.7", "@types/memdown": "^3.0.0", "@types/node": "^18.7.23", "concurrently": "^7.6.0", diff --git a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts index a0e03bb5afc..3ab5e249e60 100644 --- a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts +++ b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts @@ -47,12 +47,12 @@ import { } from '@aztec/circuits.js/factories'; import { makeTuple, range } from '@aztec/foundation/array'; import { toBufferBE } from '@aztec/foundation/bigint-buffer'; +import { times } from '@aztec/foundation/collection'; import { to2Fields } from '@aztec/foundation/serialize'; import { MerkleTreeOperations, MerkleTrees } from '@aztec/world-state'; import { MockProxy, mock } from 'jest-mock-extended'; import { default as levelup } from 'levelup'; -import times from 'lodash.times'; import { type MemDown, default as memdown } from 'memdown'; import { VerificationKeys, getVerificationKeys } from '../mocks/verification_keys.js'; diff --git a/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts b/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts index 98db4d5e64e..14174865bdb 100644 --- a/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts @@ -34,12 +34,11 @@ import { makeSelector, } from '@aztec/circuits.js/factories'; import { makeTuple } from '@aztec/foundation/array'; -import { padArrayEnd } from '@aztec/foundation/collection'; +import { padArrayEnd, times } from '@aztec/foundation/collection'; import { SiblingPath } from '@aztec/types/membership'; import { MerkleTreeOperations, TreeInfo } from '@aztec/world-state'; import { MockProxy, mock } from 'jest-mock-extended'; -import times from 'lodash.times'; import { PublicProver } from '../prover/index.js'; import { PublicKernelCircuitSimulator } from '../simulator/index.js'; diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts index 1bc34c9dc69..2e4af5ba3af 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts @@ -15,11 +15,11 @@ import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, makeEmptyProof, } from '@aztec/circuits.js'; +import { times } from '@aztec/foundation/collection'; import { P2P, P2PClientState } from '@aztec/p2p'; import { MerkleTreeOperations, WorldStateRunningState, WorldStateSynchronizer } from '@aztec/world-state'; import { MockProxy, mock, mockFn } from 'jest-mock-extended'; -import times from 'lodash.times'; import { BlockBuilder } from '../block_builder/index.js'; import { GlobalVariableBuilder } from '../global_variable_builder/global_builder.js'; diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.ts index f23c8c9a9df..2663453e953 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.ts @@ -1,6 +1,7 @@ import { L1ToL2MessageSource, L2Block, L2BlockSource, MerkleTreeId, Tx } from '@aztec/circuit-types'; import { L2BlockBuiltStats } from '@aztec/circuit-types/stats'; import { GlobalVariables } from '@aztec/circuits.js'; +import { times } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { RunningPromise } from '@aztec/foundation/running-promise'; @@ -8,8 +9,6 @@ import { Timer, elapsed } from '@aztec/foundation/timer'; import { P2P } from '@aztec/p2p'; import { WorldStateStatus, WorldStateSynchronizer } from '@aztec/world-state'; -import times from 'lodash.times'; - import { BlockBuilder } from '../block_builder/index.js'; import { GlobalVariableBuilder } from '../global_variable_builder/global_builder.js'; import { L1Publisher } from '../publisher/l1-publisher.js'; diff --git a/yarn-project/world-state/package.json b/yarn-project/world-state/package.json index f4d908eec5d..7fc61040e0e 100644 --- a/yarn-project/world-state/package.json +++ b/yarn-project/world-state/package.json @@ -36,7 +36,6 @@ "@aztec/merkle-tree": "workspace:^", "@aztec/types": "workspace:^", "levelup": "^5.1.1", - "lodash.times": "^4.3.2", "memdown": "^6.1.1", "tslib": "^2.4.0" }, @@ -44,7 +43,6 @@ "@jest/globals": "^29.5.0", "@types/jest": "^29.5.0", "@types/levelup": "^5.1.2", - "@types/lodash.times": "^4.3.7", "@types/memdown": "^3.0.0", "@types/node": "^18.7.23", "jest": "^29.5.0", diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index 305751891f5..d2945982290 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -128,7 +128,6 @@ __metadata: jest-mock-extended: ^3.0.4 lmdb: ^2.9.1 lodash.omit: ^4.5.0 - lodash.times: ^4.3.2 ts-jest: ^29.1.0 ts-node: ^10.9.1 tsc-watch: ^6.0.0 @@ -328,12 +327,10 @@ __metadata: "@jest/globals": ^29.5.0 "@types/jest": ^29.5.0 "@types/lodash.chunk": ^4.2.7 - "@types/lodash.times": ^4.3.7 "@types/node": ^18.7.23 eslint: ^8.35.0 jest: ^29.5.0 lodash.chunk: ^4.2.0 - lodash.times: ^4.3.2 prettier: ^2.8.4 ts-jest: ^29.1.0 ts-node: ^10.9.1 @@ -418,7 +415,6 @@ __metadata: "@types/koa-static": ^4.0.2 "@types/levelup": ^5.1.2 "@types/lodash.every": ^4.6.7 - "@types/lodash.times": ^4.3.7 "@types/memdown": ^3.0.3 "@types/node": ^18.7.23 buffer: ^6.0.3 @@ -432,7 +428,6 @@ __metadata: lmdb: ^2.9.1 lodash.compact: ^3.0.1 lodash.every: ^4.6.0 - lodash.times: ^4.3.2 memdown: ^6.1.1 process: ^0.11.10 puppeteer: ^21.3.4 @@ -615,7 +610,6 @@ __metadata: "@types/jest": ^29.5.0 "@types/lodash.camelcase": ^4.3.7 "@types/lodash.capitalize": ^4.2.7 - "@types/lodash.times": ^4.3.7 "@types/node": ^18.7.23 "@types/pako": ^2.0.0 "@types/semver": ^7.5.4 @@ -625,7 +619,6 @@ __metadata: jest: ^29.5.0 lodash.camelcase: ^4.3.0 lodash.capitalize: ^4.2.1 - lodash.times: ^4.3.2 memfs: ^4.6.0 pako: ^2.1.0 semver: ^7.5.4 @@ -720,13 +713,11 @@ __metadata: "@libp2p/peer-id-factory": ^3.0.3 "@libp2p/tcp": ^8.0.4 "@types/jest": ^29.5.0 - "@types/lodash.times": ^4.3.7 "@types/node": ^18.14.6 it-pipe: ^3.0.1 jest: ^29.5.0 jest-mock-extended: ^3.0.4 libp2p: ^0.46.6 - lodash.times: ^4.3.2 sha3: ^2.1.4 ts-jest: ^29.1.0 ts-node: ^10.9.1 @@ -768,14 +759,12 @@ __metadata: "@jest/globals": ^29.5.0 "@types/jest": ^29.5.0 "@types/lodash.omit": ^4.5.7 - "@types/lodash.times": ^4.3.7 "@types/node": ^18.7.23 jest: ^29.5.0 jest-mock-extended: ^3.0.3 koa: ^2.14.2 koa-router: ^12.0.0 lodash.omit: ^4.5.0 - lodash.times: ^4.3.2 sha3: ^2.1.4 ts-jest: ^29.1.0 ts-node: ^10.9.1 @@ -831,7 +820,6 @@ __metadata: "@types/levelup": ^5.1.2 "@types/lodash.chunk": ^4.2.7 "@types/lodash.pick": ^4.4.7 - "@types/lodash.times": ^4.3.7 "@types/memdown": ^3.0.0 "@types/node": ^18.7.23 concurrently: ^7.6.0 @@ -841,7 +829,6 @@ __metadata: levelup: ^5.1.1 lodash.chunk: ^4.2.0 lodash.pick: ^4.4.0 - lodash.times: ^4.3.2 memdown: ^6.1.1 prettier: ^2.8.7 ts-jest: ^29.1.0 @@ -892,13 +879,11 @@ __metadata: "@jest/globals": ^29.5.0 "@types/jest": ^29.5.0 "@types/levelup": ^5.1.2 - "@types/lodash.times": ^4.3.7 "@types/memdown": ^3.0.0 "@types/node": ^18.7.23 jest: ^29.5.0 jest-mock-extended: ^3.0.5 levelup: ^5.1.1 - lodash.times: ^4.3.2 memdown: ^6.1.1 ts-jest: ^29.1.0 ts-node: ^10.9.1 @@ -3603,11 +3588,11 @@ __metadata: linkType: hard "@types/lodash.times@npm:^4.3.7": - version: 4.3.7 - resolution: "@types/lodash.times@npm:4.3.7" + version: 4.3.9 + resolution: "@types/lodash.times@npm:4.3.9" dependencies: "@types/lodash": "*" - checksum: f31e67c17124614afd392b10e26a5af38f0975edbe4e128c60affa0890a1f2fea502daa4839aee4b1f66b690f925254eff3e9dfcea5d7d3ace7315dba430335f + checksum: 452374b3db98bb805e77b3a53955aa76c1e78a7d48c400b08d48b6424ed9328ad826d98364b82506ea2756089320503d3a5797a1456bcdac11451763be536e62 languageName: node linkType: hard