Skip to content
Snippets Groups Projects
Commit 0a5b89c9 authored by Cédric Moreau's avatar Cédric Moreau
Browse files

[fix] #1037 Migrate cli.js

parent d1e7e907
No related branches found
No related tags found
No related merge requests found
app/cli.js
app/lib/blockchain/*.js app/lib/blockchain/*.js
app/lib/blockchain/interfaces/*.js app/lib/blockchain/interfaces/*.js
app/lib/computation/*.js app/lib/computation/*.js
......
...@@ -32,6 +32,7 @@ test/blockchain/*.js ...@@ -32,6 +32,7 @@ test/blockchain/*.js
test/blockchain/*.js.map test/blockchain/*.js.map
test/blockchain/lib/*.js test/blockchain/lib/*.js
test/blockchain/lib/*.js.map test/blockchain/lib/*.js.map
app/cli.js*
app/lib/*.js* app/lib/*.js*
app/lib/blockchain/*.js app/lib/blockchain/*.js
app/lib/blockchain/*.js.map app/lib/blockchain/*.js.map
......
"use strict"; "use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
const co = require('co'); return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const Command = require('commander').Command; const Command = require('commander').Command;
const pjson = require('../package.json'); const pjson = require('../package.json');
const duniter = require('../index'); const duniter = require('../index');
exports.ExecuteCommand = () => {
module.exports = () => { const options = [];
const commands = [];
const options = []; return {
const commands = []; addOption: (optFormat, optDesc, optParser) => options.push({ optFormat, optDesc, optParser }),
addCommand: (command, executionCallback) => commands.push({ command, executionCallback }),
return { // To execute the provided command
execute: (programArgs) => __awaiter(this, void 0, void 0, function* () {
addOption: (optFormat, optDesc, optParser) => options.push({ optFormat, optDesc, optParser }), const program = new Command();
// Callback for command success
addCommand: (command, executionCallback) => commands.push({ command, executionCallback }), let onResolve;
// Callback for command rejection
// To execute the provided command let onReject = () => Promise.reject(Error("Uninitilized rejection throw"));
execute: (programArgs) => co(function*() { // Command execution promise
const currentCommand = new Promise((resolve, reject) => {
const program = new Command(); onResolve = resolve;
onReject = reject;
// Callback for command success });
let onResolve; program
.version(pjson.version)
// Callback for command rejection .usage('<command> [options]')
let onReject = () => Promise.reject(Error("Uninitilized rejection throw")); .option('--home <path>', 'Path to Duniter HOME (defaults to "$HOME/.config/duniter").')
.option('-d, --mdb <name>', 'Database name (defaults to "duniter_default").')
// Command execution promise .option('--autoconf', 'With `config` and `init` commands, will guess the best network and key options witout asking for confirmation')
const currentCommand = new Promise((resolve, reject) => { .option('--addep <endpoint>', 'With `config` command, add given endpoint to the list of endpoints of this node')
onResolve = resolve; .option('--remep <endpoint>', 'With `config` command, remove given endpoint to the list of endpoints of this node')
onReject = reject; .option('--cpu <percent>', 'Percent of CPU usage for proof-of-work computation', parsePercent)
}); .option('-c, --currency <name>', 'Name of the currency managed by this node.')
.option('--nostdout', 'Disable stdout printing for `export-bc` command')
program .option('--noshuffle', 'Disable peers shuffling for `sync` command')
.version(pjson.version) .option('--timeout <milliseconds>', 'Timeout to use when contacting peers', parseInt)
.usage('<command> [options]') .option('--httplogs', 'Enable HTTP logs')
.option('--nohttplogs', 'Disable HTTP logs')
.option('--home <path>', 'Path to Duniter HOME (defaults to "$HOME/.config/duniter").') .option('--isolate', 'Avoid the node to send peering or status informations to the network')
.option('-d, --mdb <name>', 'Database name (defaults to "duniter_default").') .option('--forksize <size>', 'Maximum size of fork window', parseInt)
.option('--memory', 'Memory mode');
.option('--autoconf', 'With `config` and `init` commands, will guess the best network and key options witout asking for confirmation') for (const opt of options) {
.option('--addep <endpoint>', 'With `config` command, add given endpoint to the list of endpoints of this node') program
.option('--remep <endpoint>', 'With `config` command, remove given endpoint to the list of endpoints of this node') .option(opt.optFormat, opt.optDesc, opt.optParser);
}
.option('--cpu <percent>', 'Percent of CPU usage for proof-of-work computation', parsePercent) for (const cmd of commands) {
program
.option('-c, --currency <name>', 'Name of the currency managed by this node.') .command(cmd.command.name)
.description(cmd.command.desc)
.option('--nostdout', 'Disable stdout printing for `export-bc` command') .action(function () {
.option('--noshuffle', 'Disable peers shuffling for `sync` command') return __awaiter(this, arguments, void 0, function* () {
const args = Array.from(arguments);
.option('--timeout <milliseconds>', 'Timeout to use when contacting peers', parseInt) try {
.option('--httplogs', 'Enable HTTP logs') const resOfExecution = yield cmd.executionCallback.apply(null, [program].concat(args));
.option('--nohttplogs', 'Disable HTTP logs') onResolve(resOfExecution);
.option('--isolate', 'Avoid the node to send peering or status informations to the network') }
.option('--forksize <size>', 'Maximum size of fork window', parseInt) catch (e) {
.option('--memory', 'Memory mode') onReject(e);
; }
});
for (const opt of options) { });
program }
.option(opt.optFormat, opt.optDesc, opt.optParser); program
} .on('*', function (cmd) {
console.log("Unknown command '%s'. Try --help for a listing of commands & options.", cmd);
for (const cmd of commands) { onResolve();
program
.command(cmd.command.name)
.description(cmd.command.desc)
.action(function() {
const args = Array.from(arguments);
return co(function*() {
try {
const resOfExecution = yield cmd.executionCallback.apply(null, [program].concat(args));
onResolve(resOfExecution);
} catch (e) {
onReject(e);
}
}); });
}); program.parse(programArgs);
} if (programArgs.length <= 2) {
onReject('No command given.');
program }
.on('*', function (cmd) { return currentCommand;
console.log("Unknown command '%s'. Try --help for a listing of commands & options.", cmd); })
onResolve(); };
});
program.parse(programArgs);
if (programArgs.length <= 2) {
onReject('No command given.');
}
return currentCommand;
})
};
}; };
function parsePercent(s) { function parsePercent(s) {
const f = parseFloat(s); const f = parseFloat(s);
return isNaN(f) ? 0 : f; return isNaN(f) ? 0 : f;
} }
//# sourceMappingURL=cli.js.map
\ No newline at end of file
const Command = require('commander').Command;
const pjson = require('../package.json');
const duniter = require('../index');
export const ExecuteCommand = () => {
const options:any = [];
const commands:any = [];
return {
addOption: (optFormat:string, optDesc:string, optParser:any) => options.push({ optFormat, optDesc, optParser }),
addCommand: (command:any, executionCallback:any) => commands.push({ command, executionCallback }),
// To execute the provided command
execute: async (programArgs:string[]) => {
const program = new Command();
// Callback for command success
let onResolve:any;
// Callback for command rejection
let onReject:any = () => Promise.reject(Error("Uninitilized rejection throw"));
// Command execution promise
const currentCommand = new Promise((resolve, reject) => {
onResolve = resolve;
onReject = reject;
});
program
.version(pjson.version)
.usage('<command> [options]')
.option('--home <path>', 'Path to Duniter HOME (defaults to "$HOME/.config/duniter").')
.option('-d, --mdb <name>', 'Database name (defaults to "duniter_default").')
.option('--autoconf', 'With `config` and `init` commands, will guess the best network and key options witout asking for confirmation')
.option('--addep <endpoint>', 'With `config` command, add given endpoint to the list of endpoints of this node')
.option('--remep <endpoint>', 'With `config` command, remove given endpoint to the list of endpoints of this node')
.option('--cpu <percent>', 'Percent of CPU usage for proof-of-work computation', parsePercent)
.option('-c, --currency <name>', 'Name of the currency managed by this node.')
.option('--nostdout', 'Disable stdout printing for `export-bc` command')
.option('--noshuffle', 'Disable peers shuffling for `sync` command')
.option('--timeout <milliseconds>', 'Timeout to use when contacting peers', parseInt)
.option('--httplogs', 'Enable HTTP logs')
.option('--nohttplogs', 'Disable HTTP logs')
.option('--isolate', 'Avoid the node to send peering or status informations to the network')
.option('--forksize <size>', 'Maximum size of fork window', parseInt)
.option('--memory', 'Memory mode')
;
for (const opt of options) {
program
.option(opt.optFormat, opt.optDesc, opt.optParser);
}
for (const cmd of commands) {
program
.command(cmd.command.name)
.description(cmd.command.desc)
.action(async function() {
const args = Array.from(arguments);
try {
const resOfExecution = await cmd.executionCallback.apply(null, [program].concat(args));
onResolve(resOfExecution);
} catch (e) {
onReject(e);
}
});
}
program
.on('*', function (cmd:any) {
console.log("Unknown command '%s'. Try --help for a listing of commands & options.", cmd);
onResolve();
});
program.parse(programArgs);
if (programArgs.length <= 2) {
onReject('No command given.');
}
return currentCommand;
}
};
};
function parsePercent(s:string) {
const f = parseFloat(s);
return isNaN(f) ? 0 : f;
}
...@@ -975,7 +975,7 @@ On peut donc ainsi comprendre tout ce qui se passe dans Duniter. Ici il s'agit d ...@@ -975,7 +975,7 @@ On peut donc ainsi comprendre tout ce qui se passe dans Duniter. Ici il s'agit d
## Niveau XI : point d’arrêt d’une commande ## Niveau XI : point d’arrêt d’une commande
Continuons avec la commande `webwait`, et tentons d'y poser un point d'arrêt. Rendez-vous dans le fichier `app/cli.js` à la ligne 859. Continuons avec la commande `webwait`, et tentons d'y poser un point d'arrêt. Rendez-vous dans le fichier `app/cli.ts` à la ligne 859.
Ajoutons deux points d'arrêt : un en ligne 859 et un autre en ligne 860 : Ajoutons deux points d'arrêt : un en ligne 859 et un autre en ligne 860 :
...@@ -1025,9 +1025,9 @@ Si vous faites de nouveau F9, vous arriverez alors à cet écran : ...@@ -1025,9 +1025,9 @@ Si vous faites de nouveau F9, vous arriverez alors à cet écran :
<img src="https://forum.duniter.org/uploads/default/original/1X/a6771e01590846568f895871d0d9c9aa8a9666d7.png" width="620" height="499"> <img src="https://forum.duniter.org/uploads/default/original/1X/a6771e01590846568f895871d0d9c9aa8a9666d7.png" width="620" height="499">
Cela signifie une 1ère chose, c'est que ce point d'arrêt intervient manifestement *avant* le celui du fichier `app/cli.js` ligne 859. Cela signifie une 1ère chose, c'est que ce point d'arrêt intervient manifestement *avant* le celui du fichier `app/cli.ts` ligne 859.
Et si l'on regarde la pile d'appel (colonne "Frames" de la fenêtre de debug), on peut repérer que c'est la fonction en ligne 890 du fichier `app/cli.js` qui appelle ce code d'information "Plugging file system...". Et si l'on regarde la pile d'appel (colonne "Frames" de la fenêtre de debug), on peut repérer que c'est la fonction en ligne 890 du fichier `app/cli.ts` qui appelle ce code d'information "Plugging file system...".
<img src="https://forum.duniter.org/uploads/default/original/1X/5a5f72bbdc39f897fba4ad8a8383dca5e0d67a2f.png" width="620" height="499"> <img src="https://forum.duniter.org/uploads/default/original/1X/5a5f72bbdc39f897fba4ad8a8383dca5e0d67a2f.png" width="620" height="499">
......
...@@ -8,6 +8,7 @@ const _ = require('underscore'); ...@@ -8,6 +8,7 @@ const _ = require('underscore');
const Server = require('./server'); const Server = require('./server');
const directory = require('./app/lib/system/directory'); const directory = require('./app/lib/system/directory');
const constants = require('./app/lib/constants'); const constants = require('./app/lib/constants');
const CLI = require('./app/cli').ExecuteCommand
const logger = require('./app/lib/logger').NewLogger('duniter'); const logger = require('./app/lib/logger').NewLogger('duniter');
const configDependency = require('./app/modules/config'); const configDependency = require('./app/modules/config');
...@@ -120,7 +121,7 @@ module.exports.statics = { ...@@ -120,7 +121,7 @@ module.exports.statics = {
function Stack(dependencies) { function Stack(dependencies) {
const that = this; const that = this;
const cli = require('./app/cli')(); const cli = CLI();
const configLoadingCallbacks = []; const configLoadingCallbacks = [];
const configBeforeSaveCallbacks = []; const configBeforeSaveCallbacks = [];
const resetDataHooks = []; const resetDataHooks = [];
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment