refactor(splitjs): convert tests from karma to vitest

This commit is contained in:
Elian Doran
2026-04-04 13:13:07 +03:00
parent 55e8694990
commit 3294d0b93b
6 changed files with 191 additions and 531 deletions

View File

@@ -1,51 +0,0 @@
module.exports = config => {
config.set({
customLaunchers: {
// latest firefox, chrome, safari
sl_firefox_latest: {
base: 'SauceLabs',
browserName: 'firefox',
platform: 'Windows 10',
version: 'latest',
},
sl_chrome_latest: {
base: 'SauceLabs',
browserName: 'chrome',
platform: 'Windows 10',
version: 'latest',
},
sl_safari: {
base: 'SauceLabs',
browserName: 'safari',
platform: 'macOS 10.15',
version: 'latest',
},
// latest edge
sl_edge: {
base: 'SauceLabs',
browserName: 'MicrosoftEdge',
platform: 'Windows 10',
version: 'latest',
},
// ie 11
sl_ie_11: {
base: 'SauceLabs',
browserName: 'internet explorer',
platform: 'Windows 10',
version: 'latest',
},
// ie 10
sl_ie_10: {
base: 'SauceLabs',
browserName: 'internet explorer',
platform: 'Windows 7',
version: '10.0',
},
},
frameworks: ['jasmine'],
browsers: ['FirefoxHeadless', 'ChromeHeadless'],
singleRun: true,
files: ['dist/split.js', 'test/split.spec.js'],
})
}

View File

@@ -16,12 +16,10 @@
"license": "MIT",
"homepage": "https://split.js.org/",
"scripts": {
"test": "pnpm build && karma start",
"test": "vitest run",
"prepublish": "rollup -c",
"build": "rollup -c && npm run size",
"watch": "rollup -cw",
"size": "echo \"gzip size: $(gzip-size --raw $npm_package_minified_main) bytes\"",
"saucelabs": "yarn run test --browsers sl_firefox_latest,sl_chrome_latest,sl_safari,sl_edge,sl_ie_11,sl_ie_10"
"build": "rollup -c",
"watch": "rollup -cw"
},
"files": [
"index.d.ts",
@@ -40,9 +38,7 @@
},
"devDependencies": {
"@rollup/plugin-buble": "1.0.3",
"karma": "6.4.4",
"karma-chrome-launcher": "3.2.0",
"karma-firefox-launcher": "2.1.3",
"karma-jasmine": "5.1.0"
"happy-dom": "20.8.9",
"vitest": "4.1.2"
}
}

View File

