Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Remove rounding mode hack (#7055)

* bump formatjs and remove hack

* maybe fix tests?

* Revert "maybe fix tests?"

This reverts commit f1b448e5b8f7ee2bf70967a631308c226c10be80.

* rm test

authored by

Samuel Newman and committed by
GitHub
b081f8f8 de15f8e2

+67 -182
+3 -3
package.json
··· 62 62 "@expo/webpack-config": "^19.0.0", 63 63 "@floating-ui/dom": "^1.6.3", 64 64 "@floating-ui/react-dom": "^2.0.8", 65 - "@formatjs/intl-locale": "^4.0.0", 66 - "@formatjs/intl-numberformat": "^8.10.3", 67 - "@formatjs/intl-pluralrules": "^5.2.14", 65 + "@formatjs/intl-locale": "^4.2.8", 66 + "@formatjs/intl-numberformat": "^8.15.1", 67 + "@formatjs/intl-pluralrules": "^5.4.1", 68 68 "@fortawesome/fontawesome-svg-core": "^6.1.1", 69 69 "@fortawesome/free-regular-svg-icons": "^6.1.1", 70 70 "@fortawesome/free-solid-svg-icons": "^6.1.1",
-92
src/view/com/util/numeric/__tests__/format-test.ts
··· 1 - import {describe, expect, it} from '@jest/globals' 2 - 3 - import {APP_LANGUAGES} from '#/locale/languages' 4 - import {formatCount} from '../format' 5 - 6 - const formatCountRound = (locale: string, num: number) => { 7 - const options: Intl.NumberFormatOptions = { 8 - notation: 'compact', 9 - maximumFractionDigits: 1, 10 - } 11 - return new Intl.NumberFormat(locale, options).format(num) 12 - } 13 - 14 - const formatCountTrunc = (locale: string, num: number) => { 15 - const options: Intl.NumberFormatOptions = { 16 - notation: 'compact', 17 - maximumFractionDigits: 1, 18 - // @ts-ignore 19 - roundingMode: 'trunc', 20 - } 21 - return new Intl.NumberFormat(locale, options).format(num) 22 - } 23 - 24 - // prettier-ignore 25 - const testNums = [ 26 - 1, 27 - 5, 28 - 9, 29 - 11, 30 - 55, 31 - 99, 32 - 111, 33 - 555, 34 - 999, 35 - 1111, 36 - 5555, 37 - 9999, 38 - 11111, 39 - 55555, 40 - 99999, 41 - 111111, 42 - 555555, 43 - 999999, 44 - 1111111, 45 - 5555555, 46 - 9999999, 47 - 11111111, 48 - 55555555, 49 - 99999999, 50 - 111111111, 51 - 555555555, 52 - 999999999, 53 - 1111111111, 54 - 5555555555, 55 - 9999999999, 56 - 11111111111, 57 - 55555555555, 58 - 99999999999, 59 - 111111111111, 60 - 555555555555, 61 - 999999999999, 62 - 1111111111111, 63 - 5555555555555, 64 - 9999999999999, 65 - 11111111111111, 66 - 55555555555555, 67 - 99999999999999, 68 - 111111111111111, 69 - 555555555555555, 70 - 999999999999999, 71 - 1111111111111111, 72 - 5555555555555555, 73 - ] 74 - 75 - describe('formatCount', () => { 76 - for (const appLanguage of APP_LANGUAGES) { 77 - const locale = appLanguage.code2 78 - it('truncates for ' + locale, () => { 79 - const mockI8nn = { 80 - locale, 81 - number(num: number) { 82 - return formatCountRound(locale, num) 83 - }, 84 - } 85 - for (const num of testNums) { 86 - const formatManual = formatCount(mockI8nn as any, num) 87 - const formatOriginal = formatCountTrunc(locale, num) 88 - expect(formatManual).toEqual(formatOriginal) 89 - } 90 - }) 91 - } 92 - })
+3 -43
src/view/com/util/numeric/format.ts
··· 1 1 import {I18n} from '@lingui/core' 2 2 3 - const truncateRounding = (num: number, factors: Array<number>): number => { 4 - for (let i = factors.length - 1; i >= 0; i--) { 5 - let factor = factors[i] 6 - if (num >= 10 ** factor) { 7 - if (factor === 10) { 8 - // CA and ES abruptly jump from "9999,9 M" to "10 mil M" 9 - factor-- 10 - } 11 - const precision = 1 12 - const divisor = 10 ** (factor - precision) 13 - return Math.floor(num / divisor) * divisor 14 - } 15 - } 16 - return num 17 - } 18 - 19 - const koFactors = [3, 4, 8, 12] 20 - const hiFactors = [3, 5, 7, 9, 11, 13] 21 - const esCaFactors = [3, 6, 10, 12] 22 - const itDeFactors = [6, 9, 12] 23 - const jaZhFactors = [4, 8, 12] 24 - const glFactors = [6, 12] 25 - const restFactors = [3, 6, 9, 12] 26 - 27 3 export const formatCount = (i18n: I18n, num: number) => { 28 - const locale = i18n.locale 29 - let truncatedNum: number 30 - if (locale === 'hi') { 31 - truncatedNum = truncateRounding(num, hiFactors) 32 - } else if (locale === 'ko') { 33 - truncatedNum = truncateRounding(num, koFactors) 34 - } else if (locale === 'es' || locale === 'ca') { 35 - truncatedNum = truncateRounding(num, esCaFactors) 36 - } else if (locale === 'ja' || locale === 'zh-CN' || locale === 'zh-TW') { 37 - truncatedNum = truncateRounding(num, jaZhFactors) 38 - } else if (locale === 'it' || locale === 'de') { 39 - truncatedNum = truncateRounding(num, itDeFactors) 40 - } else if (locale === 'gl') { 41 - truncatedNum = truncateRounding(num, glFactors) 42 - } else { 43 - truncatedNum = truncateRounding(num, restFactors) 44 - } 45 - return i18n.number(truncatedNum, { 4 + return i18n.number(num, { 46 5 notation: 'compact', 47 6 maximumFractionDigits: 1, 48 - // Ideally we'd use roundingMode: 'trunc' but it isn't supported on RN. 7 + // @ts-expect-error - roundingMode not in the types 8 + roundingMode: 'trunc', 49 9 }) 50 10 }
+61 -44
yarn.lock
··· 4250 4250 resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" 4251 4251 integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== 4252 4252 4253 - "@formatjs/ecma402-abstract@2.0.0": 4254 - version "2.0.0" 4255 - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz#39197ab90b1c78b7342b129a56a7acdb8f512e17" 4256 - integrity sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g== 4253 + "@formatjs/ecma402-abstract@2.3.1": 4254 + version "2.3.1" 4255 + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.1.tgz#cdeb3ffe1aeea9c4284b85b7e37e8e8615314c39" 4256 + integrity sha512-Ip9uV+/MpLXWRk03U/GzeJMuPeOXpJBSB5V1tjA6kJhvqssye5J5LoYLc7Z5IAHb7nR62sRoguzrFiVCP/hnzw== 4257 4257 dependencies: 4258 - "@formatjs/intl-localematcher" "0.5.4" 4259 - tslib "^2.4.0" 4258 + "@formatjs/fast-memoize" "2.2.5" 4259 + "@formatjs/intl-localematcher" "0.5.9" 4260 + decimal.js "10" 4261 + tslib "2" 4260 4262 4261 - "@formatjs/intl-enumerator@1.4.7": 4262 - version "1.4.7" 4263 - resolved "https://registry.yarnpkg.com/@formatjs/intl-enumerator/-/intl-enumerator-1.4.7.tgz#6ab697f3f8f18cf0cc6a6b028cb9c40db6001f3d" 4264 - integrity sha512-03RHnFqfpB4H/jwCwlzC+wkTDk2Fi24JmVIY2PVGvTUpikN2bSr9+8oTXfOC+y7B7VxjCArUnqWXVoctkmy85w== 4263 + "@formatjs/fast-memoize@2.2.5": 4264 + version "2.2.5" 4265 + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.5.tgz#54a4a1793d773b72c372d3dcab3595149aee7880" 4266 + integrity sha512-6PoewUMrrcqxSoBXAOJDiW1m+AmkrAj0RiXnOMD59GRaswjXhm3MDhgepXPBgonc09oSirAJTsAggzAGQf6A6g== 4265 4267 dependencies: 4266 - tslib "^2.4.0" 4268 + tslib "2" 4267 4269 4268 - "@formatjs/intl-getcanonicallocales@2.3.0": 4269 - version "2.3.0" 4270 - resolved "https://registry.yarnpkg.com/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.3.0.tgz#b6c6fa1c664e30a61f27fa6399a76159d82a5842" 4271 - integrity sha512-BOXbLwqQ7nKua/l7tKqDLRN84WupDXFDhGJQMFvsMVA2dKuOdRaWTxWpL3cJ7qPkoNw11Jf+Xpj4OSPBBvW0eQ== 4270 + "@formatjs/intl-enumerator@1.8.7": 4271 + version "1.8.7" 4272 + resolved "https://registry.yarnpkg.com/@formatjs/intl-enumerator/-/intl-enumerator-1.8.7.tgz#3f004753333f80cc468ae34046bd8416772a0412" 4273 + integrity sha512-qd7UlWUivKRJ073btssUqMSqzWW9yN3Ki6EqfCZ6uvIv19mONelE5q3GMmdPWBEjgqZikBzBE2qPTqfrgJ4TCA== 4272 4274 dependencies: 4273 - tslib "^2.4.0" 4275 + "@formatjs/ecma402-abstract" "2.3.1" 4276 + tslib "2" 4274 4277 4275 - "@formatjs/intl-locale@^4.0.0": 4276 - version "4.0.0" 4277 - resolved "https://registry.yarnpkg.com/@formatjs/intl-locale/-/intl-locale-4.0.0.tgz#c111a33078413eba2011e82140466261eb1d67cd" 4278 - integrity sha512-+4dbMEGsp1bvB3JB3UHH6YTjMnFTifnfdaHp4ROrCCu50NedA69RBsDCG3eivcZkbj57X9ehGhMWjLxlP+gyVw== 4278 + "@formatjs/intl-getcanonicallocales@2.5.4": 4279 + version "2.5.4" 4280 + resolved "https://registry.yarnpkg.com/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.5.4.tgz#9b843e1891dea83405c51eb3d00c42ef9cb6cab9" 4281 + integrity sha512-vSDOsAcc3U+Kl/0b3de8wCQkb3W30H8LUuslyz67wTAHOPSQhPimZyquhwxXpJR+K5yy9CkzTgk5YE5kFT+PFg== 4279 4282 dependencies: 4280 - "@formatjs/ecma402-abstract" "2.0.0" 4281 - "@formatjs/intl-enumerator" "1.4.7" 4282 - "@formatjs/intl-getcanonicallocales" "2.3.0" 4283 - tslib "^2.4.0" 4283 + tslib "2" 4284 4284 4285 - "@formatjs/intl-localematcher@0.5.4": 4286 - version "0.5.4" 4287 - resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz#caa71f2e40d93e37d58be35cfffe57865f2b366f" 4288 - integrity sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g== 4285 + "@formatjs/intl-locale@^4.2.8": 4286 + version "4.2.8" 4287 + resolved "https://registry.yarnpkg.com/@formatjs/intl-locale/-/intl-locale-4.2.8.tgz#571d44e92b6eb43b7410b37f25e280ec384a32cf" 4288 + integrity sha512-6RY/npeA0kyoZ8QW0JRAT+VBAFBT6+4ZVeGkKCNIDjbLX2LPuU73emGR35Mbwcc6pquVFrxyo6mXxKNzib0kEA== 4289 + dependencies: 4290 + "@formatjs/ecma402-abstract" "2.3.1" 4291 + "@formatjs/intl-enumerator" "1.8.7" 4292 + "@formatjs/intl-getcanonicallocales" "2.5.4" 4293 + tslib "2" 4294 + 4295 + "@formatjs/intl-localematcher@0.5.9": 4296 + version "0.5.9" 4297 + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.9.tgz#43c6ee22be85b83340bcb09bdfed53657a2720db" 4298 + integrity sha512-8zkGu/sv5euxbjfZ/xmklqLyDGQSxsLqg8XOq88JW3cmJtzhCP8EtSJXlaKZnVO4beEaoiT9wj4eIoCQ9smwxA== 4289 4299 dependencies: 4290 - tslib "^2.4.0" 4300 + tslib "2" 4291 4301 4292 - "@formatjs/intl-numberformat@^8.10.3": 4293 - version "8.10.3" 4294 - resolved "https://registry.yarnpkg.com/@formatjs/intl-numberformat/-/intl-numberformat-8.10.3.tgz#abc97cc6a7b7f1b20da9f07a976b5589c1192ab8" 4295 - integrity sha512-lH3liLMeIjZ19Zxt8RRPnBcpPweS1YNSXRURDiFfvFmRlDZUOd8+GlcVyECcPZPkIoSH/p4lfGrnaUzepxJ92g== 4302 + "@formatjs/intl-numberformat@^8.15.1": 4303 + version "8.15.1" 4304 + resolved "https://registry.yarnpkg.com/@formatjs/intl-numberformat/-/intl-numberformat-8.15.1.tgz#b2a5b00889ed31dbef9d4e5aeee1dea3d040b068" 4305 + integrity sha512-NIouSY50xpH/SMJrRbX1Q3hMsGyQmT5MQrta/bOYhpZda1bztOlEYZAKLytk8VGs10wkGz875602mCMhtg4/LA== 4296 4306 dependencies: 4297 - "@formatjs/ecma402-abstract" "2.0.0" 4298 - "@formatjs/intl-localematcher" "0.5.4" 4299 - tslib "^2.4.0" 4307 + "@formatjs/ecma402-abstract" "2.3.1" 4308 + "@formatjs/intl-localematcher" "0.5.9" 4309 + decimal.js "10" 4310 + tslib "2" 4300 4311 4301 - "@formatjs/intl-pluralrules@^5.2.14": 4302 - version "5.2.14" 4303 - resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.14.tgz#7477bd2aa9bfde9e543d839707eff5460eb08026" 4304 - integrity sha512-l6Ev7aOGXJSh5EPDEqzsbyufdCCKXZk993QXRQebLsB0TXRhIyF4alqjdMEatLwIigK/Mka8kiVIOLeFP5Cj9Q== 4312 + "@formatjs/intl-pluralrules@^5.4.1": 4313 + version "5.4.1" 4314 + resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-5.4.1.tgz#1c03cd2da449e1871bb7c54ea36fec1de68b7e7e" 4315 + integrity sha512-kKK4ixTsfKAzyJIVRiJGuw4zd18nEHXiKloYBO9VmLpxrwJTgLQHv2+1hcbxQcwbbo2uc8moUFQuyvxeGEFOfw== 4305 4316 dependencies: 4306 - "@formatjs/ecma402-abstract" "2.0.0" 4307 - "@formatjs/intl-localematcher" "0.5.4" 4308 - tslib "^2.4.0" 4317 + "@formatjs/ecma402-abstract" "2.3.1" 4318 + "@formatjs/intl-localematcher" "0.5.9" 4319 + decimal.js "10" 4320 + tslib "2" 4309 4321 4310 4322 "@fortawesome/fontawesome-common-types@6.4.2": 4311 4323 version "6.4.2" ··· 9372 9384 resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 9373 9385 integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== 9374 9386 9375 - decimal.js@^10.4.2: 9387 + decimal.js@10, decimal.js@^10.4.2: 9376 9388 version "10.4.3" 9377 9389 resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" 9378 9390 integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== ··· 18104 18116 make-error "^1.1.1" 18105 18117 v8-compile-cache-lib "^3.0.1" 18106 18118 yn "3.1.1" 18119 + 18120 + tslib@2: 18121 + version "2.8.1" 18122 + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" 18123 + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== 18107 18124 18108 18125 tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0: 18109 18126 version "1.14.1"