diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 58ba018a..8e650791 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -18,7 +18,7 @@ jobs:
- run: npm ci
- run: npm run lint
- - run: npm run types
+ # - run: npm run types
- run: npm run build
- run: npm test
diff --git a/.gitignore b/.gitignore
index be706d28..bf7f464f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,14 @@
node_modules/
babel-preset/
-jsx-runtime/
dist/
__test/
+jsx-runtime/
+!src/jsx-runtime/
+
+plugins/
+!src/plugins/
+!tests/plugins/
+
.DS_Store
*.tgz
diff --git a/.size-limit.json b/.size-limit.json
index c164bede..f9a6225d 100644
--- a/.size-limit.json
+++ b/.size-limit.json
@@ -3,13 +3,13 @@
"name": "jsx",
"path": "jsx-runtime/index.js",
"import": "{ jsx }",
- "limit": "346 B"
+ "limit": "302 B"
},
{
"name": "Fragment",
"path": "jsx-runtime/index.js",
"import": "{ Fragment }",
- "limit": "81 B"
+ "limit": "80 B"
},
{
"name": "appendChildren",
@@ -21,6 +21,6 @@
"name": "core",
"path": "jsx-runtime/index.js",
"import": "{ jsx, Fragment }",
- "limit": "365 B"
+ "limit": "318 B"
}
]
diff --git a/eslint.config.js b/eslint.config.js
index 6a0616b5..6a677e8b 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -6,6 +6,7 @@ export default ts.config(
ignores: [
'babel-preset/',
'jsx-runtime/',
+ 'plugins/'
],
},
js.configs.recommended,
diff --git a/index.d.ts b/index.d.ts
index a4dded09..48e8a907 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -1,6 +1,6 @@
///
///
-import type { Properties, Property } from 'csstype';
+import type { Property } from 'csstype';
export interface RefObject {
readonly current: T
@@ -99,11 +99,6 @@ export type UIEventHandler = EventHandler
export type WebGLContextEventHandler = EventHandler
export type WheelEventHandler = EventHandler
-export interface CSSProperties extends Properties {
- cssText?: string | null
- [key: `--${string}`]: number | string
-}
-
export type ControlsList = 'nodownload' | 'nofullscreen' | 'noremoteplayback'
export interface AriaAttributes {
@@ -531,7 +526,7 @@ declare global {
* @see https://developer.mozilla.org/en-US/docs/Glossary/Enumerated
*/
spellcheck?: 'true' | 'false'
- style?: string | CSSProperties
+ style?: string | {}
tabIndex?: number | `${number}`
title?: string
translate?: 'yes' | 'no'
@@ -599,7 +594,9 @@ declare global {
writingsuggestions?: boolean | '' | 'true' | 'false'
}
- export interface HTMLAttributes extends AriaAttributes, Attributes {
+ export interface OverrideAttributes extends AriaAttributes, Attributes { }
+
+ export interface HTMLAttributes extends OverrideAttributes {
_?: string
$?: Record>
ref?: Ref
diff --git a/jest.config.js b/jest.config.js
index 984f5fce..fbcddb58 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -1,12 +1,15 @@
/** @type {import('jest').Config} */
const config = {
cache: false,
- rootDir: 'tests',
+ rootDir: '.',
transform: {
'\\.tsx?$': 'babel-jest',
},
setupFilesAfterEnv: [
- '/utils/jest-setup.ts'
+ '/tests/utils/jest-setup.ts'
+ ],
+ modulePathIgnorePatterns: [
+ '/src/',
],
testEnvironment: 'jest-environment-jsdom',
extensionsToTreatAsEsm: ['.tsx', '.ts'],
diff --git a/package-lock.json b/package-lock.json
index 724d0c1e..8576d912 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "jsx-dom-runtime",
- "version": "0.71.0",
+ "version": "0.71.0-dev.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "jsx-dom-runtime",
- "version": "0.71.0",
+ "version": "0.71.0-dev.3",
"license": "MIT",
"dependencies": {
"csstype": "^3.1.3"
@@ -16,8 +16,8 @@
"@babel/helper-validator-identifier": "^7.25.9",
"@babel/preset-typescript": "^7.26.0",
"@babel/types": "^7.26.0",
- "@eslint/js": "^9.15.0",
- "@evilmartians/lefthook": "^1.8.4",
+ "@eslint/js": "^9.16.0",
+ "@evilmartians/lefthook": "^1.8.5",
"@jest/globals": "^29.7.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-node-resolve": "^15.3.0",
@@ -30,10 +30,10 @@
"babel-plugin-transform-lhs-constants": "^1.2.0",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
- "rollup": "^4.27.4",
+ "rollup": "^4.28.0",
"size-limit": "^11.1.6",
"typescript": "^5.7.2",
- "typescript-eslint": "^8.16.0"
+ "typescript-eslint": "^8.17.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0",
@@ -1266,9 +1266,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.15.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz",
- "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==",
+ "version": "9.16.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz",
+ "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1301,9 +1301,9 @@
}
},
"node_modules/@evilmartians/lefthook": {
- "version": "1.8.4",
- "resolved": "https://registry.npmjs.org/@evilmartians/lefthook/-/lefthook-1.8.4.tgz",
- "integrity": "sha512-n5aODynRZKSYmDajD8UCd5yy5ste2lJUTSGmv+D+4OP0UUWZqF4qJ/r7+2Ifo6K6WdsknVhVsPsEl4LugTbrug==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/@evilmartians/lefthook/-/lefthook-1.8.5.tgz",
+ "integrity": "sha512-TuAL6W+bj2DqYxqm5JnFi3s7RnjpU/IUxxHFZWUHNytZ+HDQfkceogo+1DlSBFXFva2V21CSaDkeWJJHOmmECw==",
"cpu": [
"x64",
"arm64",
@@ -1943,9 +1943,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz",
- "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz",
+ "integrity": "sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==",
"cpu": [
"arm"
],
@@ -1957,9 +1957,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz",
- "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz",
+ "integrity": "sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==",
"cpu": [
"arm64"
],
@@ -1971,9 +1971,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz",
- "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz",
+ "integrity": "sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==",
"cpu": [
"arm64"
],
@@ -1985,9 +1985,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz",
- "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz",
+ "integrity": "sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==",
"cpu": [
"x64"
],
@@ -1999,9 +1999,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz",
- "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz",
+ "integrity": "sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==",
"cpu": [
"arm64"
],
@@ -2013,9 +2013,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz",
- "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz",
+ "integrity": "sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==",
"cpu": [
"x64"
],
@@ -2027,9 +2027,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz",
- "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz",
+ "integrity": "sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==",
"cpu": [
"arm"
],
@@ -2041,9 +2041,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz",
- "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz",
+ "integrity": "sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==",
"cpu": [
"arm"
],
@@ -2055,9 +2055,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz",
- "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz",
+ "integrity": "sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==",
"cpu": [
"arm64"
],
@@ -2069,9 +2069,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz",
- "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz",
+ "integrity": "sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==",
"cpu": [
"arm64"
],
@@ -2083,9 +2083,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz",
- "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz",
+ "integrity": "sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==",
"cpu": [
"ppc64"
],
@@ -2097,9 +2097,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz",
- "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz",
+ "integrity": "sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==",
"cpu": [
"riscv64"
],
@@ -2111,9 +2111,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz",
- "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz",
+ "integrity": "sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==",
"cpu": [
"s390x"
],
@@ -2125,9 +2125,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz",
- "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz",
+ "integrity": "sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==",
"cpu": [
"x64"
],
@@ -2139,9 +2139,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz",
- "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz",
+ "integrity": "sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==",
"cpu": [
"x64"
],
@@ -2153,9 +2153,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz",
- "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz",
+ "integrity": "sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==",
"cpu": [
"arm64"
],
@@ -2167,9 +2167,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz",
- "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz",
+ "integrity": "sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==",
"cpu": [
"ia32"
],
@@ -2181,9 +2181,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz",
- "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz",
+ "integrity": "sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==",
"cpu": [
"x64"
],
@@ -2508,9 +2508,9 @@
"peer": true
},
"node_modules/@types/node": {
- "version": "22.10.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.0.tgz",
- "integrity": "sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==",
+ "version": "22.10.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz",
+ "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2556,17 +2556,17 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz",
- "integrity": "sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==",
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.17.0.tgz",
+ "integrity": "sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.16.0",
- "@typescript-eslint/type-utils": "8.16.0",
- "@typescript-eslint/utils": "8.16.0",
- "@typescript-eslint/visitor-keys": "8.16.0",
+ "@typescript-eslint/scope-manager": "8.17.0",
+ "@typescript-eslint/type-utils": "8.17.0",
+ "@typescript-eslint/utils": "8.17.0",
+ "@typescript-eslint/visitor-keys": "8.17.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
@@ -2590,16 +2590,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.16.0.tgz",
- "integrity": "sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==",
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.17.0.tgz",
+ "integrity": "sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.16.0",
- "@typescript-eslint/types": "8.16.0",
- "@typescript-eslint/typescript-estree": "8.16.0",
- "@typescript-eslint/visitor-keys": "8.16.0",
+ "@typescript-eslint/scope-manager": "8.17.0",
+ "@typescript-eslint/types": "8.17.0",
+ "@typescript-eslint/typescript-estree": "8.17.0",
+ "@typescript-eslint/visitor-keys": "8.17.0",
"debug": "^4.3.4"
},
"engines": {
@@ -2619,14 +2619,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz",
- "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==",
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.17.0.tgz",
+ "integrity": "sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.16.0",
- "@typescript-eslint/visitor-keys": "8.16.0"
+ "@typescript-eslint/types": "8.17.0",
+ "@typescript-eslint/visitor-keys": "8.17.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2637,14 +2637,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz",
- "integrity": "sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==",
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.17.0.tgz",
+ "integrity": "sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "8.16.0",
- "@typescript-eslint/utils": "8.16.0",
+ "@typescript-eslint/typescript-estree": "8.17.0",
+ "@typescript-eslint/utils": "8.17.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
@@ -2665,9 +2665,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz",
- "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==",
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.17.0.tgz",
+ "integrity": "sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2679,14 +2679,14 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz",
- "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==",
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.17.0.tgz",
+ "integrity": "sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "8.16.0",
- "@typescript-eslint/visitor-keys": "8.16.0",
+ "@typescript-eslint/types": "8.17.0",
+ "@typescript-eslint/visitor-keys": "8.17.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -2747,16 +2747,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.16.0.tgz",
- "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==",
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.17.0.tgz",
+ "integrity": "sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "8.16.0",
- "@typescript-eslint/types": "8.16.0",
- "@typescript-eslint/typescript-estree": "8.16.0"
+ "@typescript-eslint/scope-manager": "8.17.0",
+ "@typescript-eslint/types": "8.17.0",
+ "@typescript-eslint/typescript-estree": "8.17.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2775,13 +2775,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz",
- "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==",
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.17.0.tgz",
+ "integrity": "sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.16.0",
+ "@typescript-eslint/types": "8.17.0",
"eslint-visitor-keys": "^4.2.0"
},
"engines": {
@@ -3197,9 +3197,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001684",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz",
- "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==",
+ "version": "1.0.30001685",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001685.tgz",
+ "integrity": "sha512-e/kJN1EMyHQzgcMEEgoo+YTCO1NGCmIYHk5Qk8jT6AazWemS5QFKJ5ShCJlH3GZrNIdZofcNCEwZqbMjjKzmnA==",
"dev": true,
"funding": [
{
@@ -3575,9 +3575,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.65",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz",
- "integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==",
+ "version": "1.5.68",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.68.tgz",
+ "integrity": "sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==",
"dev": true,
"license": "ISC"
},
@@ -3711,9 +3711,9 @@
}
},
"node_modules/eslint": {
- "version": "9.15.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz",
- "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==",
+ "version": "9.16.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.16.0.tgz",
+ "integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -3723,7 +3723,7 @@
"@eslint/config-array": "^0.19.0",
"@eslint/core": "^0.9.0",
"@eslint/eslintrc": "^3.2.0",
- "@eslint/js": "9.15.0",
+ "@eslint/js": "9.16.0",
"@eslint/plugin-kit": "^0.2.3",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
@@ -5621,9 +5621,9 @@
}
},
"node_modules/jiti": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.0.tgz",
- "integrity": "sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.1.tgz",
+ "integrity": "sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==",
"dev": true,
"license": "MIT",
"bin": {
@@ -6015,9 +6015,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.8.tgz",
- "integrity": "sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==",
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz",
+ "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==",
"dev": true,
"funding": [
{
@@ -6088,9 +6088,9 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.13",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz",
- "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==",
+ "version": "2.2.16",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
+ "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
"dev": true,
"license": "MIT"
},
@@ -6374,13 +6374,16 @@
}
},
"node_modules/psl": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.13.0.tgz",
- "integrity": "sha512-BFwmFXiJoFqlUpZ5Qssolv15DMyc84gTBds1BjsV1BfXEo1UyyD7GsmN67n7J77uRhoSNW1AXtXKPLcBFQn9Aw==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
+ "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
"dev": true,
"license": "MIT",
"dependencies": {
"punycode": "^2.3.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/lupomontero"
}
},
"node_modules/punycode": {
@@ -6539,9 +6542,9 @@
}
},
"node_modules/resolve.exports": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
- "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
+ "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6560,9 +6563,9 @@
}
},
"node_modules/rollup": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz",
- "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==",
+ "version": "4.28.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.0.tgz",
+ "integrity": "sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6576,24 +6579,24 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.27.4",
- "@rollup/rollup-android-arm64": "4.27.4",
- "@rollup/rollup-darwin-arm64": "4.27.4",
- "@rollup/rollup-darwin-x64": "4.27.4",
- "@rollup/rollup-freebsd-arm64": "4.27.4",
- "@rollup/rollup-freebsd-x64": "4.27.4",
- "@rollup/rollup-linux-arm-gnueabihf": "4.27.4",
- "@rollup/rollup-linux-arm-musleabihf": "4.27.4",
- "@rollup/rollup-linux-arm64-gnu": "4.27.4",
- "@rollup/rollup-linux-arm64-musl": "4.27.4",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4",
- "@rollup/rollup-linux-riscv64-gnu": "4.27.4",
- "@rollup/rollup-linux-s390x-gnu": "4.27.4",
- "@rollup/rollup-linux-x64-gnu": "4.27.4",
- "@rollup/rollup-linux-x64-musl": "4.27.4",
- "@rollup/rollup-win32-arm64-msvc": "4.27.4",
- "@rollup/rollup-win32-ia32-msvc": "4.27.4",
- "@rollup/rollup-win32-x64-msvc": "4.27.4",
+ "@rollup/rollup-android-arm-eabi": "4.28.0",
+ "@rollup/rollup-android-arm64": "4.28.0",
+ "@rollup/rollup-darwin-arm64": "4.28.0",
+ "@rollup/rollup-darwin-x64": "4.28.0",
+ "@rollup/rollup-freebsd-arm64": "4.28.0",
+ "@rollup/rollup-freebsd-x64": "4.28.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.28.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.28.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.28.0",
+ "@rollup/rollup-linux-arm64-musl": "4.28.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.28.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.28.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.28.0",
+ "@rollup/rollup-linux-x64-gnu": "4.28.0",
+ "@rollup/rollup-linux-x64-musl": "4.28.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.28.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.28.0",
+ "@rollup/rollup-win32-x64-msvc": "4.28.0",
"fsevents": "~2.3.2"
}
},
@@ -6971,9 +6974,9 @@
}
},
"node_modules/ts-api-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.2.tgz",
- "integrity": "sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
+ "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7035,15 +7038,15 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.16.0.tgz",
- "integrity": "sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==",
+ "version": "8.17.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.17.0.tgz",
+ "integrity": "sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.16.0",
- "@typescript-eslint/parser": "8.16.0",
- "@typescript-eslint/utils": "8.16.0"
+ "@typescript-eslint/eslint-plugin": "8.17.0",
+ "@typescript-eslint/parser": "8.17.0",
+ "@typescript-eslint/utils": "8.17.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
diff --git a/package.json b/package.json
index bc35ddf8..1c15f79a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "jsx-dom-runtime",
- "version": "0.71.0",
+ "version": "0.71.0-dev.3",
"description": "A tiny in 500 bytes library to JSX syntax templates for DOM. Support HTML, SVG and MathML tags",
"type": "module",
"main": "jsx-runtime/index.cjs",
@@ -17,6 +17,7 @@
"import": "./jsx-runtime/index.js",
"require": "./jsx-runtime/index.cjs"
},
+ "./plugins/*": "./plugins/*",
"./babel-preset": "./babel-preset/index.cjs",
"./package.json": "./package.json"
},
@@ -26,7 +27,7 @@
"test": "node --experimental-vm-modules node_modules/.bin/jest",
"build": "NODE_NO_WARNINGS=1 rollup -c",
"size": "size-limit",
- "types": "tsc --project tests/tsconfig.json"
+ "types": "tsc --project ./tests/tsconfig.json"
},
"dependencies": {
"csstype": "^3.1.3"
@@ -41,8 +42,8 @@
"@babel/helper-validator-identifier": "^7.25.9",
"@babel/preset-typescript": "^7.26.0",
"@babel/types": "^7.26.0",
- "@eslint/js": "^9.15.0",
- "@evilmartians/lefthook": "^1.8.4",
+ "@eslint/js": "^9.16.0",
+ "@evilmartians/lefthook": "^1.8.5",
"@jest/globals": "^29.7.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-node-resolve": "^15.3.0",
@@ -55,14 +56,15 @@
"babel-plugin-transform-lhs-constants": "^1.2.0",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
- "rollup": "^4.27.4",
+ "rollup": "^4.28.0",
"size-limit": "^11.1.6",
"typescript": "^5.7.2",
- "typescript-eslint": "^8.16.0"
+ "typescript-eslint": "^8.17.0"
},
"files": [
"babel-preset",
"jsx-runtime",
+ "plugins",
"index.d.ts"
],
"keywords": [
diff --git a/rollup.build.js b/rollup.build.js
new file mode 100644
index 00000000..a97703dd
--- /dev/null
+++ b/rollup.build.js
@@ -0,0 +1,38 @@
+import { existsSync } from 'node:fs';
+import { rm, mkdir, readdir, copyFile } from 'node:fs/promises';
+
+export const emptyDir = async (path) => {
+ if (existsSync(path)) await rm(path, { recursive: true });
+ await mkdir(path);
+};
+
+export const buildPlugins = async (plugins) => {
+ const files = await readdir('./src/plugins');
+
+ return Promise.all(
+ files.map(async (i) => {
+ await mkdir(`./plugins/${i}`);
+ await copyFile(
+ `./src/plugins/${i}/index.d.ts`,
+ `./plugins/${i}/index.d.ts`,
+ );
+
+ return {
+ input: `./src/plugins/${i}/index.ts`,
+ output: [
+ {
+ file: `./plugins/${i}/index.js`,
+ format: 'es',
+ },
+ {
+ file: `./plugins/${i}/index.cjs`,
+ format: 'cjs',
+ esModule: false,
+ },
+ ],
+ external: ['jsx-dom-runtime'],
+ plugins,
+ };
+ }),
+ );
+};
diff --git a/rollup.config.js b/rollup.config.js
index e97afe52..6f72fb72 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -1,23 +1,9 @@
-import { existsSync } from 'node:fs';
-import { rm, mkdir, writeFile } from 'node:fs/promises';
+import { writeFile } from 'node:fs/promises';
import { babel } from '@rollup/plugin-babel';
import { nodeResolve } from '@rollup/plugin-node-resolve';
-import pkg from './package.json' with { type: 'json' };
-
-const emptyDir = async (path) => {
- if (existsSync(path)) await rm(path, { recursive: true });
- await mkdir(path);
-};
-
-await Promise.all([
- emptyDir('./babel-preset'),
- emptyDir('./jsx-runtime'),
-]);
-await writeFile(
- './jsx-runtime/index.d.ts',
- 'export * from "../index"',
-);
+import pkg from './package.json' with { type: 'json' };
+import { emptyDir, buildPlugins } from './rollup.build.js';
const extensions = ['.ts'];
@@ -38,7 +24,22 @@ const plugins = [
}),
];
+await Promise.all([
+ emptyDir('./babel-preset'),
+ emptyDir('./jsx-runtime'),
+ emptyDir('./plugins'),
+]);
+
+const [list] = await Promise.all([
+ buildPlugins(plugins),
+ writeFile(
+ './jsx-runtime/index.d.ts',
+ 'export * from "../index"',
+ ),
+]);
+
export default [
+ ...list,
{
input: 'src/babel/index.ts',
output: [
diff --git a/src/index.ts b/src/index.ts
index 67c6266b..7bac9a8e 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,4 +1,4 @@
-export * from './jsxRuntime';
+export * from './jsx-runtime';
export * from './lib/useRef';
export * from './lib/Template';
export * from './lib/useText';
diff --git a/src/jsxRuntime.ts b/src/jsx-runtime/index.ts
similarity index 83%
rename from src/jsxRuntime.ts
rename to src/jsx-runtime/index.ts
index fc1317c8..a5fc3319 100644
--- a/src/jsxRuntime.ts
+++ b/src/jsx-runtime/index.ts
@@ -13,20 +13,6 @@ const internalKeys = new Set([
]);
const extensions = new Map([
- ['style', (node, value, key) => {
- if (typeof value == 'string') {
- node.setAttribute(key, value);
- } else {
- // reuse `key` variable
- for (key in value) {
- if (key.startsWith('-')) {
- node.style.setProperty(key, value[key]);
- } else {
- node.style[key] = value[key];
- }
- }
- }
- }],
['$', (node, value, key) => {
for (key in value) {
node.addEventListener(key, value[key]);
diff --git a/src/lib/Template.ts b/src/lib/Template.ts
index dd30f767..4d1fb912 100644
--- a/src/lib/Template.ts
+++ b/src/lib/Template.ts
@@ -1,4 +1,4 @@
-import { jsx } from '../jsxRuntime';
+import { jsx } from '../jsx-runtime';
export const parseFromString = (html: string) =>
/*#__PURE__*/ jsx('template', {
diff --git a/src/plugins/dataset/index.d.ts b/src/plugins/dataset/index.d.ts
new file mode 100644
index 00000000..f41abc29
--- /dev/null
+++ b/src/plugins/dataset/index.d.ts
@@ -0,0 +1,9 @@
+export declare function initDataset(): void
+
+declare global {
+ namespace JSX {
+ interface OverrideAttributes {
+ dataset?: DOMStringMap
+ }
+ }
+}
diff --git a/src/plugins/dataset/index.ts b/src/plugins/dataset/index.ts
new file mode 100644
index 00000000..84a5a651
--- /dev/null
+++ b/src/plugins/dataset/index.ts
@@ -0,0 +1,14 @@
+import { extensions } from 'jsx-dom-runtime';
+
+export const initDataset = () => /*#__PURE__*/
+ extensions.set('dataset', (
+ node: HTMLElement | SVGAElement | MathMLElement,
+ value: DOMStringMap,
+ key: string,
+ ) => {
+ for (key in value) {
+ if (value[key] != null) {
+ node.dataset[key] = value[key];
+ }
+ }
+ });
diff --git a/src/plugins/html/index.d.ts b/src/plugins/html/index.d.ts
new file mode 100644
index 00000000..f0827678
--- /dev/null
+++ b/src/plugins/html/index.d.ts
@@ -0,0 +1,10 @@
+export declare function initHtml(): void
+
+declare global {
+ namespace JSX {
+ interface OverrideAttributes {
+ innerHTML?: string
+ textContent?: string
+ }
+ }
+}
diff --git a/src/plugins/html/index.ts b/src/plugins/html/index.ts
new file mode 100644
index 00000000..32d1247e
--- /dev/null
+++ b/src/plugins/html/index.ts
@@ -0,0 +1,6 @@
+import { properties } from 'jsx-dom-runtime';
+
+export const initHtml = () => /*#__PURE__*/
+ properties
+ .add('innerHTML')
+ .add('textContent');
diff --git a/src/plugins/media/index.d.ts b/src/plugins/media/index.d.ts
new file mode 100644
index 00000000..f0017297
--- /dev/null
+++ b/src/plugins/media/index.d.ts
@@ -0,0 +1,15 @@
+export declare function initMedia(): void
+
+declare global {
+ namespace JSX {
+ interface HTMLAudioElementAttributes {
+ volume?: number
+ muted?: boolean
+ }
+
+ interface HTMLVideoElementAttributes {
+ volume?: number
+ muted?: boolean
+ }
+ }
+}
diff --git a/src/plugins/media/index.ts b/src/plugins/media/index.ts
new file mode 100644
index 00000000..06148838
--- /dev/null
+++ b/src/plugins/media/index.ts
@@ -0,0 +1,6 @@
+import { properties } from 'jsx-dom-runtime';
+
+export const initMedia = () => /*#__PURE__*/
+ properties
+ .add('volume')
+ .add('muted');
diff --git a/src/plugins/style/index.d.ts b/src/plugins/style/index.d.ts
new file mode 100644
index 00000000..22b8a278
--- /dev/null
+++ b/src/plugins/style/index.d.ts
@@ -0,0 +1,16 @@
+import type { Properties } from 'csstype';
+
+export declare function initStyle(): void
+
+export interface CSSProperties extends Properties {
+ cssText?: string | null
+ [key: `--${string}`]: number | string
+}
+
+declare global {
+ namespace JSX {
+ interface OverrideAttributes {
+ style?: string | CSSProperties
+ }
+ }
+}
diff --git a/src/plugins/style/index.ts b/src/plugins/style/index.ts
new file mode 100644
index 00000000..7710facb
--- /dev/null
+++ b/src/plugins/style/index.ts
@@ -0,0 +1,20 @@
+import { extensions } from 'jsx-dom-runtime';
+
+export const initStyle = () => /*#__PURE__*/
+ extensions.set('style', (
+ node: HTMLElement | SVGAElement | MathMLElement,
+ value: object,
+ key: string,
+ ) => {
+ if (typeof value == 'string') {
+ node.setAttribute(key, value);
+ } else {
+ for (key in value) {
+ if (key.startsWith('-')) {
+ node.style.setProperty(key, value[key]);
+ } else {
+ node.style[key] = value[key];
+ }
+ }
+ }
+ });
diff --git a/tests/lib/Extend.spec.tsx b/tests/lib/extensions.spec.tsx
similarity index 97%
rename from tests/lib/Extend.spec.tsx
rename to tests/lib/extensions.spec.tsx
index 7cdfa4a9..49c14988 100644
--- a/tests/lib/Extend.spec.tsx
+++ b/tests/lib/extensions.spec.tsx
@@ -1,6 +1,6 @@
import { extensions } from 'jsx-dom-runtime';
-describe('Extend', () => {
+describe('extensions', () => {
afterEach(() => {
extensions.clear();
});
diff --git a/tests/lib/properties.spec.tsx b/tests/lib/properties.spec.tsx
index b0ec883b..4a71ba71 100644
--- a/tests/lib/properties.spec.tsx
+++ b/tests/lib/properties.spec.tsx
@@ -3,13 +3,6 @@ import { properties } from 'jsx-dom-runtime';
/* eslint-disable @typescript-eslint/no-namespace */
declare global {
namespace JSX {
- // it should add types for all JSX elements
- interface Attributes {
- textContent?: string;
- innerHTML?: string;
- }
-
- // it should add types only for Audio element
interface HTMLAudioElementAttributes {
volume?: number;
muted?: boolean;
@@ -18,30 +11,6 @@ declare global {
}
describe('properties', () => {
- it('should add support of `textContent` property', () => {
- expect().toHaveAttribute('textcontent', 'hello');
- expect().toHaveTextContent('');
-
- properties.add('textContent');
-
- expect().not.toHaveAttribute('textcontent');
- expect().toHaveTextContent('hello');
-
- properties.delete('textContent');
- });
-
- it('should add html to component', () => {
- expect().toHaveAttribute('innerhtml', 'text
');
- expect().toHaveInnerHTML('');
-
- properties.add('innerHTML');
-
- expect().not.toHaveAttribute('innerhtml');
- expect().toHaveInnerHTML('text
');
-
- properties.delete('innerHTML');
- });
-
it('should add support of `volume` property', () => {
expect().toHaveAttribute('volume', '0.9');
expect().toHaveProperty('volume', 1);
diff --git a/tests/plugins/dataset.spec.tsx b/tests/plugins/dataset.spec.tsx
new file mode 100644
index 00000000..70fe66ba
--- /dev/null
+++ b/tests/plugins/dataset.spec.tsx
@@ -0,0 +1,22 @@
+import { initDataset } from 'jsx-dom-runtime/plugins/dataset';
+
+initDataset();
+
+describe('plugins/dataset', () => {
+ it('should add support `dataset` property', () => {
+ expect().toHaveAttribute('data-hello', 'world');
+ });
+
+ it('should add data-a,b,c attributes', () => {
+ // @ts-expect-error Test
+ expect().toHaveOuterHTML(
+ ''
+ );
+ });
+
+ it('should transform', async () => {
+ await expect('').toBeTransform(
+ 'import{jsx as _jsx}from"jsx-dom-runtime";/*#__PURE__*/_jsx("div",{dataset:{a:"a",b:"b",c:"c"}});'
+ );
+ });
+});
diff --git a/tests/plugins/html.spec.tsx b/tests/plugins/html.spec.tsx
new file mode 100644
index 00000000..ba4b1141
--- /dev/null
+++ b/tests/plugins/html.spec.tsx
@@ -0,0 +1,21 @@
+import { initHtml } from 'jsx-dom-runtime/plugins/html';
+
+initHtml();
+
+describe('plugins/html', () => {
+ it('should add support `textContent` property', () => {
+ expect().not.toHaveAttribute('textcontent');
+ expect().toHaveInnerHTML('context');
+ });
+
+ it('should add support `innerHTML` property', () => {
+ expect().not.toHaveAttribute('innerhtml');
+ expect().toHaveInnerHTML('html
');
+ });
+
+ it('should transform', async () => {
+ await expect('').toBeTransform(
+ 'import{jsx as _jsx}from"jsx-dom-runtime";/*#__PURE__*/_jsx("div",{textContent:"context"});'
+ );
+ });
+});
diff --git a/tests/plugins/media.spec.tsx b/tests/plugins/media.spec.tsx
new file mode 100644
index 00000000..66a919ed
--- /dev/null
+++ b/tests/plugins/media.spec.tsx
@@ -0,0 +1,28 @@
+import { initMedia } from 'jsx-dom-runtime/plugins/media';
+
+initMedia();
+
+describe('plugins/media', () => {
+ it('should add support `volume` property', () => {
+ expect().not.toHaveAttribute('volume');
+ expect().toHaveProperty('volume', 0.9);
+
+ expect().not.toHaveAttribute('volume');
+ expect().toHaveProperty('volume', 0.9);
+
+ });
+
+ it('should add support `muted` property', () => {
+ expect().not.toHaveAttribute('muted');
+ expect().toHaveProperty('muted', true);
+
+ expect().not.toHaveAttribute('muted');
+ expect().toHaveProperty('muted', true);
+ });
+
+ it('should transform', async () => {
+ await expect('').toBeTransform(
+ 'import{jsx as _jsx}from"jsx-dom-runtime";/*#__PURE__*/_jsx("video",{muted:true});'
+ );
+ });
+});
diff --git a/tests/plugins/style-object-widout-plugin.spec.tsx b/tests/plugins/style-object-widout-plugin.spec.tsx
new file mode 100644
index 00000000..59b992e3
--- /dev/null
+++ b/tests/plugins/style-object-widout-plugin.spec.tsx
@@ -0,0 +1,6 @@
+describe('plugins/style', () => {
+ it('should stringify object value is plugin is not apply', () => {
+ expect().toHaveCssText('');
+ expect().toHaveAttribute('style', '[object Object]');
+ });
+});
diff --git a/tests/attr-style.spec.tsx b/tests/plugins/style.spec.tsx
similarity index 89%
rename from tests/attr-style.spec.tsx
rename to tests/plugins/style.spec.tsx
index 4c868a4c..f3fc2e47 100644
--- a/tests/attr-style.spec.tsx
+++ b/tests/plugins/style.spec.tsx
@@ -1,4 +1,8 @@
-describe('Style attribute', () => {
+import { initStyle } from 'jsx-dom-runtime/plugins/style';
+
+initStyle();
+
+describe('plugins/style', () => {
it('should add style as a string', () => {
expect().toHaveCssText(
'color: red; padding: 10px;',
diff --git a/tests/tsconfig.json b/tests/tsconfig.json
index 3aa9087f..dc8d4021 100644
--- a/tests/tsconfig.json
+++ b/tests/tsconfig.json
@@ -16,8 +16,8 @@
"DOM"
],
"paths": {
- "jsx-dom-runtime": [".."],
- "jsx-dom-runtime/jsx-runtime": [".."],
+ "jsx-dom-runtime": ["../jsx-runtime"],
+ "jsx-dom-runtime/*": ["../*"],
}
},
"include": [
diff --git a/tests/utils/jest-setup.ts b/tests/utils/jest-setup.ts
index 0a79abe7..dc8aa774 100644
--- a/tests/utils/jest-setup.ts
+++ b/tests/utils/jest-setup.ts
@@ -1,13 +1,18 @@
import '@testing-library/jest-dom';
import { diffStringsUnified } from 'jest-diff';
+import { jest } from '@jest/globals';
import { t } from './t';
+import * as jsxRuntime from '../../jsx-runtime';
beforeEach(() => {
document.head.innerHTML = '';
document.body.innerHTML = '';
});
+jest.unstable_mockModule('jsx-dom-runtime', () => jsxRuntime);
+jest.unstable_mockModule('jsx-dom-runtime/jsx-runtime', () => jsxRuntime);
+
expect.extend({
toHaveOuterHTML(node: HTMLElement, html: string) {
const val = node.outerHTML;
diff --git a/tsconfig.json b/tsconfig.json
index c71fef1e..90c828eb 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -15,6 +15,10 @@
"ES2023",
"DOM"
],
+ "paths": {
+ "jsx-dom-runtime": ["."],
+ "jsx-dom-runtime/*": ["./*"],
+ }
},
"include": [
"./tests/**/*.ts",