Add schema assertions on public methods of @0xproject/sol-compiler

This commit is contained in:
Leonid Logvinov 2018-05-24 16:33:58 -07:00
parent ed5b9c2b56
commit 549e6d57c4
No known key found for this signature in database
GPG Key ID: 0DD294BFDE8C95D4
4 changed files with 33 additions and 1 deletions

View File

@ -72,6 +72,7 @@
"zeppelin-solidity": "1.8.0"
},
"dependencies": {
"@0xproject/assert": "0.2.10",
"@0xproject/json-schemas": "0.7.22",
"@0xproject/sol-resolver": "^0.0.5",
"@0xproject/types": "^0.7.0",

View File

@ -35,7 +35,7 @@ const SEPARATOR = ',';
: argv.contracts === DEFAULT_CONTRACTS_LIST
? DEFAULT_CONTRACTS_LIST
: argv.contracts.split(SEPARATOR);
const opts: CompilerOptions = {
const opts = {
contractsDir: argv.contractsDir,
artifactsDir: argv.artifactsDir,
contracts,

View File

@ -1,3 +1,5 @@
import { assert } from '@0xproject/assert';
import { schemas } from '@0xproject/json-schemas';
import {
ContractSource,
ContractSources,
@ -22,6 +24,7 @@ import * as requireFromString from 'require-from-string';
import * as semver from 'semver';
import solc = require('solc');
import { compilerOptionsSchema } from './schemas/compiler_options_schema';
import { binPaths } from './solc/bin_paths';
import {
createDirIfDoesNotExistAsync,
@ -81,10 +84,12 @@ export class Compiler {
* @return An instance of the Compiler class.
*/
constructor(opts: CompilerOptions) {
assert.doesConformToSchema('opts', opts, compilerOptionsSchema);
// TODO: Look for config file in parent directories if not found in current directory
const config: CompilerOptions = fs.existsSync(CONFIG_FILE)
? JSON.parse(fs.readFileSync(CONFIG_FILE).toString())
: {};
assert.doesConformToSchema('compiler.json', config, compilerOptionsSchema);
this._contractsDir = opts.contractsDir || config.contractsDir || DEFAULT_CONTRACTS_DIR;
this._solcVersionIfExists = opts.solcVersion || config.solcVersion;
this._compilerSettings = opts.compilerSettings || config.compilerSettings || DEFAULT_COMPILER_SETTINGS;

View File

@ -0,0 +1,26 @@
export const compilerOptionsSchema = {
id: '/CompilerOptions',
properties: {
contractsDir: { type: 'string' },
artifactsDir: { type: 'string' },
solcVersion: { type: 'string', pattern: '^d+.d+.d+$' },
compilerSettings: { type: 'object' },
contracts: {
oneOf: [
{
type: 'string',
pattern: '^\\*$',
},
{
type: 'array',
items: {
type: 'string',
},
},
],
},
},
type: 'object',
required: [],
additionalProperties: false,
};