This is an automated email from the ASF dual-hosted git repository.
rusackas 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 76a27d5360e chore(deps): bump d3-format from 1.4.5 to 3.1.2 in
/superset-frontend/packages/superset-ui-core (#37442)
76a27d5360e is described below
commit 76a27d5360e05f12e47f39803f872b64df8c7b36
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
AuthorDate: Fri Feb 6 23:42:39 2026 -0800
chore(deps): bump d3-format from 1.4.5 to 3.1.2 in
/superset-frontend/packages/superset-ui-core (#37442)
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot]
<49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Evan Rusackas <[email protected]>
Co-authored-by: Claude Opus 4.5 <[email protected]>
---
superset-frontend/jest.config.js | 2 +-
superset-frontend/package-lock.json | 11 ++++++++++-
superset-frontend/packages/superset-ui-core/package.json | 2 +-
.../superset-ui-core/src/number-format/D3FormatConfig.ts | 1 +
.../src/number-format/factories/createD3NumberFormatter.ts | 12 +++---------
.../factories/createSiAtMostNDigitFormatter.ts | 6 ++++--
.../number-format/factories/createSmartNumberFormatter.ts | 10 ++++++----
.../factories/createD3NumberFormatter.test.ts | 14 ++++++++++++++
.../factories/createSiAtMostNDigitFormatter.test.ts | 6 ++++++
.../factories/createSmartNumberFormatter.test.ts | 5 +++++
10 files changed, 51 insertions(+), 18 deletions(-)
diff --git a/superset-frontend/jest.config.js b/superset-frontend/jest.config.js
index 44ae74b3de4..6fbccc4b303 100644
--- a/superset-frontend/jest.config.js
+++ b/superset-frontend/jest.config.js
@@ -65,7 +65,7 @@ module.exports = {
],
coverageReporters: ['lcov', 'json-summary', 'html', 'text'],
transformIgnorePatterns: [
-
'node_modules/(?!d3-(array|interpolate|color|time|scale|time-format)|internmap|@mapbox/tiny-sdf|remark-gfm|(?!@ngrx|(?!deck.gl)|d3-scale)|markdown-table|micromark-*.|decode-named-character-reference|character-entities|mdast-util-*.|unist-util-*.|ccount|escape-string-regexp|nanoid|uuid|@rjsf/*.|echarts|zrender|fetch-mock|pretty-ms|parse-ms|ol|@babel/runtime|@emotion|cheerio|cheerio/lib|parse5|dom-serializer|entities|htmlparser2|rehype-sanitize|hast-util-sanitize|unified|unist-.*|hast-
[...]
+
'node_modules/(?!d3-(array|interpolate|color|time|scale|time-format|format)|internmap|@mapbox/tiny-sdf|remark-gfm|(?!@ngrx|(?!deck.gl)|d3-scale)|markdown-table|micromark-*.|decode-named-character-reference|character-entities|mdast-util-*.|unist-util-*.|ccount|escape-string-regexp|nanoid|uuid|@rjsf/*.|echarts|zrender|fetch-mock|pretty-ms|parse-ms|ol|@babel/runtime|@emotion|cheerio|cheerio/lib|parse5|dom-serializer|entities|htmlparser2|rehype-sanitize|hast-util-sanitize|unified|unist-.
[...]
],
preset: 'ts-jest',
transform: {
diff --git a/superset-frontend/package-lock.json
b/superset-frontend/package-lock.json
index 1a97f933ab2..3d8ca618c2b 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -63696,7 +63696,7 @@
"classnames": "^2.5.1",
"core-js": "^3.48.0",
"csstype": "^3.2.3",
- "d3-format": "^1.3.2",
+ "d3-format": "^3.1.2",
"d3-interpolate": "^3.0.1",
"d3-scale": "^4.0.2",
"d3-time": "^3.1.0",
@@ -63843,6 +63843,15 @@
"integrity":
"sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==",
"license": "BSD-3-Clause"
},
+ "packages/superset-ui-core/node_modules/d3-format": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
+ "integrity":
"sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"packages/superset-ui-core/node_modules/d3-scale": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
diff --git a/superset-frontend/packages/superset-ui-core/package.json
b/superset-frontend/packages/superset-ui-core/package.json
index c8bc4627b1d..1fec0042d74 100644
--- a/superset-frontend/packages/superset-ui-core/package.json
+++ b/superset-frontend/packages/superset-ui-core/package.json
@@ -35,7 +35,7 @@
"classnames": "^2.5.1",
"csstype": "^3.2.3",
"core-js": "^3.48.0",
- "d3-format": "^1.3.2",
+ "d3-format": "^3.1.2",
"dayjs": "^1.11.19",
"d3-interpolate": "^3.0.1",
"d3-scale": "^4.0.2",
diff --git
a/superset-frontend/packages/superset-ui-core/src/number-format/D3FormatConfig.ts
b/superset-frontend/packages/superset-ui-core/src/number-format/D3FormatConfig.ts
index 4dc84f8d843..0f3e7db1461 100644
---
a/superset-frontend/packages/superset-ui-core/src/number-format/D3FormatConfig.ts
+++
b/superset-frontend/packages/superset-ui-core/src/number-format/D3FormatConfig.ts
@@ -23,4 +23,5 @@ export const DEFAULT_D3_FORMAT: FormatLocaleDefinition = {
thousands: ',',
grouping: [3],
currency: ['$', ''],
+ minus: '-', // Use ASCII hyphen for backward compatibility (d3-format v3
defaults to Unicode minus sign)
};
diff --git
a/superset-frontend/packages/superset-ui-core/src/number-format/factories/createD3NumberFormatter.ts
b/superset-frontend/packages/superset-ui-core/src/number-format/factories/createD3NumberFormatter.ts
index b6e0b8c4d5e..2c9b3927547 100644
---
a/superset-frontend/packages/superset-ui-core/src/number-format/factories/createD3NumberFormatter.ts
+++
b/superset-frontend/packages/superset-ui-core/src/number-format/factories/createD3NumberFormatter.ts
@@ -16,14 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-import {
- format as d3Format,
- formatLocale,
- FormatLocaleDefinition,
-} from 'd3-format';
+import { formatLocale, FormatLocaleDefinition } from 'd3-format';
import { isRequired } from '../../utils';
import NumberFormatter from '../NumberFormatter';
import { NumberFormatFunction } from '../types';
+import { DEFAULT_D3_FORMAT } from '../D3FormatConfig';
export default function createD3NumberFormatter(config: {
description?: string;
@@ -42,10 +39,7 @@ export default function createD3NumberFormatter(config: {
let isInvalid = false;
try {
- formatFunc =
- typeof locale === 'undefined'
- ? d3Format(formatString)
- : formatLocale(locale).format(formatString);
+ formatFunc = formatLocale(locale ??
DEFAULT_D3_FORMAT).format(formatString);
} catch (error) {
formatFunc = value => `${value} (Invalid format: ${formatString})`;
isInvalid = true;
diff --git
a/superset-frontend/packages/superset-ui-core/src/number-format/factories/createSiAtMostNDigitFormatter.ts
b/superset-frontend/packages/superset-ui-core/src/number-format/factories/createSiAtMostNDigitFormatter.ts
index b8af708fb7a..86dc2c399cc 100644
---
a/superset-frontend/packages/superset-ui-core/src/number-format/factories/createSiAtMostNDigitFormatter.ts
+++
b/superset-frontend/packages/superset-ui-core/src/number-format/factories/createSiAtMostNDigitFormatter.ts
@@ -17,8 +17,9 @@
* under the License.
*/
-import { format as d3Format } from 'd3-format';
+import { formatLocale } from 'd3-format';
import NumberFormatter from '../NumberFormatter';
+import { DEFAULT_D3_FORMAT } from '../D3FormatConfig';
export default function createSiAtMostNDigitFormatter(
config: {
@@ -29,7 +30,8 @@ export default function createSiAtMostNDigitFormatter(
} = {},
) {
const { description, n = 3, id, label } = config;
- const siFormatter = d3Format(`.${n}s`);
+ const locale = formatLocale(DEFAULT_D3_FORMAT);
+ const siFormatter = locale.format(`.${n}s`);
return new NumberFormatter({
description,
diff --git
a/superset-frontend/packages/superset-ui-core/src/number-format/factories/createSmartNumberFormatter.ts
b/superset-frontend/packages/superset-ui-core/src/number-format/factories/createSmartNumberFormatter.ts
index 7bb2da9c890..063b692fa85 100644
---
a/superset-frontend/packages/superset-ui-core/src/number-format/factories/createSmartNumberFormatter.ts
+++
b/superset-frontend/packages/superset-ui-core/src/number-format/factories/createSmartNumberFormatter.ts
@@ -17,13 +17,15 @@
* under the License.
*/
-import { format as d3Format } from 'd3-format';
+import { formatLocale } from 'd3-format';
import NumberFormatter from '../NumberFormatter';
import NumberFormats from '../NumberFormats';
+import { DEFAULT_D3_FORMAT } from '../D3FormatConfig';
-const siFormatter = d3Format(`.3~s`);
-const float2PointFormatter = d3Format(`.2~f`);
-const float4PointFormatter = d3Format(`.4~f`);
+const locale = formatLocale(DEFAULT_D3_FORMAT);
+const siFormatter = locale.format(`.3~s`);
+const float2PointFormatter = locale.format(`.2~f`);
+const float4PointFormatter = locale.format(`.4~f`);
function formatValue(value: number) {
if (value === 0) {
diff --git
a/superset-frontend/packages/superset-ui-core/test/number-format/factories/createD3NumberFormatter.test.ts
b/superset-frontend/packages/superset-ui-core/test/number-format/factories/createD3NumberFormatter.test.ts
index e438167a30d..677bdd403d7 100644
---
a/superset-frontend/packages/superset-ui-core/test/number-format/factories/createD3NumberFormatter.test.ts
+++
b/superset-frontend/packages/superset-ui-core/test/number-format/factories/createD3NumberFormatter.test.ts
@@ -85,4 +85,18 @@ describe('createD3NumberFormatter(config)', () => {
expect(formatter(200)).toEqual('€200.00');
});
});
+ describe('negative numbers', () => {
+ it('uses ASCII hyphen-minus (U+002D) for negative numbers, not Unicode
minus (U+2212)', () => {
+ const formatter = createD3NumberFormatter({ formatString: ',d' });
+ const result = formatter(-1234);
+ // Verify the result contains ASCII hyphen-minus (char code 45), not
Unicode minus (char code 8722)
+ // This is important for backward compatibility after d3-format v3
upgrade
+ expect(result).toEqual('-1,234');
+ expect(result.charCodeAt(0)).toEqual(45); // ASCII hyphen-minus
+ });
+ it('formats negative decimals correctly', () => {
+ const formatter = createD3NumberFormatter({ formatString: ',.2f' });
+ expect(formatter(-1234.5)).toEqual('-1,234.50');
+ });
+ });
});
diff --git
a/superset-frontend/packages/superset-ui-core/test/number-format/factories/createSiAtMostNDigitFormatter.test.ts
b/superset-frontend/packages/superset-ui-core/test/number-format/factories/createSiAtMostNDigitFormatter.test.ts
index 3d9ddf24b5b..30d6b3a6b16 100644
---
a/superset-frontend/packages/superset-ui-core/test/number-format/factories/createSiAtMostNDigitFormatter.test.ts
+++
b/superset-frontend/packages/superset-ui-core/test/number-format/factories/createSiAtMostNDigitFormatter.test.ts
@@ -27,6 +27,12 @@ describe('createSiAtMostNDigitFormatter({ n })', () => {
const formatter = createSiAtMostNDigitFormatter({ n: 4 });
expect(formatter).toBeInstanceOf(NumberFormatter);
});
+ it('uses ASCII hyphen-minus (U+002D) for negative numbers, not Unicode minus
(U+2212)', () => {
+ // This is important for backward compatibility after d3-format v3 upgrade
+ const formatter = createSiAtMostNDigitFormatter({ n: 3 });
+ const result = formatter(-1000);
+ expect(result.charCodeAt(0)).toBe(45); // ASCII hyphen-minus
+ });
it('when n is specified, it formats number in SI format with at most n
significant digits', () => {
const formatter = createSiAtMostNDigitFormatter({ n: 2 });
expect(formatter(10)).toBe('10');
diff --git
a/superset-frontend/packages/superset-ui-core/test/number-format/factories/createSmartNumberFormatter.test.ts
b/superset-frontend/packages/superset-ui-core/test/number-format/factories/createSmartNumberFormatter.test.ts
index a322203173f..427b096302a 100644
---
a/superset-frontend/packages/superset-ui-core/test/number-format/factories/createSmartNumberFormatter.test.ts
+++
b/superset-frontend/packages/superset-ui-core/test/number-format/factories/createSmartNumberFormatter.test.ts
@@ -66,6 +66,11 @@ describe('createSmartNumberFormatter(options)', () => {
});
});
describe('for negative numbers', () => {
+ it('uses ASCII hyphen-minus (U+002D), not Unicode minus (U+2212)', () =>
{
+ // This is important for backward compatibility after d3-format v3
upgrade
+ const result = formatter(-1000);
+ expect(result.charCodeAt(0)).toBe(45); // ASCII hyphen-minus
+ });
it('formats billion with B in stead of G', () => {
expect(formatter(-1000000000)).toBe('-1B');
expect(formatter(-4560000000)).toBe('-4.56B');