diff options
author | Leonid Logvinov <logvinov.leon@gmail.com> | 2018-04-16 22:38:55 +0800 |
---|---|---|
committer | Leonid Logvinov <logvinov.leon@gmail.com> | 2018-04-16 23:43:59 +0800 |
commit | d8ef76fd5efe63ec8f6205a73494ce388e64391f (patch) | |
tree | 22a5740584029830e37961136e229938b8f735f4 /packages/sol-resolver/src/resolvers/name_resolver.ts | |
parent | e5cf41b3134d6cd5fdda995aa81ec23e51bb5145 (diff) | |
download | dexon-0x-contracts-d8ef76fd5efe63ec8f6205a73494ce388e64391f.tar dexon-0x-contracts-d8ef76fd5efe63ec8f6205a73494ce388e64391f.tar.gz dexon-0x-contracts-d8ef76fd5efe63ec8f6205a73494ce388e64391f.tar.bz2 dexon-0x-contracts-d8ef76fd5efe63ec8f6205a73494ce388e64391f.tar.lz dexon-0x-contracts-d8ef76fd5efe63ec8f6205a73494ce388e64391f.tar.xz dexon-0x-contracts-d8ef76fd5efe63ec8f6205a73494ce388e64391f.tar.zst dexon-0x-contracts-d8ef76fd5efe63ec8f6205a73494ce388e64391f.zip |
Rename resolver to sol-resolver
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; + } +} |