nodexh 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/main.js +47 -57
- package/lib/main.js.map +2 -2
- package/package.json +5 -5
- package/src/main.coffee +31 -23
- package/pnpm-lock.yaml +0 -76
package/lib/main.js
CHANGED
|
@@ -1,31 +1,17 @@
|
|
|
1
1
|
(function() {
|
|
2
2
|
'use strict';
|
|
3
|
-
var
|
|
3
|
+
var FS, GUY, PATH, _exit_handler, _get_context, alert, bold, cyan, debug, echo, exit_handler, fetch_mapped_location, get_context, get_error_callsites, get_stacktracey, gold, green, grey, help, info, inspect, isa, load_source_map, log, plain, praise, red, reverse, rpr, show_error_with_source_context, show_stacktracey, steel, type_of, types, underline, urge, warn, whisper, white, write_to_stderr, yellow;
|
|
4
4
|
|
|
5
5
|
//###########################################################################################################
|
|
6
|
-
|
|
6
|
+
GUY = require('guy');
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
({alert, debug, help, info, plain, praise, urge, warn, whisper} = GUY.trm.get_loggers('NODEXH'));
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
({rpr, inspect, echo, log} = GUY.trm);
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
types = new (require('intertype')).Intertype();
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
info = CND.get_logger('info', badge);
|
|
17
|
-
|
|
18
|
-
warn = CND.get_logger('warn', badge);
|
|
19
|
-
|
|
20
|
-
alert = CND.get_logger('alert', badge);
|
|
21
|
-
|
|
22
|
-
help = CND.get_logger('help', badge);
|
|
23
|
-
|
|
24
|
-
urge = CND.get_logger('urge', badge);
|
|
25
|
-
|
|
26
|
-
whisper = CND.get_logger('whisper', badge);
|
|
27
|
-
|
|
28
|
-
echo = CND.echo.bind(CND);
|
|
14
|
+
({isa, type_of} = types);
|
|
29
15
|
|
|
30
16
|
// stackman = ( require 'stackman' )()
|
|
31
17
|
get_error_callsites = require('error-callsites');
|
|
@@ -36,14 +22,11 @@
|
|
|
36
22
|
|
|
37
23
|
PATH = require('path');
|
|
38
24
|
|
|
39
|
-
({red, green, steel, grey, cyan, bold, gold, white, yellow, reverse, underline, bold} =
|
|
40
|
-
|
|
41
|
-
// types = new ( require '../../intertype' ).Intertype()
|
|
42
|
-
// { isa } = types.export()
|
|
25
|
+
({red, green, steel, grey, cyan, bold, gold, white, yellow, reverse, underline, bold} = GUY.trm);
|
|
43
26
|
|
|
44
27
|
//-----------------------------------------------------------------------------------------------------------
|
|
45
28
|
write_to_stderr = function(...P) {
|
|
46
|
-
return process.stderr.write(' ' +
|
|
29
|
+
return process.stderr.write(' ' + (GUY.trm.pen(...P)) + '\n');
|
|
47
30
|
};
|
|
48
31
|
|
|
49
32
|
//-----------------------------------------------------------------------------------------------------------
|
|
@@ -143,8 +126,8 @@
|
|
|
143
126
|
callsites = get_error_callsites(error);
|
|
144
127
|
//.........................................................................................................
|
|
145
128
|
if ((callsites == null) || (callsites.length === 0)) {
|
|
146
|
-
write_to_stderr(
|
|
147
|
-
write_to_stderr(
|
|
129
|
+
write_to_stderr(red(reverse("^455756^ error has no associated callsites:")));
|
|
130
|
+
write_to_stderr(red(reverse(rpr(error))));
|
|
148
131
|
return null;
|
|
149
132
|
}
|
|
150
133
|
//.........................................................................................................
|
|
@@ -199,7 +182,7 @@
|
|
|
199
182
|
};
|
|
200
183
|
|
|
201
184
|
//-----------------------------------------------------------------------------------------------------------
|
|
202
|
-
|
|
185
|
+
_exit_handler = async function(error, origin) {
|
|
203
186
|
var message, ref, ref1, ref2, type;
|
|
204
187
|
/* TAINT origin never used */
|
|
205
188
|
// show_stacktracey error
|
|
@@ -209,6 +192,12 @@
|
|
|
209
192
|
type = (ref = (ref1 = error.code) != null ? ref1 : error.name) != null ? ref : 'EXCEPTION';
|
|
210
193
|
message = ` ${type}: ` + ((ref2 = error != null ? error.message : void 0) != null ? ref2 : "an unrecoverable condition occurred");
|
|
211
194
|
await show_error_with_source_context(error, message);
|
|
195
|
+
return null;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
//-----------------------------------------------------------------------------------------------------------
|
|
199
|
+
exit_handler = async function(error, origin) {
|
|
200
|
+
await _exit_handler(error, origin);
|
|
212
201
|
setImmediate((function() {
|
|
213
202
|
return process.exit(111);
|
|
214
203
|
}));
|
|
@@ -251,16 +240,16 @@
|
|
|
251
240
|
ref = get_stacktracey(error);
|
|
252
241
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
253
242
|
d = ref[i];
|
|
254
|
-
echo(
|
|
243
|
+
echo(steel('^44872^ ' + `${d.relpath} @ ${d.line}:${d.column}`));
|
|
255
244
|
/* NOTE errors:
|
|
256
245
|
ENOENT: no such file or directory
|
|
257
246
|
EISDIR: illegal operation on a directory, read
|
|
258
247
|
'Cannot read property 'originalPositionFor' of undefined'
|
|
259
248
|
*/
|
|
260
249
|
if (d.error != null) {
|
|
261
|
-
echo(
|
|
250
|
+
echo(red('^44873^ ' + ((ref1 = d.error.message) != null ? ref1 : "an error occurred")));
|
|
262
251
|
} else {
|
|
263
|
-
echo(
|
|
252
|
+
echo(yellow('^44874^ ' + `${rpr(d.source.slice(0, 101))}`));
|
|
264
253
|
}
|
|
265
254
|
}
|
|
266
255
|
return null;
|
|
@@ -279,32 +268,33 @@
|
|
|
279
268
|
}
|
|
280
269
|
|
|
281
270
|
// do =>
|
|
282
|
-
// process.stderr.on 'data', ( data ) => debug "^6863-1^ (stderr.on 'data'):", rpr data
|
|
283
|
-
// process.stdout.on 'data', ( data ) => debug "^6863-2^ (stdout.on 'data'):", rpr data
|
|
284
|
-
// process.stderr.on 'end', => debug "^6863-1^ (stderr.on 'end')"
|
|
285
|
-
// process.stdout.on 'end', => debug "^6863-2^ (stdout.on 'end')"
|
|
286
|
-
// debug '^6456^'
|
|
287
|
-
// echo "^4564^ echo to stdout"
|
|
288
|
-
// warn "^4564^ warn to stderr"
|
|
289
|
-
// process.stderr.write "this goes to stderr\n"
|
|
290
|
-
// process.stdout.write "this goes to stdout\n"
|
|
291
|
-
// process.on 'message', ( message ) -> debug "^6863-3^' (process.on 'message'):", rpr message
|
|
292
|
-
// process.on 'warning', ( warning ) -> debug "^6863-3^' (process.on 'warning'):", rpr warning
|
|
293
|
-
/*
|
|
294
|
-
callsite.getThis() - returns the value of this
|
|
295
|
-
callsite.getTypeName() - returns the type of this as a string. This is the name of the function stored in the constructor field of this, if available, otherwise the object's [[Class]] internal property.
|
|
296
|
-
callsite.getFunction() - returns the current function
|
|
297
|
-
callsite.getFunctionName() - returns the name of the current function, typically its name property. If a name property is not available an attempt will be made to try to infer a name from the function's context.
|
|
298
|
-
callsite.getMethodName() - returns the name of the property of this or one of its prototypes that holds the current function
|
|
299
|
-
callsite.getFileName() - if this function was defined in a script returns the name of the script
|
|
300
|
-
callsite.getLineNumber() - if this function was defined in a script returns the current line number
|
|
301
|
-
callsite.getColumnNumber() - if this function was defined in a script returns the current column number
|
|
302
|
-
callsite.getEvalOrigin() - if this function was created using a call to eval returns a CallSite object representing the location where eval was called
|
|
303
|
-
callsite.isToplevel() - is this a toplevel invocation, that is, is this the global object?
|
|
304
|
-
callsite.isEval() - does this call take place in code defined by a call to eval?
|
|
305
|
-
callsite.isNative() - is this call in native V8 code?
|
|
306
|
-
callsite.isConstructor() - is this a constructor c
|
|
307
|
-
*/
|
|
271
|
+
// process.stderr.on 'data', ( data ) => debug "^6863-1^ (stderr.on 'data'):", rpr data
|
|
272
|
+
// process.stdout.on 'data', ( data ) => debug "^6863-2^ (stdout.on 'data'):", rpr data
|
|
273
|
+
// process.stderr.on 'end', => debug "^6863-1^ (stderr.on 'end')"
|
|
274
|
+
// process.stdout.on 'end', => debug "^6863-2^ (stdout.on 'end')"
|
|
275
|
+
// debug '^6456^'
|
|
276
|
+
// echo "^4564^ echo to stdout"
|
|
277
|
+
// warn "^4564^ warn to stderr"
|
|
278
|
+
// process.stderr.write "this goes to stderr\n"
|
|
279
|
+
// process.stdout.write "this goes to stdout\n"
|
|
280
|
+
// process.on 'message', ( message ) -> debug "^6863-3^' (process.on 'message'):", rpr message
|
|
281
|
+
// process.on 'warning', ( warning ) -> debug "^6863-3^' (process.on 'warning'):", rpr warning
|
|
282
|
+
/*
|
|
283
|
+
callsite.getThis() - returns the value of this
|
|
284
|
+
callsite.getTypeName() - returns the type of this as a string. This is the name of the function stored in the constructor field of this, if available, otherwise the object's [[Class]] internal property.
|
|
285
|
+
callsite.getFunction() - returns the current function
|
|
286
|
+
callsite.getFunctionName() - returns the name of the current function, typically its name property. If a name property is not available an attempt will be made to try to infer a name from the function's context.
|
|
287
|
+
callsite.getMethodName() - returns the name of the property of this or one of its prototypes that holds the current function
|
|
288
|
+
callsite.getFileName() - if this function was defined in a script returns the name of the script
|
|
289
|
+
callsite.getLineNumber() - if this function was defined in a script returns the current line number
|
|
290
|
+
callsite.getColumnNumber() - if this function was defined in a script returns the current column number
|
|
291
|
+
callsite.getEvalOrigin() - if this function was created using a call to eval returns a CallSite object representing the location where eval was called
|
|
292
|
+
callsite.isToplevel() - is this a toplevel invocation, that is, is this the global object?
|
|
293
|
+
callsite.isEval() - does this call take place in code defined by a call to eval?
|
|
294
|
+
callsite.isNative() - is this call in native V8 code?
|
|
295
|
+
callsite.isConstructor() - is this a constructor c
|
|
296
|
+
*/
|
|
297
|
+
module.exports = {exit_handler, _exit_handler};
|
|
308
298
|
|
|
309
299
|
}).call(this);
|
|
310
300
|
|
package/lib/main.js.map
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"../src/main.coffee"
|
|
7
7
|
],
|
|
8
8
|
"names": [],
|
|
9
|
-
"mappings": "
|
|
9
|
+
"mappings": "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",
|
|
10
10
|
"sourcesContent": [
|
|
11
|
-
"\n\n'use strict'\n\n\n############################################################################################################\nCND = require 'cnd'\nrpr = CND.rpr\nbadge = 'nodexh'\nlog = CND.get_logger 'plain', badge\ndebug = CND.get_logger 'debug', badge\ninfo = CND.get_logger 'info', badge\nwarn = CND.get_logger 'warn', badge\nalert = CND.get_logger 'alert', badge\nhelp = CND.get_logger 'help', badge\nurge = CND.get_logger 'urge', badge\nwhisper = CND.get_logger 'whisper', badge\necho = CND.echo.bind CND\n# stackman = ( require 'stackman' )()\nget_error_callsites = require 'error-callsites'\nload_source_map = ( require 'util' ).promisify ( require 'load-source-map' )\nFS = require 'fs'\nPATH = require 'path'\n{ red\n green\n steel\n grey\n cyan\n bold\n gold\n white\n yellow\n reverse\n underline\n bold } = CND\n# types = new ( require '../../intertype' ).Intertype()\n# { isa } = types.export()\n\n#-----------------------------------------------------------------------------------------------------------\nwrite_to_stderr = ( P... ) -> process.stderr.write ' ' + CND.pen P...\n\n#-----------------------------------------------------------------------------------------------------------\nfetch_mapped_location = ( path, linenr, colnr ) ->\n try\n sourcemap = await load_source_map path\n smp = sourcemap.originalPositionFor { line: linenr, column: colnr, }\n catch error\n # warn '^7763-3^', \"!!!!!!!!!!!!!!!!!\", { path, }\n # warn '^7763-3^', \"!!!!!!!!!!!!!!!!!\", error.message\n return { path, linenr, colnr, }\n #.........................................................................................................\n if ( smp? ) and ( smp.source? ) and ( smp.source isnt '' ) and ( smp.line? ) and ( smp.column? )\n mapped_path = PATH.join ( PATH.dirname path ), smp.source\n return { path: mapped_path, linenr: smp.line, colnr: smp.column, }\n #.........................................................................................................\n return { path, linenr, colnr, }\n\n#-----------------------------------------------------------------------------------------------------------\nget_context = ( path, linenr, colnr, width ) ->\n try return ( _get_context path, linenr, colnr, width ) catch error\n throw error unless error.code is 'ENOENT'\n # return [ ( red \"!!! #{rpr error.message} !!!\" ), ]\n return []\n\n#-----------------------------------------------------------------------------------------------------------\n_get_context = ( path, linenr, colnr, width ) ->\n lines = ( FS.readFileSync path, { encoding: 'utf-8' } ).split '\\n'\n delta = 1\n coldelta = 5\n effect = reverse\n first_idx = Math.max 0, linenr - 1 - delta\n last_idx = Math.min lines.length - 1, linenr - 1 + delta\n R = []\n for line, idx in lines[ first_idx .. last_idx ]\n this_linenr = first_idx + idx + 1\n this_linenr_txt = ( this_linenr.toString().padStart 4 ) + '│ '\n if this_linenr isnt linenr\n ### TAINT should adjust overlong context lines as well ###\n R.push \"#{grey this_linenr_txt}#{grey line}\"\n continue\n ### TAINT perform line length adjustment, hiliting in dedicated method ###\n c0 = colnr - 1\n c1 = colnr + coldelta\n hilite = effect line[ c0 ... c1 ]\n line = line[ ... c0 ] + hilite + line[ c1 .. ]\n if c1 > width\n width2 = Math.floor width / 2\n line = '... ' + line[ c1 - width2 .. c1 + hilite.length - ( c1 - c0 ) + width2 ] + ' ...'\n else\n line = line[ .. width ]\n R.push \"#{grey this_linenr_txt}#{cyan line}\"\n # R = R.join '\\n'\n return R\n\n#-----------------------------------------------------------------------------------------------------------\nshow_error_with_source_context = ( error, headline ) ->\n ### From https://github.com/watson/stackman#gotchas: \"This module works because V8 (the JavaScript engine\n behind Node.js) allows us to hook into the stack trace generator function before that stack trace is\n generated. It's triggered by accessing the .stack property on the Error object, so please don't do\n that before parsing the error to stackman, else this will not work!\" ###\n alert '^77765-1^', reverse bold headline\n arrowhead = white '▲'\n arrowshaft = white '│'\n width = process.stdout.columns\n callsites = get_error_callsites error\n #.........................................................................................................\n if ( not callsites? ) or ( callsites.length is 0 )\n write_to_stderr CND.red CND.reverse \"^455756^ error has no associated callsites:\"\n write_to_stderr CND.red CND.reverse rpr error\n return null\n #.........................................................................................................\n callsites.reverse()\n #.........................................................................................................\n for callsite in callsites\n path = callsite.getFileName()\n #.......................................................................................................\n unless path?\n write_to_stderr grey '—'.repeat 108\n continue\n #.......................................................................................................\n linenr = callsite.getLineNumber()\n colnr = callsite.getColumnNumber()\n #.......................................................................................................\n if ( path.startsWith 'node:internal/' ) or ( path.startsWith 'internal/' )\n write_to_stderr arrowhead, grey \"#{path} @ #{linenr},#{colnr}\"\n continue\n #.......................................................................................................\n # write_to_stderr()\n # write_to_stderr steel bold reverse ( \"#{relpath} ##{linenr}:\" ).padEnd 108\n fname = callsite.getFunctionName() ? callsite.getMethodName() ? null\n { path\n linenr\n colnr } = await fetch_mapped_location path, linenr, colnr\n relpath = PATH.relative process.cwd(), path\n if fname?\n ### TAINT use proper methods to format with multiple colors ###\n fname_txt = steel fname\n width1 = width + ( fname_txt.length - fname.length )\n write_to_stderr arrowhead, gold ( \"#{relpath} @ #{linenr},#{colnr}: #{fname_txt}() \\x1b[38;05;234m\".padEnd width1, '—' )\n else\n write_to_stderr arrowhead, gold ( \"#{relpath} @ #{linenr},#{colnr}: \\x1b[38;05;234m\".padEnd width, '—' )\n for context_line in await get_context path, linenr, colnr, width\n write_to_stderr arrowshaft, context_line\n alert '^77765-2^', reverse bold headline\n # urge \"^94843^ error.stack:\", rpr error.stack\n # urge \"^94843^ error.message:\", rpr error.message\n # urge \"^94843^ error.code:\", rpr error.code\n # urge \"^94843^ error.name:\", rpr error.name\n # urge \"^94843^ error.type:\", rpr error.type\n # urge \"^94843^ error.toString():\", rpr error.toString()\n # urge \"^94843^ error:\", rpr error\n # CATALOGUING = require '../../multimix/lib/cataloguing'\n # urge \"^94843^\", ( CATALOGUING.all_keys_of error )\n return null\n\n#-----------------------------------------------------------------------------------------------------------\nexit_handler = ( error, origin ) ->\n ### TAINT origin never used ###\n # show_stacktracey error\n # debug '^4488^', error\n # debug '^4488^', await origin\n # return null\n type = error.code ? error.name ? 'EXCEPTION'\n message = \" #{type}: \" + ( error?.message ? \"an unrecoverable condition occurred\" )\n await show_error_with_source_context error, message\n setImmediate ( -> process.exit 111 )\n return null\n\n############################################################################################################\n############################################################################################################\n############################################################################################################\n\nget_stacktracey = ( error ) ->\n StackTracey = require 'stacktracey'\n stack = ( new StackTracey error ).withSources()\n # stack = stack.clean()\n R = []\n for idx in [ stack.items.length - 1 .. 0 ] by -1\n d = stack.items[ idx ]\n # debug '^2798^', ( k for k of d )\n s =\n # target_path: d.file\n relpath: d.fileRelative # fileShort\n native: d.native\n # is_nodejs: d.native\n is_other: d.thirdParty\n line: d.line\n column: d.column\n source: d.sourceLine\n error: d.error\n # for k in [ 'sourceLine', 'native', 'file', 'line', 'column', 'calleeShort', 'fileRelative', 'fileShort', 'fileName', 'thirdParty', 'name',]\n # debug k, rpr d[ k ]\n R.push s\n # info '\\n' + stack.asTable()\n return R\n\nshow_stacktracey = ( error ) ->\n for d in get_stacktracey error\n echo CND.steel '^44872^ ' + \"#{d.relpath} @ #{d.line}:#{d.column}\"\n ### NOTE errors:\n ENOENT: no such file or directory\n EISDIR: illegal operation on a directory, read\n 'Cannot read property 'originalPositionFor' of undefined'\n ###\n if d.error? then echo CND.red '^44873^ ' + ( d.error.message ? \"an error occurred\" )\n else echo CND.yellow '^44874^ ' + \"#{rpr d.source[ .. 100 ]}\"\n return null\n\n############################################################################################################\n############################################################################################################\n############################################################################################################\n\n\n############################################################################################################\nunless global[ Symbol.for 'cnd-exception-handler' ]?\n null\n global[ Symbol.for 'cnd-exception-handler' ] = true\n process.once 'uncaughtException', exit_handler\n process.once 'unhandledRejection', exit_handler\n\n # do =>\n # process.stderr.on 'data', ( data ) => debug \"^6863-1^ (stderr.on 'data'):\", rpr data\n # process.stdout.on 'data', ( data ) => debug \"^6863-2^ (stdout.on 'data'):\", rpr data\n # process.stderr.on 'end', => debug \"^6863-1^ (stderr.on 'end')\"\n # process.stdout.on 'end', => debug \"^6863-2^ (stdout.on 'end')\"\n # debug '^6456^'\n # echo \"^4564^ echo to stdout\"\n # warn \"^4564^ warn to stderr\"\n # process.stderr.write \"this goes to stderr\\n\"\n # process.stdout.write \"this goes to stdout\\n\"\n # process.on 'message', ( message ) -> debug \"^6863-3^' (process.on 'message'):\", rpr message\n # process.on 'warning', ( warning ) -> debug \"^6863-3^' (process.on 'warning'):\", rpr warning\n###\ncallsite.getThis() - returns the value of this\ncallsite.getTypeName() - returns the type of this as a string. This is the name of the function stored in the constructor field of this, if available, otherwise the object's [[Class]] internal property.\ncallsite.getFunction() - returns the current function\ncallsite.getFunctionName() - returns the name of the current function, typically its name property. If a name property is not available an attempt will be made to try to infer a name from the function's context.\ncallsite.getMethodName() - returns the name of the property of this or one of its prototypes that holds the current function\ncallsite.getFileName() - if this function was defined in a script returns the name of the script\ncallsite.getLineNumber() - if this function was defined in a script returns the current line number\ncallsite.getColumnNumber() - if this function was defined in a script returns the current column number\ncallsite.getEvalOrigin() - if this function was created using a call to eval returns a CallSite object representing the location where eval was called\ncallsite.isToplevel() - is this a toplevel invocation, that is, is this the global object?\ncallsite.isEval() - does this call take place in code defined by a call to eval?\ncallsite.isNative() - is this call in native V8 code?\ncallsite.isConstructor() - is this a constructor c\n###\n\n"
|
|
11
|
+
"\n'use strict'\n\n\n############################################################################################################\nGUY = require 'guy'\n{ alert\n debug\n help\n info\n plain\n praise\n urge\n warn\n whisper } = GUY.trm.get_loggers 'NODEXH'\n{ rpr\n inspect\n echo\n log } = GUY.trm\ntypes = new ( require 'intertype' ).Intertype()\n{ isa\n type_of } = types\n# stackman = ( require 'stackman' )()\nget_error_callsites = require 'error-callsites'\nload_source_map = ( require 'util' ).promisify ( require 'load-source-map' )\nFS = require 'fs'\nPATH = require 'path'\n{ red\n green\n steel\n grey\n cyan\n bold\n gold\n white\n yellow\n reverse\n underline\n bold } = GUY.trm\n\n#-----------------------------------------------------------------------------------------------------------\nwrite_to_stderr = ( P... ) -> process.stderr.write ' ' + ( GUY.trm.pen P... ) + '\\n'\n\n#-----------------------------------------------------------------------------------------------------------\nfetch_mapped_location = ( path, linenr, colnr ) ->\n try\n sourcemap = await load_source_map path\n smp = sourcemap.originalPositionFor { line: linenr, column: colnr, }\n catch error\n # warn '^7763-3^', \"!!!!!!!!!!!!!!!!!\", { path, }\n # warn '^7763-3^', \"!!!!!!!!!!!!!!!!!\", error.message\n return { path, linenr, colnr, }\n #.........................................................................................................\n if ( smp? ) and ( smp.source? ) and ( smp.source isnt '' ) and ( smp.line? ) and ( smp.column? )\n mapped_path = PATH.join ( PATH.dirname path ), smp.source\n return { path: mapped_path, linenr: smp.line, colnr: smp.column, }\n #.........................................................................................................\n return { path, linenr, colnr, }\n\n#-----------------------------------------------------------------------------------------------------------\nget_context = ( path, linenr, colnr, width ) ->\n try return ( _get_context path, linenr, colnr, width ) catch error\n throw error unless error.code is 'ENOENT'\n # return [ ( red \"!!! #{rpr error.message} !!!\" ), ]\n return []\n\n#-----------------------------------------------------------------------------------------------------------\n_get_context = ( path, linenr, colnr, width ) ->\n lines = ( FS.readFileSync path, { encoding: 'utf-8' } ).split '\\n'\n delta = 1\n coldelta = 5\n effect = reverse\n first_idx = Math.max 0, linenr - 1 - delta\n last_idx = Math.min lines.length - 1, linenr - 1 + delta\n R = []\n for line, idx in lines[ first_idx .. last_idx ]\n this_linenr = first_idx + idx + 1\n this_linenr_txt = ( this_linenr.toString().padStart 4 ) + '│ '\n if this_linenr isnt linenr\n ### TAINT should adjust overlong context lines as well ###\n R.push \"#{grey this_linenr_txt}#{grey line}\"\n continue\n ### TAINT perform line length adjustment, hiliting in dedicated method ###\n c0 = colnr - 1\n c1 = colnr + coldelta\n hilite = effect line[ c0 ... c1 ]\n line = line[ ... c0 ] + hilite + line[ c1 .. ]\n if c1 > width\n width2 = Math.floor width / 2\n line = '... ' + line[ c1 - width2 .. c1 + hilite.length - ( c1 - c0 ) + width2 ] + ' ...'\n else\n line = line[ .. width ]\n R.push \"#{grey this_linenr_txt}#{cyan line}\"\n # R = R.join '\\n'\n return R\n\n#-----------------------------------------------------------------------------------------------------------\nshow_error_with_source_context = ( error, headline ) ->\n ### From https://github.com/watson/stackman#gotchas: \"This module works because V8 (the JavaScript engine\n behind Node.js) allows us to hook into the stack trace generator function before that stack trace is\n generated. It's triggered by accessing the .stack property on the Error object, so please don't do\n that before parsing the error to stackman, else this will not work!\" ###\n alert '^77765-1^', reverse bold headline\n arrowhead = white '▲'\n arrowshaft = white '│'\n width = process.stdout.columns\n callsites = get_error_callsites error\n #.........................................................................................................\n if ( not callsites? ) or ( callsites.length is 0 )\n write_to_stderr red reverse \"^455756^ error has no associated callsites:\"\n write_to_stderr red reverse rpr error\n return null\n #.........................................................................................................\n callsites.reverse()\n #.........................................................................................................\n for callsite in callsites\n path = callsite.getFileName()\n #.......................................................................................................\n unless path?\n write_to_stderr grey '—'.repeat 108\n continue\n #.......................................................................................................\n linenr = callsite.getLineNumber()\n colnr = callsite.getColumnNumber()\n #.......................................................................................................\n if ( path.startsWith 'node:internal/' ) or ( path.startsWith 'internal/' )\n write_to_stderr arrowhead, grey \"#{path} @ #{linenr},#{colnr}\"\n continue\n #.......................................................................................................\n # write_to_stderr()\n # write_to_stderr steel bold reverse ( \"#{relpath} ##{linenr}:\" ).padEnd 108\n fname = callsite.getFunctionName() ? callsite.getMethodName() ? null\n { path\n linenr\n colnr } = await fetch_mapped_location path, linenr, colnr\n relpath = PATH.relative process.cwd(), path\n if fname?\n ### TAINT use proper methods to format with multiple colors ###\n fname_txt = steel fname\n width1 = width + ( fname_txt.length - fname.length )\n write_to_stderr arrowhead, gold ( \"#{relpath} @ #{linenr},#{colnr}: #{fname_txt}() \\x1b[38;05;234m\".padEnd width1, '—' )\n else\n write_to_stderr arrowhead, gold ( \"#{relpath} @ #{linenr},#{colnr}: \\x1b[38;05;234m\".padEnd width, '—' )\n for context_line in await get_context path, linenr, colnr, width\n write_to_stderr arrowshaft, context_line\n alert '^77765-2^', reverse bold headline\n # urge \"^94843^ error.stack:\", rpr error.stack\n # urge \"^94843^ error.message:\", rpr error.message\n # urge \"^94843^ error.code:\", rpr error.code\n # urge \"^94843^ error.name:\", rpr error.name\n # urge \"^94843^ error.type:\", rpr error.type\n # urge \"^94843^ error.toString():\", rpr error.toString()\n # urge \"^94843^ error:\", rpr error\n # CATALOGUING = require '../../multimix/lib/cataloguing'\n # urge \"^94843^\", ( CATALOGUING.all_keys_of error )\n return null\n\n#-----------------------------------------------------------------------------------------------------------\n_exit_handler = ( error, origin ) ->\n ### TAINT origin never used ###\n # show_stacktracey error\n # debug '^4488^', error\n # debug '^4488^', await origin\n # return null\n type = error.code ? error.name ? 'EXCEPTION'\n message = \" #{type}: \" + ( error?.message ? \"an unrecoverable condition occurred\" )\n await show_error_with_source_context error, message\n return null\n\n#-----------------------------------------------------------------------------------------------------------\nexit_handler = ( error, origin ) ->\n await _exit_handler error, origin\n setImmediate ( -> process.exit 111 )\n return null\n\n############################################################################################################\n############################################################################################################\n############################################################################################################\n\nget_stacktracey = ( error ) ->\n StackTracey = require 'stacktracey'\n stack = ( new StackTracey error ).withSources()\n # stack = stack.clean()\n R = []\n for idx in [ stack.items.length - 1 .. 0 ] by -1\n d = stack.items[ idx ]\n # debug '^2798^', ( k for k of d )\n s =\n # target_path: d.file\n relpath: d.fileRelative # fileShort\n native: d.native\n # is_nodejs: d.native\n is_other: d.thirdParty\n line: d.line\n column: d.column\n source: d.sourceLine\n error: d.error\n # for k in [ 'sourceLine', 'native', 'file', 'line', 'column', 'calleeShort', 'fileRelative', 'fileShort', 'fileName', 'thirdParty', 'name',]\n # debug k, rpr d[ k ]\n R.push s\n # info '\\n' + stack.asTable()\n return R\n\nshow_stacktracey = ( error ) ->\n for d in get_stacktracey error\n echo steel '^44872^ ' + \"#{d.relpath} @ #{d.line}:#{d.column}\"\n ### NOTE errors:\n ENOENT: no such file or directory\n EISDIR: illegal operation on a directory, read\n 'Cannot read property 'originalPositionFor' of undefined'\n ###\n if d.error? then echo red '^44873^ ' + ( d.error.message ? \"an error occurred\" )\n else echo yellow '^44874^ ' + \"#{rpr d.source[ .. 100 ]}\"\n return null\n\n############################################################################################################\n############################################################################################################\n############################################################################################################\n\n\n############################################################################################################\nunless global[ Symbol.for 'cnd-exception-handler' ]?\n null\n global[ Symbol.for 'cnd-exception-handler' ] = true\n process.once 'uncaughtException', exit_handler\n process.once 'unhandledRejection', exit_handler\n\n # do =>\n # process.stderr.on 'data', ( data ) => debug \"^6863-1^ (stderr.on 'data'):\", rpr data\n # process.stdout.on 'data', ( data ) => debug \"^6863-2^ (stdout.on 'data'):\", rpr data\n # process.stderr.on 'end', => debug \"^6863-1^ (stderr.on 'end')\"\n # process.stdout.on 'end', => debug \"^6863-2^ (stdout.on 'end')\"\n # debug '^6456^'\n # echo \"^4564^ echo to stdout\"\n # warn \"^4564^ warn to stderr\"\n # process.stderr.write \"this goes to stderr\\n\"\n # process.stdout.write \"this goes to stdout\\n\"\n # process.on 'message', ( message ) -> debug \"^6863-3^' (process.on 'message'):\", rpr message\n # process.on 'warning', ( warning ) -> debug \"^6863-3^' (process.on 'warning'):\", rpr warning\n###\ncallsite.getThis() - returns the value of this\ncallsite.getTypeName() - returns the type of this as a string. This is the name of the function stored in the constructor field of this, if available, otherwise the object's [[Class]] internal property.\ncallsite.getFunction() - returns the current function\ncallsite.getFunctionName() - returns the name of the current function, typically its name property. If a name property is not available an attempt will be made to try to infer a name from the function's context.\ncallsite.getMethodName() - returns the name of the property of this or one of its prototypes that holds the current function\ncallsite.getFileName() - if this function was defined in a script returns the name of the script\ncallsite.getLineNumber() - if this function was defined in a script returns the current line number\ncallsite.getColumnNumber() - if this function was defined in a script returns the current column number\ncallsite.getEvalOrigin() - if this function was created using a call to eval returns a CallSite object representing the location where eval was called\ncallsite.isToplevel() - is this a toplevel invocation, that is, is this the global object?\ncallsite.isEval() - does this call take place in code defined by a call to eval?\ncallsite.isNative() - is this call in native V8 code?\ncallsite.isConstructor() - is this a constructor c\n###\n\nmodule.exports = { exit_handler, _exit_handler, }\n"
|
|
12
12
|
]
|
|
13
13
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nodexh",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "a wrapper around the `node` executable for better stacktraces with sourcemaps, sourcecode excerpts",
|
|
5
5
|
"main": "lib/main.js",
|
|
6
6
|
"bin": {
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
},
|
|
24
24
|
"homepage": "https://github.com/loveencounterflow/nodexh",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"cnd": "^9.1.0",
|
|
27
26
|
"error-callsites": "^2.0.3",
|
|
28
|
-
"
|
|
27
|
+
"guy": "^12.3.0",
|
|
28
|
+
"intertype": "^0.111.0",
|
|
29
|
+
"load-source-map": "3.0.1",
|
|
29
30
|
"stacktracey": "^2.0.14"
|
|
30
31
|
},
|
|
31
32
|
"scripts": {
|
|
32
33
|
"build": "coffee --map -o lib -c src"
|
|
33
|
-
}
|
|
34
|
-
"readme": "\n\n# NodeXH: NodeJS With a Better Exception Handler\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*\n\n- [What It Is](#what-it-is)\n- [How to Install](#how-to-install)\n- [How to Use](#how-to-use)\n- [What to Expect](#what-to-expect)\n- [Related](#related)\n- [To Do](#to-do)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n## What It Is\n\nNodeXH is a drop-in wrapper for the NodeJS executable hat provides better stacktraces.\n\n## How to Install\n\n`npm install -g nodexh`\n\n## How to Use\n\nUse `nodexh path/to/file.js` instead of `node path/to/file.js`, and you're good to go.\n\n## What to Expect\n\n* Stack trace items will be reversed, so most recent calls will be shown *last*, i.e. also closest to where\n the cursor of your terminal is.\n* Stack traces will show source contexts (3 lines by default) except where files can not be opened or are\n NodeJS internals.\n* Source code shown will honor sourcemaps, which is great when you're using the likes of CoffeeScript or\n TypeScript.\n* The error message will be repeated to avoid having to scroll up when stack traces get longer.\n* Colors!\n\n## Related\n\n* https://github.com/mozilla/source-map/\n* https://sokra.github.io/source-map-visualization/\n* https://medium.com/@nodejs/source-maps-in-node-js-482872b56116:\n * \"In v13.7.0 a public API was introduced for interacting with source\n maps.\"—[link](https://nodejs.org/dist/latest-v14.x/docs/api/all.html#modules_source_map_v3_support)\n * \"You can start using Node.js’ source map functionality today: make sure you have an up-to-date version\n of Node.js installed, and run your programs with the flag --enable-source-maps.\"\n\n## To Do\n\n* [ ] Add `error.name`, `error.code`; where `node` reports `TypeError: TEMPLATES.main_2 is not a function`,\n `nodexh` only reports `EXCEPTION: TEMPLATES.main_2 is not a function`\n* [ ] visually indicate spot of error (e.g. by reversing)\n* [ ] fix async stacktraces (probably not yet handled correctly; might be issue with `stackman`?)\n* [ ] consider [utf8ize-sourcemaps](https://github.com/twada/utf8ize-sourcemaps) in case there should be\n problems w/ 32bit characters\n* [ ] truncate long lines in context\n* [ ] offer capabilities of NodeXH as API so applications (such as test libraries) can easily retrieve\n source code, display source lines with contexts\n\n\n\n"
|
|
34
|
+
}
|
|
35
35
|
}
|
package/src/main.coffee
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
|
|
2
|
-
|
|
3
2
|
'use strict'
|
|
4
3
|
|
|
5
4
|
|
|
6
5
|
############################################################################################################
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
GUY = require 'guy'
|
|
7
|
+
{ alert
|
|
8
|
+
debug
|
|
9
|
+
help
|
|
10
|
+
info
|
|
11
|
+
plain
|
|
12
|
+
praise
|
|
13
|
+
urge
|
|
14
|
+
warn
|
|
15
|
+
whisper } = GUY.trm.get_loggers 'NODEXH'
|
|
16
|
+
{ rpr
|
|
17
|
+
inspect
|
|
18
|
+
echo
|
|
19
|
+
log } = GUY.trm
|
|
20
|
+
types = new ( require 'intertype' ).Intertype()
|
|
21
|
+
{ isa
|
|
22
|
+
type_of } = types
|
|
19
23
|
# stackman = ( require 'stackman' )()
|
|
20
24
|
get_error_callsites = require 'error-callsites'
|
|
21
25
|
load_source_map = ( require 'util' ).promisify ( require 'load-source-map' )
|
|
@@ -32,12 +36,10 @@ PATH = require 'path'
|
|
|
32
36
|
yellow
|
|
33
37
|
reverse
|
|
34
38
|
underline
|
|
35
|
-
bold } =
|
|
36
|
-
# types = new ( require '../../intertype' ).Intertype()
|
|
37
|
-
# { isa } = types.export()
|
|
39
|
+
bold } = GUY.trm
|
|
38
40
|
|
|
39
41
|
#-----------------------------------------------------------------------------------------------------------
|
|
40
|
-
write_to_stderr = ( P... ) -> process.stderr.write ' ' +
|
|
42
|
+
write_to_stderr = ( P... ) -> process.stderr.write ' ' + ( GUY.trm.pen P... ) + '\n'
|
|
41
43
|
|
|
42
44
|
#-----------------------------------------------------------------------------------------------------------
|
|
43
45
|
fetch_mapped_location = ( path, linenr, colnr ) ->
|
|
@@ -105,8 +107,8 @@ show_error_with_source_context = ( error, headline ) ->
|
|
|
105
107
|
callsites = get_error_callsites error
|
|
106
108
|
#.........................................................................................................
|
|
107
109
|
if ( not callsites? ) or ( callsites.length is 0 )
|
|
108
|
-
write_to_stderr
|
|
109
|
-
write_to_stderr
|
|
110
|
+
write_to_stderr red reverse "^455756^ error has no associated callsites:"
|
|
111
|
+
write_to_stderr red reverse rpr error
|
|
110
112
|
return null
|
|
111
113
|
#.........................................................................................................
|
|
112
114
|
callsites.reverse()
|
|
@@ -154,7 +156,7 @@ show_error_with_source_context = ( error, headline ) ->
|
|
|
154
156
|
return null
|
|
155
157
|
|
|
156
158
|
#-----------------------------------------------------------------------------------------------------------
|
|
157
|
-
|
|
159
|
+
_exit_handler = ( error, origin ) ->
|
|
158
160
|
### TAINT origin never used ###
|
|
159
161
|
# show_stacktracey error
|
|
160
162
|
# debug '^4488^', error
|
|
@@ -163,6 +165,11 @@ exit_handler = ( error, origin ) ->
|
|
|
163
165
|
type = error.code ? error.name ? 'EXCEPTION'
|
|
164
166
|
message = " #{type}: " + ( error?.message ? "an unrecoverable condition occurred" )
|
|
165
167
|
await show_error_with_source_context error, message
|
|
168
|
+
return null
|
|
169
|
+
|
|
170
|
+
#-----------------------------------------------------------------------------------------------------------
|
|
171
|
+
exit_handler = ( error, origin ) ->
|
|
172
|
+
await _exit_handler error, origin
|
|
166
173
|
setImmediate ( -> process.exit 111 )
|
|
167
174
|
return null
|
|
168
175
|
|
|
@@ -196,14 +203,14 @@ get_stacktracey = ( error ) ->
|
|
|
196
203
|
|
|
197
204
|
show_stacktracey = ( error ) ->
|
|
198
205
|
for d in get_stacktracey error
|
|
199
|
-
echo
|
|
206
|
+
echo steel '^44872^ ' + "#{d.relpath} @ #{d.line}:#{d.column}"
|
|
200
207
|
### NOTE errors:
|
|
201
208
|
ENOENT: no such file or directory
|
|
202
209
|
EISDIR: illegal operation on a directory, read
|
|
203
210
|
'Cannot read property 'originalPositionFor' of undefined'
|
|
204
211
|
###
|
|
205
|
-
if d.error? then echo
|
|
206
|
-
else echo
|
|
212
|
+
if d.error? then echo red '^44873^ ' + ( d.error.message ? "an error occurred" )
|
|
213
|
+
else echo yellow '^44874^ ' + "#{rpr d.source[ .. 100 ]}"
|
|
207
214
|
return null
|
|
208
215
|
|
|
209
216
|
############################################################################################################
|
|
@@ -246,3 +253,4 @@ callsite.isNative() - is this call in native V8 code?
|
|
|
246
253
|
callsite.isConstructor() - is this a constructor c
|
|
247
254
|
###
|
|
248
255
|
|
|
256
|
+
module.exports = { exit_handler, _exit_handler, }
|
package/pnpm-lock.yaml
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
lockfileVersion: 5.3
|
|
2
|
-
|
|
3
|
-
specifiers:
|
|
4
|
-
cnd: ^9.1.0
|
|
5
|
-
error-callsites: ^2.0.3
|
|
6
|
-
load-source-map: ^2.0.0
|
|
7
|
-
stacktracey: ^2.0.14
|
|
8
|
-
|
|
9
|
-
dependencies:
|
|
10
|
-
cnd: 9.2.2
|
|
11
|
-
error-callsites: 2.0.4
|
|
12
|
-
load-source-map: 2.0.0
|
|
13
|
-
stacktracey: 2.1.8
|
|
14
|
-
|
|
15
|
-
packages:
|
|
16
|
-
|
|
17
|
-
/as-table/1.0.55:
|
|
18
|
-
resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==}
|
|
19
|
-
dependencies:
|
|
20
|
-
printable-characters: 1.0.42
|
|
21
|
-
dev: false
|
|
22
|
-
|
|
23
|
-
/cnd/9.2.2:
|
|
24
|
-
resolution: {integrity: sha512-F+/H+7luk4fZkvN0+MT0I2nwn80YM/EtfMttNUFxENR50XJH4g0KgQevzeyEJ8B6t6l8Tb4Xti6QAksa8DmePA==}
|
|
25
|
-
hasBin: true
|
|
26
|
-
dependencies:
|
|
27
|
-
jsx-number-format: 0.1.4
|
|
28
|
-
dev: false
|
|
29
|
-
|
|
30
|
-
/data-uri-to-buffer/2.0.2:
|
|
31
|
-
resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
|
|
32
|
-
dev: false
|
|
33
|
-
|
|
34
|
-
/error-callsites/2.0.4:
|
|
35
|
-
resolution: {integrity: sha512-V877Ch4FC4FN178fDK1fsrHN4I1YQIBdtjKrHh3BUHMnh3SMvwUVrqkaOgDpUuevgSNna0RBq6Ox9SGlxYrigA==}
|
|
36
|
-
engines: {node: '>=6.x'}
|
|
37
|
-
dev: false
|
|
38
|
-
|
|
39
|
-
/get-source/2.0.12:
|
|
40
|
-
resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==}
|
|
41
|
-
dependencies:
|
|
42
|
-
data-uri-to-buffer: 2.0.2
|
|
43
|
-
source-map: 0.6.1
|
|
44
|
-
dev: false
|
|
45
|
-
|
|
46
|
-
/jsx-number-format/0.1.4:
|
|
47
|
-
resolution: {integrity: sha512-uPc/Q90XqZoRE7Cu1OLFQB2cSrA2Dy8+okzPOtML8vbagNFDSipbndIPme+q0odBjEhL+wf3WH3Wo52was4Tsg==}
|
|
48
|
-
dev: false
|
|
49
|
-
|
|
50
|
-
/load-source-map/2.0.0:
|
|
51
|
-
resolution: {integrity: sha512-QNZzJ2wMrTmCdeobMuMNEXHN1QGk8HG6louEkzD/zwQ7EU2RarrzlhQ4GnUYEFzLhK+Jq7IGyF/qy+XYBSO7AQ==}
|
|
52
|
-
engines: {node: '>= 8'}
|
|
53
|
-
dependencies:
|
|
54
|
-
source-map: 0.7.3
|
|
55
|
-
dev: false
|
|
56
|
-
|
|
57
|
-
/printable-characters/1.0.42:
|
|
58
|
-
resolution: {integrity: sha1-Pxjpd6m9jrN/zE/1ZZ176Qhos9g=}
|
|
59
|
-
dev: false
|
|
60
|
-
|
|
61
|
-
/source-map/0.6.1:
|
|
62
|
-
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
|
|
63
|
-
engines: {node: '>=0.10.0'}
|
|
64
|
-
dev: false
|
|
65
|
-
|
|
66
|
-
/source-map/0.7.3:
|
|
67
|
-
resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==}
|
|
68
|
-
engines: {node: '>= 8'}
|
|
69
|
-
dev: false
|
|
70
|
-
|
|
71
|
-
/stacktracey/2.1.8:
|
|
72
|
-
resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==}
|
|
73
|
-
dependencies:
|
|
74
|
-
as-table: 1.0.55
|
|
75
|
-
get-source: 2.0.12
|
|
76
|
-
dev: false
|