diff --git a/extensions/vscode/schemas/vue-tsconfig.schema.json b/extensions/vscode/schemas/vue-tsconfig.schema.json
index 1fffdced3e..138e3a0bfa 100644
--- a/extensions/vscode/schemas/vue-tsconfig.schema.json
+++ b/extensions/vscode/schemas/vue-tsconfig.schema.json
@@ -60,6 +60,12 @@
"default": false,
"markdownDescription": "Strict type checking of CSS modules."
},
+ "cssModulesLocalsConvention": {
+ "type": ["string", "null"],
+ "default": null,
+ "enum": ["camelCase", "camelCaseOnly", "dashes", "dashesOnly", null],
+ "markdownDescription": "Style of exported class names for CSS modules."
+ },
"checkUnknownProps": {
"type": "boolean",
"default": false,
diff --git a/packages/language-core/lib/codegen/style/modules.ts b/packages/language-core/lib/codegen/style/modules.ts
index e0c5f9a30c..6c9625cc19 100644
--- a/packages/language-core/lib/codegen/style/modules.ts
+++ b/packages/language-core/lib/codegen/style/modules.ts
@@ -1,4 +1,5 @@
-import type { Code } from '../../types';
+import camelCase from "lodash.camelcase";
+import type { Code, LocalsConvention } from '../../types';
import { codeFeatures } from '../codeFeatures';
import * as names from '../names';
import type { TemplateCodegenContext } from '../template/context';
@@ -6,6 +7,29 @@ import { endOfLine, newLine } from '../utils';
import type { StyleCodegenOptions } from '.';
import { generateClassProperty, generateStyleImports } from './common';
+// See https://github.com/madyankin/postcss-modules/blob/master/src/localsConvention.js
+
+function dashesCamelCase(string: string) {
+ return string.replace(/-+(\w)/g, (_, firstLetter) => firstLetter.toUpperCase());
+}
+
+function generateClasses(classNameWithoutDot: string, localsConvention: LocalsConvention): string[] {
+ switch (localsConvention) {
+ case "camelCase":
+ return [classNameWithoutDot, camelCase(classNameWithoutDot)];
+
+ case "camelCaseOnly":
+ return [camelCase(classNameWithoutDot)];
+
+ case "dashes":
+ return [classNameWithoutDot, dashesCamelCase(classNameWithoutDot)];
+
+ case "dashesOnly":
+ return [dashesCamelCase(classNameWithoutDot)];
+ }
+ return [classNameWithoutDot];
+}
+
export function* generateStyleModules(
{ styles, vueCompilerOptions }: StyleCodegenOptions,
ctx: TemplateCodegenContext,
@@ -38,13 +62,16 @@ export function* generateStyleModules(
if (vueCompilerOptions.resolveStyleImports) {
yield* generateStyleImports(style);
}
- for (const className of style.classNames) {
- yield* generateClassProperty(
- style.name,
- className.text,
- className.offset,
- 'string',
- );
+ for (const classNameWithDot of style.classNames) {
+ const moduleClassNamesWithoutDot = generateClasses(classNameWithDot.text.slice(1), vueCompilerOptions.cssModulesLocalsConvention);
+ for (const moduleClassNameWithoutDot of moduleClassNamesWithoutDot) {
+ yield* generateClassProperty(
+ style.name,
+ `.${moduleClassNameWithoutDot}`,
+ classNameWithDot.offset,
+ 'string',
+ );
+ }
}
yield `>${endOfLine}`;
}
diff --git a/packages/language-core/lib/compilerOptions.ts b/packages/language-core/lib/compilerOptions.ts
index 3bb62ff48e..f6a9175aec 100644
--- a/packages/language-core/lib/compilerOptions.ts
+++ b/packages/language-core/lib/compilerOptions.ts
@@ -256,6 +256,7 @@ export function getDefaultCompilerOptions(
petiteVueExtensions: [],
jsxSlots: false,
strictCssModules: false,
+ cssModulesLocalsConvention: null,
strictVModel: strictTemplates,
checkUnknownProps: strictTemplates,
checkUnknownEvents: strictTemplates,
diff --git a/packages/language-core/lib/types.ts b/packages/language-core/lib/types.ts
index 787e279f46..9077276dec 100644
--- a/packages/language-core/lib/types.ts
+++ b/packages/language-core/lib/types.ts
@@ -5,6 +5,8 @@ import type { Segment } from 'muggle-string';
import type * as ts from 'typescript';
import type { VueEmbeddedCode } from './virtualCode/embeddedCodes';
+export type LocalsConvention = 'camelCase' | 'camelCaseOnly' | 'dashes' | 'dashesOnly' | null; // Note that postcss-modules localsConvention also has a function type which we don't want. Aligned with Vite localsConvention option.
+
export type { SFCParseResult } from '@vue/compiler-sfc';
export { VueEmbeddedCode };
@@ -33,6 +35,7 @@ export interface VueCompilerOptions {
jsxSlots: boolean;
strictVModel: boolean;
strictCssModules: boolean;
+ cssModulesLocalsConvention: LocalsConvention;
checkUnknownProps: boolean;
checkUnknownEvents: boolean;
checkUnknownDirectives: boolean;
diff --git a/packages/language-core/package.json b/packages/language-core/package.json
index ab5fc5057b..e39de348f7 100644
--- a/packages/language-core/package.json
+++ b/packages/language-core/package.json
@@ -17,11 +17,13 @@
"@vue/compiler-dom": "^3.5.0",
"@vue/shared": "^3.5.0",
"alien-signals": "^3.0.0",
+ "lodash.camelcase": "^4.3.0",
"muggle-string": "^0.4.1",
"path-browserify": "^1.0.1",
"picomatch": "^4.0.2"
},
"devDependencies": {
+ "@types/lodash.camelcase": "^4.3.9",
"@types/node": "^22.10.4",
"@types/path-browserify": "^1.0.1",
"@types/picomatch": "^4.0.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 05f3f50ad6..d426b76b16 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -22,10 +22,10 @@ importers:
version: 3.0.0-alpha.0(typescript@5.9.3)
'@typescript-eslint/eslint-plugin':
specifier: latest
- version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.27.0)(typescript@5.9.3))(eslint@9.27.0)(typescript@5.9.3)
+ version: 8.50.1(@typescript-eslint/parser@8.49.0(eslint@9.27.0)(typescript@5.9.3))(eslint@9.27.0)(typescript@5.9.3)
'@typescript/native-preview':
specifier: latest
- version: 7.0.0-dev.20251213.1
+ version: 7.0.0-dev.20251222.1
dprint:
specifier: latest
version: 0.50.2
@@ -34,7 +34,7 @@ importers:
version: 5.9.3
vitest:
specifier: latest
- version: 4.0.15(@types/node@22.19.3)
+ version: 4.0.16(@types/node@22.19.3)
extensions/vscode:
devDependencies:
@@ -67,10 +67,10 @@ importers:
version: 0.4.1(@types/vscode@1.88.0)
rolldown:
specifier: latest
- version: 1.0.0-beta.54
+ version: 1.0.0-beta.56
vscode-ext-gen:
specifier: latest
- version: 1.4.0
+ version: 1.5.1
vscode-tmlanguage-snapshot:
specifier: latest
version: 1.0.1
@@ -113,6 +113,9 @@ importers:
alien-signals:
specifier: ^3.0.0
version: 3.1.1
+ lodash.camelcase:
+ specifier: ^4.3.0
+ version: 4.3.0
muggle-string:
specifier: ^0.4.1
version: 0.4.1
@@ -123,6 +126,9 @@ importers:
specifier: ^4.0.2
version: 4.0.3
devDependencies:
+ '@types/lodash.camelcase':
+ specifier: ^4.3.9
+ version: 4.3.9
'@types/node':
specifier: ^22.10.4
version: 22.19.3
@@ -481,95 +487,95 @@ packages:
'@napi-rs/wasm-runtime@1.1.0':
resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==}
- '@oxc-project/runtime@0.102.0':
- resolution: {integrity: sha512-vEDGxVIeeO+u5XCHD5+iSzWwC3DgRpEaf3lPZETC+6GnoRKHaxbxV6XqpbOhiY423RVkAbBEtfetfrjJjPWByA==}
+ '@oxc-project/runtime@0.103.0':
+ resolution: {integrity: sha512-sQKZo5lLS1/yzbsVlZ+zaQorOkLe3OkQjyyMN29tMvCax5e5Sa9uUYKChDDMR4D41n6ApEazMN2UcIwFdHgS7g==}
engines: {node: ^20.19.0 || >=22.12.0}
- '@oxc-project/types@0.102.0':
- resolution: {integrity: sha512-8Skrw405g+/UJPKWJ1twIk3BIH2nXdiVlVNtYT23AXVwpsd79es4K+KYt06Fbnkc5BaTvk/COT2JuCLYdwnCdA==}
+ '@oxc-project/types@0.103.0':
+ resolution: {integrity: sha512-bkiYX5kaXWwUessFRSoXFkGIQTmc6dLGdxuRTrC+h8PSnIdZyuXHHlLAeTmOue5Br/a0/a7dHH0Gca6eXn9MKg==}
'@reactive-vscode/reactivity@0.4.1':
resolution: {integrity: sha512-ThNXTkTNK9LHvdlBcyzqSywlfF61FIQDlVDqv12+rkRQCCUjWsD+oilbIYYi5uAJkQ2h/yLyowx3f0YVEY1bxQ==}
- '@rolldown/binding-android-arm64@1.0.0-beta.54':
- resolution: {integrity: sha512-zZRx/ur3Fai3fxiEmVp48+6GCBR48PRWJR1X3TTMn9yiq2bBHlYPgBaQtDOYWXv5H3J5dXujeTyGnuoY+kdGCg==}
+ '@rolldown/binding-android-arm64@1.0.0-beta.56':
+ resolution: {integrity: sha512-GFsly+vPnl1Sa61sC2LwK4Hrz48W+YBqBmLSxBEj9IJW6nHNsWof1wwh1gwnxMIm/yN5F9M0B/cRAwn6rTINyg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@rolldown/binding-darwin-arm64@1.0.0-beta.54':
- resolution: {integrity: sha512-zMyFEJmbIs91x22HAA/eUvmZHgjX8tGsD3TJ+WC9aY4bCdl3w84H9vMZmChSHAF1dYvGNH4KQDI2IubeZaCYtg==}
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.56':
+ resolution: {integrity: sha512-8fSkk5g5MVZpddrH8hOyc9O5t5Dqv2Vi3Qe628xe+2zJedJxucUc5DX/KY1OVBRp8XY09LJO+J1V56LsxeBVPA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@rolldown/binding-darwin-x64@1.0.0-beta.54':
- resolution: {integrity: sha512-Ex7QttdaVnEpmE/zroUT5Qm10e2+Vjd9q0LX9eXm59SitxDODMpC8GI1Rct5RrLf4GLU4DzdXBj6DGzuR+6g6w==}
+ '@rolldown/binding-darwin-x64@1.0.0-beta.56':
+ resolution: {integrity: sha512-R+Q5zd763MKvgYSkBfr2gr/3nZQENaK88qEqfRUUYrpq/W0okOpbOJaxn5FDIIS+yq3cjyktYm115I5RiI6G5A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@rolldown/binding-freebsd-x64@1.0.0-beta.54':
- resolution: {integrity: sha512-E1XO10ryM/Vxw3Q1wvs9s2mSpVBfbHtzkbJcdu26qh17ZmVwNWLiIoqEcbkXm028YwkReG4Gd2gCZ3NxgTQ28Q==}
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.56':
+ resolution: {integrity: sha512-YEsv0rfJoHHRNaVx6AfW/o4bmwTY7BJnSQ45rRCyU6DWEgvFZMojh6qzMQmW5ZVdcikE3cU1ZnrQQ2yem9H9Yg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.54':
- resolution: {integrity: sha512-oS73Uks8jczQR9pg0Bj718vap/x71exyJ5yuxu4X5V4MhwRQnky7ANSPm6ARUfraxOqt49IBfcMeGnw2rTSqdA==}
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.56':
+ resolution: {integrity: sha512-mpaV+NCKcHUOkcAThvz1KiXcNshLQRSBLNNKqum2dG7oLZKk+z+02Fxa8BSuFFqq/rmmO6Fq2TPAdZUgOrwiqw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.54':
- resolution: {integrity: sha512-pY8N2X5C+/ZQcy0eRdfOzOP//OFngP1TaIqDjFwfBPws2UNavKS8SpxhPEgUaYIaT0keVBd/TB+eVy9z+CIOtw==}
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.56':
+ resolution: {integrity: sha512-wj1uQRN4GEhYw5cs0dobGzZg3oKMLuQ3hY3fW7cLzvlwi9XRdzW7NmU58e6YUp6boOQLarSxdmAaqCMgaMZfcQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
- '@rolldown/binding-linux-arm64-musl@1.0.0-beta.54':
- resolution: {integrity: sha512-cgTooAFm2MUmFriB7IYaWBNyqrGlRPKG+yaK2rGFl2rcdOcO24urY4p3eyB0ogqsRLvJbIxwjjYiWiIP7Eo1Cw==}
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.56':
+ resolution: {integrity: sha512-Z2PWbAHjW2EUflb1/tPvouMqppwWF5Va1Y9b4GQpO6QlpGK0Wqmn90GO2VKiheDh/gSZlsxZ7uOZoXh2y8R7Kg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
- '@rolldown/binding-linux-x64-gnu@1.0.0-beta.54':
- resolution: {integrity: sha512-nGyLT1Qau0W+kEL44V2jhHmvfS3wyJW08E4WEu2E6NuIy+uChKN1X0aoxzFIDi2owDsYaZYez/98/f268EupIQ==}
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.56':
+ resolution: {integrity: sha512-Z/uv04/Tsf7oqhwjPUiDiSildhWmCpsklA0e5PEB+0eGGmm07B+M2SmqRe9Fd0ypfU2TPGhq+Hn7RVUGIfSMxg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
- '@rolldown/binding-linux-x64-musl@1.0.0-beta.54':
- resolution: {integrity: sha512-KH374P0TUjDXssROT/orvzaWrzGOptD13PTrltgKwbDprJTMknoLiYsOD6Ttz92O2VuAcCtFuJ1xbyFM2Uo/Xg==}
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.56':
+ resolution: {integrity: sha512-u+yP0Pt9ar3PkLGGiyGmQKVj9j20X0E831DY0OVmbKYHAAbTyLKYx+UIIorCm+SQnhGKfkD+0pmwfTc2t2Vt/g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
- '@rolldown/binding-openharmony-arm64@1.0.0-beta.54':
- resolution: {integrity: sha512-oMAVO4wbfAbhpBxPsSp8R7ntL2DchpNfO+tGhN8/sI9jsbYwOv78uIW1fTwOBslhjTVFltGJ+l23mubNQcYNaQ==}
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.56':
+ resolution: {integrity: sha512-Kuc6r5Uya+KxdJ7MUSok3K8zta/1bcsaSNxTvYujm2mWYuffadqgkkR3d0UCRbbCH5klZ+7VG6DR3VtPRlCntw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@rolldown/binding-wasm32-wasi@1.0.0-beta.54':
- resolution: {integrity: sha512-MYY/FmY+HehHiQkNx04W5oLy/Fqd1hXYqZmmorSDXvAHnxMbSgmdFicKsSYOg/sVGHBMEP1tTn6kV5sWrS45rA==}
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.56':
+ resolution: {integrity: sha512-pejT5oLj8xlfn8tjC3bJKeuAsk/un6GKwjbsBQG0AchefdaHf2+S4QRn8XfEMB1l1ZTbe5yEiiV92mr7Jdjaeg==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.54':
- resolution: {integrity: sha512-66o3uKxUmcYskT9exskxs3OVduXf5x0ndlMkYOjSpBgqzhLtkub136yDvZkNT1OkNDET0odSwcU7aWdpnwzAyg==}
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.56':
+ resolution: {integrity: sha512-1NKkRLQR2ghmHMd+14nm1noOhoLei62pkdGlf1g4F+9lfFws66+9LBnP6Z+E+KK8Do9hzQ6FFRwtkC3EADAeyA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@rolldown/binding-win32-x64-msvc@1.0.0-beta.54':
- resolution: {integrity: sha512-FbbbrboChLBXfeEsOfaypBGqzbdJ/CcSA2BPLCggojnIHy58Jo+AXV7HATY8opZk7194rRbokIT8AfPJtZAWtg==}
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.56':
+ resolution: {integrity: sha512-BC3mObCr7/O+1jMJ/Hm3INikBk5D25RTxCha10Rq8b1gHlBfb9eA460+7xQfc8FxUsMCUgHtvrK3Vs5izgwBOQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
- '@rolldown/pluginutils@1.0.0-beta.54':
- resolution: {integrity: sha512-AHgcZ+w7RIRZ65ihSQL8YuoKcpD9Scew4sEeP1BBUT9QdTo6KjwHrZZXjID6nL10fhKessCH6OPany2QKwAwTQ==}
+ '@rolldown/pluginutils@1.0.0-beta.56':
+ resolution: {integrity: sha512-cw9jwAgCs024Nic4OB8PeFDLBHLD1Athcv3bRvyYATIVD9B/gL5X5cJkezT94Y7m7Dk9HXaUMcvb7ypvSX46sA==}
'@standard-schema/spec@1.0.0':
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
@@ -608,6 +614,12 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ '@types/lodash.camelcase@4.3.9':
+ resolution: {integrity: sha512-ys9/hGBfsKxzmFI8hckII40V0ASQ83UM2pxfQRghHAwekhH4/jWtjz/3/9YDy7ZpUd/H0k2STSqmPR28dnj7Zg==}
+
+ '@types/lodash@4.17.21':
+ resolution: {integrity: sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==}
+
'@types/node@22.19.3':
resolution: {integrity: sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==}
@@ -620,11 +632,11 @@ packages:
'@types/vscode@1.88.0':
resolution: {integrity: sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==}
- '@typescript-eslint/eslint-plugin@8.49.0':
- resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==}
+ '@typescript-eslint/eslint-plugin@8.50.1':
+ resolution: {integrity: sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.49.0
+ '@typescript-eslint/parser': ^8.50.1
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
@@ -641,18 +653,34 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
+ '@typescript-eslint/project-service@8.50.1':
+ resolution: {integrity: sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
'@typescript-eslint/scope-manager@8.49.0':
resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@typescript-eslint/scope-manager@8.50.1':
+ resolution: {integrity: sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@typescript-eslint/tsconfig-utils@8.49.0':
resolution: {integrity: sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.49.0':
- resolution: {integrity: sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==}
+ '@typescript-eslint/tsconfig-utils@8.50.1':
+ resolution: {integrity: sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/type-utils@8.50.1':
+ resolution: {integrity: sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -662,14 +690,24 @@ packages:
resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@typescript-eslint/types@8.50.1':
+ resolution: {integrity: sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@typescript-eslint/typescript-estree@8.49.0':
resolution: {integrity: sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.49.0':
- resolution: {integrity: sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==}
+ '@typescript-eslint/typescript-estree@8.50.1':
+ resolution: {integrity: sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/utils@8.50.1':
+ resolution: {integrity: sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -679,53 +717,57 @@ packages:
resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251213.1':
- resolution: {integrity: sha512-O8aGcVDAPoLYiimB7OEZnlsxfplFBwUdOBx1RcsC8NftZQkrTv/tZNJrwKpe7ldYKQu2zGYy/HX2c7qz0GKk8A==}
+ '@typescript-eslint/visitor-keys@8.50.1':
+ resolution: {integrity: sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251222.1':
+ resolution: {integrity: sha512-wq2sTeZzexOrGYKKsMODvL/9+HF4nqyHt/h7hW55ikHU5gscby5xkhG4/oA8KECLTYVdDfAQM+Yfnku76SQBPw==}
cpu: [arm64]
os: [darwin]
- '@typescript/native-preview-darwin-x64@7.0.0-dev.20251213.1':
- resolution: {integrity: sha512-dM0inoyop+XnPYFm0lJ/jqvQ+A8r8a30H7Fw8ZZv+xW5l2ryZ0+oH5h8Od1PseeoyUQ12jYAPMIhE25pXOMl8g==}
+ '@typescript/native-preview-darwin-x64@7.0.0-dev.20251222.1':
+ resolution: {integrity: sha512-CQZFFdH7f/LkGRWqWBK1jwVwQi3XlWTYeu9MdaDpWafM4PJEjMHh1ZuGYp7cjI8SUk07oJRE8P4BMQ1moPe57g==}
cpu: [x64]
os: [darwin]
- '@typescript/native-preview-linux-arm64@7.0.0-dev.20251213.1':
- resolution: {integrity: sha512-jlths8NYx/cCVA8g7ybwyE/oR4WDM/OukgKEk7JlFo0r20Q5LB2rUlK1QlOuRC7ESIh9NypCqe9O1DsTM77fFw==}
+ '@typescript/native-preview-linux-arm64@7.0.0-dev.20251222.1':
+ resolution: {integrity: sha512-wN+IfT/KZfsq1g3Imd50+3k4qCgAwD8N7qU82tJDa9BNj6GtXE/za05N8LBFFq624FBiiqabazsTdE2e/m4OKw==}
cpu: [arm64]
os: [linux]
- '@typescript/native-preview-linux-arm@7.0.0-dev.20251213.1':
- resolution: {integrity: sha512-uHrWHo9o/is5SJ6qG+9gf0+LL1WbXN7SzLpDISSdKTqWhbVt/blpgywDedvemiP17AEbrZJLEWIzPjKASBcMng==}
+ '@typescript/native-preview-linux-arm@7.0.0-dev.20251222.1':
+ resolution: {integrity: sha512-WkxQVLJB9XuvsTMdrks3gaGc22HnuQrFknrkBRy7dqgjervN12h8UzaNCsU7FrAs955NJIAdXuTa6cKFxYhkbA==}
cpu: [arm]
os: [linux]
- '@typescript/native-preview-linux-x64@7.0.0-dev.20251213.1':
- resolution: {integrity: sha512-EiukhOwin8M7aOxVNMgwuBv9fkC0706Fuuo5zVpc4+5hmrNh4nHCkpoUTa8HmMS3cJtuajbpO5+UtVvqEw+9Hw==}
+ '@typescript/native-preview-linux-x64@7.0.0-dev.20251222.1':
+ resolution: {integrity: sha512-yra1TDTzBEI8DjV2BPuQR6PbLJJZPAMWvfCWOxETEbJfKRsz4kBKBG9cPgALeUdjvM6I8ah/CwvJtVc+9oVDGw==}
cpu: [x64]
os: [linux]
- '@typescript/native-preview-win32-arm64@7.0.0-dev.20251213.1':
- resolution: {integrity: sha512-uKIVjXQiX/J8UbGGai79+Jib1WG4mv0jYs7x+P+K7dGey9sSzZtLoIrkfV+pYyH/KOs0qh7cVli8gg7zkG69ng==}
+ '@typescript/native-preview-win32-arm64@7.0.0-dev.20251222.1':
+ resolution: {integrity: sha512-iatfzkhAlbQeLKxmFrhW6zyKIPo7IK5xgsa/6pL/GZb2x3zXGCPDa3LBt8DxNGUlnET20Itge1YEvj1iA9gOrA==}
cpu: [arm64]
os: [win32]
- '@typescript/native-preview-win32-x64@7.0.0-dev.20251213.1':
- resolution: {integrity: sha512-pCOkrGwiIlCw1U2rJKgyRK05WLzZBZ5+hHiWpXBPxGRe0FdF3ISp1zN3Pi/pq7A6dh422MO9Oca+XhwduzEz5Q==}
+ '@typescript/native-preview-win32-x64@7.0.0-dev.20251222.1':
+ resolution: {integrity: sha512-9wRuExH/aJq0sWm20DVhg1Ciu3M8jgegOfjSGqweaREp1toMEmVkyhXp7xH1y69LMuXZFmzjy2kmHiUZgOE6lQ==}
cpu: [x64]
os: [win32]
- '@typescript/native-preview@7.0.0-dev.20251213.1':
- resolution: {integrity: sha512-nfVoWQJoZ4jyxqdSnlT2fqYbU0/QLFhTM92s7mWRd8FuIVVfwkNWyvncC0FouJxXrGotG3TTuLj6/MzpOppd5A==}
+ '@typescript/native-preview@7.0.0-dev.20251222.1':
+ resolution: {integrity: sha512-/9Xrcwb1vkJX+Wdj57ckixQBgF+I1DwEi1PEwgu13i/q5gs1AWVxOGg318sibuZu/33ZfvxRZZXOS24UzqDwWw==}
hasBin: true
'@typescript/server-harness@0.3.5':
resolution: {integrity: sha512-YT9oe27zm7HdGXYad5SZrdJzVe9eavG3F6YplsWvAraowGtuDeY7FHPVuQPtQj6GxG097Us4JDkA8n5I4iQovQ==}
- '@vitest/expect@4.0.15':
- resolution: {integrity: sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==}
+ '@vitest/expect@4.0.16':
+ resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==}
- '@vitest/mocker@4.0.15':
- resolution: {integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==}
+ '@vitest/mocker@4.0.16':
+ resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==}
peerDependencies:
msw: ^2.4.9
vite: ^6.0.0 || ^7.0.0-0
@@ -735,20 +777,20 @@ packages:
vite:
optional: true
- '@vitest/pretty-format@4.0.15':
- resolution: {integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==}
+ '@vitest/pretty-format@4.0.16':
+ resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==}
- '@vitest/runner@4.0.15':
- resolution: {integrity: sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==}
+ '@vitest/runner@4.0.16':
+ resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==}
- '@vitest/snapshot@4.0.15':
- resolution: {integrity: sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==}
+ '@vitest/snapshot@4.0.16':
+ resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==}
- '@vitest/spy@4.0.15':
- resolution: {integrity: sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==}
+ '@vitest/spy@4.0.16':
+ resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==}
- '@vitest/utils@4.0.15':
- resolution: {integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==}
+ '@vitest/utils@4.0.16':
+ resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==}
'@volar/kit@2.4.27':
resolution: {integrity: sha512-ilZoQDMLzqmSsImJRWx4YiZ4FcvvPrPnFVmL6hSsIWB6Bn3qc7k88J9yP32dagrs5Y8EXIlvvD/mAFaiuEOACQ==}
@@ -1239,6 +1281,9 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
+ lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
@@ -1355,8 +1400,8 @@ packages:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
- rolldown@1.0.0-beta.54:
- resolution: {integrity: sha512-3lIvjCWgjPL3gmiATUdV1NeVBGJZy6FdtwgLPol25tAkn46Q/MsVGfCSNswXwFOxGrxglPaN20IeALSIFuFyEg==}
+ rolldown@1.0.0-beta.56:
+ resolution: {integrity: sha512-9MHiUvRH2R8rb6ad6EaLxahS3RbQKdMMlrh9XKmbz2HiCGfK4IWKSNv4N6GhYr+7kHExg6oIc5EF1xA3iR4x1A==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
@@ -1445,8 +1490,8 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
- vite@8.0.0-beta.2:
- resolution: {integrity: sha512-PIkpGhNy7r5r6Sepwo07BDWf8vr6O4CXVBm+vg7aIpswvL0VNGTjok1qiNRypcqT9dhFQJggtPoubZwXM7yeAQ==}
+ vite@8.0.0-beta.4:
+ resolution: {integrity: sha512-fTUZD8GE4HLfiq4JnQoHYPQozsVzD6AfMhqnzG0+whHaM2HVSuS8rPlFdptONr4YDfnsbPigEiyDQ6ngmCtOYQ==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -1485,18 +1530,18 @@ packages:
yaml:
optional: true
- vitest@4.0.15:
- resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==}
+ vitest@4.0.16:
+ resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@opentelemetry/api': ^1.9.0
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.0.15
- '@vitest/browser-preview': 4.0.15
- '@vitest/browser-webdriverio': 4.0.15
- '@vitest/ui': 4.0.15
+ '@vitest/browser-playwright': 4.0.16
+ '@vitest/browser-preview': 4.0.16
+ '@vitest/browser-webdriverio': 4.0.16
+ '@vitest/ui': 4.0.16
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
@@ -1573,8 +1618,8 @@ packages:
vscode-css-languageservice@6.3.9:
resolution: {integrity: sha512-1tLWfp+TDM5ZuVWht3jmaY5y7O6aZmpeXLoHl5bv1QtRsRKt4xYGRMmdJa5Pqx/FTkgRbsna9R+Gn2xE+evVuA==}
- vscode-ext-gen@1.4.0:
- resolution: {integrity: sha512-rN3vdlD9XmE8WCim0RO0/8VuSOtMvisKX0s9gA2RhKz0Nrl5pPYFF8Q0C8CmeYH3ZqacxntGRFsNZXR5vgOJ1w==}
+ vscode-ext-gen@1.5.1:
+ resolution: {integrity: sha512-FI8XbZBDu8K6hj5PXRMBd+E+k1r2gmJV7QHmEsVRaDbGjk5qREMDQpFamBEQLfWj96R3JiYujC+mobUNGJYu1Q==}
hasBin: true
vscode-html-languageservice@5.6.1:
@@ -1814,54 +1859,54 @@ snapshots:
'@tybys/wasm-util': 0.10.1
optional: true
- '@oxc-project/runtime@0.102.0': {}
+ '@oxc-project/runtime@0.103.0': {}
- '@oxc-project/types@0.102.0': {}
+ '@oxc-project/types@0.103.0': {}
'@reactive-vscode/reactivity@0.4.1': {}
- '@rolldown/binding-android-arm64@1.0.0-beta.54':
+ '@rolldown/binding-android-arm64@1.0.0-beta.56':
optional: true
- '@rolldown/binding-darwin-arm64@1.0.0-beta.54':
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.56':
optional: true
- '@rolldown/binding-darwin-x64@1.0.0-beta.54':
+ '@rolldown/binding-darwin-x64@1.0.0-beta.56':
optional: true
- '@rolldown/binding-freebsd-x64@1.0.0-beta.54':
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.56':
optional: true
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.54':
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.56':
optional: true
- '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.54':
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.56':
optional: true
- '@rolldown/binding-linux-arm64-musl@1.0.0-beta.54':
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.56':
optional: true
- '@rolldown/binding-linux-x64-gnu@1.0.0-beta.54':
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.56':
optional: true
- '@rolldown/binding-linux-x64-musl@1.0.0-beta.54':
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.56':
optional: true
- '@rolldown/binding-openharmony-arm64@1.0.0-beta.54':
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.56':
optional: true
- '@rolldown/binding-wasm32-wasi@1.0.0-beta.54':
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.56':
dependencies:
'@napi-rs/wasm-runtime': 1.1.0
optional: true
- '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.54':
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.56':
optional: true
- '@rolldown/binding-win32-x64-msvc@1.0.0-beta.54':
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.56':
optional: true
- '@rolldown/pluginutils@1.0.0-beta.54': {}
+ '@rolldown/pluginutils@1.0.0-beta.56': {}
'@standard-schema/spec@1.0.0': {}
@@ -1917,6 +1962,12 @@ snapshots:
'@types/json-schema@7.0.15': {}
+ '@types/lodash.camelcase@4.3.9':
+ dependencies:
+ '@types/lodash': 4.17.21
+
+ '@types/lodash@4.17.21': {}
+
'@types/node@22.19.3':
dependencies:
undici-types: 6.21.0
@@ -1927,14 +1978,14 @@ snapshots:
'@types/vscode@1.88.0': {}
- '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.27.0)(typescript@5.9.3))(eslint@9.27.0)(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.50.1(@typescript-eslint/parser@8.49.0(eslint@9.27.0)(typescript@5.9.3))(eslint@9.27.0)(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
'@typescript-eslint/parser': 8.49.0(eslint@9.27.0)(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.49.0
- '@typescript-eslint/type-utils': 8.49.0(eslint@9.27.0)(typescript@5.9.3)
- '@typescript-eslint/utils': 8.49.0(eslint@9.27.0)(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.49.0
+ '@typescript-eslint/scope-manager': 8.50.1
+ '@typescript-eslint/type-utils': 8.50.1(eslint@9.27.0)(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.50.1(eslint@9.27.0)(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.50.1
eslint: 9.27.0
ignore: 7.0.5
natural-compare: 1.4.0
@@ -1964,20 +2015,38 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/project-service@8.50.1(typescript@5.9.3)':
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.9.3)
+ '@typescript-eslint/types': 8.50.1
+ debug: 4.4.3
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/scope-manager@8.49.0':
dependencies:
'@typescript-eslint/types': 8.49.0
'@typescript-eslint/visitor-keys': 8.49.0
+ '@typescript-eslint/scope-manager@8.50.1':
+ dependencies:
+ '@typescript-eslint/types': 8.50.1
+ '@typescript-eslint/visitor-keys': 8.50.1
+
'@typescript-eslint/tsconfig-utils@8.49.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.49.0(eslint@9.27.0)(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.50.1(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.49.0
- '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.49.0(eslint@9.27.0)(typescript@5.9.3)
+ typescript: 5.9.3
+
+ '@typescript-eslint/type-utils@8.50.1(eslint@9.27.0)(typescript@5.9.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.50.1
+ '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.50.1(eslint@9.27.0)(typescript@5.9.3)
debug: 4.4.3
eslint: 9.27.0
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -1987,6 +2056,8 @@ snapshots:
'@typescript-eslint/types@8.49.0': {}
+ '@typescript-eslint/types@8.50.1': {}
+
'@typescript-eslint/typescript-estree@8.49.0(typescript@5.9.3)':
dependencies:
'@typescript-eslint/project-service': 8.49.0(typescript@5.9.3)
@@ -2002,12 +2073,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.49.0(eslint@9.27.0)(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.50.1(typescript@5.9.3)':
+ dependencies:
+ '@typescript-eslint/project-service': 8.50.1(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.9.3)
+ '@typescript-eslint/types': 8.50.1
+ '@typescript-eslint/visitor-keys': 8.50.1
+ debug: 4.4.3
+ minimatch: 9.0.5
+ semver: 7.7.3
+ tinyglobby: 0.2.15
+ ts-api-utils: 2.1.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@8.50.1(eslint@9.27.0)(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.27.0)
- '@typescript-eslint/scope-manager': 8.49.0
- '@typescript-eslint/types': 8.49.0
- '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.50.1
+ '@typescript-eslint/types': 8.50.1
+ '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.9.3)
eslint: 9.27.0
typescript: 5.9.3
transitivePeerDependencies:
@@ -2018,76 +2104,81 @@ snapshots:
'@typescript-eslint/types': 8.49.0
eslint-visitor-keys: 4.2.1
- '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251213.1':
+ '@typescript-eslint/visitor-keys@8.50.1':
+ dependencies:
+ '@typescript-eslint/types': 8.50.1
+ eslint-visitor-keys: 4.2.1
+
+ '@typescript/native-preview-darwin-arm64@7.0.0-dev.20251222.1':
optional: true
- '@typescript/native-preview-darwin-x64@7.0.0-dev.20251213.1':
+ '@typescript/native-preview-darwin-x64@7.0.0-dev.20251222.1':
optional: true
- '@typescript/native-preview-linux-arm64@7.0.0-dev.20251213.1':
+ '@typescript/native-preview-linux-arm64@7.0.0-dev.20251222.1':
optional: true
- '@typescript/native-preview-linux-arm@7.0.0-dev.20251213.1':
+ '@typescript/native-preview-linux-arm@7.0.0-dev.20251222.1':
optional: true
- '@typescript/native-preview-linux-x64@7.0.0-dev.20251213.1':
+ '@typescript/native-preview-linux-x64@7.0.0-dev.20251222.1':
optional: true
- '@typescript/native-preview-win32-arm64@7.0.0-dev.20251213.1':
+ '@typescript/native-preview-win32-arm64@7.0.0-dev.20251222.1':
optional: true
- '@typescript/native-preview-win32-x64@7.0.0-dev.20251213.1':
+ '@typescript/native-preview-win32-x64@7.0.0-dev.20251222.1':
optional: true
- '@typescript/native-preview@7.0.0-dev.20251213.1':
+ '@typescript/native-preview@7.0.0-dev.20251222.1':
optionalDependencies:
- '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20251213.1
- '@typescript/native-preview-darwin-x64': 7.0.0-dev.20251213.1
- '@typescript/native-preview-linux-arm': 7.0.0-dev.20251213.1
- '@typescript/native-preview-linux-arm64': 7.0.0-dev.20251213.1
- '@typescript/native-preview-linux-x64': 7.0.0-dev.20251213.1
- '@typescript/native-preview-win32-arm64': 7.0.0-dev.20251213.1
- '@typescript/native-preview-win32-x64': 7.0.0-dev.20251213.1
+ '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20251222.1
+ '@typescript/native-preview-darwin-x64': 7.0.0-dev.20251222.1
+ '@typescript/native-preview-linux-arm': 7.0.0-dev.20251222.1
+ '@typescript/native-preview-linux-arm64': 7.0.0-dev.20251222.1
+ '@typescript/native-preview-linux-x64': 7.0.0-dev.20251222.1
+ '@typescript/native-preview-win32-arm64': 7.0.0-dev.20251222.1
+ '@typescript/native-preview-win32-x64': 7.0.0-dev.20251222.1
'@typescript/server-harness@0.3.5': {}
- '@vitest/expect@4.0.15':
+ '@vitest/expect@4.0.16':
dependencies:
'@standard-schema/spec': 1.0.0
'@types/chai': 5.2.3
- '@vitest/spy': 4.0.15
- '@vitest/utils': 4.0.15
+ '@vitest/spy': 4.0.16
+ '@vitest/utils': 4.0.16
chai: 6.2.1
tinyrainbow: 3.0.3
- '@vitest/mocker@4.0.15(vite@8.0.0-beta.2(@types/node@22.19.3))':
+ '@vitest/mocker@4.0.16(vite@8.0.0-beta.4(@types/node@22.19.3))':
dependencies:
- '@vitest/spy': 4.0.15
+ '@vitest/spy': 4.0.16
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 8.0.0-beta.2(@types/node@22.19.3)
+ vite: 8.0.0-beta.4(@types/node@22.19.3)
- '@vitest/pretty-format@4.0.15':
+ '@vitest/pretty-format@4.0.16':
dependencies:
tinyrainbow: 3.0.3
- '@vitest/runner@4.0.15':
+ '@vitest/runner@4.0.16':
dependencies:
- '@vitest/utils': 4.0.15
+ '@vitest/utils': 4.0.16
pathe: 2.0.3
- '@vitest/snapshot@4.0.15':
+ '@vitest/snapshot@4.0.16':
dependencies:
- '@vitest/pretty-format': 4.0.15
+ '@vitest/pretty-format': 4.0.16
magic-string: 0.30.21
pathe: 2.0.3
- '@vitest/spy@4.0.15': {}
+ '@vitest/spy@4.0.16': {}
- '@vitest/utils@4.0.15':
+ '@vitest/utils@4.0.16':
dependencies:
- '@vitest/pretty-format': 4.0.15
+ '@vitest/pretty-format': 4.0.16
tinyrainbow: 3.0.3
'@volar/kit@2.4.27(typescript@5.9.3)':
@@ -2616,6 +2707,8 @@ snapshots:
dependencies:
p-locate: 5.0.0
+ lodash.camelcase@4.3.0: {}
+
lodash.merge@4.6.2: {}
magic-string@0.30.21:
@@ -2717,24 +2810,24 @@ snapshots:
resolve-from@4.0.0: {}
- rolldown@1.0.0-beta.54:
+ rolldown@1.0.0-beta.56:
dependencies:
- '@oxc-project/types': 0.102.0
- '@rolldown/pluginutils': 1.0.0-beta.54
+ '@oxc-project/types': 0.103.0
+ '@rolldown/pluginutils': 1.0.0-beta.56
optionalDependencies:
- '@rolldown/binding-android-arm64': 1.0.0-beta.54
- '@rolldown/binding-darwin-arm64': 1.0.0-beta.54
- '@rolldown/binding-darwin-x64': 1.0.0-beta.54
- '@rolldown/binding-freebsd-x64': 1.0.0-beta.54
- '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.54
- '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.54
- '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.54
- '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.54
- '@rolldown/binding-linux-x64-musl': 1.0.0-beta.54
- '@rolldown/binding-openharmony-arm64': 1.0.0-beta.54
- '@rolldown/binding-wasm32-wasi': 1.0.0-beta.54
- '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.54
- '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.54
+ '@rolldown/binding-android-arm64': 1.0.0-beta.56
+ '@rolldown/binding-darwin-arm64': 1.0.0-beta.56
+ '@rolldown/binding-darwin-x64': 1.0.0-beta.56
+ '@rolldown/binding-freebsd-x64': 1.0.0-beta.56
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.56
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.56
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.56
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.56
+ '@rolldown/binding-linux-x64-musl': 1.0.0-beta.56
+ '@rolldown/binding-openharmony-arm64': 1.0.0-beta.56
+ '@rolldown/binding-wasm32-wasi': 1.0.0-beta.56
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.56
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.56
semver@7.7.3: {}
@@ -2798,28 +2891,28 @@ snapshots:
dependencies:
punycode: 2.3.1
- vite@8.0.0-beta.2(@types/node@22.19.3):
+ vite@8.0.0-beta.4(@types/node@22.19.3):
dependencies:
- '@oxc-project/runtime': 0.102.0
+ '@oxc-project/runtime': 0.103.0
fdir: 6.5.0(picomatch@4.0.3)
lightningcss: 1.30.2
picomatch: 4.0.3
postcss: 8.5.6
- rolldown: 1.0.0-beta.54
+ rolldown: 1.0.0-beta.56
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 22.19.3
fsevents: 2.3.3
- vitest@4.0.15(@types/node@22.19.3):
+ vitest@4.0.16(@types/node@22.19.3):
dependencies:
- '@vitest/expect': 4.0.15
- '@vitest/mocker': 4.0.15(vite@8.0.0-beta.2(@types/node@22.19.3))
- '@vitest/pretty-format': 4.0.15
- '@vitest/runner': 4.0.15
- '@vitest/snapshot': 4.0.15
- '@vitest/spy': 4.0.15
- '@vitest/utils': 4.0.15
+ '@vitest/expect': 4.0.16
+ '@vitest/mocker': 4.0.16(vite@8.0.0-beta.4(@types/node@22.19.3))
+ '@vitest/pretty-format': 4.0.16
+ '@vitest/runner': 4.0.16
+ '@vitest/snapshot': 4.0.16
+ '@vitest/spy': 4.0.16
+ '@vitest/utils': 4.0.16
es-module-lexer: 1.7.0
expect-type: 1.3.0
magic-string: 0.30.21
@@ -2831,7 +2924,7 @@ snapshots:
tinyexec: 1.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vite: 8.0.0-beta.2(@types/node@22.19.3)
+ vite: 8.0.0-beta.4(@types/node@22.19.3)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 22.19.3
@@ -2914,9 +3007,10 @@ snapshots:
vscode-languageserver-types: 3.17.5
vscode-uri: 3.1.0
- vscode-ext-gen@1.4.0:
+ vscode-ext-gen@1.5.1:
dependencies:
cac: 6.7.14
+ tinyglobby: 0.2.15
vscode-html-languageservice@5.6.1:
dependencies:
diff --git a/test-workspace/tsc/cssModule/camelCase.vue b/test-workspace/tsc/cssModule/camelCase.vue
new file mode 100644
index 0000000000..ae063628d4
--- /dev/null
+++ b/test-workspace/tsc/cssModule/camelCase.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/test-workspace/tsc/cssModule/camelCaseOnly.vue b/test-workspace/tsc/cssModule/camelCaseOnly.vue
new file mode 100644
index 0000000000..e48104f467
--- /dev/null
+++ b/test-workspace/tsc/cssModule/camelCaseOnly.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/test-workspace/tsc/cssModule/dashes.vue b/test-workspace/tsc/cssModule/dashes.vue
new file mode 100644
index 0000000000..ecbcf42ce6
--- /dev/null
+++ b/test-workspace/tsc/cssModule/dashes.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/test-workspace/tsc/cssModule/dashesOnly.vue b/test-workspace/tsc/cssModule/dashesOnly.vue
new file mode 100644
index 0000000000..782401d2f7
--- /dev/null
+++ b/test-workspace/tsc/cssModule/dashesOnly.vue
@@ -0,0 +1,19 @@
+
+
+
+
+