hardhat 2.13.0-dev.2 → 2.13.0-dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/builtin-tasks/compile.js +16 -6
- package/builtin-tasks/compile.js.map +1 -1
- package/builtin-tasks/flatten.js +1 -1
- package/builtin-tasks/flatten.js.map +1 -1
- package/builtin-tasks/help.js +2 -4
- package/builtin-tasks/help.js.map +1 -1
- package/builtin-tasks/task-names.d.ts +1 -0
- package/builtin-tasks/task-names.d.ts.map +1 -1
- package/builtin-tasks/task-names.js +3 -2
- package/builtin-tasks/task-names.js.map +1 -1
- package/builtin-tasks/test.js +22 -1
- package/builtin-tasks/test.js.map +1 -1
- package/internal/cli/bootstrap.d.ts +1 -0
- package/internal/cli/bootstrap.js +12 -20
- package/internal/cli/bootstrap.js.map +1 -1
- package/internal/cli/cli.d.ts +0 -1
- package/internal/cli/cli.d.ts.map +1 -1
- package/internal/cli/cli.js +20 -29
- package/internal/cli/cli.js.map +1 -1
- package/internal/cli/project-creation.d.ts +1 -2
- package/internal/cli/project-creation.d.ts.map +1 -1
- package/internal/cli/project-creation.js +105 -36
- package/internal/cli/project-creation.js.map +1 -1
- package/internal/cli/prompt.d.ts +2 -2
- package/internal/cli/prompt.d.ts.map +1 -1
- package/internal/cli/prompt.js +1 -2
- package/internal/cli/prompt.js.map +1 -1
- package/internal/cli/types.d.ts +1 -0
- package/internal/cli/types.d.ts.map +1 -1
- package/internal/core/config/config-env.d.ts +5 -11
- package/internal/core/config/config-env.d.ts.map +1 -1
- package/internal/core/config/config-env.js +2 -13
- package/internal/core/config/config-env.js.map +1 -1
- package/internal/core/config/config-loading.d.ts +2 -1
- package/internal/core/config/config-loading.d.ts.map +1 -1
- package/internal/core/config/config-loading.js +25 -7
- package/internal/core/config/config-loading.js.map +1 -1
- package/internal/core/config/config-validation.d.ts +2 -0
- package/internal/core/config/config-validation.d.ts.map +1 -1
- package/internal/core/config/config-validation.js +18 -1
- package/internal/core/config/config-validation.js.map +1 -1
- package/internal/core/config/extenders.d.ts +4 -7
- package/internal/core/config/extenders.d.ts.map +1 -1
- package/internal/core/config/extenders.js +5 -12
- package/internal/core/config/extenders.js.map +1 -1
- package/internal/core/errors-list.d.ts +28 -7
- package/internal/core/errors-list.d.ts.map +1 -1
- package/internal/core/errors-list.js +33 -10
- package/internal/core/errors-list.js.map +1 -1
- package/internal/core/jsonrpc/types/input/blockTag.d.ts +3 -3
- package/internal/core/jsonrpc/types/input/blockTag.d.ts.map +1 -1
- package/internal/core/project-structure.d.ts.map +1 -1
- package/internal/core/project-structure.js +6 -0
- package/internal/core/project-structure.js.map +1 -1
- package/internal/core/providers/construction.d.ts.map +1 -1
- package/internal/core/providers/construction.js +25 -5
- package/internal/core/providers/construction.js.map +1 -1
- package/internal/core/providers/http.d.ts +2 -2
- package/internal/core/providers/http.d.ts.map +1 -1
- package/internal/core/providers/http.js +41 -19
- package/internal/core/providers/http.js.map +1 -1
- package/internal/core/runtime-environment.d.ts +4 -2
- package/internal/core/runtime-environment.d.ts.map +1 -1
- package/internal/core/runtime-environment.js +39 -47
- package/internal/core/runtime-environment.js.map +1 -1
- package/internal/core/tasks/dsl.d.ts +6 -6
- package/internal/core/tasks/dsl.d.ts.map +1 -1
- package/internal/core/tasks/dsl.js.map +1 -1
- package/internal/core/tasks/task-definitions.d.ts +2 -2
- package/internal/core/tasks/task-definitions.d.ts.map +1 -1
- package/internal/core/tasks/task-definitions.js.map +1 -1
- package/internal/hardhat-network/jsonrpc/handler.d.ts +1 -0
- package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -1
- package/internal/hardhat-network/jsonrpc/handler.js +13 -18
- package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
- package/internal/hardhat-network/provider/RethnetState.d.ts +26 -0
- package/internal/hardhat-network/provider/RethnetState.d.ts.map +1 -0
- package/internal/hardhat-network/provider/RethnetState.js +84 -0
- package/internal/hardhat-network/provider/RethnetState.js.map +1 -0
- package/internal/hardhat-network/provider/modules/evm.d.ts +2 -1
- package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -1
- package/internal/hardhat-network/provider/modules/evm.js +10 -4
- package/internal/hardhat-network/provider/modules/evm.js.map +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts +1 -1
- package/internal/hardhat-network/provider/node-types.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.d.ts +1 -0
- package/internal/hardhat-network/provider/node.d.ts.map +1 -1
- package/internal/hardhat-network/provider/node.js +6 -4
- package/internal/hardhat-network/provider/node.js.map +1 -1
- package/internal/hardhat-network/provider/provider.d.ts +25 -21
- package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
- package/internal/hardhat-network/provider/provider.js +25 -42
- package/internal/hardhat-network/provider/provider.js.map +1 -1
- package/internal/hardhat-network/provider/return-data.js +2 -2
- package/internal/hardhat-network/provider/return-data.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +4 -2
- package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +4 -2
- package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -1
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +4 -2
- package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -1
- package/internal/hardhat-network/provider/utils/bloom.d.ts +32 -0
- package/internal/hardhat-network/provider/utils/bloom.d.ts.map +1 -0
- package/internal/hardhat-network/provider/utils/bloom.js +79 -0
- package/internal/hardhat-network/provider/utils/bloom.js.map +1 -0
- package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts +12 -0
- package/internal/hardhat-network/provider/utils/convertToRethnet.d.ts.map +1 -0
- package/internal/hardhat-network/provider/utils/convertToRethnet.js +162 -0
- package/internal/hardhat-network/provider/utils/convertToRethnet.js.map +1 -0
- package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +7 -0
- package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -0
- package/internal/hardhat-network/provider/utils/makeFakeSignature.js +31 -0
- package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -0
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -1
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js +2 -2
- package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -1
- package/internal/hardhat-network/provider/vm/block-builder.d.ts +31 -0
- package/internal/hardhat-network/provider/vm/block-builder.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/block-builder.js +151 -0
- package/internal/hardhat-network/provider/vm/block-builder.js.map +1 -0
- package/internal/hardhat-network/provider/vm/creation.d.ts +10 -0
- package/internal/hardhat-network/provider/vm/creation.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/creation.js +29 -0
- package/internal/hardhat-network/provider/vm/creation.js.map +1 -0
- package/internal/hardhat-network/provider/vm/dual.d.ts +43 -0
- package/internal/hardhat-network/provider/vm/dual.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/dual.js +488 -0
- package/internal/hardhat-network/provider/vm/dual.js.map +1 -0
- package/internal/hardhat-network/provider/vm/ethereumjs.d.ts +56 -0
- package/internal/hardhat-network/provider/vm/ethereumjs.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/ethereumjs.js +416 -0
- package/internal/hardhat-network/provider/vm/ethereumjs.js.map +1 -0
- package/internal/hardhat-network/provider/vm/exit.d.ts +23 -0
- package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/exit.js +130 -0
- package/internal/hardhat-network/provider/vm/exit.js.map +1 -0
- package/internal/hardhat-network/provider/vm/rethnet.d.ts +99 -0
- package/internal/hardhat-network/provider/vm/rethnet.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/rethnet.js +284 -0
- package/internal/hardhat-network/provider/vm/rethnet.js.map +1 -0
- package/internal/hardhat-network/provider/vm/vm-adapter.d.ts +52 -0
- package/internal/hardhat-network/provider/vm/vm-adapter.d.ts.map +1 -0
- package/internal/hardhat-network/provider/vm/vm-adapter.js +3 -0
- package/internal/hardhat-network/provider/vm/vm-adapter.js.map +1 -0
- package/internal/hardhat-network/stack-traces/compiler-to-model.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/compiler-to-model.js +37 -11
- package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/constants.js +1 -1
- package/internal/hardhat-network/stack-traces/debug.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/debug.js +6 -2
- package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.d.ts +1 -0
- package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/error-inferrer.js +85 -55
- package/internal/hardhat-network/stack-traces/error-inferrer.js.map +1 -1
- package/internal/hardhat-network/stack-traces/model.d.ts +3 -1
- package/internal/hardhat-network/stack-traces/model.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/model.js +9 -1
- package/internal/hardhat-network/stack-traces/model.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-errors.js +2 -2
- package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +2 -2
- package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/solidityTracer.js +1 -0
- package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
- package/internal/lib/hardhat-lib.d.ts.map +1 -1
- package/internal/lib/hardhat-lib.js +1 -4
- package/internal/lib/hardhat-lib.js.map +1 -1
- package/internal/solidity/compiler/downloader.js +2 -2
- package/internal/solidity/compiler/downloader.js.map +1 -1
- package/internal/solidity/compiler/index.js +1 -1
- package/internal/solidity/compiler/index.js.map +1 -1
- package/internal/solidity/resolver.d.ts +4 -3
- package/internal/solidity/resolver.d.ts.map +1 -1
- package/internal/solidity/resolver.js +18 -7
- package/internal/solidity/resolver.js.map +1 -1
- package/internal/util/abi-helpers.d.ts +1 -0
- package/internal/util/abi-helpers.d.ts.map +1 -1
- package/internal/util/abi-helpers.js +9 -0
- package/internal/util/abi-helpers.js.map +1 -1
- package/internal/util/download.d.ts.map +1 -1
- package/internal/util/download.js +12 -11
- package/internal/util/download.js.map +1 -1
- package/internal/util/packageInfo.d.ts +6 -1
- package/internal/util/packageInfo.d.ts.map +1 -1
- package/internal/util/packageInfo.js +14 -11
- package/internal/util/packageInfo.js.map +1 -1
- package/internal/util/proxy.d.ts +2 -0
- package/internal/util/proxy.d.ts.map +1 -0
- package/internal/util/proxy.js +19 -0
- package/internal/util/proxy.js.map +1 -0
- package/package.json +9 -10
- package/register.js +1 -4
- package/register.js.map +1 -1
- package/sample-projects/javascript/hardhat.config.js +1 -1
- package/sample-projects/javascript/scripts/deploy.js +2 -2
- package/sample-projects/javascript-esm/LICENSE.md +11 -0
- package/sample-projects/javascript-esm/README.md +13 -0
- package/sample-projects/javascript-esm/contracts/Lock.sol +34 -0
- package/sample-projects/javascript-esm/hardhat.config.cjs +6 -0
- package/sample-projects/javascript-esm/scripts/deploy.js +22 -0
- package/sample-projects/javascript-esm/test/Lock.js +123 -0
- package/sample-projects/typescript/hardhat.config.ts +1 -1
- package/sample-projects/typescript/scripts/deploy.ts +2 -2
- package/sample-projects/typescript/tsconfig.json +2 -1
- package/src/builtin-tasks/compile.ts +28 -7
- package/src/builtin-tasks/flatten.ts +4 -1
- package/src/builtin-tasks/help.ts +15 -16
- package/src/builtin-tasks/task-names.ts +2 -0
- package/src/builtin-tasks/test.ts +30 -2
- package/src/internal/artifacts.ts +947 -0
- package/src/internal/cli/bootstrap.ts +14 -36
- package/src/internal/cli/cli.ts +38 -43
- package/src/internal/cli/project-creation.ts +128 -47
- package/src/internal/cli/prompt.ts +2 -4
- package/src/internal/cli/types.ts +2 -0
- package/src/internal/core/config/config-env.ts +15 -27
- package/src/internal/core/config/config-loading.ts +35 -11
- package/src/internal/core/config/config-validation.ts +20 -0
- package/src/internal/core/config/extenders.ts +6 -15
- package/src/internal/core/errors-list.ts +36 -10
- package/src/internal/core/project-structure.ts +8 -0
- package/src/internal/core/providers/construction.ts +29 -24
- package/src/internal/core/providers/http.ts +38 -26
- package/src/internal/core/runtime-environment.ts +65 -60
- package/src/internal/core/tasks/dsl.ts +17 -17
- package/src/internal/core/tasks/task-definitions.ts +6 -2
- package/src/internal/hardhat-network/jsonrpc/handler.ts +31 -28
- package/src/internal/hardhat-network/provider/modules/evm.ts +15 -3
- package/src/internal/hardhat-network/provider/node-types.ts +1 -1
- package/src/internal/hardhat-network/provider/node.ts +5 -1
- package/src/internal/hardhat-network/provider/provider.ts +60 -49
- package/src/internal/hardhat-network/provider/return-data.ts +2 -2
- package/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +5 -2
- package/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +5 -2
- package/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +5 -2
- package/src/internal/hardhat-network/provider/utils/makeFakeSignature.ts +46 -0
- package/src/internal/hardhat-network/provider/utils/putGenesisBlock.ts +2 -2
- package/src/internal/hardhat-network/stack-traces/compiler-to-model.ts +71 -9
- package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
- package/src/internal/hardhat-network/stack-traces/debug.ts +9 -2
- package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +177 -89
- package/src/internal/hardhat-network/stack-traces/model.ts +11 -1
- package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +2 -2
- package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +2 -2
- package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +3 -0
- package/src/internal/lib/hardhat-lib.ts +1 -6
- package/src/internal/solidity/compiler/downloader.ts +2 -2
- package/src/internal/solidity/compiler/index.ts +1 -1
- package/src/internal/solidity/resolver.ts +28 -11
- package/src/internal/util/abi-helpers.ts +9 -0
- package/src/internal/util/download.ts +13 -15
- package/src/internal/util/packageInfo.ts +24 -10
- package/src/internal/util/proxy.ts +18 -0
- package/src/register.ts +1 -6
- package/src/types/artifacts.ts +14 -112
- package/src/types/config.ts +2 -0
- package/src/types/runtime.ts +16 -13
- package/types/artifacts.d.ts +10 -96
- package/types/artifacts.d.ts.map +1 -1
- package/types/config.d.ts +2 -0
- package/types/config.d.ts.map +1 -1
- package/types/runtime.d.ts +9 -10
- package/types/runtime.d.ts.map +1 -1
- package/internal/artifacts/caching.d.ts +0 -28
- package/internal/artifacts/caching.d.ts.map +0 -1
- package/internal/artifacts/caching.js +0 -178
- package/internal/artifacts/caching.js.map +0 -1
- package/internal/artifacts/index.d.ts +0 -45
- package/internal/artifacts/index.d.ts.map +0 -1
- package/internal/artifacts/index.js +0 -191
- package/internal/artifacts/index.js.map +0 -1
- package/internal/artifacts/mutable.d.ts +0 -29
- package/internal/artifacts/mutable.d.ts.map +0 -1
- package/internal/artifacts/mutable.js +0 -226
- package/internal/artifacts/mutable.js.map +0 -1
- package/internal/artifacts/readonly.d.ts +0 -94
- package/internal/artifacts/readonly.d.ts.map +0 -1
- package/internal/artifacts/readonly.js +0 -343
- package/internal/artifacts/readonly.js.map +0 -1
- package/src/internal/artifacts/caching.ts +0 -259
- package/src/internal/artifacts/index.ts +0 -302
- package/src/internal/artifacts/mutable.ts +0 -330
- package/src/internal/artifacts/readonly.ts +0 -470
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
import * as os from "os";
|
|
2
|
-
import path from "path";
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
Artifact,
|
|
6
|
-
Artifacts as IArtifacts,
|
|
7
|
-
ArtifactsSource,
|
|
8
|
-
BuildInfo,
|
|
9
|
-
CompilerInput,
|
|
10
|
-
CompilerOutput,
|
|
11
|
-
} from "../../types";
|
|
12
|
-
import { parseFullyQualifiedName } from "../../utils/contract-names";
|
|
13
|
-
|
|
14
|
-
import { ARTIFACT_FORMAT_VERSION } from "../constants";
|
|
15
|
-
import { HardhatError } from "../core/errors";
|
|
16
|
-
import { ERRORS } from "../core/errors-list";
|
|
17
|
-
|
|
18
|
-
import { CachingSource } from "./caching";
|
|
19
|
-
|
|
20
|
-
export class Artifacts implements IArtifacts {
|
|
21
|
-
private readonly _hardhatSource: CachingSource;
|
|
22
|
-
|
|
23
|
-
constructor(
|
|
24
|
-
private readonly _artifactsPath: string,
|
|
25
|
-
private readonly _extensionSources: ArtifactsSource[] = []
|
|
26
|
-
) {
|
|
27
|
-
this._hardhatSource = new CachingSource(this._artifactsPath);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public async readArtifact(
|
|
31
|
-
contractNameOrFullyQualifiedName: string
|
|
32
|
-
): Promise<Artifact> {
|
|
33
|
-
let artifact: Artifact | undefined = await this._hardhatSource.readArtifact(
|
|
34
|
-
contractNameOrFullyQualifiedName
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
if (artifact === undefined) {
|
|
38
|
-
const artifacts: Array<Artifact | undefined> = await Promise.all(
|
|
39
|
-
this._extensionSources.map((source) =>
|
|
40
|
-
source.readArtifact(contractNameOrFullyQualifiedName)
|
|
41
|
-
)
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
artifact = artifacts.find((_artifact) => _artifact !== undefined);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (artifact === undefined) {
|
|
48
|
-
this._throwNotFound(contractNameOrFullyQualifiedName);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return artifact;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
public readArtifactSync(contractNameOrFullyQualifiedName: string): Artifact {
|
|
55
|
-
let artifact: Artifact | undefined = this._hardhatSource.readArtifactSync(
|
|
56
|
-
contractNameOrFullyQualifiedName
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
if (artifact === undefined) {
|
|
60
|
-
for (const source of this._extensionSources) {
|
|
61
|
-
artifact = source.readArtifactSync(contractNameOrFullyQualifiedName);
|
|
62
|
-
if (artifact !== undefined) {
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (artifact === undefined) {
|
|
69
|
-
this._throwNotFound(contractNameOrFullyQualifiedName);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return artifact;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
public async artifactExists(
|
|
76
|
-
contractNameOrFullyQualifiedName: string
|
|
77
|
-
): Promise<boolean> {
|
|
78
|
-
const existencesPerSource = await Promise.all(
|
|
79
|
-
[this._hardhatSource, ...this._extensionSources].map((source) =>
|
|
80
|
-
source.artifactExists(contractNameOrFullyQualifiedName)
|
|
81
|
-
)
|
|
82
|
-
);
|
|
83
|
-
return existencesPerSource.includes(true);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
public async getAllFullyQualifiedNames(): Promise<string[]> {
|
|
87
|
-
return (
|
|
88
|
-
await Promise.all(
|
|
89
|
-
[this._hardhatSource, ...this._extensionSources].map((s) =>
|
|
90
|
-
s.getAllFullyQualifiedNames()
|
|
91
|
-
)
|
|
92
|
-
)
|
|
93
|
-
).flat();
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
public async getBuildInfo(
|
|
97
|
-
fullyQualifiedName: string
|
|
98
|
-
): Promise<BuildInfo | undefined> {
|
|
99
|
-
let buildInfo = await this._hardhatSource.getBuildInfo(fullyQualifiedName);
|
|
100
|
-
|
|
101
|
-
if (buildInfo === undefined) {
|
|
102
|
-
const buildInfos: Array<BuildInfo | undefined> = await Promise.all(
|
|
103
|
-
this._extensionSources.map((source) =>
|
|
104
|
-
source.getBuildInfo(fullyQualifiedName)
|
|
105
|
-
)
|
|
106
|
-
);
|
|
107
|
-
buildInfo = buildInfos.find((info) => info !== undefined);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return buildInfo;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
public getBuildInfoSync(fullyQualifiedName: string): BuildInfo | undefined {
|
|
114
|
-
let buildInfo = this._hardhatSource.getBuildInfoSync(fullyQualifiedName);
|
|
115
|
-
|
|
116
|
-
if (buildInfo === undefined) {
|
|
117
|
-
const buildInfos: Array<BuildInfo | undefined> =
|
|
118
|
-
this._extensionSources.map((source) =>
|
|
119
|
-
source.getBuildInfoSync(fullyQualifiedName)
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
buildInfo = buildInfos.find((info) => info !== undefined);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return buildInfo;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
public async getArtifactPaths(): Promise<string[]> {
|
|
129
|
-
return (
|
|
130
|
-
await Promise.all(
|
|
131
|
-
[this._hardhatSource, ...this._extensionSources].map((s) =>
|
|
132
|
-
s.getArtifactPaths()
|
|
133
|
-
)
|
|
134
|
-
)
|
|
135
|
-
).flat();
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
public async getDebugFilePaths(): Promise<string[]> {
|
|
139
|
-
return (
|
|
140
|
-
await Promise.all(
|
|
141
|
-
[this._hardhatSource, ...this._extensionSources].map((s) =>
|
|
142
|
-
s.getDebugFilePaths()
|
|
143
|
-
)
|
|
144
|
-
)
|
|
145
|
-
).flat();
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
public async getBuildInfoPaths(): Promise<string[]> {
|
|
149
|
-
return (
|
|
150
|
-
await Promise.all(
|
|
151
|
-
[this._hardhatSource, ...this._extensionSources].map((s) =>
|
|
152
|
-
s.getBuildInfoPaths()
|
|
153
|
-
)
|
|
154
|
-
)
|
|
155
|
-
).flat();
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
public clearCache(): void {
|
|
159
|
-
for (const source of [this._hardhatSource, ...this._extensionSources]) {
|
|
160
|
-
source.clearCache();
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
public disableCache(): void {
|
|
165
|
-
for (const source of [this._hardhatSource, ...this._extensionSources]) {
|
|
166
|
-
source.disableCache();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
public saveArtifactAndDebugFile(
|
|
171
|
-
artifact: Artifact,
|
|
172
|
-
pathToBuildInfo?: string
|
|
173
|
-
): Promise<void> {
|
|
174
|
-
return this._hardhatSource.saveArtifactAndDebugFile(
|
|
175
|
-
artifact,
|
|
176
|
-
pathToBuildInfo
|
|
177
|
-
);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
public saveBuildInfo(
|
|
181
|
-
solcVersion: string,
|
|
182
|
-
solcLongVersion: string,
|
|
183
|
-
input: CompilerInput,
|
|
184
|
-
output: CompilerOutput
|
|
185
|
-
): Promise<string> {
|
|
186
|
-
return this._hardhatSource.saveBuildInfo(
|
|
187
|
-
solcVersion,
|
|
188
|
-
solcLongVersion,
|
|
189
|
-
input,
|
|
190
|
-
output
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
public formArtifactPathFromFullyQualifiedName(
|
|
195
|
-
fullyQualifiedName: string
|
|
196
|
-
): string {
|
|
197
|
-
return this._hardhatSource.formArtifactPathFromFullyQualifiedName(
|
|
198
|
-
fullyQualifiedName
|
|
199
|
-
);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
public addValidArtifacts(
|
|
203
|
-
validArtifacts: Array<{ sourceName: string; artifacts: string[] }>
|
|
204
|
-
) {
|
|
205
|
-
this._hardhatSource.addValidArtifacts(validArtifacts);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
public async removeObsoleteArtifacts() {
|
|
209
|
-
return this._hardhatSource.removeObsoleteArtifacts();
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
private _throwNotFound(contractNameOrFullyQualifiedName: string): never {
|
|
213
|
-
const suggestions = this._hardhatSource.getSuggestions(
|
|
214
|
-
contractNameOrFullyQualifiedName
|
|
215
|
-
);
|
|
216
|
-
|
|
217
|
-
const uniqueSuggestions = [...new Set(suggestions)].sort();
|
|
218
|
-
|
|
219
|
-
const suggestion = this._formatSuggestions(
|
|
220
|
-
uniqueSuggestions,
|
|
221
|
-
contractNameOrFullyQualifiedName
|
|
222
|
-
);
|
|
223
|
-
|
|
224
|
-
throw new HardhatError(ERRORS.ARTIFACTS.NOT_FOUND, {
|
|
225
|
-
contractName: contractNameOrFullyQualifiedName,
|
|
226
|
-
suggestion,
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
private _formatSuggestions(names: string[], contractName: string): string {
|
|
231
|
-
switch (names.length) {
|
|
232
|
-
case 0:
|
|
233
|
-
return "";
|
|
234
|
-
case 1:
|
|
235
|
-
return `Did you mean "${names[0]}"?`;
|
|
236
|
-
default:
|
|
237
|
-
return `We found some that were similar:
|
|
238
|
-
|
|
239
|
-
${names.map((n) => ` * ${n}`).join(os.EOL)}
|
|
240
|
-
|
|
241
|
-
Please replace "${contractName}" for the correct contract name wherever you are trying to read its artifact.
|
|
242
|
-
`;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* DO NOT DELETE OR CHANGE
|
|
248
|
-
*
|
|
249
|
-
* use this.formArtifactPathFromFullyQualifiedName instead
|
|
250
|
-
* @deprecated until typechain migrates to public version
|
|
251
|
-
* @see https://github.com/dethcrypto/TypeChain/issues/544
|
|
252
|
-
*/
|
|
253
|
-
private _getArtifactPathFromFullyQualifiedName(
|
|
254
|
-
fullyQualifiedName: string
|
|
255
|
-
): string {
|
|
256
|
-
const { sourceName, contractName } =
|
|
257
|
-
parseFullyQualifiedName(fullyQualifiedName);
|
|
258
|
-
|
|
259
|
-
return path.join(this._artifactsPath, sourceName, `${contractName}.json`);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Retrieves an artifact for the given `contractName` from the compilation output.
|
|
265
|
-
*
|
|
266
|
-
* @param sourceName The contract's source name.
|
|
267
|
-
* @param contractName the contract's name.
|
|
268
|
-
* @param contractOutput the contract's compilation output as emitted by `solc`.
|
|
269
|
-
*/
|
|
270
|
-
export function getArtifactFromContractOutput(
|
|
271
|
-
sourceName: string,
|
|
272
|
-
contractName: string,
|
|
273
|
-
contractOutput: any
|
|
274
|
-
): Artifact {
|
|
275
|
-
const evmBytecode = contractOutput.evm?.bytecode;
|
|
276
|
-
let bytecode: string = evmBytecode?.object ?? "";
|
|
277
|
-
|
|
278
|
-
if (bytecode.slice(0, 2).toLowerCase() !== "0x") {
|
|
279
|
-
bytecode = `0x${bytecode}`;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
const evmDeployedBytecode = contractOutput.evm?.deployedBytecode;
|
|
283
|
-
let deployedBytecode: string = evmDeployedBytecode?.object ?? "";
|
|
284
|
-
|
|
285
|
-
if (deployedBytecode.slice(0, 2).toLowerCase() !== "0x") {
|
|
286
|
-
deployedBytecode = `0x${deployedBytecode}`;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
const linkReferences = evmBytecode?.linkReferences ?? {};
|
|
290
|
-
const deployedLinkReferences = evmDeployedBytecode?.linkReferences ?? {};
|
|
291
|
-
|
|
292
|
-
return {
|
|
293
|
-
_format: ARTIFACT_FORMAT_VERSION,
|
|
294
|
-
contractName,
|
|
295
|
-
sourceName,
|
|
296
|
-
abi: contractOutput.abi,
|
|
297
|
-
bytecode,
|
|
298
|
-
deployedBytecode,
|
|
299
|
-
linkReferences,
|
|
300
|
-
deployedLinkReferences,
|
|
301
|
-
};
|
|
302
|
-
}
|
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
import debug from "debug";
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
import fsPromises from "fs/promises";
|
|
4
|
-
|
|
5
|
-
import fsExtra from "fs-extra";
|
|
6
|
-
|
|
7
|
-
import { getFullyQualifiedName } from "../../utils/contract-names";
|
|
8
|
-
import { createNonCryptographicHashBasedIdentifier } from "../util/hash";
|
|
9
|
-
import {
|
|
10
|
-
Artifact,
|
|
11
|
-
BuildInfo,
|
|
12
|
-
CompilerInput,
|
|
13
|
-
CompilerOutput,
|
|
14
|
-
DebugFile,
|
|
15
|
-
} from "../../types";
|
|
16
|
-
import {
|
|
17
|
-
BUILD_INFO_DIR_NAME,
|
|
18
|
-
BUILD_INFO_FORMAT_VERSION,
|
|
19
|
-
DEBUG_FILE_FORMAT_VERSION,
|
|
20
|
-
} from "../constants";
|
|
21
|
-
import { ReadOnlySource } from "./readonly";
|
|
22
|
-
|
|
23
|
-
const log = debug("hardhat:core:artifacts");
|
|
24
|
-
|
|
25
|
-
export class MutableSource extends ReadOnlySource {
|
|
26
|
-
private _validArtifacts: Array<{ sourceName: string; artifacts: string[] }>;
|
|
27
|
-
|
|
28
|
-
constructor(artifactsPath: string) {
|
|
29
|
-
super(artifactsPath);
|
|
30
|
-
this._validArtifacts = [];
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
public addValidArtifacts(
|
|
34
|
-
validArtifacts: Array<{ sourceName: string; artifacts: string[] }>
|
|
35
|
-
) {
|
|
36
|
-
this._validArtifacts.push(...validArtifacts);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Remove all artifacts that don't correspond to the current solidity files
|
|
41
|
-
*/
|
|
42
|
-
public async removeObsoleteArtifacts() {
|
|
43
|
-
const validArtifactPaths = await Promise.all(
|
|
44
|
-
this._validArtifacts.flatMap(({ sourceName, artifacts }) =>
|
|
45
|
-
artifacts.map((artifactName) =>
|
|
46
|
-
this._getArtifactPath(getFullyQualifiedName(sourceName, artifactName))
|
|
47
|
-
)
|
|
48
|
-
)
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
const validArtifactPathsWithoutUndefined = validArtifactPaths.filter(
|
|
52
|
-
(artifactPath): artifactPath is string => artifactPath !== undefined
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
const validArtifactsPathsSet = new Set<string>(
|
|
56
|
-
validArtifactPathsWithoutUndefined
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
for (const { sourceName, artifacts } of this._validArtifacts) {
|
|
60
|
-
for (const artifactName of artifacts) {
|
|
61
|
-
validArtifactsPathsSet.add(
|
|
62
|
-
this.formArtifactPathFromFullyQualifiedName(
|
|
63
|
-
getFullyQualifiedName(sourceName, artifactName)
|
|
64
|
-
)
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const existingArtifactsPaths = await this.getArtifactPaths();
|
|
70
|
-
|
|
71
|
-
await Promise.all(
|
|
72
|
-
existingArtifactsPaths
|
|
73
|
-
.filter((artifactPath) => !validArtifactsPathsSet.has(artifactPath))
|
|
74
|
-
.map((artifactPath) => this._removeArtifactFiles(artifactPath))
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
await this._removeObsoleteBuildInfos();
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
public async saveArtifactAndDebugFile(
|
|
81
|
-
artifact: Artifact,
|
|
82
|
-
pathToBuildInfo?: string
|
|
83
|
-
) {
|
|
84
|
-
// artifact
|
|
85
|
-
const fullyQualifiedName = getFullyQualifiedName(
|
|
86
|
-
artifact.sourceName,
|
|
87
|
-
artifact.contractName
|
|
88
|
-
);
|
|
89
|
-
|
|
90
|
-
const artifactPath =
|
|
91
|
-
this.formArtifactPathFromFullyQualifiedName(fullyQualifiedName);
|
|
92
|
-
|
|
93
|
-
await fsExtra.ensureDir(path.dirname(artifactPath));
|
|
94
|
-
|
|
95
|
-
await Promise.all([
|
|
96
|
-
fsExtra.writeJSON(artifactPath, artifact, {
|
|
97
|
-
spaces: 2,
|
|
98
|
-
}),
|
|
99
|
-
(async () => {
|
|
100
|
-
if (pathToBuildInfo === undefined) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// save debug file
|
|
105
|
-
const debugFilePath = this._getDebugFilePath(artifactPath);
|
|
106
|
-
const debugFile = this._createDebugFile(artifactPath, pathToBuildInfo);
|
|
107
|
-
|
|
108
|
-
await fsExtra.writeJSON(debugFilePath, debugFile, {
|
|
109
|
-
spaces: 2,
|
|
110
|
-
});
|
|
111
|
-
})(),
|
|
112
|
-
]);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
public async saveBuildInfo(
|
|
116
|
-
solcVersion: string,
|
|
117
|
-
solcLongVersion: string,
|
|
118
|
-
input: CompilerInput,
|
|
119
|
-
output: CompilerOutput
|
|
120
|
-
): Promise<string> {
|
|
121
|
-
const buildInfoDir = path.join(this._artifactsPath, BUILD_INFO_DIR_NAME);
|
|
122
|
-
await fsExtra.ensureDir(buildInfoDir);
|
|
123
|
-
|
|
124
|
-
const buildInfoName = MutableSource._getBuildInfoName(
|
|
125
|
-
solcVersion,
|
|
126
|
-
solcLongVersion,
|
|
127
|
-
input
|
|
128
|
-
);
|
|
129
|
-
|
|
130
|
-
const buildInfo = MutableSource._createBuildInfo(
|
|
131
|
-
buildInfoName,
|
|
132
|
-
solcVersion,
|
|
133
|
-
solcLongVersion,
|
|
134
|
-
input,
|
|
135
|
-
output
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
const buildInfoPath = path.join(buildInfoDir, `${buildInfoName}.json`);
|
|
139
|
-
|
|
140
|
-
// JSON.stringify of the entire build info can be really slow
|
|
141
|
-
// in larger projects, so we stringify per part and incrementally create
|
|
142
|
-
// the JSON in the file.
|
|
143
|
-
//
|
|
144
|
-
// We split this code into different curly-brace-enclosed scopes so that
|
|
145
|
-
// partial JSON strings get out of scope sooner and hence can be reclaimed
|
|
146
|
-
// by the GC if needed.
|
|
147
|
-
const file = await fsPromises.open(buildInfoPath, "w");
|
|
148
|
-
try {
|
|
149
|
-
{
|
|
150
|
-
const withoutOutput = JSON.stringify({
|
|
151
|
-
...buildInfo,
|
|
152
|
-
output: undefined,
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
// We write the JSON (without output) except the last }
|
|
156
|
-
await file.write(withoutOutput.slice(0, -1));
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
{
|
|
160
|
-
const outputWithoutSourcesAndContracts = JSON.stringify({
|
|
161
|
-
...buildInfo.output,
|
|
162
|
-
sources: undefined,
|
|
163
|
-
contracts: undefined,
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
// We start writing the output
|
|
167
|
-
await file.write(',"output":');
|
|
168
|
-
|
|
169
|
-
// Write the output object except for the last }
|
|
170
|
-
await file.write(outputWithoutSourcesAndContracts.slice(0, -1));
|
|
171
|
-
|
|
172
|
-
// If there were other field apart from sources and contracts we need
|
|
173
|
-
// a comma
|
|
174
|
-
if (outputWithoutSourcesAndContracts.length > 2) {
|
|
175
|
-
await file.write(",");
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Writing the sources
|
|
180
|
-
await file.write('"sources":{');
|
|
181
|
-
|
|
182
|
-
let isFirst = true;
|
|
183
|
-
for (const [name, value] of Object.entries(
|
|
184
|
-
buildInfo.output.sources ?? {}
|
|
185
|
-
)) {
|
|
186
|
-
if (isFirst) {
|
|
187
|
-
isFirst = false;
|
|
188
|
-
} else {
|
|
189
|
-
await file.write(",");
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
await file.write(`${JSON.stringify(name)}:${JSON.stringify(value)}`);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// Close sources object
|
|
196
|
-
await file.write("}");
|
|
197
|
-
|
|
198
|
-
// Writing the contracts
|
|
199
|
-
await file.write(',"contracts":{');
|
|
200
|
-
|
|
201
|
-
isFirst = true;
|
|
202
|
-
for (const [name, value] of Object.entries(
|
|
203
|
-
buildInfo.output.contracts ?? {}
|
|
204
|
-
)) {
|
|
205
|
-
if (isFirst) {
|
|
206
|
-
isFirst = false;
|
|
207
|
-
} else {
|
|
208
|
-
await file.write(",");
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
await file.write(`${JSON.stringify(name)}:${JSON.stringify(value)}`);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// close contracts object
|
|
215
|
-
await file.write("}");
|
|
216
|
-
// close output object
|
|
217
|
-
await file.write("}");
|
|
218
|
-
// close build info object
|
|
219
|
-
await file.write("}");
|
|
220
|
-
} finally {
|
|
221
|
-
await file.close();
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
return buildInfoPath;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
private static _createBuildInfo(
|
|
228
|
-
id: string,
|
|
229
|
-
solcVersion: string,
|
|
230
|
-
solcLongVersion: string,
|
|
231
|
-
input: CompilerInput,
|
|
232
|
-
output: CompilerOutput
|
|
233
|
-
): BuildInfo {
|
|
234
|
-
return {
|
|
235
|
-
id,
|
|
236
|
-
_format: BUILD_INFO_FORMAT_VERSION,
|
|
237
|
-
solcVersion,
|
|
238
|
-
solcLongVersion,
|
|
239
|
-
input,
|
|
240
|
-
output,
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
private _createDebugFile(artifactPath: string, pathToBuildInfo: string) {
|
|
245
|
-
const relativePathToBuildInfo = path.relative(
|
|
246
|
-
path.dirname(artifactPath),
|
|
247
|
-
pathToBuildInfo
|
|
248
|
-
);
|
|
249
|
-
|
|
250
|
-
const debugFile: DebugFile = {
|
|
251
|
-
_format: DEBUG_FILE_FORMAT_VERSION,
|
|
252
|
-
buildInfo: relativePathToBuildInfo,
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
return debugFile;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
private static _getBuildInfoName(
|
|
259
|
-
solcVersion: string,
|
|
260
|
-
solcLongVersion: string,
|
|
261
|
-
input: CompilerInput
|
|
262
|
-
): string {
|
|
263
|
-
const json = JSON.stringify({
|
|
264
|
-
_format: BUILD_INFO_FORMAT_VERSION,
|
|
265
|
-
solcVersion,
|
|
266
|
-
solcLongVersion,
|
|
267
|
-
input,
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
return createNonCryptographicHashBasedIdentifier(
|
|
271
|
-
Buffer.from(json)
|
|
272
|
-
).toString("hex");
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* Remove the artifact file, its debug file and, if it exists, its build
|
|
277
|
-
* info file.
|
|
278
|
-
*/
|
|
279
|
-
private async _removeArtifactFiles(artifactPath: string) {
|
|
280
|
-
await fsExtra.remove(artifactPath);
|
|
281
|
-
|
|
282
|
-
const debugFilePath = this._getDebugFilePath(artifactPath);
|
|
283
|
-
const buildInfoPath = await ReadOnlySource._getBuildInfoFromDebugFile(
|
|
284
|
-
debugFilePath
|
|
285
|
-
);
|
|
286
|
-
|
|
287
|
-
await fsExtra.remove(debugFilePath);
|
|
288
|
-
|
|
289
|
-
if (buildInfoPath !== undefined) {
|
|
290
|
-
await fsExtra.remove(buildInfoPath);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/**
|
|
295
|
-
* Remove all build infos that aren't used by any debug file
|
|
296
|
-
*/
|
|
297
|
-
private async _removeObsoleteBuildInfos() {
|
|
298
|
-
const debugFiles = await this.getDebugFilePaths();
|
|
299
|
-
|
|
300
|
-
const buildInfos = await Promise.all(
|
|
301
|
-
debugFiles.map(async (debugFile) => {
|
|
302
|
-
const buildInfoFile = await ReadOnlySource._getBuildInfoFromDebugFile(
|
|
303
|
-
debugFile
|
|
304
|
-
);
|
|
305
|
-
if (buildInfoFile !== undefined) {
|
|
306
|
-
return path.resolve(path.dirname(debugFile), buildInfoFile);
|
|
307
|
-
} else {
|
|
308
|
-
return undefined;
|
|
309
|
-
}
|
|
310
|
-
})
|
|
311
|
-
);
|
|
312
|
-
|
|
313
|
-
const filteredBuildInfos: string[] = buildInfos.filter(
|
|
314
|
-
(bf): bf is string => typeof bf === "string"
|
|
315
|
-
);
|
|
316
|
-
|
|
317
|
-
const validBuildInfos = new Set<string>(filteredBuildInfos);
|
|
318
|
-
|
|
319
|
-
const buildInfoFiles = await this.getBuildInfoPaths();
|
|
320
|
-
|
|
321
|
-
await Promise.all(
|
|
322
|
-
buildInfoFiles
|
|
323
|
-
.filter((buildInfoFile) => !validBuildInfos.has(buildInfoFile))
|
|
324
|
-
.map(async (buildInfoFile) => {
|
|
325
|
-
log(`Removing buildInfo '${buildInfoFile}'`);
|
|
326
|
-
await fsExtra.unlink(buildInfoFile);
|
|
327
|
-
})
|
|
328
|
-
);
|
|
329
|
-
}
|
|
330
|
-
}
|