From 674898c2230e394788b95024fc218851fbb4e321 Mon Sep 17 00:00:00 2001 From: "P.Conrad" Date: Sun, 4 Jan 2026 14:12:42 +0000 Subject: [PATCH 01/10] knip) adding --- knip.json | 21 + package-lock.json | 825 ++++++++++++++++++--- package.json | 6 +- packages/computed/src/computed.ts | 2 +- packages/observable/src/observableArray.ts | 2 +- packages/utils.jsx/src/JsxObserver.ts | 2 +- packages/utils/src/options.ts | 2 +- 7 files changed, 766 insertions(+), 94 deletions(-) create mode 100644 knip.json diff --git a/knip.json b/knip.json new file mode 100644 index 00000000..38865cc3 --- /dev/null +++ b/knip.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://unpkg.com/knip@5/schema.json", + "ignoreExportsUsedInFile": { + "interface": true, + "type": true, + "class": true, + "variable": true + }, + "tags": [ + "-lintignore" + ], + "ignoreDependencies": ["@types/mocha", "chai", "electron", "esbuild", "fs-extra", "karma", "karma-[.]*", "mocha", "nyc", "prettier", "sinon", "lerna"], + "workspaces": { + "packages/*": { + "entry": "src/index.ts", + "project": "src/*.ts", + "ignore": ["/helpers/**"] + } + }, + "ignoreWorkspaces": ["builds/**", "docs/**", "tko.io/**", "tools/**"] +} diff --git a/package-lock.json b/package-lock.json index 381f4ff4..042ce27c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@types/jasmine": "^1.3.7", "@types/jquery": "^3.5.32", "@types/mocha": "^10.0.10", + "@types/node": "^25.0.3", "chai": "^4.5.0", "electron": "^33.2.1", "esbuild": "^0.27.0", @@ -32,6 +33,7 @@ "karma-mocha": "^2.0.1", "karma-sauce-launcher": "^4.3.6", "karma-sinon": "^1.0.5", + "knip": "^5.79.0", "lerna": "^9.0.3", "mocha": "^11.0.1", "nyc": "^17.1.0", @@ -870,9 +872,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2071,6 +2073,44 @@ "@tybys/wasm-util": "^0.9.0" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@npmcli/agent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", @@ -3203,6 +3243,317 @@ "@octokit/openapi-types": "^24.2.0" } }, + "node_modules/@oxc-resolver/binding-android-arm-eabi": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.16.2.tgz", + "integrity": "sha512-lVJbvydLQIDZHKUb6Zs9Rq80QVTQ9xdCQE30eC9/cjg4wsMoEOg65QZPymUAIVJotpUAWJD0XYcwE7ugfxx5kQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@oxc-resolver/binding-android-arm64": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.16.2.tgz", + "integrity": "sha512-fEk+g/g2rJ6LnBVPqeLcx+/alWZ/Db1UlXG+ZVivip0NdrnOzRL48PAmnxTMGOrLwsH1UDJkwY3wOjrrQltCqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@oxc-resolver/binding-darwin-arm64": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.16.2.tgz", + "integrity": "sha512-Pkbp1qi7kdUX6k3Fk1PvAg6p7ruwaWKg1AhOlDgrg2vLXjtv9ZHo7IAQN6kLj0W771dPJZWqNxoqTPacp2oYWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxc-resolver/binding-darwin-x64": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.16.2.tgz", + "integrity": "sha512-FYCGcU1iSoPkADGLfQbuj0HWzS+0ItjDCt9PKtu2Hzy6T0dxO4Y1enKeCOxCweOlmLEkSxUlW5UPT4wvT3LnAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxc-resolver/binding-freebsd-x64": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.16.2.tgz", + "integrity": "sha512-1zHCoK6fMcBjE54P2EG/z70rTjcRxvyKfvk4E/QVrWLxNahuGDFZIxoEoo4kGnnEcmPj41F0c2PkrQbqlpja5g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@oxc-resolver/binding-linux-arm-gnueabihf": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.16.2.tgz", + "integrity": "sha512-+ucLYz8EO5FDp6kZ4o1uDmhoP+M98ysqiUW4hI3NmfiOJQWLrAzQjqaTdPfIOzlCXBU9IHp5Cgxu6wPjVb8dbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-arm-musleabihf": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.16.2.tgz", + "integrity": "sha512-qq+TpNXyw1odDgoONRpMLzH4hzhwnEw55398dL8rhKGvvYbio71WrJ00jE+hGlEi7H1Gkl11KoPJRaPlRAVGPw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-arm64-gnu": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.16.2.tgz", + "integrity": "sha512-xlMh4gNtplNQEwuF5icm69udC7un0WyzT5ywOeHrPMEsghKnLjXok2wZgAA7ocTm9+JsI+nVXIQa5XO1x+HPQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-arm64-musl": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.16.2.tgz", + "integrity": "sha512-OZs33QTMi0xmHv/4P0+RAKXJTBk7UcMH5tpTaCytWRXls/DGaJ48jOHmriQGK2YwUqXl+oneuNyPOUO0obJ+Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-ppc64-gnu": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.16.2.tgz", + "integrity": "sha512-UVyuhaV32dJGtF6fDofOcBstg9JwB2Jfnjfb8jGlu3xcG+TsubHRhuTwQ6JZ1sColNT1nMxBiu7zdKUEZi1kwg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-riscv64-gnu": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.16.2.tgz", + "integrity": "sha512-YZZS0yv2q5nE1uL/Fk4Y7m9018DSEmDNSG8oJzy1TJjA1jx5HL52hEPxi98XhU6OYhSO/vC1jdkJeE8TIHugug==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-riscv64-musl": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.16.2.tgz", + "integrity": "sha512-9VYuypwtx4kt1lUcwJAH4dPmgJySh4/KxtAPdRoX2BTaZxVm/yEXHq0mnl/8SEarjzMvXKbf7Cm6UBgptm3DZw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-s390x-gnu": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.16.2.tgz", + "integrity": "sha512-3gbwQ+xlL5gpyzgSDdC8B4qIM4mZaPDLaFOi3c/GV7CqIdVJc5EZXW4V3T6xwtPBOpXPXfqQLbhTnUD4SqwJtA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-x64-gnu": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.16.2.tgz", + "integrity": "sha512-m0WcK0j54tSwWa+hQaJMScZdWneqE7xixp/vpFqlkbhuKW9dRHykPAFvSYg1YJ3MJgu9ZzVNpYHhPKJiEQq57Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-linux-x64-musl": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.16.2.tgz", + "integrity": "sha512-ZjUm3w96P2t47nWywGwj1A2mAVBI/8IoS7XHhcogWCfXnEI3M6NPIRQPYAZW4s5/u3u6w1uPtgOwffj2XIOb/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-openharmony-arm64": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-openharmony-arm64/-/binding-openharmony-arm64-11.16.2.tgz", + "integrity": "sha512-OFVQ2x3VenTp13nIl6HcQ/7dmhFmM9dg2EjKfHcOtYfrVLQdNR6THFU7GkMdmc8DdY1zLUeilHwBIsyxv5hkwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@oxc-resolver/binding-wasm32-wasi": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.16.2.tgz", + "integrity": "sha512-+O1sY3RrGyA2AqDnd3yaDCsqZqCblSTEpY7TbbaOaw0X7iIbGjjRLdrQk9StG3QSiZuBy9FdFwotIiSXtwvbAQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-resolver/binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@oxc-resolver/binding-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@oxc-resolver/binding-win32-arm64-msvc": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.16.2.tgz", + "integrity": "sha512-jMrMJL+fkx6xoSMFPOeyQ1ctTFjavWPOSZEKUY5PebDwQmC9cqEr4LhdTnGsOtFrWYLXlEU4xWeMdBoc/XKkOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxc-resolver/binding-win32-ia32-msvc": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.16.2.tgz", + "integrity": "sha512-tl0xDA5dcQplG2yg2ZhgVT578dhRFafaCfyqMEAXq8KNpor85nJ53C3PLpfxD2NKzPioFgWEexNsjqRi+kW2Mg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxc-resolver/binding-win32-x64-msvc": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.16.2.tgz", + "integrity": "sha512-M7z0xjYQq1HdJk2DxTSLMvRMyBSI4wn4FXGcVQBsbAihgXevAReqwMdb593nmCK/OiFwSNcOaGIzUvzyzQ+95w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -3359,9 +3710,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.34.45", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.45.tgz", - "integrity": "sha512-qJcFVfCa5jxBFSuv7S5WYbA8XdeCPmhnaVVfX/2Y6L8WYg8sk3XY2+6W0zH+3mq1Cz+YC7Ki66HfqX6IHAwnkg==", + "version": "0.34.46", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.46.tgz", + "integrity": "sha512-kiW7CtS/NkdvTUjkjUJo7d5JsFfbJ14YjdhDk9KoEgK6nFjKNXZPrX0jfLA8ZlET4cFLHxOZ/0vFKOP+bOxIOQ==", "dev": true, "license": "MIT" }, @@ -3697,13 +4048,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.19.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", - "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", + "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.16.0" } }, "node_modules/@types/normalize-package-data": { @@ -3769,20 +4120,20 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.50.1.tgz", - "integrity": "sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.51.0.tgz", + "integrity": "sha512-XtssGWJvypyM2ytBnSnKtHYOGT+4ZwTnBVl36TA4nRO2f4PRNGz5/1OszHzcZCvcBMh+qb7I06uoCmLTRdR9og==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.50.1", - "@typescript-eslint/type-utils": "8.50.1", - "@typescript-eslint/utils": "8.50.1", - "@typescript-eslint/visitor-keys": "8.50.1", + "@typescript-eslint/scope-manager": "8.51.0", + "@typescript-eslint/type-utils": "8.51.0", + "@typescript-eslint/utils": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3792,7 +4143,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.50.1", + "@typescript-eslint/parser": "^8.51.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -3808,16 +4159,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.50.1.tgz", - "integrity": "sha512-hM5faZwg7aVNa819m/5r7D0h0c9yC4DUlWAOvHAtISdFTc8xB86VmX5Xqabrama3wIPJ/q9RbGS1worb6JfnMg==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.51.0.tgz", + "integrity": "sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.50.1", - "@typescript-eslint/types": "8.50.1", - "@typescript-eslint/typescript-estree": "8.50.1", - "@typescript-eslint/visitor-keys": "8.50.1", + "@typescript-eslint/scope-manager": "8.51.0", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0", "debug": "^4.3.4" }, "engines": { @@ -3833,14 +4184,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.50.1.tgz", - "integrity": "sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.51.0.tgz", + "integrity": "sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.50.1", - "@typescript-eslint/types": "^8.50.1", + "@typescript-eslint/tsconfig-utils": "^8.51.0", + "@typescript-eslint/types": "^8.51.0", "debug": "^4.3.4" }, "engines": { @@ -3855,14 +4206,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.1.tgz", - "integrity": "sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.51.0.tgz", + "integrity": "sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.50.1", - "@typescript-eslint/visitor-keys": "8.50.1" + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3873,9 +4224,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.1.tgz", - "integrity": "sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.51.0.tgz", + "integrity": "sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw==", "dev": true, "license": "MIT", "engines": { @@ -3890,17 +4241,17 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.50.1.tgz", - "integrity": "sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.51.0.tgz", + "integrity": "sha512-0XVtYzxnobc9K0VU7wRWg1yiUrw4oQzexCG2V2IDxxCxhqBMSMbjB+6o91A+Uc0GWtgjCa3Y8bi7hwI0Tu4n5Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.50.1", - "@typescript-eslint/typescript-estree": "8.50.1", - "@typescript-eslint/utils": "8.50.1", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0", + "@typescript-eslint/utils": "8.51.0", "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3915,9 +4266,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.1.tgz", - "integrity": "sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.51.0.tgz", + "integrity": "sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag==", "dev": true, "license": "MIT", "engines": { @@ -3929,21 +4280,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.1.tgz", - "integrity": "sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.51.0.tgz", + "integrity": "sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.50.1", - "@typescript-eslint/tsconfig-utils": "8.50.1", - "@typescript-eslint/types": "8.50.1", - "@typescript-eslint/visitor-keys": "8.50.1", + "@typescript-eslint/project-service": "8.51.0", + "@typescript-eslint/tsconfig-utils": "8.51.0", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/visitor-keys": "8.51.0", "debug": "^4.3.4", "minimatch": "^9.0.4", "semver": "^7.6.0", "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4044,16 +4395,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.1.tgz", - "integrity": "sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.51.0.tgz", + "integrity": "sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.50.1", - "@typescript-eslint/types": "8.50.1", - "@typescript-eslint/typescript-estree": "8.50.1" + "@typescript-eslint/scope-manager": "8.51.0", + "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4068,13 +4419,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.1.tgz", - "integrity": "sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.51.0.tgz", + "integrity": "sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.50.1", + "@typescript-eslint/types": "8.51.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -5646,9 +5997,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001761", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001761.tgz", - "integrity": "sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==", + "version": "1.0.30001762", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", + "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", "dev": true, "funding": [ { @@ -7506,6 +7857,23 @@ "dev": true, "license": "ISC" }, + "node_modules/electron/node_modules/@types/node": { + "version": "20.19.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", + "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/electron/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -7909,9 +8277,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8090,6 +8458,36 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -8104,6 +8502,26 @@ "dev": true, "license": "MIT" }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fd-package-json/-/fd-package-json-2.0.0.tgz", + "integrity": "sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "walk-up-path": "^4.0.0" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -8462,6 +8880,22 @@ "node": ">= 6" } }, + "node_modules/formatly": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/formatly/-/formatly-0.3.0.tgz", + "integrity": "sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fd-package-json": "^2.0.0" + }, + "bin": { + "formatly": "bin/index.mjs" + }, + "engines": { + "node": ">=18.3.0" + } + }, "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -10154,6 +10588,16 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", @@ -10578,6 +11022,74 @@ "node": ">=0.10.0" } }, + "node_modules/knip": { + "version": "5.79.0", + "resolved": "https://registry.npmjs.org/knip/-/knip-5.79.0.tgz", + "integrity": "sha512-rcg+mNdqm6UiTuRVyy6UuuHw1n4ABMpNXDtrfGaCeUtJoRBAvAENIebr8YMtOz6XE7iVHZ8+rY7skgEtosczhQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/webpro" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/knip" + } + ], + "license": "ISC", + "dependencies": { + "@nodelib/fs.walk": "^1.2.3", + "fast-glob": "^3.3.3", + "formatly": "^0.3.0", + "jiti": "^2.6.0", + "js-yaml": "^4.1.1", + "minimist": "^1.2.8", + "oxc-resolver": "^11.15.0", + "picocolors": "^1.1.1", + "picomatch": "^4.0.1", + "smol-toml": "^1.5.2", + "strip-json-comments": "5.0.3", + "zod": "^4.1.11" + }, + "bin": { + "knip": "bin/knip.js", + "knip-bun": "bin/knip-bun.js" + }, + "engines": { + "node": ">=18.18.0" + }, + "peerDependencies": { + "@types/node": ">=18", + "typescript": ">=5.0.4 <7" + } + }, + "node_modules/knip/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/knip/node_modules/strip-json-comments": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -11509,6 +12021,30 @@ "dev": true, "license": "MIT" }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -13230,6 +13766,38 @@ "node": ">=4" } }, + "node_modules/oxc-resolver": { + "version": "11.16.2", + "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.16.2.tgz", + "integrity": "sha512-Uy76u47vwhhF7VAmVY61Srn+ouiOobf45MU9vGct9GD2ARy6hKoqEElyHDB0L+4JOM6VLuZ431KiLwyjI/A21g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-resolver/binding-android-arm-eabi": "11.16.2", + "@oxc-resolver/binding-android-arm64": "11.16.2", + "@oxc-resolver/binding-darwin-arm64": "11.16.2", + "@oxc-resolver/binding-darwin-x64": "11.16.2", + "@oxc-resolver/binding-freebsd-x64": "11.16.2", + "@oxc-resolver/binding-linux-arm-gnueabihf": "11.16.2", + "@oxc-resolver/binding-linux-arm-musleabihf": "11.16.2", + "@oxc-resolver/binding-linux-arm64-gnu": "11.16.2", + "@oxc-resolver/binding-linux-arm64-musl": "11.16.2", + "@oxc-resolver/binding-linux-ppc64-gnu": "11.16.2", + "@oxc-resolver/binding-linux-riscv64-gnu": "11.16.2", + "@oxc-resolver/binding-linux-riscv64-musl": "11.16.2", + "@oxc-resolver/binding-linux-s390x-gnu": "11.16.2", + "@oxc-resolver/binding-linux-x64-gnu": "11.16.2", + "@oxc-resolver/binding-linux-x64-musl": "11.16.2", + "@oxc-resolver/binding-openharmony-arm64": "11.16.2", + "@oxc-resolver/binding-wasm32-wasi": "11.16.2", + "@oxc-resolver/binding-win32-arm64-msvc": "11.16.2", + "@oxc-resolver/binding-win32-ia32-msvc": "11.16.2", + "@oxc-resolver/binding-win32-x64-msvc": "11.16.2" + } + }, "node_modules/p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", @@ -14332,9 +14900,9 @@ } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -14362,6 +14930,27 @@ "node": ">=0.10.0" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -14860,6 +15449,17 @@ "node": ">= 4" } }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -14919,6 +15519,30 @@ "node": ">=0.12.0" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -15322,6 +15946,19 @@ "npm": ">= 3.0.0" } }, + "node_modules/smol-toml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, "node_modules/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -16234,9 +16871,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.3.0.tgz", - "integrity": "sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "dev": true, "license": "MIT", "engines": { @@ -16409,16 +17046,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.50.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.50.1.tgz", - "integrity": "sha512-ytTHO+SoYSbhAH9CrYnMhiLx8To6PSSvqnvXyPUgPETCvB6eBKmTI9w6XMPS3HsBRGkwTVBX+urA8dYQx6bHfQ==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.51.0.tgz", + "integrity": "sha512-jh8ZuM5oEh2PSdyQG9YAEM1TCGuWenLSuSUhf/irbVUNW9O5FhbFVONviN2TgMTBnUmyHv7E56rYnfLZK6TkiA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.50.1", - "@typescript-eslint/parser": "8.50.1", - "@typescript-eslint/typescript-estree": "8.50.1", - "@typescript-eslint/utils": "8.50.1" + "@typescript-eslint/eslint-plugin": "8.51.0", + "@typescript-eslint/parser": "8.51.0", + "@typescript-eslint/typescript-estree": "8.51.0", + "@typescript-eslint/utils": "8.51.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -16485,9 +17122,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, @@ -17379,6 +18016,16 @@ "node": ">= 10" } }, + "node_modules/zod": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "packages/bind": { "name": "@tko/bind", "version": "4.0.0-beta1.3", diff --git a/package.json b/package.json index f8104e1a..5d715d7d 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "type": "git", "url": "https://github.com/knockout/tko.git" }, - "scripts": {}, + "scripts": { + "knip": "knip" + }, "bugs": "https://github.com/knockout/tko/issues", "licenses": [ { @@ -19,6 +21,7 @@ "@types/jasmine": "^1.3.7", "@types/jquery": "^3.5.32", "@types/mocha": "^10.0.10", + "@types/node": "^25.0.3", "chai": "^4.5.0", "electron": "^33.2.1", "esbuild": "^0.27.0", @@ -37,6 +40,7 @@ "karma-mocha": "^2.0.1", "karma-sauce-launcher": "^4.3.6", "karma-sinon": "^1.0.5", + "knip": "^5.79.0", "lerna": "^9.0.3", "mocha": "^11.0.1", "nyc": "^17.1.0", diff --git a/packages/computed/src/computed.ts b/packages/computed/src/computed.ts index da8e9184..e7317cb3 100644 --- a/packages/computed/src/computed.ts +++ b/packages/computed/src/computed.ts @@ -67,7 +67,7 @@ export type ComputedReadFunction = | Computed | ((this: TTarget) => T) export type ComputedWriteFunction = (this: TTarget, val: T) => void -export type MaybeComputed = T | Computed +// TODO: Currently unused -> export type MaybeComputed = T | Computed export interface ComputedOptions { read?: ComputedReadFunction diff --git a/packages/observable/src/observableArray.ts b/packages/observable/src/observableArray.ts index 5f4350ac..f8fbc77e 100644 --- a/packages/observable/src/observableArray.ts +++ b/packages/observable/src/observableArray.ts @@ -12,7 +12,7 @@ import { trackArrayChanges } from './observableArray.changeTracking' import type { Observable, ObservableFunctions } from './observable' -export type MaybeObservableArray = T[] | ObservableArray +//TODO Currently unused --> export type MaybeObservableArray = T[] | ObservableArray export interface ObservableArrayFunctions extends ObservableFunctions { /** diff --git a/packages/utils.jsx/src/JsxObserver.ts b/packages/utils.jsx/src/JsxObserver.ts index baf68533..0b68d770 100644 --- a/packages/utils.jsx/src/JsxObserver.ts +++ b/packages/utils.jsx/src/JsxObserver.ts @@ -464,4 +464,4 @@ export class JsxObserver extends LifeCycle { } } -export default JsxObserver +//Duplicated export default JsxObserver diff --git a/packages/utils/src/options.ts b/packages/utils/src/options.ts index 0584bf16..b6ab71b2 100644 --- a/packages/utils/src/options.ts +++ b/packages/utils/src/options.ts @@ -1,4 +1,4 @@ -import { Provider } from '@tko/provider' +import type { Provider } from '@tko/provider' import type { KnockoutInstance } from '@tko/builder' export interface CustomBindingGlobalProperties { From 2d56e2a359a6a36cc5c9373a2f0472f96721bc75 Mon Sep 17 00:00:00 2001 From: "P.Conrad" Date: Sun, 4 Jan 2026 21:40:43 +0000 Subject: [PATCH 02/10] ts) enable verbatimModuleSyntax + fix knip finding (import/export) --- Makefile | 3 + builds/knockout/package.json | 3 +- builds/reference/package.json | 3 +- knip.json | 3 +- package-lock.json | 114 +++++++----------- packages/bind/package.json | 3 +- packages/bind/src/applyBindings.ts | 2 +- packages/bind/src/bindingContext.ts | 2 +- packages/binding.component/package.json | 5 +- packages/binding.core/package.json | 3 +- packages/binding.foreach/package.json | 4 +- packages/binding.if/package.json | 4 +- packages/binding.template/package.json | 3 +- .../spec/nativeTemplateEngineBehaviors.ts | 2 +- .../src/nativeTemplateEngine.ts | 2 +- packages/builder/package.json | 6 +- packages/computed/package.json | 3 +- packages/computed/src/proxy.ts | 3 + packages/filter.punches/package.json | 3 +- packages/lifecycle/package.json | 3 +- packages/observable/package.json | 3 +- packages/observable/src/extenders.ts | 6 +- packages/provider.attr/package.json | 3 +- packages/provider.bindingstring/package.json | 3 +- packages/provider.component/package.json | 3 +- .../spec/customElementBehaviors.ts | 2 +- packages/provider.databind/package.json | 4 +- packages/provider.multi/package.json | 4 +- packages/provider.mustache/package.json | 5 +- .../provider.mustache/src/mustacheParser.ts | 4 +- packages/provider.native/package.json | 5 +- packages/provider.virtual/package.json | 4 +- packages/provider/package.json | 5 +- packages/utils.component/package.json | 3 +- packages/utils.functionrewrite/package.json | 4 +- packages/utils.jsx/package.json | 3 +- packages/utils.jsx/src/index.ts | 2 +- packages/utils.parser/package.json | 3 +- packages/utils/package.json | 4 +- tsconfig.dts.json | 1 + tsconfig.json | 2 +- 41 files changed, 102 insertions(+), 145 deletions(-) diff --git a/Makefile b/Makefile index 66139058..895bf364 100644 --- a/Makefile +++ b/Makefile @@ -51,6 +51,9 @@ format-fix: tsc: $(NPX) tsc +knip: + $(NPX) knip + eslint: $(NPX) eslint . diff --git a/builds/knockout/package.json b/builds/knockout/package.json index e818ad4a..bfebe01f 100644 --- a/builds/knockout/package.json +++ b/builds/knockout/package.json @@ -60,8 +60,7 @@ "@tko/provider.multi": "^4.0.0-beta1.3", "@tko/provider.virtual": "^4.0.0-beta1.6", "@tko/utils.component": "^4.0.0-beta1.3", - "@tko/utils.functionrewrite": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils.functionrewrite": "^4.0.0-beta1.3" }, "exports": { ".": { diff --git a/builds/reference/package.json b/builds/reference/package.json index 7e665bb4..9c15da83 100644 --- a/builds/reference/package.json +++ b/builds/reference/package.json @@ -31,8 +31,7 @@ "@tko/provider.native": "^4.0.0-beta1.3", "@tko/provider.virtual": "^4.0.0-beta1.6", "@tko/utils.component": "^4.0.0-beta1.3", - "@tko/utils.jsx": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils.jsx": "^4.0.0-beta1.3" }, "files": [ "dist/", diff --git a/knip.json b/knip.json index 38865cc3..dee17a68 100644 --- a/knip.json +++ b/knip.json @@ -7,7 +7,8 @@ "variable": true }, "tags": [ - "-lintignore" + "-lintignore", + "-internal" ], "ignoreDependencies": ["@types/mocha", "chai", "electron", "esbuild", "fs-extra", "karma", "karma-[.]*", "mocha", "nyc", "prettier", "sinon", "lerna"], "workspaces": { diff --git a/package-lock.json b/package-lock.json index 042ce27c..5c7cf941 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,8 +62,7 @@ "@tko/provider.multi": "^4.0.0-beta1.3", "@tko/provider.virtual": "^4.0.0-beta1.6", "@tko/utils.component": "^4.0.0-beta1.3", - "@tko/utils.functionrewrite": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils.functionrewrite": "^4.0.0-beta1.3" } }, "builds/reference": { @@ -87,8 +86,7 @@ "@tko/provider.native": "^4.0.0-beta1.3", "@tko/provider.virtual": "^4.0.0-beta1.6", "@tko/utils.component": "^4.0.0-beta1.3", - "@tko/utils.jsx": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils.jsx": "^4.0.0-beta1.3" } }, "node_modules/@babel/code-frame": { @@ -399,9 +397,9 @@ } }, "node_modules/@emnapi/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", - "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "dev": true, "license": "MIT", "dependencies": { @@ -410,9 +408,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", - "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "dev": true, "license": "MIT", "dependencies": { @@ -16912,6 +16910,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, "license": "0BSD" }, "node_modules/tuf-js": { @@ -18035,8 +18034,7 @@ "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", "@tko/provider": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { "@tko/binding.foreach": "^4.0.0-alpha9.0" @@ -18050,11 +18048,10 @@ "@tko/bind": "^4.0.0-beta1.3", "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/provider": "^4.0.0-beta1.3", + "@tko/provider.native": "^4.0.0-beta1.3", "@tko/utils": "^4.0.0-beta1.3", "@tko/utils.component": "^4.0.0-beta1.3", - "@tko/utils.jsx": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils.jsx": "^4.0.0-beta1.3" } }, "packages/binding.core": { @@ -18065,8 +18062,7 @@ "@tko/bind": "^4.0.0-beta1.3", "@tko/computed": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" } }, "packages/binding.foreach": { @@ -18076,9 +18072,7 @@ "dependencies": { "@tko/bind": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/provider": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" } }, "packages/binding.if": { @@ -18087,10 +18081,8 @@ "license": "MIT", "dependencies": { "@tko/bind": "^4.0.0-beta1.3", - "@tko/computed": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" } }, "packages/binding.template": { @@ -18101,8 +18093,7 @@ "@tko/bind": "^4.0.0-beta1.3", "@tko/computed": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { "@tko/binding.if": "^4.0.0-alpha9.0" @@ -18114,13 +18105,13 @@ "license": "MIT", "dependencies": { "@tko/bind": "^4.0.0-beta1.3", + "@tko/binding.template": "^4.0.0-beta1.3", "@tko/computed": "^4.0.0-beta1.3", - "@tko/filter.punches": "^4.0.0-beta1.3", "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", + "@tko/provider": "^4.0.0-beta1.3", "@tko/utils": "^4.0.0-beta1.3", - "@tko/utils.parser": "^4.0.0-beta1.6", - "tslib": "^2.2.0" + "@tko/utils.parser": "^4.0.0-beta1.6" } }, "packages/computed": { @@ -18129,8 +18120,7 @@ "license": "MIT", "dependencies": { "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" } }, "packages/filter.punches": { @@ -18138,8 +18128,7 @@ "version": "4.0.0-beta1.3", "license": "MIT", "dependencies": { - "@tko/observable": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/observable": "^4.0.0-beta1.3" } }, "packages/lifecycle": { @@ -18148,8 +18137,7 @@ "license": "MIT", "dependencies": { "@tko/computed": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { "@tko/observable": "^4.0.0-alpha8.0" @@ -18160,8 +18148,7 @@ "version": "4.0.0-beta1.3", "license": "MIT", "dependencies": { - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" } }, "packages/provider": { @@ -18169,8 +18156,9 @@ "version": "4.0.0-beta1.3", "license": "MIT", "dependencies": { - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/bind": "^4.0.0-beta1.3", + "@tko/observable": "^4.0.0-beta1.3", + "@tko/utils": "^4.0.0-beta1.3" } }, "packages/provider.attr": { @@ -18178,8 +18166,7 @@ "version": "4.0.0-beta1.3", "license": "MIT", "dependencies": { - "@tko/provider": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/provider": "^4.0.0-beta1.3" } }, "packages/provider.bindingstring": { @@ -18188,8 +18175,7 @@ "license": "MIT", "dependencies": { "@tko/provider": "^4.0.0-beta1.3", - "@tko/utils.parser": "^4.0.0-beta1.6", - "tslib": "^2.2.0" + "@tko/utils.parser": "^4.0.0-beta1.6" } }, "packages/provider.component": { @@ -18202,8 +18188,7 @@ "@tko/provider": "^4.0.0-beta1.3", "@tko/utils": "^4.0.0-beta1.3", "@tko/utils.component": "^4.0.0-beta1.3", - "@tko/utils.parser": "^4.0.0-beta1.6", - "tslib": "^2.2.0" + "@tko/utils.parser": "^4.0.0-beta1.6" } }, "packages/provider.databind": { @@ -18211,8 +18196,8 @@ "version": "4.0.0-beta1.6", "license": "MIT", "dependencies": { - "@tko/provider.bindingstring": "^4.0.0-beta1.6", - "tslib": "^2.2.0" + "@tko/bind": "^4.0.0-beta1.3", + "@tko/provider.bindingstring": "^4.0.0-beta1.6" } }, "packages/provider.multi": { @@ -18220,8 +18205,8 @@ "version": "4.0.0-beta1.3", "license": "MIT", "dependencies": { - "@tko/provider": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/bind": "^4.0.0-beta1.3", + "@tko/provider": "^4.0.0-beta1.3" } }, "packages/provider.mustache": { @@ -18229,12 +18214,9 @@ "version": "4.0.0-beta1.6", "license": "MIT", "dependencies": { - "@tko/binding.template": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", "@tko/provider": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "@tko/utils.parser": "^4.0.0-beta1.6", - "tslib": "^2.2.0" + "@tko/utils.parser": "^4.0.0-beta1.6" } }, "packages/provider.native": { @@ -18242,8 +18224,9 @@ "version": "4.0.0-beta1.3", "license": "MIT", "dependencies": { - "@tko/provider": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/bind": "^4.0.0-beta1.3", + "@tko/observable": "^4.0.0-beta1.3", + "@tko/provider": "^4.0.0-beta1.3" } }, "packages/provider.virtual": { @@ -18251,18 +18234,15 @@ "version": "4.0.0-beta1.6", "license": "MIT", "dependencies": { + "@tko/bind": "^4.0.0-beta1.3", "@tko/provider.bindingstring": "^4.0.0-beta1.6", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" } }, "packages/utils": { "name": "@tko/utils", "version": "4.0.0-beta1.3", - "license": "MIT", - "dependencies": { - "tslib": "^2.2.0" - } + "license": "MIT" }, "packages/utils.component": { "name": "@tko/utils.component", @@ -18271,8 +18251,7 @@ "dependencies": { "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { "@tko/bind": "^4.0.0-alpha9.0", @@ -18285,10 +18264,7 @@ "packages/utils.functionrewrite": { "name": "@tko/utils.functionrewrite", "version": "4.0.0-beta1.3", - "license": "MIT", - "dependencies": { - "tslib": "^2.2.0" - } + "license": "MIT" }, "packages/utils.jsx": { "name": "@tko/utils.jsx", @@ -18300,8 +18276,7 @@ "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", "@tko/provider.native": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" } }, "packages/utils.parser": { @@ -18310,8 +18285,7 @@ "license": "MIT", "dependencies": { "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { "@tko/bind": "^4.0.0-alpha9.0", diff --git a/packages/bind/package.json b/packages/bind/package.json index 9683368b..711c0beb 100644 --- a/packages/bind/package.json +++ b/packages/bind/package.json @@ -8,8 +8,7 @@ "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", "@tko/provider": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { "@tko/binding.foreach": "^4.0.0-alpha9.0" diff --git a/packages/bind/src/applyBindings.ts b/packages/bind/src/applyBindings.ts index 84497679..f3b9a4ad 100644 --- a/packages/bind/src/applyBindings.ts +++ b/packages/bind/src/applyBindings.ts @@ -16,7 +16,7 @@ import { dependencyDetection } from '@tko/observable' import type { Observable } from '@tko/observable' -import { Computed, computed } from '@tko/computed' +import { type Computed, computed } from '@tko/computed' import { dataFor, bindingContext, boundElementDomDataKey, contextSubscribeSymbol } from './bindingContext' diff --git a/packages/bind/src/bindingContext.ts b/packages/bind/src/bindingContext.ts index 9a9047c5..6e7aee21 100644 --- a/packages/bind/src/bindingContext.ts +++ b/packages/bind/src/bindingContext.ts @@ -9,7 +9,7 @@ import type { Observable } from '@tko/observable' import { contextAncestorBindingInfo } from './bindingEvent' -import { BindingContextExtendCallback } from './applyBindings' +import type { BindingContextExtendCallback } from './applyBindings' export const boundElementDomDataKey = domData.nextKey() diff --git a/packages/binding.component/package.json b/packages/binding.component/package.json index e0077c00..5a11892a 100644 --- a/packages/binding.component/package.json +++ b/packages/binding.component/package.json @@ -7,12 +7,11 @@ "dependencies": { "@tko/bind": "^4.0.0-beta1.3", "@tko/lifecycle": "^4.0.0-beta1.3", + "@tko/provider.native": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/provider": "^4.0.0-beta1.3", "@tko/utils": "^4.0.0-beta1.3", "@tko/utils.component": "^4.0.0-beta1.3", - "@tko/utils.jsx": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils.jsx": "^4.0.0-beta1.3" }, "files": [ "dist/", diff --git a/packages/binding.core/package.json b/packages/binding.core/package.json index 8f76c548..44f38f85 100644 --- a/packages/binding.core/package.json +++ b/packages/binding.core/package.json @@ -26,8 +26,7 @@ "@tko/bind": "^4.0.0-beta1.3", "@tko/computed": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/binding.foreach/package.json b/packages/binding.foreach/package.json index 2a1aefc9..73c0cad4 100644 --- a/packages/binding.foreach/package.json +++ b/packages/binding.foreach/package.json @@ -25,9 +25,7 @@ "dependencies": { "@tko/bind": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/provider": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/binding.if/package.json b/packages/binding.if/package.json index c8cc1af6..770d00c1 100644 --- a/packages/binding.if/package.json +++ b/packages/binding.if/package.json @@ -24,10 +24,8 @@ "homepage": "https://tko.io", "dependencies": { "@tko/bind": "^4.0.0-beta1.3", - "@tko/computed": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/binding.template/package.json b/packages/binding.template/package.json index 9e654cc2..94d3bb26 100644 --- a/packages/binding.template/package.json +++ b/packages/binding.template/package.json @@ -26,8 +26,7 @@ "@tko/bind": "^4.0.0-beta1.3", "@tko/computed": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/binding.template/spec/nativeTemplateEngineBehaviors.ts b/packages/binding.template/spec/nativeTemplateEngineBehaviors.ts index df96380e..2f2a9e97 100644 --- a/packages/binding.template/spec/nativeTemplateEngineBehaviors.ts +++ b/packages/binding.template/spec/nativeTemplateEngineBehaviors.ts @@ -1,7 +1,7 @@ /* global testNode */ import { applyBindings } from '@tko/bind' -import { observable, ObservableArray, observableArray } from '@tko/observable' +import { observable, type ObservableArray, observableArray } from '@tko/observable' import { DataBindProvider } from '@tko/provider.databind' diff --git a/packages/binding.template/src/nativeTemplateEngine.ts b/packages/binding.template/src/nativeTemplateEngine.ts index 81d5206f..ddcbfcfa 100644 --- a/packages/binding.template/src/nativeTemplateEngine.ts +++ b/packages/binding.template/src/nativeTemplateEngine.ts @@ -1,5 +1,5 @@ import { makeArray, parseHtmlFragment } from '@tko/utils' -import { templateEngine, TemplateOptions } from './templateEngine' +import { templateEngine, type TemplateOptions } from './templateEngine' import { setTemplateEngine } from './templating' import type { TemplateSource } from './templateSources' import type { BindingContext } from '@tko/bind' diff --git a/packages/builder/package.json b/packages/builder/package.json index 338a48d7..939575af 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -10,13 +10,13 @@ "license": "MIT", "dependencies": { "@tko/bind": "^4.0.0-beta1.3", + "@tko/provider": "^4.0.0-beta1.3", + "@tko/binding.template": "^4.0.0-beta1.3", "@tko/computed": "^4.0.0-beta1.3", - "@tko/filter.punches": "^4.0.0-beta1.3", "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", "@tko/utils": "^4.0.0-beta1.3", - "@tko/utils.parser": "^4.0.0-beta1.6", - "tslib": "^2.2.0" + "@tko/utils.parser": "^4.0.0-beta1.6" }, "homepage": "https://tko.io", "licenses": [ diff --git a/packages/computed/package.json b/packages/computed/package.json index 8a547528..126eb774 100644 --- a/packages/computed/package.json +++ b/packages/computed/package.json @@ -9,8 +9,7 @@ ], "dependencies": { "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "repository": { "type": "git", diff --git a/packages/computed/src/proxy.ts b/packages/computed/src/proxy.ts index dbeea6aa..a99cb635 100644 --- a/packages/computed/src/proxy.ts +++ b/packages/computed/src/proxy.ts @@ -88,12 +88,15 @@ export function proxy(object) { return proxy } +/** @internal */ export function getObservable(proxied, prop) { return proxied[MIRROR_SYM][prop] } +/** @internal */ export function peek(proxied, prop) { return getObservable(proxied, prop).peek() } +/** @internal */ export function isProxied(proxied) { return PROXY_SYM in proxied } diff --git a/packages/filter.punches/package.json b/packages/filter.punches/package.json index d7c741ea..d362274e 100644 --- a/packages/filter.punches/package.json +++ b/packages/filter.punches/package.json @@ -23,8 +23,7 @@ }, "homepage": "https://tko.io", "dependencies": { - "@tko/observable": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/observable": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/lifecycle/package.json b/packages/lifecycle/package.json index 970ae262..5aae99cf 100644 --- a/packages/lifecycle/package.json +++ b/packages/lifecycle/package.json @@ -3,8 +3,7 @@ "module": "dist/lifecycle.js", "dependencies": { "@tko/computed": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { "@tko/observable": "^4.0.0-alpha8.0" diff --git a/packages/observable/package.json b/packages/observable/package.json index 173f936e..62e84e64 100644 --- a/packages/observable/package.json +++ b/packages/observable/package.json @@ -31,8 +31,7 @@ }, "homepage": "https://tko.io", "dependencies": { - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/observable/src/extenders.ts b/packages/observable/src/extenders.ts index cb082fc7..4652da67 100644 --- a/packages/observable/src/extenders.ts +++ b/packages/observable/src/extenders.ts @@ -36,14 +36,14 @@ export function applyExtenders(requestedExtenders?) { */ // Change when notifications are published. -export function notify(target: any, notifyWhen: string) { +function notify(target: any, notifyWhen: string) { target.equalityComparer = notifyWhen == 'always' ? null // null equalityComparer means to always notify : valuesArePrimitiveAndEqual } -export function deferred(target: any, option: boolean) { +function deferred(target: any, option: boolean) { if (option !== true) { throw new Error( "The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled." @@ -52,7 +52,7 @@ export function deferred(target: any, option: boolean) { deferUpdates(target) } -export function rateLimit(target: any, options: string | any) { +function rateLimit(target: any, options: string | any) { let timeout, method, limitFunction if (typeof options === 'number') { diff --git a/packages/provider.attr/package.json b/packages/provider.attr/package.json index 2bae0b2f..38ddcbf2 100644 --- a/packages/provider.attr/package.json +++ b/packages/provider.attr/package.json @@ -9,8 +9,7 @@ ], "license": "MIT", "dependencies": { - "@tko/provider": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/provider": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/provider.bindingstring/package.json b/packages/provider.bindingstring/package.json index e519cc10..5ed832ac 100644 --- a/packages/provider.bindingstring/package.json +++ b/packages/provider.bindingstring/package.json @@ -10,8 +10,7 @@ "license": "MIT", "dependencies": { "@tko/provider": "^4.0.0-beta1.3", - "@tko/utils.parser": "^4.0.0-beta1.6", - "tslib": "^2.2.0" + "@tko/utils.parser": "^4.0.0-beta1.6" }, "karma": { "frameworks": [ diff --git a/packages/provider.component/package.json b/packages/provider.component/package.json index c2411a65..c613689b 100644 --- a/packages/provider.component/package.json +++ b/packages/provider.component/package.json @@ -14,8 +14,7 @@ "@tko/provider": "^4.0.0-beta1.3", "@tko/utils": "^4.0.0-beta1.3", "@tko/utils.component": "^4.0.0-beta1.3", - "@tko/utils.parser": "^4.0.0-beta1.6", - "tslib": "^2.2.0" + "@tko/utils.parser": "^4.0.0-beta1.6" }, "karma": { "frameworks": [ diff --git a/packages/provider.component/spec/customElementBehaviors.ts b/packages/provider.component/spec/customElementBehaviors.ts index 33b23f80..5cfd6d6f 100644 --- a/packages/provider.component/spec/customElementBehaviors.ts +++ b/packages/provider.component/spec/customElementBehaviors.ts @@ -1,6 +1,6 @@ import { options, tasks, objectForEach, cleanNode, triggerEvent } from '@tko/utils' -import { observable, isWritableObservable, isObservable, Observable } from '@tko/observable' +import { observable, isWritableObservable, isObservable, type Observable } from '@tko/observable' import { isComputed } from '@tko/computed' diff --git a/packages/provider.databind/package.json b/packages/provider.databind/package.json index 74fb2059..39745b20 100644 --- a/packages/provider.databind/package.json +++ b/packages/provider.databind/package.json @@ -9,8 +9,8 @@ ], "license": "MIT", "dependencies": { - "@tko/provider.bindingstring": "^4.0.0-beta1.6", - "tslib": "^2.2.0" + "@tko/bind": "^4.0.0-beta1.3", + "@tko/provider.bindingstring": "^4.0.0-beta1.6" }, "karma": { "frameworks": [ diff --git a/packages/provider.multi/package.json b/packages/provider.multi/package.json index a1feca9f..eda60036 100644 --- a/packages/provider.multi/package.json +++ b/packages/provider.multi/package.json @@ -9,8 +9,8 @@ ], "license": "MIT", "dependencies": { - "@tko/provider": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/bind": "^4.0.0-beta1.3", + "@tko/provider": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/provider.mustache/package.json b/packages/provider.mustache/package.json index 53ece522..42020ccf 100644 --- a/packages/provider.mustache/package.json +++ b/packages/provider.mustache/package.json @@ -23,12 +23,9 @@ }, "homepage": "https://tko.io", "dependencies": { - "@tko/binding.template": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", "@tko/provider": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "@tko/utils.parser": "^4.0.0-beta1.6", - "tslib": "^2.2.0" + "@tko/utils.parser": "^4.0.0-beta1.6" }, "karma": { "frameworks": [ diff --git a/packages/provider.mustache/src/mustacheParser.ts b/packages/provider.mustache/src/mustacheParser.ts index 12595d44..411ac301 100644 --- a/packages/provider.mustache/src/mustacheParser.ts +++ b/packages/provider.mustache/src/mustacheParser.ts @@ -69,7 +69,7 @@ class Text extends Interpolated { /** * Interpolation Parsing */ -export function* innerParse(text: string) { +function* innerParse(text: string) { const innerMatch = text.match(INNER_EXPRESSION) if (innerMatch) { const [pre, inner, post] = innerMatch.slice(1) @@ -81,7 +81,7 @@ export function* innerParse(text: string) { } } -export function* parseOuterMatch(outerMatch?: RegExpMatchArray | null) { +function* parseOuterMatch(outerMatch?: RegExpMatchArray | null) { if (!outerMatch) { return } diff --git a/packages/provider.native/package.json b/packages/provider.native/package.json index 8eedbfab..38b789a9 100644 --- a/packages/provider.native/package.json +++ b/packages/provider.native/package.json @@ -9,8 +9,9 @@ ], "license": "MIT", "dependencies": { - "@tko/provider": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/bind": "^4.0.0-beta1.3", + "@tko/observable": "^4.0.0-beta1.3", + "@tko/provider": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/provider.virtual/package.json b/packages/provider.virtual/package.json index 9bf90c5a..19ad1ec6 100644 --- a/packages/provider.virtual/package.json +++ b/packages/provider.virtual/package.json @@ -10,9 +10,9 @@ "author": "The Knockout Team", "license": "MIT", "dependencies": { + "@tko/bind": "^4.0.0-beta1.3", "@tko/provider.bindingstring": "^4.0.0-beta1.6", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/provider/package.json b/packages/provider/package.json index 5c1da6d3..03b10e98 100644 --- a/packages/provider/package.json +++ b/packages/provider/package.json @@ -10,8 +10,9 @@ "author": "The Knockout Team", "license": "MIT", "dependencies": { - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/bind": "^4.0.0-beta1.3", + "@tko/observable": "^4.0.0-beta1.3", + "@tko/utils": "^4.0.0-beta1.3" }, "karma": { "frameworks": [ diff --git a/packages/utils.component/package.json b/packages/utils.component/package.json index 22fb333a..61c9e3a1 100644 --- a/packages/utils.component/package.json +++ b/packages/utils.component/package.json @@ -11,8 +11,7 @@ "dependencies": { "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { "@tko/bind": "^4.0.0-alpha9.0", diff --git a/packages/utils.functionrewrite/package.json b/packages/utils.functionrewrite/package.json index 117625ad..81217800 100644 --- a/packages/utils.functionrewrite/package.json +++ b/packages/utils.functionrewrite/package.json @@ -8,9 +8,7 @@ "helpers/" ], "license": "MIT", - "dependencies": { - "tslib": "^2.2.0" - }, + "dependencies": {}, "karma": { "frameworks": [ "mocha", diff --git a/packages/utils.jsx/package.json b/packages/utils.jsx/package.json index 09709c72..6582b618 100644 --- a/packages/utils.jsx/package.json +++ b/packages/utils.jsx/package.json @@ -30,8 +30,7 @@ "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", "@tko/provider.native": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "homepage": "https://tko.io", "licenses": [ diff --git a/packages/utils.jsx/src/index.ts b/packages/utils.jsx/src/index.ts index 4b3eefdc..c1bb7997 100644 --- a/packages/utils.jsx/src/index.ts +++ b/packages/utils.jsx/src/index.ts @@ -1,3 +1,3 @@ export { getOriginalJsxForNode, maybeJsx, createElement, Fragment } from './jsx' -export { default as JsxObserver } from './JsxObserver' +export { JsxObserver } from './JsxObserver' diff --git a/packages/utils.parser/package.json b/packages/utils.parser/package.json index 1a65a4f6..f2e38f5b 100644 --- a/packages/utils.parser/package.json +++ b/packages/utils.parser/package.json @@ -10,8 +10,7 @@ "license": "MIT", "dependencies": { "@tko/observable": "^4.0.0-beta1.3", - "@tko/utils": "^4.0.0-beta1.3", - "tslib": "^2.2.0" + "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { "@tko/bind": "^4.0.0-alpha9.0", diff --git a/packages/utils/package.json b/packages/utils/package.json index 944657f4..a47c88f5 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -27,9 +27,7 @@ "jasmine" ] }, - "dependencies": { - "tslib": "^2.2.0" - }, + "dependencies": {}, "licenses": [ { "type": "MIT", diff --git a/tsconfig.dts.json b/tsconfig.dts.json index d8bdb939..a0f4205d 100644 --- a/tsconfig.dts.json +++ b/tsconfig.dts.json @@ -3,6 +3,7 @@ "compilerOptions": { "noEmit": false, "emitDeclarationOnly": true, + "verbatimModuleSyntax": null, "outFile": "builds/dts/dist/tko.d.ts", }, "exclude": [ diff --git a/tsconfig.json b/tsconfig.json index d780e101..1e1ecd84 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,7 +23,7 @@ "strictBindCallApply": true, "strictFunctionTypes": true, "skipLibCheck": true, - + "verbatimModuleSyntax": true, "paths": { "@tko/utils/helpers/jasmine-13-helper": [ "packages/utils/helpers/jasmine-13-helper.ts" From b26ac7483ad120f05b3aac32e812c713d896d637 Mon Sep 17 00:00:00 2001 From: "P.Conrad" Date: Sat, 10 Jan 2026 15:30:43 +0000 Subject: [PATCH 03/10] knip) fixing some cyclic type imports - introduce IKnockoutInstance and IBindingHandlerObject as central types in @tko/utils --- knip.json | 4 +- packages/bind/src/bindingContext.ts | 5 +- packages/builder/src/Builder.ts | 7 +- packages/provider/src/BindingHandlerObject.ts | 3 +- packages/provider/src/Provider.ts | 5 +- packages/utils/src/generalTypes.ts | 72 +++++++++++++++++++ packages/utils/src/index.ts | 1 + packages/utils/src/options.ts | 7 +- 8 files changed, 87 insertions(+), 17 deletions(-) create mode 100644 packages/utils/src/generalTypes.ts diff --git a/knip.json b/knip.json index dee17a68..1d04aed0 100644 --- a/knip.json +++ b/knip.json @@ -2,9 +2,7 @@ "$schema": "https://unpkg.com/knip@5/schema.json", "ignoreExportsUsedInFile": { "interface": true, - "type": true, - "class": true, - "variable": true + "type": true }, "tags": [ "-lintignore", diff --git a/packages/bind/src/bindingContext.ts b/packages/bind/src/bindingContext.ts index 6e7aee21..682ed932 100644 --- a/packages/bind/src/bindingContext.ts +++ b/packages/bind/src/bindingContext.ts @@ -1,5 +1,4 @@ -import { extend, options, domData, isObjectLike } from '@tko/utils' -import type { KnockoutInstance } from '@tko/builder' +import { extend, options, domData, isObjectLike, type IKnockoutInstance } from '@tko/utils' import { pureComputed } from '@tko/computed' @@ -23,7 +22,7 @@ export interface BindingContextSetting { } export interface BindingContext { - ko: KnockoutInstance + ko: IKnockoutInstance [symbol: symbol]: any $parent?: any diff --git a/packages/builder/src/Builder.ts b/packages/builder/src/Builder.ts index a5e1da4b..80c7ab3d 100644 --- a/packages/builder/src/Builder.ts +++ b/packages/builder/src/Builder.ts @@ -37,7 +37,8 @@ import { tasks, toggleDomNodeCssClass, triggerEvent, - virtualElements + virtualElements, + type IKnockoutInstance } from '@tko/utils' import { parseObjectLiteral } from '@tko/utils.parser' @@ -170,7 +171,7 @@ const utils: Utils = { unwrapObservable: unwrap } -export type KnockoutInstance = { +export type KnockoutInstance = IKnockoutInstance & { // --- Utilities --- cleanNode: typeof cleanNode dependencyDetection: typeof dependencyDetection @@ -178,7 +179,7 @@ export type KnockoutInstance = { filters: typeof options.filters ignoreDependencies: typeof dependencyDetection.ignore memoization: typeof memoization - options: typeof options + //Type merging from IKnockoutInstance options: typeof options removeNode: typeof removeNode selectExtensions: typeof selectExtensions tasks: typeof tasks diff --git a/packages/provider/src/BindingHandlerObject.ts b/packages/provider/src/BindingHandlerObject.ts index 0c62627b..42dcb50c 100644 --- a/packages/provider/src/BindingHandlerObject.ts +++ b/packages/provider/src/BindingHandlerObject.ts @@ -1,6 +1,7 @@ import { options } from '@tko/utils' +import type { IBindingHandlerObject } from '@tko/utils' -export default class BindingHandlerObject { +export default class BindingHandlerObject implements IBindingHandlerObject { set(nameOrObject: string | object, value?: string | object) { if (typeof nameOrObject === 'string') { this[nameOrObject] = value diff --git a/packages/provider/src/Provider.ts b/packages/provider/src/Provider.ts index 51ba69b0..e407fb9b 100644 --- a/packages/provider/src/Provider.ts +++ b/packages/provider/src/Provider.ts @@ -5,6 +5,7 @@ import { dependencyDetection } from '@tko/observable' import BindingHandlerObject from './BindingHandlerObject' import type { BindingContext } from '@tko/bind' +import type { BindingAccessors, IProvider } from '@tko/utils' export interface ProviderParamsInput { bindingHandlers?: BindingHandlerObject @@ -14,9 +15,7 @@ export interface ProviderParamsInput { providers?: any[] } -export type BindingAccessors = { [name: string]: Function } - -export default class Provider { +export default class Provider implements IProvider { constructor(params?: ProviderParamsInput | null) { if (this.constructor === Provider) { throw new Error('Provider is an abstract base class.') diff --git a/packages/utils/src/generalTypes.ts b/packages/utils/src/generalTypes.ts new file mode 100644 index 00000000..3cfe75fe --- /dev/null +++ b/packages/utils/src/generalTypes.ts @@ -0,0 +1,72 @@ +import type { Options } from './options' + +export interface IBindingHandlerObject { + set(nameOrObject: string | object, value?: string | object): void + get(nameOrDotted: string): any +} + +export interface IKnockoutInstance { + utils: any + options: Options +} + +export type BindingAccessors = { [name: string]: Function } + +/** + * Public interface for minimal describing a binding provider. + * + * Providers are responsible for detecting bindings on DOM nodes and + * producing binding-accessor objects that the binding system consumes. + */ +export interface IProvider { + /** + * List of nodeType values this provider handles (e.g. [1, 3, 8]). + */ + FOR_NODE_TYPES: number[] + + /** + * Configure provider-level global values that are exposed to bindings. + * @param globals - an object containing global values for binding evaluation + */ + setGlobals(globals: any): void + + /** + * If true, the provider is consulted before other providers when checking nodes. + */ + preemptive: boolean + + /** + * Returns true when the given node contains bindings that this provider understands. + * @param node - DOM node to inspect + * @param context - optional binding context + */ + nodeHasBindings(node: Node, context?: any): boolean + + /** + * Return a map of binding accessors for the given node. + * The result must be an object whose property values are accessor functions. + */ + getBindingAccessors(node: Node, context?: any): BindingAccessors + + /** + * Optionally transform a node prior to binding. Return an array of nodes + * to replace the original node, or null to indicate no change. + */ + preprocessNode(node: Node): Node[] | null + + /** + * Optional post-processing hook invoked after bindings are applied. + */ + postProcess?(node?: Node): void + + /** + * The provider's registered binding handlers collection. + */ + bindingHandlers: IBindingHandlerObject + + /** + * Getter/setter used for legacy compatibility when assigning the global + * binding provider instance (ko.bindingProvider.instance). + */ + instance: IProvider | any +} diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index a72bb8b3..f4920eed 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -29,4 +29,5 @@ import * as tasks from './tasks' import * as virtualElements from './dom/virtualElements' import * as domData from './dom/data' +export type { IBindingHandlerObject, IProvider, BindingAccessors, IKnockoutInstance } from './generalTypes' export { tasks, virtualElements, domData, memoization } diff --git a/packages/utils/src/options.ts b/packages/utils/src/options.ts index b6ab71b2..871bc41a 100644 --- a/packages/utils/src/options.ts +++ b/packages/utils/src/options.ts @@ -1,5 +1,4 @@ -import type { Provider } from '@tko/provider' -import type { KnockoutInstance } from '@tko/builder' +import type { IKnockoutInstance, IProvider } from './generalTypes' export interface CustomBindingGlobalProperties { [customBindingName: string]: any @@ -17,7 +16,7 @@ export class Options { bindingStringPreparsers: BindingStringPreparsersFunction[] = [] // Reference to the own knockout instance - knockoutInstance: KnockoutInstance | null = null + knockoutInstance: IKnockoutInstance | null = null deferUpdates: boolean = false @@ -39,7 +38,7 @@ export class Options { bindingGlobals: object & CustomBindingGlobalProperties = Object.create(null) // An instance of the binding provider. - bindingProviderInstance: Provider + bindingProviderInstance: IProvider // Whether the `with` binding creates a child context when used with `as`. createChildContextWithAs: boolean = false From 558f82e42bb3bdb6cfa11d4b54bb3aa8aafd87dd Mon Sep 17 00:00:00 2001 From: "P.Conrad" Date: Sat, 10 Jan 2026 20:01:34 +0000 Subject: [PATCH 04/10] refactor) update dependencies across packages / fix all knip warnings --- package-lock.json | 189 +++++++++--------- packages/bind/package.json | 1 - packages/bind/src/applyBindings.ts | 6 +- packages/provider/src/Provider.ts | 6 +- packages/utils/src/index.ts | 2 +- .../src/{generalTypes.ts => interfaces.ts} | 13 +- packages/utils/src/options.ts | 2 +- tsconfig.json | 2 +- 8 files changed, 111 insertions(+), 110 deletions(-) rename packages/utils/src/{generalTypes.ts => interfaces.ts} (87%) diff --git a/package-lock.json b/package-lock.json index 5c7cf941..7f2169c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1255,9 +1255,9 @@ } }, "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", - "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", "dependencies": { @@ -3708,9 +3708,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.34.46", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.46.tgz", - "integrity": "sha512-kiW7CtS/NkdvTUjkjUJo7d5JsFfbJ14YjdhDk9KoEgK6nFjKNXZPrX0jfLA8ZlET4cFLHxOZ/0vFKOP+bOxIOQ==", + "version": "0.34.47", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.47.tgz", + "integrity": "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==", "dev": true, "license": "MIT" }, @@ -4046,9 +4046,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", - "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", + "version": "25.0.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.6.tgz", + "integrity": "sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4118,20 +4118,20 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.51.0.tgz", - "integrity": "sha512-XtssGWJvypyM2ytBnSnKtHYOGT+4ZwTnBVl36TA4nRO2f4PRNGz5/1OszHzcZCvcBMh+qb7I06uoCmLTRdR9og==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.52.0.tgz", + "integrity": "sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.51.0", - "@typescript-eslint/type-utils": "8.51.0", - "@typescript-eslint/utils": "8.51.0", - "@typescript-eslint/visitor-keys": "8.51.0", - "ignore": "^7.0.0", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/type-utils": "8.52.0", + "@typescript-eslint/utils": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.2.0" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4141,7 +4141,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.51.0", + "@typescript-eslint/parser": "^8.52.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -4157,17 +4157,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.51.0.tgz", - "integrity": "sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.52.0.tgz", + "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.51.0", - "@typescript-eslint/types": "8.51.0", - "@typescript-eslint/typescript-estree": "8.51.0", - "@typescript-eslint/visitor-keys": "8.51.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4182,15 +4182,15 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.51.0.tgz", - "integrity": "sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.52.0.tgz", + "integrity": "sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.51.0", - "@typescript-eslint/types": "^8.51.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.52.0", + "@typescript-eslint/types": "^8.52.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4204,14 +4204,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.51.0.tgz", - "integrity": "sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz", + "integrity": "sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.51.0", - "@typescript-eslint/visitor-keys": "8.51.0" + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4222,9 +4222,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.51.0.tgz", - "integrity": "sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz", + "integrity": "sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==", "dev": true, "license": "MIT", "engines": { @@ -4239,17 +4239,17 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.51.0.tgz", - "integrity": "sha512-0XVtYzxnobc9K0VU7wRWg1yiUrw4oQzexCG2V2IDxxCxhqBMSMbjB+6o91A+Uc0GWtgjCa3Y8bi7hwI0Tu4n5Q==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.52.0.tgz", + "integrity": "sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.51.0", - "@typescript-eslint/typescript-estree": "8.51.0", - "@typescript-eslint/utils": "8.51.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.2.0" + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4264,9 +4264,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.51.0.tgz", - "integrity": "sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.52.0.tgz", + "integrity": "sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==", "dev": true, "license": "MIT", "engines": { @@ -4278,21 +4278,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.51.0.tgz", - "integrity": "sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz", + "integrity": "sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.51.0", - "@typescript-eslint/tsconfig-utils": "8.51.0", - "@typescript-eslint/types": "8.51.0", - "@typescript-eslint/visitor-keys": "8.51.0", - "debug": "^4.3.4", - "minimatch": "^9.0.4", - "semver": "^7.6.0", + "@typescript-eslint/project-service": "8.52.0", + "@typescript-eslint/tsconfig-utils": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.2.0" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4393,16 +4393,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.51.0.tgz", - "integrity": "sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.52.0.tgz", + "integrity": "sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.51.0", - "@typescript-eslint/types": "8.51.0", - "@typescript-eslint/typescript-estree": "8.51.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4417,13 +4417,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.51.0.tgz", - "integrity": "sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz", + "integrity": "sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.51.0", + "@typescript-eslint/types": "8.52.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -5031,9 +5031,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.9.11", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", - "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", + "version": "2.9.14", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", + "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5995,9 +5995,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001762", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", - "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "version": "1.0.30001763", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001763.tgz", + "integrity": "sha512-mh/dGtq56uN98LlNX9qdbKnzINhX0QzhiWBFEkFfsFO4QyCvL8YegrJAazCwXIeqkIob8BlZPGM3xdnY+sgmvQ==", "dev": true, "funding": [ { @@ -7856,9 +7856,9 @@ "license": "ISC" }, "node_modules/electron/node_modules/@types/node": { - "version": "20.19.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", - "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", + "version": "20.19.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.28.tgz", + "integrity": "sha512-VyKBr25BuFDzBFCK5sUM6ZXiWfqgCTwTAOK8qzGV/m9FCirXYDlmczJ+d5dXBAQALGCdRRdbteKYfJ84NGEusw==", "dev": true, "license": "MIT", "dependencies": { @@ -11021,9 +11021,9 @@ } }, "node_modules/knip": { - "version": "5.79.0", - "resolved": "https://registry.npmjs.org/knip/-/knip-5.79.0.tgz", - "integrity": "sha512-rcg+mNdqm6UiTuRVyy6UuuHw1n4ABMpNXDtrfGaCeUtJoRBAvAENIebr8YMtOz6XE7iVHZ8+rY7skgEtosczhQ==", + "version": "5.80.2", + "resolved": "https://registry.npmjs.org/knip/-/knip-5.80.2.tgz", + "integrity": "sha512-Yt7iF8Uzl7pp3mGA6yvum6PZBcbGhjasZYuqIwcIAX1jsIhGRUAK0icP0qrB6FSPBI3BpIeMHl7n9meCLO6ovg==", "dev": true, "funding": [ { @@ -17045,16 +17045,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.51.0.tgz", - "integrity": "sha512-jh8ZuM5oEh2PSdyQG9YAEM1TCGuWenLSuSUhf/irbVUNW9O5FhbFVONviN2TgMTBnUmyHv7E56rYnfLZK6TkiA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.52.0.tgz", + "integrity": "sha512-atlQQJ2YkO4pfTVQmQ+wvYQwexPDOIgo+RaVcD7gHgzy/IQA+XTyuxNM9M9TVXvttkF7koBHmcwisKdOAf2EcA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.51.0", - "@typescript-eslint/parser": "8.51.0", - "@typescript-eslint/typescript-estree": "8.51.0", - "@typescript-eslint/utils": "8.51.0" + "@typescript-eslint/eslint-plugin": "8.52.0", + "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -18033,7 +18033,6 @@ "@tko/computed": "^4.0.0-beta1.3", "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/provider": "^4.0.0-beta1.3", "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { diff --git a/packages/bind/package.json b/packages/bind/package.json index 711c0beb..b6ea6a29 100644 --- a/packages/bind/package.json +++ b/packages/bind/package.json @@ -7,7 +7,6 @@ "@tko/computed": "^4.0.0-beta1.3", "@tko/lifecycle": "^4.0.0-beta1.3", "@tko/observable": "^4.0.0-beta1.3", - "@tko/provider": "^4.0.0-beta1.3", "@tko/utils": "^4.0.0-beta1.3" }, "peerDependencies": { diff --git a/packages/bind/src/applyBindings.ts b/packages/bind/src/applyBindings.ts index f3b9a4ad..cdf27c85 100644 --- a/packages/bind/src/applyBindings.ts +++ b/packages/bind/src/applyBindings.ts @@ -26,7 +26,7 @@ import { BindingResult } from './BindingResult' import { LegacyBindingHandler } from './LegacyBindingHandler' -import type { Provider } from '@tko/provider' +import type { IProvider } from '@tko/utils' import type { BindingHandler, AllBindings } from './BindingHandler' import type { BindingContext } from './bindingContext' @@ -57,11 +57,11 @@ const bindingDoesNotRecurseIntoElementTypes = { template: true } -function getBindingProvider(): Provider { +function getBindingProvider(): IProvider { return options.bindingProviderInstance.instance || options.bindingProviderInstance } -function isProviderForNode(provider: Provider, node: Node): boolean { +function isProviderForNode(provider: IProvider, node: Node): boolean { const nodeTypes = provider.FOR_NODE_TYPES || [Node.ELEMENT_NODE, Node.TEXT_NODE, Node.COMMENT_NODE] return nodeTypes.includes(node.nodeType) } diff --git a/packages/provider/src/Provider.ts b/packages/provider/src/Provider.ts index e407fb9b..27202961 100644 --- a/packages/provider/src/Provider.ts +++ b/packages/provider/src/Provider.ts @@ -5,6 +5,7 @@ import { dependencyDetection } from '@tko/observable' import BindingHandlerObject from './BindingHandlerObject' import type { BindingContext } from '@tko/bind' + import type { BindingAccessors, IProvider } from '@tko/utils' export interface ProviderParamsInput { @@ -54,7 +55,8 @@ export default class Provider implements IProvider { preprocessNode(node: Node): Node[] | null { return [node] } - postProcess(/* node */) {} + + //TODO unused hook? postProcess(/* node */) {} bindingHandlers: BindingHandlerObject globals: any | undefined @@ -88,7 +90,7 @@ export default class Provider implements IProvider { // Given a bindings function or object, create and return a new object that contains // binding value-accessors functions. This is used by ko.applyBindingsToNode. - makeBindingAccessors(bindings, context, node) { + makeBindingAccessors(bindings: any, context: any, node: Node): BindingAccessors { if (typeof bindings === 'function') { return this.makeAccessorsFromFunction(bindings.bind(null, context, node)) } else { diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index f4920eed..4ea2317f 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -29,5 +29,5 @@ import * as tasks from './tasks' import * as virtualElements from './dom/virtualElements' import * as domData from './dom/data' -export type { IBindingHandlerObject, IProvider, BindingAccessors, IKnockoutInstance } from './generalTypes' +export type { IBindingHandlerObject, IProvider, BindingAccessors, IKnockoutInstance } from './interfaces' export { tasks, virtualElements, domData, memoization } diff --git a/packages/utils/src/generalTypes.ts b/packages/utils/src/interfaces.ts similarity index 87% rename from packages/utils/src/generalTypes.ts rename to packages/utils/src/interfaces.ts index 3cfe75fe..e805e75c 100644 --- a/packages/utils/src/generalTypes.ts +++ b/packages/utils/src/interfaces.ts @@ -54,11 +54,6 @@ export interface IProvider { */ preprocessNode(node: Node): Node[] | null - /** - * Optional post-processing hook invoked after bindings are applied. - */ - postProcess?(node?: Node): void - /** * The provider's registered binding handlers collection. */ @@ -68,5 +63,11 @@ export interface IProvider { * Getter/setter used for legacy compatibility when assigning the global * binding provider instance (ko.bindingProvider.instance). */ - instance: IProvider | any + instance: IProvider + + /** + * Given a bindings function or object, create and return a new object that contains + * binding value-accessors functions. This is used by ko.applyBindingsToNode. + */ + makeBindingAccessors(bindings: any, context: any, node: Node): BindingAccessors } diff --git a/packages/utils/src/options.ts b/packages/utils/src/options.ts index 871bc41a..e61668c9 100644 --- a/packages/utils/src/options.ts +++ b/packages/utils/src/options.ts @@ -1,4 +1,4 @@ -import type { IKnockoutInstance, IProvider } from './generalTypes' +import type { IKnockoutInstance, IProvider } from './interfaces' export interface CustomBindingGlobalProperties { [customBindingName: string]: any diff --git a/tsconfig.json b/tsconfig.json index 1e1ecd84..9ef7ce1c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,7 @@ "module": "ES2015", "moduleResolution": "node", "allowJs": false, - "importHelpers": true, + "importHelpers": false, "allowSyntheticDefaultImports": true, "strict": true, "baseUrl": ".", From 336c221abedc87bd6f3bf15537550072cac7ffd3 Mon Sep 17 00:00:00 2001 From: "P.Conrad" Date: Sun, 11 Jan 2026 16:18:06 +0000 Subject: [PATCH 05/10] knip) cleanup --- .github/workflows/dependency-cycle.yml | 33 ++++++++++++++++++++++ Makefile | 3 ++ package.json | 4 +-- packages/bind/src/bindingContext.ts | 4 +-- packages/builder/src/Builder.ts | 19 +++---------- packages/utils/src/index.ts | 8 +++++- packages/utils/src/interfaces.ts | 38 ++++++++++++++++++++++++-- packages/utils/src/options.ts | 4 +-- 8 files changed, 88 insertions(+), 25 deletions(-) create mode 100644 .github/workflows/dependency-cycle.yml diff --git a/.github/workflows/dependency-cycle.yml b/.github/workflows/dependency-cycle.yml new file mode 100644 index 00000000..cdc0ce9b --- /dev/null +++ b/.github/workflows/dependency-cycle.yml @@ -0,0 +1,33 @@ +name: Checking package dependencies with knip and lerna + +on: + # Runs for every pull-requests created + pull_request: + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + prettier: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 24 + cache: 'npm' + + - name: Install dependencies + run: npm install + + - name: Build TKO + run: make + + - name: Check for dependency cycles and faulty imports/exports with knip + run: make knip + + - name: Check lerna packages + run: make lerna-check diff --git a/Makefile b/Makefile index 895bf364..518731ac 100644 --- a/Makefile +++ b/Makefile @@ -66,6 +66,9 @@ dts: docker-build: $(DOCKER) build . --tag tko +lerna-check: + $(LERNA) exec --stream -- true + # Run the `repackage` target in every directory. Essentially # homogenizes the `package.json`. repackage: tools/repackage.mjs diff --git a/package.json b/package.json index 5d715d7d..0d9145de 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,7 @@ "type": "git", "url": "https://github.com/knockout/tko.git" }, - "scripts": { - "knip": "knip" - }, + "scripts": {}, "bugs": "https://github.com/knockout/tko/issues", "licenses": [ { diff --git a/packages/bind/src/bindingContext.ts b/packages/bind/src/bindingContext.ts index 682ed932..b5632383 100644 --- a/packages/bind/src/bindingContext.ts +++ b/packages/bind/src/bindingContext.ts @@ -1,4 +1,4 @@ -import { extend, options, domData, isObjectLike, type IKnockoutInstance } from '@tko/utils' +import { extend, options, domData, isObjectLike, type IKnockoutUtilsInstance } from '@tko/utils' import { pureComputed } from '@tko/computed' @@ -22,7 +22,7 @@ export interface BindingContextSetting { } export interface BindingContext { - ko: IKnockoutInstance + ko: IKnockoutUtilsInstance [symbol: symbol]: any $parent?: any diff --git a/packages/builder/src/Builder.ts b/packages/builder/src/Builder.ts index 80c7ab3d..da98fb42 100644 --- a/packages/builder/src/Builder.ts +++ b/packages/builder/src/Builder.ts @@ -38,7 +38,8 @@ import { toggleDomNodeCssClass, triggerEvent, virtualElements, - type IKnockoutInstance + type IKnockoutUtilsInstance, + type IArrayAndObjectUtils } from '@tko/utils' import { parseObjectLiteral } from '@tko/utils.parser' @@ -105,30 +106,18 @@ const domNodeDisposal = { } } -export type Utils = { +export type Utils = IArrayAndObjectUtils & { addOrRemoveItem: typeof addOrRemoveItem - arrayFilter: typeof arrayFilter - arrayFirst: typeof arrayFirst - arrayForEach: typeof arrayForEach - arrayGetDistinctValues: typeof arrayGetDistinctValues - arrayIndexOf: typeof arrayIndexOf - arrayMap: typeof arrayMap - arrayPushAll: typeof arrayPushAll - arrayRemoveItem: typeof arrayRemoveItem cloneNodes: typeof cloneNodes compareArrays: typeof compareArrays createSymbolOrString: typeof createSymbolOrString domData: typeof domData domNodeDisposal: typeof domNodeDisposal - extend: typeof extend filters: typeof options.filters - objectForEach: typeof objectForEach - objectMap: typeof objectMap parseHtmlFragment: typeof parseHtmlFragment parseJson: typeof parseJson parseObjectLiteral: typeof parseObjectLiteral peekObservable: typeof peek - range: typeof range registerEventHandler: typeof registerEventHandler setDomNodeChildrenFromArrayMapping: typeof setDomNodeChildrenFromArrayMapping setHtml: typeof setHtml @@ -171,7 +160,7 @@ const utils: Utils = { unwrapObservable: unwrap } -export type KnockoutInstance = IKnockoutInstance & { +export type KnockoutInstance = IKnockoutUtilsInstance & { // --- Utilities --- cleanNode: typeof cleanNode dependencyDetection: typeof dependencyDetection diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 4ea2317f..f0d591c9 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -29,5 +29,11 @@ import * as tasks from './tasks' import * as virtualElements from './dom/virtualElements' import * as domData from './dom/data' -export type { IBindingHandlerObject, IProvider, BindingAccessors, IKnockoutInstance } from './interfaces' +export type { + IBindingHandlerObject, + IProvider, + BindingAccessors, + IKnockoutUtilsInstance, + IArrayAndObjectUtils +} from './interfaces' export { tasks, virtualElements, domData, memoization } diff --git a/packages/utils/src/interfaces.ts b/packages/utils/src/interfaces.ts index e805e75c..e66c51a3 100644 --- a/packages/utils/src/interfaces.ts +++ b/packages/utils/src/interfaces.ts @@ -1,12 +1,46 @@ +import { + arrayFilter, + arrayFirst, + arrayForEach, + arrayGetDistinctValues, + arrayIndexOf, + arrayMap, + arrayPushAll, + arrayRemoveItem, + addOrRemoveItem, + compareArrays, + range +} from './array' + +import { extend, objectForEach, objectMap } from './object' import type { Options } from './options' +import { createSymbolOrString } from './symbol' export interface IBindingHandlerObject { set(nameOrObject: string | object, value?: string | object): void get(nameOrDotted: string): any } -export interface IKnockoutInstance { - utils: any +export interface IArrayAndObjectUtils { + addOrRemoveItem: typeof addOrRemoveItem + arrayFilter: typeof arrayFilter + arrayFirst: typeof arrayFirst + arrayForEach: typeof arrayForEach + arrayGetDistinctValues: typeof arrayGetDistinctValues + arrayIndexOf: typeof arrayIndexOf + arrayMap: typeof arrayMap + arrayPushAll: typeof arrayPushAll + arrayRemoveItem: typeof arrayRemoveItem + compareArrays: typeof compareArrays + createSymbolOrString: typeof createSymbolOrString + extend: typeof extend + objectForEach: typeof objectForEach + objectMap: typeof objectMap + range: typeof range +} + +export interface IKnockoutUtilsInstance { + utils: IArrayAndObjectUtils options: Options } diff --git a/packages/utils/src/options.ts b/packages/utils/src/options.ts index e61668c9..065b6901 100644 --- a/packages/utils/src/options.ts +++ b/packages/utils/src/options.ts @@ -1,4 +1,4 @@ -import type { IKnockoutInstance, IProvider } from './interfaces' +import type { IKnockoutUtilsInstance, IProvider } from './interfaces' export interface CustomBindingGlobalProperties { [customBindingName: string]: any @@ -16,7 +16,7 @@ export class Options { bindingStringPreparsers: BindingStringPreparsersFunction[] = [] // Reference to the own knockout instance - knockoutInstance: IKnockoutInstance | null = null + knockoutInstance: IKnockoutUtilsInstance | null = null deferUpdates: boolean = false From ab1af6ccae6196749ec3707efeecd63727402bbb Mon Sep 17 00:00:00 2001 From: "P.Conrad" Date: Sun, 11 Jan 2026 16:23:55 +0000 Subject: [PATCH 06/10] workflow) update titel --- .github/workflows/dependency-cycle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependency-cycle.yml b/.github/workflows/dependency-cycle.yml index cdc0ce9b..fa935443 100644 --- a/.github/workflows/dependency-cycle.yml +++ b/.github/workflows/dependency-cycle.yml @@ -7,7 +7,7 @@ on: workflow_dispatch: jobs: - prettier: + knip: runs-on: ubuntu-latest steps: From 602ac345105b3bdcc85f98c0d4afb2c318638642 Mon Sep 17 00:00:00 2001 From: "P.Conrad" Date: Sun, 11 Jan 2026 16:28:18 +0000 Subject: [PATCH 07/10] knip) disable config hints --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 518731ac..2e9ff8a5 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,7 @@ tsc: $(NPX) tsc knip: - $(NPX) knip + $(NPX) knip --no-config-hints eslint: $(NPX) eslint . From a9b86e9923c40565c122f139b760f0b5510efdb1 Mon Sep 17 00:00:00 2001 From: "P.Conrad" Date: Tue, 13 Jan 2026 22:29:10 +0000 Subject: [PATCH 08/10] knip) Implementation of the review feedback --- .github/workflows/dependency-cycle.yml | 5 ++--- knip.json | 2 +- packages/bind/src/bindingContext.ts | 4 ++-- packages/builder/src/Builder.ts | 9 ++++----- .../src/AttributeMustacheProvider.ts | 4 ++-- packages/provider/src/BindingHandlerObject.ts | 2 +- packages/utils.jsx/src/JsxObserver.ts | 2 -- packages/utils/src/index.ts | 4 ++-- packages/utils/src/interfaces.ts | 17 +++++++---------- packages/utils/src/options.ts | 4 ++-- 10 files changed, 23 insertions(+), 30 deletions(-) diff --git a/.github/workflows/dependency-cycle.yml b/.github/workflows/dependency-cycle.yml index fa935443..a32f4863 100644 --- a/.github/workflows/dependency-cycle.yml +++ b/.github/workflows/dependency-cycle.yml @@ -3,6 +3,8 @@ name: Checking package dependencies with knip and lerna on: # Runs for every pull-requests created pull_request: + push: + branches: [main] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -20,9 +22,6 @@ jobs: node-version: 24 cache: 'npm' - - name: Install dependencies - run: npm install - - name: Build TKO run: make diff --git a/knip.json b/knip.json index 1d04aed0..50b9a10d 100644 --- a/knip.json +++ b/knip.json @@ -8,7 +8,7 @@ "-lintignore", "-internal" ], - "ignoreDependencies": ["@types/mocha", "chai", "electron", "esbuild", "fs-extra", "karma", "karma-[.]*", "mocha", "nyc", "prettier", "sinon", "lerna"], + "ignoreDependencies": ["@types/mocha", "chai", "electron", "esbuild", "fs-extra", "karma[.]*", "mocha", "nyc", "prettier", "sinon", "lerna"], "workspaces": { "packages/*": { "entry": "src/index.ts", diff --git a/packages/bind/src/bindingContext.ts b/packages/bind/src/bindingContext.ts index b5632383..4c5970a3 100644 --- a/packages/bind/src/bindingContext.ts +++ b/packages/bind/src/bindingContext.ts @@ -1,4 +1,4 @@ -import { extend, options, domData, isObjectLike, type IKnockoutUtilsInstance } from '@tko/utils' +import { extend, options, domData, isObjectLike, type KnockoutUtils } from '@tko/utils' import { pureComputed } from '@tko/computed' @@ -22,7 +22,7 @@ export interface BindingContextSetting { } export interface BindingContext { - ko: IKnockoutUtilsInstance + ko: KnockoutUtils [symbol: symbol]: any $parent?: any diff --git a/packages/builder/src/Builder.ts b/packages/builder/src/Builder.ts index da98fb42..f57066df 100644 --- a/packages/builder/src/Builder.ts +++ b/packages/builder/src/Builder.ts @@ -38,8 +38,8 @@ import { toggleDomNodeCssClass, triggerEvent, virtualElements, - type IKnockoutUtilsInstance, - type IArrayAndObjectUtils + type KnockoutUtils, + type ArrayAndObjectUtils } from '@tko/utils' import { parseObjectLiteral } from '@tko/utils.parser' @@ -106,8 +106,7 @@ const domNodeDisposal = { } } -export type Utils = IArrayAndObjectUtils & { - addOrRemoveItem: typeof addOrRemoveItem +export type Utils = ArrayAndObjectUtils & { cloneNodes: typeof cloneNodes compareArrays: typeof compareArrays createSymbolOrString: typeof createSymbolOrString @@ -160,7 +159,7 @@ const utils: Utils = { unwrapObservable: unwrap } -export type KnockoutInstance = IKnockoutUtilsInstance & { +export type KnockoutInstance = KnockoutUtils & { // --- Utilities --- cleanNode: typeof cleanNode dependencyDetection: typeof dependencyDetection diff --git a/packages/provider.mustache/src/AttributeMustacheProvider.ts b/packages/provider.mustache/src/AttributeMustacheProvider.ts index 4f7af392..860cf234 100644 --- a/packages/provider.mustache/src/AttributeMustacheProvider.ts +++ b/packages/provider.mustache/src/AttributeMustacheProvider.ts @@ -78,9 +78,9 @@ export default class AttributeMustacheProvider extends Provider { } } - getPossibleDirectBinding(attrName: string | number) { + getPossibleDirectBinding(attrName: string) { const bindingName = this.ATTRIBUTES_BINDING_MAP[attrName] - return bindingName && this.bindingHandlers.get(attrName) + return bindingName && this.bindingHandlers.get(attrName) //FIXME this.bindingHandlers.get(bindingName) ? } *bindingObjects(node: Element, context: any) { diff --git a/packages/provider/src/BindingHandlerObject.ts b/packages/provider/src/BindingHandlerObject.ts index 42dcb50c..1451ce59 100644 --- a/packages/provider/src/BindingHandlerObject.ts +++ b/packages/provider/src/BindingHandlerObject.ts @@ -23,7 +23,7 @@ export default class BindingHandlerObject implements IBindingHandlerObject { * The handler may have a `.` in it, e.g. `attr.title`, in which case the * handler is `attr`. Otherwise it's the name given */ - get(nameOrDotted) { + get(nameOrDotted: string) { const [name] = nameOrDotted.split('.') return this[name] } diff --git a/packages/utils.jsx/src/JsxObserver.ts b/packages/utils.jsx/src/JsxObserver.ts index 0b68d770..fb382306 100644 --- a/packages/utils.jsx/src/JsxObserver.ts +++ b/packages/utils.jsx/src/JsxObserver.ts @@ -463,5 +463,3 @@ export class JsxObserver extends LifeCycle { queueCleanNode(node) } } - -//Duplicated export default JsxObserver diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index f0d591c9..b96172cb 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -33,7 +33,7 @@ export type { IBindingHandlerObject, IProvider, BindingAccessors, - IKnockoutUtilsInstance, - IArrayAndObjectUtils + KnockoutUtils, + ArrayAndObjectUtils } from './interfaces' export { tasks, virtualElements, domData, memoization } diff --git a/packages/utils/src/interfaces.ts b/packages/utils/src/interfaces.ts index e66c51a3..7caae41d 100644 --- a/packages/utils/src/interfaces.ts +++ b/packages/utils/src/interfaces.ts @@ -16,12 +16,7 @@ import { extend, objectForEach, objectMap } from './object' import type { Options } from './options' import { createSymbolOrString } from './symbol' -export interface IBindingHandlerObject { - set(nameOrObject: string | object, value?: string | object): void - get(nameOrDotted: string): any -} - -export interface IArrayAndObjectUtils { +export type ArrayAndObjectUtils = { addOrRemoveItem: typeof addOrRemoveItem arrayFilter: typeof arrayFilter arrayFirst: typeof arrayFirst @@ -39,13 +34,15 @@ export interface IArrayAndObjectUtils { range: typeof range } -export interface IKnockoutUtilsInstance { - utils: IArrayAndObjectUtils - options: Options -} +export type KnockoutUtils = { utils: ArrayAndObjectUtils; options: Options } export type BindingAccessors = { [name: string]: Function } +export interface IBindingHandlerObject { + set(nameOrObject: string | object, value?: string | object): void + get(nameOrDotted: string): any +} + /** * Public interface for minimal describing a binding provider. * diff --git a/packages/utils/src/options.ts b/packages/utils/src/options.ts index 065b6901..c3afe1dd 100644 --- a/packages/utils/src/options.ts +++ b/packages/utils/src/options.ts @@ -1,4 +1,4 @@ -import type { IKnockoutUtilsInstance, IProvider } from './interfaces' +import type { KnockoutUtils, IProvider } from './interfaces' export interface CustomBindingGlobalProperties { [customBindingName: string]: any @@ -16,7 +16,7 @@ export class Options { bindingStringPreparsers: BindingStringPreparsersFunction[] = [] // Reference to the own knockout instance - knockoutInstance: IKnockoutUtilsInstance | null = null + knockoutInstance: KnockoutUtils | null = null deferUpdates: boolean = false From 6da7b30e85d1cfba15648541cd7f8bf39cffc32e Mon Sep 17 00:00:00 2001 From: "P.Conrad" Date: Tue, 13 Jan 2026 22:43:29 +0000 Subject: [PATCH 09/10] ts) remove IBindingHandlerObject --- packages/provider/src/BindingHandlerObject.ts | 3 +-- packages/utils/src/index.ts | 3 +-- packages/utils/src/interfaces.ts | 7 +------ 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/packages/provider/src/BindingHandlerObject.ts b/packages/provider/src/BindingHandlerObject.ts index 1451ce59..b60a7082 100644 --- a/packages/provider/src/BindingHandlerObject.ts +++ b/packages/provider/src/BindingHandlerObject.ts @@ -1,7 +1,6 @@ import { options } from '@tko/utils' -import type { IBindingHandlerObject } from '@tko/utils' -export default class BindingHandlerObject implements IBindingHandlerObject { +export default class BindingHandlerObject { set(nameOrObject: string | object, value?: string | object) { if (typeof nameOrObject === 'string') { this[nameOrObject] = value diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index b96172cb..02c392fe 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -29,8 +29,7 @@ import * as tasks from './tasks' import * as virtualElements from './dom/virtualElements' import * as domData from './dom/data' -export type { - IBindingHandlerObject, +export type { IProvider, BindingAccessors, KnockoutUtils, diff --git a/packages/utils/src/interfaces.ts b/packages/utils/src/interfaces.ts index 7caae41d..4bb1c965 100644 --- a/packages/utils/src/interfaces.ts +++ b/packages/utils/src/interfaces.ts @@ -38,11 +38,6 @@ export type KnockoutUtils = { utils: ArrayAndObjectUtils; options: Options } export type BindingAccessors = { [name: string]: Function } -export interface IBindingHandlerObject { - set(nameOrObject: string | object, value?: string | object): void - get(nameOrDotted: string): any -} - /** * Public interface for minimal describing a binding provider. * @@ -88,7 +83,7 @@ export interface IProvider { /** * The provider's registered binding handlers collection. */ - bindingHandlers: IBindingHandlerObject + bindingHandlers: any /** * Getter/setter used for legacy compatibility when assigning the global From 75ffdf6b78dbdc17bc5d558865cdcdf0b2539a7e Mon Sep 17 00:00:00 2001 From: "P.Conrad" Date: Tue, 13 Jan 2026 22:50:10 +0000 Subject: [PATCH 10/10] format) execute prettier --- packages/utils/src/index.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 02c392fe..0b178ee3 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -29,10 +29,5 @@ import * as tasks from './tasks' import * as virtualElements from './dom/virtualElements' import * as domData from './dom/data' -export type { - IProvider, - BindingAccessors, - KnockoutUtils, - ArrayAndObjectUtils -} from './interfaces' +export type { IProvider, BindingAccessors, KnockoutUtils, ArrayAndObjectUtils } from './interfaces' export { tasks, virtualElements, domData, memoization }