From 38a6749cb5ecee100d8082948df1c902a2ac35a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Rialland?= Date: Wed, 8 Feb 2023 10:09:19 +0100 Subject: [PATCH] Fix les scripts de traduction --- site/package.json | 2 +- site/scripts/i18n/parser.config.js | 12 +- site/scripts/i18n/translate-rules.js | 33 +- site/scripts/i18n/translate-ui.js | 6 +- site/scripts/i18n/utils.js | 71 ++-- site/source/locales/translateRules.ts | 6 +- site/vite.config.ts | 28 +- yarn.lock | 505 ++++++++++++++------------ 8 files changed, 383 insertions(+), 280 deletions(-) diff --git a/site/package.json b/site/package.json index 7a54d215b..372b449fd 100644 --- a/site/package.json +++ b/site/package.json @@ -139,7 +139,7 @@ "cypress-plugin-tab": "^1.0.5", "cypress-wait-until": "^1.7.2", "dotenv": "^16.0.3", - "i18next-parser": "^7.0.3", + "i18next-parser": "^7.6.0", "netlify-cli": "^12.2.8", "rimraf": "^3.0.2", "rollup-plugin-toml": "^1.0.0", diff --git a/site/scripts/i18n/parser.config.js b/site/scripts/i18n/parser.config.js index e9943e661..68883c245 100644 --- a/site/scripts/i18n/parser.config.js +++ b/site/scripts/i18n/parser.config.js @@ -10,8 +10,10 @@ export default { defaultNamespace: 'translation', // Default namespace used in your i18next config - defaultValue: 'NO_TRANSLATION', // Default value to give to empty keys + defaultValue(locale, namespace, key, value) { + return key === value || (key && value === '') ? 'NO_TRANSLATION' : value + }, indentation: 2, // Indentation of the catalog files @@ -85,9 +87,11 @@ export default { sort: true, // Whether or not to sort the catalog - useKeysAsDefaultValue: false, - // Whether to use the keys as the default value; ex. "Hello": "Hello", "World": "World" - // The option `defaultValue` will not work if this is set to true + resetDefaultValueLocale: 'fr', + // The locale to compare with default values to determine whether a default value has been changed. + // If this is set and a default value differs from a translation in the specified locale, all entries + // for that key across locales are reset to the default value, and existing translations are moved to + // the `_old` file. verbose: false, // Display info about the parsing including some stats diff --git a/site/scripts/i18n/translate-rules.js b/site/scripts/i18n/translate-rules.js index d4dbd5eba..4175d5049 100644 --- a/site/scripts/i18n/translate-rules.js +++ b/site/scripts/i18n/translate-rules.js @@ -10,19 +10,38 @@ import { const [missingTranslations, resolved] = getRulesMissingTranslations() -writeFileSync( - rulesTranslationPath, - yaml.stringify(resolved, { sortMapEntries: true }) -) +const translateObject = (paths, arr) => + Promise.all( + arr.map(async ([dot, k, v]) => { + if (typeof v === 'string') { + const trad = await fetchTranslation(v) + const res = paths.reduce((obj, key) => obj[key], resolved) + res[dot][k] = '[automatic] ' + trad + } else { + translateObject([...paths, dot, k], v) + } + }) + ) await Promise.all( missingTranslations.map(async ([dottedName, attr, value]) => { try { - const translation = await fetchTranslation(value) - resolved[dottedName][attr] = '[automatic] ' + translation + if (attr === 'avec') { + return await translateObject([dottedName, attr], value) + } + + if (typeof value === 'string') { + const translation = await fetchTranslation(value) + resolved[dottedName][attr] = '[automatic] ' + translation + } else { + console.warn( + "Warning: ⚠️ Can't translate anything other than a string", + { dottedName, attr, value } + ) + } } catch (e) { console.error(e) - console.log(value) + console.log({ dottedName, attr, value }) } }) ) diff --git a/site/scripts/i18n/translate-ui.js b/site/scripts/i18n/translate-ui.js index 911ad43bf..6881221d7 100644 --- a/site/scripts/i18n/translate-ui.js +++ b/site/scripts/i18n/translate-ui.js @@ -8,14 +8,18 @@ import { getUiMissingTranslations, } from './utils.js' +const sleep = (timeout) => + new Promise((resolve) => setTimeout(resolve, timeout)) + const missingTranslations = getUiMissingTranslations() let originalKeys = yaml.parse(readFileSync(UiOriginalTranslationPath, 'utf-8')) let translatedKeys = yaml.parse(readFileSync(UiTranslationPath, 'utf-8')) await Promise.all( Object.entries(missingTranslations) .map(([key, value]) => [key, value === 'NO_TRANSLATION' ? key : value]) - .map(async ([key, originalTranslation]) => { + .map(async ([key, originalTranslation], i) => { try { + await sleep(i * 50) const translation = await fetchTranslation(originalTranslation) const path = key.split(/(?<=[A-zÀ-ü0-9])\.(?=[A-zÀ-ü0-9])/) translatedKeys = assocPath(path, translation, translatedKeys) diff --git a/site/scripts/i18n/utils.js b/site/scripts/i18n/utils.js index 78ed2701f..a97fa815e 100644 --- a/site/scripts/i18n/utils.js +++ b/site/scripts/i18n/utils.js @@ -21,13 +21,10 @@ let attributesToTranslate = [ 'note', ] -export function getRulesMissingTranslations() { - let currentExternalization = yaml.parse( - readFileSync(rulesTranslationPath, 'utf-8') - ) +const recursiveRulesMissingTranslations = (currentExternalization, rules) => { + const ret = { missingTranslations: [], resolved: {} } - let missingTranslations = [] - let resolved = Object.fromEntries( + ret.resolved = Object.fromEntries( Object.entries(rules) .map(([dottedName, rule]) => [ dottedName, @@ -41,6 +38,22 @@ export function getRulesMissingTranslations() { Object.entries(rule) .filter(([, v]) => !!v) .map(([k, v]) => { + let currentTranslation = currentExternalization?.[dottedName] + + if ('avec' === k) { + const result = recursiveRulesMissingTranslations( + currentTranslation?.avec, + v + ) + ret.missingTranslations.push([ + dottedName, + 'avec', + result.missingTranslations, + ]) + + return [['avec', result.resolved]] + } + let attrToTranslate = attributesToTranslate.find( (attr) => attr === k ) @@ -48,8 +61,6 @@ export function getRulesMissingTranslations() { let enTrad = attrToTranslate + '.en' let frTrad = attrToTranslate + '.fr' - let currentTranslation = currentExternalization[dottedName] - if ('suggestions' === attrToTranslate) { return Object.keys(v).reduce((acc, suggestion) => { const enTrad = `suggestions.${suggestion}.en` @@ -64,7 +75,7 @@ export function getRulesMissingTranslations() { [enTrad, currentTranslation[enTrad]], ] } - missingTranslations.push([dottedName, enTrad, suggestion]) + ret.missingTranslations.push([dottedName, enTrad, suggestion]) return [...acc, [frTrad, suggestion]] }, []) } @@ -80,13 +91,26 @@ export function getRulesMissingTranslations() { [enTrad, currentTranslation[enTrad]], [frTrad, v], ] - missingTranslations.push([dottedName, enTrad, v]) + ret.missingTranslations.push([dottedName, enTrad, v]) return [[frTrad, v]] }) .flat() ), ]) ) + + return ret +} + +export function getRulesMissingTranslations() { + let currentExternalization = yaml.parse( + readFileSync(rulesTranslationPath, 'utf-8') + ) + + const { missingTranslations, resolved } = recursiveRulesMissingTranslations( + currentExternalization, + rules + ) return [missingTranslations, resolved] } @@ -99,11 +123,7 @@ export const getUiMissingTranslations = () => { const missingTranslations = Object.entries(staticKeys) .filter(([key, valueInSource]) => { - if ( - key.match(/^\{.*\}$/) || - valueInSource === 'NO_TRANSLATION' || - key.includes('NO_AUTO_TRANSLATION') - ) { + if (key.match(/^\{.*\}$/) || key.includes('NO_AUTO_TRANSLATION')) { return false } const keys = key.split(/(?<=[A-zÀ-ü0-9])\.(?=[A-zÀ-ü0-9])/) @@ -111,7 +131,8 @@ export const getUiMissingTranslations = () => { currentSelection?.[subPath] const isNewKey = !keys.reduce(pathReducer, translatedKeys) const isInvalidatedKey = - keys.reduce(pathReducer, originalKeys) !== valueInSource + keys.reduce(pathReducer, originalKeys) !== + (valueInSource === 'NO_TRANSLATION' ? key : valueInSource) return isNewKey || isInvalidatedKey }, staticKeys) @@ -128,15 +149,19 @@ export const fetchTranslation = async (text) => { if (typeof text !== 'string') { throw new Error("❌ Can't translate anything other than a string") } - const response = await fetch( - `https://api.deepl.com/v2/translate?${new URLSearchParams({ + const response = await fetch(`https://api.deepl.com/v2/translate`, { + method: 'POST', + headers: { + Authorization: 'DeepL-Auth-Key ' + process.env.DEEPL_API_SECRET, + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: new URLSearchParams({ text, - auth_key: process.env.DEEPL_API_SECRET, tag_handling: 'xml', source_lang: 'FR', target_lang: 'EN', - }).toString()}` - ) + }), + }) if (response.status !== 200) { const msg = JSON.stringify(text, null, 2) console.error(`❌ Deepl return status ${response.status} for:\n\t${msg}\n`) @@ -144,7 +169,9 @@ export const fetchTranslation = async (text) => { } try { const { translations } = await response.json() - console.log(`✅ Deepl translation succeeded for:\n\t${text}\n`) + console.log( + `✅ Deepl translation succeeded for:\n\t${text}\n\t${translations[0].text}\n` + ) return translations[0].text } catch (e) { console.warn(`❌ Deepl translation failed for:\n\t${text}\n`) diff --git a/site/source/locales/translateRules.ts b/site/source/locales/translateRules.ts index 6b887e5fa..18328107d 100644 --- a/site/source/locales/translateRules.ts +++ b/site/source/locales/translateRules.ts @@ -21,8 +21,7 @@ const translateSuggestion: translateAttribute = ( suggestions: Object.entries(rule.suggestions!).reduce( (acc, [name, value]) => ({ ...acc, - [translation[`${prop}.${name}.${lang}`]?.replace(/^\[automatic\] /, '')]: - value, + [translation[`${prop}.${name}.${lang}`]]: value, }), {} ), @@ -44,8 +43,7 @@ const translateProp = if (prop === 'suggestions' && rule?.suggestions) { return translateSuggestion(prop, rule, translation, lang) } - let propTrans = translation[prop + '.' + lang] - propTrans = propTrans?.replace(/^\[automatic\] /, '') + const propTrans = translation[prop + '.' + lang] let avec if ( diff --git a/site/vite.config.ts b/site/vite.config.ts index f657d15ba..8ab7aec0e 100644 --- a/site/vite.config.ts +++ b/site/vite.config.ts @@ -1,6 +1,6 @@ /* eslint-disable no-console */ import replace from '@rollup/plugin-replace' -import yaml from '@rollup/plugin-yaml' +import yaml, { ValidYamlType } from '@rollup/plugin-yaml' import legacy from '@vitejs/plugin-legacy' import react from '@vitejs/plugin-react' import fs from 'fs/promises' @@ -60,7 +60,13 @@ export default defineConfig(({ command, mode }) => ({ plugins: [['babel-plugin-styled-components', { pure: true }]], }, }), - yaml(), + yaml({ + transform(data, filePath) { + return filePath.endsWith('/rules-en.yaml') + ? cleanAutomaticTag(data) + : data + }, + }), multipleSPA({ defaultSite: 'mon-entreprise', templatePath: './source/template.html', @@ -282,3 +288,21 @@ export const getBranch = (mode: string) => { export const isProductionBranch = (mode: string) => { return ['master', 'next'].includes(getBranch(mode)) } + +const cleanAutomaticTag = (data: ValidYamlType): ValidYamlType => { + if (typeof data === 'string' && data.startsWith('[automatic] ')) { + return data.replace('[automatic] ', '') + } + + if (Array.isArray(data)) { + return data.map((val) => cleanAutomaticTag(val)) + } + + if (data && typeof data === 'object') { + return Object.fromEntries( + Object.entries(data).map(([key, val]) => [key, cleanAutomaticTag(val)]) + ) + } + + return data +} diff --git a/yarn.lock b/yarn.lock index a86625247..820c8b890 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2778,7 +2778,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.4, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": version: 7.17.8 resolution: "@babel/runtime@npm:7.17.8" dependencies: @@ -2814,6 +2814,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.20.6": + version: 7.20.13 + resolution: "@babel/runtime@npm:7.20.13" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 09b7a97a05c80540db6c9e4ddf8c5d2ebb06cae5caf3a87e33c33f27f8c4d49d9c67a2d72f1570e796045288fad569f98a26ceba0c4f5fad2af84b6ad855c4fb + languageName: node + linkType: hard + "@babel/runtime@npm:~7.5.4": version: 7.5.5 resolution: "@babel/runtime@npm:7.5.5" @@ -3143,6 +3152,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/android-arm64@npm:0.17.6" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.15.14": version: 0.15.14 resolution: "@esbuild/android-arm@npm:0.15.14" @@ -3150,13 +3166,69 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.15.15": - version: 0.15.15 - resolution: "@esbuild/android-arm@npm:0.15.15" +"@esbuild/android-arm@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/android-arm@npm:0.17.6" conditions: os=android & cpu=arm languageName: node linkType: hard +"@esbuild/android-x64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/android-x64@npm:0.17.6" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/darwin-arm64@npm:0.17.6" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/darwin-x64@npm:0.17.6" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/freebsd-arm64@npm:0.17.6" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/freebsd-x64@npm:0.17.6" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/linux-arm64@npm:0.17.6" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/linux-arm@npm:0.17.6" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/linux-ia32@npm:0.17.6" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.15.14": version: 0.15.14 resolution: "@esbuild/linux-loong64@npm:0.15.14" @@ -3164,13 +3236,90 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.15.15": - version: 0.15.15 - resolution: "@esbuild/linux-loong64@npm:0.15.15" +"@esbuild/linux-loong64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/linux-loong64@npm:0.17.6" conditions: os=linux & cpu=loong64 languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/linux-mips64el@npm:0.17.6" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/linux-ppc64@npm:0.17.6" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/linux-riscv64@npm:0.17.6" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/linux-s390x@npm:0.17.6" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/linux-x64@npm:0.17.6" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/netbsd-x64@npm:0.17.6" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/openbsd-x64@npm:0.17.6" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/sunos-x64@npm:0.17.6" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/win32-arm64@npm:0.17.6" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/win32-ia32@npm:0.17.6" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.17.6": + version: 0.17.6 + resolution: "@esbuild/win32-x64@npm:0.17.6" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^1.0.5, @eslint/eslintrc@npm:^1.3.3": version: 1.3.3 resolution: "@eslint/eslintrc@npm:1.3.3" @@ -12434,13 +12583,20 @@ __metadata: languageName: node linkType: hard -"commander@npm:^9.1.0, commander@npm:^9.2.0, commander@npm:^9.3.0, commander@npm:^9.4.0, commander@npm:~9.4.1": +"commander@npm:^9.1.0, commander@npm:^9.2.0, commander@npm:^9.3.0, commander@npm:^9.4.0": version: 9.4.1 resolution: "commander@npm:9.4.1" checksum: bfb18e325a5bdf772763c2213d5c7d9e77144d944124e988bcd8e5e65fb6d45d5d4e86b09155d0f2556c9a59c31e428720e57968bcd050b2306e910a0bf3cf13 languageName: node linkType: hard +"commander@npm:~10.0.0": + version: 10.0.0 + resolution: "commander@npm:10.0.0" + checksum: 9f6495651f878213005ac744dd87a85fa3d9f2b8b90d1c19d0866d666bda7f735adfd7c2f10dfff345782e2f80ea258f98bb4efcef58e4e502f25f883940acfd + languageName: node + linkType: hard + "common-path-prefix@npm:^3.0.0": version: 3.0.0 resolution: "common-path-prefix@npm:3.0.0" @@ -14579,13 +14735,6 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-android-64@npm:0.15.15" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "esbuild-android-arm64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-android-arm64@npm:0.15.14" @@ -14593,13 +14742,6 @@ __metadata: languageName: node linkType: hard -"esbuild-android-arm64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-android-arm64@npm:0.15.15" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "esbuild-darwin-64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-darwin-64@npm:0.15.14" @@ -14607,13 +14749,6 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-darwin-64@npm:0.15.15" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "esbuild-darwin-arm64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-darwin-arm64@npm:0.15.14" @@ -14621,13 +14756,6 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-arm64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-darwin-arm64@npm:0.15.15" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "esbuild-freebsd-64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-freebsd-64@npm:0.15.14" @@ -14635,13 +14763,6 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-freebsd-64@npm:0.15.15" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "esbuild-freebsd-arm64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-freebsd-arm64@npm:0.15.14" @@ -14649,13 +14770,6 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-arm64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-freebsd-arm64@npm:0.15.15" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "esbuild-linux-32@npm:0.15.14": version: 0.15.14 resolution: "esbuild-linux-32@npm:0.15.14" @@ -14663,13 +14777,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-32@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-linux-32@npm:0.15.15" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - "esbuild-linux-64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-linux-64@npm:0.15.14" @@ -14677,13 +14784,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-linux-64@npm:0.15.15" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "esbuild-linux-arm64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-linux-arm64@npm:0.15.14" @@ -14691,13 +14791,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-linux-arm64@npm:0.15.15" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "esbuild-linux-arm@npm:0.15.14": version: 0.15.14 resolution: "esbuild-linux-arm@npm:0.15.14" @@ -14705,13 +14798,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-linux-arm@npm:0.15.15" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "esbuild-linux-mips64le@npm:0.15.14": version: 0.15.14 resolution: "esbuild-linux-mips64le@npm:0.15.14" @@ -14719,13 +14805,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-mips64le@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-linux-mips64le@npm:0.15.15" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - "esbuild-linux-ppc64le@npm:0.15.14": version: 0.15.14 resolution: "esbuild-linux-ppc64le@npm:0.15.14" @@ -14733,13 +14812,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-ppc64le@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-linux-ppc64le@npm:0.15.15" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - "esbuild-linux-riscv64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-linux-riscv64@npm:0.15.14" @@ -14747,13 +14819,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-riscv64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-linux-riscv64@npm:0.15.15" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - "esbuild-linux-s390x@npm:0.15.14": version: 0.15.14 resolution: "esbuild-linux-s390x@npm:0.15.14" @@ -14761,13 +14826,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-s390x@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-linux-s390x@npm:0.15.15" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "esbuild-netbsd-64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-netbsd-64@npm:0.15.14" @@ -14775,13 +14833,6 @@ __metadata: languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-netbsd-64@npm:0.15.15" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - "esbuild-openbsd-64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-openbsd-64@npm:0.15.14" @@ -14789,13 +14840,6 @@ __metadata: languageName: node linkType: hard -"esbuild-openbsd-64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-openbsd-64@npm:0.15.15" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "esbuild-sunos-64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-sunos-64@npm:0.15.14" @@ -14803,13 +14847,6 @@ __metadata: languageName: node linkType: hard -"esbuild-sunos-64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-sunos-64@npm:0.15.15" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - "esbuild-windows-32@npm:0.15.14": version: 0.15.14 resolution: "esbuild-windows-32@npm:0.15.14" @@ -14817,13 +14854,6 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-32@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-windows-32@npm:0.15.15" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "esbuild-windows-64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-windows-64@npm:0.15.14" @@ -14831,13 +14861,6 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-windows-64@npm:0.15.15" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "esbuild-windows-arm64@npm:0.15.14": version: 0.15.14 resolution: "esbuild-windows-arm64@npm:0.15.14" @@ -14845,90 +14868,6 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-arm64@npm:0.15.15": - version: 0.15.15 - resolution: "esbuild-windows-arm64@npm:0.15.15" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"esbuild@npm:^0.15.13": - version: 0.15.15 - resolution: "esbuild@npm:0.15.15" - dependencies: - "@esbuild/android-arm": 0.15.15 - "@esbuild/linux-loong64": 0.15.15 - esbuild-android-64: 0.15.15 - esbuild-android-arm64: 0.15.15 - esbuild-darwin-64: 0.15.15 - esbuild-darwin-arm64: 0.15.15 - esbuild-freebsd-64: 0.15.15 - esbuild-freebsd-arm64: 0.15.15 - esbuild-linux-32: 0.15.15 - esbuild-linux-64: 0.15.15 - esbuild-linux-arm: 0.15.15 - esbuild-linux-arm64: 0.15.15 - esbuild-linux-mips64le: 0.15.15 - esbuild-linux-ppc64le: 0.15.15 - esbuild-linux-riscv64: 0.15.15 - esbuild-linux-s390x: 0.15.15 - esbuild-netbsd-64: 0.15.15 - esbuild-openbsd-64: 0.15.15 - esbuild-sunos-64: 0.15.15 - esbuild-windows-32: 0.15.15 - esbuild-windows-64: 0.15.15 - esbuild-windows-arm64: 0.15.15 - dependenciesMeta: - "@esbuild/android-arm": - optional: true - "@esbuild/linux-loong64": - optional: true - esbuild-android-64: - optional: true - esbuild-android-arm64: - optional: true - esbuild-darwin-64: - optional: true - esbuild-darwin-arm64: - optional: true - esbuild-freebsd-64: - optional: true - esbuild-freebsd-arm64: - optional: true - esbuild-linux-32: - optional: true - esbuild-linux-64: - optional: true - esbuild-linux-arm: - optional: true - esbuild-linux-arm64: - optional: true - esbuild-linux-mips64le: - optional: true - esbuild-linux-ppc64le: - optional: true - esbuild-linux-riscv64: - optional: true - esbuild-linux-s390x: - optional: true - esbuild-netbsd-64: - optional: true - esbuild-openbsd-64: - optional: true - esbuild-sunos-64: - optional: true - esbuild-windows-32: - optional: true - esbuild-windows-64: - optional: true - esbuild-windows-arm64: - optional: true - bin: - esbuild: bin/esbuild - checksum: 9a194a310ac7d6989d1fe7354901d531d3b0d4cc1897a85a7cb9f1ae0fe8d82eb59747e63c91f676bab7bed8d6a1f28f620d49f043e7bd6203f9afe34031f739 - languageName: node - linkType: hard - "esbuild@npm:^0.15.9": version: 0.15.14 resolution: "esbuild@npm:0.15.14" @@ -15006,6 +14945,83 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.17.0": + version: 0.17.6 + resolution: "esbuild@npm:0.17.6" + dependencies: + "@esbuild/android-arm": 0.17.6 + "@esbuild/android-arm64": 0.17.6 + "@esbuild/android-x64": 0.17.6 + "@esbuild/darwin-arm64": 0.17.6 + "@esbuild/darwin-x64": 0.17.6 + "@esbuild/freebsd-arm64": 0.17.6 + "@esbuild/freebsd-x64": 0.17.6 + "@esbuild/linux-arm": 0.17.6 + "@esbuild/linux-arm64": 0.17.6 + "@esbuild/linux-ia32": 0.17.6 + "@esbuild/linux-loong64": 0.17.6 + "@esbuild/linux-mips64el": 0.17.6 + "@esbuild/linux-ppc64": 0.17.6 + "@esbuild/linux-riscv64": 0.17.6 + "@esbuild/linux-s390x": 0.17.6 + "@esbuild/linux-x64": 0.17.6 + "@esbuild/netbsd-x64": 0.17.6 + "@esbuild/openbsd-x64": 0.17.6 + "@esbuild/sunos-x64": 0.17.6 + "@esbuild/win32-arm64": 0.17.6 + "@esbuild/win32-ia32": 0.17.6 + "@esbuild/win32-x64": 0.17.6 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 13c4c3bcaa7ff291810d2c8294a1eb997b4672c60a9285b32d8eafcbc552e4468e06efe9d1a15067f5cbd41adcb12ddb4362618845e2e916e437f281c9aa80ab + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -16621,7 +16637,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^10.0.0, fs-extra@npm:^10.1.0": +"fs-extra@npm:^10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" dependencies: @@ -16632,6 +16648,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^11.1.0": + version: 11.1.0 + resolution: "fs-extra@npm:11.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f + languageName: node + linkType: hard + "fs-extra@npm:^8.0.1, fs-extra@npm:^8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" @@ -18115,19 +18142,19 @@ __metadata: languageName: node linkType: hard -"i18next-parser@npm:^7.0.3": - version: 7.0.3 - resolution: "i18next-parser@npm:7.0.3" +"i18next-parser@npm:^7.6.0": + version: 7.6.0 + resolution: "i18next-parser@npm:7.6.0" dependencies: "@babel/runtime": ^7.15.4 broccoli-plugin: ^4.0.7 cheerio: ^1.0.0-rc.2 colors: 1.4.0 - commander: ~9.4.1 + commander: ~10.0.0 concat-stream: ~2.0.0 eol: ^0.9.1 - esbuild: ^0.15.13 - fs-extra: ^10.0.0 + esbuild: ^0.17.0 + fs-extra: ^11.1.0 gulp-sort: ^2.0.0 i18next: ^22.0.4 js-yaml: 4.1.0 @@ -18141,16 +18168,16 @@ __metadata: vue-template-compiler: ^2.6.11 bin: i18next: bin/cli.js - checksum: f7e1e4d6e6e0f41babd5a20f8c9095ee34edd5cb0e68945c1fc079dedc21424e7a9a3c7471089534e11e3e025c11644f88a63cbd01188ab824cf0cc6629d96a8 + checksum: cb735612f8acdb66c64236b8c4c1a5704e713e75b11af307bf21067c682972129a9e69912e0d0c22df546ddf885bed88d41f5e88e90d10bd8c7411e6fb324423 languageName: node linkType: hard "i18next@npm:^22.0.4": - version: 22.0.6 - resolution: "i18next@npm:22.0.6" + version: 22.4.9 + resolution: "i18next@npm:22.4.9" dependencies: - "@babel/runtime": ^7.17.2 - checksum: b9d20b8d6cdd16c38def15d4f1c5906418926412eafa7d582fbd8395618deb177e73bdc709559480de7e1a3281287b69665d6f7c2af8df791f10ea1dfd79cb79 + "@babel/runtime": ^7.20.6 + checksum: 8cce4aaced4857e006fab2c9d4adb0eb1375829e459076be79d4d3532b1be6342b7003a720e187098f17bb276bea46df8b3fc2cf21f0f3a230bd519243048d1a languageName: node linkType: hard @@ -25011,7 +25038,7 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.10, regenerator-runtime@npm:^0.13.2, regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:^0.13.7": +"regenerator-runtime@npm:^0.13.10, regenerator-runtime@npm:^0.13.11, regenerator-runtime@npm:^0.13.2, regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:^0.13.7": version: 0.13.11 resolution: "regenerator-runtime@npm:0.13.11" checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 @@ -26294,7 +26321,7 @@ __metadata: exoneration-covid: "workspace:^" focus-trap-react: ^10.0.2 fuse.js: ^6.6.2 - i18next-parser: ^7.0.3 + i18next-parser: ^7.6.0 iframe-resizer: ^4.3.2 isbot: ^3.6.5 markdown-to-jsx: ^7.1.9