diff --git a/packages/babel-plugin-formatjs/CHANGELOG.md b/packages/babel-plugin-formatjs/CHANGELOG.md index d8a12215c58..142a657d6ad 100644 --- a/packages/babel-plugin-formatjs/CHANGELOG.md +++ b/packages/babel-plugin-formatjs/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [10.5.32](https://github.com/formatjs/formatjs/compare/babel-plugin-formatjs@10.5.31...babel-plugin-formatjs@10.5.32) (2025-01-20) + +**Note:** Version bump only for package babel-plugin-formatjs + ## [10.5.31](https://github.com/formatjs/formatjs/compare/babel-plugin-formatjs@10.5.30...babel-plugin-formatjs@10.5.31) (2025-01-17) **Note:** Version bump only for package babel-plugin-formatjs diff --git a/packages/babel-plugin-formatjs/package.json b/packages/babel-plugin-formatjs/package.json index f25db832b73..69e240b22f1 100644 --- a/packages/babel-plugin-formatjs/package.json +++ b/packages/babel-plugin-formatjs/package.json @@ -1,6 +1,6 @@ { "name": "babel-plugin-formatjs", - "version": "10.5.31", + "version": "10.5.32", "description": "Extracts string messages for translation from modules that use formatjs.", "repository": { "type": "git", diff --git a/packages/cli-lib/CHANGELOG.md b/packages/cli-lib/CHANGELOG.md index 23c0493b07d..f305415091b 100644 --- a/packages/cli-lib/CHANGELOG.md +++ b/packages/cli-lib/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.1.3](https://github.com/formatjs/formatjs/compare/@formatjs/cli-lib@7.1.2...@formatjs/cli-lib@7.1.3) (2025-01-20) + +**Note:** Version bump only for package @formatjs/cli-lib + +## [7.1.2](https://github.com/formatjs/formatjs/compare/@formatjs/cli-lib@7.1.1...@formatjs/cli-lib@7.1.2) (2025-01-17) + +### Bug Fixes + +* **@formatjs/cli-lib:** fix flatten during structural equality check ([144453a](https://github.com/formatjs/formatjs/commit/144453a7a91af42678cb3c5b57d31673ef72b9cc)) - by @longlho + +## [7.1.1](https://github.com/formatjs/formatjs/compare/@formatjs/cli-lib@7.1.0...@formatjs/cli-lib@7.1.1) (2025-01-17) + +### Bug Fixes + +* **@formatjs/cli-lib:** handle parsing error during verification ([ddca2c2](https://github.com/formatjs/formatjs/commit/ddca2c22899ce698f945927a35df6126c8cdbc48)) - by @longlho + # [7.1.0](https://github.com/formatjs/formatjs/compare/@formatjs/cli-lib@7.0.3...@formatjs/cli-lib@7.1.0) (2025-01-17) ### Features diff --git a/packages/cli-lib/package.json b/packages/cli-lib/package.json index c11ac9ce85b..1bb466a61a3 100644 --- a/packages/cli-lib/package.json +++ b/packages/cli-lib/package.json @@ -1,6 +1,6 @@ { "name": "@formatjs/cli-lib", - "version": "7.1.0", + "version": "7.1.3", "description": "Lib for CLI for formatjs.", "keywords": [ "intl", diff --git a/packages/cli-lib/src/verify/checkStructuralEquality.ts b/packages/cli-lib/src/verify/checkStructuralEquality.ts index f26fdd3aa22..c8d9c7de562 100644 --- a/packages/cli-lib/src/verify/checkStructuralEquality.ts +++ b/packages/cli-lib/src/verify/checkStructuralEquality.ts @@ -4,6 +4,7 @@ import { parse, } from '@formatjs/icu-messageformat-parser' import {debug, writeStderr} from '../console_utils' +import {error} from 'console' /** * Flatten nested obj into list of keys, delimited by `.` @@ -20,8 +21,9 @@ function flatten(obj: any, parentKey = ''): Record { const key = parentKey ? `${parentKey}.${k}` : k if (typeof value === 'object') { Object.assign(all, flatten(value, key)) + } else { + all[key] = value } - all[key] = value return all }, {}) } @@ -38,26 +40,30 @@ export async function checkStructuralEquality( const enUSMessages = Object.entries(flatten(enUSContent)).reduce< Record >((all, [key, value]) => { - all[key] = parse(value) + try { + all[key] = parse(value) + } catch (e) { + error('Error parsing message', key, value, e) + } return all }, {}) return Object.entries(translationFilesContents) .filter(([locale]) => locale !== sourceLocale) .reduce((result, [locale, content]) => { - const localeMessages = Object.entries(flatten(content)).reduce< - Record - >((all, [key, value]) => { - all[key] = parse(value) - return all - }, {}) + const localeMessages = flatten(content) const problematicKeys = Object.keys(enUSMessages).filter(k => { if (!localeMessages[k]) { return false } const enUSMessage = enUSMessages[k] - const localeMessage = localeMessages[k] - return !isStructurallySame(enUSMessage, localeMessage) + try { + const localeMessage = parse(localeMessages[k]) + return !isStructurallySame(enUSMessage, localeMessage) + } catch (e) { + error('Error comparing message', k, enUSMessage, localeMessages[k], e) + return true + } }) if (!problematicKeys.length) { diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index c78c6bfbc16..ba75a352fd0 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -3,6 +3,24 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.4.3](https://github.com/formatjs/formatjs/compare/@formatjs/cli@6.4.2...@formatjs/cli@6.4.3) (2025-01-20) + +### Bug Fixes + +* **@formatjs/icu-messageformat-parser:** make plural check more lenient ([e0194bf](https://github.com/formatjs/formatjs/commit/e0194bf15632f4aa529ca075a5c958f2ffb254c8)) - by @longlho + +## [6.4.2](https://github.com/formatjs/formatjs/compare/@formatjs/cli@6.4.1...@formatjs/cli@6.4.2) (2025-01-17) + +### Bug Fixes + +* **@formatjs/cli-lib:** fix flatten during structural equality check ([144453a](https://github.com/formatjs/formatjs/commit/144453a7a91af42678cb3c5b57d31673ef72b9cc)) - by @longlho + +## [6.4.1](https://github.com/formatjs/formatjs/compare/@formatjs/cli@6.4.0...@formatjs/cli@6.4.1) (2025-01-17) + +### Bug Fixes + +* **@formatjs/cli-lib:** handle parsing error during verification ([ddca2c2](https://github.com/formatjs/formatjs/commit/ddca2c22899ce698f945927a35df6126c8cdbc48)) - by @longlho + # [6.4.0](https://github.com/formatjs/formatjs/compare/@formatjs/cli@6.3.15...@formatjs/cli@6.4.0) (2025-01-17) ### Features diff --git a/packages/cli/integration-tests/verify/structural-equality/fixtures1/en-US.json b/packages/cli/integration-tests/verify/structural-equality/fixtures1/en-US.json index 44c4674c952..1e4ddf0dee9 100644 --- a/packages/cli/integration-tests/verify/structural-equality/fixtures1/en-US.json +++ b/packages/cli/integration-tests/verify/structural-equality/fixtures1/en-US.json @@ -1,3 +1,4 @@ { - "foo": "baz {var}" + "foo": "baz {var}", + "2": "{c, plural, one {#} other {#}}" } diff --git a/packages/cli/integration-tests/verify/structural-equality/fixtures1/fr.json b/packages/cli/integration-tests/verify/structural-equality/fixtures1/fr.json index 44c4674c952..51fcb1bc4f7 100644 --- a/packages/cli/integration-tests/verify/structural-equality/fixtures1/fr.json +++ b/packages/cli/integration-tests/verify/structural-equality/fixtures1/fr.json @@ -1,3 +1,4 @@ { - "foo": "baz {var}" + "foo": "baz {var}", + "2": "{c, plural, one {#} few {#} other {#}}" } diff --git a/packages/cli/integration-tests/verify/structural-equality/fixtures2/en-US.json b/packages/cli/integration-tests/verify/structural-equality/fixtures2/en-US.json index 25f2e28fb26..c890de392ce 100644 --- a/packages/cli/integration-tests/verify/structural-equality/fixtures2/en-US.json +++ b/packages/cli/integration-tests/verify/structural-equality/fixtures2/en-US.json @@ -4,5 +4,13 @@ "3": "bar {var, number}", "4": "bar {var} {var2, number} {var3, date} {var4, time}", "5": "bar {var} {var2, number} {var3, date} {var4, time} {var5, plural, one {# foo} other {# foos}}", - "6": "bar {var} {var2, number} {var3, date} {var4, time} {var5, plural, one {# foo} other {# foos}} foo" + "6": "bar {var} {var2, number} {var3, date} {var4, time} {var5, plural, one {# foo} other {# foos}} foo", + "7": "bb", + "8": { + "9": "bar", + "nested": { + "10": "bar" + } + }, + "11": "nah" } diff --git a/packages/cli/integration-tests/verify/structural-equality/fixtures2/fr-FR.json b/packages/cli/integration-tests/verify/structural-equality/fixtures2/fr-FR.json index d5deaea7a2f..4f654566866 100644 --- a/packages/cli/integration-tests/verify/structural-equality/fixtures2/fr-FR.json +++ b/packages/cli/integration-tests/verify/structural-equality/fixtures2/fr-FR.json @@ -4,5 +4,13 @@ "3": "bar {var, date}", "4": "bar {var} {var2, number} {var3, date} {var5, time}", "5": "bar {var} {var2, number} {var3, date} {var4, time} {var5, plural, one {# foo} other {# foos}}", - "6": "bar {var} {var2, number} {var3, date} {var4, time} {var5, plural, one {# foo} other {# foos}} foo" + "6": "bar {var} {var2, number} {var3, date} {var4, time} {var5, plural, one {# foo} other {# foos}} foo", + "7": "malform {a", + "8": { + "9": "bar", + "nested": { + "10": "bar" + } + }, + "11": "nah" } diff --git a/packages/cli/package.json b/packages/cli/package.json index 8b4f5b27597..6b74fc26162 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@formatjs/cli", - "version": "6.4.0", + "version": "6.4.3", "description": "A CLI for formatjs.", "keywords": [ "intl", diff --git a/packages/editor/CHANGELOG.md b/packages/editor/CHANGELOG.md index 66371e5e21f..a00ebffa2a2 100644 --- a/packages/editor/CHANGELOG.md +++ b/packages/editor/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.68](https://github.com/formatjs/formatjs/compare/@formatjs/editor@2.0.67...@formatjs/editor@2.0.68) (2025-01-20) + +**Note:** Version bump only for package @formatjs/editor + ## [2.0.67](https://github.com/formatjs/formatjs/compare/@formatjs/editor@2.0.66...@formatjs/editor@2.0.67) (2025-01-17) **Note:** Version bump only for package @formatjs/editor diff --git a/packages/editor/package.json b/packages/editor/package.json index 886384550f8..65e11826146 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -1,6 +1,6 @@ { "name": "@formatjs/editor", - "version": "2.0.67", + "version": "2.0.68", "description": "A ICU MessageFormat Editor UI", "keywords": [ "intl", diff --git a/packages/eslint-plugin-formatjs/CHANGELOG.md b/packages/eslint-plugin-formatjs/CHANGELOG.md index 12a74fb60fc..817d8219e44 100644 --- a/packages/eslint-plugin-formatjs/CHANGELOG.md +++ b/packages/eslint-plugin-formatjs/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.2.11](https://github.com/formatjs/formatjs/compare/eslint-plugin-formatjs@5.2.10...eslint-plugin-formatjs@5.2.11) (2025-01-20) + +**Note:** Version bump only for package eslint-plugin-formatjs + ## [5.2.10](https://github.com/formatjs/formatjs/compare/eslint-plugin-formatjs@5.2.9...eslint-plugin-formatjs@5.2.10) (2025-01-17) ### Bug Fixes diff --git a/packages/eslint-plugin-formatjs/package.json b/packages/eslint-plugin-formatjs/package.json index df1428eea39..be6b7d0993c 100644 --- a/packages/eslint-plugin-formatjs/package.json +++ b/packages/eslint-plugin-formatjs/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-formatjs", - "version": "5.2.10", + "version": "5.2.11", "description": "ESLint plugin for formatjs", "main": "index.js", "repository": { diff --git a/packages/icu-messageformat-parser/CHANGELOG.md b/packages/icu-messageformat-parser/CHANGELOG.md index 3c0332b6169..9b07a99dcae 100644 --- a/packages/icu-messageformat-parser/CHANGELOG.md +++ b/packages/icu-messageformat-parser/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.10.1](https://github.com/formatjs/formatjs/compare/@formatjs/icu-messageformat-parser@2.10.0...@formatjs/icu-messageformat-parser@2.10.1) (2025-01-20) + +### Bug Fixes + +* **@formatjs/icu-messageformat-parser:** make plural check more lenient ([e0194bf](https://github.com/formatjs/formatjs/commit/e0194bf15632f4aa529ca075a5c958f2ffb254c8)) - by @longlho + # [2.10.0](https://github.com/formatjs/formatjs/compare/@formatjs/icu-messageformat-parser@2.9.8...@formatjs/icu-messageformat-parser@2.10.0) (2025-01-17) ### Bug Fixes diff --git a/packages/icu-messageformat-parser/manipulator.ts b/packages/icu-messageformat-parser/manipulator.ts index a4d5201b325..c983f9ab9ac 100644 --- a/packages/icu-messageformat-parser/manipulator.ts +++ b/packages/icu-messageformat-parser/manipulator.ts @@ -1,10 +1,8 @@ import { isArgumentElement, isDateElement, - isLiteralElement, isNumberElement, isPluralElement, - isPoundElement, isSelectElement, isTagElement, isTimeElement, @@ -12,6 +10,7 @@ import { PluralElement, PluralOrSelectOption, SelectElement, + TYPE, } from './types' function cloneDeep(obj: T): T { @@ -101,122 +100,63 @@ export function hoistSelectors( return ast } -function isStructurallySamePluralOrSelect( - el1: PluralElement | SelectElement, - el2: PluralElement | SelectElement -): boolean { - const options1 = el1.options - const options2 = el2.options - if (Object.keys(options1).length !== Object.keys(options2).length) { - return false - } - for (const key in options1) { - if (!options2[key]) { - return false +/** + * Collect all variables in an AST to Record + * @param ast AST to collect variables from + * @param vars Record of variable name to variable type + */ +function collectVariables( + ast: MessageFormatElement[], + vars: Map = new Map() +): void { + ast.forEach(el => { + if ( + isArgumentElement(el) || + isDateElement(el) || + isTimeElement(el) || + isNumberElement(el) + ) { + if (el.value in vars && vars.get(el.value) !== el.type) { + throw new Error(`Variable ${el.value} has conflicting types`) + } + vars.set(el.value, el.type) } - if (!isStructurallySame(options1[key].value, options2[key].value)) { - return false + + if (isPluralElement(el) || isSelectElement(el)) { + vars.set(el.value, el.type) + Object.keys(el.options).forEach(k => { + collectVariables(el.options[k].value, vars) + }) } - } - return true + + if (isTagElement(el)) { + vars.set(el.value, el.type) + collectVariables(el.children, vars) + } + }) } +/** + * Check if 2 ASTs are structurally the same. This primarily means that + * they have the same variables with the same type + * @param a + * @param b + * @returns + */ export function isStructurallySame( a: MessageFormatElement[], b: MessageFormatElement[] ): boolean { - const aWithoutLiteral = a.filter(el => !isLiteralElement(el)) - const bWithoutLiteral = b.filter(el => !isLiteralElement(el)) - if (aWithoutLiteral.length !== bWithoutLiteral.length) { + const aVars = new Map() + const bVars = new Map() + collectVariables(a, aVars) + collectVariables(b, bVars) + + if (aVars.size !== bVars.size) { return false } - const elementsMapInA = aWithoutLiteral.reduce< - Record - >((all, el) => { - if (isPoundElement(el)) { - all['#'] = el - return all - } - all[el.value] = el - return all - }, {}) - - const elementsMapInB = bWithoutLiteral.reduce< - Record - >((all, el) => { - if (isPoundElement(el)) { - all['#'] = el - return all - } - all[el.value] = el - return all - }, {}) - - for (const varName of Object.keys(elementsMapInA)) { - const elA = elementsMapInA[varName] - const elB = elementsMapInB[varName] - if (!elB) { - return false - } - - if (elA.type !== elB.type) { - return false - } - - if (isLiteralElement(elA) || isLiteralElement(elB)) { - continue - } - - if ( - isArgumentElement(elA) && - isArgumentElement(elB) && - elA.value !== elB.value - ) { - return false - } - - if (isPoundElement(elA) || isPoundElement(elB)) { - continue - } - - if ( - isDateElement(elA) || - isTimeElement(elA) || - isNumberElement(elA) || - isDateElement(elB) || - isTimeElement(elB) || - isNumberElement(elB) - ) { - if (elA.value !== elB.value) { - return false - } - } - - if ( - isPluralElement(elA) && - isPluralElement(elB) && - !isStructurallySamePluralOrSelect(elA, elB) - ) { - return false - } - - if ( - isSelectElement(elA) && - isSelectElement(elB) && - isStructurallySamePluralOrSelect(elA, elB) - ) { - return false - } - - if (isTagElement(elA) && isTagElement(elB)) { - if (elA.value !== elB.value) { - return false - } - if (!isStructurallySame(elA.children, elB.children)) { - return false - } - } - } - return true + return Array.from(aVars.entries()).every(([key, type]) => { + return bVars.has(key) && bVars.get(key) === type + }) } diff --git a/packages/icu-messageformat-parser/package.json b/packages/icu-messageformat-parser/package.json index 1a441a2750a..c9a11d4205f 100644 --- a/packages/icu-messageformat-parser/package.json +++ b/packages/icu-messageformat-parser/package.json @@ -1,6 +1,6 @@ { "name": "@formatjs/icu-messageformat-parser", - "version": "2.10.0", + "version": "2.10.1", "main": "index.js", "module": "lib/index.js", "types": "index.d.ts", diff --git a/packages/intl-messageformat/CHANGELOG.md b/packages/intl-messageformat/CHANGELOG.md index dfaec020e4c..20dcfc5a648 100644 --- a/packages/intl-messageformat/CHANGELOG.md +++ b/packages/intl-messageformat/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [10.7.13](https://github.com/formatjs/formatjs/compare/intl-messageformat@10.7.12...intl-messageformat@10.7.13) (2025-01-20) + +**Note:** Version bump only for package intl-messageformat + ## [10.7.12](https://github.com/formatjs/formatjs/compare/intl-messageformat@10.7.11...intl-messageformat@10.7.12) (2025-01-17) **Note:** Version bump only for package intl-messageformat diff --git a/packages/intl-messageformat/package.json b/packages/intl-messageformat/package.json index 70478141151..72c233572ea 100644 --- a/packages/intl-messageformat/package.json +++ b/packages/intl-messageformat/package.json @@ -1,6 +1,6 @@ { "name": "intl-messageformat", - "version": "10.7.12", + "version": "10.7.13", "description": "Formats ICU Message strings with number, date, plural, and select placeholders to create localized messages.", "keywords": [ "i18n", diff --git a/packages/intl/CHANGELOG.md b/packages/intl/CHANGELOG.md index f969b84f658..425a35c8967 100644 --- a/packages/intl/CHANGELOG.md +++ b/packages/intl/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.1.2](https://github.com/formatjs/formatjs/compare/@formatjs/intl@3.1.1...@formatjs/intl@3.1.2) (2025-01-20) + +**Note:** Version bump only for package @formatjs/intl + ## [3.1.1](https://github.com/formatjs/formatjs/compare/@formatjs/intl@3.1.0...@formatjs/intl@3.1.1) (2025-01-17) **Note:** Version bump only for package @formatjs/intl diff --git a/packages/intl/package.json b/packages/intl/package.json index 7519f99d0fd..6e53130871c 100644 --- a/packages/intl/package.json +++ b/packages/intl/package.json @@ -1,6 +1,6 @@ { "name": "@formatjs/intl", - "version": "3.1.1", + "version": "3.1.2", "description": "Internationalize JS apps. This library provides an API to format dates, numbers, and strings, including pluralization and handling translations.", "keywords": [ "intl", diff --git a/packages/react-intl/CHANGELOG.md b/packages/react-intl/CHANGELOG.md index 591e8ae081a..5b246556a8b 100644 --- a/packages/react-intl/CHANGELOG.md +++ b/packages/react-intl/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.1.2](https://github.com/formatjs/formatjs/compare/react-intl@7.1.1...react-intl@7.1.2) (2025-01-20) + +**Note:** Version bump only for package react-intl + ## [7.1.1](https://github.com/formatjs/formatjs/compare/react-intl@7.1.0...react-intl@7.1.1) (2025-01-17) **Note:** Version bump only for package react-intl diff --git a/packages/react-intl/package.json b/packages/react-intl/package.json index 533783cce26..3545a0c33de 100644 --- a/packages/react-intl/package.json +++ b/packages/react-intl/package.json @@ -1,6 +1,6 @@ { "name": "react-intl", - "version": "7.1.1", + "version": "7.1.2", "description": "Internationalize React apps. This library provides React components and an API to format dates, numbers, and strings, including pluralization and handling translations.", "keywords": [ "intl", diff --git a/packages/ts-transformer/CHANGELOG.md b/packages/ts-transformer/CHANGELOG.md index 86da1f8e4a7..f4fa601a6fc 100644 --- a/packages/ts-transformer/CHANGELOG.md +++ b/packages/ts-transformer/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.13.29](https://github.com/formatjs/formatjs/compare/@formatjs/ts-transformer@3.13.28...@formatjs/ts-transformer@3.13.29) (2025-01-20) + +**Note:** Version bump only for package @formatjs/ts-transformer + ## [3.13.28](https://github.com/formatjs/formatjs/compare/@formatjs/ts-transformer@3.13.27...@formatjs/ts-transformer@3.13.28) (2025-01-17) **Note:** Version bump only for package @formatjs/ts-transformer diff --git a/packages/ts-transformer/package.json b/packages/ts-transformer/package.json index fb3917a35d6..b81f7452ead 100644 --- a/packages/ts-transformer/package.json +++ b/packages/ts-transformer/package.json @@ -1,6 +1,6 @@ { "name": "@formatjs/ts-transformer", - "version": "3.13.28", + "version": "3.13.29", "description": "TS Compiler transformer for formatjs", "main": "index.js", "types": "index.d.ts", diff --git a/packages/vue-intl/CHANGELOG.md b/packages/vue-intl/CHANGELOG.md index 71370fe1caf..58b86f28690 100644 --- a/packages/vue-intl/CHANGELOG.md +++ b/packages/vue-intl/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.5.21](https://github.com/formatjs/formatjs/compare/vue-intl@6.5.20...vue-intl@6.5.21) (2025-01-20) + +**Note:** Version bump only for package vue-intl + ## [6.5.20](https://github.com/formatjs/formatjs/compare/vue-intl@6.5.19...vue-intl@6.5.20) (2025-01-17) **Note:** Version bump only for package vue-intl diff --git a/packages/vue-intl/package.json b/packages/vue-intl/package.json index ba9d964cb58..b8638576eb3 100644 --- a/packages/vue-intl/package.json +++ b/packages/vue-intl/package.json @@ -1,6 +1,6 @@ { "name": "vue-intl", - "version": "6.5.20", + "version": "6.5.21", "description": "formatjs intl binding for vue", "main": "index.js", "repository": { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy