hardhat-external-artifacts 0.0.1 → 0.0.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/README.md +53 -11
- package/dist/artifacts/loader.d.ts.map +1 -1
- package/dist/artifacts/loader.js +245 -1
- package/dist/artifacts/loader.js.map +1 -1
- package/dist/artifacts/types.d.ts +13 -1
- package/dist/artifacts/types.d.ts.map +1 -1
- package/dist/hooks/config.d.ts.map +1 -1
- package/dist/hooks/config.js +1 -0
- package/dist/hooks/config.js.map +1 -1
- package/dist/hooks/network.d.ts.map +1 -1
- package/dist/hooks/network.js +2 -1
- package/dist/hooks/network.js.map +1 -1
- package/package.json +1 -1
- package/src/artifacts/loader.ts +300 -1
- package/src/artifacts/types.ts +14 -1
- package/src/hooks/config.ts +1 -0
- package/src/hooks/network.ts +11 -8
package/README.md
CHANGED
|
@@ -16,14 +16,15 @@ yarn add hardhat-external-artifacts
|
|
|
16
16
|
|
|
17
17
|
## Usage
|
|
18
18
|
|
|
19
|
-
Import the plugin in your Hardhat configuration file:
|
|
19
|
+
Import the plugin and add it to the `plugins` array in your Hardhat configuration file:
|
|
20
20
|
|
|
21
21
|
```typescript
|
|
22
22
|
// hardhat.config.ts
|
|
23
23
|
import type {HardhatUserConfig} from 'hardhat/config';
|
|
24
|
-
import 'hardhat-external-artifacts';
|
|
24
|
+
import HardhatExternalArtifactsPlugin from 'hardhat-external-artifacts';
|
|
25
25
|
|
|
26
26
|
const config: HardhatUserConfig = {
|
|
27
|
+
plugins: [HardhatExternalArtifactsPlugin],
|
|
27
28
|
solidity: '0.8.20',
|
|
28
29
|
externalArtifacts: {
|
|
29
30
|
// Load specific artifact files
|
|
@@ -41,6 +42,44 @@ const config: HardhatUserConfig = {
|
|
|
41
42
|
export default config;
|
|
42
43
|
```
|
|
43
44
|
|
|
45
|
+
### Loading from npm Packages
|
|
46
|
+
|
|
47
|
+
You can load artifacts directly from npm packages using the `modules` option. This uses Node.js module resolution, supporting both package exports and direct paths:
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// hardhat.config.ts
|
|
51
|
+
import type {HardhatUserConfig} from 'hardhat/config';
|
|
52
|
+
import HardhatExternalArtifactsPlugin from 'hardhat-external-artifacts';
|
|
53
|
+
|
|
54
|
+
const config: HardhatUserConfig = {
|
|
55
|
+
plugins: [HardhatExternalArtifactsPlugin],
|
|
56
|
+
solidity: '0.8.20',
|
|
57
|
+
externalArtifacts: {
|
|
58
|
+
// Load from npm packages via module resolution
|
|
59
|
+
modules: [
|
|
60
|
+
'@my-org/contracts/artifacts', // Uses package.json "exports"
|
|
61
|
+
'some-package/dist/artifacts', // Direct path in package
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export default config;
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Note:** The `modules` option differs from `paths` in that it resolves module specifiers from `node_modules` using Node.js resolution, respecting the package's `exports` field. This is useful when a package explicitly exports its artifacts folder.
|
|
70
|
+
|
|
71
|
+
For example, if a package has:
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"name": "@my-org/contracts",
|
|
75
|
+
"exports": {
|
|
76
|
+
"./artifacts": "./dist/artifacts"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Then using `modules: ['@my-org/contracts/artifacts']` will correctly resolve to the exported path.
|
|
82
|
+
|
|
44
83
|
### Using a Resolver Function
|
|
45
84
|
|
|
46
85
|
For more dynamic artifact loading, you can use a resolver function:
|
|
@@ -48,9 +87,10 @@ For more dynamic artifact loading, you can use a resolver function:
|
|
|
48
87
|
```typescript
|
|
49
88
|
// hardhat.config.ts
|
|
50
89
|
import type {HardhatUserConfig} from 'hardhat/config';
|
|
51
|
-
import 'hardhat-external-artifacts';
|
|
90
|
+
import HardhatExternalArtifactsPlugin from 'hardhat-external-artifacts';
|
|
52
91
|
|
|
53
92
|
const config: HardhatUserConfig = {
|
|
93
|
+
plugins: [HardhatExternalArtifactsPlugin],
|
|
54
94
|
solidity: '0.8.20',
|
|
55
95
|
externalArtifacts: {
|
|
56
96
|
resolver: async () => {
|
|
@@ -81,10 +121,11 @@ You can use both paths and resolver together:
|
|
|
81
121
|
```typescript
|
|
82
122
|
// hardhat.config.ts
|
|
83
123
|
import type {HardhatUserConfig} from 'hardhat/config';
|
|
84
|
-
import 'hardhat-external-artifacts';
|
|
124
|
+
import HardhatExternalArtifactsPlugin from 'hardhat-external-artifacts';
|
|
85
125
|
import {loadDefiProtocolArtifacts} from './scripts/load-defi';
|
|
86
126
|
|
|
87
127
|
const config: HardhatUserConfig = {
|
|
128
|
+
plugins: [HardhatExternalArtifactsPlugin],
|
|
88
129
|
solidity: '0.8.20',
|
|
89
130
|
externalArtifacts: {
|
|
90
131
|
// Load from local directory
|
|
@@ -106,13 +147,14 @@ export default config;
|
|
|
106
147
|
|
|
107
148
|
## Configuration Options
|
|
108
149
|
|
|
109
|
-
| Option | Type | Default | Description
|
|
110
|
-
| ------------------------ | ----------------------------------- | ----------- |
|
|
111
|
-
| `paths` | `string[]` | `[]` | Paths to artifact files or directories
|
|
112
|
-
| `
|
|
113
|
-
| `
|
|
114
|
-
| `
|
|
115
|
-
| `
|
|
150
|
+
| Option | Type | Default | Description |
|
|
151
|
+
| ------------------------ | ----------------------------------- | ----------- | -------------------------------------------------------- |
|
|
152
|
+
| `paths` | `string[]` | `[]` | Paths to artifact files or directories (relative/absolute) |
|
|
153
|
+
| `modules` | `string[]` | `[]` | Module specifiers to resolve from node_modules |
|
|
154
|
+
| `resolver` | `() => Promise<ExternalArtifact[]>` | `undefined` | Function that returns artifacts dynamically |
|
|
155
|
+
| `solcVersion` | `string` | `"0.8.20"` | Solc version for synthetic compilations |
|
|
156
|
+
| `warnOnInvalidArtifacts` | `boolean` | `true` | Whether to log warnings for malformed artifacts |
|
|
157
|
+
| `debug` | `boolean` | `false` | Enable debug logging for troubleshooting |
|
|
116
158
|
|
|
117
159
|
## Artifact Format
|
|
118
160
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/artifacts/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,gBAAgB,EAEhB,uBAAuB,EACvB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/artifacts/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,gBAAgB,EAEhB,uBAAuB,EACvB,MAAM,YAAY,CAAC;AAuBpB,qBAAa,cAAc;;gBAId,MAAM,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM;IAK1D,OAAO,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;CA0Z5C"}
|
package/dist/artifacts/loader.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { readJsonFile, getAllFilesMatching, } from '@nomicfoundation/hardhat-utils/fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import fs from 'node:fs/promises';
|
|
4
|
+
import { createRequire } from 'node:module';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
4
6
|
export class ArtifactLoader {
|
|
5
7
|
#config;
|
|
6
8
|
#projectRoot;
|
|
@@ -10,13 +12,22 @@ export class ArtifactLoader {
|
|
|
10
12
|
}
|
|
11
13
|
async loadAll() {
|
|
12
14
|
const artifacts = [];
|
|
13
|
-
// Load from paths
|
|
15
|
+
// Load from paths (relative/absolute filesystem paths)
|
|
14
16
|
if (this.#config.paths) {
|
|
15
17
|
for (const pathOrGlob of this.#config.paths) {
|
|
16
18
|
const absolutePath = path.resolve(this.#projectRoot, pathOrGlob);
|
|
17
19
|
artifacts.push(...(await this.#loadFromPath(absolutePath)));
|
|
18
20
|
}
|
|
19
21
|
}
|
|
22
|
+
// Load from modules (node_modules resolution)
|
|
23
|
+
if (this.#config.modules) {
|
|
24
|
+
for (const moduleSpecifier of this.#config.modules) {
|
|
25
|
+
const resolvedPath = await this.#resolveModulePath(moduleSpecifier);
|
|
26
|
+
if (resolvedPath) {
|
|
27
|
+
artifacts.push(...(await this.#loadFromPath(resolvedPath)));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
20
31
|
// Load from resolver function
|
|
21
32
|
if (this.#config.resolver) {
|
|
22
33
|
const resolvedArtifacts = await this.#config.resolver();
|
|
@@ -24,6 +35,239 @@ export class ArtifactLoader {
|
|
|
24
35
|
}
|
|
25
36
|
return artifacts;
|
|
26
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Resolves a module specifier to an absolute filesystem path.
|
|
40
|
+
* Supports package.json "exports" field patterns like "./artifacts/*".
|
|
41
|
+
*
|
|
42
|
+
* @param moduleSpecifier - e.g., "@my-org/contracts/artifacts"
|
|
43
|
+
* @returns The resolved absolute path, or undefined if resolution fails
|
|
44
|
+
*/
|
|
45
|
+
async #resolveModulePath(moduleSpecifier) {
|
|
46
|
+
// Parse the module specifier into package name and subpath
|
|
47
|
+
const { pkgName, subpath } = this.#parseModuleSpecifier(moduleSpecifier);
|
|
48
|
+
try {
|
|
49
|
+
// Find the package directory by locating its package.json
|
|
50
|
+
const { pkgDir, pkgJson } = await this.#findPackage(pkgName);
|
|
51
|
+
if (subpath && pkgJson.exports) {
|
|
52
|
+
// Try to resolve the subpath using the exports field
|
|
53
|
+
const resolvedSubpath = this.#resolveExportsSubpath(pkgJson.exports, `./${subpath}`);
|
|
54
|
+
if (resolvedSubpath) {
|
|
55
|
+
const targetPath = path.join(pkgDir, resolvedSubpath);
|
|
56
|
+
const stat = await fs.stat(targetPath).catch(() => null);
|
|
57
|
+
if (stat) {
|
|
58
|
+
return targetPath;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Fallback: try direct path (for packages without exports or simple cases)
|
|
63
|
+
if (subpath) {
|
|
64
|
+
const targetPath = path.join(pkgDir, subpath);
|
|
65
|
+
const stat = await fs.stat(targetPath).catch(() => null);
|
|
66
|
+
if (stat) {
|
|
67
|
+
return targetPath;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Try using import.meta.resolve for standard module resolution
|
|
71
|
+
try {
|
|
72
|
+
const resolvedUrl = import.meta.resolve(moduleSpecifier, `file://${this.#projectRoot}/`);
|
|
73
|
+
const resolvedPath = fileURLToPath(resolvedUrl);
|
|
74
|
+
const stat = await fs.stat(resolvedPath).catch(() => null);
|
|
75
|
+
if (stat?.isDirectory()) {
|
|
76
|
+
return resolvedPath;
|
|
77
|
+
}
|
|
78
|
+
if (stat?.isFile()) {
|
|
79
|
+
// If it resolved to an index file, return the directory
|
|
80
|
+
const basename = path.basename(resolvedPath);
|
|
81
|
+
if (basename.startsWith('index.')) {
|
|
82
|
+
return path.dirname(resolvedPath);
|
|
83
|
+
}
|
|
84
|
+
return resolvedPath;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// import.meta.resolve failed, continue to error handling
|
|
89
|
+
}
|
|
90
|
+
if (this.#config.warnOnInvalidArtifacts !== false) {
|
|
91
|
+
console.warn(`[hardhat-external-artifacts] Could not resolve module path: ${moduleSpecifier}`);
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
if (this.#config.warnOnInvalidArtifacts !== false) {
|
|
97
|
+
console.warn(`[hardhat-external-artifacts] Failed to resolve module: ${moduleSpecifier}`, error instanceof Error ? error.message : error);
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Find a package's directory and read its package.json.
|
|
104
|
+
* Handles packages with strict exports that don't include ./package.json.
|
|
105
|
+
*/
|
|
106
|
+
async #findPackage(pkgName) {
|
|
107
|
+
const require = createRequire(path.join(this.#projectRoot, 'package.json'));
|
|
108
|
+
// Try method 1: Direct package.json resolution (works for most packages)
|
|
109
|
+
try {
|
|
110
|
+
const pkgJsonPath = require.resolve(`${pkgName}/package.json`);
|
|
111
|
+
const pkgDir = path.dirname(pkgJsonPath);
|
|
112
|
+
const pkgJson = await readJsonFile(pkgJsonPath);
|
|
113
|
+
return { pkgDir, pkgJson };
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Package has strict exports, try alternative methods
|
|
117
|
+
}
|
|
118
|
+
// Try method 2: Resolve main entry and walk up to find package.json
|
|
119
|
+
try {
|
|
120
|
+
const mainEntry = require.resolve(pkgName);
|
|
121
|
+
let dir = path.dirname(mainEntry);
|
|
122
|
+
// Walk up the directory tree to find package.json
|
|
123
|
+
while (dir !== path.dirname(dir)) { // Stop at filesystem root
|
|
124
|
+
const pkgJsonPath = path.join(dir, 'package.json');
|
|
125
|
+
try {
|
|
126
|
+
const pkgJson = await readJsonFile(pkgJsonPath);
|
|
127
|
+
// Verify this is the correct package
|
|
128
|
+
if (pkgJson.name === pkgName) {
|
|
129
|
+
return { pkgDir: dir, pkgJson };
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// No package.json here, continue walking up
|
|
134
|
+
}
|
|
135
|
+
dir = path.dirname(dir);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// Main entry resolution failed
|
|
140
|
+
}
|
|
141
|
+
// Try method 3: Search node_modules directly
|
|
142
|
+
const nodeModulesPath = path.join(this.#projectRoot, 'node_modules', ...pkgName.split('/'));
|
|
143
|
+
const pkgJsonPath = path.join(nodeModulesPath, 'package.json');
|
|
144
|
+
try {
|
|
145
|
+
const stat = await fs.stat(pkgJsonPath);
|
|
146
|
+
if (stat.isFile()) {
|
|
147
|
+
const pkgJson = await readJsonFile(pkgJsonPath);
|
|
148
|
+
return { pkgDir: nodeModulesPath, pkgJson };
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// Not found in direct node_modules
|
|
153
|
+
}
|
|
154
|
+
throw new Error(`Could not find package: ${pkgName}`);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Parse a module specifier into package name and subpath.
|
|
158
|
+
* Handles scoped packages (e.g., "@scope/pkg/subpath") and regular packages.
|
|
159
|
+
*/
|
|
160
|
+
#parseModuleSpecifier(specifier) {
|
|
161
|
+
const parts = specifier.split('/');
|
|
162
|
+
const isScoped = specifier.startsWith('@');
|
|
163
|
+
if (isScoped) {
|
|
164
|
+
return {
|
|
165
|
+
pkgName: parts.slice(0, 2).join('/'),
|
|
166
|
+
subpath: parts.slice(2).join('/'),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
pkgName: parts[0],
|
|
171
|
+
subpath: parts.slice(1).join('/'),
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Resolve a subpath against a package.json exports field.
|
|
176
|
+
* Handles subpath patterns like "./artifacts/*": "./dist/artifacts/*"
|
|
177
|
+
*
|
|
178
|
+
* @param exports - The exports field from package.json
|
|
179
|
+
* @param subpath - The subpath to resolve (e.g., "./artifacts")
|
|
180
|
+
* @returns The resolved path relative to the package root, or undefined
|
|
181
|
+
*/
|
|
182
|
+
#resolveExportsSubpath(exports, subpath) {
|
|
183
|
+
if (exports === null) {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
if (typeof exports === 'string') {
|
|
187
|
+
// Simple string export - only matches if subpath is "."
|
|
188
|
+
return subpath === '.' ? exports : undefined;
|
|
189
|
+
}
|
|
190
|
+
if (typeof exports !== 'object') {
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
// Check for exact match first
|
|
194
|
+
if (subpath in exports) {
|
|
195
|
+
return this.#resolveExportTarget(exports[subpath]);
|
|
196
|
+
}
|
|
197
|
+
// Check for pattern matches (e.g., "./artifacts/*")
|
|
198
|
+
for (const [pattern, target] of Object.entries(exports)) {
|
|
199
|
+
if (pattern.includes('*')) {
|
|
200
|
+
const resolved = this.#matchExportPattern(pattern, target, subpath);
|
|
201
|
+
if (resolved) {
|
|
202
|
+
return resolved;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Check for directory patterns (e.g., "./artifacts/" matches "./artifacts/anything")
|
|
207
|
+
for (const [pattern, target] of Object.entries(exports)) {
|
|
208
|
+
if (pattern.endsWith('/') && subpath.startsWith(pattern)) {
|
|
209
|
+
const suffix = subpath.slice(pattern.length);
|
|
210
|
+
const resolvedTarget = this.#resolveExportTarget(target);
|
|
211
|
+
if (resolvedTarget) {
|
|
212
|
+
return resolvedTarget.endsWith('/')
|
|
213
|
+
? resolvedTarget + suffix
|
|
214
|
+
: resolvedTarget + '/' + suffix;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Match a subpath against an export pattern with wildcards.
|
|
222
|
+
* E.g., pattern "./artifacts/*" with target "./dist/*" and subpath "./artifacts"
|
|
223
|
+
* would return "./dist"
|
|
224
|
+
*/
|
|
225
|
+
#matchExportPattern(pattern, target, subpath) {
|
|
226
|
+
// Handle pattern like "./artifacts/*" matching "./artifacts" (the directory itself)
|
|
227
|
+
const patternBase = pattern.replace('/*', '');
|
|
228
|
+
if (subpath === patternBase) {
|
|
229
|
+
// User wants the base directory, not a specific file
|
|
230
|
+
// Resolve to the target base directory
|
|
231
|
+
const resolvedTarget = this.#resolveExportTarget(target);
|
|
232
|
+
if (resolvedTarget) {
|
|
233
|
+
return resolvedTarget.replace('/*', '').replace(/\*$/, '');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Handle pattern matching for files within the directory
|
|
237
|
+
if (subpath.startsWith(patternBase + '/')) {
|
|
238
|
+
const wildcardValue = subpath.slice(patternBase.length + 1);
|
|
239
|
+
const resolvedTarget = this.#resolveExportTarget(target);
|
|
240
|
+
if (resolvedTarget && resolvedTarget.includes('*')) {
|
|
241
|
+
return resolvedTarget.replace('*', wildcardValue);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Resolve an export target, handling conditional exports.
|
|
248
|
+
*/
|
|
249
|
+
#resolveExportTarget(target) {
|
|
250
|
+
if (target === null) {
|
|
251
|
+
return undefined;
|
|
252
|
+
}
|
|
253
|
+
if (typeof target === 'string') {
|
|
254
|
+
return target;
|
|
255
|
+
}
|
|
256
|
+
if (typeof target !== 'object') {
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
// Handle conditional exports - prefer 'import' for ESM, then 'default'
|
|
260
|
+
const conditions = ['import', 'default', 'node', 'require'];
|
|
261
|
+
for (const condition of conditions) {
|
|
262
|
+
if (condition in target) {
|
|
263
|
+
const result = this.#resolveExportTarget(target[condition]);
|
|
264
|
+
if (result) {
|
|
265
|
+
return result;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return undefined;
|
|
270
|
+
}
|
|
27
271
|
async #loadFromPath(absolutePath) {
|
|
28
272
|
let stat;
|
|
29
273
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/artifacts/loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/artifacts/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,11 +81,23 @@ export type ArtifactResolver = () => Promise<ExternalArtifact[]> | ExternalArtif
|
|
|
81
81
|
*/
|
|
82
82
|
export interface ExternalArtifactsConfig {
|
|
83
83
|
/**
|
|
84
|
-
* Paths to artifact files or directories
|
|
84
|
+
* Paths to artifact files or directories (relative to project root)
|
|
85
85
|
* - File path: loads single artifact JSON
|
|
86
86
|
* - Directory path: loads all .json files recursively
|
|
87
87
|
*/
|
|
88
88
|
paths?: string[];
|
|
89
|
+
/**
|
|
90
|
+
* Module specifiers to resolve from node_modules
|
|
91
|
+
* Uses Node.js module resolution to find exported artifact directories.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* // If @my-org/contracts exports "./artifacts" in package.json:
|
|
96
|
+
* // "exports": { "./artifacts": "./dist/artifacts" }
|
|
97
|
+
* modules: ['@my-org/contracts/artifacts']
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
modules?: string[];
|
|
89
101
|
/**
|
|
90
102
|
* Function that resolves and returns artifacts dynamically
|
|
91
103
|
* Useful for loading from APIs, databases, or complex logic
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/artifacts/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IAEnB,mBAAmB;IACnB,GAAG,EAAE,SAAS,GAAG,EAAE,CAAC;IAEpB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IAEjB,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IAEzB,sDAAsD;IACtD,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,oDAAoD;IACpD,sBAAsB,CAAC,EAAE,cAAc,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACrD,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qEAAqE;IACrE,GAAG,CAAC,EAAE;QACL,QAAQ,EAAE;YACT,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;YAClB,cAAc,EAAE,cAAc,CAAC;YAC/B,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC;YACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SACxC,CAAC;QACF,gBAAgB,EAAE;YACjB,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;YAClB,cAAc,EAAE,cAAc,CAAC;YAC/B,mBAAmB,CAAC,EAAE,MAAM,CAC3B,MAAM,EACN,KAAK,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAC,CAAC,CACtC,CAAC;YACF,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC;YACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SACxC,CAAC;QACF,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,YAAY,CAAC,EAAE,GAAG,CAAC;KACnB,CAAC;IAEF,8BAA8B;IAC9B,MAAM,CAAC,EAAE,GAAG,CAAC;IAEb,yBAAyB;IACzB,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd,qBAAqB;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC9B,CAAC,UAAU,EAAE,MAAM,GAAG;QACrB,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAC,CAAC,CAAC;KAC9D,CAAC;CACF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,gBAAgB,GACxB,QAAQ,IAAI,YAAY,CAE1B;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAC5B,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAC3B,gBAAgB,EAAE,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAE5B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/artifacts/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IAEnB,mBAAmB;IACnB,GAAG,EAAE,SAAS,GAAG,EAAE,CAAC;IAEpB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IAEjB,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IAEzB,sDAAsD;IACtD,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,oDAAoD;IACpD,sBAAsB,CAAC,EAAE,cAAc,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACrD,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qEAAqE;IACrE,GAAG,CAAC,EAAE;QACL,QAAQ,EAAE;YACT,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;YAClB,cAAc,EAAE,cAAc,CAAC;YAC/B,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC;YACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SACxC,CAAC;QACF,gBAAgB,EAAE;YACjB,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;YAClB,cAAc,EAAE,cAAc,CAAC;YAC/B,mBAAmB,CAAC,EAAE,MAAM,CAC3B,MAAM,EACN,KAAK,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAC,CAAC,CACtC,CAAC;YACF,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC;YACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SACxC,CAAC;QACF,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,YAAY,CAAC,EAAE,GAAG,CAAC;KACnB,CAAC;IAEF,8BAA8B;IAC9B,MAAM,CAAC,EAAE,GAAG,CAAC;IAEb,yBAAyB;IACzB,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd,qBAAqB;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC9B,CAAC,UAAU,EAAE,MAAM,GAAG;QACrB,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAC,CAAC,CAAC;KAC9D,CAAC;CACF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,gBAAgB,GACxB,QAAQ,IAAI,YAAY,CAE1B;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAC5B,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAC3B,gBAAgB,EAAE,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAE5B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/hooks/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;8BAG5B,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAAtD,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/hooks/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;8BAG5B,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAAtD,wBAwCE"}
|
package/dist/hooks/config.js
CHANGED
|
@@ -7,6 +7,7 @@ export default async () => {
|
|
|
7
7
|
// Apply defaults
|
|
8
8
|
const externalArtifacts = {
|
|
9
9
|
paths: externalArtifactsUserConfig?.paths ?? [],
|
|
10
|
+
modules: externalArtifactsUserConfig?.modules ?? [],
|
|
10
11
|
resolver: externalArtifactsUserConfig?.resolver,
|
|
11
12
|
solcVersion: externalArtifactsUserConfig?.solcVersion ?? '0.8.20',
|
|
12
13
|
warnOnInvalidArtifacts: externalArtifactsUserConfig?.warnOnInvalidArtifacts ?? true,
|
package/dist/hooks/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/hooks/config.ts"],"names":[],"mappings":"AAGA,eAAe,KAAK,IAAmC,EAAE;IACxD,MAAM,QAAQ,GAAyB;QACtC,iBAAiB,EAAE,KAAK,EACvB,UAAU,EACV,4BAA4B,EAC5B,IAAI,EACH,EAAE;YACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAChC,UAAU,EACV,4BAA4B,CAC5B,CAAC;YAEF,uCAAuC;YACvC,MAAM,2BAA2B,GAAG,UAAU,CAAC,iBAEnC,CAAC;YAEb,iBAAiB;YACjB,MAAM,iBAAiB,GAInB;gBACH,KAAK,EAAE,2BAA2B,EAAE,KAAK,IAAI,EAAE;gBAC/C,QAAQ,EAAE,2BAA2B,EAAE,QAAQ;gBAC/C,WAAW,EAAE,2BAA2B,EAAE,WAAW,IAAI,QAAQ;gBACjE,sBAAsB,EACrB,2BAA2B,EAAE,sBAAsB,IAAI,IAAI;gBAC5D,KAAK,EAAE,2BAA2B,EAAE,KAAK,IAAI,KAAK;aAClD,CAAC;YAEF,OAAO;gBACN,GAAG,cAAc;gBACjB,iBAAiB;aACjB,CAAC;QACH,CAAC;KACD,CAAC;IAEF,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/hooks/config.ts"],"names":[],"mappings":"AAGA,eAAe,KAAK,IAAmC,EAAE;IACxD,MAAM,QAAQ,GAAyB;QACtC,iBAAiB,EAAE,KAAK,EACvB,UAAU,EACV,4BAA4B,EAC5B,IAAI,EACH,EAAE;YACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAChC,UAAU,EACV,4BAA4B,CAC5B,CAAC;YAEF,uCAAuC;YACvC,MAAM,2BAA2B,GAAG,UAAU,CAAC,iBAEnC,CAAC;YAEb,iBAAiB;YACjB,MAAM,iBAAiB,GAInB;gBACH,KAAK,EAAE,2BAA2B,EAAE,KAAK,IAAI,EAAE;gBAC/C,OAAO,EAAE,2BAA2B,EAAE,OAAO,IAAI,EAAE;gBACnD,QAAQ,EAAE,2BAA2B,EAAE,QAAQ;gBAC/C,WAAW,EAAE,2BAA2B,EAAE,WAAW,IAAI,QAAQ;gBACjE,sBAAsB,EACrB,2BAA2B,EAAE,sBAAsB,IAAI,IAAI;gBAC5D,KAAK,EAAE,2BAA2B,EAAE,KAAK,IAAI,KAAK;aAClD,CAAC;YAEF,OAAO;gBACN,GAAG,cAAc;gBACjB,iBAAiB;aACjB,CAAC;QACH,CAAC;KACD,CAAC;IAEF,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/hooks/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAc,MAAM,qBAAqB,CAAC;8BAS1C,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAAvD,
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/hooks/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAc,MAAM,qBAAqB,CAAC;8BAS1C,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAAvD,wBAyHE"}
|
package/dist/hooks/network.js
CHANGED
|
@@ -12,7 +12,8 @@ export default async () => {
|
|
|
12
12
|
}
|
|
13
13
|
const config = context.config.externalArtifacts;
|
|
14
14
|
// Check if config exists and there's anything to load
|
|
15
|
-
if (!config ||
|
|
15
|
+
if (!config ||
|
|
16
|
+
(!config.modules?.length && !config.paths?.length && !config.resolver)) {
|
|
16
17
|
return connection;
|
|
17
18
|
}
|
|
18
19
|
const debug = config.debug ?? false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/hooks/network.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAC,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACN,uBAAuB,GAEvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAErD,eAAe,KAAK,IAAoC,EAAE;IACzD,MAAM,QAAQ,GAA0B;QACvC,aAAa,EAAE,KAAK,EACnB,OAAoB,EACpB,IAE2C,EACF,EAAE;YAC3C,2DAA2D;YAC3D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;YAEvC,2DAA2D;YAC3D,IAAI,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACvD,OAAO,UAAU,CAAC;YACnB,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAEhD,sDAAsD;YACtD,
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/hooks/network.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/artifacts/loader.ts
CHANGED
|
@@ -9,6 +9,21 @@ import {
|
|
|
9
9
|
} from '@nomicfoundation/hardhat-utils/fs';
|
|
10
10
|
import path from 'node:path';
|
|
11
11
|
import fs from 'node:fs/promises';
|
|
12
|
+
import {createRequire} from 'node:module';
|
|
13
|
+
import {fileURLToPath} from 'node:url';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Package.json exports field types
|
|
17
|
+
*/
|
|
18
|
+
type ExportsField = string | null | ExportsConditions | ExportsMap;
|
|
19
|
+
|
|
20
|
+
interface ExportsConditions {
|
|
21
|
+
[condition: string]: ExportsField;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface ExportsMap {
|
|
25
|
+
[subpath: string]: ExportsField;
|
|
26
|
+
}
|
|
12
27
|
|
|
13
28
|
export class ArtifactLoader {
|
|
14
29
|
readonly #config: ExternalArtifactsConfig;
|
|
@@ -22,7 +37,7 @@ export class ArtifactLoader {
|
|
|
22
37
|
async loadAll(): Promise<ExternalArtifact[]> {
|
|
23
38
|
const artifacts: ExternalArtifact[] = [];
|
|
24
39
|
|
|
25
|
-
// Load from paths
|
|
40
|
+
// Load from paths (relative/absolute filesystem paths)
|
|
26
41
|
if (this.#config.paths) {
|
|
27
42
|
for (const pathOrGlob of this.#config.paths) {
|
|
28
43
|
const absolutePath = path.resolve(this.#projectRoot, pathOrGlob);
|
|
@@ -30,6 +45,16 @@ export class ArtifactLoader {
|
|
|
30
45
|
}
|
|
31
46
|
}
|
|
32
47
|
|
|
48
|
+
// Load from modules (node_modules resolution)
|
|
49
|
+
if (this.#config.modules) {
|
|
50
|
+
for (const moduleSpecifier of this.#config.modules) {
|
|
51
|
+
const resolvedPath = await this.#resolveModulePath(moduleSpecifier);
|
|
52
|
+
if (resolvedPath) {
|
|
53
|
+
artifacts.push(...(await this.#loadFromPath(resolvedPath)));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
33
58
|
// Load from resolver function
|
|
34
59
|
if (this.#config.resolver) {
|
|
35
60
|
const resolvedArtifacts = await this.#config.resolver();
|
|
@@ -39,6 +64,280 @@ export class ArtifactLoader {
|
|
|
39
64
|
return artifacts;
|
|
40
65
|
}
|
|
41
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Resolves a module specifier to an absolute filesystem path.
|
|
69
|
+
* Supports package.json "exports" field patterns like "./artifacts/*".
|
|
70
|
+
*
|
|
71
|
+
* @param moduleSpecifier - e.g., "@my-org/contracts/artifacts"
|
|
72
|
+
* @returns The resolved absolute path, or undefined if resolution fails
|
|
73
|
+
*/
|
|
74
|
+
async #resolveModulePath(moduleSpecifier: string): Promise<string | undefined> {
|
|
75
|
+
// Parse the module specifier into package name and subpath
|
|
76
|
+
const {pkgName, subpath} = this.#parseModuleSpecifier(moduleSpecifier);
|
|
77
|
+
|
|
78
|
+
try {
|
|
79
|
+
// Find the package directory by locating its package.json
|
|
80
|
+
const {pkgDir, pkgJson} = await this.#findPackage(pkgName);
|
|
81
|
+
|
|
82
|
+
if (subpath && pkgJson.exports) {
|
|
83
|
+
// Try to resolve the subpath using the exports field
|
|
84
|
+
const resolvedSubpath = this.#resolveExportsSubpath(
|
|
85
|
+
pkgJson.exports,
|
|
86
|
+
`./${subpath}`,
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
if (resolvedSubpath) {
|
|
90
|
+
const targetPath = path.join(pkgDir, resolvedSubpath);
|
|
91
|
+
const stat = await fs.stat(targetPath).catch(() => null);
|
|
92
|
+
if (stat) {
|
|
93
|
+
return targetPath;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Fallback: try direct path (for packages without exports or simple cases)
|
|
99
|
+
if (subpath) {
|
|
100
|
+
const targetPath = path.join(pkgDir, subpath);
|
|
101
|
+
const stat = await fs.stat(targetPath).catch(() => null);
|
|
102
|
+
if (stat) {
|
|
103
|
+
return targetPath;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Try using import.meta.resolve for standard module resolution
|
|
108
|
+
try {
|
|
109
|
+
const resolvedUrl = import.meta.resolve(moduleSpecifier, `file://${this.#projectRoot}/`);
|
|
110
|
+
const resolvedPath = fileURLToPath(resolvedUrl);
|
|
111
|
+
const stat = await fs.stat(resolvedPath).catch(() => null);
|
|
112
|
+
|
|
113
|
+
if (stat?.isDirectory()) {
|
|
114
|
+
return resolvedPath;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (stat?.isFile()) {
|
|
118
|
+
// If it resolved to an index file, return the directory
|
|
119
|
+
const basename = path.basename(resolvedPath);
|
|
120
|
+
if (basename.startsWith('index.')) {
|
|
121
|
+
return path.dirname(resolvedPath);
|
|
122
|
+
}
|
|
123
|
+
return resolvedPath;
|
|
124
|
+
}
|
|
125
|
+
} catch {
|
|
126
|
+
// import.meta.resolve failed, continue to error handling
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (this.#config.warnOnInvalidArtifacts !== false) {
|
|
130
|
+
console.warn(
|
|
131
|
+
`[hardhat-external-artifacts] Could not resolve module path: ${moduleSpecifier}`,
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
return undefined;
|
|
135
|
+
|
|
136
|
+
} catch (error) {
|
|
137
|
+
if (this.#config.warnOnInvalidArtifacts !== false) {
|
|
138
|
+
console.warn(
|
|
139
|
+
`[hardhat-external-artifacts] Failed to resolve module: ${moduleSpecifier}`,
|
|
140
|
+
error instanceof Error ? error.message : error,
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Find a package's directory and read its package.json.
|
|
149
|
+
* Handles packages with strict exports that don't include ./package.json.
|
|
150
|
+
*/
|
|
151
|
+
async #findPackage(pkgName: string): Promise<{pkgDir: string; pkgJson: {exports?: ExportsField}}> {
|
|
152
|
+
const require = createRequire(path.join(this.#projectRoot, 'package.json'));
|
|
153
|
+
|
|
154
|
+
// Try method 1: Direct package.json resolution (works for most packages)
|
|
155
|
+
try {
|
|
156
|
+
const pkgJsonPath = require.resolve(`${pkgName}/package.json`);
|
|
157
|
+
const pkgDir = path.dirname(pkgJsonPath);
|
|
158
|
+
const pkgJson = await readJsonFile(pkgJsonPath) as {exports?: ExportsField};
|
|
159
|
+
return {pkgDir, pkgJson};
|
|
160
|
+
} catch {
|
|
161
|
+
// Package has strict exports, try alternative methods
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Try method 2: Resolve main entry and walk up to find package.json
|
|
165
|
+
try {
|
|
166
|
+
const mainEntry = require.resolve(pkgName);
|
|
167
|
+
let dir = path.dirname(mainEntry);
|
|
168
|
+
|
|
169
|
+
// Walk up the directory tree to find package.json
|
|
170
|
+
while (dir !== path.dirname(dir)) { // Stop at filesystem root
|
|
171
|
+
const pkgJsonPath = path.join(dir, 'package.json');
|
|
172
|
+
try {
|
|
173
|
+
const pkgJson = await readJsonFile(pkgJsonPath) as {name?: string; exports?: ExportsField};
|
|
174
|
+
// Verify this is the correct package
|
|
175
|
+
if (pkgJson.name === pkgName) {
|
|
176
|
+
return {pkgDir: dir, pkgJson};
|
|
177
|
+
}
|
|
178
|
+
} catch {
|
|
179
|
+
// No package.json here, continue walking up
|
|
180
|
+
}
|
|
181
|
+
dir = path.dirname(dir);
|
|
182
|
+
}
|
|
183
|
+
} catch {
|
|
184
|
+
// Main entry resolution failed
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Try method 3: Search node_modules directly
|
|
188
|
+
const nodeModulesPath = path.join(this.#projectRoot, 'node_modules', ...pkgName.split('/'));
|
|
189
|
+
const pkgJsonPath = path.join(nodeModulesPath, 'package.json');
|
|
190
|
+
try {
|
|
191
|
+
const stat = await fs.stat(pkgJsonPath);
|
|
192
|
+
if (stat.isFile()) {
|
|
193
|
+
const pkgJson = await readJsonFile(pkgJsonPath) as {exports?: ExportsField};
|
|
194
|
+
return {pkgDir: nodeModulesPath, pkgJson};
|
|
195
|
+
}
|
|
196
|
+
} catch {
|
|
197
|
+
// Not found in direct node_modules
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
throw new Error(`Could not find package: ${pkgName}`);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Parse a module specifier into package name and subpath.
|
|
205
|
+
* Handles scoped packages (e.g., "@scope/pkg/subpath") and regular packages.
|
|
206
|
+
*/
|
|
207
|
+
#parseModuleSpecifier(specifier: string): {pkgName: string; subpath: string} {
|
|
208
|
+
const parts = specifier.split('/');
|
|
209
|
+
const isScoped = specifier.startsWith('@');
|
|
210
|
+
|
|
211
|
+
if (isScoped) {
|
|
212
|
+
return {
|
|
213
|
+
pkgName: parts.slice(0, 2).join('/'),
|
|
214
|
+
subpath: parts.slice(2).join('/'),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return {
|
|
219
|
+
pkgName: parts[0],
|
|
220
|
+
subpath: parts.slice(1).join('/'),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Resolve a subpath against a package.json exports field.
|
|
226
|
+
* Handles subpath patterns like "./artifacts/*": "./dist/artifacts/*"
|
|
227
|
+
*
|
|
228
|
+
* @param exports - The exports field from package.json
|
|
229
|
+
* @param subpath - The subpath to resolve (e.g., "./artifacts")
|
|
230
|
+
* @returns The resolved path relative to the package root, or undefined
|
|
231
|
+
*/
|
|
232
|
+
#resolveExportsSubpath(exports: ExportsField, subpath: string): string | undefined {
|
|
233
|
+
if (exports === null) {
|
|
234
|
+
return undefined;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (typeof exports === 'string') {
|
|
238
|
+
// Simple string export - only matches if subpath is "."
|
|
239
|
+
return subpath === '.' ? exports : undefined;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (typeof exports !== 'object') {
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Check for exact match first
|
|
247
|
+
if (subpath in exports) {
|
|
248
|
+
return this.#resolveExportTarget(exports[subpath]);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Check for pattern matches (e.g., "./artifacts/*")
|
|
252
|
+
for (const [pattern, target] of Object.entries(exports)) {
|
|
253
|
+
if (pattern.includes('*')) {
|
|
254
|
+
const resolved = this.#matchExportPattern(pattern, target, subpath);
|
|
255
|
+
if (resolved) {
|
|
256
|
+
return resolved;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// Check for directory patterns (e.g., "./artifacts/" matches "./artifacts/anything")
|
|
262
|
+
for (const [pattern, target] of Object.entries(exports)) {
|
|
263
|
+
if (pattern.endsWith('/') && subpath.startsWith(pattern)) {
|
|
264
|
+
const suffix = subpath.slice(pattern.length);
|
|
265
|
+
const resolvedTarget = this.#resolveExportTarget(target);
|
|
266
|
+
if (resolvedTarget) {
|
|
267
|
+
return resolvedTarget.endsWith('/')
|
|
268
|
+
? resolvedTarget + suffix
|
|
269
|
+
: resolvedTarget + '/' + suffix;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return undefined;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Match a subpath against an export pattern with wildcards.
|
|
279
|
+
* E.g., pattern "./artifacts/*" with target "./dist/*" and subpath "./artifacts"
|
|
280
|
+
* would return "./dist"
|
|
281
|
+
*/
|
|
282
|
+
#matchExportPattern(
|
|
283
|
+
pattern: string,
|
|
284
|
+
target: ExportsField,
|
|
285
|
+
subpath: string,
|
|
286
|
+
): string | undefined {
|
|
287
|
+
// Handle pattern like "./artifacts/*" matching "./artifacts" (the directory itself)
|
|
288
|
+
const patternBase = pattern.replace('/*', '');
|
|
289
|
+
|
|
290
|
+
if (subpath === patternBase) {
|
|
291
|
+
// User wants the base directory, not a specific file
|
|
292
|
+
// Resolve to the target base directory
|
|
293
|
+
const resolvedTarget = this.#resolveExportTarget(target);
|
|
294
|
+
if (resolvedTarget) {
|
|
295
|
+
return resolvedTarget.replace('/*', '').replace(/\*$/, '');
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// Handle pattern matching for files within the directory
|
|
300
|
+
if (subpath.startsWith(patternBase + '/')) {
|
|
301
|
+
const wildcardValue = subpath.slice(patternBase.length + 1);
|
|
302
|
+
const resolvedTarget = this.#resolveExportTarget(target);
|
|
303
|
+
if (resolvedTarget && resolvedTarget.includes('*')) {
|
|
304
|
+
return resolvedTarget.replace('*', wildcardValue);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return undefined;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Resolve an export target, handling conditional exports.
|
|
313
|
+
*/
|
|
314
|
+
#resolveExportTarget(target: ExportsField): string | undefined {
|
|
315
|
+
if (target === null) {
|
|
316
|
+
return undefined;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
if (typeof target === 'string') {
|
|
320
|
+
return target;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
if (typeof target !== 'object') {
|
|
324
|
+
return undefined;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// Handle conditional exports - prefer 'import' for ESM, then 'default'
|
|
328
|
+
const conditions = ['import', 'default', 'node', 'require'];
|
|
329
|
+
for (const condition of conditions) {
|
|
330
|
+
if (condition in target) {
|
|
331
|
+
const result = this.#resolveExportTarget(target[condition]);
|
|
332
|
+
if (result) {
|
|
333
|
+
return result;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return undefined;
|
|
339
|
+
}
|
|
340
|
+
|
|
42
341
|
async #loadFromPath(absolutePath: string): Promise<ExternalArtifact[]> {
|
|
43
342
|
let stat: Awaited<ReturnType<typeof fs.stat>>;
|
|
44
343
|
|
package/src/artifacts/types.ts
CHANGED
|
@@ -100,12 +100,25 @@ export type ArtifactResolver = () =>
|
|
|
100
100
|
*/
|
|
101
101
|
export interface ExternalArtifactsConfig {
|
|
102
102
|
/**
|
|
103
|
-
* Paths to artifact files or directories
|
|
103
|
+
* Paths to artifact files or directories (relative to project root)
|
|
104
104
|
* - File path: loads single artifact JSON
|
|
105
105
|
* - Directory path: loads all .json files recursively
|
|
106
106
|
*/
|
|
107
107
|
paths?: string[];
|
|
108
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Module specifiers to resolve from node_modules
|
|
111
|
+
* Uses Node.js module resolution to find exported artifact directories.
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```ts
|
|
115
|
+
* // If @my-org/contracts exports "./artifacts" in package.json:
|
|
116
|
+
* // "exports": { "./artifacts": "./dist/artifacts" }
|
|
117
|
+
* modules: ['@my-org/contracts/artifacts']
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
modules?: string[];
|
|
121
|
+
|
|
109
122
|
/**
|
|
110
123
|
* Function that resolves and returns artifacts dynamically
|
|
111
124
|
* Useful for loading from APIs, databases, or complex logic
|
package/src/hooks/config.ts
CHANGED
|
@@ -25,6 +25,7 @@ export default async (): Promise<Partial<ConfigHooks>> => {
|
|
|
25
25
|
resolver?: ExternalArtifactsConfig['resolver'];
|
|
26
26
|
} = {
|
|
27
27
|
paths: externalArtifactsUserConfig?.paths ?? [],
|
|
28
|
+
modules: externalArtifactsUserConfig?.modules ?? [],
|
|
28
29
|
resolver: externalArtifactsUserConfig?.resolver,
|
|
29
30
|
solcVersion: externalArtifactsUserConfig?.solcVersion ?? '0.8.20',
|
|
30
31
|
warnOnInvalidArtifacts:
|
package/src/hooks/network.ts
CHANGED
|
@@ -26,7 +26,10 @@ export default async (): Promise<Partial<NetworkHooks>> => {
|
|
|
26
26
|
const config = context.config.externalArtifacts;
|
|
27
27
|
|
|
28
28
|
// Check if config exists and there's anything to load
|
|
29
|
-
if (
|
|
29
|
+
if (
|
|
30
|
+
!config ||
|
|
31
|
+
(!config.modules?.length && !config.paths?.length && !config.resolver)
|
|
32
|
+
) {
|
|
30
33
|
return connection;
|
|
31
34
|
}
|
|
32
35
|
|
|
@@ -54,13 +57,13 @@ export default async (): Promise<Partial<NetworkHooks>> => {
|
|
|
54
57
|
);
|
|
55
58
|
}
|
|
56
59
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
// Convert to compilation format(s)
|
|
61
|
+
// Rich artifacts with solcInput get their own compilations
|
|
62
|
+
// Simple artifacts get grouped into a synthetic compilation
|
|
63
|
+
const compilations = artifactsToCompilations(
|
|
64
|
+
artifacts,
|
|
65
|
+
config.solcVersion, // Default already set in config.ts
|
|
66
|
+
);
|
|
64
67
|
|
|
65
68
|
log(
|
|
66
69
|
`[hardhat-external-artifacts] Created ${compilations.length} compilation(s)`,
|