-
Notifications
You must be signed in to change notification settings - Fork 0
/
.noderc.example.js
89 lines (78 loc) · 2.13 KB
/
.noderc.example.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env node
/** @typedef {import("repl").REPLServer} REPLServer */
/** @typedef {import("vm").Context} Context */
const chalk = require('chalk');
const _ = require('lodash');
/**
* Default value callback, returns a number based on index, starting with 1.
* @param {number} n
* @returns {number}
*/
const defaultValCb = (n) => n + 1;
/**
* Default key callback, returns a string based on index, starting with `'a'`.
* @param {number} n
* @returns {string}
*/
const defaultKeyCb = (n) => String.fromCharCode(96 + (n + 1));
/**
* Configure REPL context with our globals.
* @param {Context} context
*/
const init = (context) => {
const lodash = _.runInContext(context);
Object.defineProperties(context, {
Array: {
value: Array,
},
_: {
value: lodash,
},
lodash: {
value: lodash,
},
Object: {
value: Object,
},
});
};
/**
* Configure our REPL on startup. Adds some commonly used globals and a few
* utility methods.
*
* @param {REPLServer} repl
*/
module.exports.rrepl = function configure(repl) {
repl.setPrompt(`${process.version} ${chalk.green('❯')} `);
init(repl.context);
repl.on('reset', init);
Object.defineProperty(repl.context.Array, 'toy', {
/**
* Generates an array of length `n` with values generated by the provided
* callback.
* @template T
* @param {number} n
* @param {(n: number) => T} valCb
* @returns {T[]}
*/
value: function toy(n = 10, valCb = defaultValCb) {
return repl.context._.times(n, valCb);
},
});
Object.defineProperty(repl.context.Object, 'toy', {
/**
* Generates an object with `n` key value pairs. Each key and value is
* generated by a provided callback.
* @template T
* @param {number} n
* @param {(n: number) => string} keyCb
* @param {(n: number) => T} valCb
* @returns {{ [key: string]: T }}
*/
value: function toy(n = 10, keyCb = defaultKeyCb, valCb = defaultValCb) {
const keyArray = Array.toy(n, keyCb);
const valArray = Array.toy(n, valCb);
return repl.context._.zipObject(keyArray, valArray);
},
});
};