1 |
|
2 |
|
3 |
|
4 | var Module = require('module');
|
5 | var path = require('path');
|
6 | var repl = require('repl');
|
7 | var util = require('util');
|
8 |
|
9 | var location = process.cwd();
|
10 |
|
11 | var moduleToDebug;
|
12 | var sampleLine;
|
13 | var prompt;
|
14 |
|
15 | try {
|
16 | loadAndDescribeModuleInCwd();
|
17 | } catch (e) {
|
18 | sampleLine = util.format(
|
19 | 'The module in the current directory was not loaded: %s.',
|
20 | e.message || e
|
21 | );
|
22 | }
|
23 |
|
24 | startRepl();
|
25 |
|
26 |
|
27 |
|
28 | function loadAndDescribeModuleInCwd() {
|
29 |
|
30 | moduleToDebug = Module._load(location, module, true);
|
31 |
|
32 | var sample = getSampleCommand();
|
33 | sampleLine = util.format('You can access your module as `m`%s.', sample);
|
34 |
|
35 | prompt = getModuleName() + '> ';
|
36 | }
|
37 |
|
38 | function startRepl() {
|
39 | var cmd = process.env.CMD || process.argv[1];
|
40 |
|
41 | console.log(
|
42 | '\nStarting the interactive shell (REPL). Type `.help` for help.\n' +
|
43 | '%s\n' +
|
44 | 'Didn\'t want to start REPL? Run `%s .` instead.',
|
45 | sampleLine,
|
46 | cmd
|
47 | );
|
48 |
|
49 | var r = repl.start( { prompt: prompt });
|
50 | if (moduleToDebug !== undefined)
|
51 | r.context.m = moduleToDebug;
|
52 | r.on('exit', onReplExit);
|
53 | }
|
54 |
|
55 | function onReplExit() {
|
56 | console.log('\nLeaving the interactive shell (REPL).');
|
57 | process.exit();
|
58 | }
|
59 |
|
60 | function getModuleName() {
|
61 | try {
|
62 | var packageJson = require(path.join(location, 'package.json'));
|
63 | if (packageJson.name)
|
64 | return packageJson.name;
|
65 | } catch (e) {
|
66 |
|
67 | }
|
68 |
|
69 | return path.basename(location);
|
70 | }
|
71 |
|
72 | function getSampleCommand() {
|
73 | var exportedSymbols = Object.keys(moduleToDebug);
|
74 | if (!exportedSymbols.length) return '';
|
75 |
|
76 | var sample = exportedSymbols[0];
|
77 | if (typeof(moduleToDebug[sample]) === 'function')
|
78 | sample += '()';
|
79 |
|
80 | return ', e.g. `m.' + sample + '`';
|
81 | }
|