@sasjs/utils 4.3.0 → 4.3.2
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/logs/sasLog.d.ts +5 -0
- package/logs/sasLog.js +166 -41
- package/logs/sasLog.js.map +1 -1
- package/package.json +1 -1
package/logs/sasLog.d.ts
CHANGED
|
@@ -108,6 +108,11 @@ export declare const isNotableNote: (message: string) => boolean;
|
|
|
108
108
|
* directly. A host that wants errors only filters on `severity`; nothing is
|
|
109
109
|
* behind an option, because a notable note is worth reporting wherever the log
|
|
110
110
|
* is shown.
|
|
111
|
+
*
|
|
112
|
+
* The text is never split into lines: a log is often megabytes, and a pass that
|
|
113
|
+
* builds an array of its lines costs more than the scan and hands the collector
|
|
114
|
+
* a million strings. One global match walks the text, the line number is counted
|
|
115
|
+
* forward from the previous match, and only the lines a message needs are sliced.
|
|
111
116
|
*/
|
|
112
117
|
export declare const parseLog: (text: string) => LogIssue[];
|
|
113
118
|
/**
|
package/logs/sasLog.js
CHANGED
|
@@ -71,10 +71,26 @@ exports.nextIssue = exports.parseLog = exports.isNotableNote = exports.isSasLog
|
|
|
71
71
|
* line's text. Padding without markup is not allowed: an indented marker is text
|
|
72
72
|
* in a listing, not a message. The prefix is captured so the marker's column is
|
|
73
73
|
* exact, and the code and message are captured separately.
|
|
74
|
+
*
|
|
75
|
+
* The spaces either side of a message code are a character class, not `\s`: the
|
|
76
|
+
* expression now runs over the whole text, where `\s` would let a match swallow
|
|
77
|
+
* the line break and read the next line as this message's code.
|
|
74
78
|
*/
|
|
75
|
-
const MARKER = /^((?:<[^>]*>)+[ \t]*|)(?:(ERROR|WARNING)(
|
|
76
|
-
/**
|
|
77
|
-
|
|
79
|
+
const MARKER = /^((?:<[^>]*>)+[ \t]*|)(?:(ERROR|WARNING)(?:[ \t]+(\d+-\d+))?(:[ \t]?|[ \t]+)|(NOTE)(?:[ \t]+(\d+-\d+))?:[ \t]?)(.*)$/;
|
|
80
|
+
/**
|
|
81
|
+
* The shapes only SAS writes, tested over the whole text in one pass so no line
|
|
82
|
+
* array is built: a coded marker (`ERROR 22-322:`), or a line SAS numbers at the
|
|
83
|
+
* start followed by a statement - one that begins with a macro call, a comment,
|
|
84
|
+
* or ends in the semicolon SAS statement syntax requires. The padded number alone
|
|
85
|
+
* is not evidence: `1 item` is a numbered list in somebody else's output.
|
|
86
|
+
*
|
|
87
|
+
* The statement tail is `[^\n;]*` rather than `[^;]*` because a negated class
|
|
88
|
+
* matches a newline, and a shape match must not span two lines. A semicolon alone
|
|
89
|
+
* does not make a statement - `12 Building target;` is a numbered list in output
|
|
90
|
+
* that is not SAS - so the line also has to begin with a statement keyword or
|
|
91
|
+
* carry an assignment or a call before its semicolon.
|
|
92
|
+
*/
|
|
93
|
+
const SAS_SHAPE = /^(?:(?:<[^>]*>)+[ \t]*|)(?:(?:ERROR|WARNING|NOTE) +\d+-\d+|\d+ {2,}(?:[%*/]|(?:by|data|filename|footnote|format|if|infile|input|libname|merge|ods|options|output|proc|put|quit|run|set|title|where)\b|[^\n;]*[=(][^\n;]*;))/m;
|
|
78
94
|
/**
|
|
79
95
|
* The phrases SAS prints about itself, and nothing else does: the version banner,
|
|
80
96
|
* the licence note, the platform note, the work-area conversion warning, the page
|
|
@@ -82,8 +98,6 @@ const NUMBERED_STEP = /^\d+ {2,}\S/;
|
|
|
82
98
|
* a log that has lost its head usually keeps the step footer.
|
|
83
99
|
*/
|
|
84
100
|
const SAS_BANNER = /(?:The SAS System|^You are running SAS \d|^NOTE: (?:SAS|Copyright .*\bSAS Institute|This session is executing|DATA statement used))/m;
|
|
85
|
-
/** A coded marker, e.g. `ERROR 22-322:` - SAS's message identifiers, again its own. */
|
|
86
|
-
const CODED_MARKER = /^((?:<[^>]*>)+[ \t]*|)(?:ERROR|WARNING|NOTE) +\d+-\d+/;
|
|
87
101
|
/**
|
|
88
102
|
* Whether a text is a SAS log rather than somebody else's log file.
|
|
89
103
|
*
|
|
@@ -107,10 +121,7 @@ const CODED_MARKER = /^((?:<[^>]*>)+[ \t]*|)(?:ERROR|WARNING|NOTE) +\d+-\d+/;
|
|
|
107
121
|
* The check is deliberately cheap and runs before a host publishes anything, so
|
|
108
122
|
* a `.log` from another tool is left alone.
|
|
109
123
|
*/
|
|
110
|
-
const isSasLog = (text) => SAS_BANNER.test(text) ||
|
|
111
|
-
text
|
|
112
|
-
.split(/\r?\n/)
|
|
113
|
-
.some((line) => CODED_MARKER.test(line) || NUMBERED_STEP.test(line));
|
|
124
|
+
const isSasLog = (text) => SAS_BANNER.test(text) || SAS_SHAPE.test(text);
|
|
114
125
|
exports.isSasLog = isSasLog;
|
|
115
126
|
/**
|
|
116
127
|
* The notes worth reporting, matched case-insensitively against the folded
|
|
@@ -157,24 +168,79 @@ const NOTE_KEYWORDS = [
|
|
|
157
168
|
'not positive definite',
|
|
158
169
|
'The SAS System stopped processing this step because of errors'
|
|
159
170
|
];
|
|
160
|
-
|
|
171
|
+
/** `RegExp`-escaping, so a keyword added later cannot change the meaning of the pattern. */
|
|
172
|
+
const escape = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
173
|
+
/**
|
|
174
|
+
* The keyword list as one case-insensitive expression. Testing 30 keywords with
|
|
175
|
+
* `includes` meant lowercasing every note and up to 30 scans of it; a log holds
|
|
176
|
+
* thousands of notes and this is the second hottest function in the module.
|
|
177
|
+
*/
|
|
178
|
+
const NOTABLE_NOTE = new RegExp(NOTE_KEYWORDS.map(escape).join('|'), 'i');
|
|
161
179
|
/** How many wrapped lines one message may absorb, so a malformed log cannot run away. */
|
|
162
180
|
const MAX_WRAPPED_LINES = 10;
|
|
163
181
|
/** Whether a note's message is one of the notable ones. */
|
|
164
|
-
const isNotableNote = (message) =>
|
|
165
|
-
const lower = message.toLowerCase();
|
|
166
|
-
return NOTABLE_NOTE_KEYWORDS.some((keyword) => lower.includes(keyword));
|
|
167
|
-
};
|
|
182
|
+
const isNotableNote = (message) => NOTABLE_NOTE.test(message);
|
|
168
183
|
exports.isNotableNote = isNotableNote;
|
|
169
|
-
/**
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
184
|
+
/**
|
|
185
|
+
* The pointer line SAS prints under the token it complains about: a run of
|
|
186
|
+
* dashes, or the column number on its own.
|
|
187
|
+
*/
|
|
188
|
+
const POINTER_LINE = /^\s*(?:[-_]+\s*$|\d+\s*$)/;
|
|
189
|
+
/**
|
|
190
|
+
* A line with the tags that open it removed, so what SAS wrote begins the line.
|
|
191
|
+
*
|
|
192
|
+
* ODS HTML writes every physical line as `<font ...>text</font>`, and SAS wraps
|
|
193
|
+
* a long message inside those tags. The tags are markup the reader never sees,
|
|
194
|
+
* so both the indentation test and the marker test look past them; the reported
|
|
195
|
+
* columns still address the raw line, which is what a host underlines.
|
|
196
|
+
*/
|
|
197
|
+
const withoutMarkup = (line) => line.replace(/^(?:<[^>]*>)+/, '');
|
|
198
|
+
/**
|
|
199
|
+
* A line SAS wrapped: indented, and neither a pointer line nor a marker.
|
|
200
|
+
*
|
|
201
|
+
* The indentation is tested after the tags that open an ODS HTML line are
|
|
202
|
+
* dropped: SAS wraps a line inside the markup, so the wrapped half of
|
|
203
|
+
* `<font ...> RUN, QUIT.</font>` is indented but does not begin
|
|
204
|
+
* with the whitespace. Reading only the raw line treated every wrapped line of
|
|
205
|
+
* an HTML log as a new line and left the message truncated at the break.
|
|
206
|
+
*
|
|
207
|
+
* The marker test is {@link MARKER} itself, applied to the text of the trimmed
|
|
208
|
+
* line, so a continuation is excluded exactly when the line would have been a
|
|
209
|
+
* marker had it begun the line - the markup-prefixed form included. A second,
|
|
210
|
+
* subtly different expression is how an indented marker ends up belonging to
|
|
211
|
+
* neither the message above nor the issue list. Such a marker is dropped rather
|
|
212
|
+
* than reported, which is the rule the parser states: a message begins the line.
|
|
213
|
+
*/
|
|
214
|
+
const isWrappedLine = (line) => {
|
|
215
|
+
const text = withoutMarkup(line);
|
|
216
|
+
return (/^\s+\S/.test(text) && !POINTER_LINE.test(text) && !MARKER.test(text.trim()));
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* Whether a character code is printable ASCII and not a space. The fast path in
|
|
220
|
+
* {@link clean} is limited to ASCII at both ends, so a message carrying one of
|
|
221
|
+
* the non-ASCII spaces the slow path collapses still takes the slow path.
|
|
222
|
+
*/
|
|
223
|
+
const isPlainCode = (code) => code > 32 && code < 127;
|
|
224
|
+
/**
|
|
225
|
+
* Removes markup and collapses the whitespace a wrapped message carries.
|
|
226
|
+
*
|
|
227
|
+
* Most messages need neither: a single line with no markup and no run of spaces
|
|
228
|
+
* is returned as it is, which keeps three passes off the common path - this is
|
|
229
|
+
* the hottest function in the module on a large log.
|
|
230
|
+
*/
|
|
231
|
+
const clean = (text) => {
|
|
232
|
+
const plain = isPlainCode(text.charCodeAt(0)) &&
|
|
233
|
+
isPlainCode(text.charCodeAt(text.length - 1)) &&
|
|
234
|
+
text.indexOf('<') < 0 &&
|
|
235
|
+
text.indexOf('\t') < 0 &&
|
|
236
|
+
text.indexOf(' ') < 0;
|
|
237
|
+
return plain
|
|
238
|
+
? text
|
|
239
|
+
: text
|
|
240
|
+
.replace(/<[^>]*>/g, '')
|
|
241
|
+
.replace(/\s+/g, ' ')
|
|
242
|
+
.trim();
|
|
243
|
+
};
|
|
178
244
|
/**
|
|
179
245
|
* Finds every ERROR and WARNING in a SAS log, and every notable note.
|
|
180
246
|
*
|
|
@@ -184,45 +250,104 @@ const clean = (text) => text
|
|
|
184
250
|
* behind an option, because a notable note is worth reporting wherever the log
|
|
185
251
|
* is shown.
|
|
186
252
|
*/
|
|
253
|
+
/**
|
|
254
|
+
* The marker expression with the multiline flags, so one call walks the whole
|
|
255
|
+
* text. `exec` on a line at a time costs a call per line - half a million on a
|
|
256
|
+
* 16 MB log - where one pass over the string costs a fraction of that, and the
|
|
257
|
+
* line and column indexes are recovered from the match offsets instead.
|
|
258
|
+
*/
|
|
259
|
+
const SCAN = new RegExp(MARKER.source, 'gm');
|
|
260
|
+
/** The index of the line break that ends the line starting at `from`, or -1. */
|
|
261
|
+
const lineEnd = (text, from) => text.indexOf('\n', from);
|
|
262
|
+
/** A slice of the text with the carriage return of a CRLF line ending removed. */
|
|
263
|
+
const withoutCr = (text, from, to) => to > from && text.charCodeAt(to - 1) === 13
|
|
264
|
+
? text.slice(from, to - 1)
|
|
265
|
+
: text.slice(from, to);
|
|
266
|
+
/**
|
|
267
|
+
* Finds every ERROR and WARNING in a SAS log, and every notable note.
|
|
268
|
+
*
|
|
269
|
+
* The issue list is in log order. `line` and `column` address the text as
|
|
270
|
+
* supplied, so a caller can offset a decoration or a diagnostic by them
|
|
271
|
+
* directly. A host that wants errors only filters on `severity`; nothing is
|
|
272
|
+
* behind an option, because a notable note is worth reporting wherever the log
|
|
273
|
+
* is shown.
|
|
274
|
+
*
|
|
275
|
+
* The text is never split into lines: a log is often megabytes, and a pass that
|
|
276
|
+
* builds an array of its lines costs more than the scan and hands the collector
|
|
277
|
+
* a million strings. One global match walks the text, the line number is counted
|
|
278
|
+
* forward from the previous match, and only the lines a message needs are sliced.
|
|
279
|
+
*/
|
|
187
280
|
const parseLog = (text) => {
|
|
188
|
-
var _a
|
|
281
|
+
var _a;
|
|
189
282
|
if (!text) {
|
|
190
283
|
return [];
|
|
191
284
|
}
|
|
192
|
-
const lines = text.split(/\r?\n/);
|
|
193
285
|
const issues = [];
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
286
|
+
let line = 0;
|
|
287
|
+
let countedTo = 0;
|
|
288
|
+
let match;
|
|
289
|
+
SCAN.lastIndex = 0;
|
|
290
|
+
while ((match = SCAN.exec(text)) !== null) {
|
|
291
|
+
const markerStart = match.index;
|
|
292
|
+
// Lines between the last block and this marker.
|
|
293
|
+
for (let index = text.indexOf('\n', countedTo); index !== -1 && index < markerStart; index = text.indexOf('\n', index + 1)) {
|
|
294
|
+
line++;
|
|
198
295
|
}
|
|
296
|
+
const markerEnd = lineEnd(text, markerStart);
|
|
297
|
+
const endIndex = markerEnd === -1 ? text.length : markerEnd;
|
|
199
298
|
const markerLine = line;
|
|
200
|
-
|
|
299
|
+
let message = clean(match[7]);
|
|
201
300
|
let endLine = markerLine;
|
|
301
|
+
let cursor = endIndex + 1;
|
|
202
302
|
let wrapped = 0;
|
|
203
|
-
while (wrapped < MAX_WRAPPED_LINES
|
|
204
|
-
|
|
205
|
-
|
|
303
|
+
while (cursor <= text.length && wrapped < MAX_WRAPPED_LINES) {
|
|
304
|
+
const nextEnd = lineEnd(text, cursor);
|
|
305
|
+
const sliceEnd = nextEnd === -1 ? text.length : nextEnd;
|
|
306
|
+
const candidate = withoutCr(text, cursor, sliceEnd);
|
|
307
|
+
if (!isWrappedLine(candidate)) {
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
const part = clean(candidate);
|
|
311
|
+
if (part !== '') {
|
|
312
|
+
message = message === '' ? part : `${message} ${part}`;
|
|
313
|
+
}
|
|
206
314
|
endLine++;
|
|
207
315
|
wrapped++;
|
|
208
|
-
|
|
316
|
+
cursor = sliceEnd + 1;
|
|
209
317
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
line = endLine;
|
|
318
|
+
// The lines folded into this message belong to it whether or not it is
|
|
319
|
+
// reported, so the scan resumes after them either way.
|
|
320
|
+
SCAN.lastIndex = cursor;
|
|
321
|
+
countedTo = cursor;
|
|
322
|
+
line = endLine + 1;
|
|
215
323
|
// A marker with nothing after it is not a message: SAS does not print a bare
|
|
216
324
|
// `ERROR` or `ERROR:` line, and an empty issue would reach a host as a blank
|
|
217
325
|
// line in its problem list.
|
|
218
326
|
if (message === '') {
|
|
219
327
|
continue;
|
|
220
328
|
}
|
|
329
|
+
const severity = match[2]
|
|
330
|
+
? match[2] === 'ERROR'
|
|
331
|
+
? 'error'
|
|
332
|
+
: 'warning'
|
|
333
|
+
: 'note';
|
|
221
334
|
if (severity === 'note' && !(0, exports.isNotableNote)(message)) {
|
|
222
335
|
continue;
|
|
223
336
|
}
|
|
224
|
-
const code = (
|
|
225
|
-
|
|
337
|
+
const code = (_a = match[3]) !== null && _a !== void 0 ? _a : match[6];
|
|
338
|
+
const issue = {
|
|
339
|
+
line: markerLine,
|
|
340
|
+
endLine,
|
|
341
|
+
column: match[1].length,
|
|
342
|
+
// The whole match is the line's text: `$` stops before the `\r` of a CRLF.
|
|
343
|
+
endColumn: match[0].length,
|
|
344
|
+
severity,
|
|
345
|
+
message
|
|
346
|
+
};
|
|
347
|
+
if (code) {
|
|
348
|
+
issue.code = code;
|
|
349
|
+
}
|
|
350
|
+
issues.push(issue);
|
|
226
351
|
}
|
|
227
352
|
return issues;
|
|
228
353
|
};
|
package/logs/sasLog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sasLog.js","sourceRoot":"","sources":["../../src/logs/sasLog.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;;;AA6BH
|
|
1
|
+
{"version":3,"file":"sasLog.js","sourceRoot":"","sources":["../../src/logs/sasLog.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED