Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5,254 changes: 1,700 additions & 3,554 deletions package-lock.json

Large diffs are not rendered by default.

9 changes: 4 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
"check": "npm run test && npm run lint && npm run typecheck",
"lint": "eslint lib test",
"release": "git diff --exit-code && PACKAGE_VERSION=$(jq -r .version package.json) && echo \"About to tag and push v$PACKAGE_VERSION. Continue? (y/n)\" && read -r REPLY && [ \"$REPLY\" = \"y\" ] && git tag --annotate v$PACKAGE_VERSION --message=v$PACKAGE_VERSION && git push origin v$PACKAGE_VERSION",
"test": "SKIPTABLES=1 tape './{lib,test}/*{.spec,-test}.js'|tap-min",
"test-all": "tape test/*-test.js",
"test": "SKIPTABLES=1 vitest run",
"test-all": "vitest run",
"typecheck": "tsc --noEmit"
},
"main": "dist/numfmt.js",
Expand Down Expand Up @@ -58,11 +58,10 @@
"globals": "~17.11.0",
"jsdoc": "~4.0.5",
"rollup": "~4.62.5",
"tap-min": "~3.0.0",
"tape": "~5.10.2",
"typedoc-plugin-markdown": "~4.12.0",
"typescript": "~5.9.3",
"typescript-eslint": "~8.68.0"
"typescript-eslint": "~8.68.0",
"vitest": "~4.1.11"
},
"allowScripts": {
"fsevents@2.3.3": true
Expand Down
30 changes: 0 additions & 30 deletions test/bigint-test.js

This file was deleted.

29 changes: 29 additions & 0 deletions test/bigint.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { expect, test } from 'vitest';
import { format } from '../lib/index.js';

test('bigint', () => {
expect(format('0', Number.MAX_SAFE_INTEGER)).toBe(String(Number.MAX_SAFE_INTEGER));
expect(format('0', 10n)).toBe('10');

expect(format('General', 10n)).toBe('10');
expect(format('General', 9007199254740991n)).toBe('9.0072E+15');

expect(format('0.0', 9007199254740991n)).toBe('9007199254740990.0');

expect(format('#,##0.0', 9007199254740991n)).toBe('9,007,199,254,740,990.0');
expect(format('#,##0.0', 9007199254750000n)).toBe('######');
expect(format('#,##0.0', -9007199254750000n)).toBe('######');

expect(format('#0-000-00', 9007199254750000n)).toBe('######');
expect(format('0%', 9007199254750000n)).toBe('######');

expect(format('#0-000-00', 9007199254750000n, { bigintErrorNumber: true })).toBe('9007199254750000');
expect(format('0%', 9007199254750000n, { bigintErrorNumber: true })).toBe('9007199254750000');

// preferably we should support bigint throughout:
// expect(format('#0-000-00', 9007199254750000n)).toBe('90071992547-500-00');
// expect(format('0%', 9007199254750000n)).toBe('900719925475000000%');

expect(format('0.000E+00', 999990000)).toBe('1.000E+09');
expect(format('0.000E+00', 999990000n)).toBe('1.000E+09');
});
44 changes: 0 additions & 44 deletions test/color-test.js

This file was deleted.

44 changes: 44 additions & 0 deletions test/color.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { expect, test } from 'vitest';
import { formatColor } from '../lib/index.js';

test('formatColor', () => {
// color works the same across number sections, but not text
expect(formatColor('0', 123)).toBe(null);
expect(formatColor('0', 0)).toBe(null);
expect(formatColor('0', -123)).toBe(null);
expect(formatColor('0', 'foo')).toBe(null);
expect(formatColor('[blue]0', 123)).toBe('blue');
expect(formatColor('[blue]0', 0)).toBe('blue');
expect(formatColor('[blue]0', -123)).toBe('blue');
expect(formatColor('[blue]0', 'foo')).toBe(null);
// can define separate colors per section
expect(formatColor('[blue]0;[green]-0;[magenta]0;[cyan]@', 1)).toBe('blue');
expect(formatColor('[blue]0;[green]-0;[magenta]0;[cyan]@', -1)).toBe('green');
expect(formatColor('[blue]0;[green]-0;[magenta]0;[cyan]@', 0)).toBe('magenta');
expect(formatColor('[blue]0;[green]-0;[magenta]0;[cyan]@', 'foo')).toBe('cyan');
// color is case insensitive
expect(formatColor('[red]0', 0)).toBe('red');
expect(formatColor('[Red]0', 0)).toBe('red');
expect(formatColor('[RED]0', 0)).toBe('red');
// all known primaries work
expect(formatColor('[black]0', 0)).toBe('black');
expect(formatColor('[blue]0', 0)).toBe('blue');
expect(formatColor('[cyan]0', 0)).toBe('cyan');
expect(formatColor('[green]0', 0)).toBe('green');
expect(formatColor('[magenta]0', 0)).toBe('magenta');
expect(formatColor('[red]0', 0)).toBe('red');
expect(formatColor('[white]0', 0)).toBe('white');
expect(formatColor('[yellow]0', 0)).toBe('yellow');
// 1-based index color resolutions
expect(formatColor('[color 0]0', 0)).toBe(null);
expect(formatColor('[color 1]0', 0)).toBe('#000000');
expect(formatColor('[color 2]0', 0)).toBe('#FFFFFF');
expect(formatColor('[color3]0', 0)).toBe('#FF0000');
// numbers are returned when indexColors is off
expect(formatColor('[color 0]0', 0, { indexColors: false })).toBe(null);
expect(formatColor('[color 1]0', 0, { indexColors: false })).toBe(1);
expect(formatColor('[color 2]0', 0, { indexColors: false })).toBe(2);
expect(formatColor('[color3]0', 0, { indexColors: false })).toBe(3);
// keywords are still returned when indexColors is off
expect(formatColor('[yellow]0', 0, { indexColors: false })).toBe('yellow');
});
46 changes: 0 additions & 46 deletions test/comma-test.js

This file was deleted.

45 changes: 45 additions & 0 deletions test/comma.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { expect, test } from 'vitest';
import { format } from '../lib/index.js';

test('Correct handling of the comma operator', () => {
expect(format('0,', 1234567.89)).toBe('1235');
expect(format('0,,', 1234567.89)).toBe('1');
expect(format('0,,,', 1234567.89)).toBe('0');
expect(format('0,0', 1234567.89)).toBe('1,234,568');
expect(format('0,00', 1234567.89)).toBe('1,234,568');
expect(format('0,000', 1234567.89)).toBe('1,234,568');
expect(format('0,0,0', 1234567.89)).toBe('1,234,568');
expect(format('0,,0', 1234567.89)).toBe('1,234,568');
expect(format('0,,,0', 1234567.89)).toBe('1,234,568');
expect(format('0,x', 1234567.89)).toBe('1235x');
expect(format('0,x,', 1234567.89)).toBe('1235x,');
expect(format('0x,', 1234567.89)).toBe('1234568x,');
expect(format('0,,x', 1234567.89)).toBe('1x');
expect(format('0,x0', 1234567.89)).toBe('123456x8');
expect(format('0 , 0', 1234567.89)).toBe('123456 , 8');
expect(format('0, ,0', 1234567.89)).toBe('123456 ,8');
expect(format('0.,', 1234567.89)).toBe('1235.');
expect(format('0.0,', 1234567.89)).toBe('1234.6');
expect(format('0.0,0', 1234567.89)).toBe('1234567.89');
expect(format('0,0 0/0', 1234567.89)).toBe('1,234,567 8/9');
expect(format('0,0,,0', 1234567.89)).toBe('1,234,568');
expect(format('0.0,0,', 1234567.89)).toBe('1234.57');
expect(format('0.0 , 0 ,', 1234567.89)).toBe('1234567.8 , 9 ,');
expect(format('0 ,', 1234567.89)).toBe('1234568 ,');
expect(format('0x,', 1234567.89)).toBe('1234568x,');
expect(format('0 ,', 1234567.89)).toBe('1234568 ,');
expect(format('0 ,,', 1234567.89)).toBe('1234568 ,');
expect(format('0x,', 1234567.89)).toBe('1234568x,');
expect(format('x,0', 1234567.89)).toBe('x,1234568');

// Still unsolved by the formatter: digit interplay with 0#?
expect(format('01,', 1234567.89)).toBe('12351');
expect(format('09,', 1234567.89)).toBe('12359');
// expect(format('01,0', 1234567.89)).toBe('1,234,5618');
// expect(format('09,0', 1234567.89)).toBe('1,234,5698');
// expect(format('0, 9', 1234567.89)).toBe('1234568 9');

expect(() => format('0,0/0', '')).toThrow();
expect(() => format('0/0,0', '')).toThrow();
// expect(() => format('0 0/0,', '')).toThrow(); // "1234 4/7" gets emitted, same as Sheets
});
Loading
Loading