hardhat 2.18.3 → 2.19.0
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/vars.d.ts +2 -0
- package/builtin-tasks/vars.d.ts.map +1 -0
- package/builtin-tasks/vars.js +41 -0
- package/builtin-tasks/vars.js.map +1 -0
- package/internal/cli/cli.js +4 -0
- package/internal/cli/cli.js.map +1 -1
- package/internal/cli/vars.d.ts +2 -0
- package/internal/cli/vars.d.ts.map +1 -0
- package/internal/cli/vars.js +216 -0
- package/internal/cli/vars.js.map +1 -0
- package/internal/context.d.ts +4 -0
- package/internal/context.d.ts.map +1 -1
- package/internal/context.js +3 -0
- package/internal/context.js.map +1 -1
- package/internal/core/config/config-env.d.ts +34 -0
- package/internal/core/config/config-env.d.ts.map +1 -1
- package/internal/core/config/config-env.js +47 -1
- package/internal/core/config/config-env.js.map +1 -1
- package/internal/core/config/config-loading.d.ts +1 -0
- package/internal/core/config/config-loading.d.ts.map +1 -1
- package/internal/core/config/config-loading.js +2 -1
- package/internal/core/config/config-loading.js.map +1 -1
- package/internal/core/errors-list.d.ts +30 -0
- package/internal/core/errors-list.d.ts.map +1 -1
- package/internal/core/errors-list.js +36 -1
- package/internal/core/errors-list.js.map +1 -1
- package/internal/core/tasks/builtin-tasks.d.ts +1 -0
- package/internal/core/tasks/builtin-tasks.d.ts.map +1 -1
- package/internal/core/tasks/builtin-tasks.js +1 -0
- package/internal/core/tasks/builtin-tasks.js.map +1 -1
- package/internal/core/vars/vars-manager-setup.d.ts +22 -0
- package/internal/core/vars/vars-manager-setup.d.ts.map +1 -0
- package/internal/core/vars/vars-manager-setup.js +95 -0
- package/internal/core/vars/vars-manager-setup.js.map +1 -0
- package/internal/core/vars/vars-manager.d.ts +21 -0
- package/internal/core/vars/vars-manager.d.ts.map +1 -0
- package/internal/core/vars/vars-manager.js +110 -0
- package/internal/core/vars/vars-manager.js.map +1 -0
- package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
- package/internal/hardhat-network/stack-traces/constants.js +1 -1
- package/internal/solidity/compiler/solc-info.d.ts.map +1 -1
- package/internal/solidity/compiler/solc-info.js +1 -0
- package/internal/solidity/compiler/solc-info.js.map +1 -1
- package/internal/util/global-dir.d.ts +1 -0
- package/internal/util/global-dir.d.ts.map +1 -1
- package/internal/util/global-dir.js +5 -1
- package/internal/util/global-dir.js.map +1 -1
- package/package.json +1 -1
- package/src/builtin-tasks/vars.ts +54 -0
- package/src/internal/cli/cli.ts +5 -1
- package/src/internal/cli/vars.ts +301 -0
- package/src/internal/context.ts +8 -0
- package/src/internal/core/config/config-env.ts +54 -0
- package/src/internal/core/config/config-loading.ts +1 -1
- package/src/internal/core/errors-list.ts +39 -1
- package/src/internal/core/tasks/builtin-tasks.ts +1 -0
- package/src/internal/core/vars/vars-manager-setup.ts +124 -0
- package/src/internal/core/vars/vars-manager.ts +152 -0
- package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
- package/src/internal/solidity/compiler/solc-info.ts +1 -0
- package/src/internal/util/global-dir.ts +4 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import debug from "debug";
|
|
3
|
+
import { HardhatError } from "../errors";
|
|
4
|
+
import { ERRORS } from "../errors-list";
|
|
5
|
+
|
|
6
|
+
interface Var {
|
|
7
|
+
value: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface VarsFile {
|
|
11
|
+
_format: string; // Version of the json vars file
|
|
12
|
+
vars: Record<string, Var>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const log = debug("hardhat:core:vars:varsManager");
|
|
16
|
+
|
|
17
|
+
export class VarsManager {
|
|
18
|
+
private readonly _VERSION = "hh-vars-1";
|
|
19
|
+
private readonly _ENV_VAR_PREFIX = "HARDHAT_VAR_";
|
|
20
|
+
private readonly _storageCache: VarsFile;
|
|
21
|
+
private readonly _envCache: Record<string, string>;
|
|
22
|
+
|
|
23
|
+
constructor(private readonly _varsFilePath: string) {
|
|
24
|
+
log("Creating a new instance of VarsManager");
|
|
25
|
+
|
|
26
|
+
this._initializeVarsFile();
|
|
27
|
+
this._storageCache = fs.readJSONSync(this._varsFilePath);
|
|
28
|
+
|
|
29
|
+
this._envCache = {};
|
|
30
|
+
this._loadVarsFromEnv();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public getStoragePath(): string {
|
|
34
|
+
return this._varsFilePath;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public set(key: string, value: string) {
|
|
38
|
+
this.validateKey(key);
|
|
39
|
+
|
|
40
|
+
if (value === "") {
|
|
41
|
+
throw new HardhatError(ERRORS.VARS.INVALID_EMPTY_VALUE);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const vars = this._storageCache.vars;
|
|
45
|
+
|
|
46
|
+
vars[key] = { value };
|
|
47
|
+
this._writeStoredVars(vars);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public has(key: string, includeEnvs: boolean = false): boolean {
|
|
51
|
+
if (includeEnvs && key in this._envCache) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return key in this._storageCache.vars;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public get(
|
|
59
|
+
key: string,
|
|
60
|
+
defaultValue?: string,
|
|
61
|
+
includeEnvs: boolean = false
|
|
62
|
+
): string | undefined {
|
|
63
|
+
if (includeEnvs && key in this._envCache) {
|
|
64
|
+
return this._envCache[key];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return this._storageCache.vars[key]?.value ?? defaultValue;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public getEnvVars(): string[] {
|
|
71
|
+
return Object.keys(this._envCache).map(
|
|
72
|
+
(k) => `${this._ENV_VAR_PREFIX}${k}`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public list(): string[] {
|
|
77
|
+
return Object.keys(this._storageCache.vars);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public delete(key: string): boolean {
|
|
81
|
+
const vars = this._storageCache.vars;
|
|
82
|
+
|
|
83
|
+
if (vars[key] === undefined) return false;
|
|
84
|
+
|
|
85
|
+
delete vars[key];
|
|
86
|
+
this._writeStoredVars(vars);
|
|
87
|
+
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
public validateKey(key: string) {
|
|
92
|
+
const KEY_REGEX = /^[a-zA-Z_]+[a-zA-Z0-9_]*$/;
|
|
93
|
+
|
|
94
|
+
if (!KEY_REGEX.test(key)) {
|
|
95
|
+
throw new HardhatError(ERRORS.VARS.INVALID_CONFIG_VAR_NAME, {
|
|
96
|
+
value: key,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
private _initializeVarsFile() {
|
|
102
|
+
if (!fs.pathExistsSync(this._varsFilePath)) {
|
|
103
|
+
// Initialize the vars file if it does not exist
|
|
104
|
+
log(
|
|
105
|
+
`Vars file do not exist. Creating a new one at '${this._varsFilePath}' with version '${this._VERSION}'`
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
fs.writeJSONSync(this._varsFilePath, this._getVarsFileStructure(), {
|
|
109
|
+
spaces: 2,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
private _getVarsFileStructure(): VarsFile {
|
|
115
|
+
return {
|
|
116
|
+
_format: this._VERSION,
|
|
117
|
+
vars: {},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private _loadVarsFromEnv() {
|
|
122
|
+
log("Loading ENV variables if any");
|
|
123
|
+
|
|
124
|
+
for (const key in process.env) {
|
|
125
|
+
if (key.startsWith(this._ENV_VAR_PREFIX)) {
|
|
126
|
+
const envVar = process.env[key];
|
|
127
|
+
|
|
128
|
+
if (
|
|
129
|
+
envVar === undefined ||
|
|
130
|
+
envVar.replace(/[\s\t]/g, "").length === 0
|
|
131
|
+
) {
|
|
132
|
+
throw new HardhatError(ERRORS.ARGUMENTS.INVALID_ENV_VAR_VALUE, {
|
|
133
|
+
varName: key,
|
|
134
|
+
value: envVar!,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const envKey = key.replace(this._ENV_VAR_PREFIX, "");
|
|
139
|
+
this.validateKey(envKey);
|
|
140
|
+
|
|
141
|
+
// Store only in cache, not in a file, as the vars are sourced from environment variables
|
|
142
|
+
this._envCache[envKey] = envVar;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
private _writeStoredVars(vars: Record<string, Var>) {
|
|
148
|
+
// ENV variables are not stored in the file
|
|
149
|
+
this._storageCache.vars = vars;
|
|
150
|
+
fs.writeJSONSync(this._varsFilePath, this._storageCache, { spaces: 2 });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const SUPPORTED_SOLIDITY_VERSION_RANGE = "<=0.8.
|
|
1
|
+
export const SUPPORTED_SOLIDITY_VERSION_RANGE = "<=0.8.22";
|
|
2
2
|
export const FIRST_SOLC_VERSION_SUPPORTED = "0.5.1";
|