mirror of
https://github.com/maputnik/editor.git
synced 2026-10-23 19:33:49 +00:00
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.75.3 to 1.77.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md">i18next-cli's changelog</a>.</em></p> <blockquote> <h2>1.77.0</h2> <ul> <li>feat(types): with <code>extract.messageFormat: 'icu'</code> or <code>'mf2'</code>, a newly generated <code>i18next.d.ts</code> sets <code>parseInterpolation: 'icu'</code> or <code>'mf2'</code> when the project's i18next is 26.5.0 or later, so <code>t()</code> options are type-checked against the arguments of each message. With i18next 26.2.0 to 26.4.x it still sets <code>parseInterpolation: false</code>. The version is read from <code>node_modules/i18next/package.json</code>, from the working directory upwards (hoisted monorepo installs count); without an installed i18next it stays <code>false</code>. The warning for an existing <code>i18next.d.ts</code> without <code>parseInterpolation</code> suggests the value for your i18next version, and an existing file that still sets <code>false</code> although your i18next supports the typed value gets a hint.</li> <li>docs(skill): the ICU and MF2 reference describes <code>parseInterpolation: 'icu'</code> / <code>'mf2'</code>.</li> </ul> <h2>1.76.0</h2> <ul> <li>feat: new <code>extract.messageFormat</code> option, <code>'i18next'</code> (default), <code>'icu'</code> (<a href="https://github.com/i18next/i18next-icu">i18next-icu</a>) or <code>'mf2'</code> (<a href="https://github.com/i18next/i18next-mf2">i18next-mf2</a>), for the syntax of your translation values.</li> <li>feat(extract): with <code>messageFormat: 'icu'</code> or <code>'mf2'</code>, <code>extract</code> writes one key per message. <code>t('photos', '{count, plural, ...}', { count })</code> gave <code>photos_one</code> and <code>photos_other</code> (plus <code>_few</code> and <code>_many</code> for languages like Polish), keys i18next-icu and i18next-mf2 never read, and <code>context</code> gave <code>_male</code> keys; now it gives <code>photos</code>. <code>$t()</code> in a value is no longer read as nesting, and the children of <code><Trans></code> are written with <code>{name}</code> (ICU) or <code>{$name}</code> (MF2) instead of <code>{{name}}</code>, which ICU and MF2 rendered as text.</li> <li>feat(extract): <code>IcuTrans</code> and <code>IcuTransWithoutContext</code> are extracted, also when imported under another name (key from <code>i18nKey</code>, or <code>defaultTranslation</code> when there is none), and so are the <code>Trans</code>, <code>Plural</code>, <code>Select</code> and <code>SelectOrdinal</code> components of <code>react-i18next/icu.macro</code>, with the message the macro builds (<code><Trans>Welcome, <strong>{name}</strong>!</Trans></code> gives <code>Welcome, <0>{name}</0>!</code>). Before, <code>IcuTrans</code> was not extracted, and the macro <code><Trans></code> was read as react-i18next <code>Trans</code> and written as <code>Welcome, <strong>{{name}}</strong>!</code>, which the compiled <code>IcuTrans</code> rendered as text.</li> <li>feat(status): with <code>messageFormat: 'icu'</code> or <code>'mf2'</code>, a plural or select message counts as one key, so <code>status</code> no longer reports missing <code>_few</code> and <code>_many</code> keys.</li> <li>feat(instrument): with <code>messageFormat: 'icu'</code> or <code>'mf2'</code>, <code>instrument</code> writes <code>{name}</code> / <code>{$name}</code> placeholders, a <code>count === 1 ? … : …</code> ternary becomes one plural message instead of <code>defaultValue_one</code> / <code>defaultValue_other</code>, and the i18n init file it creates registers <code>i18next-icu</code> (with <code>intl-messageformat</code> in the install hint) or <code>i18next-mf2</code>.</li> <li>feat(extract, instrument): with <code>messageFormat: 'icu'</code> or <code>'mf2'</code>, the text around converted placeholders (<code>Trans</code> values, <code>instrument</code>) is escaped: <code>File '{{name}}' not found</code> becomes <code>File ''{name}' not found</code>, because an apostrophe before <code>{</code> starts quoted text in ICU and <code>'{name}'</code> would render as the text <code>{name}</code>; literal braces are quoted (ICU) or escaped (MF2).</li> <li>feat(lint): with <code>messageFormat: 'icu'</code> or <code>'mf2'</code>, <code>lint</code> parses every value in the translation files of all locales and reports, with file, key and line (JSON files): <ul> <li>syntax errors with the parser's message (<code>greeting: ICU syntax error: EXPECT_ARGUMENT_CLOSING_BRACE at column 7</code>), with a hint when the value contains i18next's <code>{{</code></li> <li>argument names that differ from the primary language, so a renamed or missing <code>{name}</code> is caught (<code>#</code> is not an argument)</li> <li>plural categories that do not fit the locale, for <code>plural</code> and <code>selectordinal</code> (MF2: <code>.match</code> on <code>:number</code> or <code>:integer</code>). Allowed are the locale's CLDR categories, required are <code>other</code> plus every category a whole number from 0 to 1000 selects: <code>ru</code> needs <code>one</code>, <code>few</code> and <code>many</code>, while <code>fr</code>, <code>es</code>, <code>it</code> and <code>pt</code> may leave out <code>many</code> (only from 1,000,000) and <code>cs</code> its <code>many</code> (fractions only), and <code>zero</code> in <code>en</code> is reported as never used. Exact selectors like <code>=0</code> are allowed and count for a category when they cover every whole number it is used for (<code>=1</code> covers <code>one</code> in <code>en</code>, not in <code>ru</code>, where <code>one</code> is also 21, 31, ...). For a locale <code>Intl</code> does not know only <code>other</code> is required.</li> </ul> </li> <li>fix(lint): with <code>messageFormat: 'icu'</code> or <code>'mf2'</code>, the <code>t()</code> interpolation check reads the arguments with the same parser. ICU braces like <code>male {{name}}</code> are no longer taken for <code>{{name}}</code> interpolation (which reported the <code>gender</code> passed to a select as unused), and <code>t('greeting', 'Hello {name}', { nmae })</code> is reported.</li> <li>feat(types): with <code>messageFormat: 'icu'</code> or <code>'mf2'</code>, a newly generated <code>i18next.d.ts</code> sets <code>parseInterpolation: false</code> (i18next 26.2.0+), so ICU and MF2 plurals no longer break the type-safe <code>t</code>. For an existing file without it, <code>types</code> prints a warning.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/i18next/i18next-cli/commit/933364ee283b2b6a805ad1ae8c936a01a2de2dae"><code>933364e</code></a> 1.77.0</li> <li><a href="https://github.com/i18next/i18next-cli/commit/2916f1b31425dcffffc9b2e6abc8436341f36473"><code>2916f1b</code></a> update i18next deps</li> <li><a href="https://github.com/i18next/i18next-cli/commit/b7d07e784e4832a0e452afaf4640755461569638"><code>b7d07e7</code></a> feat(types): write parseInterpolation 'icu' / 'mf2' for i18next 26.5.0 or later</li> <li><a href="https://github.com/i18next/i18next-cli/commit/71194cce275ba105f399e7d8aa01c7f58d76bdde"><code>71194cc</code></a> test(lint): platform paths in the ICU/MF2 lint tests, so they pass on Windows</li> <li><a href="https://github.com/i18next/i18next-cli/commit/1ea83288d0a247a28cbf87a36f3a516ee7ba4396"><code>1ea8328</code></a> 1.76.0</li> <li><a href="https://github.com/i18next/i18next-cli/commit/faa93a34705f0ae0cda8866e5e08943ef7579c86"><code>faa93a3</code></a> fix(extract, instrument): escape ICU/MF2 text, register the plugin in the ini...</li> <li><a href="https://github.com/i18next/i18next-cli/commit/a87f01fcb4836935afb840629c9b63f73d7a4839"><code>a87f01f</code></a> feat(extract, status, instrument): one key per ICU/MF2 message, IcuTrans and ...</li> <li><a href="https://github.com/i18next/i18next-cli/commit/e9b1f5642a95a638ff60a2194c0b039d633a1f66"><code>e9b1f56</code></a> feat(lint, types): ICU and MF2 support with the new extract.messageFormat option</li> <li><a href="https://github.com/i18next/i18next-cli/commit/6d2202d02dbb962c454ee496b12ac865d0027dba"><code>6d2202d</code></a> README: add Awesome Claude Code badge next to the skill install badge</li> <li>See full diff in <a href="https://github.com/i18next/i18next-cli/compare/v1.75.3...v1.77.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
153 lines
5.0 KiB
JSON
153 lines
5.0 KiB
JSON
{
|
|
"name": "maputnik",
|
|
"version": "3.1.0",
|
|
"description": "A MapLibre GL visual style editor",
|
|
"type": "module",
|
|
"main": "''",
|
|
"scripts": {
|
|
"copy-rtl-text-plugin": "mkdir -p public && cp -p node_modules/@mapbox/mapbox-gl-rtl-text/dist/mapbox-gl-rtl-text.js public/",
|
|
"start": "npm run copy-rtl-text-plugin && vite",
|
|
"build": "npm run copy-rtl-text-plugin && tsc && vite build --mode=production",
|
|
"build-desktop": "npm run copy-rtl-text-plugin && tsc && vite build --mode=desktop && cd desktop && make",
|
|
"build-linux": "npm run copy-rtl-text-plugin && tsc && vite build --mode=desktop && cd desktop && make bin/linux/maputnik",
|
|
"i18n:extract": "npx i18next-cli extract",
|
|
"lint": "eslint",
|
|
"test": "playwright test",
|
|
"test-e2e": "playwright test",
|
|
"test-unit": "vitest",
|
|
"test-unit-ci": "vitest run --coverage --reporter=json",
|
|
"lint-css": "stylelint \"src/styles/*.scss\"",
|
|
"sort-styles": "jq 'sort_by(.id)' src/config/styles.json > tmp.json && mv tmp.json src/config/styles.json"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/maplibre/maputnik"
|
|
},
|
|
"author": "Lukas Martinelli",
|
|
"license": "MIT",
|
|
"homepage": "https://github.com/maplibre/maputnik#readme",
|
|
"dependencies": {
|
|
"@codemirror/lang-json": "^6.0.2",
|
|
"@codemirror/lint": "^6.9.7",
|
|
"@codemirror/state": "^6.7.6",
|
|
"@codemirror/theme-one-dark": "^6.1.3",
|
|
"@codemirror/view": "^6.43.14",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@mapbox/mapbox-gl-rtl-text": "^0.4.0",
|
|
"@maplibre/maplibre-gl-geocoder": "^1.9.4",
|
|
"@maplibre/maplibre-gl-inspect": "^1.9.0",
|
|
"@maplibre/maplibre-gl-style-spec": "^26.4.4",
|
|
"array-move": "^4.0.0",
|
|
"buffer": "^6.0.3",
|
|
"classnames": "^2.5.1",
|
|
"codemirror": "^6.0.2",
|
|
"color": "^5.0.3",
|
|
"detect-browser": "^5.3.0",
|
|
"downshift": "^9.4.0",
|
|
"events": "^3.3.0",
|
|
"file-saver": "^2.0.5",
|
|
"i18next": "^26.4.7",
|
|
"i18next-browser-languagedetector": "^8.2.1",
|
|
"i18next-resources-to-backend": "^1.2.3",
|
|
"json-stringify-pretty-compact": "^4.0.0",
|
|
"json-to-ast": "^2.1.0",
|
|
"lodash": "^4.18.1",
|
|
"lodash.capitalize": "^4.2.1",
|
|
"lodash.clamp": "^4.0.3",
|
|
"lodash.clonedeep": "^4.5.0",
|
|
"lodash.get": "^4.4.2",
|
|
"lodash.isequal": "^4.5.0",
|
|
"lodash.throttle": "^4.1.1",
|
|
"maplibre-gl": "^6.14.0",
|
|
"maputnik-design": "github:maputnik/design#172b06c",
|
|
"ol": "^10.11.0",
|
|
"ol-mapbox-style": "^13.8.0",
|
|
"pmtiles": "^4.5.0",
|
|
"prop-types": "^15.8.1",
|
|
"react": "^19.3.1",
|
|
"react-accessible-accordion": "^5.0.1",
|
|
"react-aria-menubutton": "^8.0.0",
|
|
"react-aria-modal": "^5.0.2",
|
|
"react-collapse": "^5.1.1",
|
|
"react-color": "^2.19.3",
|
|
"react-dom": "^19.3.1",
|
|
"react-i18next": "^17.1.0",
|
|
"react-icons": "^5.7.0",
|
|
"react-markdown": "^10.1.0",
|
|
"react-resizable-panels": "^4.14.5",
|
|
"reconnecting-websocket": "^4.4.0",
|
|
"slugify": "^1.6.9",
|
|
"string-hash": "^1.1.3",
|
|
"url": "^0.11.4"
|
|
},
|
|
"jshintConfig": {
|
|
"esversion": 6
|
|
},
|
|
"stylelint": {
|
|
"extends": "stylelint-config-recommended-scss",
|
|
"rules": {
|
|
"no-descending-specificity": null,
|
|
"media-feature-name-no-unknown": [
|
|
true,
|
|
{
|
|
"ignoreMediaFeatureNames": [
|
|
"prefers-reduced-motion"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^10.0.1",
|
|
"@istanbuljs/nyc-config-typescript": "^1.0.2",
|
|
"@playwright/test": "^1.64.1",
|
|
"@stylistic/eslint-plugin": "^5.10.0",
|
|
"@types/codemirror": "^5.60.18",
|
|
"@types/color": "^4.2.1",
|
|
"@types/cors": "^2.8.19",
|
|
"@types/file-saver": "^2.0.7",
|
|
"@types/geojson": "^7946.0.16",
|
|
"@types/json-to-ast": "^2.1.4",
|
|
"@types/lodash.capitalize": "^4.2.9",
|
|
"@types/lodash.clamp": "^4.0.9",
|
|
"@types/lodash.clonedeep": "^4.5.9",
|
|
"@types/lodash.get": "^4.4.9",
|
|
"@types/lodash.isequal": "^4.5.8",
|
|
"@types/lodash.throttle": "^4.1.9",
|
|
"@types/randomcolor": "^0.5.9",
|
|
"@types/react": "^19.3.0",
|
|
"@types/react-aria-menubutton": "^6.2.14",
|
|
"@types/react-aria-modal": "^5.0.0",
|
|
"@types/react-collapse": "^5.0.4",
|
|
"@types/react-color": "^3.0.13",
|
|
"@types/react-dom": "^19.3.0",
|
|
"@types/string-hash": "^1.1.3",
|
|
"@types/wicg-file-system-access": "^2023.10.7",
|
|
"@vitejs/plugin-react": "^6.1.2",
|
|
"@vitest/coverage-v8": "^5.0.5",
|
|
"cors": "^2.8.6",
|
|
"eslint": "^10.13.0",
|
|
"eslint-plugin-react": "^7.37.5",
|
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
"eslint-plugin-react-refresh": "^0.5.7",
|
|
"i18next-cli": "^1.77.0",
|
|
"istanbul": "^0.4.5",
|
|
"istanbul-lib-coverage": "^3.2.2",
|
|
"nyc": "^18.0.0",
|
|
"postcss": "^8.5.30",
|
|
"react-hot-loader": "^4.13.1",
|
|
"sass": "^1.105.2",
|
|
"stylelint": "^17.16.0",
|
|
"stylelint-config-recommended-scss": "^17.0.1",
|
|
"stylelint-scss": "^7.3.0",
|
|
"typescript": "^6.0.3",
|
|
"typescript-eslint": "^8.71.2",
|
|
"uuid": "^14.0.3",
|
|
"vite": "^8.3.4",
|
|
"vite-plugin-istanbul": "^9.0.1",
|
|
"vitest": "^5.0.5"
|
|
}
|
|
}
|