nodexh 2.1.1 → 2.2.1
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 +18 -137
- package/lib/main.js.map +2 -2
- package/package.json +2 -2
- package/src/main.coffee +19 -113
- package/pnpm-lock.yaml +0 -105
package/lib/main.js
CHANGED
|
@@ -1,33 +1,14 @@
|
|
|
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, gold, green, grey, inspect, load_source_map, log, red, reverse, rpr, show_error_with_source_context, steel, underline, white, write_to_stderr, yellow;
|
|
4
4
|
|
|
5
5
|
//###########################################################################################################
|
|
6
|
-
|
|
6
|
+
GUY = require('guy');
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
({alert, debug} = GUY.trm.get_loggers('NODEXH'));
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
({rpr, inspect, echo, log} = GUY.trm);
|
|
11
11
|
|
|
12
|
-
log = CND.get_logger('plain', badge);
|
|
13
|
-
|
|
14
|
-
debug = CND.get_logger('debug', badge);
|
|
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);
|
|
29
|
-
|
|
30
|
-
// stackman = ( require 'stackman' )()
|
|
31
12
|
get_error_callsites = require('error-callsites');
|
|
32
13
|
|
|
33
14
|
load_source_map = (require('util')).promisify(require('load-source-map'));
|
|
@@ -36,14 +17,11 @@
|
|
|
36
17
|
|
|
37
18
|
PATH = require('path');
|
|
38
19
|
|
|
39
|
-
({red, green, steel, grey, cyan, bold, gold, white, yellow, reverse, underline, bold} =
|
|
40
|
-
|
|
41
|
-
// types = new ( require '../../intertype' ).Intertype()
|
|
42
|
-
// { isa } = types.export()
|
|
20
|
+
({red, green, steel, grey, cyan, bold, gold, white, yellow, reverse, underline, bold} = GUY.trm);
|
|
43
21
|
|
|
44
22
|
//-----------------------------------------------------------------------------------------------------------
|
|
45
23
|
write_to_stderr = function(...P) {
|
|
46
|
-
return process.stderr.write(' ' +
|
|
24
|
+
return process.stderr.write(' ' + (GUY.trm.pen(...P)) + '\n');
|
|
47
25
|
};
|
|
48
26
|
|
|
49
27
|
//-----------------------------------------------------------------------------------------------------------
|
|
@@ -57,8 +35,6 @@
|
|
|
57
35
|
});
|
|
58
36
|
} catch (error1) {
|
|
59
37
|
error = error1;
|
|
60
|
-
// warn '^7763-3^', "!!!!!!!!!!!!!!!!!", { path, }
|
|
61
|
-
// warn '^7763-3^', "!!!!!!!!!!!!!!!!!", error.message
|
|
62
38
|
return {path, linenr, colnr};
|
|
63
39
|
}
|
|
64
40
|
//.........................................................................................................
|
|
@@ -89,7 +65,6 @@
|
|
|
89
65
|
};
|
|
90
66
|
|
|
91
67
|
//-----------------------------------------------------------------------------------------------------------
|
|
92
|
-
// return [ ( red "!!! #{rpr error.message} !!!" ), ]
|
|
93
68
|
_get_context = function(path, linenr, colnr, width) {
|
|
94
69
|
/* TAINT perform line length adjustment, hiliting in dedicated method */
|
|
95
70
|
var R, c0, c1, coldelta, delta, effect, first_idx, hilite, i, idx, last_idx, len, line, lines, ref, this_linenr, this_linenr_txt, width2;
|
|
@@ -124,7 +99,6 @@
|
|
|
124
99
|
}
|
|
125
100
|
R.push(`${grey(this_linenr_txt)}${cyan(line)}`);
|
|
126
101
|
}
|
|
127
|
-
// R = R.join '\n'
|
|
128
102
|
return R;
|
|
129
103
|
};
|
|
130
104
|
|
|
@@ -132,10 +106,6 @@
|
|
|
132
106
|
show_error_with_source_context = async function(error, headline) {
|
|
133
107
|
/* TAINT use proper methods to format with multiple colors */
|
|
134
108
|
var arrowhead, arrowshaft, callsite, callsites, colnr, context_line, fname, fname_txt, i, j, len, len1, linenr, path, ref, ref1, ref2, relpath, width, width1;
|
|
135
|
-
/* From https://github.com/watson/stackman#gotchas: "This module works because V8 (the JavaScript engine
|
|
136
|
-
behind Node.js) allows us to hook into the stack trace generator function before that stack trace is
|
|
137
|
-
generated. It's triggered by accessing the .stack property on the Error object, so please don't do
|
|
138
|
-
that before parsing the error to stackman, else this will not work!" */
|
|
139
109
|
alert('^77765-1^', reverse(bold(headline)));
|
|
140
110
|
arrowhead = white('▲');
|
|
141
111
|
arrowshaft = white('│');
|
|
@@ -143,8 +113,8 @@
|
|
|
143
113
|
callsites = get_error_callsites(error);
|
|
144
114
|
//.........................................................................................................
|
|
145
115
|
if ((callsites == null) || (callsites.length === 0)) {
|
|
146
|
-
write_to_stderr(
|
|
147
|
-
write_to_stderr(
|
|
116
|
+
write_to_stderr(red(reverse("^455756^ error has no associated callsites:")));
|
|
117
|
+
write_to_stderr(red(reverse(rpr(error))));
|
|
148
118
|
return null;
|
|
149
119
|
}
|
|
150
120
|
//.........................................................................................................
|
|
@@ -167,8 +137,6 @@
|
|
|
167
137
|
continue;
|
|
168
138
|
}
|
|
169
139
|
//.......................................................................................................
|
|
170
|
-
// write_to_stderr()
|
|
171
|
-
// write_to_stderr steel bold reverse ( "#{relpath} ##{linenr}:" ).padEnd 108
|
|
172
140
|
fname = (ref = (ref1 = callsite.getFunctionName()) != null ? ref1 : callsite.getMethodName()) != null ? ref : null;
|
|
173
141
|
({path, linenr, colnr} = (await fetch_mapped_location(path, linenr, colnr)));
|
|
174
142
|
relpath = PATH.relative(process.cwd(), path);
|
|
@@ -186,90 +154,28 @@
|
|
|
186
154
|
}
|
|
187
155
|
}
|
|
188
156
|
alert('^77765-2^', reverse(bold(headline)));
|
|
189
|
-
// urge "^94843^ error.stack:", rpr error.stack
|
|
190
|
-
// urge "^94843^ error.message:", rpr error.message
|
|
191
|
-
// urge "^94843^ error.code:", rpr error.code
|
|
192
|
-
// urge "^94843^ error.name:", rpr error.name
|
|
193
|
-
// urge "^94843^ error.type:", rpr error.type
|
|
194
|
-
// urge "^94843^ error.toString():", rpr error.toString()
|
|
195
|
-
// urge "^94843^ error:", rpr error
|
|
196
|
-
// CATALOGUING = require '../../multimix/lib/cataloguing'
|
|
197
|
-
// urge "^94843^", ( CATALOGUING.all_keys_of error )
|
|
198
157
|
return null;
|
|
199
158
|
};
|
|
200
159
|
|
|
201
160
|
//-----------------------------------------------------------------------------------------------------------
|
|
202
|
-
|
|
203
|
-
var message, ref, ref1, ref2, type;
|
|
161
|
+
_exit_handler = async function(error, origin) {
|
|
204
162
|
/* TAINT origin never used */
|
|
205
|
-
|
|
206
|
-
// debug '^4488^', error
|
|
207
|
-
// debug '^4488^', await origin
|
|
208
|
-
// return null
|
|
163
|
+
var message, ref, ref1, ref2, type;
|
|
209
164
|
type = (ref = (ref1 = error.code) != null ? ref1 : error.name) != null ? ref : 'EXCEPTION';
|
|
210
165
|
message = ` ${type}: ` + ((ref2 = error != null ? error.message : void 0) != null ? ref2 : "an unrecoverable condition occurred");
|
|
211
166
|
await show_error_with_source_context(error, message);
|
|
212
|
-
setImmediate((function() {
|
|
213
|
-
return process.exit(111);
|
|
214
|
-
}));
|
|
215
167
|
return null;
|
|
216
168
|
};
|
|
217
169
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
stack = (new StackTracey(error)).withSources();
|
|
225
|
-
// stack = stack.clean()
|
|
226
|
-
R = [];
|
|
227
|
-
for (idx = i = ref = stack.items.length - 1; i >= 0; idx = i += -1) {
|
|
228
|
-
d = stack.items[idx];
|
|
229
|
-
// debug '^2798^', ( k for k of d )
|
|
230
|
-
s = {
|
|
231
|
-
// target_path: d.file
|
|
232
|
-
relpath: d.fileRelative, // fileShort
|
|
233
|
-
native: d.native,
|
|
234
|
-
// is_nodejs: d.native
|
|
235
|
-
is_other: d.thirdParty,
|
|
236
|
-
line: d.line,
|
|
237
|
-
column: d.column,
|
|
238
|
-
source: d.sourceLine,
|
|
239
|
-
error: d.error
|
|
240
|
-
};
|
|
241
|
-
// for k in [ 'sourceLine', 'native', 'file', 'line', 'column', 'calleeShort', 'fileRelative', 'fileShort', 'fileName', 'thirdParty', 'name',]
|
|
242
|
-
// debug k, rpr d[ k ]
|
|
243
|
-
R.push(s);
|
|
244
|
-
}
|
|
245
|
-
// info '\n' + stack.asTable()
|
|
246
|
-
return R;
|
|
247
|
-
};
|
|
248
|
-
|
|
249
|
-
show_stacktracey = function(error) {
|
|
250
|
-
var d, i, len, ref, ref1;
|
|
251
|
-
ref = get_stacktracey(error);
|
|
252
|
-
for (i = 0, len = ref.length; i < len; i++) {
|
|
253
|
-
d = ref[i];
|
|
254
|
-
echo(CND.steel('^44872^ ' + `${d.relpath} @ ${d.line}:${d.column}`));
|
|
255
|
-
/* NOTE errors:
|
|
256
|
-
ENOENT: no such file or directory
|
|
257
|
-
EISDIR: illegal operation on a directory, read
|
|
258
|
-
'Cannot read property 'originalPositionFor' of undefined'
|
|
259
|
-
*/
|
|
260
|
-
if (d.error != null) {
|
|
261
|
-
echo(CND.red('^44873^ ' + ((ref1 = d.error.message) != null ? ref1 : "an error occurred")));
|
|
262
|
-
} else {
|
|
263
|
-
echo(CND.yellow('^44874^ ' + `${rpr(d.source.slice(0, 101))}`));
|
|
264
|
-
}
|
|
265
|
-
}
|
|
170
|
+
//-----------------------------------------------------------------------------------------------------------
|
|
171
|
+
exit_handler = async function(error, origin) {
|
|
172
|
+
await _exit_handler(error, origin);
|
|
173
|
+
setImmediate((function() {
|
|
174
|
+
return process.exit(111);
|
|
175
|
+
}));
|
|
266
176
|
return null;
|
|
267
177
|
};
|
|
268
178
|
|
|
269
|
-
//###########################################################################################################
|
|
270
|
-
//###########################################################################################################
|
|
271
|
-
//###########################################################################################################
|
|
272
|
-
|
|
273
179
|
//###########################################################################################################
|
|
274
180
|
if (global[Symbol.for('cnd-exception-handler')] == null) {
|
|
275
181
|
null;
|
|
@@ -278,33 +184,8 @@
|
|
|
278
184
|
process.once('unhandledRejection', exit_handler);
|
|
279
185
|
}
|
|
280
186
|
|
|
281
|
-
|
|
282
|
-
|
|
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
|
-
*/
|
|
187
|
+
//###########################################################################################################
|
|
188
|
+
module.exports = {exit_handler, _exit_handler};
|
|
308
189
|
|
|
309
190
|
}).call(this);
|
|
310
191
|
|
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 } = GUY.trm.get_loggers 'NODEXH'\n{ rpr\n inspect\n echo\n log } = GUY.trm\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 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 []\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 return R\n\n#-----------------------------------------------------------------------------------------------------------\nshow_error_with_source_context = ( error, headline ) ->\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 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 return null\n\n#-----------------------------------------------------------------------------------------------------------\n_exit_handler = ( error, origin ) ->\n ### TAINT origin never used ###\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############################################################################################################\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\n############################################################################################################\nmodule.exports = { exit_handler, _exit_handler, }\n\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.1",
|
|
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,8 +23,8 @@
|
|
|
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",
|
|
27
|
+
"guy": "^13.7.1",
|
|
28
28
|
"load-source-map": "3.0.1",
|
|
29
29
|
"stacktracey": "^2.0.14"
|
|
30
30
|
},
|
package/src/main.coffee
CHANGED
|
@@ -1,22 +1,15 @@
|
|
|
1
1
|
|
|
2
|
-
|
|
3
2
|
'use strict'
|
|
4
3
|
|
|
5
4
|
|
|
6
5
|
############################################################################################################
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
alert = CND.get_logger 'alert', badge
|
|
15
|
-
help = CND.get_logger 'help', badge
|
|
16
|
-
urge = CND.get_logger 'urge', badge
|
|
17
|
-
whisper = CND.get_logger 'whisper', badge
|
|
18
|
-
echo = CND.echo.bind CND
|
|
19
|
-
# stackman = ( require 'stackman' )()
|
|
6
|
+
GUY = require 'guy'
|
|
7
|
+
{ alert
|
|
8
|
+
debug } = GUY.trm.get_loggers 'NODEXH'
|
|
9
|
+
{ rpr
|
|
10
|
+
inspect
|
|
11
|
+
echo
|
|
12
|
+
log } = GUY.trm
|
|
20
13
|
get_error_callsites = require 'error-callsites'
|
|
21
14
|
load_source_map = ( require 'util' ).promisify ( require 'load-source-map' )
|
|
22
15
|
FS = require 'fs'
|
|
@@ -32,12 +25,10 @@ PATH = require 'path'
|
|
|
32
25
|
yellow
|
|
33
26
|
reverse
|
|
34
27
|
underline
|
|
35
|
-
bold } =
|
|
36
|
-
# types = new ( require '../../intertype' ).Intertype()
|
|
37
|
-
# { isa } = types.export()
|
|
28
|
+
bold } = GUY.trm
|
|
38
29
|
|
|
39
30
|
#-----------------------------------------------------------------------------------------------------------
|
|
40
|
-
write_to_stderr = ( P... ) -> process.stderr.write ' ' +
|
|
31
|
+
write_to_stderr = ( P... ) -> process.stderr.write ' ' + ( GUY.trm.pen P... ) + '\n'
|
|
41
32
|
|
|
42
33
|
#-----------------------------------------------------------------------------------------------------------
|
|
43
34
|
fetch_mapped_location = ( path, linenr, colnr ) ->
|
|
@@ -45,8 +36,6 @@ fetch_mapped_location = ( path, linenr, colnr ) ->
|
|
|
45
36
|
sourcemap = await load_source_map path
|
|
46
37
|
smp = sourcemap.originalPositionFor { line: linenr, column: colnr, }
|
|
47
38
|
catch error
|
|
48
|
-
# warn '^7763-3^', "!!!!!!!!!!!!!!!!!", { path, }
|
|
49
|
-
# warn '^7763-3^', "!!!!!!!!!!!!!!!!!", error.message
|
|
50
39
|
return { path, linenr, colnr, }
|
|
51
40
|
#.........................................................................................................
|
|
52
41
|
if ( smp? ) and ( smp.source? ) and ( smp.source isnt '' ) and ( smp.line? ) and ( smp.column? )
|
|
@@ -59,7 +48,6 @@ fetch_mapped_location = ( path, linenr, colnr ) ->
|
|
|
59
48
|
get_context = ( path, linenr, colnr, width ) ->
|
|
60
49
|
try return ( _get_context path, linenr, colnr, width ) catch error
|
|
61
50
|
throw error unless error.code is 'ENOENT'
|
|
62
|
-
# return [ ( red "!!! #{rpr error.message} !!!" ), ]
|
|
63
51
|
return []
|
|
64
52
|
|
|
65
53
|
#-----------------------------------------------------------------------------------------------------------
|
|
@@ -89,15 +77,10 @@ _get_context = ( path, linenr, colnr, width ) ->
|
|
|
89
77
|
else
|
|
90
78
|
line = line[ .. width ]
|
|
91
79
|
R.push "#{grey this_linenr_txt}#{cyan line}"
|
|
92
|
-
# R = R.join '\n'
|
|
93
80
|
return R
|
|
94
81
|
|
|
95
82
|
#-----------------------------------------------------------------------------------------------------------
|
|
96
83
|
show_error_with_source_context = ( error, headline ) ->
|
|
97
|
-
### From https://github.com/watson/stackman#gotchas: "This module works because V8 (the JavaScript engine
|
|
98
|
-
behind Node.js) allows us to hook into the stack trace generator function before that stack trace is
|
|
99
|
-
generated. It's triggered by accessing the .stack property on the Error object, so please don't do
|
|
100
|
-
that before parsing the error to stackman, else this will not work!" ###
|
|
101
84
|
alert '^77765-1^', reverse bold headline
|
|
102
85
|
arrowhead = white '▲'
|
|
103
86
|
arrowshaft = white '│'
|
|
@@ -105,8 +88,8 @@ show_error_with_source_context = ( error, headline ) ->
|
|
|
105
88
|
callsites = get_error_callsites error
|
|
106
89
|
#.........................................................................................................
|
|
107
90
|
if ( not callsites? ) or ( callsites.length is 0 )
|
|
108
|
-
write_to_stderr
|
|
109
|
-
write_to_stderr
|
|
91
|
+
write_to_stderr red reverse "^455756^ error has no associated callsites:"
|
|
92
|
+
write_to_stderr red reverse rpr error
|
|
110
93
|
return null
|
|
111
94
|
#.........................................................................................................
|
|
112
95
|
callsites.reverse()
|
|
@@ -125,8 +108,6 @@ show_error_with_source_context = ( error, headline ) ->
|
|
|
125
108
|
write_to_stderr arrowhead, grey "#{path} @ #{linenr},#{colnr}"
|
|
126
109
|
continue
|
|
127
110
|
#.......................................................................................................
|
|
128
|
-
# write_to_stderr()
|
|
129
|
-
# write_to_stderr steel bold reverse ( "#{relpath} ##{linenr}:" ).padEnd 108
|
|
130
111
|
fname = callsite.getFunctionName() ? callsite.getMethodName() ? null
|
|
131
112
|
{ path
|
|
132
113
|
linenr
|
|
@@ -142,73 +123,22 @@ show_error_with_source_context = ( error, headline ) ->
|
|
|
142
123
|
for context_line in await get_context path, linenr, colnr, width
|
|
143
124
|
write_to_stderr arrowshaft, context_line
|
|
144
125
|
alert '^77765-2^', reverse bold headline
|
|
145
|
-
# urge "^94843^ error.stack:", rpr error.stack
|
|
146
|
-
# urge "^94843^ error.message:", rpr error.message
|
|
147
|
-
# urge "^94843^ error.code:", rpr error.code
|
|
148
|
-
# urge "^94843^ error.name:", rpr error.name
|
|
149
|
-
# urge "^94843^ error.type:", rpr error.type
|
|
150
|
-
# urge "^94843^ error.toString():", rpr error.toString()
|
|
151
|
-
# urge "^94843^ error:", rpr error
|
|
152
|
-
# CATALOGUING = require '../../multimix/lib/cataloguing'
|
|
153
|
-
# urge "^94843^", ( CATALOGUING.all_keys_of error )
|
|
154
126
|
return null
|
|
155
127
|
|
|
156
128
|
#-----------------------------------------------------------------------------------------------------------
|
|
157
|
-
|
|
129
|
+
_exit_handler = ( error, origin ) ->
|
|
158
130
|
### TAINT origin never used ###
|
|
159
|
-
# show_stacktracey error
|
|
160
|
-
# debug '^4488^', error
|
|
161
|
-
# debug '^4488^', await origin
|
|
162
|
-
# return null
|
|
163
131
|
type = error.code ? error.name ? 'EXCEPTION'
|
|
164
132
|
message = " #{type}: " + ( error?.message ? "an unrecoverable condition occurred" )
|
|
165
133
|
await show_error_with_source_context error, message
|
|
166
|
-
setImmediate ( -> process.exit 111 )
|
|
167
134
|
return null
|
|
168
135
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
get_stacktracey = ( error ) ->
|
|
174
|
-
StackTracey = require 'stacktracey'
|
|
175
|
-
stack = ( new StackTracey error ).withSources()
|
|
176
|
-
# stack = stack.clean()
|
|
177
|
-
R = []
|
|
178
|
-
for idx in [ stack.items.length - 1 .. 0 ] by -1
|
|
179
|
-
d = stack.items[ idx ]
|
|
180
|
-
# debug '^2798^', ( k for k of d )
|
|
181
|
-
s =
|
|
182
|
-
# target_path: d.file
|
|
183
|
-
relpath: d.fileRelative # fileShort
|
|
184
|
-
native: d.native
|
|
185
|
-
# is_nodejs: d.native
|
|
186
|
-
is_other: d.thirdParty
|
|
187
|
-
line: d.line
|
|
188
|
-
column: d.column
|
|
189
|
-
source: d.sourceLine
|
|
190
|
-
error: d.error
|
|
191
|
-
# for k in [ 'sourceLine', 'native', 'file', 'line', 'column', 'calleeShort', 'fileRelative', 'fileShort', 'fileName', 'thirdParty', 'name',]
|
|
192
|
-
# debug k, rpr d[ k ]
|
|
193
|
-
R.push s
|
|
194
|
-
# info '\n' + stack.asTable()
|
|
195
|
-
return R
|
|
196
|
-
|
|
197
|
-
show_stacktracey = ( error ) ->
|
|
198
|
-
for d in get_stacktracey error
|
|
199
|
-
echo CND.steel '^44872^ ' + "#{d.relpath} @ #{d.line}:#{d.column}"
|
|
200
|
-
### NOTE errors:
|
|
201
|
-
ENOENT: no such file or directory
|
|
202
|
-
EISDIR: illegal operation on a directory, read
|
|
203
|
-
'Cannot read property 'originalPositionFor' of undefined'
|
|
204
|
-
###
|
|
205
|
-
if d.error? then echo CND.red '^44873^ ' + ( d.error.message ? "an error occurred" )
|
|
206
|
-
else echo CND.yellow '^44874^ ' + "#{rpr d.source[ .. 100 ]}"
|
|
136
|
+
#-----------------------------------------------------------------------------------------------------------
|
|
137
|
+
exit_handler = ( error, origin ) ->
|
|
138
|
+
await _exit_handler error, origin
|
|
139
|
+
setImmediate ( -> process.exit 111 )
|
|
207
140
|
return null
|
|
208
141
|
|
|
209
|
-
############################################################################################################
|
|
210
|
-
############################################################################################################
|
|
211
|
-
############################################################################################################
|
|
212
142
|
|
|
213
143
|
|
|
214
144
|
############################################################################################################
|
|
@@ -218,31 +148,7 @@ unless global[ Symbol.for 'cnd-exception-handler' ]?
|
|
|
218
148
|
process.once 'uncaughtException', exit_handler
|
|
219
149
|
process.once 'unhandledRejection', exit_handler
|
|
220
150
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
# process.stderr.on 'end', => debug "^6863-1^ (stderr.on 'end')"
|
|
225
|
-
# process.stdout.on 'end', => debug "^6863-2^ (stdout.on 'end')"
|
|
226
|
-
# debug '^6456^'
|
|
227
|
-
# echo "^4564^ echo to stdout"
|
|
228
|
-
# warn "^4564^ warn to stderr"
|
|
229
|
-
# process.stderr.write "this goes to stderr\n"
|
|
230
|
-
# process.stdout.write "this goes to stdout\n"
|
|
231
|
-
# process.on 'message', ( message ) -> debug "^6863-3^' (process.on 'message'):", rpr message
|
|
232
|
-
# process.on 'warning', ( warning ) -> debug "^6863-3^' (process.on 'warning'):", rpr warning
|
|
233
|
-
###
|
|
234
|
-
callsite.getThis() - returns the value of this
|
|
235
|
-
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.
|
|
236
|
-
callsite.getFunction() - returns the current function
|
|
237
|
-
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.
|
|
238
|
-
callsite.getMethodName() - returns the name of the property of this or one of its prototypes that holds the current function
|
|
239
|
-
callsite.getFileName() - if this function was defined in a script returns the name of the script
|
|
240
|
-
callsite.getLineNumber() - if this function was defined in a script returns the current line number
|
|
241
|
-
callsite.getColumnNumber() - if this function was defined in a script returns the current column number
|
|
242
|
-
callsite.getEvalOrigin() - if this function was created using a call to eval returns a CallSite object representing the location where eval was called
|
|
243
|
-
callsite.isToplevel() - is this a toplevel invocation, that is, is this the global object?
|
|
244
|
-
callsite.isEval() - does this call take place in code defined by a call to eval?
|
|
245
|
-
callsite.isNative() - is this call in native V8 code?
|
|
246
|
-
callsite.isConstructor() - is this a constructor c
|
|
247
|
-
###
|
|
151
|
+
|
|
152
|
+
############################################################################################################
|
|
153
|
+
module.exports = { exit_handler, _exit_handler, }
|
|
248
154
|
|
package/pnpm-lock.yaml
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
lockfileVersion: 5.4
|
|
2
|
-
|
|
3
|
-
specifiers:
|
|
4
|
-
cnd: ^9.1.0
|
|
5
|
-
error-callsites: ^2.0.3
|
|
6
|
-
load-source-map: 3.0.1
|
|
7
|
-
stacktracey: ^2.0.14
|
|
8
|
-
|
|
9
|
-
dependencies:
|
|
10
|
-
cnd: 9.2.2
|
|
11
|
-
error-callsites: 2.0.4
|
|
12
|
-
load-source-map: 3.0.1
|
|
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/3.0.1:
|
|
51
|
-
resolution: {integrity: sha512-TMYgVXwivT/VeOk0h+chnlhgCclG9xaB8v0Z07gOGDuvE1Vg60fW4NOIPMQ+h64jYYgfgenp0AsdczQWfRAoVw==}
|
|
52
|
-
engines: {node: '>=12'}
|
|
53
|
-
dependencies:
|
|
54
|
-
source-map: 0.8.0-beta.0
|
|
55
|
-
dev: false
|
|
56
|
-
|
|
57
|
-
/lodash.sortby/4.7.0:
|
|
58
|
-
resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
|
|
59
|
-
dev: false
|
|
60
|
-
|
|
61
|
-
/printable-characters/1.0.42:
|
|
62
|
-
resolution: {integrity: sha1-Pxjpd6m9jrN/zE/1ZZ176Qhos9g=}
|
|
63
|
-
dev: false
|
|
64
|
-
|
|
65
|
-
/punycode/2.1.1:
|
|
66
|
-
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
|
|
67
|
-
engines: {node: '>=6'}
|
|
68
|
-
dev: false
|
|
69
|
-
|
|
70
|
-
/source-map/0.6.1:
|
|
71
|
-
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
|
|
72
|
-
engines: {node: '>=0.10.0'}
|
|
73
|
-
dev: false
|
|
74
|
-
|
|
75
|
-
/source-map/0.8.0-beta.0:
|
|
76
|
-
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
|
|
77
|
-
engines: {node: '>= 8'}
|
|
78
|
-
dependencies:
|
|
79
|
-
whatwg-url: 7.1.0
|
|
80
|
-
dev: false
|
|
81
|
-
|
|
82
|
-
/stacktracey/2.1.8:
|
|
83
|
-
resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==}
|
|
84
|
-
dependencies:
|
|
85
|
-
as-table: 1.0.55
|
|
86
|
-
get-source: 2.0.12
|
|
87
|
-
dev: false
|
|
88
|
-
|
|
89
|
-
/tr46/1.0.1:
|
|
90
|
-
resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
|
|
91
|
-
dependencies:
|
|
92
|
-
punycode: 2.1.1
|
|
93
|
-
dev: false
|
|
94
|
-
|
|
95
|
-
/webidl-conversions/4.0.2:
|
|
96
|
-
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
|
|
97
|
-
dev: false
|
|
98
|
-
|
|
99
|
-
/whatwg-url/7.1.0:
|
|
100
|
-
resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
|
|
101
|
-
dependencies:
|
|
102
|
-
lodash.sortby: 4.7.0
|
|
103
|
-
tr46: 1.0.1
|
|
104
|
-
webidl-conversions: 4.0.2
|
|
105
|
-
dev: false
|