This is an automated email from the ASF dual-hosted git repository.
johnbodley pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 3a023392e6 fix: invalid float number format by json-bigint (#21996)
3a023392e6 is described below
commit 3a023392e6bfec9660449b7b739530574d2a8238
Author: JUST.in DO IT <[email protected]>
AuthorDate: Wed Nov 2 01:04:17 2022 -0700
fix: invalid float number format by json-bigint (#21996)
---
superset-frontend/package-lock.json | 52 +++++++++++++++++-----
superset-frontend/package.json | 3 +-
.../packages/superset-ui-core/package.json | 2 +-
.../src/connection/callApi/parseResponse.ts | 9 +++-
.../test/connection/callApi/parseResponse.test.ts | 22 +++++----
.../src/components/FilterableTable/index.tsx | 2 +-
6 files changed, 66 insertions(+), 24 deletions(-)
diff --git a/superset-frontend/package-lock.json
b/superset-frontend/package-lock.json
index c196947a14..4174d104aa 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -80,7 +80,7 @@
"jquery": "^3.5.1",
"js-levenshtein": "^1.1.6",
"js-yaml-loader": "^1.2.2",
- "json-bigint-native": "^1.2.0",
+ "json-bigint": "^1.0.0",
"json-stringify-pretty-compact": "^2.0.0",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
@@ -183,6 +183,7 @@
"@types/jest": "^26.0.3",
"@types/jquery": "^3.5.8",
"@types/js-levenshtein": "^1.1.0",
+ "@types/json-bigint": "^1.0.1",
"@types/react": "^16.9.43",
"@types/react-dom": "^16.9.8",
"@types/react-gravatar": "^2.6.8",
@@ -18196,6 +18197,11 @@
"integrity":
"sha512-14t0v1ICYRtRVcHASzes0v/O+TIeASb8aD55cWF1PidtInhFWSXcmhzhHqGjUWf9SUq1w70cvd1cWKUULubAfQ==",
"dev": true
},
+ "node_modules/@types/json-bigint": {
+ "version": "1.0.1",
+ "resolved":
"https://registry.npmjs.org/@types/json-bigint/-/json-bigint-1.0.1.tgz",
+ "integrity":
"sha512-zpchZLNsNuzJHi6v64UBoFWAvQlPhch7XAi36FkH6tL1bbbmimIF+cS7vwkzY4u5RaSWMoflQfu+TshMPPw8uw=="
+ },
"node_modules/@types/json-schema": {
"version": "7.0.9",
"resolved":
"https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
@@ -21823,6 +21829,14 @@
"node": "*"
}
},
+ "node_modules/bignumber.js": {
+ "version": "9.0.0",
+ "resolved":
"https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
+ "integrity":
"sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/bin-links": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz",
@@ -37490,10 +37504,13 @@
"node": ">=4"
}
},
- "node_modules/json-bigint-native": {
- "version": "1.2.0",
- "resolved":
"https://registry.npmjs.org/json-bigint-native/-/json-bigint-native-1.2.0.tgz",
- "integrity":
"sha512-qC9EtJsyULhbwC2KEYoR8sRsC+PH7VwwPdxU6+CZTZxMtM23zlxCfhIa+6Sn74FQ4VqDqWUaHaBeU0bMUTU9jQ=="
+ "node_modules/json-bigint": {
+ "version": "1.0.0",
+ "resolved":
"https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
+ "integrity":
"sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
+ "dependencies": {
+ "bignumber.js": "^9.0.0"
+ }
},
"node_modules/json-bignum": {
"version": "0.0.3",
@@ -54752,6 +54769,7 @@
"@types/d3-time-format": "^2.1.0",
"@types/enzyme": "^3.10.5",
"@types/fetch-mock": "^7.3.3",
+ "@types/json-bigint": "^1.0.1",
"@types/lodash": "^4.14.149",
"@types/math-expression-evaluator": "^1.2.1",
"@types/node": "^18.0.0",
@@ -54767,7 +54785,6 @@
"d3-time-format": "^2.2.0",
"fetch-retry": "^4.0.1",
"jed": "^1.1.1",
- "json-bigint-native": "^1.2.0",
"lodash": "^4.17.11",
"math-expression-evaluator": "^1.3.8",
"pretty-ms": "^7.0.0",
@@ -69154,6 +69171,7 @@
"@types/d3-time-format": "^2.1.0",
"@types/enzyme": "^3.10.5",
"@types/fetch-mock": "^7.3.3",
+ "@types/json-bigint": "^1.0.1",
"@types/lodash": "^4.14.149",
"@types/math-expression-evaluator": "^1.2.1",
"@types/node": "^18.0.0",
@@ -69171,7 +69189,6 @@
"fetch-retry": "^4.0.1",
"jed": "^1.1.1",
"jest-mock-console": "^1.0.0",
- "json-bigint-native": "^1.2.0",
"lodash": "^4.17.11",
"math-expression-evaluator": "^1.3.8",
"pretty-ms": "^7.0.0",
@@ -71033,6 +71050,11 @@
"integrity":
"sha512-14t0v1ICYRtRVcHASzes0v/O+TIeASb8aD55cWF1PidtInhFWSXcmhzhHqGjUWf9SUq1w70cvd1cWKUULubAfQ==",
"dev": true
},
+ "@types/json-bigint": {
+ "version": "1.0.1",
+ "resolved":
"https://registry.npmjs.org/@types/json-bigint/-/json-bigint-1.0.1.tgz",
+ "integrity":
"sha512-zpchZLNsNuzJHi6v64UBoFWAvQlPhch7XAi36FkH6tL1bbbmimIF+cS7vwkzY4u5RaSWMoflQfu+TshMPPw8uw=="
+ },
"@types/json-schema": {
"version": "7.0.9",
"resolved":
"https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
@@ -73958,6 +73980,11 @@
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
"integrity":
"sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
},
+ "bignumber.js": {
+ "version": "9.0.0",
+ "resolved":
"https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
+ "integrity":
"sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
+ },
"bin-links": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz",
@@ -86034,10 +86061,13 @@
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity":
"sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
},
- "json-bigint-native": {
- "version": "1.2.0",
- "resolved":
"https://registry.npmjs.org/json-bigint-native/-/json-bigint-native-1.2.0.tgz",
- "integrity":
"sha512-qC9EtJsyULhbwC2KEYoR8sRsC+PH7VwwPdxU6+CZTZxMtM23zlxCfhIa+6Sn74FQ4VqDqWUaHaBeU0bMUTU9jQ=="
+ "json-bigint": {
+ "version": "1.0.0",
+ "resolved":
"https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
+ "integrity":
"sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
+ "requires": {
+ "bignumber.js": "^9.0.0"
+ }
},
"json-bignum": {
"version": "0.0.3",
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index bfe41ac3ea..b78caa278f 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -144,7 +144,7 @@
"jquery": "^3.5.1",
"js-levenshtein": "^1.1.6",
"js-yaml-loader": "^1.2.2",
- "json-bigint-native": "^1.2.0",
+ "json-bigint": "^1.0.0",
"json-stringify-pretty-compact": "^2.0.0",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
@@ -247,6 +247,7 @@
"@types/jest": "^26.0.3",
"@types/jquery": "^3.5.8",
"@types/js-levenshtein": "^1.1.0",
+ "@types/json-bigint": "^1.0.1",
"@types/react": "^16.9.43",
"@types/react-dom": "^16.9.8",
"@types/react-gravatar": "^2.6.8",
diff --git a/superset-frontend/packages/superset-ui-core/package.json
b/superset-frontend/packages/superset-ui-core/package.json
index eb72768628..7faa531a67 100644
--- a/superset-frontend/packages/superset-ui-core/package.json
+++ b/superset-frontend/packages/superset-ui-core/package.json
@@ -40,6 +40,7 @@
"@types/d3-time-format": "^2.1.0",
"@types/enzyme": "^3.10.5",
"@types/fetch-mock": "^7.3.3",
+ "@types/json-bigint": "^1.0.1",
"@types/lodash": "^4.14.149",
"@types/math-expression-evaluator": "^1.2.1",
"@types/node": "^18.0.0",
@@ -55,7 +56,6 @@
"d3-time-format": "^2.2.0",
"fetch-retry": "^4.0.1",
"jed": "^1.1.1",
- "json-bigint-native": "^1.2.0",
"lodash": "^4.17.11",
"math-expression-evaluator": "^1.3.8",
"pretty-ms": "^7.0.0",
diff --git
a/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
b/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
index 31b03faa4b..15beca6e15 100644
---
a/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
+++
b/superset-frontend/packages/superset-ui-core/src/connection/callApi/parseResponse.ts
@@ -16,7 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
-import JSONbig from 'json-bigint-native';
+import JSONbig from 'json-bigint';
+import { cloneDeepWith } from 'lodash';
import { ParseMethod, TextResponse, JsonResponse } from '../types';
@@ -52,7 +53,11 @@ export default async function parseResponse<T extends
ParseMethod = 'json'>(
const json = JSONbig.parse(rawData);
const result: JsonResponse = {
response,
- json,
+ // `json-bigint` could not handle floats well, see
sidorares/json-bigint#62
+ // TODO: clean up after json-bigint>1.0.1 is released
+ json: cloneDeepWith(json, (value: any) =>
+ value?.isInteger?.() === false ? Number(value) : undefined,
+ ),
};
return result as ReturnType;
}
diff --git
a/superset-frontend/packages/superset-ui-core/test/connection/callApi/parseResponse.test.ts
b/superset-frontend/packages/superset-ui-core/test/connection/callApi/parseResponse.test.ts
index f3ca3a261f..e13964ecf7 100644
---
a/superset-frontend/packages/superset-ui-core/test/connection/callApi/parseResponse.test.ts
+++
b/superset-frontend/packages/superset-ui-core/test/connection/callApi/parseResponse.test.ts
@@ -140,27 +140,33 @@ describe('parseResponse()', () => {
it('resolves to big number value if `parseMethod=json-bigint`', async () => {
const mockBigIntUrl = '/mock/get/bigInt';
const mockGetBigIntPayload =
- '{ "value": 9223372036854775807, "minusValue": -483729382918228373892,
"number": 1234, "floatValue": 0.345221136, "minusFloatValue": -0.345221136 }';
+ '{ "value": 9223372036854775807, "minus": { "value":
-483729382918228373892, "str": "something" }, "number": 1234, "floatValue": {
"plus": 0.3452211361231223, "minus": -0.3452211361231223 } }';
fetchMock.get(mockBigIntUrl, mockGetBigIntPayload);
const responseBigNumber = await parseResponse(
callApi({ url: mockBigIntUrl, method: 'GET' }),
'json-bigint',
);
expect(`${responseBigNumber.json.value}`).toEqual('9223372036854775807');
- expect(`${responseBigNumber.json.minusValue}`).toEqual(
+ expect(`${responseBigNumber.json.minus.value}`).toEqual(
'-483729382918228373892',
);
expect(responseBigNumber.json.number).toEqual(1234);
- expect(responseBigNumber.json.floatValue).toEqual(0.345221136);
- expect(responseBigNumber.json.minusFloatValue).toEqual(-0.345221136);
+ expect(responseBigNumber.json.floatValue.plus).toEqual(0.3452211361231223);
+ expect(responseBigNumber.json.floatValue.minus).toEqual(
+ -0.3452211361231223,
+ );
expect(
- responseBigNumber.json.floatValue +
- responseBigNumber.json.minusFloatValue,
+ responseBigNumber.json.floatValue.plus +
+ responseBigNumber.json.floatValue.minus,
).toEqual(0);
expect(
- responseBigNumber.json.floatValue /
- responseBigNumber.json.minusFloatValue,
+ responseBigNumber.json.floatValue.plus /
+ responseBigNumber.json.floatValue.minus,
).toEqual(-1);
+ expect(Math.min(responseBigNumber.json.floatValue.plus, 0)).toEqual(0);
+ expect(Math.abs(responseBigNumber.json.floatValue.minus)).toEqual(
+ responseBigNumber.json.floatValue.plus,
+ );
});
it('rejects if request.ok=false', async () => {
diff --git a/superset-frontend/src/components/FilterableTable/index.tsx
b/superset-frontend/src/components/FilterableTable/index.tsx
index c19ee8fe7a..b33c3e13d0 100644
--- a/superset-frontend/src/components/FilterableTable/index.tsx
+++ b/superset-frontend/src/components/FilterableTable/index.tsx
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import JSONbig from 'json-bigint-native';
+import JSONbig from 'json-bigint';
import React, { useEffect, useRef, useState } from 'react';
import JSONTree from 'react-json-tree';
import {