Skip to content

Commit

Permalink
[osd/std] Add additional recovery from false-positives in handling lo…
Browse files Browse the repository at this point in the history
…ng numerals

Signed-off-by: Miki <miki@amazon.com>
  • Loading branch information
AMoo-Miki committed Feb 26, 2024
1 parent 8d3df17 commit e77adaf
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- [BUG][Multiple Datasource] Fix datasource testing connection unexpectedly passed with wrong endpoint [#5663](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5663)
- [Table Visualization] Fix filter action buttons for split table aggregations ([#5619](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5619))
- [BUG][Discover] Allow saved sort from search embeddable to load in Dashboard ([#5934](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5934))
- [osd/std] Add additional recovery from false-positives in handling of long numerals ([#5956](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5956))

### 🚞 Infrastructure

Expand Down
32 changes: 27 additions & 5 deletions packages/osd-std/src/json.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,16 +150,38 @@ const parseStringWithLongNumerals = (
} catch (e) {
hadException = true;
/* There are two types of exception objects that can be raised:
* 1) a proper object with lineNumber and columnNumber which we can use
* 2) a textual message with the position that we need to parse
* 1) a textual message with the position that we need to parse
* i. Unexpected [token|string ...] at position ...
* ii. expected ',' or '}' after property value in object at line ... column ...
* 2) a proper object with lineNumber and columnNumber which we can use
* Note: this might refer to the part of the code that threw the exception but
* we will try it anyway; the regex is specific enough to not produce
* false-positives.
*/
let { lineNumber, columnNumber } = e;
if (!lineNumber || !columnNumber) {
const match = e?.message?.match?.(/^Unexpected token.*at position (\d+)$/);

if (typeof e?.message === 'string') {
/* Check for 1-i (seen in Node)
* Finding "..."෴1111"..." inside a string value, the extra quotes throw a syntax error
* and the position points to " that is assumed to be the begining of a value.
*/
let match = e.message.match(/^Unexpected .*at position (\d+)(\s|$)/);
if (match) {
lineNumber = 1;
// The position is zero-indexed; adding 1 to normalize it for the -2 that comes later
// Add 1 to reach the marker
columnNumber = parseInt(match[1], 10) + 1;
} else {
/* Check for 1-ii (seen in browsers)
* Finding "...,"෴1111"..." inside a string value, the extra quotes throw a syntax error
* and the column number points to the marker after the " that is assumed to be terminating the
* value.
*/
// ToDo: Add functional tests for this path
match = e.message.match(/expected .*at line (\d+) column (\d+)(\s|$)/);
if (match) {
lineNumber = parseInt(match[1], 10);
columnNumber = parseInt(match[2], 10);
}
}
}

Expand Down

0 comments on commit e77adaf

Please sign in to comment.