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.
Files changed (61) hide show
  1. package/builtin-tasks/vars.d.ts +2 -0
  2. package/builtin-tasks/vars.d.ts.map +1 -0
  3. package/builtin-tasks/vars.js +41 -0
  4. package/builtin-tasks/vars.js.map +1 -0
  5. package/internal/cli/cli.js +4 -0
  6. package/internal/cli/cli.js.map +1 -1
  7. package/internal/cli/vars.d.ts +2 -0
  8. package/internal/cli/vars.d.ts.map +1 -0
  9. package/internal/cli/vars.js +216 -0
  10. package/internal/cli/vars.js.map +1 -0
  11. package/internal/context.d.ts +4 -0
  12. package/internal/context.d.ts.map +1 -1
  13. package/internal/context.js +3 -0
  14. package/internal/context.js.map +1 -1
  15. package/internal/core/config/config-env.d.ts +34 -0
  16. package/internal/core/config/config-env.d.ts.map +1 -1
  17. package/internal/core/config/config-env.js +47 -1
  18. package/internal/core/config/config-env.js.map +1 -1
  19. package/internal/core/config/config-loading.d.ts +1 -0
  20. package/internal/core/config/config-loading.d.ts.map +1 -1
  21. package/internal/core/config/config-loading.js +2 -1
  22. package/internal/core/config/config-loading.js.map +1 -1
  23. package/internal/core/errors-list.d.ts +30 -0
  24. package/internal/core/errors-list.d.ts.map +1 -1
  25. package/internal/core/errors-list.js +36 -1
  26. package/internal/core/errors-list.js.map +1 -1
  27. package/internal/core/tasks/builtin-tasks.d.ts +1 -0
  28. package/internal/core/tasks/builtin-tasks.d.ts.map +1 -1
  29. package/internal/core/tasks/builtin-tasks.js +1 -0
  30. package/internal/core/tasks/builtin-tasks.js.map +1 -1
  31. package/internal/core/vars/vars-manager-setup.d.ts +22 -0
  32. package/internal/core/vars/vars-manager-setup.d.ts.map +1 -0
  33. package/internal/core/vars/vars-manager-setup.js +95 -0
  34. package/internal/core/vars/vars-manager-setup.js.map +1 -0
  35. package/internal/core/vars/vars-manager.d.ts +21 -0
  36. package/internal/core/vars/vars-manager.d.ts.map +1 -0
  37. package/internal/core/vars/vars-manager.js +110 -0
  38. package/internal/core/vars/vars-manager.js.map +1 -0
  39. package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
  40. package/internal/hardhat-network/stack-traces/constants.js +1 -1
  41. package/internal/solidity/compiler/solc-info.d.ts.map +1 -1
  42. package/internal/solidity/compiler/solc-info.js +1 -0
  43. package/internal/solidity/compiler/solc-info.js.map +1 -1
  44. package/internal/util/global-dir.d.ts +1 -0
  45. package/internal/util/global-dir.d.ts.map +1 -1
  46. package/internal/util/global-dir.js +5 -1
  47. package/internal/util/global-dir.js.map +1 -1
  48. package/package.json +1 -1
  49. package/src/builtin-tasks/vars.ts +54 -0
  50. package/src/internal/cli/cli.ts +5 -1
  51. package/src/internal/cli/vars.ts +301 -0
  52. package/src/internal/context.ts +8 -0
  53. package/src/internal/core/config/config-env.ts +54 -0
  54. package/src/internal/core/config/config-loading.ts +1 -1
  55. package/src/internal/core/errors-list.ts +39 -1
  56. package/src/internal/core/tasks/builtin-tasks.ts +1 -0
  57. package/src/internal/core/vars/vars-manager-setup.ts +124 -0
  58. package/src/internal/core/vars/vars-manager.ts +152 -0
  59. package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
  60. package/src/internal/solidity/compiler/solc-info.ts +1 -0
  61. 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.21";
1
+ export const SUPPORTED_SOLIDITY_VERSION_RANGE = "<=0.8.22";
2
2
  export const FIRST_SOLC_VERSION_SUPPORTED = "0.5.1";
@@ -58,6 +58,7 @@ const defaultEvmTargets: { [key: string]: string } = {
58
58
  "0.8.19": "paris",
59
59
  "0.8.20": "shanghai",
60
60
  "0.8.21": "shanghai",
61
+ "0.8.22": "shanghai",
61
62
  };
62
63
 
63
64
  export function getEvmVersionFromSolcVersion(
@@ -140,3 +140,7 @@ export function writePromptedForHHVSCode() {
140
140
 
141
141
  fs.writeFileSync(extensionPromptedPath, "{}");
142
142
  }
143
+
144
+ export function getVarsFilePath(): string {
145
+ return path.join(getConfigDirSync(), "vars.json");
146
+ }