"scripts": {
"dev": "node scripts/dev.js",
"build": "node scripts/build.js",
- "build-dts": "tsc -p tsconfig.build-browser.json && tsc -p tsconfig.build-node.json && rollup -c rollup.dts.config.js",
+ "build-dts": "tsc -p tsconfig.build.json --noCheck && rollup -c rollup.dts.config.js",
"clean": "rimraf --glob packages/*/dist temp .eslintcache",
"size": "run-s \"size-*\" && tsx scripts/usage-size.ts",
"size-global": "node scripts/build.js vue runtime-dom -f global -p --size",
"todomvc-app-css": "^2.4.3",
"tslib": "^2.7.0",
"tsx": "^4.19.0",
- "typescript": "~5.5.4",
+ "typescript": "~5.6.2",
"typescript-eslint": "^8.4.0",
"vite": "catalog:",
"vitest": "^2.0.5"
--- /dev/null
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "isolatedDeclarations": false
+ },
+ "include": ["."]
+}
ElementTypes,
Namespaces,
NodeTypes,
+ type Property,
+ type SimpleExpressionNode,
type VNodeCall,
locStub,
} from '../src'
// e.g.
// - createObjectMatcher({ 'foo': '[bar]' }) matches { foo: bar }
// - createObjectMatcher({ '[foo]': 'bar' }) matches { [foo]: "bar" }
-export function createObjectMatcher(obj: Record<string, any>) {
+export function createObjectMatcher(obj: Record<string, any>): {
+ type: NodeTypes
+ properties: Partial<Property>[]
+} {
return {
type: NodeTypes.JS_OBJECT_EXPRESSION,
properties: Object.keys(obj).map(key => ({
type: NodeTypes.SIMPLE_EXPRESSION,
content: key.replace(bracketsRE, ''),
isStatic: !leadingBracketRE.test(key),
- },
+ } as SimpleExpressionNode,
value: isString(obj[key])
? {
type: NodeTypes.SIMPLE_EXPRESSION,
export function genFlagText(
flag: Flags | Flags[],
names: { [k: number]: string } = PatchFlagNames,
-) {
+): string {
if (isArray(flag)) {
let f = 0
flag.forEach(ff => {
type ForNode,
type InterpolationNode,
NodeTypes,
+ type RootNode,
type SimpleExpressionNode,
} from '../../src/ast'
import { ErrorCodes } from '../../src/errors'
export function parseWithForTransform(
template: string,
options: CompilerOptions = {},
-) {
+): {
+ root: RootNode
+ node: ForNode & { codegenNode: ForCodegenNode }
+} {
const ast = parse(template, options)
transform(ast, {
nodeTransforms: [
import {
type SFCParseOptions,
+ type SFCScriptBlock,
type SFCScriptCompileOptions,
compileScript,
parse,
src: string,
options?: Partial<SFCScriptCompileOptions>,
parseOptions?: SFCParseOptions,
-) {
+): SFCScriptBlock {
const { descriptor, errors } = parse(src, parseOptions)
if (errors.length) {
console.warn(errors[0])
})
}
-export function assertCode(code: string) {
+export function assertCode(code: string): void {
// parse the generated code to make sure it is valid
try {
babelParse(code, {
keys.add(key)
// prune oldest entry
if (max && keys.size > parseInt(max as string, 10)) {
- pruneCacheEntry(keys.values().next().value)
+ pruneCacheEntry(keys.values().next().value!)
}
}
// avoid vnode being unmounted
export const createApp = baseCreateApp as CreateAppFunction<TestElement>
// convenience for one-off render validations
-export function renderToString(vnode: VNode) {
+export function renderToString(vnode: VNode): string {
const root = nodeOps.createElement('div')
render(vnode, root)
return serializeInner(root)
let nodeId: number = 0
let recordedNodeOps: NodeOp[] = []
-export function logNodeOp(op: NodeOp) {
+export function logNodeOp(op: NodeOp): void {
recordedNodeOps.push(op)
}
-export function resetOps() {
+export function resetOps(): void {
recordedNodeOps = []
}
return node
}
-function setText(node: TestText, text: string) {
+function setText(node: TestText, text: string): void {
logNodeOp({
type: NodeOpTypes.SET_TEXT,
targetNode: node,
node.text = text
}
-function insert(child: TestNode, parent: TestElement, ref?: TestNode | null) {
+function insert(
+ child: TestNode,
+ parent: TestElement,
+ ref?: TestNode | null,
+): void {
let refIndex
if (ref) {
refIndex = parent.children.indexOf(ref)
}
}
-function remove(child: TestNode, logOp = true) {
+function remove(child: TestNode, logOp = true): void {
const parent = child.parentNode
if (parent) {
if (logOp) {
}
}
-function setElementText(el: TestElement, text: string) {
+function setElementText(el: TestElement, text: string): void {
logNodeOp({
type: NodeOpTypes.SET_ELEMENT_TEXT,
targetNode: el,
throw new Error('querySelector not supported in test renderer.')
}
-function setScopeId(el: TestElement, id: string) {
+function setScopeId(el: TestElement, id: string): void {
el.props[id] = ''
}
-export const nodeOps = {
+export const nodeOps: {
+ insert: typeof insert
+ remove: typeof remove
+ createElement: typeof createElement
+ createText: typeof createText
+ createComment: typeof createComment
+ setText: typeof setText
+ setElementText: typeof setElementText
+ parentNode: typeof parentNode
+ nextSibling: typeof nextSibling
+ querySelector: typeof querySelector
+ setScopeId: typeof setScopeId
+} = {
insert,
remove,
createElement,
key: string,
prevValue: any,
nextValue: any,
-) {
+): void {
logNodeOp({
type: NodeOpTypes.PATCH,
targetNode: el,
node: TestElement,
indent: number = 0,
depth: number = 0,
-) {
+): string {
const newLine = indent ? `\n` : ``
return node.children.length
? newLine +
el: TestElement,
event: string,
payload: any[] = [],
-) {
+): void {
const { eventListeners } = el
if (eventListeners) {
const listener = eventListeners[event]
target: Element,
event: string,
process?: (e: any) => any,
-) {
+): Event {
const e = new Event(event, {
bubbles: true,
cancelable: true,
}
}
-export function setupPuppeteer(args?: string[]) {
+interface PuppeteerUtils {
+ page: () => Page
+ click(selector: string, options?: ClickOptions): Promise<void>
+ count(selector: string): Promise<number>
+ text(selector: string): Promise<string | null>
+ value(selector: string): Promise<string>
+ html(selector: string): Promise<string>
+ classList(selector: string): Promise<string[]>
+ children(selector: string): Promise<any[]>
+ isVisible(selector: string): Promise<boolean>
+ isChecked(selector: string): Promise<boolean>
+ isFocused(selector: string): Promise<boolean>
+ setValue(selector: string, value: string): Promise<any>
+ typeValue(selector: string, value: string): Promise<any>
+ enterValue(selector: string, value: string): Promise<any>
+ clearValue(selector: string): Promise<any>
+ timeout(time: number): Promise<any>
+ nextFrame(): Promise<any>
+}
+
+export function setupPuppeteer(args?: string[]): PuppeteerUtils {
let browser: Browser
let page: Page
await browser.close()
})
- async function click(selector: string, options?: ClickOptions) {
+ async function click(
+ selector: string,
+ options?: ClickOptions,
+ ): Promise<void> {
await page.click(selector, options)
}
- async function count(selector: string) {
+ async function count(selector: string): Promise<number> {
return (await page.$$(selector)).length
}
- async function text(selector: string) {
- return await page.$eval(selector, node => node.textContent)
+ async function text(selector: string): Promise<string | null> {
+ return page.$eval(selector, node => node.textContent)
}
- async function value(selector: string) {
- return await page.$eval(selector, node => (node as HTMLInputElement).value)
+ async function value(selector: string): Promise<string> {
+ return page.$eval(selector, node => (node as HTMLInputElement).value)
}
- async function html(selector: string) {
- return await page.$eval(selector, node => node.innerHTML)
+ async function html(selector: string): Promise<string> {
+ return page.$eval(selector, node => node.innerHTML)
}
- async function classList(selector: string) {
- return await page.$eval(selector, (node: any) => [...node.classList])
+ async function classList(selector: string): Promise<string[]> {
+ return page.$eval(selector, (node: any) => [...node.classList])
}
- async function children(selector: string) {
- return await page.$eval(selector, (node: any) => [...node.children])
+ async function children(selector: string): Promise<any[]> {
+ return page.$eval(selector, (node: any) => [...node.children])
}
- async function isVisible(selector: string) {
+ async function isVisible(selector: string): Promise<boolean> {
const display = await page.$eval(selector, node => {
return window.getComputedStyle(node).display
})
version: 9.9.1
eslint-plugin-import-x:
specifier: ^3.1.0
- version: 3.1.0(eslint@9.9.1)(typescript@5.5.4)
+ version: 3.1.0(eslint@9.9.1)(typescript@5.6.2)
eslint-plugin-vitest:
specifier: ^0.5.4
- version: 0.5.4(eslint@9.9.1)(typescript@5.5.4)(vitest@2.0.5(@types/node@20.16.5)(jsdom@25.0.0)(sass@1.78.0))
+ version: 0.5.4(eslint@9.9.1)(typescript@5.6.2)(vitest@2.0.5(@types/node@20.16.5)(jsdom@25.0.0)(sass@1.78.0))
estree-walker:
specifier: 'catalog:'
version: 2.0.2
version: 3.0.3
puppeteer:
specifier: ~23.3.0
- version: 23.3.0(typescript@5.5.4)
+ version: 23.3.0(typescript@5.6.2)
rimraf:
specifier: ^6.0.1
version: 6.0.1
version: 4.21.2
rollup-plugin-dts:
specifier: ^6.1.1
- version: 6.1.1(rollup@4.21.2)(typescript@5.5.4)
+ version: 6.1.1(rollup@4.21.2)(typescript@5.6.2)
rollup-plugin-esbuild:
specifier: ^6.1.1
version: 6.1.1(esbuild@0.23.1)(rollup@4.21.2)
specifier: ^4.19.0
version: 4.19.0
typescript:
- specifier: ~5.5.4
- version: 5.5.4
+ specifier: ~5.6.2
+ version: 5.6.2
typescript-eslint:
specifier: ^8.4.0
- version: 8.4.0(eslint@9.9.1)(typescript@5.5.4)
+ version: 8.4.0(eslint@9.9.1)(typescript@5.6.2)
vite:
specifier: 'catalog:'
version: 5.4.0(@types/node@20.16.5)(sass@1.78.0)
engines: {node: '>=14.17'}
hasBin: true
+ typescript@5.6.2:
+ resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
uglify-js@3.19.1:
resolution: {integrity: sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A==}
engines: {node: '>=0.8.0'}
'@types/node': 20.16.5
optional: true
- '@typescript-eslint/eslint-plugin@8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)':
+ '@typescript-eslint/eslint-plugin@8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.6.2))(eslint@9.9.1)(typescript@5.6.2)':
dependencies:
'@eslint-community/regexpp': 4.11.0
- '@typescript-eslint/parser': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/parser': 8.4.0(eslint@9.9.1)(typescript@5.6.2)
'@typescript-eslint/scope-manager': 8.4.0
- '@typescript-eslint/type-utils': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
- '@typescript-eslint/utils': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/type-utils': 8.4.0(eslint@9.9.1)(typescript@5.6.2)
+ '@typescript-eslint/utils': 8.4.0(eslint@9.9.1)(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.4.0
eslint: 9.9.1
graphemer: 1.4.0
ignore: 5.3.1
natural-compare: 1.4.0
- ts-api-utils: 1.3.0(typescript@5.5.4)
+ ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
- typescript: 5.5.4
+ typescript: 5.6.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4)':
+ '@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.6.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.4.0
'@typescript-eslint/types': 8.4.0
- '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4)
+ '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 8.4.0
debug: 4.3.6
eslint: 9.9.1
optionalDependencies:
- typescript: 5.5.4
+ typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types': 8.4.0
'@typescript-eslint/visitor-keys': 8.4.0
- '@typescript-eslint/type-utils@8.4.0(eslint@9.9.1)(typescript@5.5.4)':
+ '@typescript-eslint/type-utils@8.4.0(eslint@9.9.1)(typescript@5.6.2)':
dependencies:
- '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4)
- '@typescript-eslint/utils': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.6.2)
+ '@typescript-eslint/utils': 8.4.0(eslint@9.9.1)(typescript@5.6.2)
debug: 4.3.6
- ts-api-utils: 1.3.0(typescript@5.5.4)
+ ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
- typescript: 5.5.4
+ typescript: 5.6.2
transitivePeerDependencies:
- eslint
- supports-color
'@typescript-eslint/types@8.4.0': {}
- '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)':
+ '@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.2)':
dependencies:
'@typescript-eslint/types': 7.18.0
'@typescript-eslint/visitor-keys': 7.18.0
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.6.3
- ts-api-utils: 1.3.0(typescript@5.5.4)
+ ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
- typescript: 5.5.4
+ typescript: 5.6.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/typescript-estree@8.4.0(typescript@5.5.4)':
+ '@typescript-eslint/typescript-estree@8.4.0(typescript@5.6.2)':
dependencies:
'@typescript-eslint/types': 8.4.0
'@typescript-eslint/visitor-keys': 8.4.0
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.6.3
- ts-api-utils: 1.3.0(typescript@5.5.4)
+ ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
- typescript: 5.5.4
+ typescript: 5.6.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@7.18.0(eslint@9.9.1)(typescript@5.5.4)':
+ '@typescript-eslint/utils@7.18.0(eslint@9.9.1)(typescript@5.6.2)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1)
'@typescript-eslint/scope-manager': 7.18.0
'@typescript-eslint/types': 7.18.0
- '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
+ '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2)
eslint: 9.9.1
transitivePeerDependencies:
- supports-color
- typescript
- '@typescript-eslint/utils@8.4.0(eslint@9.9.1)(typescript@5.5.4)':
+ '@typescript-eslint/utils@8.4.0(eslint@9.9.1)(typescript@5.6.2)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1)
'@typescript-eslint/scope-manager': 8.4.0
'@typescript-eslint/types': 8.4.0
- '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4)
+ '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.6.2)
eslint: 9.9.1
transitivePeerDependencies:
- supports-color
core-util-is@1.0.3: {}
- cosmiconfig@9.0.0(typescript@5.5.4):
+ cosmiconfig@9.0.0(typescript@5.6.2):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.0
js-yaml: 4.1.0
parse-json: 5.2.0
optionalDependencies:
- typescript: 5.5.4
+ typescript: 5.6.2
cross-spawn@7.0.3:
dependencies:
transitivePeerDependencies:
- supports-color
- eslint-plugin-import-x@3.1.0(eslint@9.9.1)(typescript@5.5.4):
+ eslint-plugin-import-x@3.1.0(eslint@9.9.1)(typescript@5.6.2):
dependencies:
- '@typescript-eslint/utils': 7.18.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/utils': 7.18.0(eslint@9.9.1)(typescript@5.6.2)
debug: 4.3.6
doctrine: 3.0.0
eslint: 9.9.1
- supports-color
- typescript
- eslint-plugin-vitest@0.5.4(eslint@9.9.1)(typescript@5.5.4)(vitest@2.0.5(@types/node@20.16.5)(jsdom@25.0.0)(sass@1.78.0)):
+ eslint-plugin-vitest@0.5.4(eslint@9.9.1)(typescript@5.6.2)(vitest@2.0.5(@types/node@20.16.5)(jsdom@25.0.0)(sass@1.78.0)):
dependencies:
- '@typescript-eslint/utils': 7.18.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/utils': 7.18.0(eslint@9.9.1)(typescript@5.6.2)
eslint: 9.9.1
optionalDependencies:
vitest: 2.0.5(@types/node@20.16.5)(jsdom@25.0.0)(sass@1.78.0)
- supports-color
- utf-8-validate
- puppeteer@23.3.0(typescript@5.5.4):
+ puppeteer@23.3.0(typescript@5.6.2):
dependencies:
'@puppeteer/browsers': 2.4.0
chromium-bidi: 0.6.5(devtools-protocol@0.0.1330662)
- cosmiconfig: 9.0.0(typescript@5.5.4)
+ cosmiconfig: 9.0.0(typescript@5.6.2)
devtools-protocol: 0.0.1330662
puppeteer-core: 23.3.0
typed-query-selector: 2.12.0
glob: 11.0.0
package-json-from-dist: 1.0.0
- rollup-plugin-dts@6.1.1(rollup@4.21.2)(typescript@5.5.4):
+ rollup-plugin-dts@6.1.1(rollup@4.21.2)(typescript@5.6.2):
dependencies:
magic-string: 0.30.11
rollup: 4.21.2
- typescript: 5.5.4
+ typescript: 5.6.2
optionalDependencies:
'@babel/code-frame': 7.24.7
dependencies:
punycode: 2.3.1
- ts-api-utils@1.3.0(typescript@5.5.4):
+ ts-api-utils@1.3.0(typescript@5.6.2):
dependencies:
- typescript: 5.5.4
+ typescript: 5.6.2
tslib@2.7.0: {}
typed-query-selector@2.12.0: {}
- typescript-eslint@8.4.0(eslint@9.9.1)(typescript@5.5.4):
+ typescript-eslint@8.4.0(eslint@9.9.1)(typescript@5.6.2):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)
- '@typescript-eslint/parser': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
- '@typescript-eslint/utils': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/eslint-plugin': 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.6.2))(eslint@9.9.1)(typescript@5.6.2)
+ '@typescript-eslint/parser': 8.4.0(eslint@9.9.1)(typescript@5.6.2)
+ '@typescript-eslint/utils': 8.4.0(eslint@9.9.1)(typescript@5.6.2)
optionalDependencies:
- typescript: 5.5.4
+ typescript: 5.6.2
transitivePeerDependencies:
- eslint
- supports-color
typescript@5.5.4: {}
+ typescript@5.6.2: {}
+
uglify-js@3.19.1:
optional: true
+++ /dev/null
-{
- "extends": "./tsconfig.json",
- "compilerOptions": {
- "types": ["node"],
- "declaration": true,
- "emitDeclarationOnly": true,
- "stripInternal": true,
- "composite": false
- },
- "include": [
- "packages/global.d.ts",
- "packages/compiler-sfc/src",
- "packages/compiler-ssr/src",
- "packages/server-renderer/src"
- ]
-}
{
"extends": "./tsconfig.json",
"compilerOptions": {
- "types": [],
+ "types": ["node"],
"declaration": true,
"emitDeclarationOnly": true,
"stripInternal": true,
"packages/runtime-core/src",
"packages/runtime-dom/src",
"packages/reactivity/src",
- "packages/shared/src"
+ "packages/shared/src",
+ "packages/global.d.ts",
+ "packages/compiler-sfc/src",
+ "packages/compiler-ssr/src",
+ "packages/server-renderer/src"
]
}
"include": [
"packages/global.d.ts",
"packages/*/src",
- "packages-private/*/src",
- "packages/runtime-dom/types/jsx.d.ts",
"packages/*/__tests__",
- "packages-private/dts-test",
"packages/vue/jsx-runtime",
+ "packages/runtime-dom/types/jsx.d.ts",
"scripts/*",
"rollup.*.js"
],