diff --git a/packages/codegen/README.md b/packages/codegen/README.md index 4dd36e68..b979221e 100644 --- a/packages/codegen/README.md +++ b/packages/codegen/README.md @@ -118,6 +118,8 @@ Steps: * Update generated watcher's config (`environments/local.toml`) as required +* Update generated codegen config (`codegen-config.yml`) to remove / replace your system's absolute paths + ## Development * `lint` diff --git a/packages/codegen/src/generate-code.ts b/packages/codegen/src/generate-code.ts index d1e9c0b8..1bf675b0 100644 --- a/packages/codegen/src/generate-code.ts +++ b/packages/codegen/src/generate-code.ts @@ -65,7 +65,8 @@ const main = async (): Promise => { }) .argv; - const config = await getConfig(path.resolve(argv['config-file'])); + const configFile = path.resolve(argv['config-file']); + const config = await getConfig(configFile); // Create an array of flattened contract strings. const contracts: any[] = []; @@ -120,7 +121,7 @@ const main = async (): Promise => { parseAndVisit(visitor, contracts, config.mode); - generateWatcher(visitor, contracts, config, overwriteExisting); + generateWatcher(visitor, contracts, configFile, config, overwriteExisting); }; function parseAndVisit (visitor: Visitor, contracts: any[], mode: string) { @@ -162,7 +163,7 @@ function parseAndVisit (visitor: Visitor, contracts: any[], mode: string) { } } -function generateWatcher (visitor: Visitor, contracts: any[], config: any, overWriteExisting = false) { +function generateWatcher (visitor: Visitor, contracts: any[], configFile: string, config: any, overWriteExisting = false) { // Prepare directory structure for the watcher. let outputDir = ''; @@ -198,6 +199,13 @@ function generateWatcher (visitor: Visitor, contracts: any[], config: any, overW let outStream: Writable; + // Export the codegen config file + const configFileContent = fs.readFileSync(configFile, 'utf8'); + outStream = outputDir + ? fs.createWriteStream(path.join(outputDir, 'codegen-config.yml')) + : process.stdout; + outStream.write(configFileContent); + // Export artifacts for the contracts. contracts.forEach((contract: any) => { outStream = outputDir