@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 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)(?:\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/;
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
- const NOTABLE_NOTE_KEYWORDS = NOTE_KEYWORDS.map((keyword) => keyword.toLowerCase());
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
- /** A line SAS wrapped: indented, and not one of the pointer lines it prints under source. */
170
- const isWrappedLine = (line) => /^\s+\S/.test(line) &&
171
- !/^\s*[-_]+\s*$/.test(line) &&
172
- !/^\s*\d+\s*$/.test(line);
173
- /** Removes markup and collapses the whitespace a wrapped message carries. */
174
- const clean = (text) => text
175
- .replace(/<[^>]*>/g, '')
176
- .replace(/\s+/g, ' ')
177
- .trim();
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, _b, _c;
281
+ var _a;
189
282
  if (!text) {
190
283
  return [];
191
284
  }
192
- const lines = text.split(/\r?\n/);
193
285
  const issues = [];
194
- for (let line = 0; line < lines.length; line++) {
195
- const match = MARKER.exec(lines[line]);
196
- if (!match) {
197
- continue;
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
- const parts = [clean((_a = match[7]) !== null && _a !== void 0 ? _a : '')];
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
- endLine + 1 < lines.length &&
205
- isWrappedLine(lines[endLine + 1])) {
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
- parts.push(clean(lines[endLine]));
316
+ cursor = sliceEnd + 1;
209
317
  }
210
- const severity = ((_b = match[2]) !== null && _b !== void 0 ? _b : match[5]).toLowerCase();
211
- const message = parts.filter((part) => part !== '').join(' ');
212
- // The wrapped lines belong to this message whether or not it is reported, so
213
- // the scan resumes after them either way.
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 = (_c = match[3]) !== null && _c !== void 0 ? _c : match[6];
225
- issues.push(Object.assign(Object.assign({ line: markerLine, endLine, column: match[1].length, endColumn: lines[markerLine].length, severity }, (code ? { code } : {})), { message }));
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
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sasLog.js","sourceRoot":"","sources":["../../src/logs/sasLog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sasLog.js","sourceRoot":"","sources":["../../src/logs/sasLog.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -96,5 +96,5 @@
96
96
  "jwt-decode": "4.0.0",
97
97
  "prompts": "2.4.2"
98
98
  },
99
- "version": "4.3.0"
99
+ "version": "4.3.2"
100
100
  }