Compare commits

...

8 Commits

Author SHA1 Message Date
HarelM c0f1a72d80 Fix failing unit tests in CI 2026-07-08 22:43:34 +03:00
Harel M 8c86607100 Add alias for 'it' as 'test' in layers list spec 2026-07-08 15:35:34 +03:00
HarelM 18b34d3ecd Fix lint 2026-07-08 15:16:28 +03:00
HarelM 8344a30f5d Move things back to where this will still work. 2026-07-08 15:05:35 +03:00
Harel M 4249e9beb9 Merge branch 'main' into relocate-e2e-tests 2026-07-08 14:32:25 +03:00
HarelM f7b48139a4 test: adopt Playwright test()/test.describe() naming in e2e specs
Mechanical rename of it() -> test() and describe() -> test.describe() so the
subsequent Playwright migration diff only touches test bodies, not the
suite/case wrappers.
2026-07-08 12:42:13 +03:00
HarelM 8af1cfd5f8 test: relocate Cypress e2e suite to e2e/ ahead of Playwright migration
Pure file moves (no content changes) so git records them as renames and
history/blame is preserved through the migration that follows:
  cypress/e2e/*.cy.ts        -> e2e/*.spec.ts
  cypress/e2e/*-driver.ts    -> e2e/*-driver.ts
  cypress/fixtures/          -> e2e/fixtures/
  cypress.config.ts          -> playwright.config.ts
  InputAutocomplete.cy.tsx   -> InputAutocomplete.browser.test.tsx

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 12:24:03 +03:00
dependabot[bot] a87a4d8df8 chore(deps-dev): Bump i18next-cli from 1.53.2 to 1.65.0 (#1979)
Bumps [i18next-cli](https://github.com/i18next/i18next-cli) from 1.53.2
to 1.65.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.65.0</h2>
<ul>
<li>fix(extract): respect <code>fallbackNS</code> — keys already
translated in a fallback
namespace are no longer duplicated into the requesting namespace's file
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/272">#272</a>).
<ul>
<li>Such keys are now attributed to the fallback namespace instead, so
<code>removeUnusedKeys</code> no longer prunes them from the fallback
file (previously
a key like <code>cancel</code> living only in the fallback namespace was
<strong>deleted</strong>
there and re-created in every namespace that used it).</li>
<li>A key that already has a non-empty value in the requesting
namespace's own
file is treated as an intentional per-namespace override and keeps being
extracted there, mirroring the i18next runtime lookup order (requested
namespace first, then the fallback chain). Empty-string placeholders
left
behind by previous extract runs are cleaned up.</li>
<li>Keys not found in any fallback namespace are still added to the
requesting
namespace, like the i18next <code>saveMissing</code> behavior.</li>
</ul>
</li>
<li>feat(extract): <code>fallbackNS</code> now also accepts an array of
namespaces (looked
up in order, like the i18next runtime option) — supported by
<code>extract</code>,
<code>status</code>, and the TypeScript types generator.</li>
</ul>
<h2>1.64.2</h2>
<ul>
<li>fix(status): scope the pass/fail result to the requested locale
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/271">#271</a>).
<ul>
<li><code>status &lt;locale&gt;</code> now exits based on <strong>that
locale only</strong>, instead of always
evaluating every secondary language. Previously, running e.g.
<code>status en-AU</code> on a fully-translated primary could print
&quot;🎉 All keys
present&quot; and still exit <code>1</code> because an unrelated
secondary (e.g. an empty
<code>de-DE</code>) was incomplete — a summary that contradicted the
exit code.</li>
<li>When the requested locale is the primary, the check still fails only
on
<em>absent</em> keys (empty placeholders are tolerated); for a secondary
it fails
on any untranslated/absent key. The global view (<code>status</code>
with no locale)
is unchanged.</li>
<li>The failure message now names the locale when scoped
(<code>Error: Incomplete translations detected for
&quot;de-DE&quot;.</code>) so the reason is
no longer hidden.</li>
</ul>
</li>
</ul>
<h2>1.64.1</h2>
<ul>
<li>fix(status): align plural reporting with the i18next runtime
(<a
href="https://redirect.github.com/i18next/i18next-cli/issues/270">#270</a>).
<ul>
<li>Plural categories that <code>Intl.PluralRules</code> only selects
for out-of-range
values (e.g. French <code>_many</code>, which fires only for counts ≥
1,000,000) are
now treated as <strong>optional</strong>: a missing or empty variant is
shown as a soft
&quot;optional plural form&quot; note instead of a hard &quot;missing
key&quot; error, so it no
longer fails the check. Categories reachable by typical counts
(including
decimals, e.g. Polish/Russian <code>other</code>) remain required.</li>
<li>With <code>disablePlurals: true</code>, a key used with
<code>count</code> is now considered
satisfied when either its plural variants
(<code>_one</code>/<code>_other</code>) <strong>or</strong> the bare
key exist — mirroring the runtime's <code>key + suffix → key</code>
resolution chain —</li>
</ul>
</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/9497126db21489514db6c2d181ccb667af977281"><code>9497126</code></a>
1.65.0</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/cebfb66b646ce72d93f888c8438082698f35af6c"><code>cebfb66</code></a>
fix(extract): respect fallbackNS and stop duplicating keys into
namespace fil...</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/4af3b5b767ba144773419d13d045240ebace36d0"><code>4af3b5b</code></a>
1.64.2</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/59e5c157b8e6263a7686aa83189169eef4947230"><code>59e5c15</code></a>
fix(status): scope pass/fail to the requested locale <a
href="https://redirect.github.com/i18next/i18next-cli/issues/271">#271</a></li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/58e96acf4d779a60dd49555cfbe7125d370918dd"><code>58e96ac</code></a>
1.64.1</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/90fb64de7c9973cc2bb93074489a114b3c214a43"><code>90fb64d</code></a>
fix(status): align plural reporting with the i18next runtime <a
href="https://redirect.github.com/i18next/i18next-cli/issues/270">#270</a></li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/4f32c051a6b330e5480bea9c5f1e06bfc057b016"><code>4f32c05</code></a>
1.64.0</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/9ab66af4796228060d05bda6de5ff7dea92e9c89"><code>9ab66af</code></a>
feat(extract): support trailing wildcards in functions (e.g.
'tProps.*')</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/3f40d0b904b01546fe86ae14d2e6f54b39ccba78"><code>3f40d0b</code></a>
1.63.1</li>
<li><a
href="https://github.com/i18next/i18next-cli/commit/eac231da589c9690a3bcc1aaf05f10572ae395cb"><code>eac231d</code></a>
fix(init): pin <code>@​inlang/plugin-i18next</code><a
href="https://github.com/6"><code>@​6</code></a>.2.1 (restores Sherlock
annotations)</li>
<li>Additional commits viewable in <a
href="https://github.com/i18next/i18next-cli/compare/v1.53.2...v1.65.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-07 20:46:33 +00:00
18 changed files with 368 additions and 333 deletions
+1
View File
@@ -10,6 +10,7 @@ export default defineConfig({
},
e2e: {
specPattern: "e2e/**/*.spec.ts",
setupNodeEvents(on, config) {
// implement node event listeners here
require("@cypress/code-coverage/task")(on, config);
@@ -1,5 +1,7 @@
import { MaputnikDriver } from "./maputnik-driver";
const test = it;
describe("accessibility", () => {
const { beforeAndAfter, get, when, then } = new MaputnikDriver();
beforeAndAfter();
@@ -9,7 +11,7 @@ describe("accessibility", () => {
when.setStyle("layer");
});
it("skip link to layer list", () => {
test("skip link to layer list", () => {
const selector = "root:skip:layer-list";
then(get.elementByTestId(selector)).shouldExist();
when.tab();
@@ -18,7 +20,7 @@ describe("accessibility", () => {
then(get.skipTargetLayerList()).shouldBeFocused();
});
it("skip link to layer editor", () => {
test("skip link to layer editor", () => {
const selector = "root:skip:layer-editor";
then(get.elementByTestId(selector)).shouldExist();
then(get.elementByTestId("skip-target-layer-editor")).shouldExist();
@@ -28,7 +30,7 @@ describe("accessibility", () => {
then(get.skipTargetLayerEditor()).shouldBeFocused();
});
it("skip link to map view", () => {
test("skip link to map view", () => {
const selector = "root:skip:map-view";
then(get.elementByTestId(selector)).shouldExist();
when.tab().tab().tab();
@@ -1,15 +1,17 @@
import { MaputnikDriver } from "./maputnik-driver";
const test = it;
describe("code editor", () => {
const { beforeAndAfter, when, get, then } = new MaputnikDriver();
beforeAndAfter();
it("open code editor", () => {
test("open code editor", () => {
when.click("nav:code-editor");
then(get.element(".maputnik-code-editor")).shouldExist();
});
it("closes code editor", () => {
test("closes code editor", () => {
when.click("nav:code-editor");
then(get.element(".maputnik-code-editor")).shouldExist();
when.click("nav:code-editor");
@@ -1,5 +1,7 @@
import { MaputnikDriver } from "./maputnik-driver";
const test = it;
describe("history", () => {
const { beforeAndAfter, when, get, then } = new MaputnikDriver();
beforeAndAfter();
@@ -13,7 +15,7 @@ describe("history", () => {
redoKeyCombo = isMac ? "{meta}{shift}z" : "{ctrl}y";
});
it("undo/redo", () => {
test("undo/redo", () => {
when.setStyle("geojson");
when.modal.open();
@@ -87,7 +89,7 @@ describe("history", () => {
});
});
it("should not redo after undo and value change", () => {
test("should not redo after undo and value change", () => {
when.setStyle("geojson");
when.modal.open();
when.modal.fillLayers({
+5 -3
View File
@@ -1,17 +1,19 @@
import { MaputnikDriver } from "./maputnik-driver";
const test = it;
describe("i18n", () => {
const { beforeAndAfter, get, when, then } = new MaputnikDriver();
beforeAndAfter();
describe("language detector", () => {
it("English", () => {
test("English", () => {
const url = "?lng=en";
when.visit(url);
then(get.elementByTestId("maputnik-lang-select")).shouldHaveValue("en");
});
it("Japanese", () => {
test("Japanese", () => {
const url = "?lng=ja";
when.visit(url);
then(get.elementByTestId("maputnik-lang-select")).shouldHaveValue("ja");
@@ -23,7 +25,7 @@ describe("i18n", () => {
when.setStyle("layer");
});
it("the language switcher switches to Japanese", () => {
test("the language switcher switches to Japanese", () => {
const selector = "maputnik-lang-select";
then(get.elementByTestId(selector)).shouldExist();
when.select(selector, "ja");
@@ -1,4 +1,5 @@
import { MaputnikDriver } from "./maputnik-driver";
const test = it;
describe("keyboard", () => {
const { beforeAndAfter, given, when, get, then } = new MaputnikDriver();
@@ -9,7 +10,7 @@ describe("keyboard", () => {
when.setStyle("");
});
it("ESC should unfocus", () => {
test("ESC should unfocus", () => {
const targetSelector = "maputnik-select";
when.focus(targetSelector);
then(get.elementByTestId(targetSelector)).shouldBeFocused();
@@ -17,42 +18,42 @@ describe("keyboard", () => {
then(get.elementByTestId(targetSelector)).shouldNotBeFocused();
});
it("'?' should show shortcuts modal", () => {
test("'?' should show shortcuts modal", () => {
when.typeKeys("?");
then(get.elementByTestId("modal:shortcuts")).shouldBeVisible();
});
it("'o' should show open modal", () => {
test("'o' should show open modal", () => {
when.typeKeys("o");
then(get.elementByTestId("modal:open")).shouldBeVisible();
});
it("'e' should show export modal", () => {
test("'e' should show export modal", () => {
when.typeKeys("e");
then(get.elementByTestId("modal:export")).shouldBeVisible();
});
it("'d' should show sources modal", () => {
test("'d' should show sources modal", () => {
when.typeKeys("d");
then(get.elementByTestId("modal:sources")).shouldBeVisible();
});
it("'s' should show settings modal", () => {
test("'s' should show settings modal", () => {
when.typeKeys("s");
then(get.elementByTestId("modal:settings")).shouldBeVisible();
});
it("'i' should change map to inspect mode", () => {
test("'i' should change map to inspect mode", () => {
when.typeKeys("i");
then(get.inputValue("maputnik-select")).shouldEqual("inspect");
});
it("'m' should focus map", () => {
test("'m' should focus map", () => {
when.typeKeys("m");
then(get.canvas()).shouldBeFocused();
});
it("'!' should show debug modal", () => {
test("'!' should show debug modal", () => {
when.typeKeys("!");
then(get.elementByTestId("modal:debug")).shouldBeVisible();
});
@@ -1,6 +1,8 @@
import { MaputnikDriver } from "./maputnik-driver";
import { v1 as uuid } from "uuid";
const test = it;
describe("layer editor", () => {
const { beforeAndAfter, get, when, then } = new MaputnikDriver();
beforeAndAfter();
@@ -28,8 +30,8 @@ describe("layer editor", () => {
return id;
}
it("expand/collapse");
it("id", () => {
test("expand/collapse");
test("id", () => {
const bgId = createBackground();
when.click("layer-list-item:background:" + bgId);
@@ -49,7 +51,7 @@ describe("layer editor", () => {
});
describe("source", () => {
it("should show error when the source is invalid", () => {
test("should show error when the source is invalid", () => {
when.modal.fillLayers({
type: "circle",
layer: "invalid",
@@ -68,7 +70,7 @@ describe("layer editor", () => {
when.click("layer-editor.layer-id");
});
it("should update min-zoom in local storage", () => {
test("should update min-zoom in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
layers: [
{
@@ -105,7 +107,7 @@ describe("layer editor", () => {
when.click("layer-editor.layer-id");
});
it("should update style in local storage", () => {
test("should update style in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
layers: [
{
@@ -129,7 +131,7 @@ describe("layer editor", () => {
when.click("layer-editor.layer-id");
});
it("should update style in local storage", () => {
test("should update style in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
layers: [
{
@@ -149,7 +151,7 @@ describe("layer editor", () => {
when.click("min-zoom.input-text");
});
it("should update style in local storage", () => {
test("should update style in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
layers: [
{
@@ -170,7 +172,7 @@ describe("layer editor", () => {
when.click("spec-field:background-color");
});
it("should update style in local storage", () => {
test("should update style in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
layers: [
{
@@ -190,11 +192,11 @@ describe("layer editor", () => {
when.type("spec-field-input:background-opacity", "0.");
});
it("should keep '.' in the input field", () => {
test("should keep '.' in the input field", () => {
then(get.elementByTestId("spec-field-input:background-opacity")).shouldHaveValue("0.");
});
it("should revert to a valid value when focus out", () => {
test("should revert to a valid value when focus out", () => {
when.click("layer-list-item:background:" + bgId);
then(get.elementByTestId("spec-field-input:background-opacity")).shouldHaveValue("0");
});
@@ -203,12 +205,12 @@ describe("layer editor", () => {
describe("filter", () => {
it("expand/collapse");
it("compound filter");
test("expand/collapse");
test("compound filter");
});
describe("layout", () => {
it("text-font", () => {
test("text-font", () => {
when.setStyle("font");
when.collapseGroupInLayerEditor();
when.collapseGroupInLayerEditor(1);
@@ -222,14 +224,14 @@ describe("layer editor", () => {
});
describe("paint", () => {
it("expand/collapse");
it("color");
it("pattern");
it("opacity");
test("expand/collapse");
test("color");
test("pattern");
test("opacity");
});
describe("json-editor", () => {
it("add", () => {
test("add", () => {
const id = when.modal.fillLayers({
type: "circle",
layer: "example",
@@ -254,10 +256,10 @@ describe("layer editor", () => {
});
it("expand/collapse");
it("modify");
test("expand/collapse");
test("modify");
it("parse error", () => {
test("parse error", () => {
const bgId = createBackground();
when.click("layer-list-item:background:" + bgId);
@@ -273,7 +275,7 @@ describe("layer editor", () => {
});
describe("sticky header", () => {
it("should keep layer header visible when scrolling properties", () => {
test("should keep layer header visible when scrolling properties", () => {
// Setup: Create a layer with many properties (e.g., symbol layer)
when.modal.fillLayers({
type: "symbol",
@@ -1,4 +1,5 @@
import { MaputnikDriver } from "./maputnik-driver";
const test = it;
describe("layers list", () => {
const { beforeAndAfter, get, when, then } = new MaputnikDriver();
@@ -16,7 +17,7 @@ describe("layers list", () => {
});
});
it("should update layers in local storage", () => {
test("should update layers in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
layers: [
{
@@ -31,7 +32,7 @@ describe("layers list", () => {
beforeEach(() => {
when.click("layer-list-item:" + id + ":delete");
});
it("should empty layers in local storage", () => {
test("should empty layers in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
layers: [],
});
@@ -42,7 +43,7 @@ describe("layers list", () => {
beforeEach(() => {
when.click("layer-list-item:" + id + ":copy");
});
it("should add copy layer in local storage", () => {
test("should add copy layer in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
layers: [
{
@@ -63,7 +64,7 @@ describe("layers list", () => {
when.click("layer-list-item:" + id + ":toggle-visibility");
});
it("should update visibility to none in local storage", () => {
test("should update visibility to none in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
layers: [
{
@@ -82,7 +83,7 @@ describe("layers list", () => {
when.click("layer-list-item:" + id + ":toggle-visibility");
});
it("should update visibility to visible in local storage", () => {
test("should update visibility to visible in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
layers: [
{
@@ -106,7 +107,7 @@ describe("layers list", () => {
type: "background",
});
});
it("should show the selected layer in the editor", () => {
test("should show the selected layer in the editor", () => {
when.realClick("layer-list-item:" + secondId);
then(get.elementByTestId("layer-editor.layer-id.input")).shouldHaveValue(secondId);
when.realClick("layer-list-item:" + id);
@@ -117,7 +118,7 @@ describe("layers list", () => {
});
describe("background", () => {
it("add", () => {
test("add", () => {
const id = when.modal.fillLayers({
type: "background",
});
@@ -135,7 +136,7 @@ describe("layers list", () => {
});
describe("fill", () => {
it("add", () => {
test("add", () => {
const id = when.modal.fillLayers({
type: "fill",
layer: "example",
@@ -153,11 +154,11 @@ describe("layers list", () => {
});
// TODO: Change source
it("change source");
test("change source");
});
describe("line", () => {
it("add", () => {
test("add", () => {
const id = when.modal.fillLayers({
type: "line",
layer: "example",
@@ -174,7 +175,7 @@ describe("layers list", () => {
});
});
it("groups", () => {
test("groups", () => {
when.modal.open();
const id1 = when.modal.fillLayers({
id: "aa",
@@ -230,7 +231,7 @@ describe("layers list", () => {
});
describe("symbol", () => {
it("add", () => {
test("add", () => {
const id = when.modal.fillLayers({
type: "symbol",
layer: "example",
@@ -247,7 +248,7 @@ describe("layers list", () => {
});
});
it("should show spec info when hovering and clicking single line property", () => {
test("should show spec info when hovering and clicking single line property", () => {
when.modal.fillLayers({
type: "symbol",
layer: "example",
@@ -259,7 +260,7 @@ describe("layers list", () => {
then(get.elementByTestId("spec-field-doc")).shouldContainText("Rotates the ");
});
it("should show spec info when hovering and clicking multi line property", () => {
test("should show spec info when hovering and clicking multi line property", () => {
when.modal.fillLayers({
type: "symbol",
layer: "example",
@@ -271,7 +272,7 @@ describe("layers list", () => {
then(get.elementByTestId("spec-field-doc")).shouldContainText("Offset distance");
});
it("should hide spec info when clicking a second time", () => {
test("should hide spec info when clicking a second time", () => {
when.modal.fillLayers({
type: "symbol",
layer: "example",
@@ -287,7 +288,7 @@ describe("layers list", () => {
});
describe("raster", () => {
it("add", () => {
test("add", () => {
const id = when.modal.fillLayers({
type: "raster",
layer: "raster",
@@ -306,7 +307,7 @@ describe("layers list", () => {
});
describe("circle", () => {
it("add", () => {
test("add", () => {
const id = when.modal.fillLayers({
type: "circle",
layer: "example",
@@ -325,7 +326,7 @@ describe("layers list", () => {
});
describe("fill extrusion", () => {
it("add", () => {
test("add", () => {
const id = when.modal.fillLayers({
type: "fill-extrusion",
layer: "example",
@@ -344,7 +345,7 @@ describe("layers list", () => {
});
describe("hillshade", () => {
it("add", () => {
test("add", () => {
const id = when.modal.fillLayers({
type: "hillshade",
layer: "example",
@@ -361,7 +362,7 @@ describe("layers list", () => {
});
});
it("set hillshade illumination direction array", () => {
test("set hillshade illumination direction array", () => {
const id = when.modal.fillLayers({
type: "hillshade",
layer: "example",
@@ -387,7 +388,7 @@ describe("layers list", () => {
});
});
it("set hillshade highlight color array", () => {
test("set hillshade highlight color array", () => {
const id = when.modal.fillLayers({
type: "hillshade",
layer: "example",
@@ -413,7 +414,7 @@ describe("layers list", () => {
});
describe("color-relief", () => {
it("add", () => {
test("add", () => {
const id = when.modal.fillLayers({
type: "color-relief",
layer: "example",
@@ -430,7 +431,7 @@ describe("layers list", () => {
});
});
it("adds elevation expression when clicking the elevation button", () => {
test("adds elevation expression when clicking the elevation button", () => {
when.modal.fillLayers({
type: "color-relief",
layer: "example",
@@ -442,7 +443,7 @@ describe("layers list", () => {
});
describe("groups", () => {
it("simple", () => {
test("simple", () => {
when.setStyle("geojson");
when.modal.open();
@@ -478,7 +479,7 @@ describe("layers list", () => {
});
describe("drag and drop", () => {
it("move layer should update local storage", () => {
test("move layer should update local storage", () => {
when.modal.open();
const firstId = when.modal.fillLayers({
id: "a",
@@ -517,7 +518,7 @@ describe("layers list", () => {
});
describe("sticky header", () => {
it("should keep header visible when scrolling layer list", () => {
test("should keep header visible when scrolling layer list", () => {
// Setup: Create multiple layers to enable scrolling
for (let i = 0; i < 20; i++) {
when.modal.open();
+8 -6
View File
@@ -1,10 +1,12 @@
import { MaputnikDriver } from "./maputnik-driver";
const test = it;
describe("map", () => {
const { beforeAndAfter, get, when, then } = new MaputnikDriver();
beforeAndAfter();
describe("zoom level", () => {
it("via url", () => {
test("via url", () => {
const zoomLevel = 12.37;
when.setStyle("geojson", zoomLevel);
then(get.elementByTestId("maplibre:ctrl-zoom")).shouldBeVisible();
@@ -13,7 +15,7 @@ describe("map", () => {
);
});
it("via map controls", () => {
test("via map controls", () => {
const zoomLevel = 12.37;
when.setStyle("geojson", zoomLevel);
then(get.elementByTestId("maplibre:ctrl-zoom")).shouldBeVisible();
@@ -23,7 +25,7 @@ describe("map", () => {
);
});
it("via style file definition", () => {
test("via style file definition", () => {
when.setStyle("zoom_7_center_0_51");
then(get.elementByTestId("maplibre:ctrl-zoom")).shouldBeVisible();
then(get.elementByTestId("maplibre:ctrl-zoom")).shouldContainText(
@@ -40,7 +42,7 @@ describe("map", () => {
});
describe("search", () => {
it("should exist", () => {
test("should exist", () => {
then(get.searchControl()).shouldBeVisible();
});
});
@@ -50,12 +52,12 @@ describe("map", () => {
when.setStyle("rectangles");
then(get.locationHash().should("exist"));
});
it("should open on feature click", () => {
test("should open on feature click", () => {
when.clickCenter("maplibre:map");
then(get.elementByTestId("feature-layer-popup")).shouldBeVisible();
});
it("should open a second feature after closing popup", () => {
test("should open a second feature after closing popup", () => {
when.clickCenter("maplibre:map");
then(get.elementByTestId("feature-layer-popup")).shouldBeVisible();
when.closePopup();
+40 -39
View File
@@ -1,5 +1,6 @@
import { MaputnikDriver } from "./maputnik-driver";
import tokens from "../../src/config/tokens.json" with {type: "json"};
import tokens from "../src/config/tokens.json" with {type: "json"};
const test = it;
describe("modals", () => {
const { beforeAndAfter, when, get, given, then } = new MaputnikDriver();
@@ -13,17 +14,17 @@ describe("modals", () => {
when.click("nav:open");
});
it("close", () => {
test("close", () => {
when.modal.close("modal:open");
then(get.elementByTestId("modal:open")).shouldNotExist();
});
it("upload", () => {
test("upload", () => {
when.chooseExampleFile();
then(get.fixture("example-style.json")).shouldEqualToStoredStyle();
});
it("upload via drag and drop", () => {
test("upload via drag and drop", () => {
when.dropExampleFile();
then(get.fixture("example-style.json")).shouldEqualToStoredStyle();
});
@@ -36,14 +37,14 @@ describe("modals", () => {
when.click("modal:open.url.button");
when.wait(200);
});
it("load from url", () => {
test("load from url", () => {
then(get.responseBody("example-style.json")).shouldEqualToStoredStyle();
});
});
});
describe("shortcuts", () => {
it("open/close", () => {
test("open/close", () => {
when.setStyle("");
when.typeKeys("?");
when.modal.close("modal:shortcuts");
@@ -56,13 +57,13 @@ describe("modals", () => {
when.click("nav:export");
});
it("close", () => {
test("close", () => {
when.modal.close("modal:export");
then(get.elementByTestId("modal:export")).shouldNotExist();
});
// TODO: Work out how to download a file and check the contents
it("download");
test("download");
});
describe("sources", () => {
@@ -71,10 +72,10 @@ describe("modals", () => {
when.click("nav:sources");
});
it("active sources");
it("public source");
test("active sources");
test("public source");
it("add new source", () => {
test("add new source", () => {
const sourceId = "n1z2v3r";
when.setValue("modal:sources.add.source_id", sourceId);
when.select("modal:sources.add.source_type", "tile_vector");
@@ -88,7 +89,7 @@ describe("modals", () => {
});
});
it("add new pmtiles source", () => {
test("add new pmtiles source", () => {
const sourceId = "pmtilestest";
when.setValue("modal:sources.add.source_id", sourceId);
when.select("modal:sources.add.source_type", "pmtiles_vector");
@@ -106,7 +107,7 @@ describe("modals", () => {
});
});
it("add new raster source", () => {
test("add new raster source", () => {
const sourceId = "rastertest";
when.setValue("modal:sources.add.source_id", sourceId);
when.select("modal:sources.add.source_type", "tile_raster");
@@ -123,7 +124,7 @@ describe("modals", () => {
});
describe("inspect", () => {
it("toggle", () => {
test("toggle", () => {
// There is no assertion in this test
when.setStyle("geojson");
when.select("maputnik-select", "inspect");
@@ -140,7 +141,7 @@ describe("modals", () => {
when.click("field-doc-button-Name");
});
it("should show the spec information", () => {
test("should show the spec information", () => {
then(get.elementsText("spec-field-doc")).shouldInclude(
"name for the style"
);
@@ -154,7 +155,7 @@ describe("modals", () => {
when.wait(200);
});
it("show name specifications", () => {
test("show name specifications", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
name: "foobar",
});
@@ -167,14 +168,14 @@ describe("modals", () => {
when.click("modal:settings.name");
when.wait(200);
});
it("should update owner in local storage", () => {
test("should update owner in local storage", () => {
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
owner: "foobar",
});
});
});
it("sprite url", () => {
test("sprite url", () => {
when.setTextInJsonEditor("\"http://example.com\"");
when.click("modal:settings.name");
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
@@ -182,7 +183,7 @@ describe("modals", () => {
});
});
it("sprite object", () => {
test("sprite object", () => {
when.setTextInJsonEditor(JSON.stringify([{ id: "1", url: "2" }]));
when.click("modal:settings.name");
@@ -191,7 +192,7 @@ describe("modals", () => {
});
});
it("glyphs url", () => {
test("glyphs url", () => {
const glyphsUrl = "http://example.com/{fontstack}/{range}.pbf";
when.setValue("modal:settings.glyphs", glyphsUrl);
when.click("modal:settings.name");
@@ -200,7 +201,7 @@ describe("modals", () => {
});
});
it("maptiler access token", () => {
test("maptiler access token", () => {
const apiKey = "testing123";
when.setValue(
"modal:settings.maputnik:openmaptiles_access_token",
@@ -214,7 +215,7 @@ describe("modals", () => {
});
});
it("thunderforest access token", () => {
test("thunderforest access token", () => {
const apiKey = "testing123";
when.setValue(
"modal:settings.maputnik:thunderforest_access_token",
@@ -226,7 +227,7 @@ describe("modals", () => {
).shouldInclude({ "maputnik:thunderforest_access_token": apiKey });
});
it("stadia access token", () => {
test("stadia access token", () => {
const apiKey = "testing123";
when.setValue(
"modal:settings.maputnik:stadia_access_token",
@@ -238,7 +239,7 @@ describe("modals", () => {
).shouldInclude({ "maputnik:stadia_access_token": apiKey });
});
it("locationiq access token", () => {
test("locationiq access token", () => {
const apiKey = "testing123";
when.setValue(
"modal:settings.maputnik:locationiq_access_token",
@@ -250,14 +251,14 @@ describe("modals", () => {
).shouldInclude({ "maputnik:locationiq_access_token": apiKey });
});
it("style projection mercator", () => {
test("style projection mercator", () => {
when.select("modal:settings.projection", "mercator");
then(
get.styleFromLocalStorage().then((style) => style.projection)
).shouldInclude({ type: "mercator" });
});
it("style projection globe", () => {
test("style projection globe", () => {
when.select("modal:settings.projection", "globe");
then(
get.styleFromLocalStorage().then((style) => style.projection)
@@ -265,7 +266,7 @@ describe("modals", () => {
});
it("style projection vertical-perspective", () => {
test("style projection vertical-perspective", () => {
when.select("modal:settings.projection", "vertical-perspective");
then(
get.styleFromLocalStorage().then((style) => style.projection)
@@ -273,7 +274,7 @@ describe("modals", () => {
});
it("style renderer", () => {
test("style renderer", () => {
cy.on("uncaught:exception", () => false); // this is due to the fact that this is an invalid style for openlayers
when.select("modal:settings.maputnik:renderer", "ol");
then(get.inputValue("modal:settings.maputnik:renderer")).shouldEqual(
@@ -288,7 +289,7 @@ describe("modals", () => {
it("include API key when change renderer", () => {
test("include API key when change renderer", () => {
when.click("modal:settings.close-modal");
when.click("nav:open");
@@ -327,7 +328,7 @@ describe("modals", () => {
when.modal.open();
});
it("shows duplicate id error", () => {
test("shows duplicate id error", () => {
when.setValue("add-layer.layer-id.input", "background");
when.click("add-layer");
then(get.elementByTestId("modal:add-layer")).shouldExist();
@@ -338,7 +339,7 @@ describe("modals", () => {
});
describe("sources", () => {
it("toggle");
test("toggle");
});
describe("global state", () => {
@@ -346,7 +347,7 @@ describe("modals", () => {
when.click("nav:global-state");
});
it("add variable", () => {
test("add variable", () => {
when.wait(100);
when.click("global-state-add-variable");
then(get.styleFromLocalStorage()).shouldDeepNestedInclude({
@@ -355,7 +356,7 @@ describe("modals", () => {
});
it("add multiple variables", () => {
test("add multiple variables", () => {
when.click("global-state-add-variable");
when.click("global-state-add-variable");
when.click("global-state-add-variable");
@@ -365,7 +366,7 @@ describe("modals", () => {
});
});
it("remove variable", () => {
test("remove variable", () => {
when.click("global-state-add-variable");
when.click("global-state-add-variable");
when.click("global-state-add-variable");
@@ -376,7 +377,7 @@ describe("modals", () => {
});
});
it("edit variable key", () => {
test("edit variable key", () => {
when.click("global-state-add-variable");
when.wait(100);
when.setValue("global-state-variable-key:0", "mykey");
@@ -387,7 +388,7 @@ describe("modals", () => {
});
});
it("edit variable value", () => {
test("edit variable value", () => {
when.click("global-state-add-variable");
when.wait(100);
when.setValue("global-state-variable-value:0", "myvalue");
@@ -400,11 +401,11 @@ describe("modals", () => {
});
describe("error panel", () => {
it("not visible when no errors", () => {
test("not visible when no errors", () => {
then(get.element("maputnik-message-panel-error")).shouldNotExist();
});
it("visible on style error", () => {
test("visible on style error", () => {
when.modal.open();
when.modal.fillLayers({
type: "circle",
@@ -415,7 +416,7 @@ describe("modals", () => {
});
describe("Handle localStorage QuotaExceededError", () => {
it("handles quota exceeded error when opening style from URL", () => {
test("handles quota exceeded error when opening style from URL", () => {
// Clear localStorage to start fresh
cy.clearLocalStorage();
+227 -219
View File
@@ -99,7 +99,7 @@
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.3",
"i18next-cli": "^1.53.2",
"i18next-cli": "^1.65.0",
"istanbul": "^0.4.5",
"istanbul-lib-coverage": "^3.2.2",
"postcss": "^8.5.16",
@@ -1205,29 +1205,29 @@
}
},
"node_modules/@inquirer/ansi": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.4.tgz",
"integrity": "sha512-DpcZrQObd7S0R/U3bFdkcT5ebRwbTTC4D3tCc1vsJizmgPLxNJBo+AAFmrZwe8zk30P2QzgzGWZ3Q9uJwWuhIg==",
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.7.tgz",
"integrity": "sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
}
},
"node_modules/@inquirer/checkbox": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.2.tgz",
"integrity": "sha512-PubpMPO2nJgMufkoB3P2wwxNXEMUXnBIKi/ACzDUYfaoPuM7gSTmuxJeMscoLVEsR4qqrCMf5p0SiYGWnVJ8kw==",
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.1.tgz",
"integrity": "sha512-b6xmA/VlTe0ZgDQHDui+Nav470u7u49nRd8/iuhOcQPO9Ch7lGuogydhi2VOmNlZ+zXcM8IcPuNSwQcdJaF/kw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/ansi": "^2.0.4",
"@inquirer/core": "^11.1.7",
"@inquirer/figures": "^2.0.4",
"@inquirer/type": "^4.0.4"
"@inquirer/ansi": "^2.0.7",
"@inquirer/core": "^11.2.1",
"@inquirer/figures": "^2.0.7",
"@inquirer/type": "^4.0.7"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1239,17 +1239,17 @@
}
},
"node_modules/@inquirer/confirm": {
"version": "6.0.10",
"resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.10.tgz",
"integrity": "sha512-tiNyA73pgpQ0FQ7axqtoLUe4GDYjNCDcVsbgcA5anvwg2z6i+suEngLKKJrWKJolT//GFPZHwN30binDIHgSgQ==",
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.1.1.tgz",
"integrity": "sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/core": "^11.1.7",
"@inquirer/type": "^4.0.4"
"@inquirer/core": "^11.2.1",
"@inquirer/type": "^4.0.7"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1261,22 +1261,22 @@
}
},
"node_modules/@inquirer/core": {
"version": "11.1.7",
"resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.7.tgz",
"integrity": "sha512-1BiBNDk9btIwYIzNZpkikIHXWeNzNncJePPqwDyVMhXhD1ebqbpn1mKGctpoqAbzywZfdG0O4tvmsGIcOevAPQ==",
"version": "11.2.1",
"resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.2.1.tgz",
"integrity": "sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/ansi": "^2.0.4",
"@inquirer/figures": "^2.0.4",
"@inquirer/type": "^4.0.4",
"@inquirer/ansi": "^2.0.7",
"@inquirer/figures": "^2.0.7",
"@inquirer/type": "^4.0.7",
"cli-width": "^4.1.0",
"fast-wrap-ansi": "^0.2.0",
"mute-stream": "^3.0.0",
"signal-exit": "^4.1.0"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1301,18 +1301,18 @@
}
},
"node_modules/@inquirer/editor": {
"version": "5.0.10",
"resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.10.tgz",
"integrity": "sha512-VJx4XyaKea7t8hEApTw5dxeIyMtWXre2OiyJcICCRZI4hkoHsMoCnl/KbUnJJExLbH9csLLHMVR144ZhFE1CwA==",
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.2.2.tgz",
"integrity": "sha512-ZRVd/oD+sYsUd5zVm0NflqEzlqfYCyHNsqkHl2oWXEUHs12tCbcSFi+wVFEvD8+LGRaMUsVrE7qeo6lSG/S1Vg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/core": "^11.1.7",
"@inquirer/external-editor": "^2.0.4",
"@inquirer/type": "^4.0.4"
"@inquirer/core": "^11.2.1",
"@inquirer/external-editor": "^3.0.3",
"@inquirer/type": "^4.0.7"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1324,17 +1324,17 @@
}
},
"node_modules/@inquirer/expand": {
"version": "5.0.10",
"resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.10.tgz",
"integrity": "sha512-fC0UHJPXsTRvY2fObiwuQYaAnHrp3aDqfwKUJSdfpgv18QUG054ezGbaRNStk/BKD5IPijeMKWej8VV8O5Q/eQ==",
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.1.tgz",
"integrity": "sha512-YmQpenjbFSHAK3sOd44puHh3V1KXXr+JiNpUztoSQ4drLh2rTVzTap/YtlAVu/5xavifIlBfNEzJ/neZJ1a/1g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/core": "^11.1.7",
"@inquirer/type": "^4.0.4"
"@inquirer/core": "^11.2.1",
"@inquirer/type": "^4.0.7"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1346,9 +1346,9 @@
}
},
"node_modules/@inquirer/external-editor": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-2.0.4.tgz",
"integrity": "sha512-Prenuv9C1PHj2Itx0BcAOVBTonz02Hc2Nd2DbU67PdGUaqn0nPCnV34oDyyoaZHnmfRxkpuhh/u51ThkrO+RdA==",
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.3.tgz",
"integrity": "sha512-6thf5I8q7lZwzGLAxPaaGEREEkZ3nyePPDQ1oyobblxmEE8mqTLguScP7pDjUTAibiyb4hfXl+qjUEJ+di/aNA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1356,7 +1356,7 @@
"iconv-lite": "^0.7.2"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1368,27 +1368,27 @@
}
},
"node_modules/@inquirer/figures": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.4.tgz",
"integrity": "sha512-eLBsjlS7rPS3WEhmOmh1znQ5IsQrxWzxWDxO51e4urv+iVrSnIHbq4zqJIOiyNdYLa+BVjwOtdetcQx1lWPpiQ==",
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.7.tgz",
"integrity": "sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
}
},
"node_modules/@inquirer/input": {
"version": "5.0.10",
"resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.10.tgz",
"integrity": "sha512-nvZ6qEVeX/zVtZ1dY2hTGDQpVGD3R7MYPLODPgKO8Y+RAqxkrP3i/3NwF3fZpLdaMiNuK0z2NaYIx9tPwiSegQ==",
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.2.tgz",
"integrity": "sha512-9K/DDBSQpOyZSkt6sOVP9Vo0TR7atX2kuILsUu0x3wVcVbe97lJwIJKMLdMw25tDYuXl/qp6erT0Xs1rfmcfZg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/core": "^11.1.7",
"@inquirer/type": "^4.0.4"
"@inquirer/core": "^11.2.1",
"@inquirer/type": "^4.0.7"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1400,17 +1400,17 @@
}
},
"node_modules/@inquirer/number": {
"version": "4.0.10",
"resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.10.tgz",
"integrity": "sha512-Ht8OQstxiS3APMGjHV0aYAjRAysidWdwurWEo2i8yI5xbhOBWqizT0+MU1S2GCcuhIBg+3SgWVjEoXgfhY+XaA==",
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.1.1.tgz",
"integrity": "sha512-XF4IXAbPnGPgw0wsbC/i2tPcyfdZgDpUlhsqU0SfT4IRIGWha6Xm9VRgN5yYxJq+jnyXlfXI/nQ3ulfk0iEICA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/core": "^11.1.7",
"@inquirer/type": "^4.0.4"
"@inquirer/core": "^11.2.1",
"@inquirer/type": "^4.0.7"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1422,18 +1422,18 @@
}
},
"node_modules/@inquirer/password": {
"version": "5.0.10",
"resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.10.tgz",
"integrity": "sha512-QbNyvIE8q2GTqKLYSsA8ATG+eETo+m31DSR0+AU7x3d2FhaTWzqQek80dj3JGTo743kQc6mhBR0erMjYw5jQ0A==",
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.1.1.tgz",
"integrity": "sha512-3XBfF7DAsp5qeDsvN5Rd1HmbNokVvEQoUM0QLrRcybC9nX96w3Pbmu7qUsb3IT3J3jBvs2+mTXaKHOUsgHMLzg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/ansi": "^2.0.4",
"@inquirer/core": "^11.1.7",
"@inquirer/type": "^4.0.4"
"@inquirer/ansi": "^2.0.7",
"@inquirer/core": "^11.2.1",
"@inquirer/type": "^4.0.7"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1445,25 +1445,25 @@
}
},
"node_modules/@inquirer/prompts": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.3.2.tgz",
"integrity": "sha512-yFroiSj2iiBFlm59amdTvAcQFvWS6ph5oKESls/uqPBect7rTU2GbjyZO2DqxMGuIwVA8z0P4K6ViPcd/cp+0w==",
"version": "8.5.2",
"resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.5.2.tgz",
"integrity": "sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/checkbox": "^5.1.2",
"@inquirer/confirm": "^6.0.10",
"@inquirer/editor": "^5.0.10",
"@inquirer/expand": "^5.0.10",
"@inquirer/input": "^5.0.10",
"@inquirer/number": "^4.0.10",
"@inquirer/password": "^5.0.10",
"@inquirer/rawlist": "^5.2.6",
"@inquirer/search": "^4.1.6",
"@inquirer/select": "^5.1.2"
"@inquirer/checkbox": "^5.2.1",
"@inquirer/confirm": "^6.1.1",
"@inquirer/editor": "^5.2.2",
"@inquirer/expand": "^5.1.1",
"@inquirer/input": "^5.1.2",
"@inquirer/number": "^4.1.1",
"@inquirer/password": "^5.1.1",
"@inquirer/rawlist": "^5.3.1",
"@inquirer/search": "^4.2.1",
"@inquirer/select": "^5.2.1"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1475,17 +1475,17 @@
}
},
"node_modules/@inquirer/rawlist": {
"version": "5.2.6",
"resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.6.tgz",
"integrity": "sha512-jfw0MLJ5TilNsa9zlJ6nmRM0ZFVZhhTICt4/6CU2Dv1ndY7l3sqqo1gIYZyMMDw0LvE1u1nzJNisfHEhJIxq5w==",
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.1.tgz",
"integrity": "sha512-QqdTqQddL3qPX/PPrjobpsO25NZ4dWXgTLenrR445L2ptLEYE6Z+PD5c5CNDJNx4ugRgELAIpSIJxZaO2jJ2Og==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/core": "^11.1.7",
"@inquirer/type": "^4.0.4"
"@inquirer/core": "^11.2.1",
"@inquirer/type": "^4.0.7"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1497,18 +1497,18 @@
}
},
"node_modules/@inquirer/search": {
"version": "4.1.6",
"resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.6.tgz",
"integrity": "sha512-3/6kTRae98hhDevENScy7cdFEuURnSpM3JbBNg8yfXLw88HgTOl+neUuy/l9W0No5NzGsLVydhBzTIxZP7yChQ==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.2.1.tgz",
"integrity": "sha512-xJj8QWKRSrfKoBIITLZK61dD3zwo0Rz11fgDImku30/Oe81zMdIdGgrLY2h6RkJ+KZ/GhNYIRMKnH/62qBTA5g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/core": "^11.1.7",
"@inquirer/figures": "^2.0.4",
"@inquirer/type": "^4.0.4"
"@inquirer/core": "^11.2.1",
"@inquirer/figures": "^2.0.7",
"@inquirer/type": "^4.0.7"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1520,19 +1520,19 @@
}
},
"node_modules/@inquirer/select": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.2.tgz",
"integrity": "sha512-kTK8YIkHV+f02y7bWCh7E0u2/11lul5WepVTclr3UMBtBr05PgcZNWfMa7FY57ihpQFQH/spLMHTcr0rXy50tA==",
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.1.tgz",
"integrity": "sha512-FlDndEUww8m7BfukO2nJa25vhD+H5jxxCv4oGioKqzyWz3nPHhhw4LKdYRSlXuAx7DsdWia7iyaBPKKS95Evfw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/ansi": "^2.0.4",
"@inquirer/core": "^11.1.7",
"@inquirer/figures": "^2.0.4",
"@inquirer/type": "^4.0.4"
"@inquirer/ansi": "^2.0.7",
"@inquirer/core": "^11.2.1",
"@inquirer/figures": "^2.0.7",
"@inquirer/type": "^4.0.7"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -1544,13 +1544,13 @@
}
},
"node_modules/@inquirer/type": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.4.tgz",
"integrity": "sha512-PamArxO3cFJZoOzspzo6cxVlLeIftyBsZw/S9bKY5DzxqJVZgjoj1oP8d0rskKtp7sZxBycsoer1g6UeJV1BBA==",
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.7.tgz",
"integrity": "sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -2916,15 +2916,15 @@
}
},
"node_modules/@swc/core": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.21.tgz",
"integrity": "sha512-fkk7NJcBscrR3/F8jiqlMptRHP650NxqDnspBMrRe5d8xOoCy9MLL5kOBLFXjFLfMo3KQQHhk+/jUULOMlR1uQ==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.43.tgz",
"integrity": "sha512-1CuKjFkPxIgGdeHVuNbkxmBxkcbdc08u0aiI43pFq6yY1tTVKmXT9hFEooyyKs/sJ3xf1GPHyEwTtk9Xl8dvQw==",
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@swc/counter": "^0.1.3",
"@swc/types": "^0.1.25"
"@swc/types": "^0.1.27"
},
"engines": {
"node": ">=10"
@@ -2934,18 +2934,18 @@
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
"@swc/core-darwin-arm64": "1.15.21",
"@swc/core-darwin-x64": "1.15.21",
"@swc/core-linux-arm-gnueabihf": "1.15.21",
"@swc/core-linux-arm64-gnu": "1.15.21",
"@swc/core-linux-arm64-musl": "1.15.21",
"@swc/core-linux-ppc64-gnu": "1.15.21",
"@swc/core-linux-s390x-gnu": "1.15.21",
"@swc/core-linux-x64-gnu": "1.15.21",
"@swc/core-linux-x64-musl": "1.15.21",
"@swc/core-win32-arm64-msvc": "1.15.21",
"@swc/core-win32-ia32-msvc": "1.15.21",
"@swc/core-win32-x64-msvc": "1.15.21"
"@swc/core-darwin-arm64": "1.15.43",
"@swc/core-darwin-x64": "1.15.43",
"@swc/core-linux-arm-gnueabihf": "1.15.43",
"@swc/core-linux-arm64-gnu": "1.15.43",
"@swc/core-linux-arm64-musl": "1.15.43",
"@swc/core-linux-ppc64-gnu": "1.15.43",
"@swc/core-linux-s390x-gnu": "1.15.43",
"@swc/core-linux-x64-gnu": "1.15.43",
"@swc/core-linux-x64-musl": "1.15.43",
"@swc/core-win32-arm64-msvc": "1.15.43",
"@swc/core-win32-ia32-msvc": "1.15.43",
"@swc/core-win32-x64-msvc": "1.15.43"
},
"peerDependencies": {
"@swc/helpers": ">=0.5.17"
@@ -2957,9 +2957,9 @@
}
},
"node_modules/@swc/core-darwin-arm64": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.21.tgz",
"integrity": "sha512-SA8SFg9dp0qKRH8goWsax6bptFE2EdmPf2YRAQW9WoHGf3XKM1bX0nd5UdwxmC5hXsBUZAYf7xSciCler6/oyA==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.43.tgz",
"integrity": "sha512-v1aVuvXdo/BHxJzco9V2xpHrvwWmhfS8t6gziY5wJxd+Z2h8AeJRnAwPD8itCDaGXVBwJ/CaKfxEzTkG0Va0OA==",
"cpu": [
"arm64"
],
@@ -2974,9 +2974,9 @@
}
},
"node_modules/@swc/core-darwin-x64": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.21.tgz",
"integrity": "sha512-//fOVntgowz9+V90lVsNCtyyrtbHp3jWH6Rch7MXHXbcvbLmbCTmssl5DeedUWLLGiAAW1wksBdqdGYOTjaNLw==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.43.tgz",
"integrity": "sha512-lp3d4Lamc8dt5huYdGLSR+9hLxmfr1jb0l+4XXG2zPqZwYWRN9R0U2qYoTrggiU2RWW0oV9VbWM3kBnqIc2kdQ==",
"cpu": [
"x64"
],
@@ -2991,9 +2991,9 @@
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.21.tgz",
"integrity": "sha512-meNI4Sh6h9h8DvIfEc0l5URabYMSuNvyisLmG6vnoYAS43s8ON3NJR8sDHvdP7NJTrLe0q/x2XCn6yL/BeHcZg==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.43.tgz",
"integrity": "sha512-JWTQQELtsG5GgphDrr/XqqmM2pDN3cZqbMS0Mrg+iTiXL3F74sn/S2IyYE/5u4h2KLkTf9qQ7dXyxsbx7YzkeA==",
"cpu": [
"arm"
],
@@ -3008,13 +3008,16 @@
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.21.tgz",
"integrity": "sha512-QrXlNQnHeXqU2EzLlnsPoWEh8/GtNJLvfMiPsDhk+ht6Xv8+vhvZ5YZ/BokNWSIZiWPKLAqR0M7T92YF5tmD3g==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.43.tgz",
"integrity": "sha512-B4otJRdPWIsmiSBf0uG7Z/+vMWmkufjz5MmYxubwKuZazDW14Zd3symga1N62QR4RT+kEFeHEgsXfZGyn/w0hw==",
"cpu": [
"arm64"
],
"dev": true,
"libc": [
"glibc"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -3025,13 +3028,16 @@
}
},
"node_modules/@swc/core-linux-arm64-musl": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.21.tgz",
"integrity": "sha512-8/yGCMO333ultDaMQivE5CjO6oXDPeeg1IV4sphojPkb0Pv0i6zvcRIkgp60xDB+UxLr6VgHgt+BBgqS959E9g==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.43.tgz",
"integrity": "sha512-6zB6OnpViBxYy4tgY3v2i6AZY9fwkcHZ032UOwtwUuW1d19sdT07qF0kZe6/3UR1tUaK6jjg2rmVcUIBCEYVjQ==",
"cpu": [
"arm64"
],
"dev": true,
"libc": [
"musl"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -3042,13 +3048,16 @@
}
},
"node_modules/@swc/core-linux-ppc64-gnu": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.21.tgz",
"integrity": "sha512-ucW0HzPx0s1dgRvcvuLSPSA/2Kk/VYTv9st8qe1Kc22Gu0Q0rH9+6TcBTmMuNIp0Xs4BPr1uBttmbO1wEGI49Q==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.43.tgz",
"integrity": "sha512-coxE1ZWdB3uSDVNoEtYNrRi/1epvckZx9cTJ8ICUxTMTxGk+yvQ/Twacp3ruZSaMPGCriUjP86C37VhaT6nyRg==",
"cpu": [
"ppc64"
],
"dev": true,
"libc": [
"glibc"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -3059,13 +3068,16 @@
}
},
"node_modules/@swc/core-linux-s390x-gnu": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.21.tgz",
"integrity": "sha512-ulTnOGc5I7YRObE/9NreAhQg94QkiR5qNhhcUZ1iFAYjzg/JGAi1ch+s/Ixe61pMIr8bfVrF0NOaB0f8wjaAfA==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.43.tgz",
"integrity": "sha512-lXfLhs+LpBsD5inuYx+YDH5WsPPBQ95KPUiy8P5wq9ob9xKDZFqwNfU2QW6bGO8NqRO/H9JQomTSt5Yyh+FGfA==",
"cpu": [
"s390x"
],
"dev": true,
"libc": [
"glibc"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -3076,13 +3088,16 @@
}
},
"node_modules/@swc/core-linux-x64-gnu": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.21.tgz",
"integrity": "sha512-D0RokxtM+cPvSqJIKR6uja4hbD+scI9ezo95mBhfSyLUs9wnPPl26sLp1ZPR/EXRdYm3F3S6RUtVi+8QXhT24Q==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.43.tgz",
"integrity": "sha512-07XnKwTmKy8TGOZG3D9fRnLWGynxPjwQnZLVmBFbo6F+7vHYzBIOuwXEhemrChBWb6yDNZsVCcMWCPX6FDD2xg==",
"cpu": [
"x64"
],
"dev": true,
"libc": [
"glibc"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -3093,13 +3108,16 @@
}
},
"node_modules/@swc/core-linux-x64-musl": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.21.tgz",
"integrity": "sha512-nER8u7VeRfmU6fMDzl1NQAbbB/G7O2avmvCOwIul1uGkZ2/acbPH+DCL9h5+0yd/coNcxMBTL6NGepIew+7C2w==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.43.tgz",
"integrity": "sha512-TJc+bsSIaBh+hZvZ5GRtW/K1bw66TJ9vsUwvVIsZdiWxU5ObLwZvfcnZ3UpgVfMnFibRes9uriJrQNBHEEogRQ==",
"cpu": [
"x64"
],
"dev": true,
"libc": [
"musl"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
@@ -3110,9 +3128,9 @@
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.21.tgz",
"integrity": "sha512-+/AgNBnjYugUA8C0Do4YzymgvnGbztv7j8HKSQLvR/DQgZPoXQ2B3PqB2mTtGh/X5DhlJWiqnunN35JUgWcAeQ==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.43.tgz",
"integrity": "sha512-jfd7s2/bUQYkOHLs+LWQNKZdmDa8+sufKLllhpWAhVQ2GDCwsHe3vR/j+OSiItZNtkzFuaawa3+SAKz9y5gYfw==",
"cpu": [
"arm64"
],
@@ -3127,9 +3145,9 @@
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.21.tgz",
"integrity": "sha512-IkSZj8PX/N4HcaFhMQtzmkV8YSnuNoJ0E6OvMwFiOfejPhiKXvl7CdDsn1f4/emYEIDO3fpgZW9DTaCRMDxaDA==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.43.tgz",
"integrity": "sha512-rLAE8JvucqEW1ZGohxPQrQWPBQeJG4+ypKbWfdlU/qmKScvCkxf9/Jxnzki1dkUQCQ7P5Enp13RlvqOlvx/32g==",
"cpu": [
"ia32"
],
@@ -3144,9 +3162,9 @@
}
},
"node_modules/@swc/core-win32-x64-msvc": {
"version": "1.15.21",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.21.tgz",
"integrity": "sha512-zUyWso7OOENB6e1N1hNuNn8vbvLsTdKQ5WKLgt/JcBNfJhKy/6jmBmqI3GXk/MyvQKd5SLvP7A0F36p7TeDqvw==",
"version": "1.15.43",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.43.tgz",
"integrity": "sha512-h8MLDHZcfIukwQWj03rIJZx1I0E81AYj2X7J/nGErG4nz+QAv6G1Z+peotvinL3lqpbo32tLYSMFo32/ySzxKg==",
"cpu": [
"x64"
],
@@ -3168,9 +3186,9 @@
"license": "Apache-2.0"
},
"node_modules/@swc/types": {
"version": "0.1.25",
"resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz",
"integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
"version": "0.1.27",
"resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.27.tgz",
"integrity": "sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -5052,9 +5070,9 @@
}
},
"node_modules/chardet": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz",
"integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==",
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz",
"integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==",
"dev": true,
"license": "MIT"
},
@@ -6894,9 +6912,9 @@
"license": "BSD-3-Clause"
},
"node_modules/fast-wrap-ansi": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.0.tgz",
"integrity": "sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==",
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz",
"integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7989,28 +8007,29 @@
}
},
"node_modules/i18next-cli": {
"version": "1.53.2",
"resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.53.2.tgz",
"integrity": "sha512-7Y4kxP5hMhisqdy6fIxCkKxtJ0rpy0Qern7kxzoZVtID/pFxJdSBHHu6a96iG5Puv725C+/s53XU+j0+4I17FQ==",
"version": "1.65.0",
"resolved": "https://registry.npmjs.org/i18next-cli/-/i18next-cli-1.65.0.tgz",
"integrity": "sha512-sak+2Ry4P7wtl7xMAZg2sWG2vup1lRHFBKA7h5IeEqFUog51QEgeYUhHxd2x85+MvS4BhVOZZs833clnd1WgYA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@croct/json5-parser": "^0.2.2",
"@swc/core": "^1.15.21",
"@swc/core": "^1.15.41",
"chokidar": "^5.0.0",
"commander": "^14.0.3",
"execa": "^9.6.1",
"glob": "^13.0.6",
"i18next-resources-for-ts": "^2.0.2",
"inquirer": "^13.3.2",
"jiti": "^2.6.1",
"i18next": "^26.3.1",
"i18next-resources-for-ts": "^2.1.0",
"inquirer": "^14.0.2",
"jiti": "^2.7.0",
"jsonc-parser": "^3.3.1",
"magic-string": "^0.30.21",
"minimatch": "^10.2.5",
"ora": "^9.3.0",
"react": "^19.2.4",
"react-i18next": "^17.0.2",
"yaml": "^2.8.3"
"ora": "^9.4.0",
"react": "^19.2.7",
"react-i18next": "^17.0.8",
"yaml": "^2.9.0"
},
"bin": {
"i18next-cli": "dist/esm/cli.js"
@@ -8252,9 +8271,9 @@
}
},
"node_modules/i18next-resources-for-ts": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/i18next-resources-for-ts/-/i18next-resources-for-ts-2.0.2.tgz",
"integrity": "sha512-BGPebhvjrvU+pgKNsIzb3cxl6/8LJw1pxNkIlUpnxCC4SXjbIwXeHuNxFnOkTAryRfMqYf81lPjYD2gngDyOfQ==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/i18next-resources-for-ts/-/i18next-resources-for-ts-2.1.0.tgz",
"integrity": "sha512-n5UexwEVt0OoIAhG2MWpSnAVJW1U8mQrQTmXyxc5DMAx+NLhcLZhSMJo/FnUsA5JQ3obTYqTgB7YIuZKWpDgow==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8277,9 +8296,9 @@
}
},
"node_modules/iconv-lite": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
"integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz",
"integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8414,22 +8433,21 @@
"license": "MIT"
},
"node_modules/inquirer": {
"version": "13.3.2",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.3.2.tgz",
"integrity": "sha512-bh/OjBGxNR9qvfQj1n5bxtIF58mbOTp2InN5dKuwUK03dXcDGFsjlDinQRuXMZ4EGiJaFieUWHCAaxH2p7iUBw==",
"version": "14.0.2",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-14.0.2.tgz",
"integrity": "sha512-VsSx1JneSNp3ld1veMTLe+UDcUD8Tw2/jjOthhkX3/IX2q+xHhVELifeb/hsb1fBw31pabEPNUf/xUOyb+KZjA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@inquirer/ansi": "^2.0.4",
"@inquirer/core": "^11.1.7",
"@inquirer/prompts": "^8.3.2",
"@inquirer/type": "^4.0.4",
"@inquirer/ansi": "^2.0.7",
"@inquirer/core": "^11.2.1",
"@inquirer/prompts": "^8.5.2",
"@inquirer/type": "^4.0.7",
"mute-stream": "^3.0.0",
"run-async": "^4.0.6",
"rxjs": "^7.8.2"
"run-async": "^4.0.6"
},
"engines": {
"node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
"node": ">=23.5.0 || ^22.13.0 || ^20.17.0"
},
"peerDependencies": {
"@types/node": ">=18"
@@ -9426,9 +9444,9 @@
}
},
"node_modules/jiti": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
"integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz",
"integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==",
"dev": true,
"license": "MIT",
"bin": {
@@ -11447,9 +11465,9 @@
}
},
"node_modules/ora": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz",
"integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==",
"version": "9.4.1",
"resolved": "https://registry.npmjs.org/ora/-/ora-9.4.1.tgz",
"integrity": "sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11459,7 +11477,7 @@
"is-interactive": "^2.0.0",
"is-unicode-supported": "^2.1.0",
"log-symbols": "^7.0.1",
"stdin-discarder": "^0.3.1",
"stdin-discarder": "^0.3.2",
"string-width": "^8.1.0"
},
"engines": {
@@ -11526,9 +11544,9 @@
}
},
"node_modules/ora/node_modules/string-width": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz",
"integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==",
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz",
"integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13016,16 +13034,6 @@
"queue-microtask": "^1.2.2"
}
},
"node_modules/rxjs": {
"version": "7.8.2",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
"integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.1.0"
}
},
"node_modules/safe-array-concat": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
@@ -13549,9 +13557,9 @@
"license": "MIT"
},
"node_modules/stdin-discarder": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.1.tgz",
"integrity": "sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==",
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz",
"integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -15947,9 +15955,9 @@
"license": "ISC"
},
"node_modules/yaml": {
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
"integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
"dev": true,
"license": "ISC",
"bin": {
+1 -1
View File
@@ -133,7 +133,7 @@
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-react-refresh": "^0.5.3",
"i18next-cli": "^1.53.2",
"i18next-cli": "^1.65.0",
"istanbul": "^0.4.5",
"istanbul-lib-coverage": "^3.2.2",
"postcss": "^8.5.16",
+1 -1
View File
@@ -21,7 +21,7 @@
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src", "cypress/e2e"],
"include": ["src", "cypress/e2e", "e2e/maputnik-cypress-helper.ts"],
"exclude": ["dist"],
"references": [{ "path": "./tsconfig.node.json" }],
// TODO: Remove when issue is resolved https://github.com/cypress-io/cypress/issues/27448
+11
View File
@@ -0,0 +1,11 @@
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
// Only the unit tests that live next to the source are run by Vitest. The
// e2e specs (*.spec.ts) are run by their own runner, and the component
// browser test is run separately.
include: ["src/**/*.test.{ts,tsx}"],
exclude: ["**/node_modules/**", "e2e/**", "**/*.browser.test.tsx"],
},
});