@@ -1,190 +0,0 @@
/* eslint-env jasmine */
/* global Split */
/* eslint-disable no-var, func-names, prefer-arrow-callback, object-shorthand, prefer-template */
function calcParts(expr) {
var re = /calc\(([\d]*\.?[\d]*?)%\s?-\s?([\d]+)px\)/
var m = re.exec(expr)
return {
percentage: parseFloat(m[1]),
pixels: parseInt(m[2], 10),
}
}
describe('Split', function() {
beforeEach(function() {
document.body.style.width = '800px'
document.body.style.height = '600px'
this.a = document.createElement('div')
this.b = document.createElement('div')
this.c = document.createElement('div')
this.a.id = 'a'
this.b.id = 'b'
this.c.id = 'c'
document.body.appendChild(this.a)
document.body.appendChild(this.b)
document.body.appendChild(this.c)
})
afterEach(function() {
document.body.removeChild(this.a)
document.body.removeChild(this.b)
document.body.removeChild(this.c)
})
it('splits in two when given two elements', function() {
Split(['#a', '#b'])
expect(this.a.style.width).toContain('calc(50% - 5px)')
expect(this.b.style.width).toContain('calc(50% - 5px)')
})
it('splits in three when given three elements', function() {
Split(['#a', '#b', '#c'])
expect(calcParts(this.a.style.width).percentage).toBeCloseTo(33.33)
expect(calcParts(this.b.style.width).percentage).toBeCloseTo(33.33)
expect(calcParts(this.c.style.width).percentage).toBeCloseTo(33.33)
expect(calcParts(this.a.style.width).pixels).toBe(5)
expect(calcParts(this.b.style.width).pixels).toBe(10)
expect(calcParts(this.c.style.width).pixels).toBe(5)
})
it('splits vertically when direction is vertical', function() {
Split(['#a', '#b'], {
direction: 'vertical',
})
expect(this.a.style.height).toContain('calc(50% - 5px)')
expect(this.b.style.height).toContain('calc(50% - 5px)')
})
it('splits in percentages when given sizes', function() {
Split(['#a', '#b'], {
sizes: [25, 75],
})
expect(this.a.style.width).toContain('calc(25% - 5px)')
expect(this.b.style.width).toContain('calc(75% - 5px)')
})
it('splits in percentages when given sizes', function() {
Split(['#a', '#b'], {
sizes: [25, 75],
})
expect(this.a.style.width).toContain('calc(25% - 5px)')
expect(this.b.style.width).toContain('calc(75% - 5px)')
})
it('accounts for gutter size', function() {
Split(['#a', '#b'], {
gutterSize: 20,
})
expect(this.a.style.width).toContain('calc(50% - 10px)')
expect(this.b.style.width).toContain('calc(50% - 10px)')
})
it('accounts for gutter size with more than two elements', function() {
Split(['#a', '#b', '#c'], {
gutterSize: 20,
})
expect(calcParts(this.a.style.width).percentage).toBeCloseTo(33.33)
expect(calcParts(this.b.style.width).percentage).toBeCloseTo(33.33)
expect(calcParts(this.c.style.width).percentage).toBeCloseTo(33.33)
expect(calcParts(this.a.style.width).pixels).toBe(10)
expect(calcParts(this.b.style.width).pixels).toBe(20)
expect(calcParts(this.c.style.width).pixels).toBe(10)
})
it('accounts for gutter size when direction is vertical', function() {
Split(['#a', '#b'], {
direction: 'vertical',
gutterSize: 20,
})
expect(this.a.style.height).toContain('calc(50% - 10px)')
expect(this.b.style.height).toContain('calc(50% - 10px)')
})
it('accounts for gutter size with more than two elements when direction is vertical', function() {
Split(['#a', '#b', '#c'], {
direction: 'vertical',
gutterSize: 20,
})
expect(calcParts(this.a.style.height).percentage).toBeCloseTo(33.33)
expect(calcParts(this.b.style.height).percentage).toBeCloseTo(33.33)
expect(calcParts(this.c.style.height).percentage).toBeCloseTo(33.33)
expect(calcParts(this.a.style.height).pixels).toBe(10)
expect(calcParts(this.b.style.height).pixels).toBe(20)
expect(calcParts(this.c.style.height).pixels).toBe(10)
})
it('set size directly when given css values', function() {
Split(['#a', '#b'], {
sizes: ['150px', '640px'],
})
expect(this.a.style.width).toBe('150px')
expect(this.b.style.width).toBe('640px')
})
it('adjusts sizes using setSizes', function() {
var split = Split(['#a', '#b'])
split.setSizes([70, 30])
expect(this.a.style.width).toContain('calc(70% - 5px)')
expect(this.b.style.width).toContain('calc(30% - 5px)')
})
it('collapse splits', function() {
var split = Split(['#a', '#b'])
split.collapse(0)
expect(this.a.getBoundingClientRect().width).toBeCloseTo(100, 0)
expect(this.b.getBoundingClientRect().width).toBeCloseTo(800 - 100 - 10, 0)
split.collapse(1)
expect(this.a.getBoundingClientRect().width).toBeCloseTo(800 - 100 - 10, 0)
expect(this.b.getBoundingClientRect().width).toBeCloseTo(100, 0)
})
it('returns sizes', function() {
var split = Split(['#a', '#b'])
var sizes = split.getSizes()
expect(sizes).toEqual([50, 50])
split.setSizes([70, 30])
sizes = split.getSizes()
expect(sizes).toEqual([70, 30])
})
it('sets element styles using the elementStyle function', function() {
Split(['#a', '#b'], {
elementStyle: function(dimension, size) {
return {
width: size + '%',
}
},
})
expect(this.a.style.width).toBe('50%')
expect(this.b.style.width).toBe('50%')
})
})

View File

