Skip to content

Commit

Permalink
feat(scaffold): allow association/file
Browse files Browse the repository at this point in the history
- Refactor everything to TS
- Add missing types
- Declare __ everywhere
  • Loading branch information
alaibe committed Dec 3, 2018
1 parent 5b3d894 commit f68f1fc
Show file tree
Hide file tree
Showing 25 changed files with 684 additions and 381 deletions.
21 changes: 21 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
"@babel/preset-react": "7.0.0",
"@babel/preset-typescript": "7.1.0",
"@babel/runtime-corejs2": "7.1.2",
"ajv": "6.5.5",
"ascii-table": "0.0.9",
"async": "2.6.1",
"babel-loader": "8.0.4",
Expand Down Expand Up @@ -164,6 +165,25 @@
"uuid": "3.3.2",
"viz.js": "1.8.2",
"web3": "1.0.0-beta.34",
"web3-bzz": "1.0.0-beta.34",
"web3-core-helpers": "1.0.0-beta.34",
"web3-core-method": "1.0.0-beta.34",
"web3-core-promievent": "1.0.0-beta.34",
"web3-core-requestmanager": "1.0.0-beta.34",
"web3-core-subscriptions": "1.0.0-beta.34",
"web3-core": "1.0.0-beta.34",
"web3-eth-abi": "1.0.0-beta.34",
"web3-eth-accounts": "1.0.0-beta.34",
"web3-eth-contract": "1.0.0-beta.34",
"web3-eth-iban": "1.0.0-beta.34",
"web3-eth-personal": "1.0.0-beta.34",
"web3-eth": "1.0.0-beta.34",
"web3-net": "1.0.0-beta.34",
"web3-providers-http": "1.0.0-beta.34",
"web3-providers-ipc": "1.0.0-beta.34",
"web3-providers-ws": "1.0.0-beta.34",
"web3-shh": "1.0.0-beta.34",
"web3-utils": "1.0.0-beta.34",
"webpack": "4.19.0",
"webpack-bundle-analyzer": "2.13.1",
"websocket": "1.0.28",
Expand All @@ -174,6 +194,7 @@
"@babel/cli": "7.1.2",
"@babel/plugin-proposal-optional-chaining": "7.0.0",
"@types/async": "2.0.50",
"@types/handlebars": "4.0.39",
"@types/i18n": "0.8.3",
"@types/node": "10.11.7",
"@types/os-locale": "2.1.0",
Expand Down
38 changes: 4 additions & 34 deletions src/cmd/cmd.js
Original file line number Diff line number Diff line change
Expand Up @@ -311,51 +311,21 @@ class Cmd {

scaffold() {
program
.command('scaffold [contract] [fields...]')
.command('scaffold [contractOrFile] [fields...]')
.option('--framework <framework>', 'UI framework to use. (default: react)')
.option('--contract-language <language>', 'Language used for the smart contract generation (default: solidity)')
.option('--overwrite', 'Overwrite existing files. (default: false)')
.description(__('Generates a contract and a function tester for you\nExample: ContractName field1:uint field2:address --contract-language solidity --framework react'))
.action(function(contract, fields, options) {
if (contract === undefined) {
console.log("contract name is required");
process.exit(0);
}

let fieldMapping = {};
if (fields.length > 0) {
const typeRegex = /^(u?int[0-9]{0,3}(\[\])?|string|bool|address|bytes[0-9]{0,3})(\[\])?$/;
const varRegex = /^[a-zA-Z][a-zA-Z0-9_]*$/;
fieldMapping = fields.reduce((acc, curr) => {
const c = curr.split(':');

if (!varRegex.test(c[0])) {
console.log("Invalid variable name: " + c[0]);
process.exit(1);
}

if (!typeRegex.test(c[1])) {
console.log("Invalid datatype: " + c[1] + " - The dApp generator might not support this type at the moment");
process.exit(1);
}

acc[c[0]] = c[1];
return acc;
}, {});
}

.action(function(contractOrFile, fields, options) {
i18n.setOrDetectLocale(options.locale);
options.env = 'development';
options.logFile = options.logfile; // fix casing
options.logLevel = options.loglevel; // fix casing
options.onlyCompile = options.contracts;
options.client = options.client || 'geth';
options.webpackConfigName = options.pipeline || 'development';
options.contract = contract;
options.framework = options.framework || 'react';
options.contractLanguage = options.contractLanguage || 'solidity';
options.overwrite = options.overwrite || false;
options.fields = fieldMapping;
options.contractOrFile = contractOrFile;
options.fields = fields;

embark.scaffold(options);
});
Expand Down
5 changes: 2 additions & 3 deletions src/cmd/cmd_controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -471,9 +471,8 @@ class EmbarkController {
callback();
},
function generateContract(callback) {
engine.events.request('scaffolding:generate:contract', options, function(err, file) {
// Add contract file to the manager
engine.events.request('config:contractsFiles:add', file);
engine.events.request('scaffolding:generate:contract', options, function(files) {
files.forEach(file => engine.events.request('config:contractsFiles:add', file));
callback();
});
},
Expand Down
2 changes: 0 additions & 2 deletions src/lib/modules/console/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import Web3 from "web3";
import { Embark, Events } from "../../../typings/embark";
import Suggestions from "./suggestions";

declare const __: any;

class Console {
private embark: Embark;
private events: Events;
Expand Down
125 changes: 0 additions & 125 deletions src/lib/modules/scaffolding-react/index.js

This file was deleted.

57 changes: 0 additions & 57 deletions src/lib/modules/scaffolding-solidity/index.js

This file was deleted.

50 changes: 0 additions & 50 deletions src/lib/modules/scaffolding-solidity/templates/contract.sol.hbs

This file was deleted.

3 changes: 3 additions & 0 deletions src/lib/modules/scaffolding/builder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export interface Builder {
build(): Promise<string[]>;
}
33 changes: 33 additions & 0 deletions src/lib/modules/scaffolding/commandOptions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import Ajv from "ajv";

import { Logger } from "../../../typings/logger";

export enum Framework {
React = "react",
}

export enum ContractLanguage {
Solidity = "solidity",
}

export class CommandOptions {
constructor(private readonly logger: Logger,
public readonly framework: Framework = Framework.React,
public readonly contractLanguage: ContractLanguage = ContractLanguage.Solidity,
public readonly overwrite: boolean = false,
) {
}

public validate() {
if (!Object.values(Framework).includes(this.framework)) {
this.logger.error(__("Selected framework not supported"));
this.logger.error(__("Supported Frameworks are: %s", Object.values(Framework).join(", ")));
process.exit(1);
}
if (!Object.values(ContractLanguage).includes(this.contractLanguage)) {
this.logger.error(__("Selected contract language not supported"));
this.logger.error(__("Supported Contract Languages are: %s", Object.values(ContractLanguage).join(", ")));
process.exit(1);
}
}
}
Loading

0 comments on commit f68f1fc

Please sign in to comment.