hardhat-deploy 2.0.0-next.6 → 2.0.0-next.61
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/LICENSE +1 -1
- package/README.md +22 -1
- package/dist/esm/config/default.d.ts.map +1 -1
- package/dist/esm/config/default.js +2 -5
- package/dist/esm/config/default.js.map +1 -1
- package/dist/esm/config/get-config.d.ts.map +1 -1
- package/dist/esm/config/get-config.js +3 -2
- package/dist/esm/config/get-config.js.map +1 -1
- package/dist/esm/config/validation.d.ts.map +1 -1
- package/dist/esm/config/validation.js +8 -7
- package/dist/esm/config/validation.js.map +1 -1
- package/dist/esm/generate-types.d.ts +2 -3
- package/dist/esm/generate-types.d.ts.map +1 -1
- package/dist/esm/generate-types.js +202 -156
- package/dist/esm/generate-types.js.map +1 -1
- package/dist/esm/helpers.d.ts +28 -12
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +106 -72
- package/dist/esm/helpers.js.map +1 -1
- package/dist/esm/hook-handlers/config.d.ts.map +1 -1
- package/dist/esm/hook-handlers/config.js +53 -1
- package/dist/esm/hook-handlers/config.js.map +1 -1
- package/dist/esm/hook-handlers/solidity.d.ts.map +1 -1
- package/dist/esm/hook-handlers/solidity.js +13 -7
- package/dist/esm/hook-handlers/solidity.js.map +1 -1
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +22 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tasks/deploy.d.ts +1 -0
- package/dist/esm/tasks/deploy.d.ts.map +1 -1
- package/dist/esm/tasks/deploy.js +20 -9
- package/dist/esm/tasks/deploy.js.map +1 -1
- package/dist/esm/type-extensions.d.ts +2 -2
- package/dist/esm/type-extensions.d.ts.map +1 -1
- package/dist/esm/types.d.ts +8 -10
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils/files.d.ts +9 -0
- package/dist/esm/utils/files.d.ts.map +1 -0
- package/dist/esm/utils/files.js +25 -0
- package/dist/esm/utils/files.js.map +1 -0
- package/package.json +18 -13
- package/src/config/default.ts +6 -0
- package/src/config/get-config.ts +12 -0
- package/src/config/validation.ts +25 -0
- package/src/generate-types.ts +281 -0
- package/src/helpers.ts +311 -0
- package/src/hook-handlers/config.ts +80 -0
- package/src/hook-handlers/solidity.ts +33 -0
- package/src/index.ts +53 -0
- package/src/tasks/deploy.ts +43 -0
- package/src/type-extensions.ts +12 -0
- package/src/types.ts +9 -0
- package/src/utils/files.ts +37 -0
- package/dist/esm/tasks/compile.d.ts +0 -6
- package/dist/esm/tasks/compile.d.ts.map +0 -1
- package/dist/esm/tasks/compile.js +0 -254
- package/dist/esm/tasks/compile.js.map +0 -1
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
function traverse(dir, result = [], topDir, filter // TODO any is Stats
|
|
4
|
-
) {
|
|
5
|
-
fs.readdirSync(dir).forEach((name) => {
|
|
6
|
-
const fPath = path.resolve(dir, name);
|
|
7
|
-
const stats = fs.statSync(fPath);
|
|
8
|
-
if ((!filter && !name.startsWith('.')) || (filter && filter(name, stats))) {
|
|
9
|
-
const fileStats = {
|
|
10
|
-
name,
|
|
11
|
-
path: fPath,
|
|
12
|
-
relativePath: path.relative(topDir || dir, fPath),
|
|
13
|
-
mtimeMs: stats.mtimeMs,
|
|
14
|
-
directory: stats.isDirectory(),
|
|
15
|
-
};
|
|
16
|
-
if (fileStats.directory) {
|
|
17
|
-
result.push(fileStats);
|
|
18
|
-
return traverse(fPath, result, topDir || dir, filter);
|
|
19
|
-
}
|
|
20
|
-
result.push(fileStats);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
return result;
|
|
24
|
-
}
|
|
25
|
-
function writeFiles(name, data, config) {
|
|
26
|
-
const js = typeof config?.js === 'string' ? [config?.js] : config?.js || [];
|
|
27
|
-
const ts = typeof config?.ts === 'string' ? [config?.ts] : config?.ts || [];
|
|
28
|
-
const json = typeof config?.json === 'string' ? [config?.json] : config?.json || [];
|
|
29
|
-
const jsm = typeof config?.jsm === 'string' ? [config?.jsm] : config?.jsm || [];
|
|
30
|
-
const tsm = typeof config?.tsm === 'string' ? [config?.tsm] : config?.tsm || [];
|
|
31
|
-
if (ts.length > 0) {
|
|
32
|
-
const newContent = `export default ${JSON.stringify(data, null, 2)} as const;`;
|
|
33
|
-
for (const tsFile of ts) {
|
|
34
|
-
if (tsFile.endsWith('.ts')) {
|
|
35
|
-
if (!name) {
|
|
36
|
-
const filepath = tsFile;
|
|
37
|
-
const folderPath = path.dirname(filepath);
|
|
38
|
-
fs.mkdirSync(folderPath, { recursive: true });
|
|
39
|
-
fs.writeFileSync(filepath, newContent);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
if (name) {
|
|
44
|
-
const filepath = `${tsFile}/${name}.ts`;
|
|
45
|
-
const folderPath = path.dirname(filepath);
|
|
46
|
-
fs.mkdirSync(folderPath, { recursive: true });
|
|
47
|
-
fs.writeFileSync(filepath, newContent);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (js.length > 0) {
|
|
53
|
-
const newContent = `export default /** @type {const} **/ (${JSON.stringify(data, null, 2)});`;
|
|
54
|
-
// const dtsContent = `export = ${JSON.stringify(data, null, 2)} as const;`;
|
|
55
|
-
const dtsContent = `declare const _default: ${JSON.stringify(data, null, 2)};export default _default;`;
|
|
56
|
-
// const dtsContent = `declare const _default: ${JSON.stringify(data, null, 2)};export = _default;`;
|
|
57
|
-
const cjsContent = `module.exports = /** @type {const} **/ (${JSON.stringify(data, null, 2)});`;
|
|
58
|
-
for (const jsFile of js) {
|
|
59
|
-
if (jsFile.endsWith('.js')) {
|
|
60
|
-
if (!name) {
|
|
61
|
-
const filepath = jsFile;
|
|
62
|
-
const folderPath = path.dirname(filepath);
|
|
63
|
-
fs.mkdirSync(folderPath, { recursive: true });
|
|
64
|
-
fs.writeFileSync(filepath, newContent);
|
|
65
|
-
fs.writeFileSync(filepath.replace(/\.js$/, '.d.ts'), dtsContent);
|
|
66
|
-
fs.writeFileSync(filepath.replace(/\.js$/, '.cjs'), cjsContent);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
if (name) {
|
|
71
|
-
const filepath = `${jsFile}/${name}.js`;
|
|
72
|
-
const folderPath = path.dirname(filepath);
|
|
73
|
-
fs.mkdirSync(folderPath, { recursive: true });
|
|
74
|
-
fs.writeFileSync(filepath, newContent);
|
|
75
|
-
fs.writeFileSync(filepath.replace(/\.js$/, '.d.ts'), dtsContent);
|
|
76
|
-
fs.writeFileSync(filepath.replace(/\.js$/, '.cjs'), cjsContent);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
if (json.length > 0) {
|
|
82
|
-
const newContent = JSON.stringify(data, null, 2);
|
|
83
|
-
for (const jsonFile of json) {
|
|
84
|
-
if (jsonFile.endsWith('.json')) {
|
|
85
|
-
if (!name) {
|
|
86
|
-
const filepath = jsonFile;
|
|
87
|
-
const folderPath = path.dirname(filepath);
|
|
88
|
-
fs.mkdirSync(folderPath, { recursive: true });
|
|
89
|
-
fs.writeFileSync(filepath, newContent);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
if (name) {
|
|
94
|
-
const filepath = `${jsonFile}/${name}.json`;
|
|
95
|
-
const folderPath = path.dirname(filepath);
|
|
96
|
-
fs.mkdirSync(folderPath, { recursive: true });
|
|
97
|
-
fs.writeFileSync(filepath, newContent);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (!name) {
|
|
103
|
-
if (tsm.length > 0) {
|
|
104
|
-
let newContent = '';
|
|
105
|
-
for (const key of Object.keys(data)) {
|
|
106
|
-
newContent += `export const ${key} = ${JSON.stringify(data[key], null, 2)} as const;`;
|
|
107
|
-
}
|
|
108
|
-
for (const tsFile of tsm) {
|
|
109
|
-
const filepath = tsFile;
|
|
110
|
-
const folderPath = path.dirname(filepath);
|
|
111
|
-
fs.mkdirSync(folderPath, { recursive: true });
|
|
112
|
-
fs.writeFileSync(filepath, newContent);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
if (jsm.length > 0) {
|
|
116
|
-
let newContent = '';
|
|
117
|
-
for (const key of Object.keys(data)) {
|
|
118
|
-
newContent += `export const ${key} = /** @type {const} **/ (${JSON.stringify(data[key], null, 2)});`;
|
|
119
|
-
}
|
|
120
|
-
for (const jsFile of jsm) {
|
|
121
|
-
const filepath = jsFile;
|
|
122
|
-
const folderPath = path.dirname(filepath);
|
|
123
|
-
fs.mkdirSync(folderPath, { recursive: true });
|
|
124
|
-
fs.writeFileSync(filepath, newContent);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
// TODO add docgen command ?
|
|
130
|
-
// task("docgen").setAction(async (args, hre, runSuper): Promise<any> => {
|
|
131
|
-
const runScriptWithHardhat = async (args, hre) => {
|
|
132
|
-
// let previousArtifacts: {[name: string]: any} = {};
|
|
133
|
-
// try {
|
|
134
|
-
// previousArtifacts = JSON.parse(fs.readFileSync('./generated/_artifacts.json', 'utf-8'));
|
|
135
|
-
// } catch {}
|
|
136
|
-
// const allArtifacts: {[name: string]: any} = previousArtifacts;
|
|
137
|
-
const allArtifacts = {};
|
|
138
|
-
const shortNameDict = {};
|
|
139
|
-
// for (const key of Object.keys(allArtifacts)) {
|
|
140
|
-
// if (!key.indexOf('/')) {
|
|
141
|
-
// shortNameDict[key] = true;
|
|
142
|
-
// }
|
|
143
|
-
// }
|
|
144
|
-
const compilationResult = await hre.tasks.getTask('compile').run();
|
|
145
|
-
console.log(compilationResult);
|
|
146
|
-
// for (const artifact of artifactResult.artifactsEmittedPerFile) {
|
|
147
|
-
// const filepath = `./artifacts/${artifact.file.sourceName}/${artifact.artifactsEmitted[0]}.json`;
|
|
148
|
-
// if (fs.existsSync(filepath)) {
|
|
149
|
-
// for (let i = 0; i < artifact.artifactsEmitted.length; i++) {
|
|
150
|
-
// const shortName = artifact.artifactsEmitted[i];
|
|
151
|
-
// const content = fs.readFileSync(filepath, 'utf-8');
|
|
152
|
-
// const parsed = JSON.parse(content);
|
|
153
|
-
// const debugFilepath = filepath.replace('.json', '.dbg.json');
|
|
154
|
-
// const debugContent = fs.readFileSync(debugFilepath, 'utf-8');
|
|
155
|
-
// const parsedDebug: {_format: string; buildInfo: string} = JSON.parse(debugContent);
|
|
156
|
-
// const buildInfoFilepath = path.join(path.dirname(path.resolve(debugFilepath)), parsedDebug.buildInfo);
|
|
157
|
-
// const buildInfoContent = fs.readFileSync(buildInfoFilepath, 'utf-8');
|
|
158
|
-
// const parsedBuildInfo = JSON.parse(buildInfoContent);
|
|
159
|
-
// const solidityOutput = parsedBuildInfo.output.contracts[artifact.file.sourceName][shortName];
|
|
160
|
-
// const artifactObject = {...parsed, ...solidityOutput};
|
|
161
|
-
// const fullName = `${artifact.file.sourceName}/${shortName}`;
|
|
162
|
-
// allArtifacts[fullName] = artifactObject;
|
|
163
|
-
// if (shortNameDict[shortName]) {
|
|
164
|
-
// delete allArtifacts[shortName];
|
|
165
|
-
// } else {
|
|
166
|
-
// allArtifacts[shortName] = artifactObject;
|
|
167
|
-
// shortNameDict[shortName] = true;
|
|
168
|
-
// }
|
|
169
|
-
// }
|
|
170
|
-
// } else {
|
|
171
|
-
// // this can happen for solidity file without contract exported, just error or types for example
|
|
172
|
-
// // throw new Error(`no artifact at ${filepath}`);
|
|
173
|
-
// }
|
|
174
|
-
// }
|
|
175
|
-
console.log(...hre.config.paths.sources.solidity);
|
|
176
|
-
// const generationConfig = hre.config.generateArtifacts;
|
|
177
|
-
const generationConfig = {
|
|
178
|
-
ts: ['./generated/artifacts.ts'],
|
|
179
|
-
js: [],
|
|
180
|
-
json: [],
|
|
181
|
-
tsm: [],
|
|
182
|
-
jsm: [],
|
|
183
|
-
directories: [...hre.config.paths.sources.solidity],
|
|
184
|
-
};
|
|
185
|
-
const files = [];
|
|
186
|
-
const directories = generationConfig.directories.map((dir) => path.relative('.', dir));
|
|
187
|
-
console.log({ directories });
|
|
188
|
-
for (const directory of directories) {
|
|
189
|
-
const filesToAdd = traverse(`./artifacts/${directory}`, [], './artifacts', (name) => name != 'build-info');
|
|
190
|
-
files.push(...filesToAdd);
|
|
191
|
-
}
|
|
192
|
-
for (const file of files) {
|
|
193
|
-
if (file.directory || !file.path.endsWith('.json')) {
|
|
194
|
-
continue;
|
|
195
|
-
}
|
|
196
|
-
const filename = path.basename(file.path);
|
|
197
|
-
const dirname = path.dirname(file.relativePath);
|
|
198
|
-
// const namePath = dirname.replace('.sol', '');
|
|
199
|
-
const contractName = filename.replace('.json', '');
|
|
200
|
-
// const shortName = artifact.artifactsEmitted[i];
|
|
201
|
-
console.log({ path: file.path });
|
|
202
|
-
const content = fs.readFileSync(file.path, 'utf-8');
|
|
203
|
-
const parsed = JSON.parse(content);
|
|
204
|
-
// TODO read config for artifacts folder
|
|
205
|
-
const buildInfoFilepath = path.join('artifacts', 'build-info', `${parsed.buildInfoId}.output.json`);
|
|
206
|
-
console.log({ buildInfoFilepath });
|
|
207
|
-
const backupBuildInfoFilepath = path.join('./generated', buildInfoFilepath.slice(buildInfoFilepath.indexOf('/', 1)));
|
|
208
|
-
let buildInfoFilepathToUse = buildInfoFilepath;
|
|
209
|
-
if (!fs.existsSync(buildInfoFilepathToUse)) {
|
|
210
|
-
buildInfoFilepathToUse = backupBuildInfoFilepath;
|
|
211
|
-
}
|
|
212
|
-
if (fs.existsSync(buildInfoFilepathToUse)) {
|
|
213
|
-
const buildInfoContent = fs.readFileSync(buildInfoFilepathToUse, 'utf-8');
|
|
214
|
-
if (buildInfoFilepathToUse !== backupBuildInfoFilepath) {
|
|
215
|
-
fs.mkdirSync(path.dirname(backupBuildInfoFilepath), { recursive: true });
|
|
216
|
-
fs.writeFileSync(backupBuildInfoFilepath, buildInfoContent);
|
|
217
|
-
}
|
|
218
|
-
const parsedBuildInfo = JSON.parse(buildInfoContent);
|
|
219
|
-
const solidityOutput = parsedBuildInfo.output.contracts[dirname][contractName];
|
|
220
|
-
const artifactObject = { ...parsed, ...solidityOutput };
|
|
221
|
-
const fullName = `${dirname}/${contractName}`;
|
|
222
|
-
allArtifacts[fullName] = artifactObject;
|
|
223
|
-
if (shortNameDict[contractName]) {
|
|
224
|
-
delete allArtifacts[contractName];
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
allArtifacts[contractName] = artifactObject;
|
|
228
|
-
shortNameDict[contractName] = true;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
for (const key of Object.keys(allArtifacts)) {
|
|
233
|
-
if (key.indexOf('/') >= 0) {
|
|
234
|
-
const split = key.split('/');
|
|
235
|
-
if (split.length > 1) {
|
|
236
|
-
const shortName = split[split.length - 1];
|
|
237
|
-
if (allArtifacts[shortName]) {
|
|
238
|
-
delete allArtifacts[key];
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
for (const key of Object.keys(allArtifacts)) {
|
|
244
|
-
const artifact = allArtifacts[key];
|
|
245
|
-
writeFiles(key, artifact, generationConfig);
|
|
246
|
-
}
|
|
247
|
-
// const json = hre.config.generateArtifacts.json || [];
|
|
248
|
-
// json.push('./generated/_artifacts.json');
|
|
249
|
-
// writeFiles(undefined, allArtifacts, {...hre.config.generateArtifacts, json: json});
|
|
250
|
-
writeFiles(undefined, allArtifacts, generationConfig);
|
|
251
|
-
return compilationResult;
|
|
252
|
-
};
|
|
253
|
-
export default runScriptWithHardhat;
|
|
254
|
-
//# sourceMappingURL=compile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../../src/tasks/compile.ts"],"names":[],"mappings":"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"}
|