@sasjs/utils 4.1.2 → 4.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/README.md +15 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/logs/index.d.ts +1 -0
- package/logs/index.js +14 -0
- package/logs/index.js.map +1 -0
- package/logs/sasLog.d.ts +87 -0
- package/logs/sasLog.js +186 -0
- package/logs/sasLog.js.map +1 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@ import { ServerType } from '@sasjs/utils/types'
|
|
|
20
20
|
import { prefixMessage } from '@sasjs/utils/error'
|
|
21
21
|
import { isSpecialMissing } from '@sasjs/utils/input/validators'
|
|
22
22
|
import { bytesToSize } from '@sasjs/utils/utils'
|
|
23
|
+
import { parseLog } from '@sasjs/utils/logs'
|
|
23
24
|
```
|
|
24
25
|
|
|
25
26
|
The hash and sync helpers - `getHash`, `compareHashes`, `extractHashArray`,
|
|
@@ -29,6 +30,20 @@ folders on disk, so they are Node-only, and the barrel does not re-export them:
|
|
|
29
30
|
bundle that imports the barrel for anything else no longer reaches `crypto`, which used to
|
|
30
31
|
arrive with the whole AES/RSA/ECDSA polyfill suite behind it.
|
|
31
32
|
|
|
33
|
+
`@sasjs/utils/logs` parses a SAS log: `parseLog(text)` returns every `ERROR`,
|
|
34
|
+
`WARNING` and notable `NOTE` as an issue addressed by line and column, and
|
|
35
|
+
`nextIssue(issues, line, direction)` walks that list for a next/previous problem
|
|
36
|
+
control. It is a pair of pure functions with no imports at all, so it runs
|
|
37
|
+
unchanged in Node, in a browser bundle and in an editor extension, and it lives
|
|
38
|
+
on a subpath so a browser never reaches the barrel's Node dependencies.
|
|
39
|
+
|
|
40
|
+
Only the notes the log-checking literature chases are reported - an
|
|
41
|
+
uninitialized variable, invalid data, a W.D format too small, values converted to
|
|
42
|
+
another type, repeats of BY values - because a log carries thousands of ordinary
|
|
43
|
+
notes and none of them is what a reader is looking for. The list is
|
|
44
|
+
`NOTE_KEYWORDS` in `src/logs/sasLog.ts`, and adding a keyword is how the scope
|
|
45
|
+
grows.
|
|
46
|
+
|
|
32
47
|
## Contributors ✨
|
|
33
48
|
|
|
34
49
|
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -15,6 +15,7 @@ __exportStar(require("./file"), exports);
|
|
|
15
15
|
__exportStar(require("./formatter"), exports);
|
|
16
16
|
__exportStar(require("./input"), exports);
|
|
17
17
|
__exportStar(require("./logger"), exports);
|
|
18
|
+
__exportStar(require("./logs"), exports);
|
|
18
19
|
__exportStar(require("./sasjsCli"), exports);
|
|
19
20
|
__exportStar(require("./time"), exports);
|
|
20
21
|
__exportStar(require("./types"), exports);
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAsB;AACtB,yCAAsB;AACtB,8CAA2B;AAC3B,0CAAuB;AACvB,2CAAwB;AACxB,6CAA0B;AAC1B,yCAAsB;AACtB,0CAAuB;AACvB,0CAAuB;AACvB,gDAA6B;AAC7B,yEAAyE;AACzE,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,uBAAuB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAsB;AACtB,yCAAsB;AACtB,8CAA2B;AAC3B,0CAAuB;AACvB,2CAAwB;AACxB,yCAAsB;AACtB,6CAA0B;AAC1B,yCAAsB;AACtB,0CAAuB;AACvB,0CAAuB;AACvB,gDAA6B;AAC7B,yEAAyE;AACzE,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,uBAAuB"}
|
package/logs/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sasLog';
|
package/logs/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./sasLog"), exports);
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwB"}
|
package/logs/sasLog.d.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAS log parsing.
|
|
3
|
+
*
|
|
4
|
+
* A SAS log is a stream of statements and messages, and only the messages
|
|
5
|
+
* matter to a reader looking for trouble: everything SAS prints at the start of
|
|
6
|
+
* a line as `ERROR:`, `WARNING:` or `NOTE:`. This module finds those messages
|
|
7
|
+
* and reports where they are, as line and column indexes into the text it was
|
|
8
|
+
* given, so a host can underline them without re-scanning the log and without
|
|
9
|
+
* rewriting it.
|
|
10
|
+
*
|
|
11
|
+
* What is recognised:
|
|
12
|
+
*
|
|
13
|
+
* ERROR: Libref X is not assigned.
|
|
14
|
+
* ERROR 22-322: Syntax error, expecting one of the following: ;, CANCEL,
|
|
15
|
+
* RUN, QUIT.
|
|
16
|
+
* WARNING 1-322: Assuming the symbol Y was misspelled.
|
|
17
|
+
* NOTE: Variable x is uninitialized.
|
|
18
|
+
*
|
|
19
|
+
* The numeric code between the marker and the colon is SAS's own message
|
|
20
|
+
* identifier and is reported separately, so a host can group by it.
|
|
21
|
+
*
|
|
22
|
+
* NOTES are reported only when they are the ones the log-checking literature
|
|
23
|
+
* flags - see NOTE_KEYWORDS. A log carries thousands of ordinary notes and none
|
|
24
|
+
* of them is what a reader is looking for, so the vocabulary is a closed list
|
|
25
|
+
* rather than "any NOTE". INFO lines are not reported at all.
|
|
26
|
+
*
|
|
27
|
+
* Lines SAS wrapped are folded into the message they belong to, so one problem
|
|
28
|
+
* is one issue rather than one issue per wrapped line, and the keyword search
|
|
29
|
+
* runs on the folded message - a note whose keyword lands on the second line is
|
|
30
|
+
* still found. Lines that merely contain the word ERROR are not matched: the
|
|
31
|
+
* marker has to start the line, which keeps a print of a data set, or a message
|
|
32
|
+
* quoting another log, out of the results.
|
|
33
|
+
*
|
|
34
|
+
* ODS HTML logs wrap every line in markup. A tag sequence before the marker is
|
|
35
|
+
* skipped and tags are stripped from the reported message, so the same parse
|
|
36
|
+
* serves a plain log and an HTML one. The line and column indexes stay those of
|
|
37
|
+
* the text as supplied, because they are what the caller needs to address.
|
|
38
|
+
*
|
|
39
|
+
* Nothing here touches the log: the caller renders from the issue list, which is
|
|
40
|
+
* what lets one log be shown in an editor, in a browser panel and in a report
|
|
41
|
+
* from the same parse.
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* The severities a log issue can carry. `note` is only ever a notable note - see
|
|
45
|
+
* NOTE_KEYWORDS - never an ordinary one.
|
|
46
|
+
*/
|
|
47
|
+
export declare type LogSeverity = 'error' | 'warning' | 'note';
|
|
48
|
+
/** One ERROR, WARNING or notable NOTE in a SAS log, addressed in the text it was parsed from. */
|
|
49
|
+
export interface LogIssue {
|
|
50
|
+
/** Zero-based index of the line carrying the marker. */
|
|
51
|
+
line: number;
|
|
52
|
+
/** Zero-based index of the last line SAS wrapped into this message. */
|
|
53
|
+
endLine: number;
|
|
54
|
+
/** Zero-based column where the marker starts on `line`. */
|
|
55
|
+
column: number;
|
|
56
|
+
/** Zero-based column one past the end of `line`, for underlining it. */
|
|
57
|
+
endColumn: number;
|
|
58
|
+
/** The marker that introduced the issue. */
|
|
59
|
+
severity: LogSeverity;
|
|
60
|
+
/** SAS's message identifier, e.g. `22-322` for `ERROR 22-322:`. */
|
|
61
|
+
code?: string;
|
|
62
|
+
/** The message text, with wrapped lines joined and markup stripped. */
|
|
63
|
+
message: string;
|
|
64
|
+
}
|
|
65
|
+
/** Direction of travel for {@link nextIssue}. */
|
|
66
|
+
export declare type IssueDirection = 'next' | 'previous';
|
|
67
|
+
/** Whether a note's message is one of the notable ones. */
|
|
68
|
+
export declare const isNotableNote: (message: string) => boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Finds every ERROR and WARNING in a SAS log, and every notable note.
|
|
71
|
+
*
|
|
72
|
+
* The issue list is in log order. `line` and `column` address the text as
|
|
73
|
+
* supplied, so a caller can offset a decoration or a diagnostic by them
|
|
74
|
+
* directly. A host that wants errors only filters on `severity`; nothing is
|
|
75
|
+
* behind an option, because a notable note is worth reporting wherever the log
|
|
76
|
+
* is shown.
|
|
77
|
+
*/
|
|
78
|
+
export declare const parseLog: (text: string) => LogIssue[];
|
|
79
|
+
/**
|
|
80
|
+
* The issue after (or before) a given line, wrapping around, which is the
|
|
81
|
+
* behaviour both a "next problem" button and a "previous problem" button need.
|
|
82
|
+
*
|
|
83
|
+
* A line of -1 starts at the beginning, and a line past the end starts again
|
|
84
|
+
* from the beginning, so a caller does not have to special-case either end.
|
|
85
|
+
* Returns undefined only when the log holds no issues.
|
|
86
|
+
*/
|
|
87
|
+
export declare const nextIssue: (issues: LogIssue[], line: number, direction?: IssueDirection) => LogIssue | undefined;
|
package/logs/sasLog.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SAS log parsing.
|
|
4
|
+
*
|
|
5
|
+
* A SAS log is a stream of statements and messages, and only the messages
|
|
6
|
+
* matter to a reader looking for trouble: everything SAS prints at the start of
|
|
7
|
+
* a line as `ERROR:`, `WARNING:` or `NOTE:`. This module finds those messages
|
|
8
|
+
* and reports where they are, as line and column indexes into the text it was
|
|
9
|
+
* given, so a host can underline them without re-scanning the log and without
|
|
10
|
+
* rewriting it.
|
|
11
|
+
*
|
|
12
|
+
* What is recognised:
|
|
13
|
+
*
|
|
14
|
+
* ERROR: Libref X is not assigned.
|
|
15
|
+
* ERROR 22-322: Syntax error, expecting one of the following: ;, CANCEL,
|
|
16
|
+
* RUN, QUIT.
|
|
17
|
+
* WARNING 1-322: Assuming the symbol Y was misspelled.
|
|
18
|
+
* NOTE: Variable x is uninitialized.
|
|
19
|
+
*
|
|
20
|
+
* The numeric code between the marker and the colon is SAS's own message
|
|
21
|
+
* identifier and is reported separately, so a host can group by it.
|
|
22
|
+
*
|
|
23
|
+
* NOTES are reported only when they are the ones the log-checking literature
|
|
24
|
+
* flags - see NOTE_KEYWORDS. A log carries thousands of ordinary notes and none
|
|
25
|
+
* of them is what a reader is looking for, so the vocabulary is a closed list
|
|
26
|
+
* rather than "any NOTE". INFO lines are not reported at all.
|
|
27
|
+
*
|
|
28
|
+
* Lines SAS wrapped are folded into the message they belong to, so one problem
|
|
29
|
+
* is one issue rather than one issue per wrapped line, and the keyword search
|
|
30
|
+
* runs on the folded message - a note whose keyword lands on the second line is
|
|
31
|
+
* still found. Lines that merely contain the word ERROR are not matched: the
|
|
32
|
+
* marker has to start the line, which keeps a print of a data set, or a message
|
|
33
|
+
* quoting another log, out of the results.
|
|
34
|
+
*
|
|
35
|
+
* ODS HTML logs wrap every line in markup. A tag sequence before the marker is
|
|
36
|
+
* skipped and tags are stripped from the reported message, so the same parse
|
|
37
|
+
* serves a plain log and an HTML one. The line and column indexes stay those of
|
|
38
|
+
* the text as supplied, because they are what the caller needs to address.
|
|
39
|
+
*
|
|
40
|
+
* Nothing here touches the log: the caller renders from the issue list, which is
|
|
41
|
+
* what lets one log be shown in an editor, in a browser panel and in a report
|
|
42
|
+
* from the same parse.
|
|
43
|
+
*/
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.nextIssue = exports.parseLog = exports.isNotableNote = void 0;
|
|
46
|
+
/**
|
|
47
|
+
* `ERROR`, `WARNING` or `NOTE` at the start of a line, optionally preceded by
|
|
48
|
+
* the tags of an HTML log, optionally followed by SAS's message identifier,
|
|
49
|
+
* then a colon. The prefix is captured so the marker's column is exact even when
|
|
50
|
+
* tags lead it.
|
|
51
|
+
*/
|
|
52
|
+
const MARKER = /^((?:<[^>]*>)*\s*)(ERROR|WARNING|NOTE)(?:\s+(\d+-\d+))?:[ \t]?(.*)$/i;
|
|
53
|
+
/**
|
|
54
|
+
* The notes worth reporting, matched case-insensitively against the folded
|
|
55
|
+
* message. Each is a message SAS prints when something has gone wrong quietly -
|
|
56
|
+
* a variable never set, a row that failed input, a value silently converted, a
|
|
57
|
+
* format too small to hold a number - and each is chased by the log checkers
|
|
58
|
+
* published in the SAS user-group papers: "Log Checks Made Easy" (SAS Global
|
|
59
|
+
* Forum 2012, 042-2012), "Check Please: An Automated Approach to Log Checking"
|
|
60
|
+
* (MWSUG 2017, TT02), "You've Got E-Mail: Automatic Log Checking via E-Mail
|
|
61
|
+
* Notification" (SUGI 31, 128-31) and the note table behind SASLogChecker.
|
|
62
|
+
*
|
|
63
|
+
* Adding a keyword widens what every host reports, so the list is deliberately
|
|
64
|
+
* short: a message belongs here when a reviewer would want to see it even though
|
|
65
|
+
* SAS called it a note.
|
|
66
|
+
*/
|
|
67
|
+
const NOTE_KEYWORDS = [
|
|
68
|
+
'is uninitialized',
|
|
69
|
+
'Missing values were generated',
|
|
70
|
+
'Division by zero',
|
|
71
|
+
'Mathematical operations could not be performed',
|
|
72
|
+
'Invalid data',
|
|
73
|
+
'Invalid argument',
|
|
74
|
+
'Invalid third argument',
|
|
75
|
+
'have been converted to',
|
|
76
|
+
'The meaning of an identifier',
|
|
77
|
+
'too small for',
|
|
78
|
+
'Unreferenced label',
|
|
79
|
+
'WHERE clause has been replaced',
|
|
80
|
+
'stopped due to looping',
|
|
81
|
+
'will be overwritten by data set',
|
|
82
|
+
'repeats of BY values',
|
|
83
|
+
'was not found',
|
|
84
|
+
'reached past the end of a line',
|
|
85
|
+
'LOST CARD',
|
|
86
|
+
'NOEXEC',
|
|
87
|
+
'A CASE expression has no ELSE clause',
|
|
88
|
+
'have been thinned',
|
|
89
|
+
'discarded because neither',
|
|
90
|
+
'Processing on disk occurred during summarization',
|
|
91
|
+
'log axis cannot support',
|
|
92
|
+
'lines were truncated',
|
|
93
|
+
'outside the axis range',
|
|
94
|
+
'infinite likelihood',
|
|
95
|
+
'not positive definite',
|
|
96
|
+
'The SAS System stopped processing this step because of errors'
|
|
97
|
+
];
|
|
98
|
+
const NOTABLE_NOTE_KEYWORDS = NOTE_KEYWORDS.map((keyword) => keyword.toLowerCase());
|
|
99
|
+
/** How many wrapped lines one message may absorb, so a malformed log cannot run away. */
|
|
100
|
+
const MAX_WRAPPED_LINES = 10;
|
|
101
|
+
/** Whether a note's message is one of the notable ones. */
|
|
102
|
+
const isNotableNote = (message) => {
|
|
103
|
+
const lower = message.toLowerCase();
|
|
104
|
+
return NOTABLE_NOTE_KEYWORDS.some((keyword) => lower.includes(keyword));
|
|
105
|
+
};
|
|
106
|
+
exports.isNotableNote = isNotableNote;
|
|
107
|
+
/** A line SAS wrapped: indented, and not one of the pointer lines it prints under source. */
|
|
108
|
+
const isWrappedLine = (line) => /^\s+\S/.test(line) &&
|
|
109
|
+
!/^\s*[-_]+\s*$/.test(line) &&
|
|
110
|
+
!/^\s*\d+\s*$/.test(line);
|
|
111
|
+
/** Removes markup and collapses the whitespace a wrapped message carries. */
|
|
112
|
+
const clean = (text) => text
|
|
113
|
+
.replace(/<[^>]*>/g, '')
|
|
114
|
+
.replace(/\s+/g, ' ')
|
|
115
|
+
.trim();
|
|
116
|
+
/**
|
|
117
|
+
* Finds every ERROR and WARNING in a SAS log, and every notable note.
|
|
118
|
+
*
|
|
119
|
+
* The issue list is in log order. `line` and `column` address the text as
|
|
120
|
+
* supplied, so a caller can offset a decoration or a diagnostic by them
|
|
121
|
+
* directly. A host that wants errors only filters on `severity`; nothing is
|
|
122
|
+
* behind an option, because a notable note is worth reporting wherever the log
|
|
123
|
+
* is shown.
|
|
124
|
+
*/
|
|
125
|
+
const parseLog = (text) => {
|
|
126
|
+
var _a;
|
|
127
|
+
if (!text) {
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
const lines = text.split(/\r?\n/);
|
|
131
|
+
const issues = [];
|
|
132
|
+
for (let line = 0; line < lines.length; line++) {
|
|
133
|
+
const match = MARKER.exec(lines[line]);
|
|
134
|
+
if (!match) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const markerLine = line;
|
|
138
|
+
const parts = [clean((_a = match[4]) !== null && _a !== void 0 ? _a : '')];
|
|
139
|
+
let endLine = markerLine;
|
|
140
|
+
let wrapped = 0;
|
|
141
|
+
while (wrapped < MAX_WRAPPED_LINES &&
|
|
142
|
+
endLine + 1 < lines.length &&
|
|
143
|
+
isWrappedLine(lines[endLine + 1])) {
|
|
144
|
+
endLine++;
|
|
145
|
+
wrapped++;
|
|
146
|
+
parts.push(clean(lines[endLine]));
|
|
147
|
+
}
|
|
148
|
+
const severity = match[2].toLowerCase();
|
|
149
|
+
const message = parts.filter((part) => part !== '').join(' ');
|
|
150
|
+
// The wrapped lines belong to this message whether or not it is reported, so
|
|
151
|
+
// the scan resumes after them either way.
|
|
152
|
+
line = endLine;
|
|
153
|
+
if (severity === 'note' && !(0, exports.isNotableNote)(message)) {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
const code = match[3];
|
|
157
|
+
issues.push(Object.assign(Object.assign({ line: markerLine, endLine, column: match[1].length, endColumn: lines[markerLine].length, severity }, (code ? { code } : {})), { message }));
|
|
158
|
+
}
|
|
159
|
+
return issues;
|
|
160
|
+
};
|
|
161
|
+
exports.parseLog = parseLog;
|
|
162
|
+
/**
|
|
163
|
+
* The issue after (or before) a given line, wrapping around, which is the
|
|
164
|
+
* behaviour both a "next problem" button and a "previous problem" button need.
|
|
165
|
+
*
|
|
166
|
+
* A line of -1 starts at the beginning, and a line past the end starts again
|
|
167
|
+
* from the beginning, so a caller does not have to special-case either end.
|
|
168
|
+
* Returns undefined only when the log holds no issues.
|
|
169
|
+
*/
|
|
170
|
+
const nextIssue = (issues, line, direction = 'next') => {
|
|
171
|
+
var _a;
|
|
172
|
+
if (issues.length === 0) {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
if (direction === 'next') {
|
|
176
|
+
return (_a = issues.find((issue) => issue.line > line)) !== null && _a !== void 0 ? _a : issues[0];
|
|
177
|
+
}
|
|
178
|
+
for (let index = issues.length - 1; index >= 0; index--) {
|
|
179
|
+
if (issues[index].line < line) {
|
|
180
|
+
return issues[index];
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return issues[issues.length - 1];
|
|
184
|
+
};
|
|
185
|
+
exports.nextIssue = nextIssue;
|
|
186
|
+
//# sourceMappingURL=sasLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sasLog.js","sourceRoot":"","sources":["../../src/logs/sasLog.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED