@sasjs/utils 4.2.0 → 4.3.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/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: 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.
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
- * 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.
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. 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
+ * 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. 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.
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
  /**
@@ -74,6 +108,11 @@ export declare const isNotableNote: (message: string) => boolean;
74
108
  * directly. A host that wants errors only filters on `severity`; nothing is
75
109
  * behind an option, because a notable note is worth reporting wherever the log
76
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.
77
116
  */
78
117
  export declare const parseLog: (text: string) => LogIssue[];
79
118
  /**
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: 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.
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
- * 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.
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. 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
+ * 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. 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.
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,77 @@
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
+ * 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.
78
+ */
79
+ const MARKER = /^((?:<[^>]*>)+[ \t]*|)(?:(ERROR|WARNING)(?:[ \t]+(\d+-\d+))?(:[ \t]?|[ \t]+)|(NOTE)(?:[ \t]+(\d+-\d+))?:[ \t]?)(.*)$/;
46
80
  /**
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.
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;
94
+ /**
95
+ * The phrases SAS prints about itself, and nothing else does: the version banner,
96
+ * the licence note, the platform note, the work-area conversion warning, the page
97
+ * header of a listing and the step footer. Every SAS log carries at least one;
98
+ * a log that has lost its head usually keeps the step footer.
51
99
  */
52
- const MARKER = /^((?:<[^>]*>)*\s*)(ERROR|WARNING|NOTE)(?:\s+(\d+-\d+))?:[ \t]?(.*)$/i;
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;
101
+ /**
102
+ * Whether a text is a SAS log rather than somebody else's log file.
103
+ *
104
+ * A marker alone does not say so: Python's logging writes `ERROR:root:boom` and
105
+ * a shell build log writes `ERROR: Command failed with exit code 1`, both at the
106
+ * start of a line. Nor does the word SAS - build logs of this estate's own
107
+ * repositories mention it in prose - so the test is SAS's own vocabulary: the
108
+ * banner it prints about itself, its message codes, and its padded step numbers.
109
+ * Each of those is written by SAS and by nothing else.
110
+ *
111
+ * This is a heuristic, and one way only: a true answer means SAS wrote the text,
112
+ * while a false answer does not prove it did not - a trimmed excerpt of a log,
113
+ * pasted with only its `ERROR:` lines, carries none of the three and reads as
114
+ * somebody else's. A host that publishes diagnostics should therefore treat false
115
+ * as "not obviously SAS" rather than "not SAS".
116
+ *
117
+ * Counting marker lines instead was considered and rejected: two `ERROR:` lines is
118
+ * what a Python log is made of, so it would readmit exactly the files this
119
+ * predicate exists to keep out.
120
+ *
121
+ * The check is deliberately cheap and runs before a host publishes anything, so
122
+ * a `.log` from another tool is left alone.
123
+ */
124
+ const isSasLog = (text) => SAS_BANNER.test(text) || SAS_SHAPE.test(text);
125
+ exports.isSasLog = isSasLog;
53
126
  /**
54
127
  * The notes worth reporting, matched case-insensitively against the folded
55
128
  * message. Each is a message SAS prints when something has gone wrong quietly -
@@ -95,24 +168,83 @@ const NOTE_KEYWORDS = [
95
168
  'not positive definite',
96
169
  'The SAS System stopped processing this step because of errors'
97
170
  ];
98
- 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');
99
179
  /** How many wrapped lines one message may absorb, so a malformed log cannot run away. */
100
180
  const MAX_WRAPPED_LINES = 10;
101
181
  /** 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
- };
182
+ const isNotableNote = (message) => NOTABLE_NOTE.test(message);
106
183
  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();
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 SAS wrapped: indented, and neither a pointer line nor a marker.
191
+ *
192
+ * The marker test is {@link MARKER} itself, applied to the trimmed line, so a
193
+ * continuation is excluded exactly when the line would have been a marker had it
194
+ * begun the line - the markup-prefixed form included. A second, subtly different
195
+ * expression is how an indented marker ends up belonging to neither the message
196
+ * above nor the issue list. Such a marker is dropped rather than reported, which
197
+ * is the rule the parser states: a message begins the line.
198
+ */
199
+ const isWrappedLine = (line) => /^\s+\S/.test(line) && !POINTER_LINE.test(line) && !MARKER.test(line.trim());
200
+ /**
201
+ * Whether a character code is printable ASCII and not a space. The fast path in
202
+ * {@link clean} is limited to ASCII at both ends, so a message carrying one of
203
+ * the non-ASCII spaces the slow path collapses still takes the slow path.
204
+ */
205
+ const isPlainCode = (code) => code > 32 && code < 127;
206
+ /**
207
+ * Removes markup and collapses the whitespace a wrapped message carries.
208
+ *
209
+ * Most messages need neither: a single line with no markup and no run of spaces
210
+ * is returned as it is, which keeps three passes off the common path - this is
211
+ * the hottest function in the module on a large log.
212
+ */
213
+ const clean = (text) => {
214
+ const plain = isPlainCode(text.charCodeAt(0)) &&
215
+ isPlainCode(text.charCodeAt(text.length - 1)) &&
216
+ text.indexOf('<') < 0 &&
217
+ text.indexOf('\t') < 0 &&
218
+ text.indexOf(' ') < 0;
219
+ return plain
220
+ ? text
221
+ : text
222
+ .replace(/<[^>]*>/g, '')
223
+ .replace(/\s+/g, ' ')
224
+ .trim();
225
+ };
226
+ /**
227
+ * Finds every ERROR and WARNING in a SAS log, and every notable note.
228
+ *
229
+ * The issue list is in log order. `line` and `column` address the text as
230
+ * supplied, so a caller can offset a decoration or a diagnostic by them
231
+ * directly. A host that wants errors only filters on `severity`; nothing is
232
+ * behind an option, because a notable note is worth reporting wherever the log
233
+ * is shown.
234
+ */
235
+ /**
236
+ * The marker expression with the multiline flags, so one call walks the whole
237
+ * text. `exec` on a line at a time costs a call per line - half a million on a
238
+ * 16 MB log - where one pass over the string costs a fraction of that, and the
239
+ * line and column indexes are recovered from the match offsets instead.
240
+ */
241
+ const SCAN = new RegExp(MARKER.source, 'gm');
242
+ /** The index of the line break that ends the line starting at `from`, or -1. */
243
+ const lineEnd = (text, from) => text.indexOf('\n', from);
244
+ /** A slice of the text with the carriage return of a CRLF line ending removed. */
245
+ const withoutCr = (text, from, to) => to > from && text.charCodeAt(to - 1) === 13
246
+ ? text.slice(from, to - 1)
247
+ : text.slice(from, to);
116
248
  /**
117
249
  * Finds every ERROR and WARNING in a SAS log, and every notable note.
118
250
  *
@@ -121,40 +253,83 @@ const clean = (text) => text
121
253
  * directly. A host that wants errors only filters on `severity`; nothing is
122
254
  * behind an option, because a notable note is worth reporting wherever the log
123
255
  * is shown.
256
+ *
257
+ * The text is never split into lines: a log is often megabytes, and a pass that
258
+ * builds an array of its lines costs more than the scan and hands the collector
259
+ * a million strings. One global match walks the text, the line number is counted
260
+ * forward from the previous match, and only the lines a message needs are sliced.
124
261
  */
125
262
  const parseLog = (text) => {
126
263
  var _a;
127
264
  if (!text) {
128
265
  return [];
129
266
  }
130
- const lines = text.split(/\r?\n/);
131
267
  const issues = [];
132
- for (let line = 0; line < lines.length; line++) {
133
- const match = MARKER.exec(lines[line]);
134
- if (!match) {
135
- continue;
268
+ let line = 0;
269
+ let countedTo = 0;
270
+ let match;
271
+ SCAN.lastIndex = 0;
272
+ while ((match = SCAN.exec(text)) !== null) {
273
+ const markerStart = match.index;
274
+ // Lines between the last block and this marker.
275
+ for (let index = text.indexOf('\n', countedTo); index !== -1 && index < markerStart; index = text.indexOf('\n', index + 1)) {
276
+ line++;
136
277
  }
278
+ const markerEnd = lineEnd(text, markerStart);
279
+ const endIndex = markerEnd === -1 ? text.length : markerEnd;
137
280
  const markerLine = line;
138
- const parts = [clean((_a = match[4]) !== null && _a !== void 0 ? _a : '')];
281
+ let message = clean(match[7]);
139
282
  let endLine = markerLine;
283
+ let cursor = endIndex + 1;
140
284
  let wrapped = 0;
141
- while (wrapped < MAX_WRAPPED_LINES &&
142
- endLine + 1 < lines.length &&
143
- isWrappedLine(lines[endLine + 1])) {
285
+ while (cursor <= text.length && wrapped < MAX_WRAPPED_LINES) {
286
+ const nextEnd = lineEnd(text, cursor);
287
+ const sliceEnd = nextEnd === -1 ? text.length : nextEnd;
288
+ const candidate = withoutCr(text, cursor, sliceEnd);
289
+ if (!isWrappedLine(candidate)) {
290
+ break;
291
+ }
292
+ const part = clean(candidate);
293
+ if (part !== '') {
294
+ message = message === '' ? part : `${message} ${part}`;
295
+ }
144
296
  endLine++;
145
297
  wrapped++;
146
- parts.push(clean(lines[endLine]));
298
+ cursor = sliceEnd + 1;
147
299
  }
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;
300
+ // The lines folded into this message belong to it whether or not it is
301
+ // reported, so the scan resumes after them either way.
302
+ SCAN.lastIndex = cursor;
303
+ countedTo = cursor;
304
+ line = endLine + 1;
305
+ // A marker with nothing after it is not a message: SAS does not print a bare
306
+ // `ERROR` or `ERROR:` line, and an empty issue would reach a host as a blank
307
+ // line in its problem list.
308
+ if (message === '') {
309
+ continue;
310
+ }
311
+ const severity = match[2]
312
+ ? match[2] === 'ERROR'
313
+ ? 'error'
314
+ : 'warning'
315
+ : 'note';
153
316
  if (severity === 'note' && !(0, exports.isNotableNote)(message)) {
154
317
  continue;
155
318
  }
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 }));
319
+ const code = (_a = match[3]) !== null && _a !== void 0 ? _a : match[6];
320
+ const issue = {
321
+ line: markerLine,
322
+ endLine,
323
+ column: match[1].length,
324
+ // The whole match is the line's text: `$` stops before the `\r` of a CRLF.
325
+ endColumn: match[0].length,
326
+ severity,
327
+ message
328
+ };
329
+ if (code) {
330
+ issue.code = code;
331
+ }
332
+ issues.push(issue);
158
333
  }
159
334
  return issues;
160
335
  };