@@ -0,0 +1,171 @@
import { describe, it, expect, beforeEach, afterEach } from "vitest";
import Split from "../src/split.js";
function calcParts(expr: string) {
const re = /calc\(([\d]*\.?[\d]*?)%\s?-\s?([\d]+)px\)/;
const m = re.exec(expr);
if (!m) throw new Error(`Could not parse calc expression: ${expr}`);
return {
percentage: parseFloat(m[1]),
pixels: parseInt(m[2], 10),
};
}
describe("Split", () => {
let a: HTMLDivElement;
let b: HTMLDivElement;
let c: HTMLDivElement;
beforeEach(() => {
document.body.style.width = "800px";
document.body.style.height = "600px";
a = document.createElement("div");
b = document.createElement("div");
c = document.createElement("div");
a.id = "a";
b.id = "b";
c.id = "c";
document.body.appendChild(a);
document.body.appendChild(b);
document.body.appendChild(c);
});
afterEach(() => {
document.body.removeChild(a);
document.body.removeChild(b);
document.body.removeChild(c);
});
it("splits in two when given two elements", () => {
Split(["#a", "#b"]);
expect(a.style.width).toContain("calc(50% - 5px)");
expect(b.style.width).toContain("calc(50% - 5px)");
});
it("splits in three when given three elements", () => {
Split(["#a", "#b", "#c"]);
expect(calcParts(a.style.width).percentage).toBeCloseTo(33.33);
expect(calcParts(b.style.width).percentage).toBeCloseTo(33.33);
expect(calcParts(c.style.width).percentage).toBeCloseTo(33.33);
expect(calcParts(a.style.width).pixels).toBe(5);
expect(calcParts(b.style.width).pixels).toBe(10);
expect(calcParts(c.style.width).pixels).toBe(5);
});
it("splits vertically when direction is vertical", () => {
Split(["#a", "#b"], {
direction: "vertical",
});
expect(a.style.height).toContain("calc(50% - 5px)");
expect(b.style.height).toContain("calc(50% - 5px)");
});
it("splits in percentages when given sizes", () => {
Split(["#a", "#b"], {
sizes: [25, 75],
});
expect(a.style.width).toContain("calc(25% - 5px)");
expect(b.style.width).toContain("calc(75% - 5px)");
});
it("accounts for gutter size", () => {
Split(["#a", "#b"], {
gutterSize: 20,
});
expect(a.style.width).toContain("calc(50% - 10px)");
expect(b.style.width).toContain("calc(50% - 10px)");
});
it("accounts for gutter size with more than two elements", () => {
Split(["#a", "#b", "#c"], {
gutterSize: 20,
});
expect(calcParts(a.style.width).percentage).toBeCloseTo(33.33);
expect(calcParts(b.style.width).percentage).toBeCloseTo(33.33);
expect(calcParts(c.style.width).percentage).toBeCloseTo(33.33);
expect(calcParts(a.style.width).pixels).toBe(10);
expect(calcParts(b.style.width).pixels).toBe(20);
expect(calcParts(c.style.width).pixels).toBe(10);
});
it("accounts for gutter size when direction is vertical", () => {
Split(["#a", "#b"], {
direction: "vertical",
gutterSize: 20,
});
expect(a.style.height).toContain("calc(50% - 10px)");
expect(b.style.height).toContain("calc(50% - 10px)");
});
it("accounts for gutter size with more than two elements when direction is vertical", () => {
Split(["#a", "#b", "#c"], {
direction: "vertical",
gutterSize: 20,
});
expect(calcParts(a.style.height).percentage).toBeCloseTo(33.33);
expect(calcParts(b.style.height).percentage).toBeCloseTo(33.33);
expect(calcParts(c.style.height).percentage).toBeCloseTo(33.33);
expect(calcParts(a.style.height).pixels).toBe(10);
expect(calcParts(b.style.height).pixels).toBe(20);
expect(calcParts(c.style.height).pixels).toBe(10);
});
it("set size directly when given css values", () => {
Split(["#a", "#b"], {
sizes: ["150px", "640px"],
});
expect(a.style.width).toBe("150px");
expect(b.style.width).toBe("640px");
});
it("adjusts sizes using setSizes", () => {
const split = Split(["#a", "#b"]);
split.setSizes([70, 30]);
expect(a.style.width).toContain("calc(70% - 5px)");
expect(b.style.width).toContain("calc(30% - 5px)");
});
it("returns sizes", () => {
const split = Split(["#a", "#b"]);
let sizes = split.getSizes();
expect(sizes).toEqual([50, 50]);
split.setSizes([70, 30]);
sizes = split.getSizes();
expect(sizes).toEqual([70, 30]);
});
it("sets element styles using the elementStyle function", () => {
Split(["#a", "#b"], {
elementStyle: (_dimension, size) => {
return {
width: size + "%",
};
},
});
expect(a.style.width).toBe("50%");
expect(b.style.width).toBe("50%");
});
});

