diff --git a/.gitignore b/.gitignore index ff38e3b..9f54d56 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ test/output.md .nyc_output/ coverage/ +lib diff --git a/lib/bin/solmd.js b/lib/bin/solmd.js deleted file mode 100755 index b758d3f..0000000 --- a/lib/bin/solmd.js +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -var _fs = require('fs'); - -var _fs2 = _interopRequireDefault(_fs); - -var _path = require('path'); - -var _path2 = _interopRequireDefault(_path); - -var _minimist = require('minimist'); - -var _minimist2 = _interopRequireDefault(_minimist); - -var _index = require('../index'); - -var Solmd = _interopRequireWildcard(_index); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var args = (0, _minimist2.default)(process.argv.slice(2)); - -if (typeof args.help !== 'undefined' || args._.length === 0) { - var _JSON$parse = JSON.parse(_fs2.default.readFileSync(_path2.default.join(__dirname, '../../package.json')).toString()), - version = _JSON$parse.version; - - process.stdout.write('solmd v' + version + '\n\nusage: solmd [--dest] \n\nparameters:\n\n--dest Destination of markdown output\n--no-toc Do not generate table of contents, defaults false\n\n '); - process.exit(); -} else { - Solmd.default.build(args).catch(function (err) { - console.error(err); // eslint-disable-line no-console - process.exit(1); - }); -} \ No newline at end of file diff --git a/lib/build.js b/lib/build.js deleted file mode 100644 index 14cd7df..0000000 --- a/lib/build.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function (args) { - return (0, _compile2.default)(args).then(function (data) { - return (0, _markdown2.default)({ args: args, data: data }); - }); -}; - -var _compile = require('./compile'); - -var _compile2 = _interopRequireDefault(_compile); - -var _markdown = require('./markdown'); - -var _markdown2 = _interopRequireDefault(_markdown); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } \ No newline at end of file diff --git a/lib/compile/index.js b/lib/compile/index.js deleted file mode 100644 index c79efc4..0000000 --- a/lib/compile/index.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -exports.default = function (opts) { - opts._.forEach(function (file) { - if (!_fs2.default.existsSync(file)) { - process.stderr.write(file + ': No such file or directory\n'); - process.exit(1); - } - }); - return (0, _solc2.default)(opts._).then(function (_ref2) { - var contracts = _ref2.contracts; - return compile(_extends({}, opts, { contracts: contracts })); - }).catch(function () { - console.error('solmd: Failed to compile contracts at ' + opts._); // eslint-disable-line no-console - process.exit(1); - }); -}; - -var _fs = require('fs'); - -var _fs2 = _interopRequireDefault(_fs); - -var _parseAbi = require('./parse-abi'); - -var _parseAbi2 = _interopRequireDefault(_parseAbi); - -var _solc = require('./solc'); - -var _solc2 = _interopRequireDefault(_solc); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function compile(_ref) { - var contracts = _ref.contracts; - - var data = []; - Object.keys(contracts).forEach(function (contractName) { - var contract = contracts[contractName]; - var fileName = contract.fileName; - var devdoc = contract.devdoc; - var author = devdoc.author, - title = devdoc.title; - - data.push({ - author: author, - title: title, - fileName: fileName.replace(process.env.PWD, ''), - name: contractName, - abiDocs: (0, _parseAbi2.default)(contract) - }); - }); - - return data; -} \ No newline at end of file diff --git a/lib/compile/parse-abi.js b/lib/compile/parse-abi.js deleted file mode 100644 index f3dbe27..0000000 --- a/lib/compile/parse-abi.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -exports.default = parseAbi; - -var _helpers = require('../helpers'); - -var _helpers2 = _interopRequireDefault(_helpers); - -var _parseOutputs = require('./parseOutputs'); - -var _parseOutputs2 = _interopRequireDefault(_parseOutputs); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function parseAbi(contract) { - return contract.abi.map(function (method) { - var inputParams = method.inputs || []; - var signature = method.name && method.name + '(' + inputParams.map(function (i) { - return i.type; - }).join(',') + ')'; - var devDocs = (contract.devdoc.methods || {})[signature] || {}; - var userDocs = (contract.userdoc.methods || {})[signature] || {}; - // map abi inputs to devdoc inputs - var params = devDocs.params || {}; - var inputs = inputParams.map(function (param) { - return _extends({}, param, { description: params[param.name] }); - }); - var argumentList = inputParams.reduce(function (inputString, param) { - return '' + inputString + param.name + ', '; - }, '').slice(0, -2); - // don't write this - delete devDocs.params; - - var outputs = (0, _parseOutputs2.default)({ devDocs: devDocs, method: method }); - - return _extends({}, method, devDocs, userDocs, { - inputs: inputs, - argumentList: argumentList, - outputs: outputs, - signature: signature, - signatureHash: signature && (0, _helpers2.default)(signature) - }); - }); -} \ No newline at end of file diff --git a/lib/compile/parseOutputs.js b/lib/compile/parseOutputs.js deleted file mode 100644 index 3658038..0000000 --- a/lib/compile/parseOutputs.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -exports.default = parseOutputs; -function parseOutputs(_ref) { - var devDocs = _ref.devDocs, - method = _ref.method; - - var outputs = []; - try { - if (typeof devDocs.return !== 'undefined') { - var outputParams = JSON.parse(devDocs.return); - outputs = method.outputs.map(function (param) { - return _extends({}, param, { description: outputParams[param.name] }); - }); - } - } catch (e) { - process.stderr.write('warning: invalid @return for ' + method.name + ' - output may be effected\n'); - outputs = method.outputs; // eslint-disable-line prefer-destructuring - } - - return outputs; -} \ No newline at end of file diff --git a/lib/compile/solc.js b/lib/compile/solc.js deleted file mode 100644 index 076745d..0000000 --- a/lib/compile/solc.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -exports.default = function (src) { - return new Promise(function (resolve) { - var sources = {}; - sources[src] = { - urls: ['file://' + src] - }; - var output = _solc2.default.compileStandardWrapper(JSON.stringify({ - language: 'Solidity', - sources: sources, - settings: { - outputSelection: { - '*': { - '*': ['abi', 'asm', 'ast', 'bin', 'bin-runtime', 'clone-bin', 'interface', 'opcodes', 'srcmap', 'srcmap-runtime', 'devdoc', 'userdoc'] - } - } - } - }), findImports); - var res = JSON.parse(output); - resolve({ - contracts: Object.keys(res.contracts).reduce(function (o, k) { - var file = k.split(':')[0]; - var fileFragments = file.split('/'); - var contractName = fileFragments[fileFragments.length - 1].split('.sol')[0]; - var contract = res.contracts[k][contractName]; - var fileName = process.env.PWD + '/' + k.split(':')[0]; - return _extends({}, o, _defineProperty({}, contractName, _extends({}, contract, { - fileName: fileName, - abi: contract.abi, - devdoc: contract.devdoc, - userdoc: contract.userdoc - }))); - }, {}) - }); - }); -}; - -var _fs = require('fs'); - -var _fs2 = _interopRequireDefault(_fs); - -var _solc = require('solc'); - -var _solc2 = _interopRequireDefault(_solc); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function findImports(path) { - var output = _fs2.default.readFileSync(path.replace('file://', '')); - return { contents: output.toString() }; -} \ No newline at end of file diff --git a/lib/constants.js b/lib/constants.js deleted file mode 100644 index 53c6bb7..0000000 --- a/lib/constants.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var DEFAULT_DEST = exports.DEFAULT_DEST = 'sol.md'; -var DEFAULT_NO_TOC = exports.DEFAULT_NO_TOC = false; \ No newline at end of file diff --git a/lib/helpers.js b/lib/helpers.js deleted file mode 100644 index cc2451f..0000000 --- a/lib/helpers.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = getFunctionSignature; - -var _keccakjs = require('keccakjs'); - -var _keccakjs2 = _interopRequireDefault(_keccakjs); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function getFunctionSignature(signature) { - return new _keccakjs2.default(256).update(signature).digest('hex').substr(0, 8); -} \ No newline at end of file diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index f555476..0000000 --- a/lib/index.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _constants = require('./constants'); - -var _build = require('./build'); - -var _build2 = _interopRequireDefault(_build); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var methods = { - build: _build2.default -}; - -function populateArguments(passed) { - var defaults = { - dest: _constants.DEFAULT_DEST, - 'no-toc': _constants.DEFAULT_NO_TOC - }; - - return _extends({}, defaults, passed); -} - -var wrappedMethods = {}; -Object.keys(methods).forEach(function (key) { - wrappedMethods[key] = function (args) { - var newArgs = populateArguments(args); - return methods[key](newArgs); - }; -}); - -exports.default = wrappedMethods; \ No newline at end of file diff --git a/lib/markdown.js b/lib/markdown.js deleted file mode 100644 index e0d82c9..0000000 --- a/lib/markdown.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function (_ref) { - var args = _ref.args, - data = _ref.data; - - return new Promise(function (resolve, reject) { - // write to dest stream - var writeStream = void 0; - try { - writeStream = _fs2.default.createWriteStream(args.dest, { flags: 'w' }); - } catch (err) { - reject(err); - } - writeStream.on('error', function (err) { - reject(err); - }); - writeStream.on('finish', function () { - resolve(); - }); - // build the table of contents - if (!args.notoc) { - data.forEach(function (contract) { - // contract name - writeStream.write('* [' + contract.name + '](#' + contract.name.toLowerCase() + ')\n'); - // methods (sub-bullets) - contract.abiDocs.forEach(function (docItem) { - if (typeof docItem.name !== 'undefined') { - writeStream.write(' * [' + docItem.name + '](#' + docItem.type + '-' + docItem.name.toLowerCase() + ')\n'); - } - }); - }); - } - - // create docs for each contract from template - data.forEach(function (contract) { - var md = (0, _template2.default)(contract); - writeStream.write(md); - }); - - writeStream.end(); - }); -}; - -var _fs = require('fs'); - -var _fs2 = _interopRequireDefault(_fs); - -var _template = require('./template'); - -var _template2 = _interopRequireDefault(_template); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } \ No newline at end of file diff --git a/lib/template.js b/lib/template.js deleted file mode 100644 index ebd5173..0000000 --- a/lib/template.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _dot = require('dot'); - -var _dot2 = _interopRequireDefault(_dot); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var template = '\n# {{=it.name}}\n{{? it.author }}\n{{=it.author}}{{?}}\n{{~it.abiDocs :docItem:index}}{{? docItem.type === \'event\'}}## *{{=docItem.type}}* {{=docItem.name}}\n\n{{=it.name}}.{{=docItem.name}}({{=docItem.argumentList}}) {{?docItem.anonymous}}`anonymous` {{?}}`{{=docItem.signatureHash}}`\n\n{{? docItem.inputs.length > 0 }}Arguments\n\n| **type** | **name** | **description** |\n|-|-|-|{{~docItem.inputs :argument}}\n| *{{=argument.type}}* | {{=argument.name}} | {{? argument.indexed === false}}not {{?}}indexed |{{~}}{{?}}\n{{?}}{{? docItem.type === \'function\'}}\n## *{{=docItem.type}}* {{=docItem.name}}\n\n{{=it.name}}.{{=docItem.name}}({{=docItem.argumentList}}) `{{=docItem.stateMutability}}` `{{=docItem.signatureHash}}`\n{{?docItem.notice}}\n**{{=docItem.notice}}**\n{{?}}\n{{?docItem.details}}> {{=docItem.details}}\n{{?}}\n{{? docItem.inputs.length > 0 }}Inputs\n\n| **type** | **name** | **description** |\n|-|-|-|{{~docItem.inputs :input}}\n| *{{=input.type}}* | {{=input.name}} | {{=input.description}} |{{~}}{{?}}\n{{? docItem.outputs.length > 0 }}\nOutputs\n\n| **type** | **name** | **description** |\n|-|-|-|{{~docItem.outputs :output}}\n| *{{=output.type}}* | {{=output.name}} | {{=output.description}} |{{~}}{{?}}{{?}}\n{{~}}\n---'; - -_dot2.default.templateSettings.strip = false; - -exports.default = _dot2.default.template(template); \ No newline at end of file