@@ -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":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;;;AA6BH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,GACV,sHAAsH,CAAA;AAExH;;;;;;;;;;;;GAYG;AACH,MAAM,SAAS,GACb,8NAA8N,CAAA;AAEhO;;;;;GAKG;AACH,MAAM,UAAU,GACd,sIAAsI,CAAA;AAExI;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACI,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAW,EAAE,CAChD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AADlC,QAAA,QAAQ,YAC0B;AAE/C;;;;;;;;;;;;;GAaG;AACH,MAAM,aAAa,GAAG;IACpB,kBAAkB;IAClB,+BAA+B;IAC/B,kBAAkB;IAClB,gDAAgD;IAChD,cAAc;IACd,kBAAkB;IAClB,wBAAwB;IACxB,wBAAwB;IACxB,8BAA8B;IAC9B,eAAe;IACf,oBAAoB;IACpB,gCAAgC;IAChC,wBAAwB;IACxB,iCAAiC;IACjC,sBAAsB;IACtB,eAAe;IACf,gCAAgC;IAChC,WAAW;IACX,QAAQ;IACR,sCAAsC;IACtC,mBAAmB;IACnB,2BAA2B;IAC3B,kDAAkD;IAClD,yBAAyB;IACzB,sBAAsB;IACtB,wBAAwB;IACxB,qBAAqB;IACrB,uBAAuB;IACvB,+DAA+D;CAChE,CAAA;AAED,4FAA4F;AAC5F,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE,CACtC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;AAE7C;;;;GAIG;AACH,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;AAEzE,yFAAyF;AACzF,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAE5B,2DAA2D;AACpD,MAAM,aAAa,GAAG,CAAC,OAAe,EAAW,EAAE,CACxD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AADf,QAAA,aAAa,iBACE;AAE5B;;;GAGG;AACH,MAAM,YAAY,GAAG,2BAA2B,CAAA;AAEhD;;;;;;;;;GASG;AACH,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE,CAC9C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;AAE9E;;;;GAIG;AACH,MAAM,WAAW,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,GAAG,CAAA;AAEtE;;;;;;GAMG;AACH,MAAM,KAAK,GAAG,CAAC,IAAY,EAAU,EAAE;IACrC,MAAM,KAAK,GACT,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAExB,OAAO,KAAK;QACV,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI;aACD,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;aACvB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,IAAI,EAAE,CAAA;AACf,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH;;;;;GAKG;AACH,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAE5C,gFAAgF;AAChF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAEhF,kFAAkF;AAClF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,EAAU,EAAU,EAAE,CACnE,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;IACzC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AAE1B;;;;;;;;;;;;;GAaG;AACI,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAc,EAAE;;IACnD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,CAAA;KACV;IAED,MAAM,MAAM,GAAe,EAAE,CAAA;IAC7B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,KAA6B,CAAA;IAEjC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;IAElB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE;QACzC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAA;QAE/B,gDAAgD;QAChD,KACE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,EACzC,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,WAAW,EACnC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,EACrC;YACA,IAAI,EAAE,CAAA;SACP;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QAC5C,MAAM,QAAQ,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAA;QAEvB,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7B,IAAI,OAAO,GAAG,UAAU,CAAA;QACxB,IAAI,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAA;QACzB,IAAI,OAAO,GAAG,CAAC,CAAA;QAEf,OAAO,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,GAAG,iBAAiB,EAAE;YAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YACrC,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;YACvD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YAEnD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;gBAC7B,MAAK;aACN;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;YAC7B,IAAI,IAAI,KAAK,EAAE,EAAE;gBACf,OAAO,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,CAAA;aACvD;YAED,OAAO,EAAE,CAAA;YACT,OAAO,EAAE,CAAA;YACT,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAA;SACtB;QAED,uEAAuE;QACvE,uDAAuD;QACvD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAA;QACvB,SAAS,GAAG,MAAM,CAAA;QAClB,IAAI,GAAG,OAAO,GAAG,CAAC,CAAA;QAElB,6EAA6E;QAC7E,6EAA6E;QAC7E,4BAA4B;QAC5B,IAAI,OAAO,KAAK,EAAE,EAAE;YAClB,SAAQ;SACT;QAED,MAAM,QAAQ,GAAgB,KAAK,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO;gBACpB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,SAAS;YACb,CAAC,CAAC,MAAM,CAAA;QAEV,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC,IAAA,qBAAa,EAAC,OAAO,CAAC,EAAE;YAClD,SAAQ;SACT;QAED,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,CAAC,CAAC,mCAAI,KAAK,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,KAAK,GAAa;YACtB,IAAI,EAAE,UAAU;YAChB,OAAO;YACP,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;YACvB,2EAA2E;YAC3E,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;YAC1B,QAAQ;YACR,OAAO;SACR,CAAA;QAED,IAAI,IAAI,EAAE;YACR,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;SAClB;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KACnB;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AA9FY,QAAA,QAAQ,YA8FpB;AAED;;;;;;;GAOG;AACI,MAAM,SAAS,GAAG,CACvB,MAAkB,EAClB,IAAY,EACZ,YAA4B,MAAM,EACZ,EAAE;;IACxB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,SAAS,CAAA;KACjB;IAED,IAAI,SAAS,KAAK,MAAM,EAAE;QACxB,OAAO,MAAA,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,mCAAI,MAAM,CAAC,CAAC,CAAC,CAAA;KAC9D;IAED,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;QACvD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE;YAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;SACrB;KACF;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAClC,CAAC,CAAA;AApBY,QAAA,SAAS,aAoBrB"}
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.2.0"
99
+ "version": "4.3.1"
100
100
  }