diff options
author | Leonid Logvinov <logvinov.leon@gmail.com> | 2018-04-17 02:47:28 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-17 02:47:28 +0800 |
commit | d263f7783fabe89cc9714b596068eccdc5babc1c (patch) | |
tree | 54a5c8f0a88320f3df8330d95506aea96e808bd3 /packages/sol-resolver/src/resolvers/name_resolver.ts | |
parent | 1fcf3c5dc44d10648e14d6b10c174930eecf27b1 (diff) | |
parent | d8ef76fd5efe63ec8f6205a73494ce388e64391f (diff) | |
download | dexon-sol-tools-d263f7783fabe89cc9714b596068eccdc5babc1c.tar dexon-sol-tools-d263f7783fabe89cc9714b596068eccdc5babc1c.tar.gz dexon-sol-tools-d263f7783fabe89cc9714b596068eccdc5babc1c.tar.bz2 dexon-sol-tools-d263f7783fabe89cc9714b596068eccdc5babc1c.tar.lz dexon-sol-tools-d263f7783fabe89cc9714b596068eccdc5babc1c.tar.xz dexon-sol-tools-d263f7783fabe89cc9714b596068eccdc5babc1c.tar.zst dexon-sol-tools-d263f7783fabe89cc9714b596068eccdc5babc1c.zip |
Merge pull request #512 from 0xProject/feature/resolver
Dependencies resolver for deployer
Diffstat (limited to 'packages/sol-resolver/src/resolvers/name_resolver.ts')
-rw-r--r-- | packages/sol-resolver/src/resolvers/name_resolver.ts | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/packages/sol-resolver/src/resolvers/name_resolver.ts b/packages/sol-resolver/src/resolvers/name_resolver.ts new file mode 100644 index 000000000..6849b7610 --- /dev/null +++ b/packages/sol-resolver/src/resolvers/name_resolver.ts @@ -0,0 +1,66 @@ +import * as fs from 'fs'; +import * as _ from 'lodash'; +import * as path from 'path'; + +import { ContractSource } from '../types'; + +import { EnumerableResolver } from './enumerable_resolver'; + +export class NameResolver extends EnumerableResolver { + private _contractsDir: string; + constructor(contractsDir: string) { + super(); + this._contractsDir = contractsDir; + } + public resolveIfExists(lookupContractName: string): ContractSource | undefined { + const SOLIDITY_FILE_EXTENSION = '.sol'; + let contractSource: ContractSource | undefined; + const onFile = (filePath: string) => { + const contractName = path.basename(filePath, SOLIDITY_FILE_EXTENSION); + if (contractName === lookupContractName) { + const source = fs.readFileSync(filePath).toString(); + contractSource = { + source, + path: filePath, + }; + return true; + } + return undefined; + }; + this._traverseContractsDir(this._contractsDir, onFile); + return contractSource; + } + public getAll(): ContractSource[] { + const SOLIDITY_FILE_EXTENSION = '.sol'; + const contractSources: ContractSource[] = []; + const onFile = (filePath: string) => { + const contractName = path.basename(filePath, SOLIDITY_FILE_EXTENSION); + const source = fs.readFileSync(filePath).toString(); + const contractSource = { + source, + path: filePath, + }; + contractSources.push(contractSource); + }; + this._traverseContractsDir(this._contractsDir, onFile); + return contractSources; + } + // tslint:disable-next-line:prefer-function-over-method + private _traverseContractsDir(dirPath: string, onFile: (filePath: string) => true | void): boolean { + let dirContents: string[] = []; + try { + dirContents = fs.readdirSync(dirPath); + } catch (err) { + throw new Error(`No directory found at ${dirPath}`); + } + for (const fileName of dirContents) { + const entryPath = path.join(dirPath, fileName); + const isDirectory = fs.lstatSync(entryPath).isDirectory(); + const isComplete = isDirectory ? this._traverseContractsDir(entryPath, onFile) : onFile(entryPath); + if (isComplete) { + return isComplete; + } + } + return false; + } +} |