View File

@@ -0,0 +1,8 @@
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
environment: "happy-dom",
include: ["test/**/*.spec.ts"],
},
});

288
pnpm-lock.yaml generated
View File

@@ -1555,18 +1555,12 @@ importers:
'@rollup/plugin-buble':
specifier: 1.0.3
version: 1.0.3(rollup@4.60.1)
karma:
specifier: 6.4.4
version: 6.4.4(bufferutil@4.0.9)(utf-8-validate@6.0.5)
karma-chrome-launcher:
specifier: 3.2.0
version: 3.2.0
karma-firefox-launcher:
specifier: 2.1.3
version: 2.1.3
karma-jasmine:
specifier: 5.1.0
version: 5.1.0(karma@6.4.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))
happy-dom:
specifier: 20.8.9
version: 20.8.9(bufferutil@4.0.9)(utf-8-validate@6.0.5)
vitest:
specifier: 4.1.2
version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(@vitest/browser-webdriverio@4.1.2)(@vitest/ui@4.1.2)(happy-dom@20.8.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(msw@2.7.5(@types/node@24.12.0)(typescript@6.0.2))(vite@8.0.3(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(less@4.1.3)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.3))
packages/turndown-plugin-gfm:
devDependencies:
@@ -2201,10 +2195,6 @@ packages:
'@codemirror/view@6.40.0':
resolution: {integrity: sha512-WA0zdU7xfF10+5I3HhUUq3kqOx3KjqmtQ9lqZjfK7jtYk4G72YW9rezcSywpaUMCWOMlq+6E0pO1IWg1TNIhtg==}
'@colors/colors@1.5.0':
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
'@cortex-js/compute-engine@0.30.2':
resolution: {integrity: sha512-Zx+iisk9WWdbxjm8EYsneIBszvjfUs7BHNwf1jBtSINIgfWGpHrTTq9vW0J59iGCFt6bOFxbmWyxNMRSmksHMA==}
engines: {node: '>=21.7.3', npm: '>=10.5.0'}
@@ -5765,9 +5755,6 @@ packages:
'@types/cookiejar@2.1.5':
resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==}
'@types/cors@2.8.19':
resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==}
'@types/d3-array@3.2.1':
resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==}
@@ -7501,10 +7488,6 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
base64id@2.0.0:
resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
engines: {node: ^4.5.0 || >= 5.9}
base64url@3.0.1:
resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==}
engines: {node: '>=6.0.0'}
@@ -8136,10 +8119,6 @@ packages:
resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==}
engines: {node: '>=0.8'}
connect@3.7.0:
resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==}
engines: {node: '>= 0.10.0'}
consola@3.4.2:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
@@ -8391,9 +8370,6 @@ packages:
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
custom-event@1.0.1:
resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==}
cytoscape-cose-bilkent@4.1.0:
resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
peerDependencies:
@@ -8588,10 +8564,6 @@ packages:
resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
engines: {node: '>= 0.4'}
date-format@4.0.14:
resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==}
engines: {node: '>=4.0'}
dayjs-plugin-utc@0.1.2:
resolution: {integrity: sha512-ExERH5o3oo6jFOdkvMP3gytTCQ9Ksi5PtylclJWghr7k7m3o2U5QrwtdiJkOxLOH4ghr0EKhpqGefzGz1VvVJg==}
@@ -8779,9 +8751,6 @@ packages:
dezalgo@1.0.4:
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
di@0.0.1:
resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==}
diff@8.0.3:
resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
engines: {node: '>=0.3.1'}
@@ -8808,9 +8777,6 @@ packages:
dom-helpers@5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
dom-serialize@2.2.1:
resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==}
dom-serializer@1.4.1:
resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
@@ -9006,10 +8972,6 @@ packages:
resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
engines: {node: '>=10.0.0'}
engine.io@6.6.4:
resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==}
engines: {node: '>=10.2.0'}
enhanced-resolve@5.18.3:
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'}
@@ -9018,10 +8980,6 @@ packages:
resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==}
engines: {node: '>=10.13.0'}
ent@2.2.2:
resolution: {integrity: sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==}
engines: {node: '>= 0.4'}
entities@2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
@@ -9523,10 +9481,6 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
finalhandler@1.1.2:
resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
engines: {node: '>= 0.8'}
finalhandler@1.3.1:
resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
engines: {node: '>= 0.8'}
@@ -10739,9 +10693,6 @@ packages:
resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines: {node: '>= 0.4'}
jasmine-core@4.6.1:
resolution: {integrity: sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==}
jest-worker@27.5.1:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
@@ -10934,23 +10885,6 @@ packages:
resolution: {integrity: sha512-4+5mNNf4vZDSwPhKprKwz3330iisPrb08JyMgbsdFrimBCKNHecua/WBwvVg3n7vwx0C1ARjfhwIpbrbd9n5wg==}
engines: {node: '>=12'}
karma-chrome-launcher@3.2.0:
resolution: {integrity: sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==}
karma-firefox-launcher@2.1.3:
resolution: {integrity: sha512-LMM2bseebLbYjODBOVt7TCPP9OI2vZIXCavIXhkO9m+10Uj5l7u/SKoeRmYx8FYHTVGZSpk6peX+3BMHC1WwNw==}
karma-jasmine@5.1.0:
resolution: {integrity: sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==}
engines: {node: '>=12'}
peerDependencies:
karma: ^6.0.0
karma@6.4.4:
resolution: {integrity: sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==}
engines: {node: '>= 10'}
hasBin: true
katex@0.16.44:
resolution: {integrity: sha512-EkxoDTk8ufHqHlf9QxGwcxeLkWRR3iOuYfRpfORgYfqc8s13bgb+YtRY59NK5ZpRaCwq1kqA6a5lpX8C/eLphQ==}
hasBin: true
@@ -11274,10 +11208,6 @@ packages:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
log4js@6.9.1:
resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==}
engines: {node: '>=8.0'}
loglevel-plugin-prefix@0.8.4:
resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==}
@@ -12202,10 +12132,6 @@ packages:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines: {node: '>=14.0.0'}
on-finished@2.3.0:
resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
engines: {node: '>= 0.8'}
on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
@@ -13053,9 +12979,6 @@ packages:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines: {node: '>=6'}
punycode@1.4.1:
resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -13075,10 +12998,6 @@ packages:
resolution: {integrity: sha512-tsSGN1x3h569ZSU1u6diwhltLyfUWDp3YbFHedapTmpBl0B3P6U3+Qptg7xu+v+1io1EwhdPyyRHYbEw0KN2FA==}
engines: {node: '>=20'}
qjobs@1.2.0:
resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==}
engines: {node: '>=0.9'}
qs@6.15.0:
resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==}
engines: {node: '>=0.6'}
@@ -14029,9 +13948,6 @@ packages:
smob@1.5.0:
resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==}
socket.io-adapter@2.5.5:
resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==}
socket.io-client@4.7.0:
resolution: {integrity: sha512-7Q8CeDrhuZzg4QLXl3tXlk5yb086oxYzehAVZRLiGCzCmtDneiHz1qHyyWcxhTgxXiokVpWQXoG/u60HoXSQew==}
engines: {node: '>=10.0.0'}
@@ -14040,10 +13956,6 @@ packages:
resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==}
engines: {node: '>=10.0.0'}
socket.io@4.8.1:
resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==}
engines: {node: '>=10.2.0'}
sockjs@0.3.24:
resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==}
@@ -14211,10 +14123,6 @@ packages:
engines: {node: '>= 0.10.0'}
hasBin: true
streamroller@3.1.5:
resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==}
engines: {node: '>=8.0'}
streamsearch@1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
@@ -14892,10 +14800,6 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
ua-parser-js@0.7.41:
resolution: {integrity: sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg==}
hasBin: true
uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
@@ -15362,10 +15266,6 @@ packages:
jsdom:
optional: true
void-elements@2.0.1:
resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==}
engines: {node: '>=0.10.0'}
void-elements@3.1.0:
resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
engines: {node: '>=0.10.0'}
@@ -15603,11 +15503,6 @@ packages:
engines: {node: '>= 8'}
hasBin: true
which@3.0.1:
resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
hasBin: true
which@4.0.0:
resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
engines: {node: ^16.13.0 || >=18.0.0}
@@ -17433,8 +17328,6 @@ snapshots:
style-mod: 4.1.2
w3c-keyname: 2.2.8
'@colors/colors@1.5.0': {}
'@cortex-js/compute-engine@0.30.2':
dependencies:
complex-esm: 2.1.1-esm1
@@ -21181,10 +21074,6 @@ snapshots:
'@types/cookiejar@2.1.5': {}
'@types/cors@2.8.19':
dependencies:
'@types/node': 24.12.0
'@types/d3-array@3.2.1': {}
'@types/d3-axis@3.0.6':
@@ -24046,8 +23935,6 @@ snapshots:
base64-js@1.5.1: {}
base64id@2.0.0: {}
base64url@3.0.1: {}
baseline-browser-mapping@2.10.7: {}
@@ -24873,15 +24760,6 @@ snapshots:
connect-history-api-fallback@2.0.0: {}
connect@3.7.0:
dependencies:
debug: 2.6.9
finalhandler: 1.1.2
parseurl: 1.3.3
utils-merge: 1.0.1
transitivePeerDependencies:
- supports-color
consola@3.4.2: {}
content-disposition@0.5.4:
@@ -25173,8 +25051,6 @@ snapshots:
csstype@3.2.3: {}
custom-event@1.0.1: {}
cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1):
dependencies:
cose-base: 1.0.3
@@ -25405,8 +25281,6 @@ snapshots:
es-errors: 1.3.0
is-data-view: 1.0.2
date-format@4.0.14: {}
dayjs-plugin-utc@0.1.2: {}
dayjs@1.11.20: {}
@@ -25553,8 +25427,6 @@ snapshots:
asap: 2.0.6
wrappy: 1.0.2
di@0.0.1: {}
diff@8.0.3: {}
diff@8.0.4: {}
@@ -25581,13 +25453,6 @@ snapshots:
'@babel/runtime': 7.29.2
csstype: 3.2.3
dom-serialize@2.2.1:
dependencies:
custom-event: 1.0.1
ent: 2.2.2
extend: 3.0.2
void-elements: 2.0.1
dom-serializer@1.4.1:
dependencies:
domelementtype: 2.3.0
@@ -25867,22 +25732,6 @@ snapshots:
engine.io-parser@5.2.3: {}
engine.io@6.6.4(bufferutil@4.0.9)(utf-8-validate@6.0.5):
dependencies:
'@types/cors': 2.8.19
'@types/node': 24.12.0
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.7.2
cors: 2.8.5
debug: 4.3.7
engine.io-parser: 5.2.3
ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
enhanced-resolve@5.18.3:
dependencies:
graceful-fs: 4.2.11
@@ -25893,13 +25742,6 @@ snapshots:
graceful-fs: 4.2.11
tapable: 2.3.0
ent@2.2.2:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
punycode: 1.4.1
safe-regex-test: 1.1.0
entities@2.2.0: {}
entities@4.5.0: {}
@@ -26705,18 +26547,6 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
finalhandler@1.1.2:
dependencies:
debug: 2.6.9
encodeurl: 1.0.2
escape-html: 1.0.3
on-finished: 2.3.0
parseurl: 1.3.3
statuses: 1.5.0
unpipe: 1.0.0
transitivePeerDependencies:
- supports-color
finalhandler@1.3.1:
dependencies:
debug: 2.6.9
@@ -28056,8 +27886,6 @@ snapshots:
has-symbols: 1.1.0
set-function-name: 2.0.2
jasmine-core@4.6.1: {}
jest-worker@27.5.1:
dependencies:
'@types/node': 24.12.0
@@ -28291,52 +28119,6 @@ snapshots:
dependencies:
lodash-es: 4.18.1
karma-chrome-launcher@3.2.0:
dependencies:
which: 1.3.1
karma-firefox-launcher@2.1.3:
dependencies:
is-wsl: 2.2.0
which: 3.0.1
karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.0.9)(utf-8-validate@6.0.5)):
dependencies:
jasmine-core: 4.6.1
karma: 6.4.4(bufferutil@4.0.9)(utf-8-validate@6.0.5)
karma@6.4.4(bufferutil@4.0.9)(utf-8-validate@6.0.5):
dependencies:
'@colors/colors': 1.5.0
body-parser: 1.20.3
braces: 3.0.3
chokidar: 3.6.0
connect: 3.7.0
di: 0.0.1
dom-serialize: 2.2.1
glob: 7.2.3
graceful-fs: 4.2.11
http-proxy: 1.18.1
isbinaryfile: 4.0.10
lodash: 4.18.1
log4js: 6.9.1
mime: 2.6.0
minimatch: 3.1.5
mkdirp: 0.5.6
qjobs: 1.2.0
range-parser: 1.2.1
rimraf: 3.0.2
socket.io: 4.8.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
source-map: 0.6.1
tmp: 0.2.5
ua-parser-js: 0.7.41
yargs: 16.2.0
transitivePeerDependencies:
- bufferutil
- debug
- supports-color
- utf-8-validate
katex@0.16.44:
dependencies:
commander: 8.3.0
@@ -28655,16 +28437,6 @@ snapshots:
strip-ansi: 7.1.2
wrap-ansi: 9.0.2
log4js@6.9.1:
dependencies:
date-format: 4.0.14
debug: 4.4.3(supports-color@8.1.1)
flatted: 3.4.2
rfdc: 1.4.1
streamroller: 3.1.5
transitivePeerDependencies:
- supports-color
loglevel-plugin-prefix@0.8.4: {}
loglevel@1.9.2: {}
@@ -29940,10 +29712,6 @@ snapshots:
on-exit-leak-free@2.1.2: {}
on-finished@2.3.0:
dependencies:
ee-first: 1.1.1
on-finished@2.4.1:
dependencies:
ee-first: 1.1.1
@@ -30830,8 +30598,6 @@ snapshots:
punycode.js@2.3.1: {}
punycode@1.4.1: {}
punycode@2.3.1: {}
pupa@3.1.0:
@@ -30851,8 +30617,6 @@ snapshots:
dependencies:
hookified: 1.15.0
qjobs@1.2.0: {}
qs@6.15.0:
dependencies:
side-channel: 1.1.0
@@ -32013,15 +31777,6 @@ snapshots:
smob@1.5.0: {}
socket.io-adapter@2.5.5(bufferutil@4.0.9)(utf-8-validate@6.0.5):
dependencies:
debug: 4.3.7
ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
socket.io-client@4.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5):
dependencies:
'@socket.io/component-emitter': 3.1.2
@@ -32040,20 +31795,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
socket.io@4.8.1(bufferutil@4.0.9)(utf-8-validate@6.0.5):
dependencies:
accepts: 1.3.8
base64id: 2.0.0
cors: 2.8.5
debug: 4.3.7
engine.io: 6.6.4(bufferutil@4.0.9)(utf-8-validate@6.0.5)
socket.io-adapter: 2.5.5(bufferutil@4.0.9)(utf-8-validate@6.0.5)
socket.io-parser: 4.2.6
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
sockjs@0.3.24:
dependencies:
faye-websocket: 0.11.4
@@ -32231,14 +31972,6 @@ snapshots:
commander: 2.20.3
limiter: 1.1.5
streamroller@3.1.5:
dependencies:
date-format: 4.0.14
debug: 4.4.3(supports-color@8.1.1)
fs-extra: 8.1.0
transitivePeerDependencies:
- supports-color
streamsearch@1.1.0: {}
streamx@2.23.0:
@@ -33089,8 +32822,6 @@ snapshots:
typescript@6.0.2: {}
ua-parser-js@0.7.41: {}
uc.micro@2.1.0: {}
ufo@1.6.1: {}
@@ -33530,8 +33261,6 @@ snapshots:
transitivePeerDependencies:
- msw
void-elements@2.0.1: {}
void-elements@3.1.0: {}
vscode-jsonrpc@8.2.0: {}
@@ -33923,10 +33652,6 @@ snapshots:
dependencies:
isexe: 2.0.0
which@3.0.1:
dependencies:
isexe: 2.0.0
which@4.0.0:
dependencies:
isexe: 3.1.5
@@ -34143,6 +33868,7 @@ snapshots:
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 20.2.9
optional: true
yargs@17.0.1:
dependencies: