@sasjs/utils 4.2.0 → 4.3.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/logs/sasLog.d.ts +48 -14
- package/logs/sasLog.js +92 -24
- package/logs/sasLog.js.map +1 -1
- package/package.json +1 -1
package/logs/sasLog.d.ts
CHANGED
|
@@ -2,34 +2,44 @@
|
|
|
2
2
|
* SAS log parsing.
|
|
3
3
|
*
|
|
4
4
|
* A SAS log is a stream of statements and messages, and only the messages
|
|
5
|
-
* matter to a reader looking for trouble:
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
5
|
+
* matter to a reader looking for trouble: the ones SAS prints at the start of a
|
|
6
|
+
* line as `ERROR`, `WARNING` or `NOTE`. This module finds those messages and
|
|
7
|
+
* reports where they are, as line and column indexes into the text it was given,
|
|
8
|
+
* so a host can underline them without re-scanning the log and without rewriting
|
|
9
|
+
* it.
|
|
10
10
|
*
|
|
11
|
-
* What is recognised:
|
|
11
|
+
* What is recognised - the marker in capitals, beginning the line:
|
|
12
12
|
*
|
|
13
13
|
* ERROR: Libref X is not assigned.
|
|
14
|
+
* ERROR Libref Y is not assigned.
|
|
14
15
|
* ERROR 22-322: Syntax error, expecting one of the following: ;, CANCEL,
|
|
15
16
|
* RUN, QUIT.
|
|
16
17
|
* WARNING 1-322: Assuming the symbol Y was misspelled.
|
|
17
18
|
* NOTE: Variable x is uninitialized.
|
|
18
19
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
20
|
+
* An error or a warning needs a colon, or a space, after the marker; `ERROR` on
|
|
21
|
+
* its own is not a message, and neither is every line that happens to begin with
|
|
22
|
+
* the word. The numeric code between the marker and the colon is SAS's own
|
|
23
|
+
* message identifier and is reported separately, so a host can group by it.
|
|
21
24
|
*
|
|
22
25
|
* NOTES are reported only when they are the ones the log-checking literature
|
|
23
|
-
* flags - see NOTE_KEYWORDS
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
+
* flags - see NOTE_KEYWORDS - and only in their colon form, because the notes
|
|
27
|
+
* stream is endless and the notable ones are a closed list. A coded note
|
|
28
|
+
* (`NOTE 49-169:`) is one of them and keeps its code. INFO lines are not
|
|
29
|
+
* reported at all.
|
|
30
|
+
*
|
|
31
|
+
* {@link isSasLog} answers the different question a host asks before publishing
|
|
32
|
+
* anything: whether this file is a SAS log at all. A Python log and a shell build
|
|
33
|
+
* log both write `ERROR:` at the start of a line, so the marker alone does not
|
|
34
|
+
* say so - the banner SAS prints about itself does, and so do its message codes
|
|
35
|
+
* and its padded step numbers.
|
|
26
36
|
*
|
|
27
37
|
* Lines SAS wrapped are folded into the message they belong to, so one problem
|
|
28
38
|
* is one issue rather than one issue per wrapped line, and the keyword search
|
|
29
39
|
* runs on the folded message - a note whose keyword lands on the second line is
|
|
30
|
-
* still found.
|
|
31
|
-
*
|
|
32
|
-
* quoting another log, out of the results.
|
|
40
|
+
* still found. Nothing indented counts as a marker, and neither does a marker in
|
|
41
|
+
* lower case: the real one starts the line, which keeps a print of a data set,
|
|
42
|
+
* or a message quoting another log, out of the results.
|
|
33
43
|
*
|
|
34
44
|
* ODS HTML logs wrap every line in markup. A tag sequence before the marker is
|
|
35
45
|
* skipped and tags are stripped from the reported message, so the same parse
|
|
@@ -64,6 +74,30 @@ export interface LogIssue {
|
|
|
64
74
|
}
|
|
65
75
|
/** Direction of travel for {@link nextIssue}. */
|
|
66
76
|
export declare type IssueDirection = 'next' | 'previous';
|
|
77
|
+
/**
|
|
78
|
+
* Whether a text is a SAS log rather than somebody else's log file.
|
|
79
|
+
*
|
|
80
|
+
* A marker alone does not say so: Python's logging writes `ERROR:root:boom` and
|
|
81
|
+
* a shell build log writes `ERROR: Command failed with exit code 1`, both at the
|
|
82
|
+
* start of a line. Nor does the word SAS - build logs of this estate's own
|
|
83
|
+
* repositories mention it in prose - so the test is SAS's own vocabulary: the
|
|
84
|
+
* banner it prints about itself, its message codes, and its padded step numbers.
|
|
85
|
+
* Each of those is written by SAS and by nothing else.
|
|
86
|
+
*
|
|
87
|
+
* This is a heuristic, and one way only: a true answer means SAS wrote the text,
|
|
88
|
+
* while a false answer does not prove it did not - a trimmed excerpt of a log,
|
|
89
|
+
* pasted with only its `ERROR:` lines, carries none of the three and reads as
|
|
90
|
+
* somebody else's. A host that publishes diagnostics should therefore treat false
|
|
91
|
+
* as "not obviously SAS" rather than "not SAS".
|
|
92
|
+
*
|
|
93
|
+
* Counting marker lines instead was considered and rejected: two `ERROR:` lines is
|
|
94
|
+
* what a Python log is made of, so it would readmit exactly the files this
|
|
95
|
+
* predicate exists to keep out.
|
|
96
|
+
*
|
|
97
|
+
* The check is deliberately cheap and runs before a host publishes anything, so
|
|
98
|
+
* a `.log` from another tool is left alone.
|
|
99
|
+
*/
|
|
100
|
+
export declare const isSasLog: (text: string) => boolean;
|
|
67
101
|
/** Whether a note's message is one of the notable ones. */
|
|
68
102
|
export declare const isNotableNote: (message: string) => boolean;
|
|
69
103
|
/**
|
package/logs/sasLog.js
CHANGED
|
@@ -3,34 +3,44 @@
|
|
|
3
3
|
* SAS log parsing.
|
|
4
4
|
*
|
|
5
5
|
* A SAS log is a stream of statements and messages, and only the messages
|
|
6
|
-
* matter to a reader looking for trouble:
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* matter to a reader looking for trouble: the ones SAS prints at the start of a
|
|
7
|
+
* line as `ERROR`, `WARNING` or `NOTE`. This module finds those messages and
|
|
8
|
+
* reports where they are, as line and column indexes into the text it was given,
|
|
9
|
+
* so a host can underline them without re-scanning the log and without rewriting
|
|
10
|
+
* it.
|
|
11
11
|
*
|
|
12
|
-
* What is recognised:
|
|
12
|
+
* What is recognised - the marker in capitals, beginning the line:
|
|
13
13
|
*
|
|
14
14
|
* ERROR: Libref X is not assigned.
|
|
15
|
+
* ERROR Libref Y is not assigned.
|
|
15
16
|
* ERROR 22-322: Syntax error, expecting one of the following: ;, CANCEL,
|
|
16
17
|
* RUN, QUIT.
|
|
17
18
|
* WARNING 1-322: Assuming the symbol Y was misspelled.
|
|
18
19
|
* NOTE: Variable x is uninitialized.
|
|
19
20
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
21
|
+
* An error or a warning needs a colon, or a space, after the marker; `ERROR` on
|
|
22
|
+
* its own is not a message, and neither is every line that happens to begin with
|
|
23
|
+
* the word. The numeric code between the marker and the colon is SAS's own
|
|
24
|
+
* message identifier and is reported separately, so a host can group by it.
|
|
22
25
|
*
|
|
23
26
|
* NOTES are reported only when they are the ones the log-checking literature
|
|
24
|
-
* flags - see NOTE_KEYWORDS
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
+
* flags - see NOTE_KEYWORDS - and only in their colon form, because the notes
|
|
28
|
+
* stream is endless and the notable ones are a closed list. A coded note
|
|
29
|
+
* (`NOTE 49-169:`) is one of them and keeps its code. INFO lines are not
|
|
30
|
+
* reported at all.
|
|
31
|
+
*
|
|
32
|
+
* {@link isSasLog} answers the different question a host asks before publishing
|
|
33
|
+
* anything: whether this file is a SAS log at all. A Python log and a shell build
|
|
34
|
+
* log both write `ERROR:` at the start of a line, so the marker alone does not
|
|
35
|
+
* say so - the banner SAS prints about itself does, and so do its message codes
|
|
36
|
+
* and its padded step numbers.
|
|
27
37
|
*
|
|
28
38
|
* Lines SAS wrapped are folded into the message they belong to, so one problem
|
|
29
39
|
* is one issue rather than one issue per wrapped line, and the keyword search
|
|
30
40
|
* runs on the folded message - a note whose keyword lands on the second line is
|
|
31
|
-
* still found.
|
|
32
|
-
*
|
|
33
|
-
* quoting another log, out of the results.
|
|
41
|
+
* still found. Nothing indented counts as a marker, and neither does a marker in
|
|
42
|
+
* lower case: the real one starts the line, which keeps a print of a data set,
|
|
43
|
+
* or a message quoting another log, out of the results.
|
|
34
44
|
*
|
|
35
45
|
* ODS HTML logs wrap every line in markup. A tag sequence before the marker is
|
|
36
46
|
* skipped and tags are stripped from the reported message, so the same parse
|
|
@@ -42,14 +52,66 @@
|
|
|
42
52
|
* from the same parse.
|
|
43
53
|
*/
|
|
44
54
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.nextIssue = exports.parseLog = exports.isNotableNote = void 0;
|
|
55
|
+
exports.nextIssue = exports.parseLog = exports.isNotableNote = exports.isSasLog = void 0;
|
|
56
|
+
/**
|
|
57
|
+
* A marker at the start of a line: SAS writes `ERROR:` and `WARNING:` with a
|
|
58
|
+
* colon, and also writes them with no colon at all - `ERROR Libref X is not
|
|
59
|
+
* assigned.` - so a run of whitespace ends those two as well. The marker is
|
|
60
|
+
* uppercase and begins the line, which is what keeps a print of a data set, or a
|
|
61
|
+
* quotation of another log, out of the results.
|
|
62
|
+
*
|
|
63
|
+
* `NOTE` is a separate shape inside the same expression because it only counts
|
|
64
|
+
* with its colon: matching any line that begins NOTE would put the whole notes
|
|
65
|
+
* stream into the results. A coded note is a note - `NOTE 49-169:` carries the
|
|
66
|
+
* same kind of identifier an error does, and two of the notable keywords are
|
|
67
|
+
* written for coded notes.
|
|
68
|
+
*
|
|
69
|
+
* The tags of an ODS HTML log may lead the marker, with or without padding after
|
|
70
|
+
* them - they are markup the reader never sees, and the marker still begins the
|
|
71
|
+
* line's text. Padding without markup is not allowed: an indented marker is text
|
|
72
|
+
* in a listing, not a message. The prefix is captured so the marker's column is
|
|
73
|
+
* exact, and the code and message are captured separately.
|
|
74
|
+
*/
|
|
75
|
+
const MARKER = /^((?:<[^>]*>)+[ \t]*|)(?:(ERROR|WARNING)(?:\s+(\d+-\d+))?(:[ \t]?|[ \t]+)|(NOTE)(?:\s+(\d+-\d+))?:[ \t]?)(.*)$/;
|
|
76
|
+
/** A line SAS numbers at the start, e.g. `1 data want;` - unlike a sequence number, it is padded. */
|
|
77
|
+
const NUMBERED_STEP = /^\d+ {2,}\S/;
|
|
78
|
+
/**
|
|
79
|
+
* The phrases SAS prints about itself, and nothing else does: the version banner,
|
|
80
|
+
* the licence note, the platform note, the work-area conversion warning, the page
|
|
81
|
+
* header of a listing and the step footer. Every SAS log carries at least one;
|
|
82
|
+
* a log that has lost its head usually keeps the step footer.
|
|
83
|
+
*/
|
|
84
|
+
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+/;
|
|
46
87
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
88
|
+
* Whether a text is a SAS log rather than somebody else's log file.
|
|
89
|
+
*
|
|
90
|
+
* A marker alone does not say so: Python's logging writes `ERROR:root:boom` and
|
|
91
|
+
* a shell build log writes `ERROR: Command failed with exit code 1`, both at the
|
|
92
|
+
* start of a line. Nor does the word SAS - build logs of this estate's own
|
|
93
|
+
* repositories mention it in prose - so the test is SAS's own vocabulary: the
|
|
94
|
+
* banner it prints about itself, its message codes, and its padded step numbers.
|
|
95
|
+
* Each of those is written by SAS and by nothing else.
|
|
96
|
+
*
|
|
97
|
+
* This is a heuristic, and one way only: a true answer means SAS wrote the text,
|
|
98
|
+
* while a false answer does not prove it did not - a trimmed excerpt of a log,
|
|
99
|
+
* pasted with only its `ERROR:` lines, carries none of the three and reads as
|
|
100
|
+
* somebody else's. A host that publishes diagnostics should therefore treat false
|
|
101
|
+
* as "not obviously SAS" rather than "not SAS".
|
|
102
|
+
*
|
|
103
|
+
* Counting marker lines instead was considered and rejected: two `ERROR:` lines is
|
|
104
|
+
* what a Python log is made of, so it would readmit exactly the files this
|
|
105
|
+
* predicate exists to keep out.
|
|
106
|
+
*
|
|
107
|
+
* The check is deliberately cheap and runs before a host publishes anything, so
|
|
108
|
+
* a `.log` from another tool is left alone.
|
|
51
109
|
*/
|
|
52
|
-
const
|
|
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));
|
|
114
|
+
exports.isSasLog = isSasLog;
|
|
53
115
|
/**
|
|
54
116
|
* The notes worth reporting, matched case-insensitively against the folded
|
|
55
117
|
* message. Each is a message SAS prints when something has gone wrong quietly -
|
|
@@ -123,7 +185,7 @@ const clean = (text) => text
|
|
|
123
185
|
* is shown.
|
|
124
186
|
*/
|
|
125
187
|
const parseLog = (text) => {
|
|
126
|
-
var _a;
|
|
188
|
+
var _a, _b, _c;
|
|
127
189
|
if (!text) {
|
|
128
190
|
return [];
|
|
129
191
|
}
|
|
@@ -135,7 +197,7 @@ const parseLog = (text) => {
|
|
|
135
197
|
continue;
|
|
136
198
|
}
|
|
137
199
|
const markerLine = line;
|
|
138
|
-
const parts = [clean((_a = match[
|
|
200
|
+
const parts = [clean((_a = match[7]) !== null && _a !== void 0 ? _a : '')];
|
|
139
201
|
let endLine = markerLine;
|
|
140
202
|
let wrapped = 0;
|
|
141
203
|
while (wrapped < MAX_WRAPPED_LINES &&
|
|
@@ -145,15 +207,21 @@ const parseLog = (text) => {
|
|
|
145
207
|
wrapped++;
|
|
146
208
|
parts.push(clean(lines[endLine]));
|
|
147
209
|
}
|
|
148
|
-
const severity = match[2].toLowerCase();
|
|
210
|
+
const severity = ((_b = match[2]) !== null && _b !== void 0 ? _b : match[5]).toLowerCase();
|
|
149
211
|
const message = parts.filter((part) => part !== '').join(' ');
|
|
150
212
|
// The wrapped lines belong to this message whether or not it is reported, so
|
|
151
213
|
// the scan resumes after them either way.
|
|
152
214
|
line = endLine;
|
|
215
|
+
// A marker with nothing after it is not a message: SAS does not print a bare
|
|
216
|
+
// `ERROR` or `ERROR:` line, and an empty issue would reach a host as a blank
|
|
217
|
+
// line in its problem list.
|
|
218
|
+
if (message === '') {
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
153
221
|
if (severity === 'note' && !(0, exports.isNotableNote)(message)) {
|
|
154
222
|
continue;
|
|
155
223
|
}
|
|
156
|
-
const code = match[3];
|
|
224
|
+
const code = (_c = match[3]) !== null && _c !== void 0 ? _c : match[6];
|
|
157
225
|
issues.push(Object.assign(Object.assign({ line: markerLine, endLine, column: match[1].length, endColumn: lines[markerLine].length, severity }, (code ? { code } : {})), { message }));
|
|
158
226
|
}
|
|
159
227
|
return issues;
|
package/logs/sasLog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sasLog.js","sourceRoot":"","sources":["../../src/logs/sasLog.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"sasLog.js","sourceRoot":"","sources":["../../src/logs/sasLog.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED